module.exports = `KGZ1bmN0aW9uKHdBLGQwKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPWQwKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZDApOih3QT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp3QXx8c2VsZix3QS5tZXJtYWlkPWQwKCkpfSkodGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB3QShpKXtmb3IodmFyIGE9W10sZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTt2YXIgcD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7cFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHY9cC5yZWR1Y2UoZnVuY3Rpb24oRSxfKXt2YXIgTD1fLm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIEw/RS5jb25jYXQoTC5tYXAoZnVuY3Rpb24oTil7dmFyIEIsajtyZXR1cm4oaj0oQj1OLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxCPT09dm9pZCAwP3ZvaWQgMDpCLmxlbmd0aCkhPT1udWxsJiZqIT09dm9pZCAwP2o6MH0pKTpFfSxbXSk7aWYodi5sZW5ndGgpe3ZhciBtPW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCx2KSsifSIsImciKTtwPXAubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnJlcGxhY2UobSxgCmApfSl9cFswXT1wWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPXBbMF07cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihFLF8pe3ZhciBMPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxOPUw/TFsxXToiIixCPUU7dHlwZW9mIEU9PSJzdHJpbmciJiZFLmluY2x1ZGVzKGAKYCkmJihCPVN0cmluZyhFKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihqLFIpe3JldHVybiBSPT09MD9qOiIiK04ran0pLmpvaW4oYApgKSksYis9QitwW18rMV19KSxifXZhciBkMD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIEI3KGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIElMdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7dmFyIGY9MWUzLHA9NmU0LHY9MzZlNSxtPSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIixFPSJtaW51dGUiLF89ImhvdXIiLEw9ImRheSIsTj0id2VlayIsQj0ibW9udGgiLGo9InF1YXJ0ZXIiLFI9InllYXIiLHo9ImRhdGUiLEs9IkludmFsaWQgRGF0ZSIsaXQ9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sc3Q9L1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyx1dD17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihudCl7dmFyIE90PVsidGgiLCJzdCIsIm5kIiwicmQiXSxOdD1udCUxMDA7cmV0dXJuIlsiK250KyhPdFsoTnQtMjApJTEwXXx8T3RbTnRdfHxPdFswXSkrIl0ifX0sYnQ9ZnVuY3Rpb24obnQsT3QsTnQpe3ZhciBxdD1TdHJpbmcobnQpO3JldHVybiFxdHx8cXQubGVuZ3RoPj1PdD9udDoiIitBcnJheShPdCsxLXF0Lmxlbmd0aCkuam9pbihOdCkrbnR9LG10PXtzOmJ0LHo6ZnVuY3Rpb24obnQpe3ZhciBPdD0tbnQudXRjT2Zmc2V0KCksTnQ9TWF0aC5hYnMoT3QpLHF0PU1hdGguZmxvb3IoTnQvNjApLEN0PU50JTYwO3JldHVybihPdDw9MD8iKyI6Ii0iKStidChxdCwyLCIwIikrIjoiK2J0KEN0LDIsIjAiKX0sbTpmdW5jdGlvbiBudChPdCxOdCl7aWYoT3QuZGF0ZSgpPE50LmRhdGUoKSlyZXR1cm4tbnQoTnQsT3QpO3ZhciBxdD0xMiooTnQueWVhcigpLU90LnllYXIoKSkrKE50Lm1vbnRoKCktT3QubW9udGgoKSksQ3Q9T3QuY2xvbmUoKS5hZGQocXQsQiksWj1OdC1DdDwwLFR0PU90LmNsb25lKCkuYWRkKHF0KyhaPy0xOjEpLEIpO3JldHVybisoLShxdCsoTnQtQ3QpLyhaP0N0LVR0OlR0LUN0KSl8fDApfSxhOmZ1bmN0aW9uKG50KXtyZXR1cm4gbnQ8MD9NYXRoLmNlaWwobnQpfHwwOk1hdGguZmxvb3IobnQpfSxwOmZ1bmN0aW9uKG50KXtyZXR1cm57TTpCLHk6Uix3Ok4sZDpMLEQ6eixoOl8sbTpFLHM6YixtczptLFE6an1bbnRdfHxTdHJpbmcobnR8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24obnQpe3JldHVybiBudD09PXZvaWQgMH19LHl0PSJlbiIsZHQ9e307ZHRbeXRdPXV0O3ZhciBodD1mdW5jdGlvbihudCl7cmV0dXJuIG50IGluc3RhbmNlb2YgVX0sd3Q9ZnVuY3Rpb24gbnQoT3QsTnQscXQpe3ZhciBDdDtpZighT3QpcmV0dXJuIHl0O2lmKHR5cGVvZiBPdD09InN0cmluZyIpe3ZhciBaPU90LnRvTG93ZXJDYXNlKCk7ZHRbWl0mJihDdD1aKSxOdCYmKGR0W1pdPU50LEN0PVopO3ZhciBUdD1PdC5zcGxpdCgiLSIpO2lmKCFDdCYmVHQubGVuZ3RoPjEpcmV0dXJuIG50KFR0WzBdKX1lbHNle3ZhciBIdD1PdC5uYW1lO2R0W0h0XT1PdCxDdD1IdH1yZXR1cm4hcXQmJkN0JiYoeXQ9Q3QpLEN0fHwhcXQmJnl0fSxYPWZ1bmN0aW9uKG50LE90KXtpZihodChudCkpcmV0dXJuIG50LmNsb25lKCk7dmFyIE50PXR5cGVvZiBPdD09Im9iamVjdCI/T3Q6e307cmV0dXJuIE50LmRhdGU9bnQsTnQuYXJncz1hcmd1bWVudHMsbmV3IFUoTnQpfSxwdD1tdDtwdC5sPXd0LHB0Lmk9aHQscHQudz1mdW5jdGlvbihudCxPdCl7cmV0dXJuIFgobnQse2xvY2FsZTpPdC4kTCx1dGM6T3QuJHUseDpPdC4keCwkb2Zmc2V0Ok90LiRvZmZzZXR9KX07dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBudChOdCl7dGhpcy4kTD13dChOdC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShOdCl9dmFyIE90PW50LnByb3RvdHlwZTtyZXR1cm4gT3QucGFyc2U9ZnVuY3Rpb24oTnQpe3RoaXMuJGQ9ZnVuY3Rpb24ocXQpe3ZhciBDdD1xdC5kYXRlLFo9cXQudXRjO2lmKEN0PT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihwdC51KEN0KSlyZXR1cm4gbmV3IERhdGU7aWYoQ3QgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShDdCk7aWYodHlwZW9mIEN0PT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoQ3QpKXt2YXIgVHQ9Q3QubWF0Y2goaXQpO2lmKFR0KXt2YXIgSHQ9VHRbMl0tMXx8MCxJdD0oVHRbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIFo/bmV3IERhdGUoRGF0ZS5VVEMoVHRbMV0sSHQsVHRbM118fDEsVHRbNF18fDAsVHRbNV18fDAsVHRbNl18fDAsSXQpKTpuZXcgRGF0ZShUdFsxXSxIdCxUdFszXXx8MSxUdFs0XXx8MCxUdFs1XXx8MCxUdFs2XXx8MCxJdCl9fXJldHVybiBuZXcgRGF0ZShDdCl9KE50KSx0aGlzLiR4PU50Lnh8fHt9LHRoaXMuaW5pdCgpfSxPdC5pbml0PWZ1bmN0aW9uKCl7dmFyIE50PXRoaXMuJGQ7dGhpcy4keT1OdC5nZXRGdWxsWWVhcigpLHRoaXMuJE09TnQuZ2V0TW9udGgoKSx0aGlzLiREPU50LmdldERhdGUoKSx0aGlzLiRXPU50LmdldERheSgpLHRoaXMuJEg9TnQuZ2V0SG91cnMoKSx0aGlzLiRtPU50LmdldE1pbnV0ZXMoKSx0aGlzLiRzPU50LmdldFNlY29uZHMoKSx0aGlzLiRtcz1OdC5nZXRNaWxsaXNlY29uZHMoKX0sT3QuJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuIHB0fSxPdC5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9TdHJpbmcoKSE9PUt9LE90LmlzU2FtZT1mdW5jdGlvbihOdCxxdCl7dmFyIEN0PVgoTnQpO3JldHVybiB0aGlzLnN0YXJ0T2YocXQpPD1DdCYmQ3Q8PXRoaXMuZW5kT2YocXQpfSxPdC5pc0FmdGVyPWZ1bmN0aW9uKE50LHF0KXtyZXR1cm4gWChOdCk8dGhpcy5zdGFydE9mKHF0KX0sT3QuaXNCZWZvcmU9ZnVuY3Rpb24oTnQscXQpe3JldHVybiB0aGlzLmVuZE9mKHF0KTxYKE50KX0sT3QuJGc9ZnVuY3Rpb24oTnQscXQsQ3Qpe3JldHVybiBwdC51KE50KT90aGlzW3F0XTp0aGlzLnNldChDdCxOdCl9LE90LnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxPdC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxPdC5zdGFydE9mPWZ1bmN0aW9uKE50LHF0KXt2YXIgQ3Q9dGhpcyxaPSEhcHQudShxdCl8fHF0LFR0PXB0LnAoTnQpLEh0PWZ1bmN0aW9uKEtlLHdlKXt2YXIgX2U9cHQudyhDdC4kdT9EYXRlLlVUQyhDdC4keSx3ZSxLZSk6bmV3IERhdGUoQ3QuJHksd2UsS2UpLEN0KTtyZXR1cm4gWj9fZTpfZS5lbmRPZihMKX0sSXQ9ZnVuY3Rpb24oS2Usd2Upe3JldHVybiBwdC53KEN0LnRvRGF0ZSgpW0tlXS5hcHBseShDdC50b0RhdGUoInMiKSwoWj9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKHdlKSksQ3QpfSxGdD10aGlzLiRXLGtlPXRoaXMuJE0scG49dGhpcy4kRCxNZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKFR0KXtjYXNlIFI6cmV0dXJuIFo/SHQoMSwwKTpIdCgzMSwxMSk7Y2FzZSBCOnJldHVybiBaP0h0KDEsa2UpOkh0KDAsa2UrMSk7Y2FzZSBOOnZhciB2ZT10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsR2U9KEZ0PHZlP0Z0Kzc6RnQpLXZlO3JldHVybiBIdChaP3BuLUdlOnBuKyg2LUdlKSxrZSk7Y2FzZSBMOmNhc2UgejpyZXR1cm4gSXQoTWUrIkhvdXJzIiwwKTtjYXNlIF86cmV0dXJuIEl0KE1lKyJNaW51dGVzIiwxKTtjYXNlIEU6cmV0dXJuIEl0KE1lKyJTZWNvbmRzIiwyKTtjYXNlIGI6cmV0dXJuIEl0KE1lKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LE90LmVuZE9mPWZ1bmN0aW9uKE50KXtyZXR1cm4gdGhpcy5zdGFydE9mKE50LCExKX0sT3QuJHNldD1mdW5jdGlvbihOdCxxdCl7dmFyIEN0LFo9cHQucChOdCksVHQ9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpLEh0PShDdD17fSxDdFtMXT1UdCsiRGF0ZSIsQ3Rbel09VHQrIkRhdGUiLEN0W0JdPVR0KyJNb250aCIsQ3RbUl09VHQrIkZ1bGxZZWFyIixDdFtfXT1UdCsiSG91cnMiLEN0W0VdPVR0KyJNaW51dGVzIixDdFtiXT1UdCsiU2Vjb25kcyIsQ3RbbV09VHQrIk1pbGxpc2Vjb25kcyIsQ3QpW1pdLEl0PVo9PT1MP3RoaXMuJEQrKHF0LXRoaXMuJFcpOnF0O2lmKFo9PT1CfHxaPT09Uil7dmFyIEZ0PXRoaXMuY2xvbmUoKS5zZXQoeiwxKTtGdC4kZFtIdF0oSXQpLEZ0LmluaXQoKSx0aGlzLiRkPUZ0LnNldCh6LE1hdGgubWluKHRoaXMuJEQsRnQuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgSHQmJnRoaXMuJGRbSHRdKEl0KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sT3Quc2V0PWZ1bmN0aW9uKE50LHF0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoTnQscXQpfSxPdC5nZXQ9ZnVuY3Rpb24oTnQpe3JldHVybiB0aGlzW3B0LnAoTnQpXSgpfSxPdC5hZGQ9ZnVuY3Rpb24oTnQscXQpe3ZhciBDdCxaPXRoaXM7TnQ9TnVtYmVyKE50KTt2YXIgVHQ9cHQucChxdCksSHQ9ZnVuY3Rpb24oa2Upe3ZhciBwbj1YKFopO3JldHVybiBwdC53KHBuLmRhdGUocG4uZGF0ZSgpK01hdGgucm91bmQoa2UqTnQpKSxaKX07aWYoVHQ9PT1CKXJldHVybiB0aGlzLnNldChCLHRoaXMuJE0rTnQpO2lmKFR0PT09UilyZXR1cm4gdGhpcy5zZXQoUix0aGlzLiR5K050KTtpZihUdD09PUwpcmV0dXJuIEh0KDEpO2lmKFR0PT09TilyZXR1cm4gSHQoNyk7dmFyIEl0PShDdD17fSxDdFtFXT1wLEN0W19dPXYsQ3RbYl09ZixDdClbVHRdfHwxLEZ0PXRoaXMuJGQuZ2V0VGltZSgpK050Kkl0O3JldHVybiBwdC53KEZ0LHRoaXMpfSxPdC5zdWJ0cmFjdD1mdW5jdGlvbihOdCxxdCl7cmV0dXJuIHRoaXMuYWRkKC0xKk50LHF0KX0sT3QuZm9ybWF0PWZ1bmN0aW9uKE50KXt2YXIgcXQ9dGhpcyxDdD10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIEN0LmludmFsaWREYXRlfHxLO3ZhciBaPU50fHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLFR0PXB0LnoodGhpcyksSHQ9dGhpcy4kSCxJdD10aGlzLiRtLEZ0PXRoaXMuJE0sa2U9Q3Qud2Vla2RheXMscG49Q3QubW9udGhzLE1lPWZ1bmN0aW9uKHdlLF9lLCR0LHJlKXtyZXR1cm4gd2UmJih3ZVtfZV18fHdlKHF0LFopKXx8JHRbX2VdLnNsaWNlKDAscmUpfSx2ZT1mdW5jdGlvbih3ZSl7cmV0dXJuIHB0LnMoSHQlMTJ8fDEyLHdlLCIwIil9LEdlPUN0Lm1lcmlkaWVtfHxmdW5jdGlvbih3ZSxfZSwkdCl7dmFyIHJlPXdlPDEyPyJBTSI6IlBNIjtyZXR1cm4gJHQ/cmUudG9Mb3dlckNhc2UoKTpyZX0sS2U9e1lZOlN0cmluZyh0aGlzLiR5KS5zbGljZSgtMiksWVlZWTp0aGlzLiR5LE06RnQrMSxNTTpwdC5zKEZ0KzEsMiwiMCIpLE1NTTpNZShDdC5tb250aHNTaG9ydCxGdCxwbiwzKSxNTU1NOk1lKHBuLEZ0KSxEOnRoaXMuJEQsREQ6cHQucyh0aGlzLiRELDIsIjAiKSxkOlN0cmluZyh0aGlzLiRXKSxkZDpNZShDdC53ZWVrZGF5c01pbix0aGlzLiRXLGtlLDIpLGRkZDpNZShDdC53ZWVrZGF5c1Nob3J0LHRoaXMuJFcsa2UsMyksZGRkZDprZVt0aGlzLiRXXSxIOlN0cmluZyhIdCksSEg6cHQucyhIdCwyLCIwIiksaDp2ZSgxKSxoaDp2ZSgyKSxhOkdlKEh0LEl0LCEwKSxBOkdlKEh0LEl0LCExKSxtOlN0cmluZyhJdCksbW06cHQucyhJdCwyLCIwIiksczpTdHJpbmcodGhpcy4kcyksc3M6cHQucyh0aGlzLiRzLDIsIjAiKSxTU1M6cHQucyh0aGlzLiRtcywzLCIwIiksWjpUdH07cmV0dXJuIFoucmVwbGFjZShzdCxmdW5jdGlvbih3ZSxfZSl7cmV0dXJuIF9lfHxLZVt3ZV18fFR0LnJlcGxhY2UoIjoiLCIiKX0pfSxPdC51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sT3QuZGlmZj1mdW5jdGlvbihOdCxxdCxDdCl7dmFyIFosVHQ9cHQucChxdCksSHQ9WChOdCksSXQ9KEh0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKnAsRnQ9dGhpcy1IdCxrZT1wdC5tKHRoaXMsSHQpO3JldHVybiBrZT0oWj17fSxaW1JdPWtlLzEyLFpbQl09a2UsWltqXT1rZS8zLFpbTl09KEZ0LUl0KS82MDQ4ZTUsWltMXT0oRnQtSXQpLzg2NGU1LFpbX109RnQvdixaW0VdPUZ0L3AsWltiXT1GdC9mLFopW1R0XXx8RnQsQ3Q/a2U6cHQuYShrZSl9LE90LmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoQikuJER9LE90LiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZHRbdGhpcy4kTF19LE90LmxvY2FsZT1mdW5jdGlvbihOdCxxdCl7aWYoIU50KXJldHVybiB0aGlzLiRMO3ZhciBDdD10aGlzLmNsb25lKCksWj13dChOdCxxdCwhMCk7cmV0dXJuIFomJihDdC4kTD1aKSxDdH0sT3QuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gcHQudyh0aGlzLiRkLHRoaXMpfSxPdC50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxPdC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LE90LnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sT3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxudH0oKSx4dD1VLnByb3RvdHlwZTtyZXR1cm4gWC5wcm90b3R5cGU9eHQsW1siJG1zIixtXSxbIiRzIixiXSxbIiRtIixFXSxbIiRIIixfXSxbIiRXIixMXSxbIiRNIixCXSxbIiR5IixSXSxbIiREIix6XV0uZm9yRWFjaChmdW5jdGlvbihudCl7eHRbbnRbMV1dPWZ1bmN0aW9uKE90KXtyZXR1cm4gdGhpcy4kZyhPdCxudFswXSxudFsxXSl9fSksWC5leHRlbmQ9ZnVuY3Rpb24obnQsT3Qpe3JldHVybiBudC4kaXx8KG50KE90LFUsWCksbnQuJGk9ITApLFh9LFgubG9jYWxlPXd0LFguaXNEYXlqcz1odCxYLnVuaXg9ZnVuY3Rpb24obnQpe3JldHVybiBYKDFlMypudCl9LFguZW49ZHRbeXRdLFguTHM9ZHQsWC5wPXt9LFh9KX0pKElMdCk7dmFyIEc1ZT1JTHQuZXhwb3J0cztjb25zdCBnMD1CNyhHNWUpLGQ1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFV0PXt0cmFjZTooLi4uaSk9Pnt9LGRlYnVnOiguLi5pKT0+e30saW5mbzooLi4uaSk9Pnt9LHdhcm46KC4uLmkpPT57fSxlcnJvcjooLi4uaSk9Pnt9LGZhdGFsOiguLi5pKT0+e319LGpmdD1mdW5jdGlvbihpPSJmYXRhbCIpe2xldCBhPWQ1LmZhdGFsO3R5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLnRvTG93ZXJDYXNlKCksaSBpbiBkNSYmKGE9ZDVbaV0pKTp0eXBlb2YgaT09Im51bWJlciImJihhPWkpLFV0LnRyYWNlPSgpPT57fSxVdC5kZWJ1Zz0oKT0+e30sVXQuaW5mbz0oKT0+e30sVXQud2Fybj0oKT0+e30sVXQuZXJyb3I9KCk9Pnt9LFV0LmZhdGFsPSgpPT57fSxhPD1kNS5mYXRhbCYmKFV0LmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsVzIoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzVtIixXMigiRkFUQUwiKSkpLGE8PWQ1LmVycm9yJiYoVXQuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxXMigiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLFcyKCJFUlJPUiIpKSksYTw9ZDUud2FybiYmKFV0Lndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsVzIoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLFcyKCJXQVJOIikpKSxhPD1kNS5pbmZvJiYoVXQuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxXMigiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM0bSIsVzIoIklORk8iKSkpLGE8PWQ1LmRlYnVnJiYoVXQuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxXMigiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixXMigiREVCVUciKSkpLGE8PWQ1LnRyYWNlJiYoVXQudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxXMigiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixXMigiVFJBQ0UiKSkpfSxXMj1pPT5gJWMke2cwKCkuZm9ybWF0KCJzcy5TU1MiKX0gOiAke2l9IDogYDt2YXIgJGZ0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkZnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBRNj0kZnQuc2FuaXRpemVVcmw9dm9pZCAwLFY1ZT0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW0sVTVlPS8mIyhcdyspKF5cd3w7KT8vZyxXNWU9LyYobmV3bGluZXx0YWIpOy9naSxLNWU9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbSxZNWU9L14uKyg6fCZjb2xvbjspL2dpbSxYNWU9WyIuIiwiLyJdO2Z1bmN0aW9uIFE1ZShpKXtyZXR1cm4gWDVlLmluZGV4T2YoaVswXSk+LTF9ZnVuY3Rpb24gWjVlKGkpe3JldHVybiBpLnJlcGxhY2UoVTVlLGZ1bmN0aW9uKGEsZil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZil9KX1mdW5jdGlvbiBKNWUoaSl7dmFyIGE9WjVlKGl8fCIiKS5yZXBsYWNlKFc1ZSwiIikucmVwbGFjZShLNWUsIiIpLnRyaW0oKTtpZighYSlyZXR1cm4iYWJvdXQ6YmxhbmsiO2lmKFE1ZShhKSlyZXR1cm4gYTt2YXIgZj1hLm1hdGNoKFk1ZSk7aWYoIWYpcmV0dXJuIGE7dmFyIHA9ZlswXTtyZXR1cm4gVjVlLnRlc3QocCk/ImFib3V0OmJsYW5rIjphfVE2PSRmdC5zYW5pdGl6ZVVybD1KNWU7ZnVuY3Rpb24gZlUoaSxhKXtyZXR1cm4gaT09bnVsbHx8YT09bnVsbD9OYU46aTxhPy0xOmk+YT8xOmk+PWE/MDpOYU59ZnVuY3Rpb24gdHhlKGksYSl7cmV0dXJuIGk9PW51bGx8fGE9PW51bGw/TmFOOmE8aT8tMTphPmk/MTphPj1pPzA6TmFOfWZ1bmN0aW9uIHpmdChpKXtsZXQgYSxmLHA7aS5sZW5ndGghPT0yPyhhPWZVLGY9KEUsXyk9PmZVKGkoRSksXykscD0oRSxfKT0+aShFKS1fKTooYT1pPT09ZlV8fGk9PT10eGU/aTpleGUsZj1pLHA9aSk7ZnVuY3Rpb24gdihFLF8sTD0wLE49RS5sZW5ndGgpe2lmKEw8Til7aWYoYShfLF8pIT09MClyZXR1cm4gTjtkb3tjb25zdCBCPUwrTj4+PjE7ZihFW0JdLF8pPDA/TD1CKzE6Tj1CfXdoaWxlKEw8Til9cmV0dXJuIEx9ZnVuY3Rpb24gbShFLF8sTD0wLE49RS5sZW5ndGgpe2lmKEw8Til7aWYoYShfLF8pIT09MClyZXR1cm4gTjtkb3tjb25zdCBCPUwrTj4+PjE7ZihFW0JdLF8pPD0wP0w9QisxOk49Qn13aGlsZShMPE4pfXJldHVybiBMfWZ1bmN0aW9uIGIoRSxfLEw9MCxOPUUubGVuZ3RoKXtjb25zdCBCPXYoRSxfLEwsTi0xKTtyZXR1cm4gQj5MJiZwKEVbQi0xXSxfKT4tcChFW0JdLF8pP0ItMTpCfXJldHVybntsZWZ0OnYsY2VudGVyOmIscmlnaHQ6bX19ZnVuY3Rpb24gZXhlKCl7cmV0dXJuIDB9ZnVuY3Rpb24gbnhlKGkpe3JldHVybiBpPT09bnVsbD9OYU46K2l9Y29uc3QgcnhlPXpmdChmVSkucmlnaHQ7emZ0KG54ZSkuY2VudGVyO2NvbnN0IGl4ZT1yeGU7Y2xhc3MgREx0IGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKGEsZj1veGUpe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6Zn19KSxhIT1udWxsKWZvcihjb25zdFtwLHZdb2YgYSl0aGlzLnNldChwLHYpfWdldChhKXtyZXR1cm4gc3VwZXIuZ2V0KE9MdCh0aGlzLGEpKX1oYXMoYSl7cmV0dXJuIHN1cGVyLmhhcyhPTHQodGhpcyxhKSl9c2V0KGEsZil7cmV0dXJuIHN1cGVyLnNldChzeGUodGhpcyxhKSxmKX1kZWxldGUoYSl7cmV0dXJuIHN1cGVyLmRlbGV0ZShheGUodGhpcyxhKSl9fWZ1bmN0aW9uIE9MdCh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTpmfWZ1bmN0aW9uIHN4ZSh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTooaS5zZXQocCxmKSxmKX1mdW5jdGlvbiBheGUoe19pbnRlcm46aSxfa2V5OmF9LGYpe2NvbnN0IHA9YShmKTtyZXR1cm4gaS5oYXMocCkmJihmPWkuZ2V0KHApLGkuZGVsZXRlKHApKSxmfWZ1bmN0aW9uIG94ZShpKXtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0Ij9pLnZhbHVlT2YoKTppfXZhciBxZnQ9TWF0aC5zcXJ0KDUwKSxIZnQ9TWF0aC5zcXJ0KDEwKSxHZnQ9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGN4ZShpLGEsZil7dmFyIHAsdj0tMSxtLGIsRTtpZihhPSthLGk9K2ksZj0rZixpPT09YSYmZj4wKXJldHVybltpXTtpZigocD1hPGkpJiYobT1pLGk9YSxhPW0pLChFPU5MdChpLGEsZikpPT09MHx8IWlzRmluaXRlKEUpKXJldHVybltdO2lmKEU+MCl7bGV0IF89TWF0aC5yb3VuZChpL0UpLEw9TWF0aC5yb3VuZChhL0UpO2ZvcihfKkU8aSYmKytfLEwqRT5hJiYtLUwsYj1uZXcgQXJyYXkobT1MLV8rMSk7Kyt2PG07KWJbdl09KF8rdikqRX1lbHNle0U9LUU7bGV0IF89TWF0aC5yb3VuZChpKkUpLEw9TWF0aC5yb3VuZChhKkUpO2ZvcihfL0U8aSYmKytfLEwvRT5hJiYtLUwsYj1uZXcgQXJyYXkobT1MLV8rMSk7Kyt2PG07KWJbdl09KF8rdikvRX1yZXR1cm4gcCYmYi5yZXZlcnNlKCksYn1mdW5jdGlvbiBOTHQoaSxhLGYpe3ZhciBwPShhLWkpL01hdGgubWF4KDAsZiksdj1NYXRoLmZsb29yKE1hdGgubG9nKHApL01hdGguTE4xMCksbT1wL01hdGgucG93KDEwLHYpO3JldHVybiB2Pj0wPyhtPj1xZnQ/MTA6bT49SGZ0PzU6bT49R2Z0PzI6MSkqTWF0aC5wb3coMTAsdik6LU1hdGgucG93KDEwLC12KS8obT49cWZ0PzEwOm0+PUhmdD81Om0+PUdmdD8yOjEpfWZ1bmN0aW9uIFZmdChpLGEsZil7dmFyIHA9TWF0aC5hYnMoYS1pKS9NYXRoLm1heCgwLGYpLHY9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhwKS9NYXRoLkxOMTApKSxtPXAvdjtyZXR1cm4gbT49cWZ0P3YqPTEwOm0+PUhmdD92Kj01Om0+PUdmdCYmKHYqPTIpLGE8aT8tdjp2fWZ1bmN0aW9uIHV4ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZjxwfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY8dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIGx4ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZj5wfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY+dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIGh4ZShpKXtyZXR1cm4gaX12YXIgZFU9MSxVZnQ9MixXZnQ9MyxnVT00LFBMdD0xZS02O2Z1bmN0aW9uIGZ4ZShpKXtyZXR1cm4idHJhbnNsYXRlKCIraSsiLDApIn1mdW5jdGlvbiBkeGUoaSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIraSsiKSJ9ZnVuY3Rpb24gZ3hlKGkpe3JldHVybiBhPT4raShhKX1mdW5jdGlvbiBweGUoaSxhKXtyZXR1cm4gYT1NYXRoLm1heCgwLGkuYmFuZHdpZHRoKCktYSoyKS8yLGkucm91bmQoKSYmKGE9TWF0aC5yb3VuZChhKSksZj0+K2koZikrYX1mdW5jdGlvbiBieGUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gRkx0KGksYSl7dmFyIGY9W10scD1udWxsLHY9bnVsbCxtPTYsYj02LEU9MyxfPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xPzA6LjUsTD1pPT09ZFV8fGk9PT1nVT8tMToxLE49aT09PWdVfHxpPT09VWZ0PyJ4IjoieSIsQj1pPT09ZFV8fGk9PT1XZnQ/ZnhlOmR4ZTtmdW5jdGlvbiBqKFIpe3ZhciB6PXA/PyhhLnRpY2tzP2EudGlja3MuYXBwbHkoYSxmKTphLmRvbWFpbigpKSxLPXY/PyhhLnRpY2tGb3JtYXQ/YS50aWNrRm9ybWF0LmFwcGx5KGEsZik6aHhlKSxpdD1NYXRoLm1heChtLDApK0Usc3Q9YS5yYW5nZSgpLHV0PStzdFswXStfLGJ0PStzdFtzdC5sZW5ndGgtMV0rXyxtdD0oYS5iYW5kd2lkdGg/cHhlOmd4ZSkoYS5jb3B5KCksXykseXQ9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSLGR0PXl0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxodD15dC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YSh6LGEpLm9yZGVyKCksd3Q9aHQuZXhpdCgpLFg9aHQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxwdD1odC5zZWxlY3QoImxpbmUiKSxVPWh0LnNlbGVjdCgidGV4dCIpO2R0PWR0Lm1lcmdlKGR0LmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxodD1odC5tZXJnZShYKSxwdD1wdC5tZXJnZShYLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoTisiMiIsTCptKSksVT1VLm1lcmdlKFguYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoTixMKml0KS5hdHRyKCJkeSIsaT09PWRVPyIwZW0iOmk9PT1XZnQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxSIT09eXQmJihkdD1kdC50cmFuc2l0aW9uKFIpLGh0PWh0LnRyYW5zaXRpb24oUikscHQ9cHQudHJhbnNpdGlvbihSKSxVPVUudHJhbnNpdGlvbihSKSx3dD13dC50cmFuc2l0aW9uKFIpLmF0dHIoIm9wYWNpdHkiLFBMdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4dCl7cmV0dXJuIGlzRmluaXRlKHh0PW10KHh0KSk/Qih4dCtfKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxYLmF0dHIoIm9wYWNpdHkiLFBMdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4dCl7dmFyIG50PXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIEIoKG50JiZpc0Zpbml0ZShudD1udCh4dCkpP250Om10KHh0KSkrXyl9KSksd3QucmVtb3ZlKCksZHQuYXR0cigiZCIsaT09PWdVfHxpPT09VWZ0P2I/Ik0iK0wqYisiLCIrdXQrIkgiK18rIlYiK2J0KyJIIitMKmI6Ik0iK18rIiwiK3V0KyJWIitidDpiPyJNIit1dCsiLCIrTCpiKyJWIitfKyJIIitidCsiViIrTCpiOiJNIit1dCsiLCIrXysiSCIrYnQpLGh0LmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeHQpe3JldHVybiBCKG10KHh0KStfKX0pLHB0LmF0dHIoTisiMiIsTCptKSxVLmF0dHIoTixMKml0KS50ZXh0KEspLHl0LmZpbHRlcihieGUpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLGk9PT1VZnQ/InN0YXJ0IjppPT09Z1U/ImVuZCI6Im1pZGRsZSIpLHl0LmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1tdH0pfXJldHVybiBqLnNjYWxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVIsaik6YX0sai50aWNrcz1mdW5jdGlvbigpe3JldHVybiBmPUFycmF5LmZyb20oYXJndW1lbnRzKSxqfSxqLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9Uj09bnVsbD9bXTpBcnJheS5mcm9tKFIpLGopOmYuc2xpY2UoKX0sai50aWNrVmFsdWVzPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPVI9PW51bGw/bnVsbDpBcnJheS5mcm9tKFIpLGopOnAmJnAuc2xpY2UoKX0sai50aWNrRm9ybWF0PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PVIsaik6dn0sai50aWNrU2l6ZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1iPStSLGopOm19LGoudGlja1NpemVJbm5lcj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rUixqKTptfSxqLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K1Isaik6Yn0sai50aWNrUGFkZGluZz1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0rUixqKTpFfSxqLm9mZnNldD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rUixqKTpffSxqfWZ1bmN0aW9uIHZ4ZShpKXtyZXR1cm4gRkx0KGRVLGkpfWZ1bmN0aW9uIHd4ZShpKXtyZXR1cm4gRkx0KFdmdCxpKX12YXIgbXhlPXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIEJMdCgpe2Zvcih2YXIgaT0wLGE9YXJndW1lbnRzLmxlbmd0aCxmPXt9LHA7aTxhOysraSl7aWYoIShwPWFyZ3VtZW50c1tpXSsiIil8fHAgaW4gZnx8L1tccy5dLy50ZXN0KHApKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3ApO2ZbcF09W119cmV0dXJuIG5ldyBwVShmKX1mdW5jdGlvbiBwVShpKXt0aGlzLl89aX1mdW5jdGlvbiB5eGUoaSxhKXtyZXR1cm4gaS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGYpe3ZhciBwPSIiLHY9Zi5pbmRleE9mKCIuIik7aWYodj49MCYmKHA9Zi5zbGljZSh2KzEpLGY9Zi5zbGljZSgwLHYpKSxmJiYhYS5oYXNPd25Qcm9wZXJ0eShmKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitmKTtyZXR1cm57dHlwZTpmLG5hbWU6cH19KX1wVS5wcm90b3R5cGU9Qkx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cFUsb246ZnVuY3Rpb24oaSxhKXt2YXIgZj10aGlzLl8scD15eGUoaSsiIixmKSx2LG09LTEsYj1wLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KyttPGI7KWlmKCh2PShpPXBbbV0pLnR5cGUpJiYodj14eGUoZlt2XSxpLm5hbWUpKSlyZXR1cm4gdjtyZXR1cm59aWYoYSE9bnVsbCYmdHlwZW9mIGEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2EpO2Zvcig7KyttPGI7KWlmKHY9KGk9cFttXSkudHlwZSlmW3ZdPVJMdChmW3ZdLGkubmFtZSxhKTtlbHNlIGlmKGE9PW51bGwpZm9yKHYgaW4gZilmW3ZdPVJMdChmW3ZdLGkubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBpPXt9LGE9dGhpcy5fO2Zvcih2YXIgZiBpbiBhKWlbZl09YVtmXS5zbGljZSgpO3JldHVybiBuZXcgcFUoaSl9LGNhbGw6ZnVuY3Rpb24oaSxhKXtpZigodj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBmPW5ldyBBcnJheSh2KSxwPTAsdixtO3A8djsrK3ApZltwXT1hcmd1bWVudHNbcCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGkpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2kpO2ZvcihtPXRoaXMuX1tpXSxwPTAsdj1tLmxlbmd0aDtwPHY7KytwKW1bcF0udmFsdWUuYXBwbHkoYSxmKX0sYXBwbHk6ZnVuY3Rpb24oaSxhLGYpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoaSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIraSk7Zm9yKHZhciBwPXRoaXMuX1tpXSx2PTAsbT1wLmxlbmd0aDt2PG07Kyt2KXBbdl0udmFsdWUuYXBwbHkoYSxmKX19O2Z1bmN0aW9uIHh4ZShpLGEpe2Zvcih2YXIgZj0wLHA9aS5sZW5ndGgsdjtmPHA7KytmKWlmKCh2PWlbZl0pLm5hbWU9PT1hKXJldHVybiB2LnZhbHVlfWZ1bmN0aW9uIFJMdChpLGEsZil7Zm9yKHZhciBwPTAsdj1pLmxlbmd0aDtwPHY7KytwKWlmKGlbcF0ubmFtZT09PWEpe2lbcF09bXhlLGk9aS5zbGljZSgwLHApLmNvbmNhdChpLnNsaWNlKHArMSkpO2JyZWFrfXJldHVybiBmIT1udWxsJiZpLnB1c2goe25hbWU6YSx2YWx1ZTpmfSksaX12YXIgS2Z0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBqTHQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOktmdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIGJVKGkpe3ZhciBhPWkrPSIiLGY9YS5pbmRleE9mKCI6Iik7cmV0dXJuIGY+PTAmJihhPWkuc2xpY2UoMCxmKSkhPT0ieG1sbnMiJiYoaT1pLnNsaWNlKGYrMSkpLGpMdC5oYXNPd25Qcm9wZXJ0eShhKT97c3BhY2U6akx0W2FdLGxvY2FsOml9Oml9ZnVuY3Rpb24ga3hlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMub3duZXJEb2N1bWVudCxmPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBmPT09S2Z0JiZhLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1LZnQ/YS5jcmVhdGVFbGVtZW50KGkpOmEuY3JlYXRlRWxlbWVudE5TKGYsaSl9fWZ1bmN0aW9uIEV4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhpLnNwYWNlLGkubG9jYWwpfX1mdW5jdGlvbiAkTHQoaSl7dmFyIGE9YlUoaSk7cmV0dXJuKGEubG9jYWw/RXhlOmt4ZSkoYSl9ZnVuY3Rpb24gVHhlKCl7fWZ1bmN0aW9uIFlmdChpKXtyZXR1cm4gaT09bnVsbD9UeGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGkpfX1mdW5jdGlvbiBDeGUoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPVlmdChpKSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLHA9bmV3IEFycmF5KGYpLHY9MDt2PGY7Kyt2KWZvcih2YXIgbT1hW3ZdLGI9bS5sZW5ndGgsRT1wW3ZdPW5ldyBBcnJheShiKSxfLEwsTj0wO048YjsrK04pKF89bVtOXSkmJihMPWkuY2FsbChfLF8uX19kYXRhX18sTixtKSkmJigiX19kYXRhX18iaW4gXyYmKEwuX19kYXRhX189Xy5fX2RhdGFfXyksRVtOXT1MKTtyZXR1cm4gbmV3IG5nKHAsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gekx0KGkpe3JldHVybiBpPT1udWxsP1tdOkFycmF5LmlzQXJyYXkoaSk/aTpBcnJheS5mcm9tKGkpfWZ1bmN0aW9uIF94ZSgpe3JldHVybltdfWZ1bmN0aW9uIHFMdChpKXtyZXR1cm4gaT09bnVsbD9feGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGkpfX1mdW5jdGlvbiBTeGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHpMdChpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEF4ZShpKXt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPVN4ZShpKTppPXFMdChpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1bXSx2PVtdLG09MDttPGY7KyttKWZvcih2YXIgYj1hW21dLEU9Yi5sZW5ndGgsXyxMPTA7TDxFOysrTCkoXz1iW0xdKSYmKHAucHVzaChpLmNhbGwoXyxfLl9fZGF0YV9fLEwsYikpLHYucHVzaChfKSk7cmV0dXJuIG5ldyBuZyhwLHYpfWZ1bmN0aW9uIEhMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGkpfX1mdW5jdGlvbiBHTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoZXMoaSl9fXZhciBMeGU9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gTXhlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBMeGUuY2FsbCh0aGlzLmNoaWxkcmVuLGkpfX1mdW5jdGlvbiBJeGUoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH1mdW5jdGlvbiBEeGUoaSl7cmV0dXJuIHRoaXMuc2VsZWN0KGk9PW51bGw/SXhlOk14ZSh0eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkdMdChpKSkpfXZhciBPeGU9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBOeGUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBQeGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE94ZS5jYWxsKHRoaXMuY2hpbGRyZW4saSl9fWZ1bmN0aW9uIEZ4ZShpKXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwoaT09bnVsbD9OeGU6UHhlKHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R0x0KGkpKSl9ZnVuY3Rpb24gQnhlKGkpe3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1ITHQoaSkpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1hLmxlbmd0aCxwPW5ldyBBcnJheShmKSx2PTA7djxmOysrdilmb3IodmFyIG09YVt2XSxiPW0ubGVuZ3RoLEU9cFt2XT1bXSxfLEw9MDtMPGI7KytMKShfPW1bTF0pJiZpLmNhbGwoXyxfLl9fZGF0YV9fLEwsbSkmJkUucHVzaChfKTtyZXR1cm4gbmV3IG5nKHAsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVkx0KGkpe3JldHVybiBuZXcgQXJyYXkoaS5sZW5ndGgpfWZ1bmN0aW9uIFJ4ZSgpe3JldHVybiBuZXcgbmcodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoVkx0KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB2VShpLGEpe3RoaXMub3duZXJEb2N1bWVudD1pLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9aS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1pLHRoaXMuX19kYXRhX189YX12VS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZVLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGksdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihpLGEpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGksYSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGkpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChpKX19O2Z1bmN0aW9uIGp4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gJHhlKGksYSxmLHAsdixtKXtmb3IodmFyIGI9MCxFLF89YS5sZW5ndGgsTD1tLmxlbmd0aDtiPEw7KytiKShFPWFbYl0pPyhFLl9fZGF0YV9fPW1bYl0scFtiXT1FKTpmW2JdPW5ldyB2VShpLG1bYl0pO2Zvcig7YjxfOysrYikoRT1hW2JdKSYmKHZbYl09RSl9ZnVuY3Rpb24genhlKGksYSxmLHAsdixtLGIpe3ZhciBFLF8sTD1uZXcgTWFwLE49YS5sZW5ndGgsQj1tLmxlbmd0aCxqPW5ldyBBcnJheShOKSxSO2ZvcihFPTA7RTxOOysrRSkoXz1hW0VdKSYmKGpbRV09Uj1iLmNhbGwoXyxfLl9fZGF0YV9fLEUsYSkrIiIsTC5oYXMoUik/dltFXT1fOkwuc2V0KFIsXykpO2ZvcihFPTA7RTxCOysrRSlSPWIuY2FsbChpLG1bRV0sRSxtKSsiIiwoXz1MLmdldChSKSk/KHBbRV09XyxfLl9fZGF0YV9fPW1bRV0sTC5kZWxldGUoUikpOmZbRV09bmV3IHZVKGksbVtFXSk7Zm9yKEU9MDtFPE47KytFKShfPWFbRV0pJiZMLmdldChqW0VdKT09PV8mJih2W0VdPV8pfWZ1bmN0aW9uIHF4ZShpKXtyZXR1cm4gaS5fX2RhdGFfX31mdW5jdGlvbiBIeGUoaSxhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLHF4ZSk7dmFyIGY9YT96eGU6JHhlLHA9dGhpcy5fcGFyZW50cyx2PXRoaXMuX2dyb3Vwczt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9anhlKGkpKTtmb3IodmFyIG09di5sZW5ndGgsYj1uZXcgQXJyYXkobSksRT1uZXcgQXJyYXkobSksXz1uZXcgQXJyYXkobSksTD0wO0w8bTsrK0wpe3ZhciBOPXBbTF0sQj12W0xdLGo9Qi5sZW5ndGgsUj1HeGUoaS5jYWxsKE4sTiYmTi5fX2RhdGFfXyxMLHApKSx6PVIubGVuZ3RoLEs9RVtMXT1uZXcgQXJyYXkoeiksaXQ9YltMXT1uZXcgQXJyYXkoeiksc3Q9X1tMXT1uZXcgQXJyYXkoaik7ZihOLEIsSyxpdCxzdCxSLGEpO2Zvcih2YXIgdXQ9MCxidD0wLG10LHl0O3V0PHo7Kyt1dClpZihtdD1LW3V0XSl7Zm9yKHV0Pj1idCYmKGJ0PXV0KzEpOyEoeXQ9aXRbYnRdKSYmKytidDx6Oyk7bXQuX25leHQ9eXR8fG51bGx9fXJldHVybiBiPW5ldyBuZyhiLHApLGIuX2VudGVyPUUsYi5fZXhpdD1fLGJ9ZnVuY3Rpb24gR3hlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gVnhlKCl7cmV0dXJuIG5ldyBuZyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFZMdCksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVXhlKGksYSxmKXt2YXIgcD10aGlzLmVudGVyKCksdj10aGlzLG09dGhpcy5leGl0KCk7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iPyhwPWkocCkscCYmKHA9cC5zZWxlY3Rpb24oKSkpOnA9cC5hcHBlbmQoaSsiIiksYSE9bnVsbCYmKHY9YSh2KSx2JiYodj12LnNlbGVjdGlvbigpKSksZj09bnVsbD9tLnJlbW92ZSgpOmYobSkscCYmdj9wLm1lcmdlKHYpLm9yZGVyKCk6dn1mdW5jdGlvbiBXeGUoaSl7Zm9yKHZhciBhPWkuc2VsZWN0aW9uP2kuc2VsZWN0aW9uKCk6aSxmPXRoaXMuX2dyb3VwcyxwPWEuX2dyb3Vwcyx2PWYubGVuZ3RoLG09cC5sZW5ndGgsYj1NYXRoLm1pbih2LG0pLEU9bmV3IEFycmF5KHYpLF89MDtfPGI7KytfKWZvcih2YXIgTD1mW19dLE49cFtfXSxCPUwubGVuZ3RoLGo9RVtfXT1uZXcgQXJyYXkoQiksUix6PTA7ejxCOysreikoUj1MW3pdfHxOW3pdKSYmKGpbel09Uik7Zm9yKDtfPHY7KytfKUVbX109ZltfXTtyZXR1cm4gbmV3IG5nKEUsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gS3hlKCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxhPS0xLGY9aS5sZW5ndGg7KythPGY7KWZvcih2YXIgcD1pW2FdLHY9cC5sZW5ndGgtMSxtPXBbdl0sYjstLXY+PTA7KShiPXBbdl0pJiYobSYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihtKV40JiZtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsbSksbT1iKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBZeGUoaSl7aXx8KGk9WHhlKTtmdW5jdGlvbiBhKEIsail7cmV0dXJuIEImJmo/aShCLl9fZGF0YV9fLGouX19kYXRhX18pOiFCLSFqfWZvcih2YXIgZj10aGlzLl9ncm91cHMscD1mLmxlbmd0aCx2PW5ldyBBcnJheShwKSxtPTA7bTxwOysrbSl7Zm9yKHZhciBiPWZbbV0sRT1iLmxlbmd0aCxfPXZbbV09bmV3IEFycmF5KEUpLEwsTj0wO048RTsrK04pKEw9YltOXSkmJihfW05dPUwpO18uc29ydChhKX1yZXR1cm4gbmV3IG5nKHYsdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBYeGUoaSxhKXtyZXR1cm4gaTxhPy0xOmk+YT8xOmk+PWE/MDpOYU59ZnVuY3Rpb24gUXhlKCl7dmFyIGk9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxpLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIFp4ZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfWZ1bmN0aW9uIEp4ZSgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMsYT0wLGY9aS5sZW5ndGg7YTxmOysrYSlmb3IodmFyIHA9aVthXSx2PTAsbT1wLmxlbmd0aDt2PG07Kyt2KXt2YXIgYj1wW3ZdO2lmKGIpcmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdDZlKCl7bGV0IGk9MDtmb3IoY29uc3QgYSBvZiB0aGlzKSsraTtyZXR1cm4gaX1mdW5jdGlvbiBlNmUoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24gbjZlKGkpe2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj0wLHA9YS5sZW5ndGg7ZjxwOysrZilmb3IodmFyIHY9YVtmXSxtPTAsYj12Lmxlbmd0aCxFO208YjsrK20pKEU9dlttXSkmJmkuY2FsbChFLEUuX19kYXRhX18sbSx2KTtyZXR1cm4gdGhpc31mdW5jdGlvbiByNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9fWZ1bmN0aW9uIGk2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIHM2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGksYSl9fWZ1bmN0aW9uIGE2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGEpfX1mdW5jdGlvbiBvNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpOnRoaXMuc2V0QXR0cmlidXRlKGksZil9fWZ1bmN0aW9uIGM2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Y9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGYpfX1mdW5jdGlvbiB1NmUoaSxhKXt2YXIgZj1iVShpKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBwPXRoaXMubm9kZSgpO3JldHVybiBmLmxvY2FsP3AuZ2V0QXR0cmlidXRlTlMoZi5zcGFjZSxmLmxvY2FsKTpwLmdldEF0dHJpYnV0ZShmKX1yZXR1cm4gdGhpcy5lYWNoKChhPT1udWxsP2YubG9jYWw/aTZlOnI2ZTp0eXBlb2YgYT09ImZ1bmN0aW9uIj9mLmxvY2FsP2M2ZTpvNmU6Zi5sb2NhbD9hNmU6czZlKShmLGEpKX1mdW5jdGlvbiBVTHQoaSl7cmV0dXJuIGkub3duZXJEb2N1bWVudCYmaS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxpLmRvY3VtZW50JiZpfHxpLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGw2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpfX1mdW5jdGlvbiBoNmUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxhLGYpfX1mdW5jdGlvbiBmNmUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBwPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3A9PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGkscCxmKX19ZnVuY3Rpb24gZDZlKGksYSxmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoYT09bnVsbD9sNmU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/ZjZlOmg2ZSkoaSxhLGY/PyIiKSk6bUEodGhpcy5ub2RlKCksaSl9ZnVuY3Rpb24gbUEoaSxhKXtyZXR1cm4gaS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGEpfHxVTHQoaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoYSl9ZnVuY3Rpb24gZzZlKGkpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2ldfX1mdW5jdGlvbiBwNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2ldPWF9fWZ1bmN0aW9uIGI2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Y9PW51bGw/ZGVsZXRlIHRoaXNbaV06dGhpc1tpXT1mfX1mdW5jdGlvbiB2NmUoaSxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoYT09bnVsbD9nNmU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/YjZlOnA2ZSkoaSxhKSk6dGhpcy5ub2RlKClbaV19ZnVuY3Rpb24gV0x0KGkpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBYZnQoaSl7cmV0dXJuIGkuY2xhc3NMaXN0fHxuZXcgS0x0KGkpfWZ1bmN0aW9uIEtMdChpKXt0aGlzLl9ub2RlPWksdGhpcy5fbmFtZXM9V0x0KGkuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9S0x0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMuX25hbWVzLmluZGV4T2YoaSk7YTwwJiYodGhpcy5fbmFtZXMucHVzaChpKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIGE9dGhpcy5fbmFtZXMuaW5kZXhPZihpKTthPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGEsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoaSk+PTB9fTtmdW5jdGlvbiBZTHQoaSxhKXtmb3IodmFyIGY9WGZ0KGkpLHA9LTEsdj1hLmxlbmd0aDsrK3A8djspZi5hZGQoYVtwXSl9ZnVuY3Rpb24gWEx0KGksYSl7Zm9yKHZhciBmPVhmdChpKSxwPS0xLHY9YS5sZW5ndGg7KytwPHY7KWYucmVtb3ZlKGFbcF0pfWZ1bmN0aW9uIHc2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtZTHQodGhpcyxpKX19ZnVuY3Rpb24gbTZlKGkpe3JldHVybiBmdW5jdGlvbigpe1hMdCh0aGlzLGkpfX1mdW5jdGlvbiB5NmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXsoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/WUx0OlhMdCkodGhpcyxpKX19ZnVuY3Rpb24geDZlKGksYSl7dmFyIGY9V0x0KGkrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBwPVhmdCh0aGlzLm5vZGUoKSksdj0tMSxtPWYubGVuZ3RoOysrdjxtOylpZighcC5jb250YWlucyhmW3ZdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgYT09ImZ1bmN0aW9uIj95NmU6YT93NmU6bTZlKShmLGEpKX1mdW5jdGlvbiBrNmUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEU2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWl9fWZ1bmN0aW9uIFQ2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWE/PyIifX1mdW5jdGlvbiBDNmUoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGk9PW51bGw/azZlOih0eXBlb2YgaT09ImZ1bmN0aW9uIj9UNmU6RTZlKShpKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9ZnVuY3Rpb24gXzZlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUzZlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWl9fWZ1bmN0aW9uIEE2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1hPz8iIn19ZnVuY3Rpb24gTDZlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChpPT1udWxsP182ZToodHlwZW9mIGk9PSJmdW5jdGlvbiI/QTZlOlM2ZSkoaSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBNNmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSTZlKCl7cmV0dXJuIHRoaXMuZWFjaChNNmUpfWZ1bmN0aW9uIEQ2ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE82ZSgpe3JldHVybiB0aGlzLmVhY2goRDZlKX1mdW5jdGlvbiBONmUoaSl7dmFyIGE9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTokTHQoaSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9ZnVuY3Rpb24gUDZlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRjZlKGksYSl7dmFyIGY9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTokTHQoaSkscD1hPT1udWxsP1A2ZTp0eXBlb2YgYT09ImZ1bmN0aW9uIj9hOllmdChhKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZi5hcHBseSh0aGlzLGFyZ3VtZW50cykscC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gQjZlKCl7dmFyIGk9dGhpcy5wYXJlbnROb2RlO2kmJmkucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gUjZlKCl7cmV0dXJuIHRoaXMuZWFjaChCNmUpfWZ1bmN0aW9uIGo2ZSgpe3ZhciBpPXRoaXMuY2xvbmVOb2RlKCExKSxhPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gYT9hLmluc2VydEJlZm9yZShpLHRoaXMubmV4dFNpYmxpbmcpOml9ZnVuY3Rpb24gJDZlKCl7dmFyIGk9dGhpcy5jbG9uZU5vZGUoITApLGE9dGhpcy5wYXJlbnROb2RlO3JldHVybiBhP2EuaW5zZXJ0QmVmb3JlKGksdGhpcy5uZXh0U2libGluZyk6aX1mdW5jdGlvbiB6NmUoaSl7cmV0dXJuIHRoaXMuc2VsZWN0KGk/JDZlOmo2ZSl9ZnVuY3Rpb24gcTZlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixpKTp0aGlzLm5vZGUoKS5fX2RhdGFfX31mdW5jdGlvbiBINmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe2kuY2FsbCh0aGlzLGEsdGhpcy5fX2RhdGFfXyl9fWZ1bmN0aW9uIEc2ZShpKXtyZXR1cm4gaS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBmPSIiLHA9YS5pbmRleE9mKCIuIik7cmV0dXJuIHA+PTAmJihmPWEuc2xpY2UocCsxKSxhPWEuc2xpY2UoMCxwKSkse3R5cGU6YSxuYW1lOmZ9fSl9ZnVuY3Rpb24gVjZlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuX19vbjtpZihhKXtmb3IodmFyIGY9MCxwPS0xLHY9YS5sZW5ndGgsbTtmPHY7KytmKW09YVtmXSwoIWkudHlwZXx8bS50eXBlPT09aS50eXBlKSYmbS5uYW1lPT09aS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihtLnR5cGUsbS5saXN0ZW5lcixtLm9wdGlvbnMpOmFbKytwXT1tOysrcD9hLmxlbmd0aD1wOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBVNmUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBwPXRoaXMuX19vbix2LG09SDZlKGEpO2lmKHApe2Zvcih2YXIgYj0wLEU9cC5sZW5ndGg7YjxFOysrYilpZigodj1wW2JdKS50eXBlPT09aS50eXBlJiZ2Lm5hbWU9PT1pLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih2LnR5cGUsdi5saXN0ZW5lcix2Lm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih2LnR5cGUsdi5saXN0ZW5lcj1tLHYub3B0aW9ucz1mKSx2LnZhbHVlPWE7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoaS50eXBlLG0sZiksdj17dHlwZTppLnR5cGUsbmFtZTppLm5hbWUsdmFsdWU6YSxsaXN0ZW5lcjptLG9wdGlvbnM6Zn0scD9wLnB1c2godik6dGhpcy5fX29uPVt2XX19ZnVuY3Rpb24gVzZlKGksYSxmKXt2YXIgcD1HNmUoaSsiIiksdixtPXAubGVuZ3RoLGI7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgRT10aGlzLm5vZGUoKS5fX29uO2lmKEUpe2Zvcih2YXIgXz0wLEw9RS5sZW5ndGgsTjtfPEw7KytfKWZvcih2PTAsTj1FW19dO3Y8bTsrK3YpaWYoKGI9cFt2XSkudHlwZT09PU4udHlwZSYmYi5uYW1lPT09Ti5uYW1lKXJldHVybiBOLnZhbHVlfXJldHVybn1mb3IoRT1hP1U2ZTpWNmUsdj0wO3Y8bTsrK3YpdGhpcy5lYWNoKEUocFt2XSxhLGYpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBRTHQoaSxhLGYpe3ZhciBwPVVMdChpKSx2PXAuQ3VzdG9tRXZlbnQ7dHlwZW9mIHY9PSJmdW5jdGlvbiI/dj1uZXcgdihhLGYpOih2PXAuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZj8odi5pbml0RXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlKSx2LmRldGFpbD1mLmRldGFpbCk6di5pbml0RXZlbnQoYSwhMSwhMSkpLGkuZGlzcGF0Y2hFdmVudCh2KX1mdW5jdGlvbiBLNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUUx0KHRoaXMsaSxhKX19ZnVuY3Rpb24gWTZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFMdCh0aGlzLGksYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBYNmUoaSxhKXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgYT09ImZ1bmN0aW9uIj9ZNmU6SzZlKShpLGEpKX1mdW5jdGlvbipRNmUoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLGE9MCxmPWkubGVuZ3RoO2E8ZjsrK2EpZm9yKHZhciBwPWlbYV0sdj0wLG09cC5sZW5ndGgsYjt2PG07Kyt2KShiPXBbdl0pJiYoeWllbGQgYil9dmFyIFFmdD1bbnVsbF07ZnVuY3Rpb24gbmcoaSxhKXt0aGlzLl9ncm91cHM9aSx0aGlzLl9wYXJlbnRzPWF9ZnVuY3Rpb24geU4oKXtyZXR1cm4gbmV3IG5nKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sUWZ0KX1mdW5jdGlvbiBaNmUoKXtyZXR1cm4gdGhpc31uZy5wcm90b3R5cGU9eU4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuZyxzZWxlY3Q6Q3hlLHNlbGVjdEFsbDpBeGUsc2VsZWN0Q2hpbGQ6RHhlLHNlbGVjdENoaWxkcmVuOkZ4ZSxmaWx0ZXI6QnhlLGRhdGE6SHhlLGVudGVyOlJ4ZSxleGl0OlZ4ZSxqb2luOlV4ZSxtZXJnZTpXeGUsc2VsZWN0aW9uOlo2ZSxvcmRlcjpLeGUsc29ydDpZeGUsY2FsbDpReGUsbm9kZXM6WnhlLG5vZGU6SnhlLHNpemU6dDZlLGVtcHR5OmU2ZSxlYWNoOm42ZSxhdHRyOnU2ZSxzdHlsZTpkNmUscHJvcGVydHk6djZlLGNsYXNzZWQ6eDZlLHRleHQ6QzZlLGh0bWw6TDZlLHJhaXNlOkk2ZSxsb3dlcjpPNmUsYXBwZW5kOk42ZSxpbnNlcnQ6RjZlLHJlbW92ZTpSNmUsY2xvbmU6ejZlLGRhdHVtOnE2ZSxvbjpXNmUsZGlzcGF0Y2g6WDZlLFtTeW1ib2wuaXRlcmF0b3JdOlE2ZX07ZnVuY3Rpb24geXIoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9uZXcgbmcoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBuZyhbW2ldXSxRZnQpfWZ1bmN0aW9uIFpMdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP25ldyBuZyhbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBuZyhbekx0KGkpXSxRZnQpfWZ1bmN0aW9uIHhOKGksYSxmKXtpLnByb3RvdHlwZT1hLnByb3RvdHlwZT1mLGYuY29uc3RydWN0b3I9aX1mdW5jdGlvbiB3VShpLGEpe3ZhciBmPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcCBpbiBhKWZbcF09YVtwXTtyZXR1cm4gZn1mdW5jdGlvbiBSNygpe312YXIga049LjcsbVU9MS9rTix5QT0iXFxzKihbKy1dP1xcZCspXFxzKiIsRU49IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHMzPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsSjZlPS9eIyhbMC05YS1mXXszLDh9KSQvLHRrZT1uZXcgUmVnRXhwKGBecmdiXFwoJHt5QX0sJHt5QX0sJHt5QX1cXCkkYCksZWtlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke3MzfSwke3MzfSwke3MzfVxcKSRgKSxua2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3lBfSwke3lBfSwke3lBfSwke0VOfVxcKSRgKSxya2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3MzfSwke3MzfSwke3MzfSwke0VOfVxcKSRgKSxpa2U9bmV3IFJlZ0V4cChgXmhzbFxcKCR7RU59LCR7czN9LCR7czN9XFwpJGApLHNrZT1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7RU59LCR7czN9LCR7czN9LCR7RU59XFwpJGApLEpMdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTt4TihSNyxqNyx7Y29weShpKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGkpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp0TXQsZm9ybWF0SGV4OnRNdCxmb3JtYXRIZXg4OmFrZSxmb3JtYXRIc2w6b2tlLGZvcm1hdFJnYjplTXQsdG9TdHJpbmc6ZU10fSk7ZnVuY3Rpb24gdE10KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gYWtlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfWZ1bmN0aW9uIG9rZSgpe3JldHVybiBvTXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gZU10KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gajcoaSl7dmFyIGEsZjtyZXR1cm4gaT0oaSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGE9SjZlLmV4ZWMoaSkpPyhmPWFbMV0ubGVuZ3RoLGE9cGFyc2VJbnQoYVsxXSwxNiksZj09PTY/bk10KGEpOmY9PT0zP25ldyBwMChhPj44JjE1fGE+PjQmMjQwLGE+PjQmMTV8YSYyNDAsKGEmMTUpPDw0fGEmMTUsMSk6Zj09PTg/eVUoYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwoYSYyNTUpLzI1NSk6Zj09PTQ/eVUoYT4+MTImMTV8YT4+OCYyNDAsYT4+OCYxNXxhPj40JjI0MCxhPj40JjE1fGEmMjQwLCgoYSYxNSk8PDR8YSYxNSkvMjU1KTpudWxsKTooYT10a2UuZXhlYyhpKSk/bmV3IHAwKGFbMV0sYVsyXSxhWzNdLDEpOihhPWVrZS5leGVjKGkpKT9uZXcgcDAoYVsxXSoyNTUvMTAwLGFbMl0qMjU1LzEwMCxhWzNdKjI1NS8xMDAsMSk6KGE9bmtlLmV4ZWMoaSkpP3lVKGFbMV0sYVsyXSxhWzNdLGFbNF0pOihhPXJrZS5leGVjKGkpKT95VShhWzFdKjI1NS8xMDAsYVsyXSoyNTUvMTAwLGFbM10qMjU1LzEwMCxhWzRdKTooYT1pa2UuZXhlYyhpKSk/YU10KGFbMV0sYVsyXS8xMDAsYVszXS8xMDAsMSk6KGE9c2tlLmV4ZWMoaSkpP2FNdChhWzFdLGFbMl0vMTAwLGFbM10vMTAwLGFbNF0pOkpMdC5oYXNPd25Qcm9wZXJ0eShpKT9uTXQoSkx0W2ldKTppPT09InRyYW5zcGFyZW50Ij9uZXcgcDAoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBuTXQoaSl7cmV0dXJuIG5ldyBwMChpPj4xNiYyNTUsaT4+OCYyNTUsaSYyNTUsMSl9ZnVuY3Rpb24geVUoaSxhLGYscCl7cmV0dXJuIHA8PTAmJihpPWE9Zj1OYU4pLG5ldyBwMChpLGEsZixwKX1mdW5jdGlvbiByTXQoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBSN3x8KGk9ajcoaSkpLGk/KGk9aS5yZ2IoKSxuZXcgcDAoaS5yLGkuZyxpLmIsaS5vcGFjaXR5KSk6bmV3IHAwfWZ1bmN0aW9uIFpmdChpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/ck10KGkpOm5ldyBwMChpLGEsZixwPz8xKX1mdW5jdGlvbiBwMChpLGEsZixwKXt0aGlzLnI9K2ksdGhpcy5nPSthLHRoaXMuYj0rZix0aGlzLm9wYWNpdHk9K3B9eE4ocDAsWmZ0LHdVKFI3LHticmlnaHRlcihpKXtyZXR1cm4gaT1pPT1udWxsP21VOk1hdGgucG93KG1VLGkpLG5ldyBwMCh0aGlzLnIqaSx0aGlzLmcqaSx0aGlzLmIqaSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9rTjpNYXRoLnBvdyhrTixpKSxuZXcgcDAodGhpcy5yKmksdGhpcy5nKmksdGhpcy5iKmksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBwMCgkNyh0aGlzLnIpLCQ3KHRoaXMuZyksJDcodGhpcy5iKSx4VSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmlNdCxmb3JtYXRIZXg6aU10LGZvcm1hdEhleDg6Y2tlLGZvcm1hdFJnYjpzTXQsdG9TdHJpbmc6c010fSkpO2Z1bmN0aW9uIGlNdCgpe3JldHVybmAjJHt6Nyh0aGlzLnIpfSR7ejcodGhpcy5nKX0ke3o3KHRoaXMuYil9YH1mdW5jdGlvbiBja2UoKXtyZXR1cm5gIyR7ejcodGhpcy5yKX0ke3o3KHRoaXMuZyl9JHt6Nyh0aGlzLmIpfSR7ejcoKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKjI1NSl9YH1mdW5jdGlvbiBzTXQoKXtjb25zdCBpPXhVKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7aT09PTE/InJnYigiOiJyZ2JhKCJ9JHskNyh0aGlzLnIpfSwgJHskNyh0aGlzLmcpfSwgJHskNyh0aGlzLmIpfSR7aT09PTE/IikiOmAsICR7aX0pYH1gfWZ1bmN0aW9uIHhVKGkpe3JldHVybiBpc05hTihpKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxpKSl9ZnVuY3Rpb24gJDcoaSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoaSl8fDApKX1mdW5jdGlvbiB6NyhpKXtyZXR1cm4gaT0kNyhpKSwoaTwxNj8iMCI6IiIpK2kudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGFNdChpLGEsZixwKXtyZXR1cm4gcDw9MD9pPWE9Zj1OYU46Zjw9MHx8Zj49MT9pPWE9TmFOOmE8PTAmJihpPU5hTiksbmV3IFd3KGksYSxmLHApfWZ1bmN0aW9uIG9NdChpKXtpZihpIGluc3RhbmNlb2YgV3cpcmV0dXJuIG5ldyBXdyhpLmgsaS5zLGkubCxpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiBSN3x8KGk9ajcoaSkpLCFpKXJldHVybiBuZXcgV3c7aWYoaSBpbnN0YW5jZW9mIFd3KXJldHVybiBpO2k9aS5yZ2IoKTt2YXIgYT1pLnIvMjU1LGY9aS5nLzI1NSxwPWkuYi8yNTUsdj1NYXRoLm1pbihhLGYscCksbT1NYXRoLm1heChhLGYscCksYj1OYU4sRT1tLXYsXz0obSt2KS8yO3JldHVybiBFPyhhPT09bT9iPShmLXApL0UrKGY8cCkqNjpmPT09bT9iPShwLWEpL0UrMjpiPShhLWYpL0UrNCxFLz1fPC41P20rdjoyLW0tdixiKj02MCk6RT1fPjAmJl88MT8wOmIsbmV3IFd3KGIsRSxfLGkub3BhY2l0eSl9ZnVuY3Rpb24gdWtlKGksYSxmLHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9vTXQoaSk6bmV3IFd3KGksYSxmLHA/PzEpfWZ1bmN0aW9uIFd3KGksYSxmLHApe3RoaXMuaD0raSx0aGlzLnM9K2EsdGhpcy5sPStmLHRoaXMub3BhY2l0eT0rcH14TihXdyx1a2Usd1UoUjcse2JyaWdodGVyKGkpe3JldHVybiBpPWk9PW51bGw/bVU6TWF0aC5wb3cobVUsaSksbmV3IFd3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBpPWk9PW51bGw/a046TWF0aC5wb3coa04saSksbmV3IFd3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmksdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGk9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCxhPWlzTmFOKGkpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGY9dGhpcy5sLHA9ZisoZjwuNT9mOjEtZikqYSx2PTIqZi1wO3JldHVybiBuZXcgcDAoSmZ0KGk+PTI0MD9pLTI0MDppKzEyMCx2LHApLEpmdChpLHYscCksSmZ0KGk8MTIwP2krMjQwOmktMTIwLHYscCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IFd3KGNNdCh0aGlzLmgpLGtVKHRoaXMucyksa1UodGhpcy5sKSx4VSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGk9eFUodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHtpPT09MT8iaHNsKCI6ImhzbGEoIn0ke2NNdCh0aGlzLmgpfSwgJHtrVSh0aGlzLnMpKjEwMH0lLCAke2tVKHRoaXMubCkqMTAwfSUke2k9PT0xPyIpIjpgLCAke2l9KWB9YH19KSk7ZnVuY3Rpb24gY010KGkpe3JldHVybiBpPShpfHwwKSUzNjAsaTwwP2krMzYwOml9ZnVuY3Rpb24ga1UoaSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSxpfHwwKSl9ZnVuY3Rpb24gSmZ0KGksYSxmKXtyZXR1cm4oaTw2MD9hKyhmLWEpKmkvNjA6aTwxODA/ZjppPDI0MD9hKyhmLWEpKigyNDAtaSkvNjA6YSkqMjU1fWNvbnN0IGxrZT1NYXRoLlBJLzE4MCxoa2U9MTgwL01hdGguUEksRVU9MTgsdU10PS45NjQyMixsTXQ9MSxoTXQ9LjgyNTIxLGZNdD00LzI5LHhBPTYvMjksZE10PTMqeEEqeEEsZmtlPXhBKnhBKnhBO2Z1bmN0aW9uIGdNdChpKXtpZihpIGluc3RhbmNlb2YgYTMpcmV0dXJuIG5ldyBhMyhpLmwsaS5hLGkuYixpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiBnNSlyZXR1cm4gcE10KGkpO2kgaW5zdGFuY2VvZiBwMHx8KGk9ck10KGkpKTt2YXIgYT1yMXQoaS5yKSxmPXIxdChpLmcpLHA9cjF0KGkuYiksdj10MXQoKC4yMjI1MDQ1KmErLjcxNjg3ODYqZisuMDYwNjE2OSpwKS9sTXQpLG0sYjtyZXR1cm4gYT09PWYmJmY9PT1wP209Yj12OihtPXQxdCgoLjQzNjA3NDcqYSsuMzg1MDY0OSpmKy4xNDMwODA0KnApL3VNdCksYj10MXQoKC4wMTM5MzIyKmErLjA5NzEwNDUqZisuNzE0MTczMypwKS9oTXQpKSxuZXcgYTMoMTE2KnYtMTYsNTAwKihtLXYpLDIwMCoodi1iKSxpLm9wYWNpdHkpfWZ1bmN0aW9uIGRrZShpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z010KGkpOm5ldyBhMyhpLGEsZixwPz8xKX1mdW5jdGlvbiBhMyhpLGEsZixwKXt0aGlzLmw9K2ksdGhpcy5hPSthLHRoaXMuYj0rZix0aGlzLm9wYWNpdHk9K3B9eE4oYTMsZGtlLHdVKFI3LHticmlnaHRlcihpKXtyZXR1cm4gbmV3IGEzKHRoaXMubCtFVSooaT8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIG5ldyBhMyh0aGlzLmwtRVUqKGk/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGk9KHRoaXMubCsxNikvMTE2LGE9aXNOYU4odGhpcy5hKT9pOmkrdGhpcy5hLzUwMCxmPWlzTmFOKHRoaXMuYik/aTppLXRoaXMuYi8yMDA7cmV0dXJuIGE9dU10KmUxdChhKSxpPWxNdCplMXQoaSksZj1oTXQqZTF0KGYpLG5ldyBwMChuMXQoMy4xMzM4NTYxKmEtMS42MTY4NjY3KmktLjQ5MDYxNDYqZiksbjF0KC0uOTc4NzY4NCphKzEuOTE2MTQxNSppKy4wMzM0NTQqZiksbjF0KC4wNzE5NDUzKmEtLjIyODk5MTQqaSsxLjQwNTI0MjcqZiksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gdDF0KGkpe3JldHVybiBpPmZrZT9NYXRoLnBvdyhpLDEvMyk6aS9kTXQrZk10fWZ1bmN0aW9uIGUxdChpKXtyZXR1cm4gaT54QT9pKmkqaTpkTXQqKGktZk10KX1mdW5jdGlvbiBuMXQoaSl7cmV0dXJuIDI1NSooaTw9LjAwMzEzMDg/MTIuOTIqaToxLjA1NSpNYXRoLnBvdyhpLDEvMi40KS0uMDU1KX1mdW5jdGlvbiByMXQoaSl7cmV0dXJuKGkvPTI1NSk8PS4wNDA0NT9pLzEyLjkyOk1hdGgucG93KChpKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZ2tlKGkpe2lmKGkgaW5zdGFuY2VvZiBnNSlyZXR1cm4gbmV3IGc1KGkuaCxpLmMsaS5sLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIGEzfHwoaT1nTXQoaSkpLGkuYT09PTAmJmkuYj09PTApcmV0dXJuIG5ldyBnNShOYU4sMDxpLmwmJmkubDwxMDA/MDpOYU4saS5sLGkub3BhY2l0eSk7dmFyIGE9TWF0aC5hdGFuMihpLmIsaS5hKSpoa2U7cmV0dXJuIG5ldyBnNShhPDA/YSszNjA6YSxNYXRoLnNxcnQoaS5hKmkuYStpLmIqaS5iKSxpLmwsaS5vcGFjaXR5KX1mdW5jdGlvbiBpMXQoaSxhLGYscCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2drZShpKTpuZXcgZzUoaSxhLGYscD8/MSl9ZnVuY3Rpb24gZzUoaSxhLGYscCl7dGhpcy5oPStpLHRoaXMuYz0rYSx0aGlzLmw9K2YsdGhpcy5vcGFjaXR5PStwfWZ1bmN0aW9uIHBNdChpKXtpZihpc05hTihpLmgpKXJldHVybiBuZXcgYTMoaS5sLDAsMCxpLm9wYWNpdHkpO3ZhciBhPWkuaCpsa2U7cmV0dXJuIG5ldyBhMyhpLmwsTWF0aC5jb3MoYSkqaS5jLE1hdGguc2luKGEpKmkuYyxpLm9wYWNpdHkpfXhOKGc1LGkxdCx3VShSNyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIG5ldyBnNSh0aGlzLmgsdGhpcy5jLHRoaXMubCtFVSooaT8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBuZXcgZzUodGhpcy5oLHRoaXMuYyx0aGlzLmwtRVUqKGk/PzEpLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiBwTXQodGhpcykucmdiKCl9fSkpO2NvbnN0IFRVPWk9PigpPT5pO2Z1bmN0aW9uIGJNdChpLGEpe3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaStmKmF9fWZ1bmN0aW9uIHBrZShpLGEsZil7cmV0dXJuIGk9TWF0aC5wb3coaSxmKSxhPU1hdGgucG93KGEsZiktaSxmPTEvZixmdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5wb3coaStwKmEsZil9fWZ1bmN0aW9uIGJrZShpLGEpe3ZhciBmPWEtaTtyZXR1cm4gZj9iTXQoaSxmPjE4MHx8ZjwtMTgwP2YtMzYwKk1hdGgucm91bmQoZi8zNjApOmYpOlRVKGlzTmFOKGkpP2E6aSl9ZnVuY3Rpb24gdmtlKGkpe3JldHVybihpPStpKT09MT9UTjpmdW5jdGlvbihhLGYpe3JldHVybiBmLWE/cGtlKGEsZixpKTpUVShpc05hTihhKT9mOmEpfX1mdW5jdGlvbiBUTihpLGEpe3ZhciBmPWEtaTtyZXR1cm4gZj9iTXQoaSxmKTpUVShpc05hTihpKT9hOmkpfWNvbnN0IENVPWZ1bmN0aW9uIGkoYSl7dmFyIGY9dmtlKGEpO2Z1bmN0aW9uIHAodixtKXt2YXIgYj1mKCh2PVpmdCh2KSkuciwobT1aZnQobSkpLnIpLEU9Zih2LmcsbS5nKSxfPWYodi5iLG0uYiksTD1UTih2Lm9wYWNpdHksbS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oTil7cmV0dXJuIHYucj1iKE4pLHYuZz1FKE4pLHYuYj1fKE4pLHYub3BhY2l0eT1MKE4pLHYrIiJ9fXJldHVybiBwLmdhbW1hPWkscH0oMSk7ZnVuY3Rpb24gd2tlKGksYSl7YXx8KGE9W10pO3ZhciBmPWk/TWF0aC5taW4oYS5sZW5ndGgsaS5sZW5ndGgpOjAscD1hLnNsaWNlKCksdjtyZXR1cm4gZnVuY3Rpb24obSl7Zm9yKHY9MDt2PGY7Kyt2KXBbdl09aVt2XSooMS1tKSthW3ZdKm07cmV0dXJuIHB9fWZ1bmN0aW9uIG1rZShpKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGkpJiYhKGkgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24geWtlKGksYSl7dmFyIGY9YT9hLmxlbmd0aDowLHA9aT9NYXRoLm1pbihmLGkubGVuZ3RoKTowLHY9bmV3IEFycmF5KHApLG09bmV3IEFycmF5KGYpLGI7Zm9yKGI9MDtiPHA7KytiKXZbYl09bzF0KGlbYl0sYVtiXSk7Zm9yKDtiPGY7KytiKW1bYl09YVtiXTtyZXR1cm4gZnVuY3Rpb24oRSl7Zm9yKGI9MDtiPHA7KytiKW1bYl09dltiXShFKTtyZXR1cm4gbX19ZnVuY3Rpb24geGtlKGksYSl7dmFyIGY9bmV3IERhdGU7cmV0dXJuIGk9K2ksYT0rYSxmdW5jdGlvbihwKXtyZXR1cm4gZi5zZXRUaW1lKGkqKDEtcCkrYSpwKSxmfX1mdW5jdGlvbiBLdyhpLGEpe3JldHVybiBpPStpLGE9K2EsZnVuY3Rpb24oZil7cmV0dXJuIGkqKDEtZikrYSpmfX1mdW5jdGlvbiBra2UoaSxhKXt2YXIgZj17fSxwPXt9LHY7KGk9PT1udWxsfHx0eXBlb2YgaSE9Im9iamVjdCIpJiYoaT17fSksKGE9PT1udWxsfHx0eXBlb2YgYSE9Im9iamVjdCIpJiYoYT17fSk7Zm9yKHYgaW4gYSl2IGluIGk/Zlt2XT1vMXQoaVt2XSxhW3ZdKTpwW3ZdPWFbdl07cmV0dXJuIGZ1bmN0aW9uKG0pe2Zvcih2IGluIGYpcFt2XT1mW3ZdKG0pO3JldHVybiBwfX12YXIgczF0PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhMXQ9bmV3IFJlZ0V4cChzMXQuc291cmNlLCJnIik7ZnVuY3Rpb24gRWtlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBUa2UoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBpKGEpKyIifX1mdW5jdGlvbiB2TXQoaSxhKXt2YXIgZj1zMXQubGFzdEluZGV4PWExdC5sYXN0SW5kZXg9MCxwLHYsbSxiPS0xLEU9W10sXz1bXTtmb3IoaT1pKyIiLGE9YSsiIjsocD1zMXQuZXhlYyhpKSkmJih2PWExdC5leGVjKGEpKTspKG09di5pbmRleCk+ZiYmKG09YS5zbGljZShmLG0pLEVbYl0/RVtiXSs9bTpFWysrYl09bSksKHA9cFswXSk9PT0odj12WzBdKT9FW2JdP0VbYl0rPXY6RVsrK2JdPXY6KEVbKytiXT1udWxsLF8ucHVzaCh7aTpiLHg6S3cocCx2KX0pKSxmPWExdC5sYXN0SW5kZXg7cmV0dXJuIGY8YS5sZW5ndGgmJihtPWEuc2xpY2UoZiksRVtiXT9FW2JdKz1tOkVbKytiXT1tKSxFLmxlbmd0aDwyP19bMF0/VGtlKF9bMF0ueCk6RWtlKGEpOihhPV8ubGVuZ3RoLGZ1bmN0aW9uKEwpe2Zvcih2YXIgTj0wLEI7TjxhOysrTilFWyhCPV9bTl0pLmldPUIueChMKTtyZXR1cm4gRS5qb2luKCIiKX0pfWZ1bmN0aW9uIG8xdChpLGEpe3ZhciBmPXR5cGVvZiBhLHA7cmV0dXJuIGE9PW51bGx8fGY9PT0iYm9vbGVhbiI/VFUoYSk6KGY9PT0ibnVtYmVyIj9LdzpmPT09InN0cmluZyI/KHA9ajcoYSkpPyhhPXAsQ1UpOnZNdDphIGluc3RhbmNlb2Ygajc/Q1U6YSBpbnN0YW5jZW9mIERhdGU/eGtlOm1rZShhKT93a2U6QXJyYXkuaXNBcnJheShhKT95a2U6dHlwZW9mIGEudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIGEudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKGEpP2trZTpLdykoaSxhKX1mdW5jdGlvbiBDa2UoaSxhKXtyZXR1cm4gaT0raSxhPSthLGZ1bmN0aW9uKGYpe3JldHVybiBNYXRoLnJvdW5kKGkqKDEtZikrYSpmKX19dmFyIHdNdD0xODAvTWF0aC5QSSxjMXQ9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gbU10KGksYSxmLHAsdixtKXt2YXIgYixFLF87cmV0dXJuKGI9TWF0aC5zcXJ0KGkqaSthKmEpKSYmKGkvPWIsYS89YiksKF89aSpmK2EqcCkmJihmLT1pKl8scC09YSpfKSwoRT1NYXRoLnNxcnQoZipmK3AqcCkpJiYoZi89RSxwLz1FLF8vPUUpLGkqcDxhKmYmJihpPS1pLGE9LWEsXz0tXyxiPS1iKSx7dHJhbnNsYXRlWDp2LHRyYW5zbGF0ZVk6bSxyb3RhdGU6TWF0aC5hdGFuMihhLGkpKndNdCxza2V3WDpNYXRoLmF0YW4oXykqd010LHNjYWxlWDpiLHNjYWxlWTpFfX12YXIgX1U7ZnVuY3Rpb24gX2tlKGkpe2NvbnN0IGE9bmV3KHR5cGVvZiBET01NYXRyaXg9PSJmdW5jdGlvbiI/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoaSsiIik7cmV0dXJuIGEuaXNJZGVudGl0eT9jMXQ6bU10KGEuYSxhLmIsYS5jLGEuZCxhLmUsYS5mKX1mdW5jdGlvbiBTa2UoaSl7cmV0dXJuIGk9PW51bGx8fChfVXx8KF9VPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLF9VLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixpKSwhKGk9X1UudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpP2MxdDooaT1pLm1hdHJpeCxtTXQoaS5hLGkuYixpLmMsaS5kLGkuZSxpLmYpKX1mdW5jdGlvbiB5TXQoaSxhLGYscCl7ZnVuY3Rpb24gdihMKXtyZXR1cm4gTC5sZW5ndGg/TC5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbShMLE4sQixqLFIseil7aWYoTCE9PUJ8fE4hPT1qKXt2YXIgSz1SLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsYSxudWxsLGYpO3oucHVzaCh7aTpLLTQseDpLdyhMLEIpfSx7aTpLLTIseDpLdyhOLGopfSl9ZWxzZShCfHxqKSYmUi5wdXNoKCJ0cmFuc2xhdGUoIitCK2EraitmKX1mdW5jdGlvbiBiKEwsTixCLGope0whPT1OPyhMLU4+MTgwP04rPTM2MDpOLUw+MTgwJiYoTCs9MzYwKSxqLnB1c2goe2k6Qi5wdXNoKHYoQikrInJvdGF0ZSgiLG51bGwscCktMix4Okt3KEwsTil9KSk6TiYmQi5wdXNoKHYoQikrInJvdGF0ZSgiK04rcCl9ZnVuY3Rpb24gRShMLE4sQixqKXtMIT09Tj9qLnB1c2goe2k6Qi5wdXNoKHYoQikrInNrZXdYKCIsbnVsbCxwKS0yLHg6S3coTCxOKX0pOk4mJkIucHVzaCh2KEIpKyJza2V3WCgiK04rcCl9ZnVuY3Rpb24gXyhMLE4sQixqLFIseil7aWYoTCE9PUJ8fE4hPT1qKXt2YXIgSz1SLnB1c2godihSKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ei5wdXNoKHtpOkstNCx4Okt3KEwsQil9LHtpOkstMix4Okt3KE4sail9KX1lbHNlKEIhPT0xfHxqIT09MSkmJlIucHVzaCh2KFIpKyJzY2FsZSgiK0IrIiwiK2orIikiKX1yZXR1cm4gZnVuY3Rpb24oTCxOKXt2YXIgQj1bXSxqPVtdO3JldHVybiBMPWkoTCksTj1pKE4pLG0oTC50cmFuc2xhdGVYLEwudHJhbnNsYXRlWSxOLnRyYW5zbGF0ZVgsTi50cmFuc2xhdGVZLEIsaiksYihMLnJvdGF0ZSxOLnJvdGF0ZSxCLGopLEUoTC5za2V3WCxOLnNrZXdYLEIsaiksXyhMLnNjYWxlWCxMLnNjYWxlWSxOLnNjYWxlWCxOLnNjYWxlWSxCLGopLEw9Tj1udWxsLGZ1bmN0aW9uKFIpe2Zvcih2YXIgej0tMSxLPWoubGVuZ3RoLGl0OysrejxLOylCWyhpdD1qW3pdKS5pXT1pdC54KFIpO3JldHVybiBCLmpvaW4oIiIpfX19dmFyIEFrZT15TXQoX2tlLCJweCwgIiwicHgpIiwiZGVnKSIpLExrZT15TXQoU2tlLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gTWtlKGkpe3JldHVybiBmdW5jdGlvbihhLGYpe3ZhciBwPWkoKGE9aTF0KGEpKS5oLChmPWkxdChmKSkuaCksdj1UTihhLmMsZi5jKSxtPVROKGEubCxmLmwpLGI9VE4oYS5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVybiBhLmg9cChFKSxhLmM9dihFKSxhLmw9bShFKSxhLm9wYWNpdHk9YihFKSxhKyIifX19Y29uc3QgSWtlPU1rZShia2UpO3ZhciBrQT0wLENOPTAsX049MCx4TXQ9MWUzLFNVLFNOLEFVPTAscTc9MCxMVT0wLEFOPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGtNdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihpKXtzZXRUaW1lb3V0KGksMTcpfTtmdW5jdGlvbiB1MXQoKXtyZXR1cm4gcTd8fChrTXQoRGtlKSxxNz1BTi5ub3coKStMVSl9ZnVuY3Rpb24gRGtlKCl7cTc9MH1mdW5jdGlvbiBNVSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9TVUucHJvdG90eXBlPUVNdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1VLHJlc3RhcnQ6ZnVuY3Rpb24oaSxhLGYpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zj0oZj09bnVsbD91MXQoKTorZikrKGE9PW51bGw/MDorYSksIXRoaXMuX25leHQmJlNOIT09dGhpcyYmKFNOP1NOLl9uZXh0PXRoaXM6U1U9dGhpcyxTTj10aGlzKSx0aGlzLl9jYWxsPWksdGhpcy5fdGltZT1mLGwxdCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxsMXQoKSl9fTtmdW5jdGlvbiBFTXQoaSxhLGYpe3ZhciBwPW5ldyBNVTtyZXR1cm4gcC5yZXN0YXJ0KGksYSxmKSxwfWZ1bmN0aW9uIE9rZSgpe3UxdCgpLCsra0E7Zm9yKHZhciBpPVNVLGE7aTspKGE9cTctaS5fdGltZSk+PTAmJmkuX2NhbGwuY2FsbCh2b2lkIDAsYSksaT1pLl9uZXh0Oy0ta0F9ZnVuY3Rpb24gVE10KCl7cTc9KEFVPUFOLm5vdygpKStMVSxrQT1DTj0wO3RyeXtPa2UoKX1maW5hbGx5e2tBPTAsUGtlKCkscTc9MH19ZnVuY3Rpb24gTmtlKCl7dmFyIGk9QU4ubm93KCksYT1pLUFVO2E+eE10JiYoTFUtPWEsQVU9aSl9ZnVuY3Rpb24gUGtlKCl7Zm9yKHZhciBpLGE9U1UsZixwPTEvMDthOylhLl9jYWxsPyhwPmEuX3RpbWUmJihwPWEuX3RpbWUpLGk9YSxhPWEuX25leHQpOihmPWEuX25leHQsYS5fbmV4dD1udWxsLGE9aT9pLl9uZXh0PWY6U1U9Zik7U049aSxsMXQocCl9ZnVuY3Rpb24gbDF0KGkpe2lmKCFrQSl7Q04mJihDTj1jbGVhclRpbWVvdXQoQ04pKTt2YXIgYT1pLXE3O2E+MjQ/KGk8MS8wJiYoQ049c2V0VGltZW91dChUTXQsaS1BTi5ub3coKS1MVSkpLF9OJiYoX049Y2xlYXJJbnRlcnZhbChfTikpKTooX058fChBVT1BTi5ub3coKSxfTj1zZXRJbnRlcnZhbChOa2UseE10KSksa0E9MSxrTXQoVE10KSl9fWZ1bmN0aW9uIENNdChpLGEsZil7dmFyIHA9bmV3IE1VO3JldHVybiBhPWE9PW51bGw/MDorYSxwLnJlc3RhcnQodj0+e3Auc3RvcCgpLGkodithKX0sYSxmKSxwfXZhciBGa2U9Qkx0KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLEJrZT1bXSxfTXQ9MCxTTXQ9MSxoMXQ9MixJVT0zLEFNdD00LGYxdD01LERVPTY7ZnVuY3Rpb24gT1UoaSxhLGYscCx2LG0pe3ZhciBiPWkuX190cmFuc2l0aW9uO2lmKCFiKWkuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZiBpbiBiKXJldHVybjtSa2UoaSxmLHtuYW1lOmEsaW5kZXg6cCxncm91cDp2LG9uOkZrZSx0d2VlbjpCa2UsdGltZTptLnRpbWUsZGVsYXk6bS5kZWxheSxkdXJhdGlvbjptLmR1cmF0aW9uLGVhc2U6bS5lYXNlLHRpbWVyOm51bGwsc3RhdGU6X010fSl9ZnVuY3Rpb24gZDF0KGksYSl7dmFyIGY9WXcoaSxhKTtpZihmLnN0YXRlPl9NdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBmfWZ1bmN0aW9uIG8zKGksYSl7dmFyIGY9WXcoaSxhKTtpZihmLnN0YXRlPklVKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBmfWZ1bmN0aW9uIFl3KGksYSl7dmFyIGY9aS5fX3RyYW5zaXRpb247aWYoIWZ8fCEoZj1mW2FdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGZ9ZnVuY3Rpb24gUmtlKGksYSxmKXt2YXIgcD1pLl9fdHJhbnNpdGlvbix2O3BbYV09ZixmLnRpbWVyPUVNdChtLDAsZi50aW1lKTtmdW5jdGlvbiBtKEwpe2Yuc3RhdGU9U010LGYudGltZXIucmVzdGFydChiLGYuZGVsYXksZi50aW1lKSxmLmRlbGF5PD1MJiZiKEwtZi5kZWxheSl9ZnVuY3Rpb24gYihMKXt2YXIgTixCLGosUjtpZihmLnN0YXRlIT09U010KXJldHVybiBfKCk7Zm9yKE4gaW4gcClpZihSPXBbTl0sUi5uYW1lPT09Zi5uYW1lKXtpZihSLnN0YXRlPT09SVUpcmV0dXJuIENNdChiKTtSLnN0YXRlPT09QU10PyhSLnN0YXRlPURVLFIudGltZXIuc3RvcCgpLFIub24uY2FsbCgiaW50ZXJydXB0IixpLGkuX19kYXRhX18sUi5pbmRleCxSLmdyb3VwKSxkZWxldGUgcFtOXSk6K048YSYmKFIuc3RhdGU9RFUsUi50aW1lci5zdG9wKCksUi5vbi5jYWxsKCJjYW5jZWwiLGksaS5fX2RhdGFfXyxSLmluZGV4LFIuZ3JvdXApLGRlbGV0ZSBwW05dKX1pZihDTXQoZnVuY3Rpb24oKXtmLnN0YXRlPT09SVUmJihmLnN0YXRlPUFNdCxmLnRpbWVyLnJlc3RhcnQoRSxmLmRlbGF5LGYudGltZSksRShMKSl9KSxmLnN0YXRlPWgxdCxmLm9uLmNhbGwoInN0YXJ0IixpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxmLnN0YXRlPT09aDF0KXtmb3IoZi5zdGF0ZT1JVSx2PW5ldyBBcnJheShqPWYudHdlZW4ubGVuZ3RoKSxOPTAsQj0tMTtOPGo7KytOKShSPWYudHdlZW5bTl0udmFsdWUuY2FsbChpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSkmJih2WysrQl09Uik7di5sZW5ndGg9QisxfX1mdW5jdGlvbiBFKEwpe2Zvcih2YXIgTj1MPGYuZHVyYXRpb24/Zi5lYXNlLmNhbGwobnVsbCxML2YuZHVyYXRpb24pOihmLnRpbWVyLnJlc3RhcnQoXyksZi5zdGF0ZT1mMXQsMSksQj0tMSxqPXYubGVuZ3RoOysrQjxqOyl2W0JdLmNhbGwoaSxOKTtmLnN0YXRlPT09ZjF0JiYoZi5vbi5jYWxsKCJlbmQiLGksaS5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLF8oKSl9ZnVuY3Rpb24gXygpe2Yuc3RhdGU9RFUsZi50aW1lci5zdG9wKCksZGVsZXRlIHBbYV07Zm9yKHZhciBMIGluIHApcmV0dXJuO2RlbGV0ZSBpLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gamtlKGksYSl7dmFyIGY9aS5fX3RyYW5zaXRpb24scCx2LG09ITAsYjtpZihmKXthPWE9PW51bGw/bnVsbDphKyIiO2ZvcihiIGluIGYpe2lmKChwPWZbYl0pLm5hbWUhPT1hKXttPSExO2NvbnRpbnVlfXY9cC5zdGF0ZT5oMXQmJnAuc3RhdGU8ZjF0LHAuc3RhdGU9RFUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKHY/ImludGVycnVwdCI6ImNhbmNlbCIsaSxpLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIGZbYl19bSYmZGVsZXRlIGkuX190cmFuc2l0aW9ufX1mdW5jdGlvbiAka2UoaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2prZSh0aGlzLGkpfSl9ZnVuY3Rpb24gemtlKGksYSl7dmFyIGYscDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1vMyh0aGlzLGkpLG09di50d2VlbjtpZihtIT09Zil7cD1mPW07Zm9yKHZhciBiPTAsRT1wLmxlbmd0aDtiPEU7KytiKWlmKHBbYl0ubmFtZT09PWEpe3A9cC5zbGljZSgpLHAuc3BsaWNlKGIsMSk7YnJlYWt9fXYudHdlZW49cH19ZnVuY3Rpb24gcWtlKGksYSxmKXt2YXIgcCx2O2lmKHR5cGVvZiBmIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1vMyh0aGlzLGkpLGI9bS50d2VlbjtpZihiIT09cCl7dj0ocD1iKS5zbGljZSgpO2Zvcih2YXIgRT17bmFtZTphLHZhbHVlOmZ9LF89MCxMPXYubGVuZ3RoO188TDsrK18paWYodltfXS5uYW1lPT09YSl7dltfXT1FO2JyZWFrfV89PT1MJiZ2LnB1c2goRSl9bS50d2Vlbj12fX1mdW5jdGlvbiBIa2UoaSxhKXt2YXIgZj10aGlzLl9pZDtpZihpKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcD1Zdyh0aGlzLm5vZGUoKSxmKS50d2Vlbix2PTAsbT1wLmxlbmd0aCxiO3Y8bTsrK3YpaWYoKGI9cFt2XSkubmFtZT09PWkpcmV0dXJuIGIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgoYT09bnVsbD96a2U6cWtlKShmLGksYSkpfWZ1bmN0aW9uIGcxdChpLGEsZil7dmFyIHA9aS5faWQ7cmV0dXJuIGkuZWFjaChmdW5jdGlvbigpe3ZhciB2PW8zKHRoaXMscCk7KHYudmFsdWV8fCh2LnZhbHVlPXt9KSlbYV09Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih2KXtyZXR1cm4gWXcodixwKS52YWx1ZVthXX19ZnVuY3Rpb24gTE10KGksYSl7dmFyIGY7cmV0dXJuKHR5cGVvZiBhPT0ibnVtYmVyIj9LdzphIGluc3RhbmNlb2Ygajc/Q1U6KGY9ajcoYSkpPyhhPWYsQ1UpOnZNdCkoaSxhKX1mdW5jdGlvbiBHa2UoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9fWZ1bmN0aW9uIFZrZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIFVrZShpLGEsZil7dmFyIHAsdj1mKyIiLG07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRBdHRyaWJ1dGUoaSk7cmV0dXJuIGI9PT12P251bGw6Yj09PXA/bTptPWEocD1iLGYpfX1mdW5jdGlvbiBXa2UoaSxhLGYpe3ZhciBwLHY9ZisiIixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTtyZXR1cm4gYj09PXY/bnVsbDpiPT09cD9tOm09YShwPWIsZil9fWZ1bmN0aW9uIEtrZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiLEU9Zih0aGlzKSxfO3JldHVybiBFPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSk6KGI9dGhpcy5nZXRBdHRyaWJ1dGUoaSksXz1FKyIiLGI9PT1fP251bGw6Yj09PXAmJl89PT12P206KHY9XyxtPWEocD1iLEUpKSl9fWZ1bmN0aW9uIFlrZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiLEU9Zih0aGlzKSxfO3JldHVybiBFPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpOihiPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKSxfPUUrIiIsYj09PV8/bnVsbDpiPT09cCYmXz09PXY/bToodj1fLG09YShwPWIsRSkpKX19ZnVuY3Rpb24gWGtlKGksYSl7dmFyIGY9YlUoaSkscD1mPT09InRyYW5zZm9ybSI/TGtlOkxNdDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oaSx0eXBlb2YgYT09ImZ1bmN0aW9uIj8oZi5sb2NhbD9Za2U6S2tlKShmLHAsZzF0KHRoaXMsImF0dHIuIitpLGEpKTphPT1udWxsPyhmLmxvY2FsP1ZrZTpHa2UpKGYpOihmLmxvY2FsP1drZTpVa2UpKGYscCxhKSl9ZnVuY3Rpb24gUWtlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3RoaXMuc2V0QXR0cmlidXRlKGksYS5jYWxsKHRoaXMsZikpfX1mdW5jdGlvbiBaa2UoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsYS5jYWxsKHRoaXMsZikpfX1mdW5jdGlvbiBKa2UoaSxhKXt2YXIgZixwO2Z1bmN0aW9uIHYoKXt2YXIgbT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbSE9PXAmJihmPShwPW0pJiZaa2UoaSxtKSksZn1yZXR1cm4gdi5fdmFsdWU9YSx2fWZ1bmN0aW9uIHQ4ZShpLGEpe3ZhciBmLHA7ZnVuY3Rpb24gdigpe3ZhciBtPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBtIT09cCYmKGY9KHA9bSkmJlFrZShpLG0pKSxmfXJldHVybiB2Ll92YWx1ZT1hLHZ9ZnVuY3Rpb24gZThlKGksYSl7dmFyIGY9ImF0dHIuIitpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZj10aGlzLnR3ZWVuKGYpKSYmZi5fdmFsdWU7aWYoYT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihmLG51bGwpO2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgcD1iVShpKTtyZXR1cm4gdGhpcy50d2VlbihmLChwLmxvY2FsP0prZTp0OGUpKHAsYSkpfWZ1bmN0aW9uIG44ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe2QxdCh0aGlzLGkpLmRlbGF5PSthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gcjhlKGksYSl7cmV0dXJuIGE9K2EsZnVuY3Rpb24oKXtkMXQodGhpcyxpKS5kZWxheT1hfX1mdW5jdGlvbiBpOGUoaSl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgaT09ImZ1bmN0aW9uIj9uOGU6cjhlKShhLGkpKTpZdyh0aGlzLm5vZGUoKSxhKS5kZWxheX1mdW5jdGlvbiBzOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmR1cmF0aW9uPSthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gYThlKGksYSl7cmV0dXJuIGE9K2EsZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmR1cmF0aW9uPWF9fWZ1bmN0aW9uIG84ZShpKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBpPT0iZnVuY3Rpb24iP3M4ZTphOGUpKGEsaSkpOll3KHRoaXMubm9kZSgpLGEpLmR1cmF0aW9ufWZ1bmN0aW9uIGM4ZShpLGEpe2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmVhc2U9YX19ZnVuY3Rpb24gdThlKGkpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChjOGUoYSxpKSk6WXcodGhpcy5ub2RlKCksYSkuZWFzZX1mdW5jdGlvbiBsOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih0eXBlb2YgZiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7bzModGhpcyxpKS5lYXNlPWZ9fWZ1bmN0aW9uIGg4ZShpKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChsOGUodGhpcy5faWQsaSkpfWZ1bmN0aW9uIGY4ZShpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9SEx0KGkpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksdj0wO3Y8ZjsrK3YpZm9yKHZhciBtPWFbdl0sYj1tLmxlbmd0aCxFPXBbdl09W10sXyxMPTA7TDxiOysrTCkoXz1tW0xdKSYmaS5jYWxsKF8sXy5fX2RhdGFfXyxMLG0pJiZFLnB1c2goXyk7cmV0dXJuIG5ldyBwNShwLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9ZnVuY3Rpb24gZDhlKGkpe2lmKGkuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1pLl9ncm91cHMscD1hLmxlbmd0aCx2PWYubGVuZ3RoLG09TWF0aC5taW4ocCx2KSxiPW5ldyBBcnJheShwKSxFPTA7RTxtOysrRSlmb3IodmFyIF89YVtFXSxMPWZbRV0sTj1fLmxlbmd0aCxCPWJbRV09bmV3IEFycmF5KE4pLGosUj0wO1I8TjsrK1IpKGo9X1tSXXx8TFtSXSkmJihCW1JdPWopO2Zvcig7RTxwOysrRSliW0VdPWFbRV07cmV0dXJuIG5ldyBwNShiLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9ZnVuY3Rpb24gZzhlKGkpe3JldHVybihpKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24oYSl7dmFyIGY9YS5pbmRleE9mKCIuIik7cmV0dXJuIGY+PTAmJihhPWEuc2xpY2UoMCxmKSksIWF8fGE9PT0ic3RhcnQifSl9ZnVuY3Rpb24gcDhlKGksYSxmKXt2YXIgcCx2LG09ZzhlKGEpP2QxdDpvMztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1tKHRoaXMsaSksRT1iLm9uO0UhPT1wJiYodj0ocD1FKS5jb3B5KCkpLm9uKGEsZiksYi5vbj12fX1mdW5jdGlvbiBiOGUoaSxhKXt2YXIgZj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1l3KHRoaXMubm9kZSgpLGYpLm9uLm9uKGkpOnRoaXMuZWFjaChwOGUoZixpLGEpKX1mdW5jdGlvbiB2OGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZiE9PWkpcmV0dXJuO2EmJmEucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIHc4ZSgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIix2OGUodGhpcy5faWQpKX1mdW5jdGlvbiBtOGUoaSl7dmFyIGE9dGhpcy5fbmFtZSxmPXRoaXMuX2lkO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1ZZnQoaSkpO2Zvcih2YXIgcD10aGlzLl9ncm91cHMsdj1wLmxlbmd0aCxtPW5ldyBBcnJheSh2KSxiPTA7Yjx2OysrYilmb3IodmFyIEU9cFtiXSxfPUUubGVuZ3RoLEw9bVtiXT1uZXcgQXJyYXkoXyksTixCLGo9MDtqPF87KytqKShOPUVbal0pJiYoQj1pLmNhbGwoTixOLl9fZGF0YV9fLGosRSkpJiYoIl9fZGF0YV9fImluIE4mJihCLl9fZGF0YV9fPU4uX19kYXRhX18pLExbal09QixPVShMW2pdLGEsZixqLEwsWXcoTixmKSkpO3JldHVybiBuZXcgcDUobSx0aGlzLl9wYXJlbnRzLGEsZil9ZnVuY3Rpb24geThlKGkpe3ZhciBhPXRoaXMuX25hbWUsZj10aGlzLl9pZDt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9cUx0KGkpKTtmb3IodmFyIHA9dGhpcy5fZ3JvdXBzLHY9cC5sZW5ndGgsbT1bXSxiPVtdLEU9MDtFPHY7KytFKWZvcih2YXIgXz1wW0VdLEw9Xy5sZW5ndGgsTixCPTA7QjxMOysrQilpZihOPV9bQl0pe2Zvcih2YXIgaj1pLmNhbGwoTixOLl9fZGF0YV9fLEIsXyksUix6PVl3KE4sZiksSz0wLGl0PWoubGVuZ3RoO0s8aXQ7KytLKShSPWpbS10pJiZPVShSLGEsZixLLGoseik7bS5wdXNoKGopLGIucHVzaChOKX1yZXR1cm4gbmV3IHA1KG0sYixhLGYpfXZhciB4OGU9eU4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGs4ZSgpe3JldHVybiBuZXcgeDhlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBFOGUoaSxhKXt2YXIgZixwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09bUEodGhpcyxpKSxiPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpLG1BKHRoaXMsaSkpO3JldHVybiBtPT09Yj9udWxsOm09PT1mJiZiPT09cD92OnY9YShmPW0scD1iKX19ZnVuY3Rpb24gTU10KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSl9fWZ1bmN0aW9uIFQ4ZShpLGEsZil7dmFyIHAsdj1mKyIiLG07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9bUEodGhpcyxpKTtyZXR1cm4gYj09PXY/bnVsbDpiPT09cD9tOm09YShwPWIsZil9fWZ1bmN0aW9uIEM4ZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPW1BKHRoaXMsaSksRT1mKHRoaXMpLF89RSsiIjtyZXR1cm4gRT09bnVsbCYmKF89RT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKSxtQSh0aGlzLGkpKSksYj09PV8/bnVsbDpiPT09cCYmXz09PXY/bToodj1fLG09YShwPWIsRSkpfX1mdW5jdGlvbiBfOGUoaSxhKXt2YXIgZixwLHYsbT0ic3R5bGUuIithLGI9ImVuZC4iK20sRTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1vMyh0aGlzLGkpLEw9Xy5vbixOPV8udmFsdWVbbV09PW51bGw/RXx8KEU9TU10KGEpKTp2b2lkIDA7KEwhPT1mfHx2IT09TikmJihwPShmPUwpLmNvcHkoKSkub24oYix2PU4pLF8ub249cH19ZnVuY3Rpb24gUzhlKGksYSxmKXt2YXIgcD0oaSs9IiIpPT0idHJhbnNmb3JtIj9Ba2U6TE10O3JldHVybiBhPT1udWxsP3RoaXMuc3R5bGVUd2VlbihpLEU4ZShpLHApKS5vbigiZW5kLnN0eWxlLiIraSxNTXQoaSkpOnR5cGVvZiBhPT0iZnVuY3Rpb24iP3RoaXMuc3R5bGVUd2VlbihpLEM4ZShpLHAsZzF0KHRoaXMsInN0eWxlLiIraSxhKSkpLmVhY2goXzhlKHRoaXMuX2lkLGkpKTp0aGlzLnN0eWxlVHdlZW4oaSxUOGUoaSxwLGEpLGYpLm9uKCJlbmQuc3R5bGUuIitpLG51bGwpfWZ1bmN0aW9uIEE4ZShpLGEsZil7cmV0dXJuIGZ1bmN0aW9uKHApe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxhLmNhbGwodGhpcyxwKSxmKX19ZnVuY3Rpb24gTDhlKGksYSxmKXt2YXIgcCx2O2Z1bmN0aW9uIG0oKXt2YXIgYj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYiE9PXYmJihwPSh2PWIpJiZBOGUoaSxiLGYpKSxwfXJldHVybiBtLl92YWx1ZT1hLG19ZnVuY3Rpb24gTThlKGksYSxmKXt2YXIgcD0ic3R5bGUuIisoaSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocD10aGlzLnR3ZWVuKHApKSYmcC5fdmFsdWU7aWYoYT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihwLG51bGwpO2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihwLEw4ZShpLGEsZj8/IiIpKX1mdW5jdGlvbiBJOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1pfX1mdW5jdGlvbiBEOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aSh0aGlzKTt0aGlzLnRleHRDb250ZW50PWE/PyIifX1mdW5jdGlvbiBPOGUoaSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBpPT0iZnVuY3Rpb24iP0Q4ZShnMXQodGhpcywidGV4dCIsaSkpOkk4ZShpPT1udWxsPyIiOmkrIiIpKX1mdW5jdGlvbiBOOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMudGV4dENvbnRlbnQ9aS5jYWxsKHRoaXMsYSl9fWZ1bmN0aW9uIFA4ZShpKXt2YXIgYSxmO2Z1bmN0aW9uIHAoKXt2YXIgdj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdiE9PWYmJihhPShmPXYpJiZOOGUodikpLGF9cmV0dXJuIHAuX3ZhbHVlPWkscH1mdW5jdGlvbiBGOGUoaSl7dmFyIGE9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYoaT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihhLFA4ZShpKSl9ZnVuY3Rpb24gQjhlKCl7Zm9yKHZhciBpPXRoaXMuX25hbWUsYT10aGlzLl9pZCxmPUlNdCgpLHA9dGhpcy5fZ3JvdXBzLHY9cC5sZW5ndGgsbT0wO208djsrK20pZm9yKHZhciBiPXBbbV0sRT1iLmxlbmd0aCxfLEw9MDtMPEU7KytMKWlmKF89YltMXSl7dmFyIE49WXcoXyxhKTtPVShfLGksZixMLGIse3RpbWU6Ti50aW1lK04uZGVsYXkrTi5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOk4uZHVyYXRpb24sZWFzZTpOLmVhc2V9KX1yZXR1cm4gbmV3IHA1KHAsdGhpcy5fcGFyZW50cyxpLGYpfWZ1bmN0aW9uIFI4ZSgpe3ZhciBpLGEsZj10aGlzLHA9Zi5faWQsdj1mLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obSxiKXt2YXIgRT17dmFsdWU6Yn0sXz17dmFsdWU6ZnVuY3Rpb24oKXstLXY9PT0wJiZtKCl9fTtmLmVhY2goZnVuY3Rpb24oKXt2YXIgTD1vMyh0aGlzLHApLE49TC5vbjtOIT09aSYmKGE9KGk9TikuY29weSgpLGEuXy5jYW5jZWwucHVzaChFKSxhLl8uaW50ZXJydXB0LnB1c2goRSksYS5fLmVuZC5wdXNoKF8pKSxMLm9uPWF9KSx2PT09MCYmbSgpfSl9dmFyIGo4ZT0wO2Z1bmN0aW9uIHA1KGksYSxmLHApe3RoaXMuX2dyb3Vwcz1pLHRoaXMuX3BhcmVudHM9YSx0aGlzLl9uYW1lPWYsdGhpcy5faWQ9cH1mdW5jdGlvbiBJTXQoKXtyZXR1cm4rK2o4ZX12YXIgYjU9eU4ucHJvdG90eXBlO3A1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cDUsc2VsZWN0Om04ZSxzZWxlY3RBbGw6eThlLHNlbGVjdENoaWxkOmI1LnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOmI1LnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmOGUsbWVyZ2U6ZDhlLHNlbGVjdGlvbjprOGUsdHJhbnNpdGlvbjpCOGUsY2FsbDpiNS5jYWxsLG5vZGVzOmI1Lm5vZGVzLG5vZGU6YjUubm9kZSxzaXplOmI1LnNpemUsZW1wdHk6YjUuZW1wdHksZWFjaDpiNS5lYWNoLG9uOmI4ZSxhdHRyOlhrZSxhdHRyVHdlZW46ZThlLHN0eWxlOlM4ZSxzdHlsZVR3ZWVuOk04ZSx0ZXh0Ok84ZSx0ZXh0VHdlZW46RjhlLHJlbW92ZTp3OGUsdHdlZW46SGtlLGRlbGF5Omk4ZSxkdXJhdGlvbjpvOGUsZWFzZTp1OGUsZWFzZVZhcnlpbmc6aDhlLGVuZDpSOGUsW1N5bWJvbC5pdGVyYXRvcl06YjVbU3ltYm9sLml0ZXJhdG9yXX07ZnVuY3Rpb24gJDhlKGkpe3JldHVybigoaSo9Mik8PTE/aSppKmk6KGktPTIpKmkqaSsyKS8yfXZhciB6OGU9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOiQ4ZX07ZnVuY3Rpb24gcThlKGksYSl7Zm9yKHZhciBmOyEoZj1pLl9fdHJhbnNpdGlvbil8fCEoZj1mW2FdKTspaWYoIShpPWkucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7YX0gbm90IGZvdW5kYCk7cmV0dXJuIGZ9ZnVuY3Rpb24gSDhlKGkpe3ZhciBhLGY7aSBpbnN0YW5jZW9mIHA1PyhhPWkuX2lkLGk9aS5fbmFtZSk6KGE9SU10KCksKGY9ejhlKS50aW1lPXUxdCgpLGk9aT09bnVsbD9udWxsOmkrIiIpO2Zvcih2YXIgcD10aGlzLl9ncm91cHMsdj1wLmxlbmd0aCxtPTA7bTx2OysrbSlmb3IodmFyIGI9cFttXSxFPWIubGVuZ3RoLF8sTD0wO0w8RTsrK0wpKF89YltMXSkmJk9VKF8saSxhLEwsYixmfHxxOGUoXyxhKSk7cmV0dXJuIG5ldyBwNShwLHRoaXMuX3BhcmVudHMsaSxhKX15Ti5wcm90b3R5cGUuaW50ZXJydXB0PSRrZSx5Ti5wcm90b3R5cGUudHJhbnNpdGlvbj1IOGU7Y29uc3QgcDF0PU1hdGguUEksYjF0PTIqcDF0LEg3PTFlLTYsRzhlPWIxdC1INztmdW5jdGlvbiB2MXQoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB3MXQoKXtyZXR1cm4gbmV3IHYxdH12MXQucHJvdG90eXBlPXcxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnYxdCxtb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK2ErIiwiKyh0aGlzLl94MT0rZikrIiwiKyh0aGlzLl95MT0rcCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCx2LG0pe3RoaXMuXys9IkMiKyAraSsiLCIrICthKyIsIisgK2YrIiwiKyArcCsiLCIrKHRoaXMuX3gxPSt2KSsiLCIrKHRoaXMuX3kxPSttKX0sYXJjVG86ZnVuY3Rpb24oaSxhLGYscCx2KXtpPStpLGE9K2EsZj0rZixwPStwLHY9K3Y7dmFyIG09dGhpcy5feDEsYj10aGlzLl95MSxFPWYtaSxfPXAtYSxMPW0taSxOPWItYSxCPUwqTCtOKk47aWYodjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3YpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1hKTtlbHNlIGlmKEI+SDcpaWYoIShNYXRoLmFicyhOKkUtXypMKT5INyl8fCF2KXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPWEpO2Vsc2V7dmFyIGo9Zi1tLFI9cC1iLHo9RSpFK18qXyxLPWoqaitSKlIsaXQ9TWF0aC5zcXJ0KHopLHN0PU1hdGguc3FydChCKSx1dD12Kk1hdGgudGFuKChwMXQtTWF0aC5hY29zKCh6K0ItSykvKDIqaXQqc3QpKSkvMiksYnQ9dXQvc3QsbXQ9dXQvaXQ7TWF0aC5hYnMoYnQtMSk+SDcmJih0aGlzLl8rPSJMIisoaStidCpMKSsiLCIrKGErYnQqTikpLHRoaXMuXys9IkEiK3YrIiwiK3YrIiwwLDAsIisgKyhOKmo+TCpSKSsiLCIrKHRoaXMuX3gxPWkrbXQqRSkrIiwiKyh0aGlzLl95MT1hK210Kl8pfX0sYXJjOmZ1bmN0aW9uKGksYSxmLHAsdixtKXtpPStpLGE9K2EsZj0rZixtPSEhbTt2YXIgYj1mKk1hdGguY29zKHApLEU9ZipNYXRoLnNpbihwKSxfPWkrYixMPWErRSxOPTFebSxCPW0/cC12OnYtcDtpZihmPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK18rIiwiK0w6KE1hdGguYWJzKHRoaXMuX3gxLV8pPkg3fHxNYXRoLmFicyh0aGlzLl95MS1MKT5INykmJih0aGlzLl8rPSJMIitfKyIsIitMKSxmJiYoQjwwJiYoQj1CJWIxdCtiMXQpLEI+RzhlP3RoaXMuXys9IkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisoaS1iKSsiLCIrKGEtRSkrIkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisodGhpcy5feDE9XykrIiwiKyh0aGlzLl95MT1MKTpCPkg3JiYodGhpcy5fKz0iQSIrZisiLCIrZisiLDAsIisgKyhCPj1wMXQpKyIsIitOKyIsIisodGhpcy5feDE9aStmKk1hdGguY29zKHYpKSsiLCIrKHRoaXMuX3kxPWErZipNYXRoLnNpbih2KSkpKX0scmVjdDpmdW5jdGlvbihpLGEsZixwKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpKyJoIisgK2YrInYiKyArcCsiaCIrLWYrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBWOGUoaSl7aWYoIWkub2spdGhyb3cgbmV3IEVycm9yKGkuc3RhdHVzKyIgIitpLnN0YXR1c1RleHQpO3JldHVybiBpLnRleHQoKX1mdW5jdGlvbiBVOGUoaSxhKXtyZXR1cm4gZmV0Y2goaSxhKS50aGVuKFY4ZSl9ZnVuY3Rpb24gVzhlKGkpe3JldHVybihhLGYpPT5VOGUoYSxmKS50aGVuKHA9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocCxpKSl9dmFyIEs4ZT1XOGUoImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBZOGUoaSl7cmV0dXJuIE1hdGguYWJzKGk9TWF0aC5yb3VuZChpKSk+PTFlMjE/aS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmkudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE5VKGksYSl7aWYoKGY9KGk9YT9pLnRvRXhwb25lbnRpYWwoYS0xKTppLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBmLHA9aS5zbGljZSgwLGYpO3JldHVybltwLmxlbmd0aD4xP3BbMF0rcC5zbGljZSgyKTpwLCtpLnNsaWNlKGYrMSldfWZ1bmN0aW9uIEVBKGkpe3JldHVybiBpPU5VKE1hdGguYWJzKGkpKSxpP2lbMV06TmFOfWZ1bmN0aW9uIFg4ZShpLGEpe3JldHVybiBmdW5jdGlvbihmLHApe2Zvcih2YXIgdj1mLmxlbmd0aCxtPVtdLGI9MCxFPWlbMF0sXz0wO3Y+MCYmRT4wJiYoXytFKzE+cCYmKEU9TWF0aC5tYXgoMSxwLV8pKSxtLnB1c2goZi5zdWJzdHJpbmcodi09RSx2K0UpKSwhKChfKz1FKzEpPnApKTspRT1pW2I9KGIrMSklaS5sZW5ndGhdO3JldHVybiBtLnJldmVyc2UoKS5qb2luKGEpfX1mdW5jdGlvbiBROGUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZil7cmV0dXJuIGlbK2ZdfSl9fXZhciBaOGU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gUFUoaSl7aWYoIShhPVo4ZS5leGVjKGkpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2kpO3ZhciBhO3JldHVybiBuZXcgbTF0KHtmaWxsOmFbMV0sYWxpZ246YVsyXSxzaWduOmFbM10sc3ltYm9sOmFbNF0semVybzphWzVdLHdpZHRoOmFbNl0sY29tbWE6YVs3XSxwcmVjaXNpb246YVs4XSYmYVs4XS5zbGljZSgxKSx0cmltOmFbOV0sdHlwZTphWzEwXX0pfVBVLnByb3RvdHlwZT1tMXQucHJvdG90eXBlO2Z1bmN0aW9uIG0xdChpKXt0aGlzLmZpbGw9aS5maWxsPT09dm9pZCAwPyIgIjppLmZpbGwrIiIsdGhpcy5hbGlnbj1pLmFsaWduPT09dm9pZCAwPyI+IjppLmFsaWduKyIiLHRoaXMuc2lnbj1pLnNpZ249PT12b2lkIDA/Ii0iOmkuc2lnbisiIix0aGlzLnN5bWJvbD1pLnN5bWJvbD09PXZvaWQgMD8iIjppLnN5bWJvbCsiIix0aGlzLnplcm89ISFpLnplcm8sdGhpcy53aWR0aD1pLndpZHRoPT09dm9pZCAwP3ZvaWQgMDoraS53aWR0aCx0aGlzLmNvbW1hPSEhaS5jb21tYSx0aGlzLnByZWNpc2lvbj1pLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2kucHJlY2lzaW9uLHRoaXMudHJpbT0hIWkudHJpbSx0aGlzLnR5cGU9aS50eXBlPT09dm9pZCAwPyIiOmkudHlwZSsiIn1tMXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07ZnVuY3Rpb24gSjhlKGkpe3Q6Zm9yKHZhciBhPWkubGVuZ3RoLGY9MSxwPS0xLHY7ZjxhOysrZilzd2l0Y2goaVtmXSl7Y2FzZSIuIjpwPXY9ZjticmVhaztjYXNlIjAiOnA9PT0wJiYocD1mKSx2PWY7YnJlYWs7ZGVmYXVsdDppZighK2lbZl0pYnJlYWsgdDtwPjAmJihwPTApO2JyZWFrfXJldHVybiBwPjA/aS5zbGljZSgwLHApK2kuc2xpY2UodisxKTppfXZhciBETXQ7ZnVuY3Rpb24gdEVlKGksYSl7dmFyIGY9TlUoaSxhKTtpZighZilyZXR1cm4gaSsiIjt2YXIgcD1mWzBdLHY9ZlsxXSxtPXYtKERNdD1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Iodi8zKSkpKjMpKzEsYj1wLmxlbmd0aDtyZXR1cm4gbT09PWI/cDptPmI/cCtuZXcgQXJyYXkobS1iKzEpLmpvaW4oIjAiKTptPjA/cC5zbGljZSgwLG0pKyIuIitwLnNsaWNlKG0pOiIwLiIrbmV3IEFycmF5KDEtbSkuam9pbigiMCIpK05VKGksTWF0aC5tYXgoMCxhK20tMSkpWzBdfWZ1bmN0aW9uIE9NdChpLGEpe3ZhciBmPU5VKGksYSk7aWYoIWYpcmV0dXJuIGkrIiI7dmFyIHA9ZlswXSx2PWZbMV07cmV0dXJuIHY8MD8iMC4iK25ldyBBcnJheSgtdikuam9pbigiMCIpK3A6cC5sZW5ndGg+disxP3Auc2xpY2UoMCx2KzEpKyIuIitwLnNsaWNlKHYrMSk6cCtuZXcgQXJyYXkodi1wLmxlbmd0aCsyKS5qb2luKCIwIil9Y29uc3QgTk10PXsiJSI6KGksYSk9PihpKjEwMCkudG9GaXhlZChhKSxiOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMiksYzppPT5pKyIiLGQ6WThlLGU6KGksYSk9PmkudG9FeHBvbmVudGlhbChhKSxmOihpLGEpPT5pLnRvRml4ZWQoYSksZzooaSxhKT0+aS50b1ByZWNpc2lvbihhKSxvOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoOCkscDooaSxhKT0+T010KGkqMTAwLGEpLHI6T010LHM6dEVlLFg6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4Omk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBQTXQoaSl7cmV0dXJuIGl9dmFyIEZNdD1BcnJheS5wcm90b3R5cGUubWFwLEJNdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gZUVlKGkpe3ZhciBhPWkuZ3JvdXBpbmc9PT12b2lkIDB8fGkudGhvdXNhbmRzPT09dm9pZCAwP1BNdDpYOGUoRk10LmNhbGwoaS5ncm91cGluZyxOdW1iZXIpLGkudGhvdXNhbmRzKyIiKSxmPWkuY3VycmVuY3k9PT12b2lkIDA/IiI6aS5jdXJyZW5jeVswXSsiIixwPWkuY3VycmVuY3k9PT12b2lkIDA/IiI6aS5jdXJyZW5jeVsxXSsiIix2PWkuZGVjaW1hbD09PXZvaWQgMD8iLiI6aS5kZWNpbWFsKyIiLG09aS5udW1lcmFscz09PXZvaWQgMD9QTXQ6UThlKEZNdC5jYWxsKGkubnVtZXJhbHMsU3RyaW5nKSksYj1pLnBlcmNlbnQ9PT12b2lkIDA/IiUiOmkucGVyY2VudCsiIixFPWkubWludXM9PT12b2lkIDA/IuKIkiI6aS5taW51cysiIixfPWkubmFuPT09dm9pZCAwPyJOYU4iOmkubmFuKyIiO2Z1bmN0aW9uIEwoQil7Qj1QVShCKTt2YXIgaj1CLmZpbGwsUj1CLmFsaWduLHo9Qi5zaWduLEs9Qi5zeW1ib2wsaXQ9Qi56ZXJvLHN0PUIud2lkdGgsdXQ9Qi5jb21tYSxidD1CLnByZWNpc2lvbixtdD1CLnRyaW0seXQ9Qi50eXBlO3l0PT09Im4iPyh1dD0hMCx5dD0iZyIpOk5NdFt5dF18fChidD09PXZvaWQgMCYmKGJ0PTEyKSxtdD0hMCx5dD0iZyIpLChpdHx8aj09PSIwIiYmUj09PSI9IikmJihpdD0hMCxqPSIwIixSPSI9Iik7dmFyIGR0PUs9PT0iJCI/ZjpLPT09IiMiJiYvW2JveFhdLy50ZXN0KHl0KT8iMCIreXQudG9Mb3dlckNhc2UoKToiIixodD1LPT09IiQiP3A6L1slcF0vLnRlc3QoeXQpP2I6IiIsd3Q9Tk10W3l0XSxYPS9bZGVmZ3BycyVdLy50ZXN0KHl0KTtidD1idD09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoeXQpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGJ0KSk7ZnVuY3Rpb24gcHQoVSl7dmFyIHh0PWR0LG50PWh0LE90LE50LHF0O2lmKHl0PT09ImMiKW50PXd0KFUpK250LFU9IiI7ZWxzZXtVPStVO3ZhciBDdD1VPDB8fDEvVTwwO2lmKFU9aXNOYU4oVSk/Xzp3dChNYXRoLmFicyhVKSxidCksbXQmJihVPUo4ZShVKSksQ3QmJitVPT0wJiZ6IT09IisiJiYoQ3Q9ITEpLHh0PShDdD96PT09IigiP3o6RTp6PT09Ii0ifHx6PT09IigiPyIiOnopK3h0LG50PSh5dD09PSJzIj9CTXRbOCtETXQvM106IiIpK250KyhDdCYmej09PSIoIj8iKSI6IiIpLFgpe2ZvcihPdD0tMSxOdD1VLmxlbmd0aDsrK090PE50OylpZihxdD1VLmNoYXJDb2RlQXQoT3QpLDQ4PnF0fHxxdD41Nyl7bnQ9KHF0PT09NDY/ditVLnNsaWNlKE90KzEpOlUuc2xpY2UoT3QpKStudCxVPVUuc2xpY2UoMCxPdCk7YnJlYWt9fX11dCYmIWl0JiYoVT1hKFUsMS8wKSk7dmFyIFo9eHQubGVuZ3RoK1UubGVuZ3RoK250Lmxlbmd0aCxUdD1aPHN0P25ldyBBcnJheShzdC1aKzEpLmpvaW4oaik6IiI7c3dpdGNoKHV0JiZpdCYmKFU9YShUdCtVLFR0Lmxlbmd0aD9zdC1udC5sZW5ndGg6MS8wKSxUdD0iIiksUil7Y2FzZSI8IjpVPXh0K1UrbnQrVHQ7YnJlYWs7Y2FzZSI9IjpVPXh0K1R0K1UrbnQ7YnJlYWs7Y2FzZSJeIjpVPVR0LnNsaWNlKDAsWj1UdC5sZW5ndGg+PjEpK3h0K1UrbnQrVHQuc2xpY2UoWik7YnJlYWs7ZGVmYXVsdDpVPVR0K3h0K1UrbnQ7YnJlYWt9cmV0dXJuIG0oVSl9cmV0dXJuIHB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEIrIiJ9LHB0fWZ1bmN0aW9uIE4oQixqKXt2YXIgUj1MKChCPVBVKEIpLEIudHlwZT0iZiIsQikpLHo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEVBKGopLzMpKSkqMyxLPU1hdGgucG93KDEwLC16KSxpdD1CTXRbOCt6LzNdO3JldHVybiBmdW5jdGlvbihzdCl7cmV0dXJuIFIoSypzdCkraXR9fXJldHVybntmb3JtYXQ6TCxmb3JtYXRQcmVmaXg6Tn19dmFyIEZVLFJNdCxqTXQ7bkVlKHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO2Z1bmN0aW9uIG5FZShpKXtyZXR1cm4gRlU9ZUVlKGkpLFJNdD1GVS5mb3JtYXQsak10PUZVLmZvcm1hdFByZWZpeCxGVX1mdW5jdGlvbiByRWUoaSl7cmV0dXJuIE1hdGgubWF4KDAsLUVBKE1hdGguYWJzKGkpKSl9ZnVuY3Rpb24gaUVlKGksYSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEVBKGEpLzMpKSkqMy1FQShNYXRoLmFicyhpKSkpfWZ1bmN0aW9uIHNFZShpLGEpe3JldHVybiBpPU1hdGguYWJzKGkpLGE9TWF0aC5hYnMoYSktaSxNYXRoLm1heCgwLEVBKGEpLUVBKGkpKSsxfWZ1bmN0aW9uIHkxdChpLGEpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGEpLmRvbWFpbihpKTticmVha31yZXR1cm4gdGhpc31jb25zdCAkTXQ9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIHgxdCgpe3ZhciBpPW5ldyBETHQsYT1bXSxmPVtdLHA9JE10O2Z1bmN0aW9uIHYobSl7bGV0IGI9aS5nZXQobSk7aWYoYj09PXZvaWQgMCl7aWYocCE9PSRNdClyZXR1cm4gcDtpLnNldChtLGI9YS5wdXNoKG0pLTEpfXJldHVybiBmW2IlZi5sZW5ndGhdfXJldHVybiB2LmRvbWFpbj1mdW5jdGlvbihtKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS5zbGljZSgpO2E9W10saT1uZXcgREx0O2Zvcihjb25zdCBiIG9mIG0paS5oYXMoYil8fGkuc2V0KGIsYS5wdXNoKGIpLTEpO3JldHVybiB2fSx2LnJhbmdlPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUFycmF5LmZyb20obSksdik6Zi5zbGljZSgpfSx2LnVua25vd249ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bSx2KTpwfSx2LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4geDF0KGEsZikudW5rbm93bihwKX0seTF0LmFwcGx5KHYsYXJndW1lbnRzKSx2fWZ1bmN0aW9uIGFFZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gb0VlKGkpe3JldHVybitpfXZhciB6TXQ9WzAsMV07ZnVuY3Rpb24gVEEoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gazF0KGksYSl7cmV0dXJuKGEtPWk9K2kpP2Z1bmN0aW9uKGYpe3JldHVybihmLWkpL2F9OmFFZShpc05hTihhKT9OYU46LjUpfWZ1bmN0aW9uIGNFZShpLGEpe3ZhciBmO3JldHVybiBpPmEmJihmPWksaT1hLGE9ZiksZnVuY3Rpb24ocCl7cmV0dXJuIE1hdGgubWF4KGksTWF0aC5taW4oYSxwKSl9fWZ1bmN0aW9uIHVFZShpLGEsZil7dmFyIHA9aVswXSx2PWlbMV0sbT1hWzBdLGI9YVsxXTtyZXR1cm4gdjxwPyhwPWsxdCh2LHApLG09ZihiLG0pKToocD1rMXQocCx2KSxtPWYobSxiKSksZnVuY3Rpb24oRSl7cmV0dXJuIG0ocChFKSl9fWZ1bmN0aW9uIGxFZShpLGEsZil7dmFyIHA9TWF0aC5taW4oaS5sZW5ndGgsYS5sZW5ndGgpLTEsdj1uZXcgQXJyYXkocCksbT1uZXcgQXJyYXkocCksYj0tMTtmb3IoaVtwXTxpWzBdJiYoaT1pLnNsaWNlKCkucmV2ZXJzZSgpLGE9YS5zbGljZSgpLnJldmVyc2UoKSk7KytiPHA7KXZbYl09azF0KGlbYl0saVtiKzFdKSxtW2JdPWYoYVtiXSxhW2IrMV0pO3JldHVybiBmdW5jdGlvbihFKXt2YXIgXz1peGUoaSxFLDEscCktMTtyZXR1cm4gbVtfXSh2W19dKEUpKX19ZnVuY3Rpb24gcU10KGksYSl7cmV0dXJuIGEuZG9tYWluKGkuZG9tYWluKCkpLnJhbmdlKGkucmFuZ2UoKSkuaW50ZXJwb2xhdGUoaS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChpLmNsYW1wKCkpLnVua25vd24oaS51bmtub3duKCkpfWZ1bmN0aW9uIGhFZSgpe3ZhciBpPXpNdCxhPXpNdCxmPW8xdCxwLHYsbSxiPVRBLEUsXyxMO2Z1bmN0aW9uIE4oKXt2YXIgaj1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCk7cmV0dXJuIGIhPT1UQSYmKGI9Y0VlKGlbMF0saVtqLTFdKSksRT1qPjI/bEVlOnVFZSxfPUw9bnVsbCxCfWZ1bmN0aW9uIEIoail7cmV0dXJuIGo9PW51bGx8fGlzTmFOKGo9K2opP206KF98fChfPUUoaS5tYXAocCksYSxmKSkpKHAoYihqKSkpfXJldHVybiBCLmludmVydD1mdW5jdGlvbihqKXtyZXR1cm4gYih2KChMfHwoTD1FKGEsaS5tYXAocCksS3cpKSkoaikpKX0sQi5kb21haW49ZnVuY3Rpb24oail7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9QXJyYXkuZnJvbShqLG9FZSksTigpKTppLnNsaWNlKCl9LEIucmFuZ2U9ZnVuY3Rpb24oail7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9QXJyYXkuZnJvbShqKSxOKCkpOmEuc2xpY2UoKX0sQi5yYW5nZVJvdW5kPWZ1bmN0aW9uKGope3JldHVybiBhPUFycmF5LmZyb20oaiksZj1Da2UsTigpfSxCLmNsYW1wPWZ1bmN0aW9uKGope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWo/ITA6VEEsTigpKTpiIT09VEF9LEIuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oail7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9aixOKCkpOmZ9LEIudW5rbm93bj1mdW5jdGlvbihqKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1qLEIpOm19LGZ1bmN0aW9uKGosUil7cmV0dXJuIHA9aix2PVIsTigpfX1mdW5jdGlvbiBITXQoKXtyZXR1cm4gaEVlKCkoVEEsVEEpfWZ1bmN0aW9uIGZFZShpLGEsZixwKXt2YXIgdj1WZnQoaSxhLGYpLG07c3dpdGNoKHA9UFUocD8/IixmIikscC50eXBlKXtjYXNlInMiOnt2YXIgYj1NYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhhKSk7cmV0dXJuIHAucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obT1pRWUodixiKSkmJihwLnByZWNpc2lvbj1tKSxqTXQocCxiKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7cC5wcmVjaXNpb249PW51bGwmJiFpc05hTihtPXNFZSh2LE1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKGEpKSkpJiYocC5wcmVjaXNpb249bS0ocC50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntwLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG09ckVlKHYpKSYmKHAucHJlY2lzaW9uPW0tKHAudHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiBSTXQocCl9ZnVuY3Rpb24gZEVlKGkpe3ZhciBhPWkuZG9tYWluO3JldHVybiBpLnRpY2tzPWZ1bmN0aW9uKGYpe3ZhciBwPWEoKTtyZXR1cm4gY3hlKHBbMF0scFtwLmxlbmd0aC0xXSxmPz8xMCl9LGkudGlja0Zvcm1hdD1mdW5jdGlvbihmLHApe3ZhciB2PWEoKTtyZXR1cm4gZkVlKHZbMF0sdlt2Lmxlbmd0aC0xXSxmPz8xMCxwKX0saS5uaWNlPWZ1bmN0aW9uKGYpe2Y9PW51bGwmJihmPTEwKTt2YXIgcD1hKCksdj0wLG09cC5sZW5ndGgtMSxiPXBbdl0sRT1wW21dLF8sTCxOPTEwO2ZvcihFPGImJihMPWIsYj1FLEU9TCxMPXYsdj1tLG09TCk7Ti0tID4wOyl7aWYoTD1OTHQoYixFLGYpLEw9PT1fKXJldHVybiBwW3ZdPWIscFttXT1FLGEocCk7aWYoTD4wKWI9TWF0aC5mbG9vcihiL0wpKkwsRT1NYXRoLmNlaWwoRS9MKSpMO2Vsc2UgaWYoTDwwKWI9TWF0aC5jZWlsKGIqTCkvTCxFPU1hdGguZmxvb3IoRSpMKS9MO2Vsc2UgYnJlYWs7Xz1MfXJldHVybiBpfSxpfWZ1bmN0aW9uIEJVKCl7dmFyIGk9SE10KCk7cmV0dXJuIGkuY29weT1mdW5jdGlvbigpe3JldHVybiBxTXQoaSxCVSgpKX0seTF0LmFwcGx5KGksYXJndW1lbnRzKSxkRWUoaSl9ZnVuY3Rpb24gZ0VlKGksYSl7aT1pLnNsaWNlKCk7dmFyIGY9MCxwPWkubGVuZ3RoLTEsdj1pW2ZdLG09aVtwXSxiO3JldHVybiBtPHYmJihiPWYsZj1wLHA9YixiPXYsdj1tLG09YiksaVtmXT1hLmZsb29yKHYpLGlbcF09YS5jZWlsKG0pLGl9dmFyIEUxdD1uZXcgRGF0ZSxUMXQ9bmV3IERhdGU7ZnVuY3Rpb24gcmcoaSxhLGYscCl7ZnVuY3Rpb24gdihtKXtyZXR1cm4gaShtPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCttKSksbX1yZXR1cm4gdi5mbG9vcj1mdW5jdGlvbihtKXtyZXR1cm4gaShtPW5ldyBEYXRlKCttKSksbX0sdi5jZWlsPWZ1bmN0aW9uKG0pe3JldHVybiBpKG09bmV3IERhdGUobS0xKSksYShtLDEpLGkobSksbX0sdi5yb3VuZD1mdW5jdGlvbihtKXt2YXIgYj12KG0pLEU9di5jZWlsKG0pO3JldHVybiBtLWI8RS1tP2I6RX0sdi5vZmZzZXQ9ZnVuY3Rpb24obSxiKXtyZXR1cm4gYShtPW5ldyBEYXRlKCttKSxiPT1udWxsPzE6TWF0aC5mbG9vcihiKSksbX0sdi5yYW5nZT1mdW5jdGlvbihtLGIsRSl7dmFyIF89W10sTDtpZihtPXYuY2VpbChtKSxFPUU9PW51bGw/MTpNYXRoLmZsb29yKEUpLCEobTxiKXx8IShFPjApKXJldHVybiBfO2RvIF8ucHVzaChMPW5ldyBEYXRlKCttKSksYShtLEUpLGkobSk7d2hpbGUoTDxtJiZtPGIpO3JldHVybiBffSx2LmZpbHRlcj1mdW5jdGlvbihtKXtyZXR1cm4gcmcoZnVuY3Rpb24oYil7aWYoYj49Yilmb3IoO2koYiksIW0oYik7KWIuc2V0VGltZShiLTEpfSxmdW5jdGlvbihiLEUpe2lmKGI+PWIpaWYoRTwwKWZvcig7KytFPD0wOylmb3IoO2EoYiwtMSksIW0oYik7KTtlbHNlIGZvcig7LS1FPj0wOylmb3IoO2EoYiwxKSwhbShiKTspO30pfSxmJiYodi5jb3VudD1mdW5jdGlvbihtLGIpe3JldHVybiBFMXQuc2V0VGltZSgrbSksVDF0LnNldFRpbWUoK2IpLGkoRTF0KSxpKFQxdCksTWF0aC5mbG9vcihmKEUxdCxUMXQpKX0sdi5ldmVyeT1mdW5jdGlvbihtKXtyZXR1cm4gbT1NYXRoLmZsb29yKG0pLCFpc0Zpbml0ZShtKXx8IShtPjApP251bGw6bT4xP3YuZmlsdGVyKHA/ZnVuY3Rpb24oYil7cmV0dXJuIHAoYiklbT09PTB9OmZ1bmN0aW9uKGIpe3JldHVybiB2LmNvdW50KDAsYiklbT09PTB9KTp2fSksdn12YXIgUlU9cmcoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EpfSxmdW5jdGlvbihpLGEpe3JldHVybiBhLWl9KTtSVS5ldmVyeT1mdW5jdGlvbihpKXtyZXR1cm4gaT1NYXRoLmZsb29yKGkpLCFpc0Zpbml0ZShpKXx8IShpPjApP251bGw6aT4xP3JnKGZ1bmN0aW9uKGEpe2Euc2V0VGltZShNYXRoLmZsb29yKGEvaSkqaSl9LGZ1bmN0aW9uKGEsZil7YS5zZXRUaW1lKCthK2YqaSl9LGZ1bmN0aW9uKGEsZil7cmV0dXJuKGYtYSkvaX0pOlJVfTtjb25zdCBDMXQ9UlU7UlUucmFuZ2U7Y29uc3QgdjU9MWUzLGMzPXY1KjYwLEc3PWMzKjYwLFY3PUc3KjI0LF8xdD1WNyo3LEdNdD1WNyozMCxTMXQ9VjcqMzY1O3ZhciBWTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EqdjUpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL3Y1fSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRVVENTZWNvbmRzKCl9KTtjb25zdCBVNz1WTXQ7Vk10LnJhbmdlO3ZhciBVTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSp2NSl9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EqYzMpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL2MzfSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRNaW51dGVzKCl9KTtjb25zdCBqVT1VTXQ7VU10LnJhbmdlO3ZhciBXTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSp2NS1pLmdldE1pbnV0ZXMoKSpjMyl9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EqRzcpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL0c3fSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRIb3VycygpfSk7Y29uc3QgJFU9V010O1dNdC5yYW5nZTt2YXIgS010PXJnKGk9Pmkuc2V0SG91cnMoMCwwLDAsMCksKGksYSk9Pmkuc2V0RGF0ZShpLmdldERhdGUoKSthKSwoaSxhKT0+KGEtaS0oYS5nZXRUaW1lem9uZU9mZnNldCgpLWkuZ2V0VGltZXpvbmVPZmZzZXQoKSkqYzMpL1Y3LGk9PmkuZ2V0RGF0ZSgpLTEpO2NvbnN0IENBPUtNdDtLTXQucmFuZ2U7ZnVuY3Rpb24gVzcoaSl7cmV0dXJuIHJnKGZ1bmN0aW9uKGEpe2Euc2V0RGF0ZShhLmdldERhdGUoKS0oYS5nZXREYXkoKSs3LWkpJTcpLGEuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGEsZil7YS5zZXREYXRlKGEuZ2V0RGF0ZSgpK2YqNyl9LGZ1bmN0aW9uKGEsZil7cmV0dXJuKGYtYS0oZi5nZXRUaW1lem9uZU9mZnNldCgpLWEuZ2V0VGltZXpvbmVPZmZzZXQoKSkqYzMpL18xdH0pfXZhciBMTj1XNygwKSxNTj1XNygxKSxZTXQ9VzcoMiksWE10PVc3KDMpLEs3PVc3KDQpLFFNdD1XNyg1KSxaTXQ9VzcoNik7TE4ucmFuZ2UsTU4ucmFuZ2UsWU10LnJhbmdlLFhNdC5yYW5nZSxLNy5yYW5nZSxRTXQucmFuZ2UsWk10LnJhbmdlO3ZhciBKTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXREYXRlKDEpLGkuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGksYSl7aS5zZXRNb250aChpLmdldE1vbnRoKCkrYSl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuIGEuZ2V0TW9udGgoKS1pLmdldE1vbnRoKCkrKGEuZ2V0RnVsbFllYXIoKS1pLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRNb250aCgpfSk7Y29uc3QgelU9Sk10O0pNdC5yYW5nZTt2YXIgQTF0PXJnKGZ1bmN0aW9uKGkpe2kuc2V0TW9udGgoMCwxKSxpLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihpLGEpe2kuc2V0RnVsbFllYXIoaS5nZXRGdWxsWWVhcigpK2EpfSxmdW5jdGlvbihpLGEpe3JldHVybiBhLmdldEZ1bGxZZWFyKCktaS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRGdWxsWWVhcigpfSk7QTF0LmV2ZXJ5PWZ1bmN0aW9uKGkpe3JldHVybiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpyZyhmdW5jdGlvbihhKXthLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoYS5nZXRGdWxsWWVhcigpL2kpKmkpLGEuc2V0TW9udGgoMCwxKSxhLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGYpe2Euc2V0RnVsbFllYXIoYS5nZXRGdWxsWWVhcigpK2YqaSl9KX07Y29uc3QgWTc9QTF0O0ExdC5yYW5nZTt2YXIgdEl0PXJnKGZ1bmN0aW9uKGkpe2kuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGksYSl7aS5zZXRVVENEYXRlKGkuZ2V0VVRDRGF0ZSgpK2EpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL1Y3fSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRVVENEYXRlKCktMX0pO2NvbnN0IGVJdD10SXQ7dEl0LnJhbmdlO2Z1bmN0aW9uIFg3KGkpe3JldHVybiByZyhmdW5jdGlvbihhKXthLnNldFVUQ0RhdGUoYS5nZXRVVENEYXRlKCktKGEuZ2V0VVRDRGF5KCkrNy1pKSU3KSxhLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGYpe2Euc2V0VVRDRGF0ZShhLmdldFVUQ0RhdGUoKStmKjcpfSxmdW5jdGlvbihhLGYpe3JldHVybihmLWEpL18xdH0pfXZhciBuSXQ9WDcoMCkscVU9WDcoMSkscEVlPVg3KDIpLGJFZT1YNygzKSxfQT1YNyg0KSx2RWU9WDcoNSksd0VlPVg3KDYpO25JdC5yYW5nZSxxVS5yYW5nZSxwRWUucmFuZ2UsYkVlLnJhbmdlLF9BLnJhbmdlLHZFZS5yYW5nZSx3RWUucmFuZ2U7dmFyIEwxdD1yZyhmdW5jdGlvbihpKXtpLnNldFVUQ01vbnRoKDAsMSksaS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oaSxhKXtpLnNldFVUQ0Z1bGxZZWFyKGkuZ2V0VVRDRnVsbFllYXIoKSthKX0sZnVuY3Rpb24oaSxhKXtyZXR1cm4gYS5nZXRVVENGdWxsWWVhcigpLWkuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oaSl7cmV0dXJuIGkuZ2V0VVRDRnVsbFllYXIoKX0pO0wxdC5ldmVyeT1mdW5jdGlvbihpKXtyZXR1cm4haXNGaW5pdGUoaT1NYXRoLmZsb29yKGkpKXx8IShpPjApP251bGw6cmcoZnVuY3Rpb24oYSl7YS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGEuZ2V0VVRDRnVsbFllYXIoKS9pKSppKSxhLnNldFVUQ01vbnRoKDAsMSksYS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oYSxmKXthLnNldFVUQ0Z1bGxZZWFyKGEuZ2V0VVRDRnVsbFllYXIoKStmKmkpfSl9O2NvbnN0IElOPUwxdDtMMXQucmFuZ2U7ZnVuY3Rpb24gbUVlKGksYSxmLHAsdixtKXtjb25zdCBiPVtbVTcsMSx2NV0sW1U3LDUsNSp2NV0sW1U3LDE1LDE1KnY1XSxbVTcsMzAsMzAqdjVdLFttLDEsYzNdLFttLDUsNSpjM10sW20sMTUsMTUqYzNdLFttLDMwLDMwKmMzXSxbdiwxLEc3XSxbdiwzLDMqRzddLFt2LDYsNipHN10sW3YsMTIsMTIqRzddLFtwLDEsVjddLFtwLDIsMipWN10sW2YsMSxfMXRdLFthLDEsR010XSxbYSwzLDMqR010XSxbaSwxLFMxdF1dO2Z1bmN0aW9uIEUoTCxOLEIpe2NvbnN0IGo9TjxMO2omJihbTCxOXT1bTixMXSk7Y29uc3QgUj1CJiZ0eXBlb2YgQi5yYW5nZT09ImZ1bmN0aW9uIj9COl8oTCxOLEIpLHo9Uj9SLnJhbmdlKEwsK04rMSk6W107cmV0dXJuIGo/ei5yZXZlcnNlKCk6en1mdW5jdGlvbiBfKEwsTixCKXtjb25zdCBqPU1hdGguYWJzKE4tTCkvQixSPXpmdCgoWywsaXRdKT0+aXQpLnJpZ2h0KGIsaik7aWYoUj09PWIubGVuZ3RoKXJldHVybiBpLmV2ZXJ5KFZmdChML1MxdCxOL1MxdCxCKSk7aWYoUj09PTApcmV0dXJuIEMxdC5ldmVyeShNYXRoLm1heChWZnQoTCxOLEIpLDEpKTtjb25zdFt6LEtdPWJbai9iW1ItMV1bMl08YltSXVsyXS9qP1ItMTpSXTtyZXR1cm4gei5ldmVyeShLKX1yZXR1cm5bRSxfXX1jb25zdFt5RWUseEVlXT1tRWUoWTcselUsTE4sQ0EsJFUsalUpO2Z1bmN0aW9uIE0xdChpKXtpZigwPD1pLnkmJmkueTwxMDApe3ZhciBhPW5ldyBEYXRlKC0xLGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKTtyZXR1cm4gYS5zZXRGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCl9ZnVuY3Rpb24gSTF0KGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIGE9bmV3IERhdGUoRGF0ZS5VVEMoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpKTtyZXR1cm4gYS5zZXRVVENGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpfWZ1bmN0aW9uIEROKGksYSxmKXtyZXR1cm57eTppLG06YSxkOmYsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBrRWUoaSl7dmFyIGE9aS5kYXRlVGltZSxmPWkuZGF0ZSxwPWkudGltZSx2PWkucGVyaW9kcyxtPWkuZGF5cyxiPWkuc2hvcnREYXlzLEU9aS5tb250aHMsXz1pLnNob3J0TW9udGhzLEw9T04odiksTj1OTih2KSxCPU9OKG0pLGo9Tk4obSksUj1PTihiKSx6PU5OKGIpLEs9T04oRSksaXQ9Tk4oRSksc3Q9T04oXyksdXQ9Tk4oXyksYnQ9e2E6Q3QsQTpaLGI6VHQsQjpIdCxjOm51bGwsZDpjSXQsZTpjSXQsZjpWRWUsZzplN2UsRzpyN2UsSDpxRWUsSTpIRWUsajpHRWUsTDp1SXQsbTpVRWUsTTpXRWUscDpJdCxxOkZ0LFE6cEl0LHM6Ykl0LFM6S0VlLHU6WUVlLFU6WEVlLFY6UUVlLHc6WkVlLFc6SkVlLHg6bnVsbCxYOm51bGwseTp0N2UsWTpuN2UsWjppN2UsIiUiOmdJdH0sbXQ9e2E6a2UsQTpwbixiOk1lLEI6dmUsYzpudWxsLGQ6aEl0LGU6aEl0LGY6YzdlLGc6dzdlLEc6eTdlLEg6czdlLEk6YTdlLGo6bzdlLEw6Zkl0LG06dTdlLE06bDdlLHA6R2UscTpLZSxROnBJdCxzOmJJdCxTOmg3ZSx1OmY3ZSxVOmQ3ZSxWOmc3ZSx3OnA3ZSxXOmI3ZSx4Om51bGwsWDpudWxsLHk6djdlLFk6bTdlLFo6eDdlLCIlIjpnSXR9LHl0PXthOnB0LEE6VSxiOnh0LEI6bnQsYzpPdCxkOmFJdCxlOmFJdCxmOlJFZSxnOnNJdCxHOmlJdCxIOm9JdCxJOm9JdCxqOk5FZSxMOkJFZSxtOk9FZSxNOlBFZSxwOlgscTpERWUsUTokRWUsczp6RWUsUzpGRWUsdTpTRWUsVTpBRWUsVjpMRWUsdzpfRWUsVzpNRWUseDpOdCxYOnF0LHk6c0l0LFk6aUl0LFo6SUVlLCIlIjpqRWV9O2J0Lng9ZHQoZixidCksYnQuWD1kdChwLGJ0KSxidC5jPWR0KGEsYnQpLG10Lng9ZHQoZixtdCksbXQuWD1kdChwLG10KSxtdC5jPWR0KGEsbXQpO2Z1bmN0aW9uIGR0KHdlLF9lKXtyZXR1cm4gZnVuY3Rpb24oJHQpe3ZhciByZT1bXSxpZT0tMSxPZT0wLG9lPXdlLmxlbmd0aCxOZSxtZSxjbjtmb3IoJHQgaW5zdGFuY2VvZiBEYXRlfHwoJHQ9bmV3IERhdGUoKyR0KSk7KytpZTxvZTspd2UuY2hhckNvZGVBdChpZSk9PT0zNyYmKHJlLnB1c2god2Uuc2xpY2UoT2UsaWUpKSwobWU9ckl0W05lPXdlLmNoYXJBdCgrK2llKV0pIT1udWxsP05lPXdlLmNoYXJBdCgrK2llKTptZT1OZT09PSJlIj8iICI6IjAiLChjbj1fZVtOZV0pJiYoTmU9Y24oJHQsbWUpKSxyZS5wdXNoKE5lKSxPZT1pZSsxKTtyZXR1cm4gcmUucHVzaCh3ZS5zbGljZShPZSxpZSkpLHJlLmpvaW4oIiIpfX1mdW5jdGlvbiBodCh3ZSxfZSl7cmV0dXJuIGZ1bmN0aW9uKCR0KXt2YXIgcmU9RE4oMTkwMCx2b2lkIDAsMSksaWU9d3QocmUsd2UsJHQrPSIiLDApLE9lLG9lO2lmKGllIT0kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcmUpcmV0dXJuIG5ldyBEYXRlKHJlLlEpO2lmKCJzImluIHJlKXJldHVybiBuZXcgRGF0ZShyZS5zKjFlMysoIkwiaW4gcmU/cmUuTDowKSk7aWYoX2UmJiEoIloiaW4gcmUpJiYocmUuWj0wKSwicCJpbiByZSYmKHJlLkg9cmUuSCUxMityZS5wKjEyKSxyZS5tPT09dm9pZCAwJiYocmUubT0icSJpbiByZT9yZS5xOjApLCJWImluIHJlKXtpZihyZS5WPDF8fHJlLlY+NTMpcmV0dXJuIG51bGw7InciaW4gcmV8fChyZS53PTEpLCJaImluIHJlPyhPZT1JMXQoRE4ocmUueSwwLDEpKSxvZT1PZS5nZXRVVENEYXkoKSxPZT1vZT40fHxvZT09PTA/cVUuY2VpbChPZSk6cVUoT2UpLE9lPWVJdC5vZmZzZXQoT2UsKHJlLlYtMSkqNykscmUueT1PZS5nZXRVVENGdWxsWWVhcigpLHJlLm09T2UuZ2V0VVRDTW9udGgoKSxyZS5kPU9lLmdldFVUQ0RhdGUoKSsocmUudys2KSU3KTooT2U9TTF0KEROKHJlLnksMCwxKSksb2U9T2UuZ2V0RGF5KCksT2U9b2U+NHx8b2U9PT0wP01OLmNlaWwoT2UpOk1OKE9lKSxPZT1DQS5vZmZzZXQoT2UsKHJlLlYtMSkqNykscmUueT1PZS5nZXRGdWxsWWVhcigpLHJlLm09T2UuZ2V0TW9udGgoKSxyZS5kPU9lLmdldERhdGUoKSsocmUudys2KSU3KX1lbHNlKCJXImluIHJlfHwiVSJpbiByZSkmJigidyJpbiByZXx8KHJlLnc9InUiaW4gcmU/cmUudSU3OiJXImluIHJlPzE6MCksb2U9IloiaW4gcmU/STF0KEROKHJlLnksMCwxKSkuZ2V0VVRDRGF5KCk6TTF0KEROKHJlLnksMCwxKSkuZ2V0RGF5KCkscmUubT0wLHJlLmQ9IlciaW4gcmU/KHJlLncrNiklNytyZS5XKjctKG9lKzUpJTc6cmUudytyZS5VKjctKG9lKzYpJTcpO3JldHVybiJaImluIHJlPyhyZS5IKz1yZS5aLzEwMHwwLHJlLk0rPXJlLlolMTAwLEkxdChyZSkpOk0xdChyZSl9fWZ1bmN0aW9uIHd0KHdlLF9lLCR0LHJlKXtmb3IodmFyIGllPTAsT2U9X2UubGVuZ3RoLG9lPSR0Lmxlbmd0aCxOZSxtZTtpZTxPZTspe2lmKHJlPj1vZSlyZXR1cm4tMTtpZihOZT1fZS5jaGFyQ29kZUF0KGllKyspLE5lPT09Mzcpe2lmKE5lPV9lLmNoYXJBdChpZSsrKSxtZT15dFtOZSBpbiBySXQ/X2UuY2hhckF0KGllKyspOk5lXSwhbWV8fChyZT1tZSh3ZSwkdCxyZSkpPDApcmV0dXJuLTF9ZWxzZSBpZihOZSE9JHQuY2hhckNvZGVBdChyZSsrKSlyZXR1cm4tMX1yZXR1cm4gcmV9ZnVuY3Rpb24gWCh3ZSxfZSwkdCl7dmFyIHJlPUwuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2UucD1OLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSwkdCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHB0KHdlLF9lLCR0KXt2YXIgcmU9Ui5leGVjKF9lLnNsaWNlKCR0KSk7cmV0dXJuIHJlPyh3ZS53PXouZ2V0KHJlWzBdLnRvTG93ZXJDYXNlKCkpLCR0K3JlWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVSh3ZSxfZSwkdCl7dmFyIHJlPUIuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2Uudz1qLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSwkdCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHh0KHdlLF9lLCR0KXt2YXIgcmU9c3QuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2UubT11dC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksJHQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBudCh3ZSxfZSwkdCl7dmFyIHJlPUsuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2UubT1pdC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksJHQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPdCh3ZSxfZSwkdCl7cmV0dXJuIHd0KHdlLGEsX2UsJHQpfWZ1bmN0aW9uIE50KHdlLF9lLCR0KXtyZXR1cm4gd3Qod2UsZixfZSwkdCl9ZnVuY3Rpb24gcXQod2UsX2UsJHQpe3JldHVybiB3dCh3ZSxwLF9lLCR0KX1mdW5jdGlvbiBDdCh3ZSl7cmV0dXJuIGJbd2UuZ2V0RGF5KCldfWZ1bmN0aW9uIFood2Upe3JldHVybiBtW3dlLmdldERheSgpXX1mdW5jdGlvbiBUdCh3ZSl7cmV0dXJuIF9bd2UuZ2V0TW9udGgoKV19ZnVuY3Rpb24gSHQod2Upe3JldHVybiBFW3dlLmdldE1vbnRoKCldfWZ1bmN0aW9uIEl0KHdlKXtyZXR1cm4gdlsrKHdlLmdldEhvdXJzKCk+PTEyKV19ZnVuY3Rpb24gRnQod2Upe3JldHVybiAxK35+KHdlLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24ga2Uod2Upe3JldHVybiBiW3dlLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBwbih3ZSl7cmV0dXJuIG1bd2UuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIE1lKHdlKXtyZXR1cm4gX1t3ZS5nZXRVVENNb250aCgpXX1mdW5jdGlvbiB2ZSh3ZSl7cmV0dXJuIEVbd2UuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gR2Uod2Upe3JldHVybiB2Wysod2UuZ2V0VVRDSG91cnMoKT49MTIpXX1mdW5jdGlvbiBLZSh3ZSl7cmV0dXJuIDErfn4od2UuZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKHdlKXt2YXIgX2U9ZHQod2UrPSIiLGJ0KTtyZXR1cm4gX2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gd2V9LF9lfSxwYXJzZTpmdW5jdGlvbih3ZSl7dmFyIF9lPWh0KHdlKz0iIiwhMSk7cmV0dXJuIF9lLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHdlfSxfZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHdlKXt2YXIgX2U9ZHQod2UrPSIiLG10KTtyZXR1cm4gX2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gd2V9LF9lfSx1dGNQYXJzZTpmdW5jdGlvbih3ZSl7dmFyIF9lPWh0KHdlKz0iIiwhMCk7cmV0dXJuIF9lLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHdlfSxfZX19fXZhciBySXQ9eyItIjoiIixfOiIgIiwwOiIwIn0sSzE9L15ccypcZCsvLEVFZT0vXiUvLFRFZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gRGMoaSxhLGYpe3ZhciBwPWk8MD8iLSI6IiIsdj0ocD8taTppKSsiIixtPXYubGVuZ3RoO3JldHVybiBwKyhtPGY/bmV3IEFycmF5KGYtbSsxKS5qb2luKGEpK3Y6dil9ZnVuY3Rpb24gQ0VlKGkpe3JldHVybiBpLnJlcGxhY2UoVEVlLCJcXCQmIil9ZnVuY3Rpb24gT04oaSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2kubWFwKENFZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE5OKGkpe3JldHVybiBuZXcgTWFwKGkubWFwKChhLGYpPT5bYS50b0xvd2VyQ2FzZSgpLGZdKSl9ZnVuY3Rpb24gX0VlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS53PStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFNFZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisxKSk7cmV0dXJuIHA/KGkudT0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBRWUoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLlU9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5WPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1FZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuVz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpSXQoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrNCkpO3JldHVybiBwPyhpLnk9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc0l0KGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS55PStwWzBdKygrcFswXT42OD8xOTAwOjJlMyksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSUVlKGksYSxmKXt2YXIgcD0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhhLnNsaWNlKGYsZis2KSk7cmV0dXJuIHA/KGkuWj1wWzFdPzA6LShwWzJdKyhwWzNdfHwiMDAiKSksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gREVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS5xPXBbMF0qMy0zLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9FZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkubT1wWzBdLTEsZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYUl0KGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5kPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5FZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZiszKSk7cmV0dXJuIHA/KGkubT0wLGkuZD0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvSXQoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLkg9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUEVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5NPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZFZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuUz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCRWUoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrMykpO3JldHVybiBwPyhpLkw9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUkVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzYpKTtyZXR1cm4gcD8oaS5MPU1hdGguZmxvb3IocFswXS8xZTMpLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpFZShpLGEsZil7dmFyIHA9RUVlLmV4ZWMoYS5zbGljZShmLGYrMSkpO3JldHVybiBwP2YrcFswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gJEVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLlE9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gekVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLnM9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY0l0KGksYSl7cmV0dXJuIERjKGkuZ2V0RGF0ZSgpLGEsMil9ZnVuY3Rpb24gcUVlKGksYSl7cmV0dXJuIERjKGkuZ2V0SG91cnMoKSxhLDIpfWZ1bmN0aW9uIEhFZShpLGEpe3JldHVybiBEYyhpLmdldEhvdXJzKCklMTJ8fDEyLGEsMil9ZnVuY3Rpb24gR0VlKGksYSl7cmV0dXJuIERjKDErQ0EuY291bnQoWTcoaSksaSksYSwzKX1mdW5jdGlvbiB1SXQoaSxhKXtyZXR1cm4gRGMoaS5nZXRNaWxsaXNlY29uZHMoKSxhLDMpfWZ1bmN0aW9uIFZFZShpLGEpe3JldHVybiB1SXQoaSxhKSsiMDAwIn1mdW5jdGlvbiBVRWUoaSxhKXtyZXR1cm4gRGMoaS5nZXRNb250aCgpKzEsYSwyKX1mdW5jdGlvbiBXRWUoaSxhKXtyZXR1cm4gRGMoaS5nZXRNaW51dGVzKCksYSwyKX1mdW5jdGlvbiBLRWUoaSxhKXtyZXR1cm4gRGMoaS5nZXRTZWNvbmRzKCksYSwyKX1mdW5jdGlvbiBZRWUoaSl7dmFyIGE9aS5nZXREYXkoKTtyZXR1cm4gYT09PTA/NzphfWZ1bmN0aW9uIFhFZShpLGEpe3JldHVybiBEYyhMTi5jb3VudChZNyhpKS0xLGkpLGEsMil9ZnVuY3Rpb24gbEl0KGkpe3ZhciBhPWkuZ2V0RGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP0s3KGkpOks3LmNlaWwoaSl9ZnVuY3Rpb24gUUVlKGksYSl7cmV0dXJuIGk9bEl0KGkpLERjKEs3LmNvdW50KFk3KGkpLGkpKyhZNyhpKS5nZXREYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24gWkVlKGkpe3JldHVybiBpLmdldERheSgpfWZ1bmN0aW9uIEpFZShpLGEpe3JldHVybiBEYyhNTi5jb3VudChZNyhpKS0xLGkpLGEsMil9ZnVuY3Rpb24gdDdlKGksYSl7cmV0dXJuIERjKGkuZ2V0RnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiBlN2UoaSxhKXtyZXR1cm4gaT1sSXQoaSksRGMoaS5nZXRGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIG43ZShpLGEpe3JldHVybiBEYyhpLmdldEZ1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24gcjdlKGksYSl7dmFyIGY9aS5nZXREYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD9LNyhpKTpLNy5jZWlsKGkpLERjKGkuZ2V0RnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiBpN2UoaSl7dmFyIGE9aS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihhPjA/Ii0iOihhKj0tMSwiKyIpKStEYyhhLzYwfDAsIjAiLDIpK0RjKGElNjAsIjAiLDIpfWZ1bmN0aW9uIGhJdChpLGEpe3JldHVybiBEYyhpLmdldFVUQ0RhdGUoKSxhLDIpfWZ1bmN0aW9uIHM3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ0hvdXJzKCksYSwyKX1mdW5jdGlvbiBhN2UoaSxhKXtyZXR1cm4gRGMoaS5nZXRVVENIb3VycygpJTEyfHwxMixhLDIpfWZ1bmN0aW9uIG83ZShpLGEpe3JldHVybiBEYygxK2VJdC5jb3VudChJTihpKSxpKSxhLDMpfWZ1bmN0aW9uIGZJdChpLGEpe3JldHVybiBEYyhpLmdldFVUQ01pbGxpc2Vjb25kcygpLGEsMyl9ZnVuY3Rpb24gYzdlKGksYSl7cmV0dXJuIGZJdChpLGEpKyIwMDAifWZ1bmN0aW9uIHU3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ01vbnRoKCkrMSxhLDIpfWZ1bmN0aW9uIGw3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ01pbnV0ZXMoKSxhLDIpfWZ1bmN0aW9uIGg3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ1NlY29uZHMoKSxhLDIpfWZ1bmN0aW9uIGY3ZShpKXt2YXIgYT1pLmdldFVUQ0RheSgpO3JldHVybiBhPT09MD83OmF9ZnVuY3Rpb24gZDdlKGksYSl7cmV0dXJuIERjKG5JdC5jb3VudChJTihpKS0xLGkpLGEsMil9ZnVuY3Rpb24gZEl0KGkpe3ZhciBhPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP19BKGkpOl9BLmNlaWwoaSl9ZnVuY3Rpb24gZzdlKGksYSl7cmV0dXJuIGk9ZEl0KGkpLERjKF9BLmNvdW50KElOKGkpLGkpKyhJTihpKS5nZXRVVENEYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24gcDdlKGkpe3JldHVybiBpLmdldFVUQ0RheSgpfWZ1bmN0aW9uIGI3ZShpLGEpe3JldHVybiBEYyhxVS5jb3VudChJTihpKS0xLGkpLGEsMil9ZnVuY3Rpb24gdjdlKGksYSl7cmV0dXJuIERjKGkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiB3N2UoaSxhKXtyZXR1cm4gaT1kSXQoaSksRGMoaS5nZXRVVENGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIG03ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24geTdlKGksYSl7dmFyIGY9aS5nZXRVVENEYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD9fQShpKTpfQS5jZWlsKGkpLERjKGkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiB4N2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGdJdCgpe3JldHVybiIlIn1mdW5jdGlvbiBwSXQoaSl7cmV0dXJuK2l9ZnVuY3Rpb24gYkl0KGkpe3JldHVybiBNYXRoLmZsb29yKCtpLzFlMyl9dmFyIFNBLEhVO2s3ZSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIGs3ZShpKXtyZXR1cm4gU0E9a0VlKGkpLEhVPVNBLmZvcm1hdCxTQS5wYXJzZSxTQS51dGNGb3JtYXQsU0EudXRjUGFyc2UsU0F9ZnVuY3Rpb24gRTdlKGkpe3JldHVybiBuZXcgRGF0ZShpKX1mdW5jdGlvbiBUN2UoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBEYXRlPytpOituZXcgRGF0ZSgraSl9ZnVuY3Rpb24gdkl0KGksYSxmLHAsdixtLGIsRSxfLEwpe3ZhciBOPUhNdCgpLEI9Ti5pbnZlcnQsaj1OLmRvbWFpbixSPUwoIi4lTCIpLHo9TCgiOiVTIiksSz1MKCIlSTolTSIpLGl0PUwoIiVJICVwIiksc3Q9TCgiJWEgJWQiKSx1dD1MKCIlYiAlZCIpLGJ0PUwoIiVCIiksbXQ9TCgiJVkiKTtmdW5jdGlvbiB5dChkdCl7cmV0dXJuKF8oZHQpPGR0P1I6RShkdCk8ZHQ/ejpiKGR0KTxkdD9LOm0oZHQpPGR0P2l0OnAoZHQpPGR0P3YoZHQpPGR0P3N0OnV0OmYoZHQpPGR0P2J0Om10KShkdCl9cmV0dXJuIE4uaW52ZXJ0PWZ1bmN0aW9uKGR0KXtyZXR1cm4gbmV3IERhdGUoQihkdCkpfSxOLmRvbWFpbj1mdW5jdGlvbihkdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aihBcnJheS5mcm9tKGR0LFQ3ZSkpOmooKS5tYXAoRTdlKX0sTi50aWNrcz1mdW5jdGlvbihkdCl7dmFyIGh0PWooKTtyZXR1cm4gaShodFswXSxodFtodC5sZW5ndGgtMV0sZHQ/PzEwKX0sTi50aWNrRm9ybWF0PWZ1bmN0aW9uKGR0LGh0KXtyZXR1cm4gaHQ9PW51bGw/eXQ6TChodCl9LE4ubmljZT1mdW5jdGlvbihkdCl7dmFyIGh0PWooKTtyZXR1cm4oIWR0fHx0eXBlb2YgZHQucmFuZ2UhPSJmdW5jdGlvbiIpJiYoZHQ9YShodFswXSxodFtodC5sZW5ndGgtMV0sZHQ/PzEwKSksZHQ/aihnRWUoaHQsZHQpKTpOfSxOLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcU10KE4sdkl0KGksYSxmLHAsdixtLGIsRSxfLEwpKX0sTn1mdW5jdGlvbiBDN2UoKXtyZXR1cm4geTF0LmFwcGx5KHZJdCh5RWUseEVlLFk3LHpVLExOLENBLCRVLGpVLFU3LEhVKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBfN2UoaSl7Zm9yKHZhciBhPWkubGVuZ3RoLzZ8MCxmPW5ldyBBcnJheShhKSxwPTA7cDxhOylmW3BdPSIjIitpLnNsaWNlKHAqNiwrK3AqNik7cmV0dXJuIGZ9Y29uc3QgUzdlPV83ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gWWgoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWNvbnN0IHdJdD1NYXRoLmFicyxiMD1NYXRoLmF0YW4yLFE3PU1hdGguY29zLEE3ZT1NYXRoLm1heCxEMXQ9TWF0aC5taW4sdTM9TWF0aC5zaW4sQUE9TWF0aC5zcXJ0LHYwPTFlLTEyLFBOPU1hdGguUEksR1U9UE4vMixWVT0yKlBOO2Z1bmN0aW9uIEw3ZShpKXtyZXR1cm4gaT4xPzA6aTwtMT9QTjpNYXRoLmFjb3MoaSl9ZnVuY3Rpb24gbUl0KGkpe3JldHVybiBpPj0xP0dVOmk8PS0xPy1HVTpNYXRoLmFzaW4oaSl9ZnVuY3Rpb24gTTdlKGkpe3JldHVybiBpLmlubmVyUmFkaXVzfWZ1bmN0aW9uIEk3ZShpKXtyZXR1cm4gaS5vdXRlclJhZGl1c31mdW5jdGlvbiBEN2UoaSl7cmV0dXJuIGkuc3RhcnRBbmdsZX1mdW5jdGlvbiBPN2UoaSl7cmV0dXJuIGkuZW5kQW5nbGV9ZnVuY3Rpb24gTjdlKGkpe3JldHVybiBpJiZpLnBhZEFuZ2xlfWZ1bmN0aW9uIFA3ZShpLGEsZixwLHYsbSxiLEUpe3ZhciBfPWYtaSxMPXAtYSxOPWItdixCPUUtbSxqPUIqXy1OKkw7aWYoIShqKmo8djApKXJldHVybiBqPShOKihhLW0pLUIqKGktdikpL2osW2kraipfLGEraipMXX1mdW5jdGlvbiBVVShpLGEsZixwLHYsbSxiKXt2YXIgRT1pLWYsXz1hLXAsTD0oYj9tOi1tKS9BQShFKkUrXypfKSxOPUwqXyxCPS1MKkUsaj1pK04sUj1hK0Isej1mK04sSz1wK0IsaXQ9KGoreikvMixzdD0oUitLKS8yLHV0PXotaixidD1LLVIsbXQ9dXQqdXQrYnQqYnQseXQ9di1tLGR0PWoqSy16KlIsaHQ9KGJ0PDA/LTE6MSkqQUEoQTdlKDAseXQqeXQqbXQtZHQqZHQpKSx3dD0oZHQqYnQtdXQqaHQpL210LFg9KC1kdCp1dC1idCpodCkvbXQscHQ9KGR0KmJ0K3V0Kmh0KS9tdCxVPSgtZHQqdXQrYnQqaHQpL210LHh0PXd0LWl0LG50PVgtc3QsT3Q9cHQtaXQsTnQ9VS1zdDtyZXR1cm4geHQqeHQrbnQqbnQ+T3QqT3QrTnQqTnQmJih3dD1wdCxYPVUpLHtjeDp3dCxjeTpYLHgwMTotTix5MDE6LUIseDExOnd0Kih2L3l0LTEpLHkxMTpYKih2L3l0LTEpfX1mdW5jdGlvbiBMQSgpe3ZhciBpPU03ZSxhPUk3ZSxmPVloKDApLHA9bnVsbCx2PUQ3ZSxtPU83ZSxiPU43ZSxFPW51bGw7ZnVuY3Rpb24gXygpe3ZhciBMLE4sQj0raS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaj0rYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksUj12LmFwcGx5KHRoaXMsYXJndW1lbnRzKS1HVSx6PW0uYXBwbHkodGhpcyxhcmd1bWVudHMpLUdVLEs9d0l0KHotUiksaXQ9ej5SO2lmKEV8fChFPUw9dzF0KCkpLGo8QiYmKE49aixqPUIsQj1OKSwhKGo+djApKUUubW92ZVRvKDAsMCk7ZWxzZSBpZihLPlZVLXYwKUUubW92ZVRvKGoqUTcoUiksaip1MyhSKSksRS5hcmMoMCwwLGosUix6LCFpdCksQj52MCYmKEUubW92ZVRvKEIqUTcoeiksQip1Myh6KSksRS5hcmMoMCwwLEIseixSLGl0KSk7ZWxzZXt2YXIgc3Q9Uix1dD16LGJ0PVIsbXQ9eix5dD1LLGR0PUssaHQ9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cykvMix3dD1odD52MCYmKHA/K3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOkFBKEIqQitqKmopKSxYPUQxdCh3SXQoai1CKS8yLCtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscHQ9WCxVPVgseHQsbnQ7aWYod3Q+djApe3ZhciBPdD1tSXQod3QvQip1MyhodCkpLE50PW1JdCh3dC9qKnUzKGh0KSk7KHl0LT1PdCoyKT52MD8oT3QqPWl0PzE6LTEsYnQrPU90LG10LT1PdCk6KHl0PTAsYnQ9bXQ9KFIreikvMiksKGR0LT1OdCoyKT52MD8oTnQqPWl0PzE6LTEsc3QrPU50LHV0LT1OdCk6KGR0PTAsc3Q9dXQ9KFIreikvMil9dmFyIHF0PWoqUTcoc3QpLEN0PWoqdTMoc3QpLFo9QipRNyhtdCksVHQ9Qip1MyhtdCk7aWYoWD52MCl7dmFyIEh0PWoqUTcodXQpLEl0PWoqdTModXQpLEZ0PUIqUTcoYnQpLGtlPUIqdTMoYnQpLHBuO2lmKEs8UE4mJihwbj1QN2UocXQsQ3QsRnQsa2UsSHQsSXQsWixUdCkpKXt2YXIgTWU9cXQtcG5bMF0sdmU9Q3QtcG5bMV0sR2U9SHQtcG5bMF0sS2U9SXQtcG5bMV0sd2U9MS91MyhMN2UoKE1lKkdlK3ZlKktlKS8oQUEoTWUqTWUrdmUqdmUpKkFBKEdlKkdlK0tlKktlKSkpLzIpLF9lPUFBKHBuWzBdKnBuWzBdK3BuWzFdKnBuWzFdKTtwdD1EMXQoWCwoQi1fZSkvKHdlLTEpKSxVPUQxdChYLChqLV9lKS8od2UrMSkpfX1kdD52MD9VPnYwPyh4dD1VVShGdCxrZSxxdCxDdCxqLFUsaXQpLG50PVVVKEh0LEl0LFosVHQsaixVLGl0KSxFLm1vdmVUbyh4dC5jeCt4dC54MDEseHQuY3kreHQueTAxKSxVPFg/RS5hcmMoeHQuY3gseHQuY3ksVSxiMCh4dC55MDEseHQueDAxKSxiMChudC55MDEsbnQueDAxKSwhaXQpOihFLmFyYyh4dC5jeCx4dC5jeSxVLGIwKHh0LnkwMSx4dC54MDEpLGIwKHh0LnkxMSx4dC54MTEpLCFpdCksRS5hcmMoMCwwLGosYjAoeHQuY3kreHQueTExLHh0LmN4K3h0LngxMSksYjAobnQuY3krbnQueTExLG50LmN4K250LngxMSksIWl0KSxFLmFyYyhudC5jeCxudC5jeSxVLGIwKG50LnkxMSxudC54MTEpLGIwKG50LnkwMSxudC54MDEpLCFpdCkpKTooRS5tb3ZlVG8ocXQsQ3QpLEUuYXJjKDAsMCxqLHN0LHV0LCFpdCkpOkUubW92ZVRvKHF0LEN0KSwhKEI+djApfHwhKHl0PnYwKT9FLmxpbmVUbyhaLFR0KTpwdD52MD8oeHQ9VVUoWixUdCxIdCxJdCxCLC1wdCxpdCksbnQ9VVUocXQsQ3QsRnQsa2UsQiwtcHQsaXQpLEUubGluZVRvKHh0LmN4K3h0LngwMSx4dC5jeSt4dC55MDEpLHB0PFg/RS5hcmMoeHQuY3gseHQuY3kscHQsYjAoeHQueTAxLHh0LngwMSksYjAobnQueTAxLG50LngwMSksIWl0KTooRS5hcmMoeHQuY3gseHQuY3kscHQsYjAoeHQueTAxLHh0LngwMSksYjAoeHQueTExLHh0LngxMSksIWl0KSxFLmFyYygwLDAsQixiMCh4dC5jeSt4dC55MTEseHQuY3greHQueDExKSxiMChudC5jeStudC55MTEsbnQuY3grbnQueDExKSxpdCksRS5hcmMobnQuY3gsbnQuY3kscHQsYjAobnQueTExLG50LngxMSksYjAobnQueTAxLG50LngwMSksIWl0KSkpOkUuYXJjKDAsMCxCLG10LGJ0LGl0KX1pZihFLmNsb3NlUGF0aCgpLEwpcmV0dXJuIEU9bnVsbCxMKyIifHxudWxsfXJldHVybiBfLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIEw9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLE49KCt2LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK20uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVBOLzI7cmV0dXJuW1E3KE4pKkwsdTMoTikqTF19LF8uaW5uZXJSYWRpdXM9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpZaCgrTCksXyk6aX0sXy5vdXRlclJhZGl1cz1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOlloKCtMKSxfKTphfSxfLmNvcm5lclJhZGl1cz1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOlloKCtMKSxfKTpmfSxfLnBhZFJhZGl1cz1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1MPT1udWxsP251bGw6dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpZaCgrTCksXyk6cH0sXy5zdGFydEFuZ2xlPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6WWgoK0wpLF8pOnZ9LF8uZW5kQW5nbGU9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpZaCgrTCksXyk6bX0sXy5wYWRBbmdsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOlloKCtMKSxfKTpifSxfLmNvbnRleHQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9TD8/bnVsbCxfKTpFfSxffWZ1bmN0aW9uIHlJdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiYibGVuZ3RoImluIGk/aTpBcnJheS5mcm9tKGkpfWZ1bmN0aW9uIHhJdChpKXt0aGlzLl9jb250ZXh0PWl9eEl0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpO2JyZWFrfX19O2Z1bmN0aW9uIGlnKGkpe3JldHVybiBuZXcgeEl0KGkpfWZ1bmN0aW9uIEY3ZShpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBCN2UoaSl7cmV0dXJuIGlbMV19ZnVuY3Rpb24gWjcoaSxhKXt2YXIgZj1ZaCghMCkscD1udWxsLHY9aWcsbT1udWxsO2k9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT09dm9pZCAwP0Y3ZTpZaChpKSxhPXR5cGVvZiBhPT0iZnVuY3Rpb24iP2E6YT09PXZvaWQgMD9CN2U6WWgoYSk7ZnVuY3Rpb24gYihFKXt2YXIgXyxMPShFPXlJdChFKSkubGVuZ3RoLE4sQj0hMSxqO2ZvcihwPT1udWxsJiYobT12KGo9dzF0KCkpKSxfPTA7Xzw9TDsrK18pIShfPEwmJmYoTj1FW19dLF8sRSkpPT09QiYmKChCPSFCKT9tLmxpbmVTdGFydCgpOm0ubGluZUVuZCgpKSxCJiZtLnBvaW50KCtpKE4sXyxFKSwrYShOLF8sRSkpO2lmKGopcmV0dXJuIG09bnVsbCxqKyIifHxudWxsfXJldHVybiBiLng9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpZaCgrRSksYik6aX0sYi55PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6WWgoK0UpLGIpOmF9LGIuZGVmaW5lZD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlloKCEhRSksYik6Zn0sYi5jdXJ2ZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1FLHAhPW51bGwmJihtPXYocCkpLGIpOnZ9LGIuY29udGV4dD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT09bnVsbD9wPW09bnVsbDptPXYocD1FKSxiKTpwfSxifWZ1bmN0aW9uIFI3ZShpLGEpe3JldHVybiBhPGk/LTE6YT5pPzE6YT49aT8wOk5hTn1mdW5jdGlvbiBqN2UoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gJDdlKCl7dmFyIGk9ajdlLGE9UjdlLGY9bnVsbCxwPVloKDApLHY9WWgoVlUpLG09WWgoMCk7ZnVuY3Rpb24gYihFKXt2YXIgXyxMPShFPXlJdChFKSkubGVuZ3RoLE4sQixqPTAsUj1uZXcgQXJyYXkoTCksej1uZXcgQXJyYXkoTCksSz0rcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaXQ9TWF0aC5taW4oVlUsTWF0aC5tYXgoLVZVLHYuYXBwbHkodGhpcyxhcmd1bWVudHMpLUspKSxzdCx1dD1NYXRoLm1pbihNYXRoLmFicyhpdCkvTCxtLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYnQ9dXQqKGl0PDA/LTE6MSksbXQ7Zm9yKF89MDtfPEw7KytfKShtdD16W1JbX109X109K2koRVtfXSxfLEUpKT4wJiYoais9bXQpO2ZvcihhIT1udWxsP1Iuc29ydChmdW5jdGlvbih5dCxkdCl7cmV0dXJuIGEoelt5dF0seltkdF0pfSk6ZiE9bnVsbCYmUi5zb3J0KGZ1bmN0aW9uKHl0LGR0KXtyZXR1cm4gZihFW3l0XSxFW2R0XSl9KSxfPTAsQj1qPyhpdC1MKmJ0KS9qOjA7XzxMOysrXyxLPXN0KU49UltfXSxtdD16W05dLHN0PUsrKG10PjA/bXQqQjowKStidCx6W05dPXtkYXRhOkVbTl0saW5kZXg6Xyx2YWx1ZTptdCxzdGFydEFuZ2xlOkssZW5kQW5nbGU6c3QscGFkQW5nbGU6dXR9O3JldHVybiB6fXJldHVybiBiLnZhbHVlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6WWgoK0UpLGIpOml9LGIuc29ydFZhbHVlcz1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FLGY9bnVsbCxiKTphfSxiLnNvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9RSxhPW51bGwsYik6Zn0sYi5zdGFydEFuZ2xlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6WWgoK0UpLGIpOnB9LGIuZW5kQW5nbGU9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpZaCgrRSksYik6dn0sYi5wYWRBbmdsZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlloKCtFKSxiKTptfSxifWNsYXNzIGtJdHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMuX2NvbnRleHQ9YSx0aGlzLl94PWZ9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQoYSxmKXtzd2l0Y2goYT0rYSxmPStmLHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhhLGYpOnRoaXMuX2NvbnRleHQubW92ZVRvKGEsZik7YnJlYWt9Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK2EpLzIsdGhpcy5feTAsdGhpcy5feDAsZixhLGYpOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArZikvMixhLHRoaXMuX3kwLGEsZik7YnJlYWt9fXRoaXMuX3gwPWEsdGhpcy5feTA9Zn19ZnVuY3Rpb24gejdlKGkpe3JldHVybiBuZXcga0l0KGksITApfWZ1bmN0aW9uIHE3ZShpKXtyZXR1cm4gbmV3IGtJdChpLCExKX1mdW5jdGlvbiBaNigpe31mdW5jdGlvbiBXVShpLGEsZil7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmkuX3gwK2kuX3gxKS8zLCgyKmkuX3kwK2kuX3kxKS8zLChpLl94MCsyKmkuX3gxKS8zLChpLl95MCsyKmkuX3kxKS8zLChpLl94MCs0KmkuX3gxK2EpLzYsKGkuX3kwKzQqaS5feTErZikvNil9ZnVuY3Rpb24gS1UoaSl7dGhpcy5fY29udGV4dD1pfUtVLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6V1UodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6V1UodGhpcyxpLGEpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YX19O2Z1bmN0aW9uIEZOKGkpe3JldHVybiBuZXcgS1UoaSl9ZnVuY3Rpb24gRUl0KGkpe3RoaXMuX2NvbnRleHQ9aX1FSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6WjYsYXJlYUVuZDpaNixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9aSx0aGlzLl95Mj1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1pLHRoaXMuX3k0PWEsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNiwodGhpcy5feTArNCp0aGlzLl95MSthKS82KTticmVhaztkZWZhdWx0OldVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWF9fTtmdW5jdGlvbiBIN2UoaSl7cmV0dXJuIG5ldyBFSXQoaSl9ZnVuY3Rpb24gVEl0KGkpe3RoaXMuX2NvbnRleHQ9aX1USXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGY9KHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNixwPSh0aGlzLl95MCs0KnRoaXMuX3kxK2EpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhmLHApOnRoaXMuX2NvbnRleHQubW92ZVRvKGYscCk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpXVSh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1hfX07ZnVuY3Rpb24gRzdlKGkpe3JldHVybiBuZXcgVEl0KGkpfWZ1bmN0aW9uIENJdChpLGEpe3RoaXMuX2Jhc2lzPW5ldyBLVShpKSx0aGlzLl9iZXRhPWF9Q0l0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxhPXRoaXMuX3ksZj1pLmxlbmd0aC0xO2lmKGY+MClmb3IodmFyIHA9aVswXSx2PWFbMF0sbT1pW2ZdLXAsYj1hW2ZdLXYsRT0tMSxfOysrRTw9ZjspXz1FL2YsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSppW0VdKygxLXRoaXMuX2JldGEpKihwK18qbSksdGhpcy5fYmV0YSphW0VdKygxLXRoaXMuX2JldGEpKih2K18qYikpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrYSl9fTtjb25zdCBWN2U9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBhPT09MT9uZXcgS1UocCk6bmV3IENJdChwLGEpfXJldHVybiBmLmJldGE9ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSguODUpO2Z1bmN0aW9uIFlVKGksYSxmKXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oaS5feDEraS5fayooaS5feDItaS5feDApLGkuX3kxK2kuX2sqKGkuX3kyLWkuX3kwKSxpLl94MitpLl9rKihpLl94MS1hKSxpLl95MitpLl9rKihpLl95MS1mKSxpLl94MixpLl95Mil9ZnVuY3Rpb24gTzF0KGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtYSkvNn1PMXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOllVKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1pLHRoaXMuX3kxPWE7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpZVSh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgVTdlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gbmV3IE8xdChwLGEpfXJldHVybiBmLnRlbnNpb249ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSgwKTtmdW5jdGlvbiBOMXQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1hKS82fU4xdC5wcm90b3R5cGU9e2FyZWFTdGFydDpaNixhcmVhRW5kOlo2LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1pLHRoaXMuX3k0PWEpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWksdGhpcy5feTU9YTticmVhaztkZWZhdWx0OllVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBXN2U9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgTjF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uIFAxdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLWEpLzZ9UDF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OllVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBLN2U9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgUDF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uIEYxdChpLGEsZil7dmFyIHA9aS5feDEsdj1pLl95MSxtPWkuX3gyLGI9aS5feTI7aWYoaS5fbDAxX2E+djApe3ZhciBFPTIqaS5fbDAxXzJhKzMqaS5fbDAxX2EqaS5fbDEyX2EraS5fbDEyXzJhLF89MyppLl9sMDFfYSooaS5fbDAxX2EraS5fbDEyX2EpO3A9KHAqRS1pLl94MCppLl9sMTJfMmEraS5feDIqaS5fbDAxXzJhKS9fLHY9KHYqRS1pLl95MCppLl9sMTJfMmEraS5feTIqaS5fbDAxXzJhKS9ffWlmKGkuX2wyM19hPnYwKXt2YXIgTD0yKmkuX2wyM18yYSszKmkuX2wyM19hKmkuX2wxMl9hK2kuX2wxMl8yYSxOPTMqaS5fbDIzX2EqKGkuX2wyM19hK2kuX2wxMl9hKTttPShtKkwraS5feDEqaS5fbDIzXzJhLWEqaS5fbDEyXzJhKS9OLGI9KGIqTCtpLl95MSppLl9sMjNfMmEtZippLl9sMTJfMmEpL059aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAsdixtLGIsaS5feDIsaS5feTIpfWZ1bmN0aW9uIF9JdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfV9JdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe2lmKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7dmFyIGY9dGhpcy5feDItaSxwPXRoaXMuX3kyLWE7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhmKmYrcCpwLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkYxdCh0aGlzLGksYSk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9YX19O2NvbnN0IFk3ZT1mdW5jdGlvbiBpKGEpe2Z1bmN0aW9uIGYocCl7cmV0dXJuIGE/bmV3IF9JdChwLGEpOm5ldyBPMXQocCwwKX1yZXR1cm4gZi5hbHBoYT1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KC41KTtmdW5jdGlvbiBTSXQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fYWxwaGE9YX1TSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6WjYsYXJlYUVuZDpaNixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9YSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1hO2JyZWFrO2RlZmF1bHQ6RjF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgWDdlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgU0l0KHAsYSk6bmV3IE4xdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIEFJdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfUFJdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6RjF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgUTdlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgQUl0KHAsYSk6bmV3IFAxdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIExJdChpKXt0aGlzLl9jb250ZXh0PWl9TEl0LnByb3RvdHlwZT17YXJlYVN0YXJ0Olo2LGFyZWFFbmQ6WjYsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihpLGEpe2k9K2ksYT0rYSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGksYSkpfX07ZnVuY3Rpb24gWjdlKGkpe3JldHVybiBuZXcgTEl0KGkpfWZ1bmN0aW9uIE1JdChpKXtyZXR1cm4gaTwwPy0xOjF9ZnVuY3Rpb24gSUl0KGksYSxmKXt2YXIgcD1pLl94MS1pLl94MCx2PWEtaS5feDEsbT0oaS5feTEtaS5feTApLyhwfHx2PDAmJi0wKSxiPShmLWkuX3kxKS8odnx8cDwwJiYtMCksRT0obSp2K2IqcCkvKHArdik7cmV0dXJuKE1JdChtKStNSXQoYikpKk1hdGgubWluKE1hdGguYWJzKG0pLE1hdGguYWJzKGIpLC41Kk1hdGguYWJzKEUpKXx8MH1mdW5jdGlvbiBESXQoaSxhKXt2YXIgZj1pLl94MS1pLl94MDtyZXR1cm4gZj8oMyooaS5feTEtaS5feTApL2YtYSkvMjphfWZ1bmN0aW9uIEIxdChpLGEsZil7dmFyIHA9aS5feDAsdj1pLl95MCxtPWkuX3gxLGI9aS5feTEsRT0obS1wKS8zO2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwK0UsditFKmEsbS1FLGItRSpmLG0sYil9ZnVuY3Rpb24gWFUoaSl7dGhpcy5fY29udGV4dD1pfVhVLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpCMXQodGhpcyx0aGlzLl90MCxESXQodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt2YXIgZj1OYU47aWYoaT0raSxhPSthLCEoaT09PXRoaXMuX3gxJiZhPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLEIxdCh0aGlzLERJdCh0aGlzLGY9SUl0KHRoaXMsaSxhKSksZik7YnJlYWs7ZGVmYXVsdDpCMXQodGhpcyx0aGlzLl90MCxmPUlJdCh0aGlzLGksYSkpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YSx0aGlzLl90MD1mfX19O2Z1bmN0aW9uIE9JdChpKXt0aGlzLl9jb250ZXh0PW5ldyBOSXQoaSl9KE9JdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYVS5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihpLGEpe1hVLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsYSxpKX07ZnVuY3Rpb24gTkl0KGkpe3RoaXMuX2NvbnRleHQ9aX1OSXQucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhhLGkpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhhLGkpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHAsdixtKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oYSxpLHAsZixtLHYpfX07ZnVuY3Rpb24gSjdlKGkpe3JldHVybiBuZXcgWFUoaSl9ZnVuY3Rpb24gdFRlKGkpe3JldHVybiBuZXcgT0l0KGkpfWZ1bmN0aW9uIFBJdChpKXt0aGlzLl9jb250ZXh0PWl9UEl0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMuX3gsYT10aGlzLl95LGY9aS5sZW5ndGg7aWYoZilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGlbMF0sYVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaVswXSxhWzBdKSxmPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhpWzFdLGFbMV0pO2Vsc2UgZm9yKHZhciBwPUZJdChpKSx2PUZJdChhKSxtPTAsYj0xO2I8ZjsrK20sKytiKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwWzBdW21dLHZbMF1bbV0scFsxXVttXSx2WzFdW21dLGlbYl0sYVtiXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZmPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5feC5wdXNoKCtpKSx0aGlzLl95LnB1c2goK2EpfX07ZnVuY3Rpb24gRkl0KGkpe3ZhciBhLGY9aS5sZW5ndGgtMSxwLHY9bmV3IEFycmF5KGYpLG09bmV3IEFycmF5KGYpLGI9bmV3IEFycmF5KGYpO2Zvcih2WzBdPTAsbVswXT0yLGJbMF09aVswXSsyKmlbMV0sYT0xO2E8Zi0xOysrYSl2W2FdPTEsbVthXT00LGJbYV09NCppW2FdKzIqaVthKzFdO2Zvcih2W2YtMV09MixtW2YtMV09NyxiW2YtMV09OCppW2YtMV0raVtmXSxhPTE7YTxmOysrYSlwPXZbYV0vbVthLTFdLG1bYV0tPXAsYlthXS09cCpiW2EtMV07Zm9yKHZbZi0xXT1iW2YtMV0vbVtmLTFdLGE9Zi0yO2E+PTA7LS1hKXZbYV09KGJbYV0tdlthKzFdKS9tW2FdO2ZvcihtW2YtMV09KGlbZl0rdltmLTFdKS8yLGE9MDthPGYtMTsrK2EpbVthXT0yKmlbYSsxXS12W2ErMV07cmV0dXJuW3YsbV19ZnVuY3Rpb24gZVRlKGkpe3JldHVybiBuZXcgUEl0KGkpfWZ1bmN0aW9uIFFVKGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX3Q9YX1RVS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxhKSx0aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpO2Vsc2V7dmFyIGY9dGhpcy5feCooMS10aGlzLl90KStpKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhmLGEpfWJyZWFrfX10aGlzLl94PWksdGhpcy5feT1hfX07ZnVuY3Rpb24gblRlKGkpe3JldHVybiBuZXcgUVUoaSwuNSl9ZnVuY3Rpb24gclRlKGkpe3JldHVybiBuZXcgUVUoaSwwKX1mdW5jdGlvbiBpVGUoaSl7cmV0dXJuIG5ldyBRVShpLDEpfWZ1bmN0aW9uIEJOKGksYSxmKXt0aGlzLms9aSx0aGlzLng9YSx0aGlzLnk9Zn1CTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkJOLHNjYWxlOmZ1bmN0aW9uKGkpe3JldHVybiBpPT09MT90aGlzOm5ldyBCTih0aGlzLmsqaSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGksYSl7cmV0dXJuIGk9PT0wJmE9PT0wP3RoaXM6bmV3IEJOKHRoaXMuayx0aGlzLngrdGhpcy5rKmksdGhpcy55K3RoaXMuayphKX0sYXBwbHk6ZnVuY3Rpb24oaSl7cmV0dXJuW2lbMF0qdGhpcy5rK3RoaXMueCxpWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGkpe3JldHVybiBpKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihpKXtyZXR1cm5bKGlbMF0tdGhpcy54KS90aGlzLmssKGlbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihpKXtyZXR1cm4gaS5jb3B5KCkuZG9tYWluKGkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChpLmludmVydCxpKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sQk4ucHJvdG90eXBlOy8qISBAbGljZW5zZSBET01QdXJpZnkgMy4wLjUgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMC41L0xJQ0VOU0UgKi9jb25zdHtlbnRyaWVzOkJJdCxzZXRQcm90b3R5cGVPZjpSSXQsaXNGcm96ZW46c1RlLGdldFByb3RvdHlwZU9mOmFUZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6b1RlfT1PYmplY3Q7bGV0e2ZyZWV6ZTpzZyxzZWFsOlh3LGNyZWF0ZTpjVGV9PU9iamVjdCx7YXBwbHk6UjF0LGNvbnN0cnVjdDpqMXR9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtSMXR8fChSMXQ9ZnVuY3Rpb24oYSxmLHApe3JldHVybiBhLmFwcGx5KGYscCl9KSxzZ3x8KHNnPWZ1bmN0aW9uKGEpe3JldHVybiBhfSksWHd8fChYdz1mdW5jdGlvbihhKXtyZXR1cm4gYX0pLGoxdHx8KGoxdD1mdW5jdGlvbihhLGYpe3JldHVybiBuZXcgYSguLi5mKX0pO2NvbnN0IHVUZT1LMihBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksakl0PUsyKEFycmF5LnByb3RvdHlwZS5wb3ApLFJOPUsyKEFycmF5LnByb3RvdHlwZS5wdXNoKSxaVT1LMihTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSwkMXQ9SzIoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksbFRlPUsyKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLFF3PUsyKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksaFRlPUsyKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksZlRlPUsyKFN0cmluZy5wcm90b3R5cGUudHJpbSksTWI9SzIoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxqTj1kVGUoVHlwZUVycm9yKTtmdW5jdGlvbiBLMihpKXtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgscD1uZXcgQXJyYXkoZj4xP2YtMTowKSx2PTE7djxmO3YrKylwW3YtMV09YXJndW1lbnRzW3ZdO3JldHVybiBSMXQoaSxhLHApfX1mdW5jdGlvbiBkVGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoYSkscD0wO3A8YTtwKyspZltwXT1hcmd1bWVudHNbcF07cmV0dXJuIGoxdChpLGYpfX1mdW5jdGlvbiB3byhpLGEsZil7dmFyIHA7Zj0ocD1mKSE9PW51bGwmJnAhPT12b2lkIDA/cDpaVSxSSXQmJlJJdChpLG51bGwpO2xldCB2PWEubGVuZ3RoO2Zvcig7di0tOyl7bGV0IG09YVt2XTtpZih0eXBlb2YgbT09InN0cmluZyIpe2NvbnN0IGI9ZihtKTtiIT09bSYmKHNUZShhKXx8KGFbdl09YiksbT1iKX1pW21dPSEwfXJldHVybiBpfWZ1bmN0aW9uIE1BKGkpe2NvbnN0IGE9Y1RlKG51bGwpO2Zvcihjb25zdFtmLHBdb2YgQkl0KGkpKWFbZl09cDtyZXR1cm4gYX1mdW5jdGlvbiBKVShpLGEpe2Zvcig7aSE9PW51bGw7KXtjb25zdCBwPW9UZShpLGEpO2lmKHApe2lmKHAuZ2V0KXJldHVybiBLMihwLmdldCk7aWYodHlwZW9mIHAudmFsdWU9PSJmdW5jdGlvbiIpcmV0dXJuIEsyKHAudmFsdWUpfWk9YVRlKGkpfWZ1bmN0aW9uIGYocCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIixwKSxudWxsfXJldHVybiBmfWNvbnN0ICRJdD1zZyhbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksejF0PXNnKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxxMXQ9c2coWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksZ1RlPXNnKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxIMXQ9c2coWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLHBUZT1zZyhbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksekl0PXNnKFsiI3RleHQiXSkscUl0PXNnKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxHMXQ9c2coWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxISXQ9c2coWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksdFc9c2coWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxiVGU9WHcoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSx2VGU9WHcoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLHdUZT1YdygvXCR7W1x3XFddKn0vZ20pLG1UZT1YdygvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSx5VGU9WHcoL15hcmlhLVtcLVx3XSskLyksR0l0PVh3KC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLHhUZT1YdygvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksa1RlPVh3KC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFZJdD1YdygvXmh0bWwkL2kpO3ZhciBVSXQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTVVTVEFDSEVfRVhQUjpiVGUsRVJCX0VYUFI6dlRlLFRNUExJVF9FWFBSOndUZSxEQVRBX0FUVFI6bVRlLEFSSUFfQVRUUjp5VGUsSVNfQUxMT1dFRF9VUkk6R0l0LElTX1NDUklQVF9PUl9EQVRBOnhUZSxBVFRSX1dISVRFU1BBQ0U6a1RlLERPQ1RZUEVfTkFNRTpWSXR9KTtjb25zdCBFVGU9KCk9PnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LFRUZT1mdW5jdGlvbihhLGYpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Inx8dHlwZW9mIGEuY3JlYXRlUG9saWN5IT0iZnVuY3Rpb24iKXJldHVybiBudWxsO2xldCBwPW51bGw7Y29uc3Qgdj0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjtmJiZmLmhhc0F0dHJpYnV0ZSh2KSYmKHA9Zi5nZXRBdHRyaWJ1dGUodikpO2NvbnN0IG09ImRvbXB1cmlmeSIrKHA/IiMiK3A6IiIpO3RyeXtyZXR1cm4gYS5jcmVhdGVQb2xpY3kobSx7Y3JlYXRlSFRNTChiKXtyZXR1cm4gYn0sY3JlYXRlU2NyaXB0VVJMKGIpe3JldHVybiBifX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIittKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O2Z1bmN0aW9uIFdJdCgpe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpFVGUoKTtjb25zdCBhPUJpPT5XSXQoQmkpO2lmKGEudmVyc2lvbj0iMy4wLjUiLGEucmVtb3ZlZD1bXSwhaXx8IWkuZG9jdW1lbnR8fGkuZG9jdW1lbnQubm9kZVR5cGUhPT05KXJldHVybiBhLmlzU3VwcG9ydGVkPSExLGE7Y29uc3QgZj1pLmRvY3VtZW50LHA9Zi5jdXJyZW50U2NyaXB0O2xldHtkb2N1bWVudDp2fT1pO2NvbnN0e0RvY3VtZW50RnJhZ21lbnQ6bSxIVE1MVGVtcGxhdGVFbGVtZW50OmIsTm9kZTpFLEVsZW1lbnQ6XyxOb2RlRmlsdGVyOkwsTmFtZWROb2RlTWFwOk49aS5OYW1lZE5vZGVNYXB8fGkuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpCLERPTVBhcnNlcjpqLHRydXN0ZWRUeXBlczpSfT1pLHo9Xy5wcm90b3R5cGUsSz1KVSh6LCJjbG9uZU5vZGUiKSxpdD1KVSh6LCJuZXh0U2libGluZyIpLHN0PUpVKHosImNoaWxkTm9kZXMiKSx1dD1KVSh6LCJwYXJlbnROb2RlIik7aWYodHlwZW9mIGI9PSJmdW5jdGlvbiIpe2NvbnN0IEJpPXYuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtCaS5jb250ZW50JiZCaS5jb250ZW50Lm93bmVyRG9jdW1lbnQmJih2PUJpLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IGJ0LG10PSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOnl0LGNyZWF0ZU5vZGVJdGVyYXRvcjpkdCxjcmVhdGVEb2N1bWVudEZyYWdtZW50Omh0LGdldEVsZW1lbnRzQnlUYWdOYW1lOnd0fT12LHtpbXBvcnROb2RlOlh9PWY7bGV0IHB0PXt9O2EuaXNTdXBwb3J0ZWQ9dHlwZW9mIEJJdD09ImZ1bmN0aW9uIiYmdHlwZW9mIHV0PT0iZnVuY3Rpb24iJiZ5dCYmeXQuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2NvbnN0e01VU1RBQ0hFX0VYUFI6VSxFUkJfRVhQUjp4dCxUTVBMSVRfRVhQUjpudCxEQVRBX0FUVFI6T3QsQVJJQV9BVFRSOk50LElTX1NDUklQVF9PUl9EQVRBOnF0LEFUVFJfV0hJVEVTUEFDRTpDdH09VUl0O2xldHtJU19BTExPV0VEX1VSSTpafT1VSXQsVHQ9bnVsbDtjb25zdCBIdD13byh7fSxbLi4uJEl0LC4uLnoxdCwuLi5xMXQsLi4uSDF0LC4uLnpJdF0pO2xldCBJdD1udWxsO2NvbnN0IEZ0PXdvKHt9LFsuLi5xSXQsLi4uRzF0LC4uLkhJdCwuLi50V10pO2xldCBrZT1PYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxwbj1udWxsLE1lPW51bGwsdmU9ITAsR2U9ITAsS2U9ITEsd2U9ITAsX2U9ITEsJHQ9ITEscmU9ITEsaWU9ITEsT2U9ITEsb2U9ITEsTmU9ITEsbWU9ITAsY249ITE7Y29uc3QgbGk9InVzZXItY29udGVudC0iO2xldCB5YT0hMCxkYT0hMSxPbz17fSxkcz1udWxsO2NvbnN0IERyPXdvKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSk7bGV0IG5yPW51bGw7Y29uc3QgZGk9d28oe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgRWU9bnVsbDtjb25zdCBZbj13byh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLEhlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixUaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGduPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtsZXQga3M9Z24scWE9ITEsTGE9bnVsbDtjb25zdCBHcz13byh7fSxbSGUsVGksZ25dLCQxdCk7bGV0IE5vO2NvbnN0IHZzPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0sbnU9InRleHQvaHRtbCI7bGV0ICRzLEx1PW51bGw7Y29uc3QgZm09di5jcmVhdGVFbGVtZW50KCJmb3JtIiksYXY9ZnVuY3Rpb24ob24pe3JldHVybiBvbiBpbnN0YW5jZW9mIFJlZ0V4cHx8b24gaW5zdGFuY2VvZiBGdW5jdGlvbn0sVXU9ZnVuY3Rpb24ob24pe2lmKCEoTHUmJkx1PT09b24pKXtpZigoIW9ufHx0eXBlb2Ygb24hPSJvYmplY3QiKSYmKG9uPXt9KSxvbj1NQShvbiksTm89dnMuaW5kZXhPZihvbi5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT9Obz1udTpObz1vbi5QQVJTRVJfTUVESUFfVFlQRSwkcz1Obz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPyQxdDpaVSxUdD0iQUxMT1dFRF9UQUdTImluIG9uP3dvKHt9LG9uLkFMTE9XRURfVEFHUywkcyk6SHQsSXQ9IkFMTE9XRURfQVRUUiJpbiBvbj93byh7fSxvbi5BTExPV0VEX0FUVFIsJHMpOkZ0LExhPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gb24/d28oe30sb24uQUxMT1dFRF9OQU1FU1BBQ0VTLCQxdCk6R3MsRWU9IkFERF9VUklfU0FGRV9BVFRSImluIG9uP3dvKE1BKFluKSxvbi5BRERfVVJJX1NBRkVfQVRUUiwkcyk6WW4sbnI9IkFERF9EQVRBX1VSSV9UQUdTImluIG9uP3dvKE1BKGRpKSxvbi5BRERfREFUQV9VUklfVEFHUywkcyk6ZGksZHM9IkZPUkJJRF9DT05URU5UUyJpbiBvbj93byh7fSxvbi5GT1JCSURfQ09OVEVOVFMsJHMpOkRyLHBuPSJGT1JCSURfVEFHUyJpbiBvbj93byh7fSxvbi5GT1JCSURfVEFHUywkcyk6e30sTWU9IkZPUkJJRF9BVFRSImluIG9uP3dvKHt9LG9uLkZPUkJJRF9BVFRSLCRzKTp7fSxPbz0iVVNFX1BST0ZJTEVTImluIG9uP29uLlVTRV9QUk9GSUxFUzohMSx2ZT1vbi5BTExPV19BUklBX0FUVFIhPT0hMSxHZT1vbi5BTExPV19EQVRBX0FUVFIhPT0hMSxLZT1vbi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsd2U9b24uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsX2U9b24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSwkdD1vbi5XSE9MRV9ET0NVTUVOVHx8ITEsT2U9b24uUkVUVVJOX0RPTXx8ITEsb2U9b24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsTmU9b24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsaWU9b24uRk9SQ0VfQk9EWXx8ITEsbWU9b24uU0FOSVRJWkVfRE9NIT09ITEsY249b24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLHlhPW9uLktFRVBfQ09OVEVOVCE9PSExLGRhPW9uLklOX1BMQUNFfHwhMSxaPW9uLkFMTE9XRURfVVJJX1JFR0VYUHx8R0l0LGtzPW9uLk5BTUVTUEFDRXx8Z24sa2U9b24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LG9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZhdihvbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoa2UudGFnTmFtZUNoZWNrPW9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksb24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJmF2KG9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihrZS5hdHRyaWJ1dGVOYW1lQ2hlY2s9b24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxvbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIG9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYoa2UuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPW9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksX2UmJihHZT0hMSksb2UmJihPZT0hMCksT28mJihUdD13byh7fSxbLi4uekl0XSksSXQ9W10sT28uaHRtbD09PSEwJiYod28oVHQsJEl0KSx3byhJdCxxSXQpKSxPby5zdmc9PT0hMCYmKHdvKFR0LHoxdCksd28oSXQsRzF0KSx3byhJdCx0VykpLE9vLnN2Z0ZpbHRlcnM9PT0hMCYmKHdvKFR0LHExdCksd28oSXQsRzF0KSx3byhJdCx0VykpLE9vLm1hdGhNbD09PSEwJiYod28oVHQsSDF0KSx3byhJdCxISXQpLHdvKEl0LHRXKSkpLG9uLkFERF9UQUdTJiYoVHQ9PT1IdCYmKFR0PU1BKFR0KSksd28oVHQsb24uQUREX1RBR1MsJHMpKSxvbi5BRERfQVRUUiYmKEl0PT09RnQmJihJdD1NQShJdCkpLHdvKEl0LG9uLkFERF9BVFRSLCRzKSksb24uQUREX1VSSV9TQUZFX0FUVFImJndvKEVlLG9uLkFERF9VUklfU0FGRV9BVFRSLCRzKSxvbi5GT1JCSURfQ09OVEVOVFMmJihkcz09PURyJiYoZHM9TUEoZHMpKSx3byhkcyxvbi5GT1JCSURfQ09OVEVOVFMsJHMpKSx5YSYmKFR0WyIjdGV4dCJdPSEwKSwkdCYmd28oVHQsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksVHQudGFibGUmJih3byhUdCxbInRib2R5Il0pLGRlbGV0ZSBwbi50Ym9keSksb24uVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKHR5cGVvZiBvbi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT0iZnVuY3Rpb24iKXRocm93IGpOKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2Ygb24uVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IGpOKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO2J0PW9uLlRSVVNURURfVFlQRVNfUE9MSUNZLG10PWJ0LmNyZWF0ZUhUTUwoIiIpfWVsc2UgYnQ9PT12b2lkIDAmJihidD1UVGUoUixwKSksYnQhPT1udWxsJiZ0eXBlb2YgbXQ9PSJzdHJpbmciJiYobXQ9YnQuY3JlYXRlSFRNTCgiIikpO3NnJiZzZyhvbiksTHU9b259fSxabD13byh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksUGE9d28oe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSksQWw9d28oe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksdWE9d28oe30sejF0KTt3byh1YSxxMXQpLHdvKHVhLGdUZSk7Y29uc3QgYmM9d28oe30sSDF0KTt3byhiYyxwVGUpO2NvbnN0IENjPWZ1bmN0aW9uKG9uKXtsZXQga3I9dXQob24pOygha3J8fCFrci50YWdOYW1lKSYmKGtyPXtuYW1lc3BhY2VVUkk6a3MsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgRWk9WlUob24udGFnTmFtZSksSm89WlUoa3IudGFnTmFtZSk7cmV0dXJuIExhW29uLm5hbWVzcGFjZVVSSV0/b24ubmFtZXNwYWNlVVJJPT09VGk/a3IubmFtZXNwYWNlVVJJPT09Z24/RWk9PT0ic3ZnIjprci5uYW1lc3BhY2VVUkk9PT1IZT9FaT09PSJzdmciJiYoSm89PT0iYW5ub3RhdGlvbi14bWwifHxabFtKb10pOiEhdWFbRWldOm9uLm5hbWVzcGFjZVVSST09PUhlP2tyLm5hbWVzcGFjZVVSST09PWduP0VpPT09Im1hdGgiOmtyLm5hbWVzcGFjZVVSST09PVRpP0VpPT09Im1hdGgiJiZQYVtKb106ISFiY1tFaV06b24ubmFtZXNwYWNlVVJJPT09Z24/a3IubmFtZXNwYWNlVVJJPT09VGkmJiFQYVtKb118fGtyLm5hbWVzcGFjZVVSST09PUhlJiYhWmxbSm9dPyExOiFiY1tFaV0mJihBbFtFaV18fCF1YVtFaV0pOiEhKE5vPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJkxhW29uLm5hbWVzcGFjZVVSSV0pOiExfSxnYT1mdW5jdGlvbihvbil7Uk4oYS5yZW1vdmVkLHtlbGVtZW50Om9ufSk7dHJ5e29uLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob24pfWNhdGNoe29uLnJlbW92ZSgpfX0sTWE9ZnVuY3Rpb24ob24sa3Ipe3RyeXtSTihhLnJlbW92ZWQse2F0dHJpYnV0ZTprci5nZXRBdHRyaWJ1dGVOb2RlKG9uKSxmcm9tOmtyfSl9Y2F0Y2h7Uk4oYS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmtyfSl9aWYoa3IucmVtb3ZlQXR0cmlidXRlKG9uKSxvbj09PSJpcyImJiFJdFtvbl0paWYoT2V8fG9lKXRyeXtnYShrcil9Y2F0Y2h7fWVsc2UgdHJ5e2tyLnNldEF0dHJpYnV0ZShvbiwiIil9Y2F0Y2h7fX0sSGE9ZnVuY3Rpb24ob24pe2xldCBrcixFaTtpZihpZSlvbj0iPHJlbW92ZT48L3JlbW92ZT4iK29uO2Vsc2V7Y29uc3QgdGY9bFRlKG9uLC9eW1xyXG5cdCBdKy8pO0VpPXRmJiZ0ZlswXX1Obz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZrcz09PWduJiYob249JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytvbisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBKbz1idD9idC5jcmVhdGVIVE1MKG9uKTpvbjtpZihrcz09PWduKXRyeXtrcj1uZXcgaigpLnBhcnNlRnJvbVN0cmluZyhKbyxObyl9Y2F0Y2h7fWlmKCFrcnx8IWtyLmRvY3VtZW50RWxlbWVudCl7a3I9eXQuY3JlYXRlRG9jdW1lbnQoa3MsInRlbXBsYXRlIixudWxsKTt0cnl7a3IuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1xYT9tdDpKb31jYXRjaHt9fWNvbnN0IHZjPWtyLmJvZHl8fGtyLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gb24mJkVpJiZ2Yy5pbnNlcnRCZWZvcmUodi5jcmVhdGVUZXh0Tm9kZShFaSksdmMuY2hpbGROb2Rlc1swXXx8bnVsbCksa3M9PT1nbj93dC5jYWxsKGtyLCR0PyJodG1sIjoiYm9keSIpWzBdOiR0P2tyLmRvY3VtZW50RWxlbWVudDp2Y30sTGw9ZnVuY3Rpb24ob24pe3JldHVybiBkdC5jYWxsKG9uLm93bmVyRG9jdW1lbnR8fG9uLG9uLEwuU0hPV19FTEVNRU5UfEwuU0hPV19DT01NRU5UfEwuU0hPV19URVhULG51bGwsITEpfSxfYz1mdW5jdGlvbihvbil7cmV0dXJuIG9uIGluc3RhbmNlb2YgQiYmKHR5cGVvZiBvbi5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBvbi50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBvbi5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShvbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTil8fHR5cGVvZiBvbi5yZW1vdmVBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBvbi5zZXRBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBvbi5uYW1lc3BhY2VVUkkhPSJzdHJpbmcifHx0eXBlb2Ygb24uaW5zZXJ0QmVmb3JlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygb24uaGFzQ2hpbGROb2RlcyE9ImZ1bmN0aW9uIil9LG92PWZ1bmN0aW9uKG9uKXtyZXR1cm4gdHlwZW9mIEU9PSJvYmplY3QiP29uIGluc3RhbmNlb2YgRTpvbiYmdHlwZW9mIG9uPT0ib2JqZWN0IiYmdHlwZW9mIG9uLm5vZGVUeXBlPT0ibnVtYmVyIiYmdHlwZW9mIG9uLm5vZGVOYW1lPT0ic3RyaW5nIn0sSmw9ZnVuY3Rpb24ob24sa3IsRWkpe3B0W29uXSYmdVRlKHB0W29uXSxKbz0+e0pvLmNhbGwoYSxrcixFaSxMdSl9KX0sWjE9ZnVuY3Rpb24ob24pe2xldCBrcjtpZihKbCgiYmVmb3JlU2FuaXRpemVFbGVtZW50cyIsb24sbnVsbCksX2Mob24pKXJldHVybiBnYShvbiksITA7Y29uc3QgRWk9JHMob24ubm9kZU5hbWUpO2lmKEpsKCJ1cG9uU2FuaXRpemVFbGVtZW50Iixvbix7dGFnTmFtZTpFaSxhbGxvd2VkVGFnczpUdH0pLG9uLmhhc0NoaWxkTm9kZXMoKSYmIW92KG9uLmZpcnN0RWxlbWVudENoaWxkKSYmKCFvdihvbi5jb250ZW50KXx8IW92KG9uLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmTWIoLzxbL1x3XS9nLG9uLmlubmVySFRNTCkmJk1iKC88Wy9cd10vZyxvbi50ZXh0Q29udGVudCkpcmV0dXJuIGdhKG9uKSwhMDtpZighVHRbRWldfHxwbltFaV0pe2lmKCFwbltFaV0mJkoxKEVpKSYmKGtlLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmTWIoa2UudGFnTmFtZUNoZWNrLEVpKXx8a2UudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJmtlLnRhZ05hbWVDaGVjayhFaSkpKXJldHVybiExO2lmKHlhJiYhZHNbRWldKXtjb25zdCBKbz11dChvbil8fG9uLnBhcmVudE5vZGUsdmM9c3Qob24pfHxvbi5jaGlsZE5vZGVzO2lmKHZjJiZKbyl7Y29uc3QgdGY9dmMubGVuZ3RoO2ZvcihsZXQgT2M9dGYtMTtPYz49MDstLU9jKUpvLmluc2VydEJlZm9yZShLKHZjW09jXSwhMCksaXQob24pKX19cmV0dXJuIGdhKG9uKSwhMH1yZXR1cm4gb24gaW5zdGFuY2VvZiBfJiYhQ2Mob24pfHwoRWk9PT0ibm9zY3JpcHQifHxFaT09PSJub2VtYmVkInx8RWk9PT0ibm9mcmFtZXMiKSYmTWIoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksb24uaW5uZXJIVE1MKT8oZ2Eob24pLCEwKTooX2UmJm9uLm5vZGVUeXBlPT09MyYmKGtyPW9uLnRleHRDb250ZW50LGtyPVF3KGtyLFUsIiAiKSxrcj1Rdyhrcix4dCwiICIpLGtyPVF3KGtyLG50LCIgIiksb24udGV4dENvbnRlbnQhPT1rciYmKFJOKGEucmVtb3ZlZCx7ZWxlbWVudDpvbi5jbG9uZU5vZGUoKX0pLG9uLnRleHRDb250ZW50PWtyKSksSmwoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsb24sbnVsbCksITEpfSxGZD1mdW5jdGlvbihvbixrcixFaSl7aWYobWUmJihrcj09PSJpZCJ8fGtyPT09Im5hbWUiKSYmKEVpIGluIHZ8fEVpIGluIGZtKSlyZXR1cm4hMTtpZighKEdlJiYhTWVba3JdJiZNYihPdCxrcikpKXtpZighKHZlJiZNYihOdCxrcikpKXtpZighSXRba3JdfHxNZVtrcl0pe2lmKCEoSjEob24pJiYoa2UudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZNYihrZS50YWdOYW1lQ2hlY2ssb24pfHxrZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYma2UudGFnTmFtZUNoZWNrKG9uKSkmJihrZS5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJk1iKGtlLmF0dHJpYnV0ZU5hbWVDaGVjayxrcil8fGtlLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZrZS5hdHRyaWJ1dGVOYW1lQ2hlY2soa3IpKXx8a3I9PT0iaXMiJiZrZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihrZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJk1iKGtlLnRhZ05hbWVDaGVjayxFaSl8fGtlLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZrZS50YWdOYW1lQ2hlY2soRWkpKSkpcmV0dXJuITF9ZWxzZSBpZighRWVba3JdKXtpZighTWIoWixRdyhFaSxDdCwiIikpKXtpZighKChrcj09PSJzcmMifHxrcj09PSJ4bGluazpocmVmInx8a3I9PT0iaHJlZiIpJiZvbiE9PSJzY3JpcHQiJiZoVGUoRWksImRhdGE6Iik9PT0wJiZucltvbl0pKXtpZighKEtlJiYhTWIocXQsUXcoRWksQ3QsIiIpKSkpe2lmKEVpKXJldHVybiExfX19fX19cmV0dXJuITB9LEoxPWZ1bmN0aW9uKG9uKXtyZXR1cm4gb24uaW5kZXhPZigiLSIpPjB9LEJkPWZ1bmN0aW9uKG9uKXtsZXQga3IsRWksSm8sdmM7SmwoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsb24sbnVsbCk7Y29uc3R7YXR0cmlidXRlczp0Zn09b247aWYoIXRmKXJldHVybjtjb25zdCBPYz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOkl0fTtmb3IodmM9dGYubGVuZ3RoO3ZjLS07KXtrcj10Zlt2Y107Y29uc3R7bmFtZTplZixuYW1lc3BhY2VVUkk6bmZ9PWtyO2lmKEVpPWVmPT09InZhbHVlIj9rci52YWx1ZTpmVGUoa3IudmFsdWUpLEpvPSRzKGVmKSxPYy5hdHRyTmFtZT1KbyxPYy5hdHRyVmFsdWU9RWksT2Mua2VlcEF0dHI9ITAsT2MuZm9yY2VLZWVwQXR0cj12b2lkIDAsSmwoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsb24sT2MpLEVpPU9jLmF0dHJWYWx1ZSxPYy5mb3JjZUtlZXBBdHRyfHwoTWEoZWYsb24pLCFPYy5rZWVwQXR0cikpY29udGludWU7aWYoIXdlJiZNYigvXC8+L2ksRWkpKXtNYShlZixvbik7Y29udGludWV9X2UmJihFaT1RdyhFaSxVLCIgIiksRWk9UXcoRWkseHQsIiAiKSxFaT1RdyhFaSxudCwiICIpKTtjb25zdCBYaT0kcyhvbi5ub2RlTmFtZSk7aWYoRmQoWGksSm8sRWkpKXtpZihjbiYmKEpvPT09ImlkInx8Sm89PT0ibmFtZSIpJiYoTWEoZWYsb24pLEVpPWxpK0VpKSxidCYmdHlwZW9mIFI9PSJvYmplY3QiJiZ0eXBlb2YgUi5nZXRBdHRyaWJ1dGVUeXBlPT0iZnVuY3Rpb24iJiYhbmYpc3dpdGNoKFIuZ2V0QXR0cmlidXRlVHlwZShYaSxKbykpe2Nhc2UiVHJ1c3RlZEhUTUwiOntFaT1idC5jcmVhdGVIVE1MKEVpKTticmVha31jYXNlIlRydXN0ZWRTY3JpcHRVUkwiOntFaT1idC5jcmVhdGVTY3JpcHRVUkwoRWkpO2JyZWFrfX10cnl7bmY/b24uc2V0QXR0cmlidXRlTlMobmYsZWYsRWkpOm9uLnNldEF0dHJpYnV0ZShlZixFaSksakl0KGEucmVtb3ZlZCl9Y2F0Y2h7fX19SmwoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixvbixudWxsKX0sRTA9ZnVuY3Rpb24gQmkob24pe2xldCBrcjtjb25zdCBFaT1MbChvbik7Zm9yKEpsKCJiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSIsb24sbnVsbCk7a3I9RWkubmV4dE5vZGUoKTspSmwoInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLGtyLG51bGwpLCFaMShrcikmJihrci5jb250ZW50IGluc3RhbmNlb2YgbSYmQmkoa3IuY29udGVudCksQmQoa3IpKTtKbCgiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsb24sbnVsbCl9O3JldHVybiBhLnNhbml0aXplPWZ1bmN0aW9uKEJpKXtsZXQgb249YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGtyLEVpLEpvLHZjO2lmKHFhPSFCaSxxYSYmKEJpPSI8IS0tPiIpLHR5cGVvZiBCaSE9InN0cmluZyImJiFvdihCaSkpaWYodHlwZW9mIEJpLnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihCaT1CaS50b1N0cmluZygpLHR5cGVvZiBCaSE9InN0cmluZyIpdGhyb3cgak4oImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IGpOKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFhLmlzU3VwcG9ydGVkKXJldHVybiBCaTtpZihyZXx8VXUob24pLGEucmVtb3ZlZD1bXSx0eXBlb2YgQmk9PSJzdHJpbmciJiYoZGE9ITEpLGRhKXtpZihCaS5ub2RlTmFtZSl7Y29uc3QgZWY9JHMoQmkubm9kZU5hbWUpO2lmKCFUdFtlZl18fHBuW2VmXSl0aHJvdyBqTigicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKEJpIGluc3RhbmNlb2YgRSlrcj1IYSgiPCEtLS0tPiIpLEVpPWtyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShCaSwhMCksRWkubm9kZVR5cGU9PT0xJiZFaS5ub2RlTmFtZT09PSJCT0RZInx8RWkubm9kZU5hbWU9PT0iSFRNTCI/a3I9RWk6a3IuYXBwZW5kQ2hpbGQoRWkpO2Vsc2V7aWYoIU9lJiYhX2UmJiEkdCYmQmkuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIGJ0JiZOZT9idC5jcmVhdGVIVE1MKEJpKTpCaTtpZihrcj1IYShCaSksIWtyKXJldHVybiBPZT9udWxsOk5lP210OiIifWtyJiZpZSYmZ2Eoa3IuZmlyc3RDaGlsZCk7Y29uc3QgdGY9TGwoZGE/Qmk6a3IpO2Zvcig7Sm89dGYubmV4dE5vZGUoKTspWjEoSm8pfHwoSm8uY29udGVudCBpbnN0YW5jZW9mIG0mJkUwKEpvLmNvbnRlbnQpLEJkKEpvKSk7aWYoZGEpcmV0dXJuIEJpO2lmKE9lKXtpZihvZSlmb3IodmM9aHQuY2FsbChrci5vd25lckRvY3VtZW50KTtrci5maXJzdENoaWxkOyl2Yy5hcHBlbmRDaGlsZChrci5maXJzdENoaWxkKTtlbHNlIHZjPWtyO3JldHVybihJdC5zaGFkb3dyb290fHxJdC5zaGFkb3dyb290bW9kZSkmJih2Yz1YLmNhbGwoZix2YywhMCkpLHZjfWxldCBPYz0kdD9rci5vdXRlckhUTUw6a3IuaW5uZXJIVE1MO3JldHVybiAkdCYmVHRbIiFkb2N0eXBlIl0mJmtyLm93bmVyRG9jdW1lbnQmJmtyLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYma3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJk1iKFZJdCxrci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihPYz0iPCFET0NUWVBFICIra3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtPYyksX2UmJihPYz1RdyhPYyxVLCIgIiksT2M9UXcoT2MseHQsIiAiKSxPYz1RdyhPYyxudCwiICIpKSxidCYmTmU/YnQuY3JlYXRlSFRNTChPYyk6T2N9LGEuc2V0Q29uZmlnPWZ1bmN0aW9uKEJpKXtVdShCaSkscmU9ITB9LGEuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtMdT1udWxsLHJlPSExfSxhLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oQmksb24sa3Ipe0x1fHxVdSh7fSk7Y29uc3QgRWk9JHMoQmkpLEpvPSRzKG9uKTtyZXR1cm4gRmQoRWksSm8sa3IpfSxhLmFkZEhvb2s9ZnVuY3Rpb24oQmksb24pe3R5cGVvZiBvbj09ImZ1bmN0aW9uIiYmKHB0W0JpXT1wdFtCaV18fFtdLFJOKHB0W0JpXSxvbikpfSxhLnJlbW92ZUhvb2s9ZnVuY3Rpb24oQmkpe2lmKHB0W0JpXSlyZXR1cm4gakl0KHB0W0JpXSl9LGEucmVtb3ZlSG9va3M9ZnVuY3Rpb24oQmkpe3B0W0JpXSYmKHB0W0JpXT1bXSl9LGEucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtwdD17fX0sYX12YXIgZVc9V0l0KCk7Y29uc3QgJE49LzxiclxzKlwvPz4vZ2ksQ1RlPWk9Pmk/WEl0KGkpLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikuc3BsaXQoIiNiciMiKTpbIiJdLEtJdD1pPT5lVy5zYW5pdGl6ZShpKSxZSXQ9KGksYSk9Pnt2YXIgZjtpZigoKGY9YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmh0bWxMYWJlbHMpIT09ITEpe2NvbnN0IHA9YS5zZWN1cml0eUxldmVsO3A9PT0iYW50aXNjcmlwdCJ8fHA9PT0ic3RyaWN0Ij9pPUtJdChpKTpwIT09Imxvb3NlIiYmKGk9WEl0KGkpLGk9aS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxpPWkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLGk9TFRlKGkpKX1yZXR1cm4gaX0sRGQ9KGksYSk9PmkmJihhLmRvbXB1cmlmeUNvbmZpZz9pPWVXLnNhbml0aXplKFlJdChpLGEpLGEuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOmk9ZVcuc2FuaXRpemUoWUl0KGksYSkse0ZPUkJJRF9UQUdTOlsic3R5bGUiXX0pLnRvU3RyaW5nKCksaSksX1RlPShpLGEpPT50eXBlb2YgaT09InN0cmluZyI/RGQoaSxhKTppLmZsYXQoKS5tYXAoZj0+RGQoZixhKSksU1RlPWk9PiROLnRlc3QoaSksQVRlPWk9Pmkuc3BsaXQoJE4pLExUZT1pPT5pLnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKSxYSXQ9aT0+aS5yZXBsYWNlKCROLCIjYnIjIiksTVRlPWk9PntsZXQgYT0iIjtyZXR1cm4gaSYmKGE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsYT1hLnJlcGxhY2VBbGwoL1woL2csIlxcKCIpLGE9YS5yZXBsYWNlQWxsKC9cKS9nLCJcXCkiKSksYX0sczE9aT0+IShpPT09ITF8fFsiZmFsc2UiLCJudWxsIiwiMCJdLmluY2x1ZGVzKFN0cmluZyhpKS50cmltKCkudG9Mb3dlckNhc2UoKSkpLElUZT1mdW5jdGlvbiguLi5pKXtjb25zdCBhPWkuZmlsdGVyKGY9PiFpc05hTihmKSk7cmV0dXJuIE1hdGgubWF4KC4uLmEpfSxEVGU9ZnVuY3Rpb24oLi4uaSl7Y29uc3QgYT1pLmZpbHRlcihmPT4haXNOYU4oZikpO3JldHVybiBNYXRoLm1pbiguLi5hKX0sek49ZnVuY3Rpb24oaSl7Y29uc3QgYT1pLnNwbGl0KC8oLCkvKSxmPVtdO2ZvcihsZXQgcD0wO3A8YS5sZW5ndGg7cCsrKXtsZXQgdj1hW3BdO2lmKHY9PT0iLCImJnA+MCYmcCsxPGEubGVuZ3RoKXtjb25zdCBtPWFbcC0xXSxiPWFbcCsxXTtPVGUobSxiKSYmKHY9bSsiLCIrYixwKyssZi5wb3AoKSl9Zi5wdXNoKE5UZSh2KSl9cmV0dXJuIGYuam9pbigiIil9LFYxdD0oaSxhKT0+TWF0aC5tYXgoMCxpLnNwbGl0KGEpLmxlbmd0aC0xKSxPVGU9KGksYSk9Pntjb25zdCBmPVYxdChpLCJ+IikscD1WMXQoYSwifiIpO3JldHVybiBmPT09MSYmcD09PTF9LE5UZT1pPT57Y29uc3QgYT1WMXQoaSwifiIpO2xldCBmPSExO2lmKGE8PTEpcmV0dXJuIGk7YSUyIT09MCYmaS5zdGFydHNXaXRoKCJ+IikmJihpPWkuc3Vic3RyaW5nKDEpLGY9ITApO2NvbnN0IHA9Wy4uLmldO2xldCB2PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO2Zvcig7diE9PS0xJiZtIT09LTEmJnYhPT1tOylwW3ZdPSI8IixwW21dPSI+Iix2PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO3JldHVybiBmJiZwLnVuc2hpZnQoIn4iKSxwLmpvaW4oIiIpfSxZcj17Z2V0Um93czpDVGUsc2FuaXRpemVUZXh0OkRkLHNhbml0aXplVGV4dE9yQXJyYXk6X1RlLGhhc0JyZWFrczpTVGUsc3BsaXRCcmVha3M6QVRlLGxpbmVCcmVha1JlZ2V4OiROLHJlbW92ZVNjcmlwdDpLSXQsZ2V0VXJsOk1UZSxldmFsdWF0ZTpzMSxnZXRNYXg6SVRlLGdldE1pbjpEVGV9LG5XPXttaW46e3I6MCxnOjAsYjowLHM6MCxsOjAsYTowfSxtYXg6e3I6MjU1LGc6MjU1LGI6MjU1LGg6MzYwLHM6MTAwLGw6MTAwLGE6MX0sY2xhbXA6e3I6aT0+aT49MjU1PzI1NTppPDA/MDppLGc6aT0+aT49MjU1PzI1NTppPDA/MDppLGI6aT0+aT49MjU1PzI1NTppPDA/MDppLGg6aT0+aSUzNjAsczppPT5pPj0xMDA/MTAwOmk8MD8wOmksbDppPT5pPj0xMDA/MTAwOmk8MD8wOmksYTppPT5pPj0xPzE6aTwwPzA6aX0sdG9MaW5lYXI6aT0+e2NvbnN0IGE9aS8yNTU7cmV0dXJuIGk+LjAzOTI4P01hdGgucG93KChhKy4wNTUpLzEuMDU1LDIuNCk6YS8xMi45Mn0saHVlMnJnYjooaSxhLGYpPT4oZjwwJiYoZis9MSksZj4xJiYoZi09MSksZjwxLzY/aSsoYS1pKSo2KmY6ZjwxLzI/YTpmPDIvMz9pKyhhLWkpKigyLzMtZikqNjppKSxoc2wycmdiOih7aDppLHM6YSxsOmZ9LHApPT57aWYoIWEpcmV0dXJuIGYqMi41NTtpLz0zNjAsYS89MTAwLGYvPTEwMDtjb25zdCB2PWY8LjU/ZiooMSthKTpmK2EtZiphLG09MipmLXY7c3dpdGNoKHApe2Nhc2UiciI6cmV0dXJuIG5XLmh1ZTJyZ2IobSx2LGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gblcuaHVlMnJnYihtLHYsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIG5XLmh1ZTJyZ2IobSx2LGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6YSxiOmZ9LHApPT57aS89MjU1LGEvPTI1NSxmLz0yNTU7Y29uc3Qgdj1NYXRoLm1heChpLGEsZiksbT1NYXRoLm1pbihpLGEsZiksYj0odittKS8yO2lmKHA9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHY9PT1tKXJldHVybiAwO2NvbnN0IEU9di1tLF89Yj4uNT9FLygyLXYtbSk6RS8odittKTtpZihwPT09InMiKXJldHVybiBfKjEwMDtzd2l0Y2godil7Y2FzZSBpOnJldHVybigoYS1mKS9FKyhhPGY/NjowKSkqNjA7Y2FzZSBhOnJldHVybigoZi1pKS9FKzIpKjYwO2Nhc2UgZjpyZXR1cm4oKGktYSkvRSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LGZhPXtjaGFubmVsOm5XLGxhbmc6e2NsYW1wOihpLGEsZik9PmE+Zj9NYXRoLm1pbihhLE1hdGgubWF4KGYsaSkpOk1hdGgubWluKGYsTWF0aC5tYXgoYSxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IGE9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIGEubGVuZ3RoPjE/YTpgMCR7YX1gfX19LEo2PXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspSjZbaV09ZmEudW5pdC5kZWMyaGV4KGkpO2NvbnN0IHcwPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3MgUFRle2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPXcwLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChhKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1hfXJlc2V0KCl7dGhpcy50eXBlPXcwLkFMTH1pcyhhKXtyZXR1cm4gdGhpcy50eXBlPT09YX19Y29uc3QgRlRlPVBUZTtjbGFzcyBCVGV7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZT1uZXcgRlRlfXNldChhLGYpe3JldHVybiB0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZS50eXBlPXcwLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBhPXRoaXMuZGF0YSx7aDpmLHM6cCxsOnZ9PWE7Zj09PXZvaWQgMCYmKGEuaD1mYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKSxwPT09dm9pZCAwJiYoYS5zPWZhLmNoYW5uZWwucmdiMmhzbChhLCJzIikpLHY9PT12b2lkIDAmJihhLmw9ZmEuY2hhbm5lbC5yZ2IyaHNsKGEsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IGE9dGhpcy5kYXRhLHtyOmYsZzpwLGI6dn09YTtmPT09dm9pZCAwJiYoYS5yPWZhLmNoYW5uZWwuaHNsMnJnYihhLCJyIikpLHA9PT12b2lkIDAmJihhLmc9ZmEuY2hhbm5lbC5oc2wycmdiKGEsImciKSksdj09PXZvaWQgMCYmKGEuYj1mYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgcigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5yO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxmYS5jaGFubmVsLmhzbDJyZ2IoYSwiciIpKX1nZXQgZygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5nO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxmYS5jaGFubmVsLmhzbDJyZ2IoYSwiZyIpKX1nZXQgYigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5iO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxmYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgaCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5oO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxmYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKX1nZXQgcygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5zO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxmYS5jaGFubmVsLnJnYjJoc2woYSwicyIpKX1nZXQgbCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5sO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxmYS5jaGFubmVsLnJnYjJoc2woYSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihhKXt0aGlzLnR5cGUuc2V0KHcwLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWF9c2V0IGcoYSl7dGhpcy50eXBlLnNldCh3MC5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1hfXNldCBiKGEpe3RoaXMudHlwZS5zZXQodzAuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9YX1zZXQgaChhKXt0aGlzLnR5cGUuc2V0KHcwLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWF9c2V0IHMoYSl7dGhpcy50eXBlLnNldCh3MC5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1hfXNldCBsKGEpe3RoaXMudHlwZS5zZXQodzAuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9YX1zZXQgYShhKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9YX19Y29uc3QgUlRlPUJUZSxyVz1uZXcgUlRlKHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLFFJdD17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IGE9aS5tYXRjaChRSXQucmUpO2lmKCFhKXJldHVybjtjb25zdCBmPWFbMV0scD1wYXJzZUludChmLDE2KSx2PWYubGVuZ3RoLG09diU0PT09MCxiPXY+NCxFPWI/MToxNyxfPWI/ODo0LEw9bT8wOi0xLE49Yj8yNTU6MTU7cmV0dXJuIHJXLnNldCh7cjoocD4+XyooTCszKSZOKSpFLGc6KHA+Pl8qKEwrMikmTikqRSxiOihwPj5fKihMKzEpJk4pKkUsYTptPyhwJk4pKkUvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6dn09aTtyZXR1cm4gdjwxP2AjJHtKNltNYXRoLnJvdW5kKGEpXX0ke0o2W01hdGgucm91bmQoZildfSR7SjZbTWF0aC5yb3VuZChwKV19JHtKNltNYXRoLnJvdW5kKHYqMjU1KV19YDpgIyR7SjZbTWF0aC5yb3VuZChhKV19JHtKNltNYXRoLnJvdW5kKGYpXX0ke0o2W01hdGgucm91bmQocCldfWB9fSxxTj1RSXQsaVc9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IGE9aS5tYXRjaChpVy5odWVSZSk7aWYoYSl7Y29uc3RbLGYscF09YTtzd2l0Y2gocCl7Y2FzZSJncmFkIjpyZXR1cm4gZmEuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqLjkpO2Nhc2UicmFkIjpyZXR1cm4gZmEuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIGZhLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KGYpKjM2MCl9fXJldHVybiBmYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBhPWkuY2hhckNvZGVBdCgwKTtpZihhIT09MTA0JiZhIT09NzIpcmV0dXJuO2NvbnN0IGY9aS5tYXRjaChpVy5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHYsbSxiLEVdPWY7cmV0dXJuIHJXLnNldCh7aDppVy5faHVlMmRlZyhwKSxzOmZhLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHYpKSxsOmZhLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KG0pKSxhOmI/ZmEuY2hhbm5lbC5jbGFtcC5hKEU/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDphLHM6ZixsOnAsYTp2fT1pO3JldHVybiB2PDE/YGhzbGEoJHtmYS5sYW5nLnJvdW5kKGEpfSwgJHtmYS5sYW5nLnJvdW5kKGYpfSUsICR7ZmEubGFuZy5yb3VuZChwKX0lLCAke3Z9KWA6YGhzbCgke2ZhLmxhbmcucm91bmQoYSl9LCAke2ZhLmxhbmcucm91bmQoZil9JSwgJHtmYS5sYW5nLnJvdW5kKHApfSUpYH19LHNXPWlXLGFXPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IGE9YVcuY29sb3JzW2ldO2lmKGEpcmV0dXJuIHFOLnBhcnNlKGEpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IGE9cU4uc3RyaW5naWZ5KGkpO2Zvcihjb25zdCBmIGluIGFXLmNvbG9ycylpZihhVy5jb2xvcnNbZl09PT1hKXJldHVybiBmfX0sWkl0PWFXLEpJdD17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IGE9aS5jaGFyQ29kZUF0KDApO2lmKGEhPT0xMTQmJmEhPT04MilyZXR1cm47Y29uc3QgZj1pLm1hdGNoKEpJdC5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHYsbSxiLEUsXyxMLE5dPWY7cmV0dXJuIHJXLnNldCh7cjpmYS5jaGFubmVsLmNsYW1wLnIodj9wYXJzZUZsb2F0KHApKjIuNTU6cGFyc2VGbG9hdChwKSksZzpmYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KG0pKjIuNTU6cGFyc2VGbG9hdChtKSksYjpmYS5jaGFubmVsLmNsYW1wLmIoXz9wYXJzZUZsb2F0KEUpKjIuNTU6cGFyc2VGbG9hdChFKSksYTpMP2ZhLmNoYW5uZWwuY2xhbXAuYShOP3BhcnNlRmxvYXQoTCkvMTAwOnBhcnNlRmxvYXQoTCkpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6dn09aTtyZXR1cm4gdjwxP2ByZ2JhKCR7ZmEubGFuZy5yb3VuZChhKX0sICR7ZmEubGFuZy5yb3VuZChmKX0sICR7ZmEubGFuZy5yb3VuZChwKX0sICR7ZmEubGFuZy5yb3VuZCh2KX0pYDpgcmdiKCR7ZmEubGFuZy5yb3VuZChhKX0sICR7ZmEubGFuZy5yb3VuZChmKX0sICR7ZmEubGFuZy5yb3VuZChwKX0pYH19LG9XPUpJdCxadz17Zm9ybWF0OntrZXl3b3JkOlpJdCxoZXg6cU4scmdiOm9XLHJnYmE6b1csaHNsOnNXLGhzbGE6c1d9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3QgYT1xTi5wYXJzZShpKXx8b1cucGFyc2UoaSl8fHNXLnBhcnNlKGkpfHxaSXQucGFyc2UoaSk7aWYoYSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKHcwLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP3NXLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9vVy5zdHJpbmdpZnkoaSk6cU4uc3RyaW5naWZ5KGkpfSx0RHQ9KGksYSk9Pntjb25zdCBmPVp3LnBhcnNlKGkpO2Zvcihjb25zdCBwIGluIGEpZltwXT1mYS5jaGFubmVsLmNsYW1wW3BdKGFbcF0pO3JldHVybiBady5zdHJpbmdpZnkoZil9LElBPShpLGEsZj0wLHA9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIHREdChpLHthfSk7Y29uc3Qgdj1yVy5zZXQoe3I6ZmEuY2hhbm5lbC5jbGFtcC5yKGkpLGc6ZmEuY2hhbm5lbC5jbGFtcC5nKGEpLGI6ZmEuY2hhbm5lbC5jbGFtcC5iKGYpLGE6ZmEuY2hhbm5lbC5jbGFtcC5hKHApfSk7cmV0dXJuIFp3LnN0cmluZ2lmeSh2KX0salRlPShpLGEpPT5mYS5sYW5nLnJvdW5kKFp3LnBhcnNlKGkpW2FdKSwkVGU9aT0+e2NvbnN0e3I6YSxnOmYsYjpwfT1ady5wYXJzZShpKSx2PS4yMTI2KmZhLmNoYW5uZWwudG9MaW5lYXIoYSkrLjcxNTIqZmEuY2hhbm5lbC50b0xpbmVhcihmKSsuMDcyMipmYS5jaGFubmVsLnRvTGluZWFyKHApO3JldHVybiBmYS5sYW5nLnJvdW5kKHYpfSx6VGU9aT0+JFRlKGkpPj0uNSxKNz1pPT4helRlKGkpLGVEdD0oaSxhLGYpPT57Y29uc3QgcD1ady5wYXJzZShpKSx2PXBbYV0sbT1mYS5jaGFubmVsLmNsYW1wW2FdKHYrZik7cmV0dXJuIHYhPT1tJiYocFthXT1tKSxady5zdHJpbmdpZnkocCl9LGJzPShpLGEpPT5lRHQoaSwibCIsYSksanM9KGksYSk9PmVEdChpLCJsIiwtYSkseG49KGksYSk9Pntjb25zdCBmPVp3LnBhcnNlKGkpLHA9e307Zm9yKGNvbnN0IHYgaW4gYSlhW3ZdJiYocFt2XT1mW3ZdK2Fbdl0pO3JldHVybiB0RHQoaSxwKX0scVRlPShpLGEsZj01MCk9Pntjb25zdHtyOnAsZzp2LGI6bSxhOmJ9PVp3LnBhcnNlKGkpLHtyOkUsZzpfLGI6TCxhOk59PVp3LnBhcnNlKGEpLEI9Zi8xMDAsaj1CKjItMSxSPWItTixLPSgoaipSPT09LTE/ajooaitSKS8oMStqKlIpKSsxKS8yLGl0PTEtSyxzdD1wKksrRSppdCx1dD12KksrXyppdCxidD1tKksrTCppdCxtdD1iKkIrTiooMS1CKTtyZXR1cm4gSUEoc3QsdXQsYnQsbXQpfSxJaT0oaSxhPTEwMCk9Pntjb25zdCBmPVp3LnBhcnNlKGkpO3JldHVybiBmLnI9MjU1LWYucixmLmc9MjU1LWYuZyxmLmI9MjU1LWYuYixxVGUoZixpLGEpfSxhZz0oaSxhKT0+YT94bihpLHtzOi00MCxsOjEwfSk6eG4oaSx7czotNDAsbDotMTB9KSxjVz0iI2ZmZmZmZiIsdVc9IiNmMmYyZjIiO2xldCBIVGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjZmZmNGRkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSIjMzMzIix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In11cGRhdGVDb2xvcnMoKXtpZih0aGlzLnByaW1hcnlUZXh0Q29sb3I9dGhpcy5wcmltYXJ5VGV4dENvbG9yfHwodGhpcy5kYXJrTW9kZT8iI2VlZSI6IiMzMzMiKSx0aGlzLnNlY29uZGFyeUNvbG9yPXRoaXMuc2Vjb25kYXJ5Q29sb3J8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xMjB9KSx0aGlzLnRlcnRpYXJ5Q29sb3I9dGhpcy50ZXJ0aWFyeUNvbG9yfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fGFnKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcnx8YWcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yfHxhZyh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fGFnKHRoaXMubm90ZUJrZ0NvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMubm90ZUJrZ0NvbG9yfHwiI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMubm90ZVRleHRDb2xvcnx8IiMzMzMiLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yfHxJaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXRoaXMudGVydGlhcnlUZXh0Q29sb3J8fElpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fElpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLmFycm93aGVhZENvbG9yfHxJaSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXRoaXMudGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5ib3JkZXIyPXRoaXMuYm9yZGVyMnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9qcyh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLm5vZGVUZXh0Q29sb3I9dGhpcy5ub2RlVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckJvcmRlcj10aGlzLmFjdG9yQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFjdG9yQmtnPXRoaXMuYWN0b3JCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JMaW5lQ29sb3J8fCJncmV5Iix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fGpzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMTApLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj10aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3J8fElpKHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPXRoaXMuZXhjbHVkZUJrZ0NvbG9yfHwiI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMudGFza0JrZ0NvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5hY3RpdmVUYXNrQmtnQ29sb3J8fGJzKHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPXRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcnx8IiMwMDMxNjMiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucGVyc29uQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLnBlcnNvbkJrZ3x8dGhpcy5tYWluQmtnLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwLGw6MTUwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXMuZGFya01vZGUpZm9yKGxldCBmPTA7Zjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2YrKyl0aGlzWyJjU2NhbGUiK2ZdPWpzKHRoaXNbImNTY2FsZSIrZl0sNzUpO2Vsc2UgZm9yKGxldCBmPTA7Zjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2YrKyl0aGlzWyJjU2NhbGUiK2ZdPWpzKHRoaXNbImNTY2FsZSIrZl0sMjUpO2ZvcihsZXQgZj0wO2Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtmKyspdGhpc1siY1NjYWxlSW52IitmXT10aGlzWyJjU2NhbGVJbnYiK2ZdfHxJaSh0aGlzWyJjU2NhbGUiK2ZdKTtmb3IobGV0IGY9MDtmPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXRoaXMuZGFya01vZGU/dGhpc1siY1NjYWxlUGVlciIrZl09dGhpc1siY1NjYWxlUGVlciIrZl18fGJzKHRoaXNbImNTY2FsZSIrZl0sMTApOnRoaXNbImNTY2FsZVBlZXIiK2ZdPXRoaXNbImNTY2FsZVBlZXIiK2ZdfHxqcyh0aGlzWyJjU2NhbGUiK2ZdLDEwKTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcjtmb3IobGV0IGY9MDtmPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXRoaXNbImNTY2FsZUxhYmVsIitmXT10aGlzWyJjU2NhbGVMYWJlbCIrZl18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2NvbnN0IGE9dGhpcy5kYXJrTW9kZT8tNDotMTtmb3IobGV0IGY9MDtmPDU7ZisrKXRoaXNbInN1cmZhY2UiK2ZdPXRoaXNbInN1cmZhY2UiK2ZdfHx4bih0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6YSooNStmKjMpfSksdGhpc1sic3VyZmFjZVBlZXIiK2ZdPXRoaXNbInN1cmZhY2VQZWVyIitmXXx8eG4odGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOmEqKDgrZiozKX0pO3RoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9dGhpcy5maWxsVHlwZTN8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9dGhpcy5maWxsVHlwZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHx4bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxKNyh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6anModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9qcyh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1icyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1icyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1icyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1icyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1icyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1icyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1icyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1icyh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPWpzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWpzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWpzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWpzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWpzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWpzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWpzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWpzKHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fElpKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8SWkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxJaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fElpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8SWkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxJaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fElpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8SWkodGhpcy5naXQ3KSx0aGlzLmJyYW5jaExhYmVsQ29sb3I9dGhpcy5icmFuY2hMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGNXLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fHVXfWNhbGN1bGF0ZShhKXtpZih0eXBlb2YgYSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWNvbnN0IGY9T2JqZWN0LmtleXMoYSk7Zi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLGYuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSl9fTtjb25zdCBHVGU9aT0+e2NvbnN0IGE9bmV3IEhUZTtyZXR1cm4gYS5jYWxjdWxhdGUoaSksYX07bGV0IFZUZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9YnModGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj14bih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9SWkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWFnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWFnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPUlpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9SWkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1JaSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPUlpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjMWYyMDIwIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5tYWluQ29udHJhc3RDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRhcmtUZXh0Q29sb3I9YnMoSWkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPUlBKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjRjlGRkZFIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9ImJsYWNrIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1qcygiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPWpzKHRoaXMuc2VjdGlvbkJrZ0NvbG9yLDEwKSx0aGlzLnRhc2tCb3JkZXJDb2xvcj1JQSgyNTUsMjU1LDI1NSw3MCksdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9SUEoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjYTQ0MTQxIix0aGlzLmVycm9yVGV4dENvbG9yPSIjZGRkIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1icyh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPWJzKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPWJzKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj14bih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND14bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiMwYjAwMDAiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNGQxMDM3Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiIzNmNTI1OCIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM0ZjJmMWIiLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjNmUwYTBhIix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiIzNiMDA0OCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiM5OTVhMDEiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjMTU0NzA2Iix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiIzE2MTcyMiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzAwMjk2ZiIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzAxNjI5YyIsdGhpcy5jU2NhbGUxMj10aGlzLmNTY2FsZTEyfHwiIzAxMDAyOSIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHxJaSh0aGlzWyJjU2NhbGUiK2FdKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZVBlZXIiK2FdPXRoaXNbImNTY2FsZVBlZXIiK2FdfHxicyh0aGlzWyJjU2NhbGUiK2FdLDEwKTtmb3IobGV0IGE9MDthPDU7YSsrKXRoaXNbInN1cmZhY2UiK2FdPXRoaXNbInN1cmZhY2UiK2FdfHx4bih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC0xMCthKjQpfSksdGhpc1sic3VyZmFjZVBlZXIiK2FdPXRoaXNbInN1cmZhY2VQZWVyIithXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtNythKjQpfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJjU2NhbGVMYWJlbCIrYV09dGhpc1siY1NjYWxlTGFiZWwiK2FdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbInBpZSIrYV09dGhpc1siY1NjYWxlIithXTt0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fEo3KHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTpqcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9qcyh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9YnModGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQxPWJzKHRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQyPWJzKHRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLDIwKSx0aGlzLmdpdDM9YnModGhpcy5waWU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSwyMCksdGhpcy5naXQ0PWJzKHRoaXMucGllNXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksMjApLHRoaXMuZ2l0NT1icyh0aGlzLnBpZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLDEwKSx0aGlzLmdpdDY9YnModGhpcy5waWU3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLDEwKSx0aGlzLmdpdDc9YnModGhpcy5waWU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSwyMCksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8SWkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxJaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fElpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8SWkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxJaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fElpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8SWkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxJaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxJaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxicyh0aGlzLmJhY2tncm91bmQsMTIpLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGJzKHRoaXMuYmFja2dyb3VuZCwyKX1jYWxjdWxhdGUoYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCBmPU9iamVjdC5rZXlzKGEpO2YuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSksdGhpcy51cGRhdGVDb2xvcnMoKSxmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pfX07Y29uc3QgVVRlPWk9Pntjb25zdCBhPW5ldyBWVGU7cmV0dXJuIGEuY2FsY3VsYXRlKGkpLGF9O2xldCBXVGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj14bih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9YWcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPUlpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1JaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPUlpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9SWkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1JaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9SUEoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzWyJjU2NhbGVQZWVyMSJdPXRoaXNbImNTY2FsZVBlZXIxIl18fGpzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXNbImNTY2FsZVBlZXIyIl09dGhpc1siY1NjYWxlUGVlcjIiXXx8anModGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZSIrYV09anModGhpc1siY1NjYWxlIithXSwxMCksdGhpc1siY1NjYWxlUGVlciIrYV09dGhpc1siY1NjYWxlUGVlciIrYV18fGpzKHRoaXNbImNTY2FsZSIrYV0sMjUpO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHx4bih0aGlzWyJjU2NhbGUiK2FdLHtoOjE4MH0pO2ZvcihsZXQgYT0wO2E8NTthKyspdGhpc1sic3VyZmFjZSIrYV09dGhpc1sic3VyZmFjZSIrYV18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNSthKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2FdPXRoaXNbInN1cmZhY2VQZWVyIithXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K2EqNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fElpKHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlTGFiZWwiK2FdPXRoaXNbImNTY2FsZUxhYmVsIithXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1icyh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi00MH0pLHRoaXMucGllND10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0yMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTQwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTQwfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwLGw6LTQwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMzB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fEo3KHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTpqcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9anModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9anModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9anModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9anModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9anModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9anModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9anModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9anModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8anMoSWkodGhpcy5naXQwKSwyNSksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8SWkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxJaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fElpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8SWkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxJaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fElpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8SWkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fElpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8Y1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dVd9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IG5EdD1pPT57Y29uc3QgYT1uZXcgV1RlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgS1RlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9YnMoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWFnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWFnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPUlpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPUlpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9SWkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiMzMzMiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9IiMzMzMiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSIjMzMzIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iIzMyNjkzMiIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iIzZlYWE0OSIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiM2ZWFhNDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXVwZGF0ZUNvbG9ycygpe3RoaXMuYWN0b3JCb3JkZXI9anModGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzWyJjU2NhbGVQZWVyMSJdPXRoaXNbImNTY2FsZVBlZXIxIl18fGpzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXNbImNTY2FsZVBlZXIyIl09dGhpc1siY1NjYWxlUGVlcjIiXXx8anModGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZSIrYV09anModGhpc1siY1NjYWxlIithXSwxMCksdGhpc1siY1NjYWxlUGVlciIrYV09dGhpc1siY1NjYWxlUGVlciIrYV18fGpzKHRoaXNbImNTY2FsZSIrYV0sMjUpO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHx4bih0aGlzWyJjU2NhbGUiK2FdLHtoOjE4MH0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlTGFiZWwiK2FdPXRoaXNbImNTY2FsZUxhYmVsIithXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBhPTA7YTw1O2ErKyl0aGlzWyJzdXJmYWNlIithXT10aGlzWyJzdXJmYWNlIithXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg1K2EqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrYV09dGhpc1sic3VyZmFjZVBlZXIiK2FdfHx4bih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDgrYSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj14bih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND14bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU1PXRoaXMucGllNXx8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHx4bih0aGlzLnRlcnRpYXJ5Q29sb3Ise2g6NDAsbDotNDB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTUwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNTB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi01MH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8eG4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8eG4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8eG4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8SjcodGhpcy5xdWFkcmFudDFGaWxsKT9icyh0aGlzLnF1YWRyYW50MUZpbGwpOmpzKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9anModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9anModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9anModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9anModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9anModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9anModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9anModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9anModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8SWkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxJaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fElpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8SWkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxJaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fElpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8SWkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxJaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxJaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxjVyx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHx1V31jYWxjdWxhdGUoYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCBmPU9iamVjdC5rZXlzKGEpO2YuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSksdGhpcy51cGRhdGVDb2xvcnMoKSxmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pfX07Y29uc3QgWVRlPWk9Pntjb25zdCBhPW5ldyBLVGU7cmV0dXJuIGEuY2FsY3VsYXRlKGkpLGF9O2NsYXNzIFhUZXtjb25zdHJ1Y3Rvcigpe3RoaXMucHJpbWFyeUNvbG9yPSIjZWVlIix0aGlzLmNvbnRyYXN0PSIjNzA3MDcwIix0aGlzLnNlY29uZGFyeUNvbG9yPWJzKHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYmFja2dyb3VuZD0iI2ZmZmZmZiIsdGhpcy50ZXJ0aWFyeUNvbG9yPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWFnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWFnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPUlpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9SWkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1JaSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPUlpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1icyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPWJzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8IiM1NTUiLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjRjRGNEY0Iix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzU1NSIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiNCQkIiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNzc3Iix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzk5OSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiNEREQiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjRkZGIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiI0RERCIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiNCQkIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiM5OTkiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiM3NzciO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHxJaSh0aGlzWyJjU2NhbGUiK2FdKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXMuZGFya01vZGU/dGhpc1siY1NjYWxlUGVlciIrYV09dGhpc1siY1NjYWxlUGVlciIrYV18fGJzKHRoaXNbImNTY2FsZSIrYV0sMTApOnRoaXNbImNTY2FsZVBlZXIiK2FdPXRoaXNbImNTY2FsZVBlZXIiK2FdfHxqcyh0aGlzWyJjU2NhbGUiK2FdLDEwKTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8dGhpcy5jU2NhbGUxLHRoaXMuY1NjYWxlTGFiZWwyPXRoaXMuY1NjYWxlTGFiZWwyfHx0aGlzLmNTY2FsZTE7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJjU2NhbGVMYWJlbCIrYV09dGhpc1siY1NjYWxlTGFiZWwiK2FdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IGE9MDthPDU7YSsrKXRoaXNbInN1cmZhY2UiK2FdPXRoaXNbInN1cmZhY2UiK2FdfHx4bih0aGlzLm1haW5Ca2cse2w6LSg1K2EqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrYV09dGhpc1sic3VyZmFjZVBlZXIiK2FdfHx4bih0aGlzLm1haW5Ca2cse2w6LSg4K2EqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHQsdGhpcy5zZWN0aW9uQmtnQ29sb3I9YnModGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPWJzKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPWpzKHRoaXMuY29udHJhc3QsMTApLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMuY29udHJhc3QsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50ZXh0LHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5ncmlkQ29sb3I9YnModGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPWpzKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbInBpZSIrYV09dGhpc1siY1NjYWxlIithXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fEo3KHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTpqcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9anModGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxJaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fElpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8SWkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxJaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fElpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8SWkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxJaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fElpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxjVyx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHx1V31jYWxjdWxhdGUoYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCBmPU9iamVjdC5rZXlzKGEpO2YuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSksdGhpcy51cGRhdGVDb2xvcnMoKSxmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pfX1jb25zdCB3NT17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6R1RlfSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpVVGV9LGRlZmF1bHQ6e2dldFRoZW1lVmFyaWFibGVzOm5EdH0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpZVGV9LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmk9Pntjb25zdCBhPW5ldyBYVGU7cmV0dXJuIGEuY2FsY3VsYXRlKGkpLGF9fX0sdGs9e2Zsb3djaGFydDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6OCxodG1sTGFiZWxzOiEwLG5vZGVTcGFjaW5nOjUwLHJhbmtTcGFjaW5nOjUwLGN1cnZlOiJiYXNpcyIscGFkZGluZzoxNSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLHdyYXBwaW5nV2lkdGg6MjAwfSxzZXF1ZW5jZTp7dXNlTWF4V2lkdGg6ITAsaGlkZVVudXNlZFBhcnRpY2lwYW50czohMSxhY3RpdmF0aW9uV2lkdGg6MTAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYWN0b3JNYXJnaW46NTAsd2lkdGg6MTUwLGhlaWdodDo2NSxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsbWlycm9yQWN0b3JzOiEwLGZvcmNlTWVudXM6ITEsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsc2hvd1NlcXVlbmNlTnVtYmVyczohMSxhY3RvckZvbnRTaXplOjE0LGFjdG9yRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGFjdG9yRm9udFdlaWdodDo0MDAsbm90ZUZvbnRTaXplOjE0LG5vdGVGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG5vdGVGb250V2VpZ2h0OjQwMCxub3RlQWxpZ246ImNlbnRlciIsbWVzc2FnZUZvbnRTaXplOjE2LG1lc3NhZ2VGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OjQwMCx3cmFwOiExLHdyYXBQYWRkaW5nOjEwLGxhYmVsQm94V2lkdGg6NTAsbGFiZWxCb3hIZWlnaHQ6MjB9LGdhbnR0Ont1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxiYXJIZWlnaHQ6MjAsYmFyR2FwOjQsdG9wUGFkZGluZzo1MCxyaWdodFBhZGRpbmc6NzUsbGVmdFBhZGRpbmc6NzUsZ3JpZExpbmVTdGFydFBhZGRpbmc6MzUsZm9udFNpemU6MTEsc2VjdGlvbkZvbnRTaXplOjExLG51bWJlclNlY3Rpb25TdHlsZXM6NCxheGlzRm9ybWF0OiIlWS0lbS0lZCIsdG9wQXhpczohMSxkaXNwbGF5TW9kZToiIix3ZWVrZGF5OiJzdW5kYXkifSxqb3VybmV5Ont1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdfSxjbGFzczp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciIsaHRtbExhYmVsczohMX0sc3RhdGU6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpdmlkZXJNYXJnaW46MTAsc2l6ZVVuaXQ6NSxwYWRkaW5nOjgsdGV4dEhlaWdodDoxMCx0aXRsZVNoaWZ0Oi0xNSxub3RlTWFyZ2luOjEwLGZvcmtXaWR0aDo3MCxmb3JrSGVpZ2h0OjcsbWluaVBhZGRpbmc6Mixmb250U2l6ZUZhY3Rvcjo1LjAyLGZvbnRTaXplOjI0LGxhYmVsSGVpZ2h0OjE2LGVkZ2VMZW5ndGhGYWN0b3I6IjIwIixjb21wb3NpdFRpdGxlU2l6ZTozNSxyYWRpdXM6NSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxlcjp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LHN0cm9rZToiZ3JheSIsZmlsbDoiaG9uZXlkZXciLGZvbnRTaXplOjEyfSxwaWU6e3VzZU1heFdpZHRoOiEwLHRleHRQb3NpdGlvbjouNzV9LHF1YWRyYW50Q2hhcnQ6e3VzZU1heFdpZHRoOiEwLGNoYXJ0V2lkdGg6NTAwLGNoYXJ0SGVpZ2h0OjUwMCx0aXRsZUZvbnRTaXplOjIwLHRpdGxlUGFkZGluZzoxMCxxdWFkcmFudFBhZGRpbmc6NSx4QXhpc0xhYmVsUGFkZGluZzo1LHlBeGlzTGFiZWxQYWRkaW5nOjUseEF4aXNMYWJlbEZvbnRTaXplOjE2LHlBeGlzTGFiZWxGb250U2l6ZToxNixxdWFkcmFudExhYmVsRm9udFNpemU6MTYscXVhZHJhbnRUZXh0VG9wUGFkZGluZzo1LHBvaW50VGV4dFBhZGRpbmc6NSxwb2ludExhYmVsRm9udFNpemU6MTIscG9pbnRSYWRpdXM6NSx4QXhpc1Bvc2l0aW9uOiJ0b3AiLHlBeGlzUG9zaXRpb246ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDoxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDoyfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMX0sYzQ6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGM0U2hhcGVNYXJnaW46NTAsYzRTaGFwZVBhZGRpbmc6MjAsd2lkdGg6MjE2LGhlaWdodDo2MCxib3hNYXJnaW46MTAsYzRTaGFwZUluUm93OjQsbmV4dExpbmVQYWRkaW5nWDowLGM0Qm91bmRhcnlJblJvdzoyLHBlcnNvbkZvbnRTaXplOjE0LHBlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxwZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3BlcnNvbkZvbnRTaXplOjE0LGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbUZvbnRTaXplOjE0LHN5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9kYkZvbnRTaXplOjE0LHN5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LHN5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGJvdW5kYXJ5Rm9udFNpemU6MTQsYm91bmRhcnlGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYm91bmRhcnlGb250V2VpZ2h0OiJub3JtYWwiLG1lc3NhZ2VGb250U2l6ZToxMixtZXNzYWdlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lckZvbnRTaXplOjE0LGNvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGNvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudEZvbnRTaXplOjE0LGNvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9kYkZvbnRTaXplOjE0LGNvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLHdyYXA6ITAsd3JhcFBhZGRpbmc6MTAscGVyc29uX2JnX2NvbG9yOiIjMDg0MjdCIixwZXJzb25fYm9yZGVyX2NvbG9yOiIjMDczQjZGIixleHRlcm5hbF9wZXJzb25fYmdfY29sb3I6IiM2ODY4NjgiLGV4dGVybmFsX3BlcnNvbl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLHN5c3RlbV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX2RiX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fcXVldWVfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX3N5c3RlbV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGNvbnRhaW5lcl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfcXVldWVfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGNvbXBvbmVudF9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiNCRkJGQkYifSxzYW5rZXk6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjYwMCxoZWlnaHQ6NDAwLGxpbmtDb2xvcjoiZ3JhZGllbnQiLG5vZGVBbGlnbm1lbnQ6Imp1c3RpZnkiLHNob3dWYWx1ZXM6ITAscHJlZml4OiIiLHN1ZmZpeDoiIn0sdGhlbWU6ImRlZmF1bHQiLG1heFRleHRTaXplOjVlNCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTZ9LHJEdD17Li4udGssZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsdGhlbWVDU1M6dm9pZCAwLHRoZW1lVmFyaWFibGVzOnc1LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoKSxzZXF1ZW5jZTp7Li4udGsuc2VxdWVuY2UsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7Li4udGsuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi50ay5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMucGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnBlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5wZXJzb25Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfcGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0fX0sc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0fX0sc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0fX0sY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0fX0sY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0fX0sY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sYm91bmRhcnlGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ib3VuZGFyeUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ib3VuZGFyeUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ib3VuZGFyeUZvbnRXZWlnaHR9fSxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX19LHBpZTp7Li4udGsucGllLHVzZVdpZHRoOjk4NH0scmVxdWlyZW1lbnQ6ey4uLnRrLnJlcXVpcmVtZW50LHVzZVdpZHRoOnZvaWQgMH0sZ2l0R3JhcGg6ey4uLnRrLmdpdEdyYXBoLHVzZU1heFdpZHRoOiExfSxzYW5rZXk6ey4uLnRrLnNhbmtleSx1c2VNYXhXaWR0aDohMX19LGlEdD0oaSxhPSIiKT0+T2JqZWN0LmtleXMoaSkucmVkdWNlKChmLHApPT5BcnJheS5pc0FycmF5KGlbcF0pP2Y6dHlwZW9mIGlbcF09PSJvYmplY3QiJiZpW3BdIT09bnVsbD9bLi4uZixhK3AsLi4uaUR0KGlbcF0sIiIpXTpbLi4uZixhK3BdLFtdKSxRVGU9bmV3IFNldChpRHQockR0LCIiKSksTGY9ckR0LGxXPWk9PntpZihVdC5kZWJ1Zygic2FuaXRpemVEaXJlY3RpdmUgY2FsbGVkIHdpdGgiLGkpLCEodHlwZW9mIGkhPSJvYmplY3QifHxpPT1udWxsKSl7aWYoQXJyYXkuaXNBcnJheShpKSl7aS5mb3JFYWNoKGE9PmxXKGEpKTtyZXR1cm59Zm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXMoaSkpe2lmKFV0LmRlYnVnKCJDaGVja2luZyBrZXkiLGEpLGEuc3RhcnRzV2l0aCgiX18iKXx8YS5pbmNsdWRlcygicHJvdG8iKXx8YS5pbmNsdWRlcygiY29uc3RyIil8fCFRVGUuaGFzKGEpfHxpW2FdPT1udWxsKXtVdC5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLGEpLGRlbGV0ZSBpW2FdO2NvbnRpbnVlfWlmKHR5cGVvZiBpW2FdPT0ib2JqZWN0Iil7VXQuZGVidWcoInNhbml0aXppbmcgb2JqZWN0IixhKSxsVyhpW2FdKTtjb250aW51ZX1jb25zdCBmPVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2Zvcihjb25zdCBwIG9mIGYpYS5pbmNsdWRlcyhwKSYmKFV0LmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLGEpLGlbYV09WlRlKGlbYV0pKX1pZihpLnRoZW1lVmFyaWFibGVzKWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKGkudGhlbWVWYXJpYWJsZXMpKXtjb25zdCBmPWkudGhlbWVWYXJpYWJsZXNbYV07ZiE9bnVsbCYmZi5tYXRjaCYmIWYubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKGkudGhlbWVWYXJpYWJsZXNbYV09IiIpfVV0LmRlYnVnKCJBZnRlciBzYW5pdGl6YXRpb24iLGkpfX0sWlRlPWk9PntsZXQgYT0wLGY9MDtmb3IoY29uc3QgcCBvZiBpKXtpZihhPGYpcmV0dXJuInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iO3A9PT0ieyI/YSsrOnA9PT0ifSImJmYrK31yZXR1cm4gYSE9PWY/InsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iOml9LHNEdD0vXi17M31ccypbXG5ccl0oLio/KVtcblxyXS17M31ccypbXG5ccl0rL3MsSE49LyV7Mn17XHMqKD86KFx3Kylccyo6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLEpUZT0vXHMqJSUuKlxuL2dtO2NsYXNzIGFEdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fWNvbnN0IERBPXt9LGhXPWZ1bmN0aW9uKGksYSl7aT1pLnJlcGxhY2Uoc0R0LCIiKS5yZXBsYWNlKEhOLCIiKS5yZXBsYWNlKEpUZSxgCmApO2Zvcihjb25zdFtmLHtkZXRlY3RvcjpwfV1vZiBPYmplY3QuZW50cmllcyhEQSkpaWYocChpLGEpKXJldHVybiBmO3Rocm93IG5ldyBhRHQoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke2l9YCl9LG9EdD0oLi4uaSk9Pntmb3IoY29uc3R7aWQ6YSxkZXRlY3RvcjpmLGxvYWRlcjpwfW9mIGkpY0R0KGEsZixwKX0sY0R0PShpLGEsZik9PntEQVtpXT9VdC5lcnJvcihgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhbHJlYWR5IGV4aXN0c2ApOkRBW2ldPXtkZXRlY3RvcjphLGxvYWRlcjpmfSxVdC5kZWJ1ZyhgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhZGRlZCR7Zj8iIHdpdGggbG9hZGVyIjoiIn1gKX0sdDllPWk9PkRBW2ldLmxvYWRlcixVMXQ9KGksYSx7ZGVwdGg6Zj0yLGNsb2JiZXI6cD0hMX09e30pPT57Y29uc3Qgdj17ZGVwdGg6ZixjbG9iYmVyOnB9O3JldHVybiBBcnJheS5pc0FycmF5KGEpJiYhQXJyYXkuaXNBcnJheShpKT8oYS5mb3JFYWNoKG09PlUxdChpLG0sdikpLGkpOkFycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoaSk/KGEuZm9yRWFjaChtPT57aS5pbmNsdWRlcyhtKXx8aS5wdXNoKG0pfSksaSk6aT09PXZvaWQgMHx8Zjw9MD9pIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCImJnR5cGVvZiBhPT0ib2JqZWN0Ij9PYmplY3QuYXNzaWduKGksYSk6YTooYSE9PXZvaWQgMCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2YgYT09Im9iamVjdCImJk9iamVjdC5rZXlzKGEpLmZvckVhY2gobT0+e3R5cGVvZiBhW21dPT0ib2JqZWN0IiYmKGlbbV09PT12b2lkIDB8fHR5cGVvZiBpW21dPT0ib2JqZWN0Iik/KGlbbV09PT12b2lkIDAmJihpW21dPUFycmF5LmlzQXJyYXkoYVttXSk/W106e30pLGlbbV09VTF0KGlbbV0sYVttXSx7ZGVwdGg6Zi0xLGNsb2JiZXI6cH0pKToocHx8dHlwZW9mIGlbbV0hPSJvYmplY3QiJiZ0eXBlb2YgYVttXSE9Im9iamVjdCIpJiYoaVttXT1hW21dKX0pLGkpfSxZMT1VMXQ7dmFyIGU5ZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7Y29uc3QgdUR0PWU5ZTt2YXIgbjllPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscjllPXVEdHx8bjllfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO2NvbnN0IEp3PXI5ZTt2YXIgaTllPUp3LlN5bWJvbDtjb25zdCBZMj1pOWU7dmFyIGxEdD1PYmplY3QucHJvdG90eXBlLHM5ZT1sRHQuaGFzT3duUHJvcGVydHksYTllPWxEdC50b1N0cmluZyxHTj1ZMj9ZMi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gbzllKGkpe3ZhciBhPXM5ZS5jYWxsKGksR04pLGY9aVtHTl07dHJ5e2lbR05dPXZvaWQgMDt2YXIgcD0hMH1jYXRjaHt9dmFyIHY9YTllLmNhbGwoaSk7cmV0dXJuIHAmJihhP2lbR05dPWY6ZGVsZXRlIGlbR05dKSx2fXZhciBjOWU9T2JqZWN0LnByb3RvdHlwZSx1OWU9YzllLnRvU3RyaW5nO2Z1bmN0aW9uIGw5ZShpKXtyZXR1cm4gdTllLmNhbGwoaSl9dmFyIGg5ZT0iW29iamVjdCBOdWxsXSIsZjllPSJbb2JqZWN0IFVuZGVmaW5lZF0iLGhEdD1ZMj9ZMi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gdFQoaSl7cmV0dXJuIGk9PW51bGw/aT09PXZvaWQgMD9mOWU6aDllOmhEdCYmaER0IGluIE9iamVjdChpKT9vOWUoaSk6bDllKGkpfWZ1bmN0aW9uIEliKGkpe3ZhciBhPXR5cGVvZiBpO3JldHVybiBpIT1udWxsJiYoYT09Im9iamVjdCJ8fGE9PSJmdW5jdGlvbiIpfXZhciBkOWU9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGc5ZT0iW29iamVjdCBGdW5jdGlvbl0iLHA5ZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLGI5ZT0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIE9BKGkpe2lmKCFJYihpKSlyZXR1cm4hMTt2YXIgYT10VChpKTtyZXR1cm4gYT09ZzllfHxhPT1wOWV8fGE9PWQ5ZXx8YT09YjllfXZhciB2OWU9SndbIl9fY29yZS1qc19zaGFyZWRfXyJdO2NvbnN0IFcxdD12OWU7dmFyIGZEdD1mdW5jdGlvbigpe3ZhciBpPS9bXi5dKyQvLmV4ZWMoVzF0JiZXMXQua2V5cyYmVzF0LmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gaT8iU3ltYm9sKHNyYylfMS4iK2k6IiJ9KCk7ZnVuY3Rpb24gdzllKGkpe3JldHVybiEhZkR0JiZmRHQgaW4gaX12YXIgbTllPUZ1bmN0aW9uLnByb3RvdHlwZSx5OWU9bTllLnRvU3RyaW5nO2Z1bmN0aW9uIGVUKGkpe2lmKGkhPW51bGwpe3RyeXtyZXR1cm4geTllLmNhbGwoaSl9Y2F0Y2h7fXRyeXtyZXR1cm4gaSsiIn1jYXRjaHt9fXJldHVybiIifXZhciB4OWU9L1tcXF4kLiorPygpW1xde318XS9nLGs5ZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxFOWU9RnVuY3Rpb24ucHJvdG90eXBlLFQ5ZT1PYmplY3QucHJvdG90eXBlLEM5ZT1FOWUudG9TdHJpbmcsXzllPVQ5ZS5oYXNPd25Qcm9wZXJ0eSxTOWU9UmVnRXhwKCJeIitDOWUuY2FsbChfOWUpLnJlcGxhY2UoeDllLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIEE5ZShpKXtpZighSWIoaSl8fHc5ZShpKSlyZXR1cm4hMTt2YXIgYT1PQShpKT9TOWU6azllO3JldHVybiBhLnRlc3QoZVQoaSkpfWZ1bmN0aW9uIEw5ZShpLGEpe3JldHVybiBpPT1udWxsP3ZvaWQgMDppW2FdfWZ1bmN0aW9uIG5UKGksYSl7dmFyIGY9TDllKGksYSk7cmV0dXJuIEE5ZShmKT9mOnZvaWQgMH12YXIgTTllPW5UKE9iamVjdCwiY3JlYXRlIik7Y29uc3QgVk49TTllO2Z1bmN0aW9uIEk5ZSgpe3RoaXMuX19kYXRhX189Vk4/Vk4obnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gRDllKGkpe3ZhciBhPXRoaXMuaGFzKGkpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tpXTtyZXR1cm4gdGhpcy5zaXplLT1hPzE6MCxhfXZhciBPOWU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLE45ZT1PYmplY3QucHJvdG90eXBlLFA5ZT1OOWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gRjllKGkpe3ZhciBhPXRoaXMuX19kYXRhX187aWYoVk4pe3ZhciBmPWFbaV07cmV0dXJuIGY9PT1POWU/dm9pZCAwOmZ9cmV0dXJuIFA5ZS5jYWxsKGEsaSk/YVtpXTp2b2lkIDB9dmFyIEI5ZT1PYmplY3QucHJvdG90eXBlLFI5ZT1COWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gajllKGkpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIFZOP2FbaV0hPT12b2lkIDA6UjllLmNhbGwoYSxpKX12YXIgJDllPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiB6OWUoaSxhKXt2YXIgZj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGkpPzA6MSxmW2ldPVZOJiZhPT09dm9pZCAwPyQ5ZTphLHRoaXN9ZnVuY3Rpb24gclQoaSl7dmFyIGE9LTEsZj1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2E8Zjspe3ZhciBwPWlbYV07dGhpcy5zZXQocFswXSxwWzFdKX19clQucHJvdG90eXBlLmNsZWFyPUk5ZSxyVC5wcm90b3R5cGUuZGVsZXRlPUQ5ZSxyVC5wcm90b3R5cGUuZ2V0PUY5ZSxyVC5wcm90b3R5cGUuaGFzPWo5ZSxyVC5wcm90b3R5cGUuc2V0PXo5ZTtmdW5jdGlvbiBxOWUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE5BKGksYSl7cmV0dXJuIGk9PT1hfHxpIT09aSYmYSE9PWF9ZnVuY3Rpb24gZlcoaSxhKXtmb3IodmFyIGY9aS5sZW5ndGg7Zi0tOylpZihOQShpW2ZdWzBdLGEpKXJldHVybiBmO3JldHVybi0xfXZhciBIOWU9QXJyYXkucHJvdG90eXBlLEc5ZT1IOWUuc3BsaWNlO2Z1bmN0aW9uIFY5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fLGY9ZlcoYSxpKTtpZihmPDApcmV0dXJuITE7dmFyIHA9YS5sZW5ndGgtMTtyZXR1cm4gZj09cD9hLnBvcCgpOkc5ZS5jYWxsKGEsZiwxKSwtLXRoaXMuc2l6ZSwhMH1mdW5jdGlvbiBVOWUoaSl7dmFyIGE9dGhpcy5fX2RhdGFfXyxmPWZXKGEsaSk7cmV0dXJuIGY8MD92b2lkIDA6YVtmXVsxXX1mdW5jdGlvbiBXOWUoaSl7cmV0dXJuIGZXKHRoaXMuX19kYXRhX18saSk+LTF9ZnVuY3Rpb24gSzllKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXyxwPWZXKGYsaSk7cmV0dXJuIHA8MD8oKyt0aGlzLnNpemUsZi5wdXNoKFtpLGFdKSk6ZltwXVsxXT1hLHRoaXN9ZnVuY3Rpb24gbTUoaSl7dmFyIGE9LTEsZj1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2E8Zjspe3ZhciBwPWlbYV07dGhpcy5zZXQocFswXSxwWzFdKX19bTUucHJvdG90eXBlLmNsZWFyPXE5ZSxtNS5wcm90b3R5cGUuZGVsZXRlPVY5ZSxtNS5wcm90b3R5cGUuZ2V0PVU5ZSxtNS5wcm90b3R5cGUuaGFzPVc5ZSxtNS5wcm90b3R5cGUuc2V0PUs5ZTt2YXIgWTllPW5UKEp3LCJNYXAiKTtjb25zdCBVTj1ZOWU7ZnVuY3Rpb24gWDllKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgclQsbWFwOm5ldyhVTnx8bTUpLHN0cmluZzpuZXcgclR9fWZ1bmN0aW9uIFE5ZShpKXt2YXIgYT10eXBlb2YgaTtyZXR1cm4gYT09InN0cmluZyJ8fGE9PSJudW1iZXIifHxhPT0ic3ltYm9sInx8YT09ImJvb2xlYW4iP2khPT0iX19wcm90b19fIjppPT09bnVsbH1mdW5jdGlvbiBkVyhpLGEpe3ZhciBmPWkuX19kYXRhX187cmV0dXJuIFE5ZShhKT9mW3R5cGVvZiBhPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOmYubWFwfWZ1bmN0aW9uIFo5ZShpKXt2YXIgYT1kVyh0aGlzLGkpLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplLT1hPzE6MCxhfWZ1bmN0aW9uIEo5ZShpKXtyZXR1cm4gZFcodGhpcyxpKS5nZXQoaSl9ZnVuY3Rpb24gdENlKGkpe3JldHVybiBkVyh0aGlzLGkpLmhhcyhpKX1mdW5jdGlvbiBlQ2UoaSxhKXt2YXIgZj1kVyh0aGlzLGkpLHA9Zi5zaXplO3JldHVybiBmLnNldChpLGEpLHRoaXMuc2l6ZSs9Zi5zaXplPT1wPzA6MSx0aGlzfWZ1bmN0aW9uIHk1KGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fXk1LnByb3RvdHlwZS5jbGVhcj1YOWUseTUucHJvdG90eXBlLmRlbGV0ZT1aOWUseTUucHJvdG90eXBlLmdldD1KOWUseTUucHJvdG90eXBlLmhhcz10Q2UseTUucHJvdG90eXBlLnNldD1lQ2U7dmFyIG5DZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gUEEoaSxhKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uInx8YSE9bnVsbCYmdHlwZW9mIGEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihuQ2UpO3ZhciBmPWZ1bmN0aW9uKCl7dmFyIHA9YXJndW1lbnRzLHY9YT9hLmFwcGx5KHRoaXMscCk6cFswXSxtPWYuY2FjaGU7aWYobS5oYXModikpcmV0dXJuIG0uZ2V0KHYpO3ZhciBiPWkuYXBwbHkodGhpcyxwKTtyZXR1cm4gZi5jYWNoZT1tLnNldCh2LGIpfHxtLGJ9O3JldHVybiBmLmNhY2hlPW5ldyhQQS5DYWNoZXx8eTUpLGZ9UEEuQ2FjaGU9eTU7ZnVuY3Rpb24gckNlKCl7dGhpcy5fX2RhdGFfXz1uZXcgbTUsdGhpcy5zaXplPTB9ZnVuY3Rpb24gaUNlKGkpe3ZhciBhPXRoaXMuX19kYXRhX18sZj1hLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplPWEuc2l6ZSxmfWZ1bmN0aW9uIHNDZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoaSl9ZnVuY3Rpb24gYUNlKGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhpKX12YXIgb0NlPTIwMDtmdW5jdGlvbiBjQ2UoaSxhKXt2YXIgZj10aGlzLl9fZGF0YV9fO2lmKGYgaW5zdGFuY2VvZiBtNSl7dmFyIHA9Zi5fX2RhdGFfXztpZighVU58fHAubGVuZ3RoPG9DZS0xKXJldHVybiBwLnB1c2goW2ksYV0pLHRoaXMuc2l6ZT0rK2Yuc2l6ZSx0aGlzO2Y9dGhpcy5fX2RhdGFfXz1uZXcgeTUocCl9cmV0dXJuIGYuc2V0KGksYSksdGhpcy5zaXplPWYuc2l6ZSx0aGlzfWZ1bmN0aW9uIHRtKGkpe3ZhciBhPXRoaXMuX19kYXRhX189bmV3IG01KGkpO3RoaXMuc2l6ZT1hLnNpemV9dG0ucHJvdG90eXBlLmNsZWFyPXJDZSx0bS5wcm90b3R5cGUuZGVsZXRlPWlDZSx0bS5wcm90b3R5cGUuZ2V0PXNDZSx0bS5wcm90b3R5cGUuaGFzPWFDZSx0bS5wcm90b3R5cGUuc2V0PWNDZTt2YXIgdUNlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPW5UKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gaSh7fSwiIix7fSksaX1jYXRjaHt9fSgpO2NvbnN0IGdXPXVDZTtmdW5jdGlvbiBwVyhpLGEsZil7YT09Il9fcHJvdG9fXyImJmdXP2dXKGksYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6Zix3cml0YWJsZTohMH0pOmlbYV09Zn1mdW5jdGlvbiBLMXQoaSxhLGYpeyhmIT09dm9pZCAwJiYhTkEoaVthXSxmKXx8Zj09PXZvaWQgMCYmIShhIGluIGkpKSYmcFcoaSxhLGYpfWZ1bmN0aW9uIGxDZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmLHApe2Zvcih2YXIgdj0tMSxtPU9iamVjdChhKSxiPXAoYSksRT1iLmxlbmd0aDtFLS07KXt2YXIgXz1iW2k/RTorK3ZdO2lmKGYobVtfXSxfLG0pPT09ITEpYnJlYWt9cmV0dXJuIGF9fXZhciBoQ2U9bENlKCk7Y29uc3QgWTF0PWhDZTt2YXIgZER0PXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZ0R0PWREdCYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGZDZT1nRHQmJmdEdC5leHBvcnRzPT09ZER0LHBEdD1mQ2U/SncuQnVmZmVyOnZvaWQgMCxiRHQ9cER0P3BEdC5hbGxvY1Vuc2FmZTp2b2lkIDA7ZnVuY3Rpb24gdkR0KGksYSl7aWYoYSlyZXR1cm4gaS5zbGljZSgpO3ZhciBmPWkubGVuZ3RoLHA9YkR0P2JEdChmKTpuZXcgaS5jb25zdHJ1Y3RvcihmKTtyZXR1cm4gaS5jb3B5KHApLHB9dmFyIGRDZT1Kdy5VaW50OEFycmF5O2NvbnN0IGJXPWRDZTtmdW5jdGlvbiBYMXQoaSl7dmFyIGE9bmV3IGkuY29uc3RydWN0b3IoaS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IGJXKGEpLnNldChuZXcgYlcoaSkpLGF9ZnVuY3Rpb24gd0R0KGksYSl7dmFyIGY9YT9YMXQoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3RvcihmLGkuYnl0ZU9mZnNldCxpLmxlbmd0aCl9ZnVuY3Rpb24gbUR0KGksYSl7dmFyIGY9LTEscD1pLmxlbmd0aDtmb3IoYXx8KGE9QXJyYXkocCkpOysrZjxwOylhW2ZdPWlbZl07cmV0dXJuIGF9dmFyIHlEdD1PYmplY3QuY3JlYXRlLGdDZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt9cmV0dXJuIGZ1bmN0aW9uKGEpe2lmKCFJYihhKSlyZXR1cm57fTtpZih5RHQpcmV0dXJuIHlEdChhKTtpLnByb3RvdHlwZT1hO3ZhciBmPW5ldyBpO3JldHVybiBpLnByb3RvdHlwZT12b2lkIDAsZn19KCk7Y29uc3QgcENlPWdDZTtmdW5jdGlvbiB4RHQoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGkoYShmKSl9fXZhciBiQ2U9eER0KE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO2NvbnN0IFExdD1iQ2U7dmFyIHZDZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIHZXKGkpe3ZhciBhPWkmJmkuY29uc3RydWN0b3IsZj10eXBlb2YgYT09ImZ1bmN0aW9uIiYmYS5wcm90b3R5cGV8fHZDZTtyZXR1cm4gaT09PWZ9ZnVuY3Rpb24ga0R0KGkpe3JldHVybiB0eXBlb2YgaS5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIXZXKGkpP3BDZShRMXQoaSkpOnt9fWZ1bmN0aW9uIGwzKGkpe3JldHVybiBpIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCJ9dmFyIHdDZT0iW29iamVjdCBBcmd1bWVudHNdIjtmdW5jdGlvbiBFRHQoaSl7cmV0dXJuIGwzKGkpJiZ0VChpKT09d0NlfXZhciBURHQ9T2JqZWN0LnByb3RvdHlwZSxtQ2U9VER0Lmhhc093blByb3BlcnR5LHlDZT1URHQucHJvcGVydHlJc0VudW1lcmFibGUseENlPUVEdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0VEdDpmdW5jdGlvbihpKXtyZXR1cm4gbDMoaSkmJm1DZS5jYWxsKGksImNhbGxlZSIpJiYheUNlLmNhbGwoaSwiY2FsbGVlIil9O2NvbnN0IEZBPXhDZTt2YXIga0NlPUFycmF5LmlzQXJyYXk7Y29uc3QgTWY9a0NlO3ZhciBFQ2U9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBaMXQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ibnVtYmVyIiYmaT4tMSYmaSUxPT0wJiZpPD1FQ2V9ZnVuY3Rpb24gZWsoaSl7cmV0dXJuIGkhPW51bGwmJloxdChpLmxlbmd0aCkmJiFPQShpKX1mdW5jdGlvbiBDRHQoaSl7cmV0dXJuIGwzKGkpJiZlayhpKX1mdW5jdGlvbiBUQ2UoKXtyZXR1cm4hMX12YXIgX0R0PXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsU0R0PV9EdCYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLENDZT1TRHQmJlNEdC5leHBvcnRzPT09X0R0LEFEdD1DQ2U/SncuQnVmZmVyOnZvaWQgMCxfQ2U9QUR0P0FEdC5pc0J1ZmZlcjp2b2lkIDAsU0NlPV9DZXx8VENlO2NvbnN0IEJBPVNDZTt2YXIgQUNlPSJbb2JqZWN0IE9iamVjdF0iLExDZT1GdW5jdGlvbi5wcm90b3R5cGUsTUNlPU9iamVjdC5wcm90b3R5cGUsTER0PUxDZS50b1N0cmluZyxJQ2U9TUNlLmhhc093blByb3BlcnR5LERDZT1MRHQuY2FsbChPYmplY3QpO2Z1bmN0aW9uIE1EdChpKXtpZighbDMoaSl8fHRUKGkpIT1BQ2UpcmV0dXJuITE7dmFyIGE9UTF0KGkpO2lmKGE9PT1udWxsKXJldHVybiEwO3ZhciBmPUlDZS5jYWxsKGEsImNvbnN0cnVjdG9yIikmJmEuY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiBmPT0iZnVuY3Rpb24iJiZmIGluc3RhbmNlb2YgZiYmTER0LmNhbGwoZik9PURDZX12YXIgT0NlPSJbb2JqZWN0IEFyZ3VtZW50c10iLE5DZT0iW29iamVjdCBBcnJheV0iLFBDZT0iW29iamVjdCBCb29sZWFuXSIsRkNlPSJbb2JqZWN0IERhdGVdIixCQ2U9IltvYmplY3QgRXJyb3JdIixSQ2U9IltvYmplY3QgRnVuY3Rpb25dIixqQ2U9IltvYmplY3QgTWFwXSIsJENlPSJbb2JqZWN0IE51bWJlcl0iLHpDZT0iW29iamVjdCBPYmplY3RdIixxQ2U9IltvYmplY3QgUmVnRXhwXSIsSENlPSJbb2JqZWN0IFNldF0iLEdDZT0iW29iamVjdCBTdHJpbmddIixWQ2U9IltvYmplY3QgV2Vha01hcF0iLFVDZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFdDZT0iW29iamVjdCBEYXRhVmlld10iLEtDZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixZQ2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsWENlPSJbb2JqZWN0IEludDhBcnJheV0iLFFDZT0iW29iamVjdCBJbnQxNkFycmF5XSIsWkNlPSJbb2JqZWN0IEludDMyQXJyYXldIixKQ2U9IltvYmplY3QgVWludDhBcnJheV0iLHRfZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGVfZT0iW29iamVjdCBVaW50MTZBcnJheV0iLG5fZT0iW29iamVjdCBVaW50MzJBcnJheV0iLGdsPXt9O2dsW0tDZV09Z2xbWUNlXT1nbFtYQ2VdPWdsW1FDZV09Z2xbWkNlXT1nbFtKQ2VdPWdsW3RfZV09Z2xbZV9lXT1nbFtuX2VdPSEwLGdsW09DZV09Z2xbTkNlXT1nbFtVQ2VdPWdsW1BDZV09Z2xbV0NlXT1nbFtGQ2VdPWdsW0JDZV09Z2xbUkNlXT1nbFtqQ2VdPWdsWyRDZV09Z2xbekNlXT1nbFtxQ2VdPWdsW0hDZV09Z2xbR0NlXT1nbFtWQ2VdPSExO2Z1bmN0aW9uIHJfZShpKXtyZXR1cm4gbDMoaSkmJloxdChpLmxlbmd0aCkmJiEhZ2xbdFQoaSldfWZ1bmN0aW9uIHdXKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gaShhKX19dmFyIElEdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFdOPUlEdCYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGlfZT1XTiYmV04uZXhwb3J0cz09PUlEdCxKMXQ9aV9lJiZ1RHQucHJvY2VzcyxzX2U9ZnVuY3Rpb24oKXt0cnl7dmFyIGk9V04mJldOLnJlcXVpcmUmJldOLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gaXx8SjF0JiZKMXQuYmluZGluZyYmSjF0LmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO2NvbnN0IFJBPXNfZTt2YXIgRER0PVJBJiZSQS5pc1R5cGVkQXJyYXksYV9lPUREdD93VyhERHQpOnJfZTtjb25zdCBtVz1hX2U7ZnVuY3Rpb24gdGR0KGksYSl7aWYoIShhPT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIGlbYV09PSJmdW5jdGlvbiIpJiZhIT0iX19wcm90b19fIilyZXR1cm4gaVthXX12YXIgb19lPU9iamVjdC5wcm90b3R5cGUsY19lPW9fZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB5VyhpLGEsZil7dmFyIHA9aVthXTsoIShjX2UuY2FsbChpLGEpJiZOQShwLGYpKXx8Zj09PXZvaWQgMCYmIShhIGluIGkpKSYmcFcoaSxhLGYpfWZ1bmN0aW9uIEtOKGksYSxmLHApe3ZhciB2PSFmO2Z8fChmPXt9KTtmb3IodmFyIG09LTEsYj1hLmxlbmd0aDsrK208Yjspe3ZhciBFPWFbbV0sXz1wP3AoZltFXSxpW0VdLEUsZixpKTp2b2lkIDA7Xz09PXZvaWQgMCYmKF89aVtFXSksdj9wVyhmLEUsXyk6eVcoZixFLF8pfXJldHVybiBmfWZ1bmN0aW9uIHVfZShpLGEpe2Zvcih2YXIgZj0tMSxwPUFycmF5KGkpOysrZjxpOylwW2ZdPWEoZik7cmV0dXJuIHB9dmFyIGxfZT05MDA3MTk5MjU0NzQwOTkxLGhfZT0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24geFcoaSxhKXt2YXIgZj10eXBlb2YgaTtyZXR1cm4gYT1hPz9sX2UsISFhJiYoZj09Im51bWJlciJ8fGYhPSJzeW1ib2wiJiZoX2UudGVzdChpKSkmJmk+LTEmJmklMT09MCYmaTxhfXZhciBmX2U9T2JqZWN0LnByb3RvdHlwZSxkX2U9Zl9lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIE9EdChpLGEpe3ZhciBmPU1mKGkpLHA9IWYmJkZBKGkpLHY9IWYmJiFwJiZCQShpKSxtPSFmJiYhcCYmIXYmJm1XKGkpLGI9Znx8cHx8dnx8bSxFPWI/dV9lKGkubGVuZ3RoLFN0cmluZyk6W10sXz1FLmxlbmd0aDtmb3IodmFyIEwgaW4gaSkoYXx8ZF9lLmNhbGwoaSxMKSkmJiEoYiYmKEw9PSJsZW5ndGgifHx2JiYoTD09Im9mZnNldCJ8fEw9PSJwYXJlbnQiKXx8bSYmKEw9PSJidWZmZXIifHxMPT0iYnl0ZUxlbmd0aCJ8fEw9PSJieXRlT2Zmc2V0Iil8fHhXKEwsXykpKSYmRS5wdXNoKEwpO3JldHVybiBFfWZ1bmN0aW9uIGdfZShpKXt2YXIgYT1bXTtpZihpIT1udWxsKWZvcih2YXIgZiBpbiBPYmplY3QoaSkpYS5wdXNoKGYpO3JldHVybiBhfXZhciBwX2U9T2JqZWN0LnByb3RvdHlwZSxiX2U9cF9lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHZfZShpKXtpZighSWIoaSkpcmV0dXJuIGdfZShpKTt2YXIgYT12VyhpKSxmPVtdO2Zvcih2YXIgcCBpbiBpKXA9PSJjb25zdHJ1Y3RvciImJihhfHwhYl9lLmNhbGwoaSxwKSl8fGYucHVzaChwKTtyZXR1cm4gZn1mdW5jdGlvbiBpVChpKXtyZXR1cm4gZWsoaSk/T0R0KGksITApOnZfZShpKX1mdW5jdGlvbiB3X2UoaSl7cmV0dXJuIEtOKGksaVQoaSkpfWZ1bmN0aW9uIG1fZShpLGEsZixwLHYsbSxiKXt2YXIgRT10ZHQoaSxmKSxfPXRkdChhLGYpLEw9Yi5nZXQoXyk7aWYoTCl7SzF0KGksZixMKTtyZXR1cm59dmFyIE49bT9tKEUsXyxmKyIiLGksYSxiKTp2b2lkIDAsQj1OPT09dm9pZCAwO2lmKEIpe3ZhciBqPU1mKF8pLFI9IWomJkJBKF8pLHo9IWomJiFSJiZtVyhfKTtOPV8sanx8Unx8ej9NZihFKT9OPUU6Q0R0KEUpP049bUR0KEUpOlI/KEI9ITEsTj12RHQoXywhMCkpOno/KEI9ITEsTj13RHQoXywhMCkpOk49W106TUR0KF8pfHxGQShfKT8oTj1FLEZBKEUpP049d19lKEUpOighSWIoRSl8fE9BKEUpKSYmKE49a0R0KF8pKSk6Qj0hMX1CJiYoYi5zZXQoXyxOKSx2KE4sXyxwLG0sYiksYi5kZWxldGUoXykpLEsxdChpLGYsTil9ZnVuY3Rpb24gTkR0KGksYSxmLHAsdil7aSE9PWEmJlkxdChhLGZ1bmN0aW9uKG0sYil7aWYodnx8KHY9bmV3IHRtKSxJYihtKSltX2UoaSxhLGIsZixORHQscCx2KTtlbHNle3ZhciBFPXA/cCh0ZHQoaSxiKSxtLGIrIiIsaSxhLHYpOnZvaWQgMDtFPT09dm9pZCAwJiYoRT1tKSxLMXQoaSxiLEUpfX0saVQpfWZ1bmN0aW9uIHNUKGkpe3JldHVybiBpfWZ1bmN0aW9uIHlfZShpLGEsZil7c3dpdGNoKGYubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGkuY2FsbChhKTtjYXNlIDE6cmV0dXJuIGkuY2FsbChhLGZbMF0pO2Nhc2UgMjpyZXR1cm4gaS5jYWxsKGEsZlswXSxmWzFdKTtjYXNlIDM6cmV0dXJuIGkuY2FsbChhLGZbMF0sZlsxXSxmWzJdKX1yZXR1cm4gaS5hcHBseShhLGYpfXZhciBQRHQ9TWF0aC5tYXg7ZnVuY3Rpb24gRkR0KGksYSxmKXtyZXR1cm4gYT1QRHQoYT09PXZvaWQgMD9pLmxlbmd0aC0xOmEsMCksZnVuY3Rpb24oKXtmb3IodmFyIHA9YXJndW1lbnRzLHY9LTEsbT1QRHQocC5sZW5ndGgtYSwwKSxiPUFycmF5KG0pOysrdjxtOyliW3ZdPXBbYSt2XTt2PS0xO2Zvcih2YXIgRT1BcnJheShhKzEpOysrdjxhOylFW3ZdPXBbdl07cmV0dXJuIEVbYV09ZihiKSx5X2UoaSx0aGlzLEUpfX1mdW5jdGlvbiBqQShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19dmFyIHhfZT1nVz9mdW5jdGlvbihpLGEpe3JldHVybiBnVyhpLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmpBKGEpLHdyaXRhYmxlOiEwfSl9OnNUO2NvbnN0IGtfZT14X2U7dmFyIEVfZT04MDAsVF9lPTE2LENfZT1EYXRlLm5vdztmdW5jdGlvbiBfX2UoaSl7dmFyIGE9MCxmPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHA9Q19lKCksdj1UX2UtKHAtZik7aWYoZj1wLHY+MCl7aWYoKythPj1FX2UpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIGE9MDtyZXR1cm4gaS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19dmFyIFNfZT1fX2Uoa19lKTtjb25zdCBCRHQ9U19lO2Z1bmN0aW9uIGtXKGksYSl7cmV0dXJuIEJEdChGRHQoaSxhLHNUKSxpKyIiKX1mdW5jdGlvbiBZTihpLGEsZil7aWYoIUliKGYpKXJldHVybiExO3ZhciBwPXR5cGVvZiBhO3JldHVybihwPT0ibnVtYmVyIj9layhmKSYmeFcoYSxmLmxlbmd0aCk6cD09InN0cmluZyImJmEgaW4gZik/TkEoZlthXSxpKTohMX1mdW5jdGlvbiBBX2UoaSl7cmV0dXJuIGtXKGZ1bmN0aW9uKGEsZil7dmFyIHA9LTEsdj1mLmxlbmd0aCxtPXY+MT9mW3YtMV06dm9pZCAwLGI9dj4yP2ZbMl06dm9pZCAwO2ZvcihtPWkubGVuZ3RoPjMmJnR5cGVvZiBtPT0iZnVuY3Rpb24iPyh2LS0sbSk6dm9pZCAwLGImJllOKGZbMF0sZlsxXSxiKSYmKG09djwzP3ZvaWQgMDptLHY9MSksYT1PYmplY3QoYSk7KytwPHY7KXt2YXIgRT1mW3BdO0UmJmkoYSxFLHAsbSl9cmV0dXJuIGF9KX12YXIgTF9lPUFfZShmdW5jdGlvbihpLGEsZil7TkR0KGksYSxmKX0pO2NvbnN0IEVXPUxfZSxSRHQ9IuKAiyIsTV9lPXtjdXJ2ZUJhc2lzOkZOLGN1cnZlQmFzaXNDbG9zZWQ6SDdlLGN1cnZlQmFzaXNPcGVuOkc3ZSxjdXJ2ZUJ1bXBYOno3ZSxjdXJ2ZUJ1bXBZOnE3ZSxjdXJ2ZUJ1bmRsZTpWN2UsY3VydmVDYXJkaW5hbENsb3NlZDpXN2UsY3VydmVDYXJkaW5hbE9wZW46SzdlLGN1cnZlQ2FyZGluYWw6VTdlLGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDpYN2UsY3VydmVDYXRtdWxsUm9tT3BlbjpRN2UsY3VydmVDYXRtdWxsUm9tOlk3ZSxjdXJ2ZUxpbmVhcjppZyxjdXJ2ZUxpbmVhckNsb3NlZDpaN2UsY3VydmVNb25vdG9uZVg6SjdlLGN1cnZlTW9ub3RvbmVZOnRUZSxjdXJ2ZU5hdHVyYWw6ZVRlLGN1cnZlU3RlcDpuVGUsY3VydmVTdGVwQWZ0ZXI6aVRlLGN1cnZlU3RlcEJlZm9yZTpyVGV9LElfZT0vXHMqKD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksRF9lPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1qRHQoaSwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyk7bGV0IHA9e307aWYoQXJyYXkuaXNBcnJheShmKSl7Y29uc3QgYj1mLm1hcChFPT5FLmFyZ3MpO2xXKGIpLHA9WTEocCxbLi4uYl0pfWVsc2UgcD1mLmFyZ3M7aWYoIXApcmV0dXJuO2xldCB2PWhXKGksYSk7Y29uc3QgbT0iY29uZmlnIjtyZXR1cm4gcFttXSE9PXZvaWQgMCYmKHY9PT0iZmxvd2NoYXJ0LXYyIiYmKHY9ImZsb3djaGFydCIpLHBbdl09cFttXSxkZWxldGUgcFttXSkscH0sakR0PWZ1bmN0aW9uKGksYT1udWxsKXt0cnl7Y29uc3QgZj1uZXcgUmVnRXhwKGBbJV17Mn0oPyFbe10ke0lfZS5zb3VyY2V9KSg/PVt9XVslXXsyfSkuKgpgLCJpZyIpO2k9aS50cmltKCkucmVwbGFjZShmLCIiKS5yZXBsYWNlKC8nL2dtLCciJyksVXQuZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7YSE9PW51bGw/IiB0eXBlOiIrYToiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHtpfWApO2xldCBwO2NvbnN0IHY9W107Zm9yKDsocD1ITi5leGVjKGkpKSE9PW51bGw7KWlmKHAuaW5kZXg9PT1ITi5sYXN0SW5kZXgmJkhOLmxhc3RJbmRleCsrLHAmJiFhfHxhJiZwWzFdJiZwWzFdLm1hdGNoKGEpfHxhJiZwWzJdJiZwWzJdLm1hdGNoKGEpKXtjb25zdCBtPXBbMV0/cFsxXTpwWzJdLGI9cFszXT9wWzNdLnRyaW0oKTpwWzRdP0pTT04ucGFyc2UocFs0XS50cmltKCkpOm51bGw7di5wdXNoKHt0eXBlOm0sYXJnczpifSl9cmV0dXJuIHYubGVuZ3RoPT09MD97dHlwZTppLGFyZ3M6bnVsbH06di5sZW5ndGg9PT0xP3ZbMF06dn1jYXRjaChmKXtyZXR1cm4gVXQuZXJyb3IoYEVSUk9SOiAke2YubWVzc2FnZX0gLSBVbmFibGUgdG8gcGFyc2UgZGlyZWN0aXZlIHR5cGU6ICcke2F9JyBiYXNlZCBvbiB0aGUgdGV4dDogJyR7aX0nYCkse3R5cGU6dm9pZCAwLGFyZ3M6bnVsbH19fSxPX2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGkucmVwbGFjZShITiwiIil9LE5fZT1mdW5jdGlvbihpLGEpe2Zvcihjb25zdFtmLHBdb2YgYS5lbnRyaWVzKCkpaWYocC5tYXRjaChpKSlyZXR1cm4gZjtyZXR1cm4tMX07ZnVuY3Rpb24gWDIoaSxhKXtpZighaSlyZXR1cm4gYTtjb25zdCBmPWBjdXJ2ZSR7aS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnNsaWNlKDEpfWA7cmV0dXJuIE1fZVtmXT8/YX1mdW5jdGlvbiBQX2UoaSxhKXtjb25zdCBmPWkudHJpbSgpO2lmKGYpcmV0dXJuIGEuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSI/UTYoZik6Zn1jb25zdCBGX2U9KGksLi4uYSk9Pntjb25zdCBmPWkuc3BsaXQoIi4iKSxwPWYubGVuZ3RoLTEsdj1mW3BdO2xldCBtPXdpbmRvdztmb3IobGV0IGI9MDtiPHA7YisrKWlmKG09bVtmW2JdXSwhbSl7VXQuZXJyb3IoYEZ1bmN0aW9uIG5hbWU6ICR7aX0gbm90IGZvdW5kIGluIHdpbmRvd2ApO3JldHVybn1tW3ZdKC4uLmEpfTtmdW5jdGlvbiAkRHQoaSxhKXtyZXR1cm4haXx8IWE/MDpNYXRoLnNxcnQoTWF0aC5wb3coYS54LWkueCwyKStNYXRoLnBvdyhhLnktaS55LDIpKX1mdW5jdGlvbiBCX2UoaSl7bGV0IGEsZj0wO2kuZm9yRWFjaCh2PT57Zis9JER0KHYsYSksYT12fSk7Y29uc3QgcD1mLzI7cmV0dXJuIGVkdChpLHApfWZ1bmN0aW9uIFJfZShpKXtyZXR1cm4gaS5sZW5ndGg9PT0xP2lbMF06Ql9lKGkpfWNvbnN0IHpEdD0oaSxhPTIpPT57Y29uc3QgZj1NYXRoLnBvdygxMCxhKTtyZXR1cm4gTWF0aC5yb3VuZChpKmYpL2Z9LGVkdD0oaSxhKT0+e2xldCBmLHA9YTtmb3IoY29uc3QgdiBvZiBpKXtpZihmKXtjb25zdCBtPSREdCh2LGYpO2lmKG08cClwLT1tO2Vsc2V7Y29uc3QgYj1wL207aWYoYjw9MClyZXR1cm4gZjtpZihiPj0xKXJldHVybnt4OnYueCx5OnYueX07aWYoYj4wJiZiPDEpcmV0dXJue3g6ekR0KCgxLWIpKmYueCtiKnYueCw1KSx5OnpEdCgoMS1iKSpmLnkrYip2LnksNSl9fX1mPXZ9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciB0aGUgZ2l2ZW4gZGlzdGFuY2UiKX0sal9lPShpLGEsZik9PntVdC5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkoYSl9YCksYVswXSE9PWYmJihhPWEucmV2ZXJzZSgpKTtjb25zdCB2PWVkdChhLDI1KSxtPWk/MTA6NSxiPU1hdGguYXRhbjIoYVswXS55LXYueSxhWzBdLngtdi54KSxFPXt4OjAseTowfTtyZXR1cm4gRS54PU1hdGguc2luKGIpKm0rKGFbMF0ueCt2LngpLzIsRS55PS1NYXRoLmNvcyhiKSptKyhhWzBdLnkrdi55KS8yLEV9O2Z1bmN0aW9uICRfZShpLGEsZil7Y29uc3QgcD1zdHJ1Y3R1cmVkQ2xvbmUoZik7VXQuaW5mbygib3VyIHBvaW50cyIscCksYSE9PSJzdGFydF9sZWZ0IiYmYSE9PSJzdGFydF9yaWdodCImJnAucmV2ZXJzZSgpO2NvbnN0IHY9MjUraSxtPWVkdChwLHYpLGI9MTAraSouNSxFPU1hdGguYXRhbjIocFswXS55LW0ueSxwWzBdLngtbS54KSxfPXt4OjAseTowfTtyZXR1cm4gYT09PSJzdGFydF9sZWZ0Ij8oXy54PU1hdGguc2luKEUrTWF0aC5QSSkqYisocFswXS54K20ueCkvMixfLnk9LU1hdGguY29zKEUrTWF0aC5QSSkqYisocFswXS55K20ueSkvMik6YT09PSJlbmRfcmlnaHQiPyhfLng9TWF0aC5zaW4oRS1NYXRoLlBJKSpiKyhwWzBdLngrbS54KS8yLTUsXy55PS1NYXRoLmNvcyhFLU1hdGguUEkpKmIrKHBbMF0ueSttLnkpLzItNSk6YT09PSJlbmRfbGVmdCI/KF8ueD1NYXRoLnNpbihFKSpiKyhwWzBdLngrbS54KS8yLTUsXy55PS1NYXRoLmNvcyhFKSpiKyhwWzBdLnkrbS55KS8yLTUpOihfLng9TWF0aC5zaW4oRSkqYisocFswXS54K20ueCkvMixfLnk9LU1hdGguY29zKEUpKmIrKHBbMF0ueSttLnkpLzIpLF99ZnVuY3Rpb24gZW0oaSl7bGV0IGE9IiIsZj0iIjtmb3IoY29uc3QgcCBvZiBpKXAhPT12b2lkIDAmJihwLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHxwLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/Zj1mK3ArIjsiOmE9YStwKyI7Iik7cmV0dXJue3N0eWxlOmEsbGFiZWxTdHlsZTpmfX1sZXQgcUR0PTA7Y29uc3QgSER0PSgpPT4ocUR0KyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitxRHQpO2Z1bmN0aW9uIHpfZShpKXtsZXQgYT0iIjtjb25zdCBmPSIwMTIzNDU2Nzg5YWJjZGVmIixwPWYubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8aTt2KyspYSs9Zi5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnApKTtyZXR1cm4gYX1jb25zdCBHRHQ9aT0+el9lKGkubGVuZ3RoKSxxX2U9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6InN0YXJ0IixzdHlsZToiIzY2NiIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx2YWxpZ246dm9pZCAwLHRleHQ6IiJ9fSxIX2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEudGV4dC5yZXBsYWNlKFlyLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxwXT0kQShhLmZvbnRTaXplKSx2PWkuYXBwZW5kKCJ0ZXh0Iik7di5hdHRyKCJ4IixhLngpLHYuYXR0cigieSIsYS55KSx2LnN0eWxlKCJ0ZXh0LWFuY2hvciIsYS5hbmNob3IpLHYuc3R5bGUoImZvbnQtZmFtaWx5IixhLmZvbnRGYW1pbHkpLHYuc3R5bGUoImZvbnQtc2l6ZSIscCksdi5zdHlsZSgiZm9udC13ZWlnaHQiLGEuZm9udFdlaWdodCksdi5hdHRyKCJmaWxsIixhLmZpbGwpLGEuY2xhc3MhPT12b2lkIDAmJnYuYXR0cigiY2xhc3MiLGEuY2xhc3MpO2NvbnN0IG09di5hcHBlbmQoInRzcGFuIik7cmV0dXJuIG0uYXR0cigieCIsYS54K2EudGV4dE1hcmdpbioyKSxtLmF0dHIoImZpbGwiLGEuZmlsbCksbS50ZXh0KGYpLHZ9LFZEdD1QQSgoaSxhLGYpPT57aWYoIWl8fChmPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxmKSxZci5saW5lQnJlYWtSZWdleC50ZXN0KGkpKSlyZXR1cm4gaTtjb25zdCBwPWkuc3BsaXQoIiAiKSx2PVtdO2xldCBtPSIiO3JldHVybiBwLmZvckVhY2goKGIsRSk9Pntjb25zdCBfPWgzKGAke2J9IGAsZiksTD1oMyhtLGYpO2lmKF8+YSl7Y29uc3R7aHlwaGVuYXRlZFN0cmluZ3M6aixyZW1haW5pbmdXb3JkOlJ9PUdfZShiLGEsIi0iLGYpO3YucHVzaChtLC4uLmopLG09Un1lbHNlIEwrXz49YT8odi5wdXNoKG0pLG09Yik6bT1bbSxiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO0UrMT09PXAubGVuZ3RoJiZ2LnB1c2gobSl9KSx2LmZpbHRlcihiPT5iIT09IiIpLmpvaW4oZi5qb2luV2l0aCl9LChpLGEsZik9PmAke2l9JHthfSR7Zi5mb250U2l6ZX0ke2YuZm9udFdlaWdodH0ke2YuZm9udEZhbWlseX0ke2Yuam9pbldpdGh9YCksR19lPVBBKChpLGEsZj0iLSIscCk9PntwPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0scCk7Y29uc3Qgdj1bLi4uaV0sbT1bXTtsZXQgYj0iIjtyZXR1cm4gdi5mb3JFYWNoKChFLF8pPT57Y29uc3QgTD1gJHtifSR7RX1gO2lmKGgzKEwscCk+PWEpe2NvbnN0IEI9XysxLGo9di5sZW5ndGg9PT1CLFI9YCR7TH0ke2Z9YDttLnB1c2goaj9MOlIpLGI9IiJ9ZWxzZSBiPUx9KSx7aHlwaGVuYXRlZFN0cmluZ3M6bSxyZW1haW5pbmdXb3JkOmJ9fSwoaSxhLGY9Ii0iLHApPT5gJHtpfSR7YX0ke2Z9JHtwLmZvbnRTaXplfSR7cC5mb250V2VpZ2h0fSR7cC5mb250RmFtaWx5fWApO2Z1bmN0aW9uIG5kdChpLGEpe3JldHVybiByZHQoaSxhKS5oZWlnaHR9ZnVuY3Rpb24gaDMoaSxhKXtyZXR1cm4gcmR0KGksYSkud2lkdGh9Y29uc3QgcmR0PVBBKChpLGEpPT57Y29uc3R7Zm9udFNpemU6Zj0xMixmb250RmFtaWx5OnA9IkFyaWFsIixmb250V2VpZ2h0OnY9NDAwfT1hO2lmKCFpKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtjb25zdFssbV09JEEoZiksYj1bInNhbnMtc2VyaWYiLHBdLEU9aS5zcGxpdChZci5saW5lQnJlYWtSZWdleCksXz1bXSxMPXlyKCJib2R5Iik7aWYoIUwucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Y29uc3QgTj1MLmFwcGVuZCgic3ZnIik7Zm9yKGNvbnN0IGogb2YgYil7bGV0IFI9MDtjb25zdCB6PXt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Zm9yKGNvbnN0IEsgb2YgRSl7Y29uc3QgaXQ9cV9lKCk7aXQudGV4dD1LfHxSRHQ7Y29uc3Qgc3Q9SF9lKE4saXQpLnN0eWxlKCJmb250LXNpemUiLG0pLnN0eWxlKCJmb250LXdlaWdodCIsdikuc3R5bGUoImZvbnQtZmFtaWx5IixqKSx1dD0oc3QuX2dyb3Vwc3x8c3QpWzBdWzBdLmdldEJCb3goKTtpZih1dC53aWR0aD09PTAmJnV0LmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTt6LndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoei53aWR0aCx1dC53aWR0aCkpLFI9TWF0aC5yb3VuZCh1dC5oZWlnaHQpLHouaGVpZ2h0Kz1SLHoubGluZUhlaWdodD1NYXRoLnJvdW5kKE1hdGgubWF4KHoubGluZUhlaWdodCxSKSl9Xy5wdXNoKHopfU4ucmVtb3ZlKCk7Y29uc3QgQj1pc05hTihfWzFdLmhlaWdodCl8fGlzTmFOKF9bMV0ud2lkdGgpfHxpc05hTihfWzFdLmxpbmVIZWlnaHQpfHxfWzBdLmhlaWdodD5fWzFdLmhlaWdodCYmX1swXS53aWR0aD5fWzFdLndpZHRoJiZfWzBdLmxpbmVIZWlnaHQ+X1sxXS5saW5lSGVpZ2h0PzA6MTtyZXR1cm4gX1tCXX0sKGksYSk9PmAke2l9JHthLmZvbnRTaXplfSR7YS5mb250V2VpZ2h0fSR7YS5mb250RmFtaWx5fWApO2NsYXNzIFZfZXtjb25zdHJ1Y3RvcihhPSExLGYpe3RoaXMuY291bnQ9MCx0aGlzLmNvdW50PWY/Zi5sZW5ndGg6MCx0aGlzLm5leHQ9YT8oKT0+dGhpcy5jb3VudCsrOigpPT5EYXRlLm5vdygpfX1sZXQgVFc7Y29uc3QgVV9lPWZ1bmN0aW9uKGkpe3JldHVybiBUVz1UV3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lc2NhcGUoaSkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksVFcuaW5uZXJIVE1MPWksdW5lc2NhcGUoVFcudGV4dENvbnRlbnQpfTtmdW5jdGlvbiBVRHQoaSl7cmV0dXJuInN0ciJpbiBpfWNvbnN0IFdfZT0oaSxhLGYscCk9Pnt2YXIgbTtpZighcClyZXR1cm47Y29uc3Qgdj0obT1pLm5vZGUoKSk9PW51bGw/dm9pZCAwOm0uZ2V0QkJveCgpO3YmJmkuYXBwZW5kKCJ0ZXh0IikudGV4dChwKS5hdHRyKCJ4Iix2Lngrdi53aWR0aC8yKS5hdHRyKCJ5IiwtZikuYXR0cigiY2xhc3MiLGEpfSwkQT1pPT57aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybltpLGkrInB4Il07Y29uc3QgYT1wYXJzZUludChpPz8iIiwxMCk7cmV0dXJuIE51bWJlci5pc05hTihhKT9bdm9pZCAwLHZvaWQgMF06aT09PVN0cmluZyhhKT9bYSxpKyJweCJdOlthLGldfTtmdW5jdGlvbiBpZHQoaSxhKXtyZXR1cm4gRVcoe30saSxhKX1jb25zdCAkYT17YXNzaWduV2l0aERlcHRoOlkxLHdyYXBMYWJlbDpWRHQsY2FsY3VsYXRlVGV4dEhlaWdodDpuZHQsY2FsY3VsYXRlVGV4dFdpZHRoOmgzLGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOnJkdCxjbGVhbkFuZE1lcmdlOmlkdCxkZXRlY3RJbml0OkRfZSxkZXRlY3REaXJlY3RpdmU6akR0LGlzU3Vic3RyaW5nSW5BcnJheTpOX2UsaW50ZXJwb2xhdGVUb0N1cnZlOlgyLGNhbGNMYWJlbFBvc2l0aW9uOlJfZSxjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbjpqX2UsY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbjokX2UsZm9ybWF0VXJsOlBfZSxnZXRTdHlsZXNGcm9tQXJyYXk6ZW0sZ2VuZXJhdGVJZDpIRHQscmFuZG9tOkdEdCxydW5GdW5jOkZfZSxlbnRpdHlEZWNvZGU6VV9lLGluc2VydFRpdGxlOldfZSxwYXJzZUZvbnRTaXplOiRBLEluaXRJREdlbmVyYXRvcjpWX2V9O3ZhciBXRHQ9ImNvbW0iLEtEdD0icnVsZSIsWUR0PSJkZWNsIixLX2U9IkBpbXBvcnQiLFlfZT0iQGtleWZyYW1lcyIsWF9lPU1hdGguYWJzLHNkdD1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIFhEdChpKXtyZXR1cm4gaS50cmltKCl9ZnVuY3Rpb24gYWR0KGksYSxmKXtyZXR1cm4gaS5yZXBsYWNlKGEsZil9ZnVuY3Rpb24gUV9lKGksYSl7cmV0dXJuIGkuaW5kZXhPZihhKX1mdW5jdGlvbiBYTihpLGEpe3JldHVybiBpLmNoYXJDb2RlQXQoYSl8MH1mdW5jdGlvbiBRTihpLGEsZil7cmV0dXJuIGkuc2xpY2UoYSxmKX1mdW5jdGlvbiBuayhpKXtyZXR1cm4gaS5sZW5ndGh9ZnVuY3Rpb24gUUR0KGkpe3JldHVybiBpLmxlbmd0aH1mdW5jdGlvbiBDVyhpLGEpe3JldHVybiBhLnB1c2goaSksaX12YXIgX1c9MSx6QT0xLFpEdD0wLFEyPTAsSWY9MCxxQT0iIjtmdW5jdGlvbiBvZHQoaSxhLGYscCx2LG0sYil7cmV0dXJue3ZhbHVlOmkscm9vdDphLHBhcmVudDpmLHR5cGU6cCxwcm9wczp2LGNoaWxkcmVuOm0sbGluZTpfVyxjb2x1bW46ekEsbGVuZ3RoOmIscmV0dXJuOiIifX1mdW5jdGlvbiBaX2UoKXtyZXR1cm4gSWZ9ZnVuY3Rpb24gSl9lKCl7cmV0dXJuIElmPVEyPjA/WE4ocUEsLS1RMik6MCx6QS0tLElmPT09MTAmJih6QT0xLF9XLS0pLElmfWZ1bmN0aW9uIG5tKCl7cmV0dXJuIElmPVEyPFpEdD9YTihxQSxRMisrKTowLHpBKyssSWY9PT0xMCYmKHpBPTEsX1crKyksSWZ9ZnVuY3Rpb24gYVQoKXtyZXR1cm4gWE4ocUEsUTIpfWZ1bmN0aW9uIFNXKCl7cmV0dXJuIFEyfWZ1bmN0aW9uIEFXKGksYSl7cmV0dXJuIFFOKHFBLGksYSl9ZnVuY3Rpb24gY2R0KGkpe3N3aXRjaChpKXtjYXNlIDA6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiA1O2Nhc2UgMzM6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDc6Y2FzZSA2MjpjYXNlIDY0OmNhc2UgMTI2OmNhc2UgNTk6Y2FzZSAxMjM6Y2FzZSAxMjU6cmV0dXJuIDQ7Y2FzZSA1ODpyZXR1cm4gMztjYXNlIDM0OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDkxOnJldHVybiAyO2Nhc2UgNDE6Y2FzZSA5MzpyZXR1cm4gMX1yZXR1cm4gMH1mdW5jdGlvbiB0U2UoaSl7cmV0dXJuIF9XPXpBPTEsWkR0PW5rKHFBPWkpLFEyPTAsW119ZnVuY3Rpb24gZVNlKGkpe3JldHVybiBxQT0iIixpfWZ1bmN0aW9uIHVkdChpKXtyZXR1cm4gWER0KEFXKFEyLTEsbGR0KGk9PT05MT9pKzI6aT09PTQwP2krMTppKSkpfWZ1bmN0aW9uIG5TZShpKXtmb3IoOyhJZj1hVCgpKSYmSWY8MzM7KW5tKCk7cmV0dXJuIGNkdChpKT4yfHxjZHQoSWYpPjM/IiI6IiAifWZ1bmN0aW9uIHJTZShpLGEpe2Zvcig7LS1hJiZubSgpJiYhKElmPDQ4fHxJZj4xMDJ8fElmPjU3JiZJZjw2NXx8SWY+NzAmJklmPDk3KTspO3JldHVybiBBVyhpLFNXKCkrKGE8NiYmYVQoKT09MzImJm5tKCk9PTMyKSl9ZnVuY3Rpb24gbGR0KGkpe2Zvcig7bm0oKTspc3dpdGNoKElmKXtjYXNlIGk6cmV0dXJuIFEyO2Nhc2UgMzQ6Y2FzZSAzOTppIT09MzQmJmkhPT0zOSYmbGR0KElmKTticmVhaztjYXNlIDQwOmk9PT00MSYmbGR0KGkpO2JyZWFrO2Nhc2UgOTI6bm0oKTticmVha31yZXR1cm4gUTJ9ZnVuY3Rpb24gaVNlKGksYSl7Zm9yKDtubSgpJiZpK0lmIT09NDcrMTA7KWlmKGkrSWY9PT00Mis0MiYmYVQoKT09PTQ3KWJyZWFrO3JldHVybiIvKiIrQVcoYSxRMi0xKSsiKiIrc2R0KGk9PT00Nz9pOm5tKCkpfWZ1bmN0aW9uIHNTZShpKXtmb3IoOyFjZHQoYVQoKSk7KW5tKCk7cmV0dXJuIEFXKGksUTIpfWZ1bmN0aW9uIGFTZShpKXtyZXR1cm4gZVNlKExXKCIiLG51bGwsbnVsbCxudWxsLFsiIl0saT10U2UoaSksMCxbMF0saSkpfWZ1bmN0aW9uIExXKGksYSxmLHAsdixtLGIsRSxfKXtmb3IodmFyIEw9MCxOPTAsQj1iLGo9MCxSPTAsej0wLEs9MSxpdD0xLHN0PTEsdXQ9MCxidD0iIixtdD12LHl0PW0sZHQ9cCxodD1idDtpdDspc3dpdGNoKHo9dXQsdXQ9bm0oKSl7Y2FzZSA0MDppZih6IT0xMDgmJlhOKGh0LEItMSk9PTU4KXtRX2UoaHQrPWFkdCh1ZHQodXQpLCImIiwiJlxmIiksIiZcZiIpIT0tMSYmKHN0PS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpodCs9dWR0KHV0KTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6aHQrPW5TZSh6KTticmVhaztjYXNlIDkyOmh0Kz1yU2UoU1coKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKGFUKCkpe2Nhc2UgNDI6Y2FzZSA0NzpDVyhvU2UoaVNlKG5tKCksU1coKSksYSxmKSxfKTticmVhaztkZWZhdWx0Omh0Kz0iLyJ9YnJlYWs7Y2FzZSAxMjMqSzpFW0wrK109bmsoaHQpKnN0O2Nhc2UgMTI1Kks6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKHV0KXtjYXNlIDA6Y2FzZSAxMjU6aXQ9MDtjYXNlIDU5K046Uj4wJiZuayhodCktQiYmQ1coUj4zMj90T3QoaHQrIjsiLHAsZixCLTEpOnRPdChhZHQoaHQsIiAiLCIiKSsiOyIscCxmLEItMiksXyk7YnJlYWs7Y2FzZSA1OTpodCs9IjsiO2RlZmF1bHQ6aWYoQ1coZHQ9SkR0KGh0LGEsZixMLE4sdixFLGJ0LG10PVtdLHl0PVtdLEIpLG0pLHV0PT09MTIzKWlmKE49PT0wKUxXKGh0LGEsZHQsZHQsbXQsbSxCLEUseXQpO2Vsc2Ugc3dpdGNoKGo9PT05OSYmWE4oaHQsMyk9PT0xMTA/MTAwOmope2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1OkxXKGksZHQsZHQscCYmQ1coSkR0KGksZHQsZHQsMCwwLHYsRSxidCx2LG10PVtdLEIpLHl0KSx2LHl0LEIsRSxwP210Onl0KTticmVhaztkZWZhdWx0OkxXKGh0LGR0LGR0LGR0LFsiIl0seXQsMCxFLHl0KX19TD1OPVI9MCxLPXN0PTEsYnQ9aHQ9IiIsQj1iO2JyZWFrO2Nhc2UgNTg6Qj0xK25rKGh0KSxSPXo7ZGVmYXVsdDppZihLPDEpe2lmKHV0PT0xMjMpLS1LO2Vsc2UgaWYodXQ9PTEyNSYmSysrPT0wJiZKX2UoKT09MTI1KWNvbnRpbnVlfXN3aXRjaChodCs9c2R0KHV0KSx1dCpLKXtjYXNlIDM4OnN0PU4+MD8xOihodCs9IlxmIiwtMSk7YnJlYWs7Y2FzZSA0NDpFW0wrK109KG5rKGh0KS0xKSpzdCxzdD0xO2JyZWFrO2Nhc2UgNjQ6YVQoKT09PTQ1JiYoaHQrPXVkdChubSgpKSksaj1hVCgpLE49Qj1uayhidD1odCs9c1NlKFNXKCkpKSx1dCsrO2JyZWFrO2Nhc2UgNDU6ej09PTQ1JiZuayhodCk9PTImJihLPTApfX1yZXR1cm4gbX1mdW5jdGlvbiBKRHQoaSxhLGYscCx2LG0sYixFLF8sTCxOKXtmb3IodmFyIEI9di0xLGo9dj09PTA/bTpbIiJdLFI9UUR0KGopLHo9MCxLPTAsaXQ9MDt6PHA7Kyt6KWZvcih2YXIgc3Q9MCx1dD1RTihpLEIrMSxCPVhfZShLPWJbel0pKSxidD1pO3N0PFI7KytzdCkoYnQ9WER0KEs+MD9qW3N0XSsiICIrdXQ6YWR0KHV0LC8mXGYvZyxqW3N0XSkpKSYmKF9baXQrK109YnQpO3JldHVybiBvZHQoaSxhLGYsdj09PTA/S0R0OkUsXyxMLE4pfWZ1bmN0aW9uIG9TZShpLGEsZil7cmV0dXJuIG9kdChpLGEsZixXRHQsc2R0KFpfZSgpKSxRTihpLDIsLTIpLDApfWZ1bmN0aW9uIHRPdChpLGEsZixwKXtyZXR1cm4gb2R0KGksYSxmLFlEdCxRTihpLDAscCksUU4oaSxwKzEsLTEpLHApfWZ1bmN0aW9uIGhkdChpLGEpe2Zvcih2YXIgZj0iIixwPVFEdChpKSx2PTA7djxwO3YrKylmKz1hKGlbdl0sdixpLGEpfHwiIjtyZXR1cm4gZn1mdW5jdGlvbiBjU2UoaSxhLGYscCl7c3dpdGNoKGkudHlwZSl7Y2FzZSBLX2U6Y2FzZSBZRHQ6cmV0dXJuIGkucmV0dXJuPWkucmV0dXJufHxpLnZhbHVlO2Nhc2UgV0R0OnJldHVybiIiO2Nhc2UgWV9lOnJldHVybiBpLnJldHVybj1pLnZhbHVlKyJ7IitoZHQoaS5jaGlsZHJlbixwKSsifSI7Y2FzZSBLRHQ6aS52YWx1ZT1pLnByb3BzLmpvaW4oIiwiKX1yZXR1cm4gbmsoZj1oZHQoaS5jaGlsZHJlbixwKSk/aS5yZXR1cm49aS52YWx1ZSsieyIrZisifSI6IiJ9Y29uc3QgZU90PSIxMC41LjEiLG9UPU9iamVjdC5mcmVlemUoTGYpO2xldCBzcD1ZMSh7fSxvVCksbk90LEhBPVtdLFpOPVkxKHt9LG9UKTtjb25zdCBNVz0oaSxhKT0+e2xldCBmPVkxKHt9LGkpLHA9e307Zm9yKGNvbnN0IHYgb2YgYSlzT3QodikscD1ZMShwLHYpO2lmKGY9WTEoZixwKSxwLnRoZW1lJiZwLnRoZW1lIGluIHc1KXtjb25zdCB2PVkxKHt9LG5PdCksbT1ZMSh2LnRoZW1lVmFyaWFibGVzfHx7fSxwLnRoZW1lVmFyaWFibGVzKTtmLnRoZW1lJiZmLnRoZW1lIGluIHc1JiYoZi50aGVtZVZhcmlhYmxlcz13NVtmLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhtKSl9cmV0dXJuIFpOPWYsb090KFpOKSxaTn0sdVNlPWk9PihzcD1ZMSh7fSxvVCksc3A9WTEoc3AsaSksaS50aGVtZSYmdzVbaS50aGVtZV0mJihzcC50aGVtZVZhcmlhYmxlcz13NVtpLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhpLnRoZW1lVmFyaWFibGVzKSksTVcoc3AsSEEpLHNwKSxsU2U9aT0+e25PdD1ZMSh7fSxpKX0saFNlPWk9PihzcD1ZMShzcCxpKSxNVyhzcCxIQSksc3ApLHJPdD0oKT0+WTEoe30sc3ApLGlPdD1pPT4ob090KGkpLFkxKFpOLGkpLExlKCkpLExlPSgpPT5ZMSh7fSxaTiksc090PWk9PntpJiYoWyJzZWN1cmUiLC4uLnNwLnNlY3VyZT8/W11dLmZvckVhY2goYT0+e09iamVjdC5oYXNPd24oaSxhKSYmKFV0LmRlYnVnKGBEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICR7YX1gLGlbYV0pLGRlbGV0ZSBpW2FdKX0pLE9iamVjdC5rZXlzKGkpLmZvckVhY2goYT0+e2Euc3RhcnRzV2l0aCgiX18iKSYmZGVsZXRlIGlbYV19KSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9Pnt0eXBlb2YgaVthXT09InN0cmluZyImJihpW2FdLmluY2x1ZGVzKCI8Iil8fGlbYV0uaW5jbHVkZXMoIj4iKXx8aVthXS5pbmNsdWRlcygidXJsKGRhdGE6IikpJiZkZWxldGUgaVthXSx0eXBlb2YgaVthXT09Im9iamVjdCImJnNPdChpW2FdKX0pKX0sZlNlPWk9PntsVyhpKSxpLmZvbnRGYW1pbHkmJighaS50aGVtZVZhcmlhYmxlc3x8IWkudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseSkmJihpLnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OmkuZm9udEZhbWlseX0pLEhBLnB1c2goaSksTVcoc3AsSEEpfSxJVz0oaT1zcCk9PntIQT1bXSxNVyhpLEhBKX0sZFNlPXtMQVpZX0xPQURfREVQUkVDQVRFRDoiVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsYXp5TG9hZGVkRGlhZ3JhbXMgYW5kIGxvYWRFeHRlcm5hbERpYWdyYW1zQXRTdGFydHVwIGFyZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyBpbnN0ZWFkLiJ9LGFPdD17fSxnU2U9aT0+e2FPdFtpXXx8KFV0Lndhcm4oZFNlW2ldKSxhT3RbaV09ITApfSxvT3Q9aT0+e2kmJihpLmxhenlMb2FkZWREaWFncmFtc3x8aS5sb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCkmJmdTZSgiTEFaWV9MT0FEX0RFUFJFQ0FURUQiKX0sY090PSJjNCIscFNlPXtpZDpjT3QsZGV0ZWN0b3I6aT0+L15ccypDNENvbnRleHR8QzRDb250YWluZXJ8QzRDb21wb25lbnR8QzREeW5hbWljfEM0RGVwbG95bWVudC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SUllKTtyZXR1cm57aWQ6Y090LGRpYWdyYW06aX19fSx1T3Q9ImZsb3djaGFydCIsYlNlPXtpZDp1T3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZixwO3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS13cmFwcGVyInx8KChwPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6cC5kZWZhdWx0UmVuZGVyZXIpPT09ImVsayI/ITE6L15ccypncmFwaC8udGVzdChpKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk8kZSk7cmV0dXJue2lkOnVPdCxkaWFncmFtOml9fX0sbE90PSJmbG93Y2hhcnQtdjIiLHZTZT17aWQ6bE90LGRldGVjdG9yOihpLGEpPT57dmFyIGYscCx2O3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS1kMyJ8fCgocD1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnAuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QoaSkmJigodj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS13cmFwcGVyIj8hMDovXlxzKmZsb3djaGFydC8udGVzdChpKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk4kZSk7cmV0dXJue2lkOmxPdCxkaWFncmFtOml9fX0saE90PSJlciIsd1NlPXtpZDpoT3QsZGV0ZWN0b3I6aT0+L15ccyplckRpYWdyYW0vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmF6ZSk7cmV0dXJue2lkOmhPdCxkaWFncmFtOml9fX0sZk90PSJnaXRHcmFwaCIsbVNlPXtpZDpmT3QsZGV0ZWN0b3I6aT0+L15ccypnaXRHcmFwaC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SXplKTtyZXR1cm57aWQ6Zk90LGRpYWdyYW06aX19fSxkT3Q9ImdhbnR0Iix5U2U9e2lkOmRPdCxkZXRlY3RvcjppPT4vXlxzKmdhbnR0Ly50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT55cWUpO3JldHVybntpZDpkT3QsZGlhZ3JhbTppfX19LGdPdD0iaW5mbyIseFNlPXtpZDpnT3QsZGV0ZWN0b3I6aT0+L15ccyppbmZvLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rcWUpO3JldHVybntpZDpnT3QsZGlhZ3JhbTppfX19LHBPdD0icGllIixrU2U9e2lkOnBPdCxkZXRlY3RvcjppPT4vXlxzKnBpZS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QXFlKTtyZXR1cm57aWQ6cE90LGRpYWdyYW06aX19fSxiT3Q9InF1YWRyYW50Q2hhcnQiLEVTZT17aWQ6Yk90LGRldGVjdG9yOmk9Pi9eXHMqcXVhZHJhbnRDaGFydC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R3FlKTtyZXR1cm57aWQ6Yk90LGRpYWdyYW06aX19fSx2T3Q9InJlcXVpcmVtZW50IixUU2U9e2lkOnZPdCxkZXRlY3RvcjppPT4vXlxzKnJlcXVpcmVtZW50KERpYWdyYW0pPy8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dEhlKTtyZXR1cm57aWQ6dk90LGRpYWdyYW06aX19fSx3T3Q9InNlcXVlbmNlIixDU2U9e2lkOndPdCxkZXRlY3RvcjppPT4vXlxzKnNlcXVlbmNlRGlhZ3JhbS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+c0dlKTtyZXR1cm57aWQ6d090LGRpYWdyYW06aX19fSxtT3Q9ImNsYXNzIixfU2U9e2lkOm1PdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLmNsYXNzKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqY2xhc3NEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+TEdlKTtyZXR1cm57aWQ6bU90LGRpYWdyYW06aX19fSx5T3Q9ImNsYXNzRGlhZ3JhbSIsU1NlPXtpZDp5T3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKSYmKChmPWE9PW51bGw/dm9pZCAwOmEuY2xhc3MpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypjbGFzc0RpYWdyYW0tdjIvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5QR2UpO3JldHVybntpZDp5T3QsZGlhZ3JhbTppfX19LHhPdD0ic3RhdGUiLEFTZT17aWQ6eE90LGRldGVjdG9yOihpLGEpPT57dmFyIGY7cmV0dXJuKChmPWE9PW51bGw/dm9pZCAwOmEuc3RhdGUpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rVmUpO3JldHVybntpZDp4T3QsZGlhZ3JhbTppfX19LGtPdD0ic3RhdGVEaWFncmFtIixMU2U9e2lkOmtPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KGkpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdChpKSYmKChmPWE9PW51bGw/dm9pZCAwOmEuc3RhdGUpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciIpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+elZlKTtyZXR1cm57aWQ6a090LGRpYWdyYW06aX19fSxFT3Q9ImpvdXJuZXkiLE1TZT17aWQ6RU90LGRldGVjdG9yOmk9Pi9eXHMqam91cm5leS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+YVVlKTtyZXR1cm57aWQ6RU90LGRpYWdyYW06aX19fSxmZHQ9aT0+e3ZhciB2O2NvbnN0e3NlY3VyaXR5TGV2ZWw6YX09TGUoKTtsZXQgZj15cigiYm9keSIpO2lmKGE9PT0ic2FuZGJveCIpe2NvbnN0IGI9KCh2PXlyKGAjaSR7aX1gKS5ub2RlKCkpPT1udWxsP3ZvaWQgMDp2LmNvbnRlbnREb2N1bWVudCk/P2RvY3VtZW50O2Y9eXIoYi5ib2R5KX1yZXR1cm4gZi5zZWxlY3QoYCMke2l9YCl9LElTZT1mdW5jdGlvbihpLGEpe2ZvcihsZXQgZiBvZiBhKWkuYXR0cihmWzBdLGZbMV0pfSxEU2U9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPW5ldyBNYXA7cmV0dXJuIGY/KHAuc2V0KCJ3aWR0aCIsIjEwMCUiKSxwLnNldCgic3R5bGUiLGBtYXgtd2lkdGg6ICR7YX1weDtgKSk6KHAuc2V0KCJoZWlnaHQiLGkpLHAuc2V0KCJ3aWR0aCIsYSkpLHB9LG9nPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9RFNlKGEsZixwKTtJU2UoaSx2KX0sY1Q9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1hLm5vZGUoKS5nZXRCQm94KCksbT12LndpZHRoLGI9di5oZWlnaHQ7VXQuaW5mbyhgU1ZHIGJvdW5kczogJHttfXgke2J9YCx2KTtsZXQgRT0wLF89MDtVdC5pbmZvKGBHcmFwaCBib3VuZHM6ICR7RX14JHtffWAsaSksRT1tK2YqMixfPWIrZioyLFV0LmluZm8oYENhbGN1bGF0ZWQgYm91bmRzOiAke0V9eCR7X31gKSxvZyhhLF8sRSxwKTtjb25zdCBMPWAke3YueC1mfSAke3YueS1mfSAke3Yud2lkdGgrMipmfSAke3YuaGVpZ2h0KzIqZn1gO2EuYXR0cigidmlld0JveCIsTCl9LFRPdD17ZHJhdzooaSxhLGYpPT57VXQuZGVidWcoYHJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yCmApO2NvbnN0IHA9ZmR0KGEpO3AuYXR0cigidmlld0JveCIsIjAgMCAyNDEyIDUxMiIpLG9nKHAsMTAwLDUxMiwhMCk7Y29uc3Qgdj1wLmFwcGVuZCgiZyIpO3YuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MTEuMzEzLDEyMy4zMTNjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzItOS4zNzUsOS4zNzUtMjAuNjg4LTIwLjY4OGMtMTIuNDg0LTEyLjUtMzIuNzY2LTEyLjUtNDUuMjUsMGwtMTYsMTZjLTEuMjYxLDEuMjYxLTIuMzA0LDIuNjQ4LTMuMzEsNC4wNTEtMjEuNzM5LTguNTYxLTQ1LjMyNC0xMy40MjYtNzAuMDY1LTEzLjQyNi0xMDUuODY3LDAtMTkyLDg2LjEzMy0xOTIsMTkyczg2LjEzMywxOTIgMTkyLDE5MiAxOTItODYuMTMzIDE5Mi0xOTJjMC0yNC43NDEtNC44NjQtNDguMzI3LTEzLjQyNi03MC4wNjUgMS40MDItMS4wMDcgMi43OS0yLjA0OSA0LjA1MS0zLjMxbDE2LTE2YzEyLjUtMTIuNDkyIDEyLjUtMzIuNzU4IDAtNDUuMjVsLTIwLjY4OC0yMC42ODggOS4zNzUtOS4zNzUgMzIuMDAxLTMxLjk5OXptLTIxOS4zMTMsMTAwLjY4N2MtNTIuOTM4LDAtOTYsNDMuMDYzLTk2LDk2IDAsOC44MzYtNy4xNjQsMTYtMTYsMTZzLTE2LTcuMTY0LTE2LTE2YzAtNzAuNTc4IDU3LjQyMi0xMjggMTI4LTEyOCA4LjgzNiwwIDE2LDcuMTY0IDE2LDE2cy03LjE2NCwxNi0xNiwxNnoiKSx2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDU5LjAyLDE0OC45OGMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNiwxNmMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi4wMDEtMTZ6Iiksdi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTM0MC4zOTUsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LTE2Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE1Ljk5OSwxNnoiKSx2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDAwLDY0YzguODQ0LDAgMTYtNy4xNjQgMTYtMTZ2LTMyYzAtOC44MzYtNy4xNTYtMTYtMTYtMTYtOC44NDQsMC0xNiw3LjE2NC0xNiwxNnYzMmMwLDguODM2IDcuMTU2LDE2IDE2LDE2eiIpLHYuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00OTYsOTYuNTg2aC0zMmMtOC44NDQsMC0xNiw3LjE2NC0xNiwxNiAwLDguODM2IDcuMTU2LDE2IDE2LDE2aDMyYzguODQ0LDAgMTYtNy4xNjQgMTYtMTYgMC04LjgzNi03LjE1Ni0xNi0xNi0xNnoiKSx2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDM2Ljk4LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODhsMzItMzJjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzJjLTYuMjUxLDYuMjUtNi4yNTEsMTYuMzc1LTAuMDAxLDIyLjYyNXoiKSx2LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDE0NDApLmF0dHIoInkiLDI1MCkuYXR0cigiZm9udC1zaXplIiwiMTUwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KCJTeW50YXggZXJyb3IgaW4gdGV4dCIpLHYuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoYG1lcm1haWQgdmVyc2lvbiAke2Z9YCl9fSxPU2U9VE90LE5TZT17ZGI6e30scmVuZGVyZXI6VE90LHBhcnNlcjp7cGFyc2VyOnt5eTp7fX0scGFyc2U6KCk9Pnt9fX0sQ090PSJmbG93Y2hhcnQtZWxrIixQU2U9e2lkOkNPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybiEhKC9eXHMqZmxvd2NoYXJ0LWVsay8udGVzdChpKXx8L15ccypmbG93Y2hhcnR8Z3JhcGgvLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmtVZSk7cmV0dXJue2lkOkNPdCxkaWFncmFtOml9fX0sX090PSJ0aW1lbGluZSIsRlNlPXtpZDpfT3QsZGV0ZWN0b3I6aT0+L15ccyp0aW1lbGluZS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+elVlKTtyZXR1cm57aWQ6X090LGRpYWdyYW06aX19fSxTT3Q9Im1pbmRtYXAiLEJTZT17aWQ6U090LGRldGVjdG9yOmk9Pi9eXHMqbWluZG1hcC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dldlKTtyZXR1cm57aWQ6U090LGRpYWdyYW06aX19fSxBT3Q9InNhbmtleSIsUlNlPXtpZDpBT3QsZGV0ZWN0b3I6aT0+L15ccypzYW5rZXktYmV0YS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+V1dlKTtyZXR1cm57aWQ6QU90LGRpYWdyYW06aX19fSxEVz17fSxqU2U9KGksYSxmKT0+e2xldCBwPSIiO3JldHVybiBpIGluIERXJiZEV1tpXT9wPURXW2ldKGYpOlV0Lndhcm4oYE5vIHRoZW1lIGZvdW5kIGZvciAke2l9YCksYCAmIHsKICAgIGZvbnQtZmFtaWx5OiAke2YuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7Zi5mb250U2l6ZX07CiAgICBmaWxsOiAke2YudGV4dENvbG9yfQogIH0KCiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHtmLmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7Zi5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7Zi5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQoKICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke2YubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHtmLmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7Zi5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7Zi5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtmLmZvbnRTaXplfTsKICB9CgogICR7cH0KCiAgJHthfQpgfSwkU2U9KGksYSk9PnthIT09dm9pZCAwJiYoRFdbaV09YSl9LHpTZT1qU2U7bGV0IGRkdD0iIixnZHQ9IiIscGR0PSIiO2NvbnN0IGJkdD1pPT5EZChpLExlKCkpLGFwPSgpPT57ZGR0PSIiLHBkdD0iIixnZHQ9IiJ9LGNnPWk9PntkZHQ9YmR0KGkpLnJlcGxhY2UoL15ccysvZywiIil9LG9wPSgpPT5kZHQsY3A9aT0+e3BkdD1iZHQoaSkucmVwbGFjZSgvXG5ccysvZyxgCmApfSx1cD0oKT0+cGR0LFoyPWk9PntnZHQ9YmR0KGkpfSxEYj0oKT0+Z2R0LExPdD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsY2xlYXI6YXAsZ2V0QWNjRGVzY3JpcHRpb246dXAsZ2V0QWNjVGl0bGU6b3AsZ2V0RGlhZ3JhbVRpdGxlOkRiLHNldEFjY0Rlc2NyaXB0aW9uOmNwLHNldEFjY1RpdGxlOmNnLHNldERpYWdyYW1UaXRsZTpaMn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxxU2U9VXQsSFNlPWpmdCxKTj1MZSxHU2U9aT0+RGQoaSxKTigpKSxNT3Q9Y1QsVlNlPSgpPT5MT3QsT1c9e30sTlc9KGksYSxmKT0+e3ZhciBwO2lmKE9XW2ldKXRocm93IG5ldyBFcnJvcihgRGlhZ3JhbSAke2l9IGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtPV1tpXT1hLGYmJmNEdChpLGYpLCRTZShpLGEuc3R5bGVzKSwocD1hLmluamVjdFV0aWxzKT09bnVsbHx8cC5jYWxsKGEscVNlLEhTZSxKTixHU2UsTU90LFZTZSgpLCgpPT57fSl9LHZkdD1pPT57aWYoaSBpbiBPVylyZXR1cm4gT1dbaV07dGhyb3cgbmV3IFVTZShpKX07Y2xhc3MgVVNlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYSl7c3VwZXIoYERpYWdyYW0gJHthfSBub3QgZm91bmQuYCl9fWxldCBJT3Q9ITE7Y29uc3Qgd2R0PSgpPT57SU90fHwoSU90PSEwLE5XKCJlcnJvciIsTlNlLGk9PmkudG9Mb3dlckNhc2UoKS50cmltKCk9PT0iZXJyb3IiKSxOVygiLS0tIix7ZGI6e2NsZWFyOigpPT57fX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3OigpPT57fX0scGFyc2VyOntwYXJzZXI6e3l5Ont9fSxwYXJzZTooKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9fSxpbml0OigpPT5udWxsfSxpPT5pLnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgiLS0tIikpLG9EdChwU2UsU1NlLF9TZSx3U2UseVNlLHhTZSxrU2UsVFNlLENTZSxQU2UsdlNlLGJTZSxCU2UsRlNlLG1TZSxMU2UsQVNlLE1TZSxFU2UsUlNlKSl9O2NsYXNzIERPdHtjb25zdHJ1Y3RvcihhLGY9e30pe3RoaXMudGV4dD1hLHRoaXMubWV0YWRhdGE9Zix0aGlzLnR5cGU9ImdyYXBoIix0aGlzLnRleHQrPWAKYDtjb25zdCBwPUxlKCk7dHJ5e3RoaXMudHlwZT1oVyhhLHApfWNhdGNoKG0pe3RoaXMudHlwZT0iZXJyb3IiLHRoaXMuZGV0ZWN0RXJyb3I9bX1jb25zdCB2PXZkdCh0aGlzLnR5cGUpO1V0LmRlYnVnKCJUeXBlICIrdGhpcy50eXBlKSx0aGlzLmRiPXYuZGIsdGhpcy5yZW5kZXJlcj12LnJlbmRlcmVyLHRoaXMucGFyc2VyPXYucGFyc2VyLHRoaXMucGFyc2VyLnBhcnNlci55eT10aGlzLmRiLHRoaXMuaW5pdD12LmluaXQsdGhpcy5wYXJzZSgpfXBhcnNlKCl7dmFyIGYscCx2LG0sYjtpZih0aGlzLmRldGVjdEVycm9yKXRocm93IHRoaXMuZGV0ZWN0RXJyb3I7KHA9KGY9dGhpcy5kYikuY2xlYXIpPT1udWxsfHxwLmNhbGwoZik7Y29uc3QgYT1MZSgpOyh2PXRoaXMuaW5pdCk9PW51bGx8fHYuY2FsbCh0aGlzLGEpLHRoaXMubWV0YWRhdGEudGl0bGUmJigoYj0obT10aGlzLmRiKS5zZXREaWFncmFtVGl0bGUpPT1udWxsfHxiLmNhbGwobSx0aGlzLm1ldGFkYXRhLnRpdGxlKSksdGhpcy5wYXJzZXIucGFyc2UodGhpcy50ZXh0KX1hc3luYyByZW5kZXIoYSxmKXthd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LGEsZix0aGlzKX1nZXRQYXJzZXIoKXtyZXR1cm4gdGhpcy5wYXJzZXJ9Z2V0VHlwZSgpe3JldHVybiB0aGlzLnR5cGV9fWNvbnN0IG1kdD1hc3luYyhpLGE9e30pPT57Y29uc3QgZj1oVyhpLExlKCkpO3RyeXt2ZHQoZil9Y2F0Y2h7Y29uc3Qgdj10OWUoZik7aWYoIXYpdGhyb3cgbmV3IGFEdChgRGlhZ3JhbSAke2Z9IG5vdCBmb3VuZC5gKTtjb25zdHtpZDptLGRpYWdyYW06Yn09YXdhaXQgdigpO05XKG0sYil9cmV0dXJuIG5ldyBET3QoaSxhKX07bGV0IHlkdD1bXTtjb25zdCBXU2U9aT0+e3lkdC5wdXNoKGkpfSxLU2U9KCk9Pnt5ZHQuZm9yRWFjaChpPT57aSgpfSkseWR0PVtdfTt2YXIgWVNlPXhEdChPYmplY3Qua2V5cyxPYmplY3QpO2NvbnN0IFhTZT1ZU2U7dmFyIFFTZT1PYmplY3QucHJvdG90eXBlLFpTZT1RU2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gT090KGkpe2lmKCF2VyhpKSlyZXR1cm4gWFNlKGkpO3ZhciBhPVtdO2Zvcih2YXIgZiBpbiBPYmplY3QoaSkpWlNlLmNhbGwoaSxmKSYmZiE9ImNvbnN0cnVjdG9yIiYmYS5wdXNoKGYpO3JldHVybiBhfXZhciBKU2U9blQoSncsIkRhdGFWaWV3Iik7Y29uc3QgeGR0PUpTZTt2YXIgdEFlPW5UKEp3LCJQcm9taXNlIik7Y29uc3Qga2R0PXRBZTt2YXIgZUFlPW5UKEp3LCJTZXQiKTtjb25zdCBHQT1lQWU7dmFyIG5BZT1uVChKdywiV2Vha01hcCIpO2NvbnN0IEVkdD1uQWU7dmFyIE5PdD0iW29iamVjdCBNYXBdIixyQWU9IltvYmplY3QgT2JqZWN0XSIsUE90PSJbb2JqZWN0IFByb21pc2VdIixGT3Q9IltvYmplY3QgU2V0XSIsQk90PSJbb2JqZWN0IFdlYWtNYXBdIixST3Q9IltvYmplY3QgRGF0YVZpZXddIixpQWU9ZVQoeGR0KSxzQWU9ZVQoVU4pLGFBZT1lVChrZHQpLG9BZT1lVChHQSksY0FlPWVUKEVkdCksdVQ9dFQ7KHhkdCYmdVQobmV3IHhkdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Uk90fHxVTiYmdVQobmV3IFVOKSE9Tk90fHxrZHQmJnVUKGtkdC5yZXNvbHZlKCkpIT1QT3R8fEdBJiZ1VChuZXcgR0EpIT1GT3R8fEVkdCYmdVQobmV3IEVkdCkhPUJPdCkmJih1VD1mdW5jdGlvbihpKXt2YXIgYT10VChpKSxmPWE9PXJBZT9pLmNvbnN0cnVjdG9yOnZvaWQgMCxwPWY/ZVQoZik6IiI7aWYocClzd2l0Y2gocCl7Y2FzZSBpQWU6cmV0dXJuIFJPdDtjYXNlIHNBZTpyZXR1cm4gTk90O2Nhc2UgYUFlOnJldHVybiBQT3Q7Y2FzZSBvQWU6cmV0dXJuIEZPdDtjYXNlIGNBZTpyZXR1cm4gQk90fXJldHVybiBhfSk7Y29uc3QgVkE9dVQ7dmFyIHVBZT0iW29iamVjdCBNYXBdIixsQWU9IltvYmplY3QgU2V0XSIsaEFlPU9iamVjdC5wcm90b3R5cGUsZkFlPWhBZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB0UChpKXtpZihpPT1udWxsKXJldHVybiEwO2lmKGVrKGkpJiYoTWYoaSl8fHR5cGVvZiBpPT0ic3RyaW5nInx8dHlwZW9mIGkuc3BsaWNlPT0iZnVuY3Rpb24ifHxCQShpKXx8bVcoaSl8fEZBKGkpKSlyZXR1cm4haS5sZW5ndGg7dmFyIGE9VkEoaSk7aWYoYT09dUFlfHxhPT1sQWUpcmV0dXJuIWkuc2l6ZTtpZih2VyhpKSlyZXR1cm4hT090KGkpLmxlbmd0aDtmb3IodmFyIGYgaW4gaSlpZihmQWUuY2FsbChpLGYpKXJldHVybiExO3JldHVybiEwfWNvbnN0IGRBZT0iZ3JhcGhpY3MtZG9jdW1lbnQgZG9jdW1lbnQiO2Z1bmN0aW9uIGdBZShpLGEpe2kuYXR0cigicm9sZSIsZEFlKSxhIT09IiImJmkuYXR0cigiYXJpYS1yb2xlZGVzY3JpcHRpb24iLGEpfWZ1bmN0aW9uIHBBZShpLGEsZixwKXtpZihpLmluc2VydCE9PXZvaWQgMCl7aWYoZil7Y29uc3Qgdj1gY2hhcnQtZGVzYy0ke3B9YDtpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLHYpLGkuaW5zZXJ0KCJkZXNjIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLHYpLnRleHQoZil9aWYoYSl7Y29uc3Qgdj1gY2hhcnQtdGl0bGUtJHtwfWA7aS5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLHYpLGkuaW5zZXJ0KCJ0aXRsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIix2KS50ZXh0KGEpfX19Y29uc3QgYkFlPWk9PmkucmVwbGFjZSgvXlxzKiUlKD8heylbXlxuXStcbj8vZ20sIiIpLnRyaW1TdGFydCgpOy8qISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKi9mdW5jdGlvbiBqT3QoaSl7cmV0dXJuIHR5cGVvZiBpPiJ1Inx8aT09PW51bGx9ZnVuY3Rpb24gdkFlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsfWZ1bmN0aW9uIHdBZShpKXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT9pOmpPdChpKT9bXTpbaV19ZnVuY3Rpb24gbUFlKGksYSl7dmFyIGYscCx2LG07aWYoYSlmb3IobT1PYmplY3Qua2V5cyhhKSxmPTAscD1tLmxlbmd0aDtmPHA7Zis9MSl2PW1bZl0saVt2XT1hW3ZdO3JldHVybiBpfWZ1bmN0aW9uIHlBZShpLGEpe3ZhciBmPSIiLHA7Zm9yKHA9MDtwPGE7cCs9MSlmKz1pO3JldHVybiBmfWZ1bmN0aW9uIHhBZShpKXtyZXR1cm4gaT09PTAmJk51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PTEvaX12YXIga0FlPWpPdCxFQWU9dkFlLFRBZT13QWUsQ0FlPXlBZSxfQWU9eEFlLFNBZT1tQWUsdWc9e2lzTm90aGluZzprQWUsaXNPYmplY3Q6RUFlLHRvQXJyYXk6VEFlLHJlcGVhdDpDQWUsaXNOZWdhdGl2ZVplcm86X0FlLGV4dGVuZDpTQWV9O2Z1bmN0aW9uICRPdChpLGEpe3ZhciBmPSIiLHA9aS5yZWFzb258fCIodW5rbm93biByZWFzb24pIjtyZXR1cm4gaS5tYXJrPyhpLm1hcmsubmFtZSYmKGYrPSdpbiAiJytpLm1hcmsubmFtZSsnIiAnKSxmKz0iKCIrKGkubWFyay5saW5lKzEpKyI6IisoaS5tYXJrLmNvbHVtbisxKSsiKSIsIWEmJmkubWFyay5zbmlwcGV0JiYoZis9YAoKYCtpLm1hcmsuc25pcHBldCkscCsiICIrZik6cH1mdW5jdGlvbiBlUChpLGEpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj1pLHRoaXMubWFyaz1hLHRoaXMubWVzc2FnZT0kT3QodGhpcywhMSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrfHwiIn1lUC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGVQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lUCxlUC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZSsiOiAiKyRPdCh0aGlzLGEpfTt2YXIgeDU9ZVA7ZnVuY3Rpb24gVGR0KGksYSxmLHAsdil7dmFyIG09IiIsYj0iIixFPU1hdGguZmxvb3Iodi8yKS0xO3JldHVybiBwLWE+RSYmKG09IiAuLi4gIixhPXAtRSttLmxlbmd0aCksZi1wPkUmJihiPSIgLi4uIixmPXArRS1iLmxlbmd0aCkse3N0cjptK2kuc2xpY2UoYSxmKS5yZXBsYWNlKC9cdC9nLCLihpIiKStiLHBvczpwLWErbS5sZW5ndGh9fWZ1bmN0aW9uIENkdChpLGEpe3JldHVybiB1Zy5yZXBlYXQoIiAiLGEtaS5sZW5ndGgpK2l9ZnVuY3Rpb24gQUFlKGksYSl7aWYoYT1PYmplY3QuY3JlYXRlKGF8fG51bGwpLCFpLmJ1ZmZlcilyZXR1cm4gbnVsbDthLm1heExlbmd0aHx8KGEubWF4TGVuZ3RoPTc5KSx0eXBlb2YgYS5pbmRlbnQhPSJudW1iZXIiJiYoYS5pbmRlbnQ9MSksdHlwZW9mIGEubGluZXNCZWZvcmUhPSJudW1iZXIiJiYoYS5saW5lc0JlZm9yZT0zKSx0eXBlb2YgYS5saW5lc0FmdGVyIT0ibnVtYmVyIiYmKGEubGluZXNBZnRlcj0yKTtmb3IodmFyIGY9L1xyP1xufFxyfFwwL2cscD1bMF0sdj1bXSxtLGI9LTE7bT1mLmV4ZWMoaS5idWZmZXIpOyl2LnB1c2gobS5pbmRleCkscC5wdXNoKG0uaW5kZXgrbVswXS5sZW5ndGgpLGkucG9zaXRpb248PW0uaW5kZXgmJmI8MCYmKGI9cC5sZW5ndGgtMik7YjwwJiYoYj1wLmxlbmd0aC0xKTt2YXIgRT0iIixfLEwsTj1NYXRoLm1pbihpLmxpbmUrYS5saW5lc0FmdGVyLHYubGVuZ3RoKS50b1N0cmluZygpLmxlbmd0aCxCPWEubWF4TGVuZ3RoLShhLmluZGVudCtOKzMpO2ZvcihfPTE7Xzw9YS5saW5lc0JlZm9yZSYmIShiLV88MCk7XysrKUw9VGR0KGkuYnVmZmVyLHBbYi1fXSx2W2ItX10saS5wb3NpdGlvbi0ocFtiXS1wW2ItX10pLEIpLEU9dWcucmVwZWF0KCIgIixhLmluZGVudCkrQ2R0KChpLmxpbmUtXysxKS50b1N0cmluZygpLE4pKyIgfCAiK0wuc3RyK2AKYCtFO2ZvcihMPVRkdChpLmJ1ZmZlcixwW2JdLHZbYl0saS5wb3NpdGlvbixCKSxFKz11Zy5yZXBlYXQoIiAiLGEuaW5kZW50KStDZHQoKGkubGluZSsxKS50b1N0cmluZygpLE4pKyIgfCAiK0wuc3RyK2AKYCxFKz11Zy5yZXBlYXQoIi0iLGEuaW5kZW50K04rMytMLnBvcykrYF4KYCxfPTE7Xzw9YS5saW5lc0FmdGVyJiYhKGIrXz49di5sZW5ndGgpO18rKylMPVRkdChpLmJ1ZmZlcixwW2IrX10sdltiK19dLGkucG9zaXRpb24tKHBbYl0tcFtiK19dKSxCKSxFKz11Zy5yZXBlYXQoIiAiLGEuaW5kZW50KStDZHQoKGkubGluZStfKzEpLnRvU3RyaW5nKCksTikrIiB8ICIrTC5zdHIrYApgO3JldHVybiBFLnJlcGxhY2UoL1xuJC8sIiIpfXZhciBMQWU9QUFlLE1BZT1bImtpbmQiLCJtdWx0aSIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwicmVwcmVzZW50TmFtZSIsImRlZmF1bHRTdHlsZSIsInN0eWxlQWxpYXNlcyJdLElBZT1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO2Z1bmN0aW9uIERBZShpKXt2YXIgYT17fTtyZXR1cm4gaSE9PW51bGwmJk9iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oZil7aVtmXS5mb3JFYWNoKGZ1bmN0aW9uKHApe2FbU3RyaW5nKHApXT1mfSl9KSxhfWZ1bmN0aW9uIE9BZShpLGEpe2lmKGE9YXx8e30sT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihmKXtpZihNQWUuaW5kZXhPZihmKT09PS0xKXRocm93IG5ldyB4NSgnVW5rbm93biBvcHRpb24gIicrZisnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJytpKyciIFlBTUwgdHlwZS4nKX0pLHRoaXMub3B0aW9ucz1hLHRoaXMudGFnPWksdGhpcy5raW5kPWEua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9YS5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD1hLmNvbnN0cnVjdHx8ZnVuY3Rpb24oZil7cmV0dXJuIGZ9LHRoaXMuaW5zdGFuY2VPZj1hLmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9YS5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9YS5yZXByZXNlbnR8fG51bGwsdGhpcy5yZXByZXNlbnROYW1lPWEucmVwcmVzZW50TmFtZXx8bnVsbCx0aGlzLmRlZmF1bHRTdHlsZT1hLmRlZmF1bHRTdHlsZXx8bnVsbCx0aGlzLm11bHRpPWEubXVsdGl8fCExLHRoaXMuc3R5bGVBbGlhc2VzPURBZShhLnN0eWxlQWxpYXNlc3x8bnVsbCksSUFlLmluZGV4T2YodGhpcy5raW5kKT09PS0xKXRocm93IG5ldyB4NSgnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK2krJyIgWUFNTCB0eXBlLicpfXZhciBtMD1PQWU7ZnVuY3Rpb24gek90KGksYSl7dmFyIGY9W107cmV0dXJuIGlbYV0uZm9yRWFjaChmdW5jdGlvbihwKXt2YXIgdj1mLmxlbmd0aDtmLmZvckVhY2goZnVuY3Rpb24obSxiKXttLnRhZz09PXAudGFnJiZtLmtpbmQ9PT1wLmtpbmQmJm0ubXVsdGk9PT1wLm11bHRpJiYodj1iKX0pLGZbdl09cH0pLGZ9ZnVuY3Rpb24gTkFlKCl7dmFyIGk9e3NjYWxhcjp7fSxzZXF1ZW5jZTp7fSxtYXBwaW5nOnt9LGZhbGxiYWNrOnt9LG11bHRpOntzY2FsYXI6W10sc2VxdWVuY2U6W10sbWFwcGluZzpbXSxmYWxsYmFjazpbXX19LGEsZjtmdW5jdGlvbiBwKHYpe3YubXVsdGk/KGkubXVsdGlbdi5raW5kXS5wdXNoKHYpLGkubXVsdGkuZmFsbGJhY2sucHVzaCh2KSk6aVt2LmtpbmRdW3YudGFnXT1pLmZhbGxiYWNrW3YudGFnXT12fWZvcihhPTAsZj1hcmd1bWVudHMubGVuZ3RoO2E8ZjthKz0xKWFyZ3VtZW50c1thXS5mb3JFYWNoKHApO3JldHVybiBpfWZ1bmN0aW9uIF9kdChpKXtyZXR1cm4gdGhpcy5leHRlbmQoaSl9X2R0LnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGY9W10scD1bXTtpZihhIGluc3RhbmNlb2YgbTApcC5wdXNoKGEpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSlwPXAuY29uY2F0KGEpO2Vsc2UgaWYoYSYmKEFycmF5LmlzQXJyYXkoYS5pbXBsaWNpdCl8fEFycmF5LmlzQXJyYXkoYS5leHBsaWNpdCkpKWEuaW1wbGljaXQmJihmPWYuY29uY2F0KGEuaW1wbGljaXQpKSxhLmV4cGxpY2l0JiYocD1wLmNvbmNhdChhLmV4cGxpY2l0KSk7ZWxzZSB0aHJvdyBuZXcgeDUoIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSkiKTtmLmZvckVhY2goZnVuY3Rpb24obSl7aWYoIShtIGluc3RhbmNlb2YgbTApKXRocm93IG5ldyB4NSgiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO2lmKG0ubG9hZEtpbmQmJm0ubG9hZEtpbmQhPT0ic2NhbGFyIil0aHJvdyBuZXcgeDUoIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIpO2lmKG0ubXVsdGkpdGhyb3cgbmV3IHg1KCJUaGVyZSBpcyBhIG11bHRpIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIE11bHRpIHRhZ3MgY2FuIG9ubHkgYmUgbGlzdGVkIGFzIGV4cGxpY2l0LiIpfSkscC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKCEobSBpbnN0YW5jZW9mIG0wKSl0aHJvdyBuZXcgeDUoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKX0pO3ZhciB2PU9iamVjdC5jcmVhdGUoX2R0LnByb3RvdHlwZSk7cmV0dXJuIHYuaW1wbGljaXQ9KHRoaXMuaW1wbGljaXR8fFtdKS5jb25jYXQoZiksdi5leHBsaWNpdD0odGhpcy5leHBsaWNpdHx8W10pLmNvbmNhdChwKSx2LmNvbXBpbGVkSW1wbGljaXQ9ek90KHYsImltcGxpY2l0Iiksdi5jb21waWxlZEV4cGxpY2l0PXpPdCh2LCJleHBsaWNpdCIpLHYuY29tcGlsZWRUeXBlTWFwPU5BZSh2LmNvbXBpbGVkSW1wbGljaXQsdi5jb21waWxlZEV4cGxpY2l0KSx2fTt2YXIgUEFlPV9kdCxGQWU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aToiIn19KSxCQWU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLHtraW5kOiJzZXF1ZW5jZSIsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3JldHVybiBpIT09bnVsbD9pOltdfX0pLFJBZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX19KSxqQWU9bmV3IFBBZSh7ZXhwbGljaXQ6W0ZBZSxCQWUsUkFlXX0pO2Z1bmN0aW9uICRBZShpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgYT1pLmxlbmd0aDtyZXR1cm4gYT09PTEmJmk9PT0ifiJ8fGE9PT00JiYoaT09PSJudWxsInx8aT09PSJOdWxsInx8aT09PSJOVUxMIil9ZnVuY3Rpb24gekFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcUFlKGkpe3JldHVybiBpPT09bnVsbH12YXIgSEFlPW5ldyBtMCgidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTokQWUsY29uc3RydWN0OnpBZSxwcmVkaWNhdGU6cUFlLHJlcHJlc2VudDp7Y2Fub25pY2FsOmZ1bmN0aW9uKCl7cmV0dXJuIn4ifSxsb3dlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LHVwcGVyY2FzZTpmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sY2FtZWxjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiIifX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7ZnVuY3Rpb24gR0FlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoO3JldHVybiBhPT09NCYmKGk9PT0idHJ1ZSJ8fGk9PT0iVHJ1ZSJ8fGk9PT0iVFJVRSIpfHxhPT09NSYmKGk9PT0iZmFsc2UifHxpPT09IkZhbHNlInx8aT09PSJGQUxTRSIpfWZ1bmN0aW9uIFZBZShpKXtyZXR1cm4gaT09PSJ0cnVlInx8aT09PSJUcnVlInx8aT09PSJUUlVFIn1mdW5jdGlvbiBVQWUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IEJvb2xlYW5dIn12YXIgV0FlPW5ldyBtMCgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpHQWUsY29uc3RydWN0OlZBZSxwcmVkaWNhdGU6VUFlLHJlcHJlc2VudDp7bG93ZXJjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJ0cnVlIjoiZmFsc2UifSx1cHBlcmNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/IlRSVUUiOiJGQUxTRSJ9LGNhbWVsY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8iVHJ1ZSI6IkZhbHNlIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO2Z1bmN0aW9uIEtBZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3fHw2NTw9aSYmaTw9NzB8fDk3PD1pJiZpPD0xMDJ9ZnVuY3Rpb24gWUFlKGkpe3JldHVybiA0ODw9aSYmaTw9NTV9ZnVuY3Rpb24gWEFlKGkpe3JldHVybiA0ODw9aSYmaTw9NTd9ZnVuY3Rpb24gUUFlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoLGY9MCxwPSExLHY7aWYoIWEpcmV0dXJuITE7aWYodj1pW2ZdLCh2PT09Ii0ifHx2PT09IisiKSYmKHY9aVsrK2ZdKSx2PT09IjAiKXtpZihmKzE9PT1hKXJldHVybiEwO2lmKHY9aVsrK2ZdLHY9PT0iYiIpe2ZvcihmKys7ZjxhO2YrKylpZih2PWlbZl0sdiE9PSJfIil7aWYodiE9PSIwIiYmdiE9PSIxIilyZXR1cm4hMTtwPSEwfXJldHVybiBwJiZ2IT09Il8ifWlmKHY9PT0ieCIpe2ZvcihmKys7ZjxhO2YrKylpZih2PWlbZl0sdiE9PSJfIil7aWYoIUtBZShpLmNoYXJDb2RlQXQoZikpKXJldHVybiExO3A9ITB9cmV0dXJuIHAmJnYhPT0iXyJ9aWYodj09PSJvIil7Zm9yKGYrKztmPGE7ZisrKWlmKHY9aVtmXSx2IT09Il8iKXtpZighWUFlKGkuY2hhckNvZGVBdChmKSkpcmV0dXJuITE7cD0hMH1yZXR1cm4gcCYmdiE9PSJfIn19aWYodj09PSJfIilyZXR1cm4hMTtmb3IoO2Y8YTtmKyspaWYodj1pW2ZdLHYhPT0iXyIpe2lmKCFYQWUoaS5jaGFyQ29kZUF0KGYpKSlyZXR1cm4hMTtwPSEwfXJldHVybiEoIXB8fHY9PT0iXyIpfWZ1bmN0aW9uIFpBZShpKXt2YXIgYT1pLGY9MSxwO2lmKGEuaW5kZXhPZigiXyIpIT09LTEmJihhPWEucmVwbGFjZSgvXy9nLCIiKSkscD1hWzBdLChwPT09Ii0ifHxwPT09IisiKSYmKHA9PT0iLSImJihmPS0xKSxhPWEuc2xpY2UoMSkscD1hWzBdKSxhPT09IjAiKXJldHVybiAwO2lmKHA9PT0iMCIpe2lmKGFbMV09PT0iYiIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSwyKTtpZihhWzFdPT09IngiKXJldHVybiBmKnBhcnNlSW50KGEuc2xpY2UoMiksMTYpO2lmKGFbMV09PT0ibyIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSw4KX1yZXR1cm4gZipwYXJzZUludChhLDEwKX1mdW5jdGlvbiBKQWUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IE51bWJlcl0iJiZpJTE9PT0wJiYhdWcuaXNOZWdhdGl2ZVplcm8oaSl9dmFyIHRMZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOmludCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpRQWUsY29uc3RydWN0OlpBZSxwcmVkaWNhdGU6SkFlLHJlcHJlc2VudDp7YmluYXJ5OmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIwYiIraS50b1N0cmluZygyKToiLTBiIitpLnRvU3RyaW5nKDIpLnNsaWNlKDEpfSxvY3RhbDpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMG8iK2kudG9TdHJpbmcoOCk6Ii0wbyIraS50b1N0cmluZyg4KS5zbGljZSgxKX0sZGVjaW1hbDpmdW5jdGlvbihpKXtyZXR1cm4gaS50b1N0cmluZygxMCl9LGhleGFkZWNpbWFsOmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIweCIraS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4IitpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pLGVMZT1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7ZnVuY3Rpb24gbkxlKGkpe3JldHVybiEoaT09PW51bGx8fCFlTGUudGVzdChpKXx8aVtpLmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gckxlKGkpe3ZhciBhLGY7cmV0dXJuIGE9aS5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCksZj1hWzBdPT09Ii0iPy0xOjEsIistIi5pbmRleE9mKGFbMF0pPj0wJiYoYT1hLnNsaWNlKDEpKSxhPT09Ii5pbmYiP2Y9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6YT09PSIubmFuIj9OYU46ZipwYXJzZUZsb2F0KGEsMTApfXZhciBpTGU9L15bLStdP1swLTldK2UvO2Z1bmN0aW9uIHNMZShpLGEpe3ZhciBmO2lmKGlzTmFOKGkpKXN3aXRjaChhKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PWkpc3dpdGNoKGEpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09aSlzd2l0Y2goYSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZih1Zy5pc05lZ2F0aXZlWmVybyhpKSlyZXR1cm4iLTAuMCI7cmV0dXJuIGY9aS50b1N0cmluZygxMCksaUxlLnRlc3QoZik/Zi5yZXBsYWNlKCJlIiwiLmUiKTpmfWZ1bmN0aW9uIGFMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgTnVtYmVyXSImJihpJTEhPT0wfHx1Zy5pc05lZ2F0aXZlWmVybyhpKSl9dmFyIG9MZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOm5MZSxjb25zdHJ1Y3Q6ckxlLHByZWRpY2F0ZTphTGUscmVwcmVzZW50OnNMZSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KSxxT3Q9akFlLmV4dGVuZCh7aW1wbGljaXQ6W0hBZSxXQWUsdExlLG9MZV19KSxjTGU9cU90LEhPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIpLEdPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO2Z1bmN0aW9uIHVMZShpKXtyZXR1cm4gaT09PW51bGw/ITE6SE90LmV4ZWMoaSkhPT1udWxsfHxHT3QuZXhlYyhpKSE9PW51bGx9ZnVuY3Rpb24gbExlKGkpe3ZhciBhLGYscCx2LG0sYixFLF89MCxMPW51bGwsTixCLGo7aWYoYT1IT3QuZXhlYyhpKSxhPT09bnVsbCYmKGE9R090LmV4ZWMoaSkpLGE9PT1udWxsKXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYoZj0rYVsxXSxwPSthWzJdLTEsdj0rYVszXSwhYVs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZixwLHYpKTtpZihtPSthWzRdLGI9K2FbNV0sRT0rYVs2XSxhWzddKXtmb3IoXz1hWzddLnNsaWNlKDAsMyk7Xy5sZW5ndGg8MzspXys9IjAiO189K199cmV0dXJuIGFbOV0mJihOPSthWzEwXSxCPSsoYVsxMV18fDApLEw9KE4qNjArQikqNmU0LGFbOV09PT0iLSImJihMPS1MKSksaj1uZXcgRGF0ZShEYXRlLlVUQyhmLHAsdixtLGIsRSxfKSksTCYmai5zZXRUaW1lKGouZ2V0VGltZSgpLUwpLGp9ZnVuY3Rpb24gaExlKGkpe3JldHVybiBpLnRvSVNPU3RyaW5nKCl9dmFyIGZMZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTp1TGUsY29uc3RydWN0OmxMZSxpbnN0YW5jZU9mOkRhdGUscmVwcmVzZW50OmhMZX0pO2Z1bmN0aW9uIGRMZShpKXtyZXR1cm4gaT09PSI8PCJ8fGk9PT1udWxsfXZhciBnTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpkTGV9KSxTZHQ9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89ClxyYDtmdW5jdGlvbiBwTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITE7dmFyIGEsZixwPTAsdj1pLmxlbmd0aCxtPVNkdDtmb3IoZj0wO2Y8djtmKyspaWYoYT1tLmluZGV4T2YoaS5jaGFyQXQoZikpLCEoYT42NCkpe2lmKGE8MClyZXR1cm4hMTtwKz02fXJldHVybiBwJTg9PT0wfWZ1bmN0aW9uIGJMZShpKXt2YXIgYSxmLHA9aS5yZXBsYWNlKC9bXHJcbj1dL2csIiIpLHY9cC5sZW5ndGgsbT1TZHQsYj0wLEU9W107Zm9yKGE9MDthPHY7YSsrKWElND09PTAmJmEmJihFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpLGI9Yjw8NnxtLmluZGV4T2YocC5jaGFyQXQoYSkpO3JldHVybiBmPXYlNCo2LGY9PT0wPyhFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpOmY9PT0xOD8oRS5wdXNoKGI+PjEwJjI1NSksRS5wdXNoKGI+PjImMjU1KSk6Zj09PTEyJiZFLnB1c2goYj4+NCYyNTUpLG5ldyBVaW50OEFycmF5KEUpfWZ1bmN0aW9uIHZMZShpKXt2YXIgYT0iIixmPTAscCx2LG09aS5sZW5ndGgsYj1TZHQ7Zm9yKHA9MDtwPG07cCsrKXAlMz09PTAmJnAmJihhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pLGY9KGY8PDgpK2lbcF07cmV0dXJuIHY9bSUzLHY9PT0wPyhhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pOnY9PT0yPyhhKz1iW2Y+PjEwJjYzXSxhKz1iW2Y+PjQmNjNdLGErPWJbZjw8MiY2M10sYSs9Yls2NF0pOnY9PT0xJiYoYSs9YltmPj4yJjYzXSxhKz1iW2Y8PDQmNjNdLGErPWJbNjRdLGErPWJbNjRdKSxhfWZ1bmN0aW9uIHdMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgVWludDhBcnJheV0ifXZhciBtTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cExlLGNvbnN0cnVjdDpiTGUscHJlZGljYXRlOndMZSxyZXByZXNlbnQ6dkxlfSkseUxlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkseExlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24ga0xlKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhPVtdLGYscCx2LG0sYixFPWk7Zm9yKGY9MCxwPUUubGVuZ3RoO2Y8cDtmKz0xKXtpZih2PUVbZl0sYj0hMSx4TGUuY2FsbCh2KSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihtIGluIHYpaWYoeUxlLmNhbGwodixtKSlpZighYiliPSEwO2Vsc2UgcmV0dXJuITE7aWYoIWIpcmV0dXJuITE7aWYoYS5pbmRleE9mKG0pPT09LTEpYS5wdXNoKG0pO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gRUxlKGkpe3JldHVybiBpIT09bnVsbD9pOltdfXZhciBUTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6a0xlLGNvbnN0cnVjdDpFTGV9KSxDTGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBfTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIGEsZixwLHYsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSl7aWYocD1iW2FdLENMZS5jYWxsKHApIT09IltvYmplY3QgT2JqZWN0XSJ8fCh2PU9iamVjdC5rZXlzKHApLHYubGVuZ3RoIT09MSkpcmV0dXJuITE7bVthXT1bdlswXSxwW3ZbMF1dXX1yZXR1cm4hMH1mdW5jdGlvbiBTTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuW107dmFyIGEsZixwLHYsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSlwPWJbYV0sdj1PYmplY3Qua2V5cyhwKSxtW2FdPVt2WzBdLHBbdlswXV1dO3JldHVybiBtfXZhciBBTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOl9MZSxjb25zdHJ1Y3Q6U0xlfSksTExlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTUxlKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhLGY9aTtmb3IoYSBpbiBmKWlmKExMZS5jYWxsKGYsYSkmJmZbYV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIElMZShpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX12YXIgRExlPW5ldyBtMCgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTpNTGUsY29uc3RydWN0OklMZX0pLE9MZT1jTGUuZXh0ZW5kKHtpbXBsaWNpdDpbZkxlLGdMZV0sZXhwbGljaXQ6W21MZSxUTGUsQUxlLERMZV19KSxyaz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFBXPTEsVk90PTIsVU90PTMsRlc9NCxBZHQ9MSxOTGU9MixXT3Q9MyxQTGU9L1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg4NFx4ODYtXHg5Rlx1RkZGRVx1RkZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxGTGU9L1tceDg1XHUyMDI4XHUyMDI5XS8sQkxlPS9bLFxbXF1ce1x9XS8sS090PS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSxZT3Q9L14oPzohfFteLFxbXF1ce1x9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelwtIztcL1w/OkAmPVwrXCQsX1wuIX5cKidcKFwpXFtcXV0pKiQvaTtmdW5jdGlvbiBYT3QoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKX1mdW5jdGlvbiBmMyhpKXtyZXR1cm4gaT09PTEwfHxpPT09MTN9ZnVuY3Rpb24gbFQoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ9ZnVuY3Rpb24gbHAoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ8fGk9PT0xMHx8aT09PTEzfWZ1bmN0aW9uIFVBKGkpe3JldHVybiBpPT09NDR8fGk9PT05MXx8aT09PTkzfHxpPT09MTIzfHxpPT09MTI1fWZ1bmN0aW9uIFJMZShpKXt2YXIgYTtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6KGE9aXwzMiw5Nzw9YSYmYTw9MTAyP2EtOTcrMTA6LTEpfWZ1bmN0aW9uIGpMZShpKXtyZXR1cm4gaT09PTEyMD8yOmk9PT0xMTc/NDppPT09ODU/ODowfWZ1bmN0aW9uICRMZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6LTF9ZnVuY3Rpb24gUU90KGkpe3JldHVybiBpPT09NDg/IlwwIjppPT09OTc/Ilx4MDciOmk9PT05OD8iXGIiOmk9PT0xMTZ8fGk9PT05PyIJIjppPT09MTEwP2AKYDppPT09MTE4PyJcdiI6aT09PTEwMj8iXGYiOmk9PT0xMTQ/IlxyIjppPT09MTAxPyJceDFCIjppPT09MzI/IiAiOmk9PT0zND8nIic6aT09PTQ3PyIvIjppPT09OTI/IlxcIjppPT09Nzg/IsKFIjppPT09OTU/IsKgIjppPT09NzY/Ilx1MjAyOCI6aT09PTgwPyJcdTIwMjkiOiIifWZ1bmN0aW9uIHpMZShpKXtyZXR1cm4gaTw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZShpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKChpLTY1NTM2Pj4xMCkrNTUyOTYsKGktNjU1MzYmMTAyMykrNTYzMjApfWZvcih2YXIgWk90PW5ldyBBcnJheSgyNTYpLEpPdD1uZXcgQXJyYXkoMjU2KSxXQT0wO1dBPDI1NjtXQSsrKVpPdFtXQV09UU90KFdBKT8xOjAsSk90W1dBXT1RT3QoV0EpO2Z1bmN0aW9uIHFMZShpLGEpe3RoaXMuaW5wdXQ9aSx0aGlzLmZpbGVuYW1lPWEuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9YS5zY2hlbWF8fE9MZSx0aGlzLm9uV2FybmluZz1hLm9uV2FybmluZ3x8bnVsbCx0aGlzLmxlZ2FjeT1hLmxlZ2FjeXx8ITEsdGhpcy5qc29uPWEuanNvbnx8ITEsdGhpcy5saXN0ZW5lcj1hLmxpc3RlbmVyfHxudWxsLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMudHlwZU1hcD10aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXAsdGhpcy5sZW5ndGg9aS5sZW5ndGgsdGhpcy5wb3NpdGlvbj0wLHRoaXMubGluZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lSW5kZW50PTAsdGhpcy5maXJzdFRhYkluTGluZT0tMSx0aGlzLmRvY3VtZW50cz1bXX1mdW5jdGlvbiB0TnQoaSxhKXt2YXIgZj17bmFtZTppLmZpbGVuYW1lLGJ1ZmZlcjppLmlucHV0LnNsaWNlKDAsLTEpLHBvc2l0aW9uOmkucG9zaXRpb24sbGluZTppLmxpbmUsY29sdW1uOmkucG9zaXRpb24taS5saW5lU3RhcnR9O3JldHVybiBmLnNuaXBwZXQ9TEFlKGYpLG5ldyB4NShhLGYpfWZ1bmN0aW9uIF9zKGksYSl7dGhyb3cgdE50KGksYSl9ZnVuY3Rpb24gQlcoaSxhKXtpLm9uV2FybmluZyYmaS5vbldhcm5pbmcuY2FsbChudWxsLHROdChpLGEpKX12YXIgZU50PXtZQU1MOmZ1bmN0aW9uKGEsZixwKXt2YXIgdixtLGI7YS52ZXJzaW9uIT09bnVsbCYmX3MoYSwiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIikscC5sZW5ndGghPT0xJiZfcyhhLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iiksdj0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMocFswXSksdj09PW51bGwmJl9zKGEsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIiksbT1wYXJzZUludCh2WzFdLDEwKSxiPXBhcnNlSW50KHZbMl0sMTApLG0hPT0xJiZfcyhhLCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpLGEudmVyc2lvbj1wWzBdLGEuY2hlY2tMaW5lQnJlYWtzPWI8MixiIT09MSYmYiE9PTImJkJXKGEsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGEsZixwKXt2YXIgdixtO3AubGVuZ3RoIT09MiYmX3MoYSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLHY9cFswXSxtPXBbMV0sS090LnRlc3Qodil8fF9zKGEsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIikscmsuY2FsbChhLnRhZ01hcCx2KSYmX3MoYSwndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIicrdisnIiB0YWcgaGFuZGxlJyksWU90LnRlc3QobSl8fF9zKGEsImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpO3RyeXttPWRlY29kZVVSSUNvbXBvbmVudChtKX1jYXRjaHtfcyhhLCJ0YWcgcHJlZml4IGlzIG1hbGZvcm1lZDogIittKX1hLnRhZ01hcFt2XT1tfX07ZnVuY3Rpb24gaWsoaSxhLGYscCl7dmFyIHYsbSxiLEU7aWYoYTxmKXtpZihFPWkuaW5wdXQuc2xpY2UoYSxmKSxwKWZvcih2PTAsbT1FLmxlbmd0aDt2PG07dis9MSliPUUuY2hhckNvZGVBdCh2KSxiPT09OXx8MzI8PWImJmI8PTExMTQxMTF8fF9zKGksImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSBQTGUudGVzdChFKSYmX3MoaSwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTtpLnJlc3VsdCs9RX19ZnVuY3Rpb24gbk50KGksYSxmLHApe3ZhciB2LG0sYixFO2Zvcih1Zy5pc09iamVjdChmKXx8X3MoaSwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSx2PU9iamVjdC5rZXlzKGYpLGI9MCxFPXYubGVuZ3RoO2I8RTtiKz0xKW09dltiXSxyay5jYWxsKGEsbSl8fChhW21dPWZbbV0scFttXT0hMCl9ZnVuY3Rpb24gS0EoaSxhLGYscCx2LG0sYixFLF8pe3ZhciBMLE47aWYoQXJyYXkuaXNBcnJheSh2KSlmb3Iodj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2KSxMPTAsTj12Lmxlbmd0aDtMPE47TCs9MSlBcnJheS5pc0FycmF5KHZbTF0pJiZfcyhpLCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIiksdHlwZW9mIHY9PSJvYmplY3QiJiZYT3QodltMXSk9PT0iW29iamVjdCBPYmplY3RdIiYmKHZbTF09IltvYmplY3QgT2JqZWN0XSIpO2lmKHR5cGVvZiB2PT0ib2JqZWN0IiYmWE90KHYpPT09IltvYmplY3QgT2JqZWN0XSImJih2PSJbb2JqZWN0IE9iamVjdF0iKSx2PVN0cmluZyh2KSxhPT09bnVsbCYmKGE9e30pLHA9PT0idGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKWlmKEFycmF5LmlzQXJyYXkobSkpZm9yKEw9MCxOPW0ubGVuZ3RoO0w8TjtMKz0xKW5OdChpLGEsbVtMXSxmKTtlbHNlIG5OdChpLGEsbSxmKTtlbHNlIWkuanNvbiYmIXJrLmNhbGwoZix2KSYmcmsuY2FsbChhLHYpJiYoaS5saW5lPWJ8fGkubGluZSxpLmxpbmVTdGFydD1FfHxpLmxpbmVTdGFydCxpLnBvc2l0aW9uPV98fGkucG9zaXRpb24sX3MoaSwiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpKSx2PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bX0pOmFbdl09bSxkZWxldGUgZlt2XTtyZXR1cm4gYX1mdW5jdGlvbiBMZHQoaSl7dmFyIGE7YT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYT09PTEwP2kucG9zaXRpb24rKzphPT09MTM/KGkucG9zaXRpb24rKyxpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik9PT0xMCYmaS5wb3NpdGlvbisrKTpfcyhpLCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSxpLmxpbmUrPTEsaS5saW5lU3RhcnQ9aS5wb3NpdGlvbixpLmZpcnN0VGFiSW5MaW5lPS0xfWZ1bmN0aW9uIERmKGksYSxmKXtmb3IodmFyIHA9MCx2PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTt2IT09MDspe2Zvcig7bFQodik7KXY9PT05JiZpLmZpcnN0VGFiSW5MaW5lPT09LTEmJihpLmZpcnN0VGFiSW5MaW5lPWkucG9zaXRpb24pLHY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYSYmdj09PTM1KWRvIHY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUodiE9PTEwJiZ2IT09MTMmJnYhPT0wKTtpZihmMyh2KSlmb3IoTGR0KGkpLHY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHArKyxpLmxpbmVJbmRlbnQ9MDt2PT09MzI7KWkubGluZUluZGVudCsrLHY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gZiE9PS0xJiZwIT09MCYmaS5saW5lSW5kZW50PGYmJkJXKGksImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLHB9ZnVuY3Rpb24gUlcoaSl7dmFyIGE9aS5wb3NpdGlvbixmO3JldHVybiBmPWkuaW5wdXQuY2hhckNvZGVBdChhKSwhISgoZj09PTQ1fHxmPT09NDYpJiZmPT09aS5pbnB1dC5jaGFyQ29kZUF0KGErMSkmJmY9PT1pLmlucHV0LmNoYXJDb2RlQXQoYSsyKSYmKGErPTMsZj1pLmlucHV0LmNoYXJDb2RlQXQoYSksZj09PTB8fGxwKGYpKSl9ZnVuY3Rpb24gTWR0KGksYSl7YT09PTE/aS5yZXN1bHQrPSIgIjphPjEmJihpLnJlc3VsdCs9dWcucmVwZWF0KGAKYCxhLTEpKX1mdW5jdGlvbiBITGUoaSxhLGYpe3ZhciBwLHYsbSxiLEUsXyxMLE4sQj1pLmtpbmQsaj1pLnJlc3VsdCxSO2lmKFI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGxwKFIpfHxVQShSKXx8Uj09PTM1fHxSPT09Mzh8fFI9PT00Mnx8Uj09PTMzfHxSPT09MTI0fHxSPT09NjJ8fFI9PT0zOXx8Uj09PTM0fHxSPT09Mzd8fFI9PT02NHx8Uj09PTk2fHwoUj09PTYzfHxSPT09NDUpJiYodj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxscCh2KXx8ZiYmVUEodikpKXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsbT1iPWkucG9zaXRpb24sRT0hMTtSIT09MDspe2lmKFI9PT01OCl7aWYodj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxscCh2KXx8ZiYmVUEodikpYnJlYWt9ZWxzZSBpZihSPT09MzUpe2lmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24tMSksbHAocCkpYnJlYWt9ZWxzZXtpZihpLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJlJXKGkpfHxmJiZVQShSKSlicmVhaztpZihmMyhSKSlpZihfPWkubGluZSxMPWkubGluZVN0YXJ0LE49aS5saW5lSW5kZW50LERmKGksITEsLTEpLGkubGluZUluZGVudD49YSl7RT0hMCxSPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtjb250aW51ZX1lbHNle2kucG9zaXRpb249YixpLmxpbmU9XyxpLmxpbmVTdGFydD1MLGkubGluZUluZGVudD1OO2JyZWFrfX1FJiYoaWsoaSxtLGIsITEpLE1kdChpLGkubGluZS1fKSxtPWI9aS5wb3NpdGlvbixFPSExKSxsVChSKXx8KGI9aS5wb3NpdGlvbisxKSxSPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pfXJldHVybiBpayhpLG0sYiwhMSksaS5yZXN1bHQ/ITA6KGkua2luZD1CLGkucmVzdWx0PWosITEpfWZ1bmN0aW9uIEdMZShpLGEpe3ZhciBmLHAsdjtpZihmPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxmIT09MzkpcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIixpLnBvc2l0aW9uKysscD12PWkucG9zaXRpb247KGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSE9PTA7KWlmKGY9PT0zOSlpZihpayhpLHAsaS5wb3NpdGlvbiwhMCksZj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxmPT09MzkpcD1pLnBvc2l0aW9uLGkucG9zaXRpb24rKyx2PWkucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIGYzKGYpPyhpayhpLHAsdiwhMCksTWR0KGksRGYoaSwhMSxhKSkscD12PWkucG9zaXRpb24pOmkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmUlcoaSk/X3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KGkucG9zaXRpb24rKyx2PWkucG9zaXRpb24pO19zKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBWTGUoaSxhKXt2YXIgZixwLHYsbSxiLEU7aWYoRT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksRSE9PTM0KXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsaS5wb3NpdGlvbisrLGY9cD1pLnBvc2l0aW9uOyhFPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wOyl7aWYoRT09PTM0KXJldHVybiBpayhpLGYsaS5wb3NpdGlvbiwhMCksaS5wb3NpdGlvbisrLCEwO2lmKEU9PT05Mil7aWYoaWsoaSxmLGkucG9zaXRpb24sITApLEU9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksZjMoRSkpRGYoaSwhMSxhKTtlbHNlIGlmKEU8MjU2JiZaT3RbRV0paS5yZXN1bHQrPUpPdFtFXSxpLnBvc2l0aW9uKys7ZWxzZSBpZigoYj1qTGUoRSkpPjApe2Zvcih2PWIsbT0wO3Y+MDt2LS0pRT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSwoYj1STGUoRSkpPj0wP209KG08PDQpK2I6X3MoaSwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7aS5yZXN1bHQrPXpMZShtKSxpLnBvc2l0aW9uKyt9ZWxzZSBfcyhpLCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO2Y9cD1pLnBvc2l0aW9ufWVsc2UgZjMoRSk/KGlrKGksZixwLCEwKSxNZHQoaSxEZihpLCExLGEpKSxmPXA9aS5wb3NpdGlvbik6aS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZSVyhpKT9fcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKTooaS5wb3NpdGlvbisrLHA9aS5wb3NpdGlvbil9X3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIFVMZShpLGEpe3ZhciBmPSEwLHAsdixtLGI9aS50YWcsRSxfPWkuYW5jaG9yLEwsTixCLGosUix6PU9iamVjdC5jcmVhdGUobnVsbCksSyxpdCxzdCx1dDtpZih1dD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdXQ9PT05MSlOPTkzLFI9ITEsRT1bXTtlbHNlIGlmKHV0PT09MTIzKU49MTI1LFI9ITAsRT17fTtlbHNlIHJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09RSksdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7dXQhPT0wOyl7aWYoRGYoaSwhMCxhKSx1dD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdXQ9PT1OKXJldHVybiBpLnBvc2l0aW9uKyssaS50YWc9YixpLmFuY2hvcj1fLGkua2luZD1SPyJtYXBwaW5nIjoic2VxdWVuY2UiLGkucmVzdWx0PUUsITA7Zj91dD09PTQ0JiZfcyhpLCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnIik6X3MoaSwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSxpdD1LPXN0PW51bGwsQj1qPSExLHV0PT09NjMmJihMPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLGxwKEwpJiYoQj1qPSEwLGkucG9zaXRpb24rKyxEZihpLCEwLGEpKSkscD1pLmxpbmUsdj1pLmxpbmVTdGFydCxtPWkucG9zaXRpb24sWUEoaSxhLFBXLCExLCEwKSxpdD1pLnRhZyxLPWkucmVzdWx0LERmKGksITAsYSksdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChqfHxpLmxpbmU9PT1wKSYmdXQ9PT01OCYmKEI9ITAsdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksRGYoaSwhMCxhKSxZQShpLGEsUFcsITEsITApLHN0PWkucmVzdWx0KSxSP0tBKGksRSx6LGl0LEssc3QscCx2LG0pOkI/RS5wdXNoKEtBKGksbnVsbCx6LGl0LEssc3QscCx2LG0pKTpFLnB1c2goSyksRGYoaSwhMCxhKSx1dD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdXQ9PT00ND8oZj0hMCx1dD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Zj0hMX1fcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIFdMZShpLGEpe3ZhciBmLHAsdj1BZHQsbT0hMSxiPSExLEU9YSxfPTAsTD0hMSxOLEI7aWYoQj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksQj09PTEyNClwPSExO2Vsc2UgaWYoQj09PTYyKXA9ITA7ZWxzZSByZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiO0IhPT0wOylpZihCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLEI9PT00M3x8Qj09PTQ1KUFkdD09PXY/dj1CPT09NDM/V090Ok5MZTpfcyhpLCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChOPSRMZShCKSk+PTApTj09PTA/X3MoaSwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOmI/X3MoaSwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTooRT1hK04tMSxiPSEwKTtlbHNlIGJyZWFrO2lmKGxUKEIpKXtkbyBCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGxUKEIpKTtpZihCPT09MzUpZG8gQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZSghZjMoQikmJkIhPT0wKX1mb3IoO0IhPT0wOyl7Zm9yKExkdChpKSxpLmxpbmVJbmRlbnQ9MCxCPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTsoIWJ8fGkubGluZUluZGVudDxFKSYmQj09PTMyOylpLmxpbmVJbmRlbnQrKyxCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKCFiJiZpLmxpbmVJbmRlbnQ+RSYmKEU9aS5saW5lSW5kZW50KSxmMyhCKSl7XysrO2NvbnRpbnVlfWlmKGkubGluZUluZGVudDxFKXt2PT09V090P2kucmVzdWx0Kz11Zy5yZXBlYXQoYApgLG0/MStfOl8pOnY9PT1BZHQmJm0mJihpLnJlc3VsdCs9YApgKTticmVha31mb3IocD9sVChCKT8oTD0hMCxpLnJlc3VsdCs9dWcucmVwZWF0KGAKYCxtPzErXzpfKSk6TD8oTD0hMSxpLnJlc3VsdCs9dWcucmVwZWF0KGAKYCxfKzEpKTpfPT09MD9tJiYoaS5yZXN1bHQrPSIgIik6aS5yZXN1bHQrPXVnLnJlcGVhdChgCmAsXyk6aS5yZXN1bHQrPXVnLnJlcGVhdChgCmAsbT8xK186XyksbT0hMCxiPSEwLF89MCxmPWkucG9zaXRpb247IWYzKEIpJiZCIT09MDspQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpayhpLGYsaS5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gck50KGksYSl7dmFyIGYscD1pLnRhZyx2PWkuYW5jaG9yLG09W10sYixFPSExLF87aWYoaS5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09bSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7XyE9PTAmJihpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsX3MoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSwhKF8hPT00NXx8KGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksIWxwKGIpKSkpOyl7aWYoRT0hMCxpLnBvc2l0aW9uKyssRGYoaSwhMCwtMSkmJmkubGluZUluZGVudDw9YSl7bS5wdXNoKG51bGwpLF89aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2NvbnRpbnVlfWlmKGY9aS5saW5lLFlBKGksYSxVT3QsITEsITApLG0ucHVzaChpLnJlc3VsdCksRGYoaSwhMCwtMSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksKGkubGluZT09PWZ8fGkubGluZUluZGVudD5hKSYmXyE9PTApX3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxhKWJyZWFrfXJldHVybiBFPyhpLnRhZz1wLGkuYW5jaG9yPXYsaS5raW5kPSJzZXF1ZW5jZSIsaS5yZXN1bHQ9bSwhMCk6ITF9ZnVuY3Rpb24gS0xlKGksYSxmKXt2YXIgcCx2LG0sYixFLF8sTD1pLnRhZyxOPWkuYW5jaG9yLEI9e30saj1PYmplY3QuY3JlYXRlKG51bGwpLFI9bnVsbCx6PW51bGwsSz1udWxsLGl0PSExLHN0PSExLHV0O2lmKGkuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPUIpLHV0PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTt1dCE9PTA7KXtpZighaXQmJmkuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKGkucG9zaXRpb249aS5maXJzdFRhYkluTGluZSxfcyhpLCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksbT1pLmxpbmUsKHV0PT09NjN8fHV0PT09NTgpJiZscChwKSl1dD09PTYzPyhpdCYmKEtBKGksQixqLFIseixudWxsLGIsRSxfKSxSPXo9Sz1udWxsKSxzdD0hMCxpdD0hMCx2PSEwKTppdD8oaXQ9ITEsdj0hMCk6X3MoaSwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLGkucG9zaXRpb24rPTEsdXQ9cDtlbHNle2lmKGI9aS5saW5lLEU9aS5saW5lU3RhcnQsXz1pLnBvc2l0aW9uLCFZQShpLGYsVk90LCExLCEwKSlicmVhaztpZihpLmxpbmU9PT1tKXtmb3IodXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2xUKHV0KTspdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYodXQ9PT01OCl1dD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxscCh1dCl8fF9zKGksImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLGl0JiYoS0EoaSxCLGosUix6LG51bGwsYixFLF8pLFI9ej1LPW51bGwpLHN0PSEwLGl0PSExLHY9ITEsUj1pLnRhZyx6PWkucmVzdWx0O2Vsc2UgaWYoc3QpX3MoaSwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTtlbHNlIHJldHVybiBpLnRhZz1MLGkuYW5jaG9yPU4sITB9ZWxzZSBpZihzdClfcyhpLCJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTtlbHNlIHJldHVybiBpLnRhZz1MLGkuYW5jaG9yPU4sITB9aWYoKGkubGluZT09PW18fGkubGluZUluZGVudD5hKSYmKGl0JiYoYj1pLmxpbmUsRT1pLmxpbmVTdGFydCxfPWkucG9zaXRpb24pLFlBKGksYSxGVywhMCx2KSYmKGl0P3o9aS5yZXN1bHQ6Sz1pLnJlc3VsdCksaXR8fChLQShpLEIsaixSLHosSyxiLEUsXyksUj16PUs9bnVsbCksRGYoaSwhMCwtMSksdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSwoaS5saW5lPT09bXx8aS5saW5lSW5kZW50PmEpJiZ1dCE9PTApX3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYoaS5saW5lSW5kZW50PGEpYnJlYWt9cmV0dXJuIGl0JiZLQShpLEIsaixSLHosbnVsbCxiLEUsXyksc3QmJihpLnRhZz1MLGkuYW5jaG9yPU4saS5raW5kPSJtYXBwaW5nIixpLnJlc3VsdD1CKSxzdH1mdW5jdGlvbiBZTGUoaSl7dmFyIGEsZj0hMSxwPSExLHYsbSxiO2lmKGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGIhPT0zMylyZXR1cm4hMTtpZihpLnRhZyE9PW51bGwmJl9zKGksImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5IiksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxiPT09NjA/KGY9ITAsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Yj09PTMzPyhwPSEwLHY9IiEhIixiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTp2PSIhIixhPWkucG9zaXRpb24sZil7ZG8gYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShiIT09MCYmYiE9PTYyKTtpLnBvc2l0aW9uPGkubGVuZ3RoPyhtPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTpfcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIpfWVsc2V7Zm9yKDtiIT09MCYmIWxwKGIpOyliPT09MzMmJihwP19zKGksInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKToodj1pLmlucHV0LnNsaWNlKGEtMSxpLnBvc2l0aW9uKzEpLEtPdC50ZXN0KHYpfHxfcyhpLCJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpLHA9ITAsYT1pLnBvc2l0aW9uKzEpKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO209aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLEJMZS50ZXN0KG0pJiZfcyhpLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKX1tJiYhWU90LnRlc3QobSkmJl9zKGksInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIittKTt0cnl7bT1kZWNvZGVVUklDb21wb25lbnQobSl9Y2F0Y2h7X3MoaSwidGFnIG5hbWUgaXMgbWFsZm9ybWVkOiAiK20pfXJldHVybiBmP2kudGFnPW06cmsuY2FsbChpLnRhZ01hcCx2KT9pLnRhZz1pLnRhZ01hcFt2XSttOnY9PT0iISI/aS50YWc9IiEiK206dj09PSIhISI/aS50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrbTpfcyhpLCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicrdisnIicpLCEwfWZ1bmN0aW9uIFhMZShpKXt2YXIgYSxmO2lmKGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGYhPT0zOClyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiZfcyhpLCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxmPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtmIT09MCYmIWxwKGYpJiYhVUEoZik7KWY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZfcyhpLCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksaS5hbmNob3I9aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLCEwfWZ1bmN0aW9uIFFMZShpKXt2YXIgYSxmLHA7aWYocD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikscCE9PTQyKXJldHVybiExO2ZvcihwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtwIT09MCYmIWxwKHApJiYhVUEocCk7KXA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZfcyhpLCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxmPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxyay5jYWxsKGkuYW5jaG9yTWFwLGYpfHxfcyhpLCd1bmlkZW50aWZpZWQgYWxpYXMgIicrZisnIicpLGkucmVzdWx0PWkuYW5jaG9yTWFwW2ZdLERmKGksITAsLTEpLCEwfWZ1bmN0aW9uIFlBKGksYSxmLHAsdil7dmFyIG0sYixFLF89MSxMPSExLE49ITEsQixqLFIseixLLGl0O2lmKGkubGlzdGVuZXIhPT1udWxsJiZpLmxpc3RlbmVyKCJvcGVuIixpKSxpLnRhZz1udWxsLGkuYW5jaG9yPW51bGwsaS5raW5kPW51bGwsaS5yZXN1bHQ9bnVsbCxtPWI9RT1GVz09PWZ8fFVPdD09PWYscCYmRGYoaSwhMCwtMSkmJihMPSEwLGkubGluZUluZGVudD5hP189MTppLmxpbmVJbmRlbnQ9PT1hP189MDppLmxpbmVJbmRlbnQ8YSYmKF89LTEpKSxfPT09MSlmb3IoO1lMZShpKXx8WExlKGkpOylEZihpLCEwLC0xKT8oTD0hMCxFPW0saS5saW5lSW5kZW50PmE/Xz0xOmkubGluZUluZGVudD09PWE/Xz0wOmkubGluZUluZGVudDxhJiYoXz0tMSkpOkU9ITE7aWYoRSYmKEU9THx8diksKF89PT0xfHxGVz09PWYpJiYoUFc9PT1mfHxWT3Q9PT1mP0s9YTpLPWErMSxpdD1pLnBvc2l0aW9uLWkubGluZVN0YXJ0LF89PT0xP0UmJihyTnQoaSxpdCl8fEtMZShpLGl0LEspKXx8VUxlKGksSyk/Tj0hMDooYiYmV0xlKGksSyl8fEdMZShpLEspfHxWTGUoaSxLKT9OPSEwOlFMZShpKT8oTj0hMCwoaS50YWchPT1udWxsfHxpLmFuY2hvciE9PW51bGwpJiZfcyhpLCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTpITGUoaSxLLFBXPT09ZikmJihOPSEwLGkudGFnPT09bnVsbCYmKGkudGFnPSI/IikpLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCkpOl89PT0wJiYoTj1FJiZyTnQoaSxpdCkpKSxpLnRhZz09PW51bGwpaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KTtlbHNlIGlmKGkudGFnPT09Ij8iKXtmb3IoaS5yZXN1bHQhPT1udWxsJiZpLmtpbmQhPT0ic2NhbGFyIiYmX3MoaSwndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInK2kua2luZCsnIicpLEI9MCxqPWkuaW1wbGljaXRUeXBlcy5sZW5ndGg7QjxqO0IrPTEpaWYoej1pLmltcGxpY2l0VHlwZXNbQl0sei5yZXNvbHZlKGkucmVzdWx0KSl7aS5yZXN1bHQ9ei5jb25zdHJ1Y3QoaS5yZXN1bHQpLGkudGFnPXoudGFnLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCk7YnJlYWt9fWVsc2UgaWYoaS50YWchPT0iISIpe2lmKHJrLmNhbGwoaS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl0saS50YWcpKXo9aS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl1baS50YWddO2Vsc2UgZm9yKHo9bnVsbCxSPWkudHlwZU1hcC5tdWx0aVtpLmtpbmR8fCJmYWxsYmFjayJdLEI9MCxqPVIubGVuZ3RoO0I8ajtCKz0xKWlmKGkudGFnLnNsaWNlKDAsUltCXS50YWcubGVuZ3RoKT09PVJbQl0udGFnKXt6PVJbQl07YnJlYWt9enx8X3MoaSwidW5rbm93biB0YWcgITwiK2kudGFnKyI+IiksaS5yZXN1bHQhPT1udWxsJiZ6LmtpbmQhPT1pLmtpbmQmJl9zKGksInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IitpLnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJyt6LmtpbmQrJyIsIG5vdCAiJytpLmtpbmQrJyInKSx6LnJlc29sdmUoaS5yZXN1bHQsaS50YWcpPyhpLnJlc3VsdD16LmNvbnN0cnVjdChpLnJlc3VsdCxpLnRhZyksaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KSk6X3MoaSwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK2kudGFnKyI+IGV4cGxpY2l0IHRhZyIpfXJldHVybiBpLmxpc3RlbmVyIT09bnVsbCYmaS5saXN0ZW5lcigiY2xvc2UiLGkpLGkudGFnIT09bnVsbHx8aS5hbmNob3IhPT1udWxsfHxOfWZ1bmN0aW9uIFpMZShpKXt2YXIgYT1pLnBvc2l0aW9uLGYscCx2LG09ITEsYjtmb3IoaS52ZXJzaW9uPW51bGwsaS5jaGVja0xpbmVCcmVha3M9aS5sZWdhY3ksaS50YWdNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSxpLmFuY2hvck1hcD1PYmplY3QuY3JlYXRlKG51bGwpOyhiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wJiYoRGYoaSwhMCwtMSksYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksIShpLmxpbmVJbmRlbnQ+MHx8YiE9PTM3KSk7KXtmb3IobT0hMCxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGY9aS5wb3NpdGlvbjtiIT09MCYmIWxwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2ZvcihwPWkuaW5wdXQuc2xpY2UoZixpLnBvc2l0aW9uKSx2PVtdLHAubGVuZ3RoPDEmJl9zKGksImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO2IhPT0wOyl7Zm9yKDtsVChiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZihiPT09MzUpe2RvIGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoYiE9PTAmJiFmMyhiKSk7YnJlYWt9aWYoZjMoYikpYnJlYWs7Zm9yKGY9aS5wb3NpdGlvbjtiIT09MCYmIWxwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3YucHVzaChpLmlucHV0LnNsaWNlKGYsaS5wb3NpdGlvbikpfWIhPT0wJiZMZHQoaSkscmsuY2FsbChlTnQscCk/ZU50W3BdKGkscCx2KTpCVyhpLCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytwKyciJyl9aWYoRGYoaSwhMCwtMSksaS5saW5lSW5kZW50PT09MCYmaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzIpPT09NDU/KGkucG9zaXRpb24rPTMsRGYoaSwhMCwtMSkpOm0mJl9zKGksImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSxZQShpLGkubGluZUluZGVudC0xLEZXLCExLCEwKSxEZihpLCEwLC0xKSxpLmNoZWNrTGluZUJyZWFrcyYmRkxlLnRlc3QoaS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pKSYmQlcoaSwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksaS5kb2N1bWVudHMucHVzaChpLnJlc3VsdCksaS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZSVyhpKSl7aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDYmJihpLnBvc2l0aW9uKz0zLERmKGksITAsLTEpKTtyZXR1cm59aWYoaS5wb3NpdGlvbjxpLmxlbmd0aC0xKV9zKGksImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIik7ZWxzZSByZXR1cm59ZnVuY3Rpb24gaU50KGksYSl7aT1TdHJpbmcoaSksYT1hfHx7fSxpLmxlbmd0aCE9PTAmJihpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT0xMCYmaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTMmJihpKz1gCmApLGkuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoaT1pLnNsaWNlKDEpKSk7dmFyIGY9bmV3IHFMZShpLGEpLHA9aS5pbmRleE9mKCJcMCIpO2ZvcihwIT09LTEmJihmLnBvc2l0aW9uPXAsX3MoZiwibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0IikpLGYuaW5wdXQrPSJcMCI7Zi5pbnB1dC5jaGFyQ29kZUF0KGYucG9zaXRpb24pPT09MzI7KWYubGluZUluZGVudCs9MSxmLnBvc2l0aW9uKz0xO2Zvcig7Zi5wb3NpdGlvbjxmLmxlbmd0aC0xOylaTGUoZik7cmV0dXJuIGYuZG9jdW1lbnRzfWZ1bmN0aW9uIEpMZShpLGEsZil7YSE9PW51bGwmJnR5cGVvZiBhPT0ib2JqZWN0IiYmdHlwZW9mIGY+InUiJiYoZj1hLGE9bnVsbCk7dmFyIHA9aU50KGksZik7aWYodHlwZW9mIGEhPSJmdW5jdGlvbiIpcmV0dXJuIHA7Zm9yKHZhciB2PTAsbT1wLmxlbmd0aDt2PG07dis9MSlhKHBbdl0pfWZ1bmN0aW9uIHRNZShpLGEpe3ZhciBmPWlOdChpLGEpO2lmKGYubGVuZ3RoIT09MCl7aWYoZi5sZW5ndGg9PT0xKXJldHVybiBmWzBdO3Rocm93IG5ldyB4NSgiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19dmFyIGVNZT1KTGUsbk1lPXRNZSxyTWU9e2xvYWRBbGw6ZU1lLGxvYWQ6bk1lfSxpTWU9cU90LHNNZT1yTWUubG9hZDtmdW5jdGlvbiBhTWUoaSl7Y29uc3QgYT1pLm1hdGNoKHNEdCk7aWYoIWEpcmV0dXJue3RleHQ6aSxtZXRhZGF0YTp7fX07bGV0IGY9c01lKGFbMV0se3NjaGVtYTppTWV9KT8/e307Zj10eXBlb2YgZj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGYpP2Y6e307Y29uc3QgcD17fTtyZXR1cm4gZi5kaXNwbGF5TW9kZSYmKHAuZGlzcGxheU1vZGU9Zi5kaXNwbGF5TW9kZS50b1N0cmluZygpKSxmLnRpdGxlJiYocC50aXRsZT1mLnRpdGxlLnRvU3RyaW5nKCkpLGYuY29uZmlnJiYocC5jb25maWc9Zi5jb25maWcpLHt0ZXh0Omkuc2xpY2UoYVswXS5sZW5ndGgpLG1ldGFkYXRhOnB9fWNvbnN0IG9NZT1pPT5pLnJlcGxhY2UoL1xyXG4/L2csYApgKS5yZXBsYWNlKC88KFx3KykoW14+XSopPi9nLChhLGYscCk9PiI8IitmK3AucmVwbGFjZSgvPSIoW14iXSopIi9nLCI9JyQxJyIpKyI+IiksY01lPWk9Pntjb25zdHt0ZXh0OmEsbWV0YWRhdGE6Zn09YU1lKGkpLHtkaXNwbGF5TW9kZTpwLHRpdGxlOnYsY29uZmlnOm09e319PWY7cmV0dXJuIHAmJihtLmdhbnR0fHwobS5nYW50dD17fSksbS5nYW50dC5kaXNwbGF5TW9kZT1wKSx7dGl0bGU6dixjb25maWc6bSx0ZXh0OmF9fSx1TWU9aT0+e2NvbnN0IGE9JGEuZGV0ZWN0SW5pdChpKT8/e30sZj0kYS5kZXRlY3REaXJlY3RpdmUoaSwid3JhcCIpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2Eud3JhcD1mLnNvbWUoKHt0eXBlOnB9KT0+e30pOihmPT1udWxsP3ZvaWQgMDpmLnR5cGUpPT09IndyYXAiJiYoYS53cmFwPSEwKSx7dGV4dDpPX2UoaSksZGlyZWN0aXZlOmF9fTtmdW5jdGlvbiBsTWUoaSl7Y29uc3QgYT1vTWUoaSksZj1jTWUoYSkscD11TWUoZi50ZXh0KSx2PWlkdChmLmNvbmZpZyxwLmRpcmVjdGl2ZSk7cmV0dXJuIGk9YkFlKHAudGV4dCkse2NvZGU6aSx0aXRsZTpmLnRpdGxlLGNvbmZpZzp2fX1jb25zdCBoTWU9NWU0LGZNZT0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIsZE1lPSJzYW5kYm94IixnTWU9Imxvb3NlIixwTWU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixiTWU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHZNZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsd01lPSIxMDAlIixtTWU9IjEwMCUiLHlNZT0iYm9yZGVyOjA7bWFyZ2luOjA7Iix4TWU9Im1hcmdpbjowIixrTWU9ImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHMiLEVNZT0nVGhlICJpZnJhbWUiIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4nLFRNZT1bImZvcmVpZ25vYmplY3QiXSxDTWU9WyJkb21pbmFudC1iYXNlbGluZSJdO2Z1bmN0aW9uIHNOdChpKXtjb25zdCBhPWxNZShpKTtyZXR1cm4gSVcoKSxmU2UoYS5jb25maWc/P3t9KSxhfWFzeW5jIGZ1bmN0aW9uIF9NZShpLGEpe3dkdCgpLGk9c050KGkpLmNvZGU7dHJ5e2F3YWl0IG1kdChpKX1jYXRjaChmKXtpZihhIT1udWxsJiZhLnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IGZ9cmV0dXJuITB9Y29uc3QgU01lPWZ1bmN0aW9uKGkpe2xldCBhPWk7cmV0dXJuIGE9YS5yZXBsYWNlKC9zdHlsZS4qOlxTKiMuKjsvZyxmdW5jdGlvbihmKXtyZXR1cm4gZi5zdWJzdHJpbmcoMCxmLmxlbmd0aC0xKX0pLGE9YS5yZXBsYWNlKC9jbGFzc0RlZi4qOlxTKiMuKjsvZyxmdW5jdGlvbihmKXtyZXR1cm4gZi5zdWJzdHJpbmcoMCxmLmxlbmd0aC0xKX0pLGE9YS5yZXBsYWNlKC8jXHcrOy9nLGZ1bmN0aW9uKGYpe2NvbnN0IHA9Zi5zdWJzdHJpbmcoMSxmLmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3QocCk/Iu+sgsKwwrAiK3ArIsK2w58iOiLvrILCsCIrcCsiwrbDnyJ9KSxhfSxuUD1mdW5jdGlvbihpKXtyZXR1cm4gaS5yZXBsYWNlKC/vrILCsMKwL2csIiYjIikucmVwbGFjZSgv76yCwrAvZywiJiIpLnJlcGxhY2UoL8K2w58vZywiOyIpfSxhTnQ9KGksYSxmPVtdKT0+YAouJHtpfSAke2F9IHsgJHtmLmpvaW4oIiAhaW1wb3J0YW50OyAiKX0gIWltcG9ydGFudDsgfWAsQU1lPShpLGE9e30pPT57dmFyIHA7bGV0IGY9IiI7aWYoaS50aGVtZUNTUyE9PXZvaWQgMCYmKGYrPWAKJHtpLnRoZW1lQ1NTfWApLGkuZm9udEZhbWlseSE9PXZvaWQgMCYmKGYrPWAKOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fX1gKSxpLmFsdEZvbnRGYW1pbHkhPT12b2lkIDAmJihmKz1gCjpyb290IHsgLS1tZXJtYWlkLWFsdC1mb250LWZhbWlseTogJHtpLmFsdEZvbnRGYW1pbHl9fWApLCF0UChhKSl7Y29uc3QgRT1pLmh0bWxMYWJlbHN8fCgocD1pLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnAuaHRtbExhYmVscyk/WyI+ICoiLCJzcGFuIl06WyJyZWN0IiwicG9seWdvbiIsImVsbGlwc2UiLCJjaXJjbGUiLCJwYXRoIl07Zm9yKGNvbnN0IF8gaW4gYSl7Y29uc3QgTD1hW19dO3RQKEwuc3R5bGVzKXx8RS5mb3JFYWNoKE49PntmKz1hTnQoTC5pZCxOLEwuc3R5bGVzKX0pLHRQKEwudGV4dFN0eWxlcyl8fChmKz1hTnQoTC5pZCwidHNwYW4iLEwudGV4dFN0eWxlcykpfX1yZXR1cm4gZn0sTE1lPShpLGEsZixwKT0+e2NvbnN0IHY9QU1lKGksZiksbT16U2UoYSx2LGkudGhlbWVWYXJpYWJsZXMpO3JldHVybiBoZHQoYVNlKGAke3B9eyR7bX19YCksY1NlKX0sTU1lPShpPSIiLGEsZik9PntsZXQgcD1pO3JldHVybiFmJiYhYSYmKHA9cC5yZXBsYWNlKC9tYXJrZXItZW5kPSJ1cmxcKFtcZCsuLzo9P0EtWmEtei1dKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJykpLHA9blAocCkscD1wLnJlcGxhY2UoLzxicj4vZywiPGJyLz4iKSxwfSxJTWU9KGk9IiIsYSk9Pnt2YXIgdixtO2NvbnN0IGY9KG09KHY9YT09bnVsbD92b2lkIDA6YS52aWV3Qm94KT09bnVsbD92b2lkIDA6di5iYXNlVmFsKSE9bnVsbCYmbS5oZWlnaHQ/YS52aWV3Qm94LmJhc2VWYWwuaGVpZ2h0KyJweCI6bU1lLHA9YnRvYSgnPGJvZHkgc3R5bGU9IicreE1lKyciPicraSsiPC9ib2R5PiIpO3JldHVybmA8aWZyYW1lIHN0eWxlPSJ3aWR0aDoke3dNZX07aGVpZ2h0OiR7Zn07JHt5TWV9IiBzcmM9ImRhdGE6dGV4dC9odG1sO2Jhc2U2NCwke3B9IiBzYW5kYm94PSIke2tNZX0iPgogICR7RU1lfQo8L2lmcmFtZT5gfSxvTnQ9KGksYSxmLHAsdik9Pntjb25zdCBtPWkuYXBwZW5kKCJkaXYiKTttLmF0dHIoImlkIixmKSxwJiZtLmF0dHIoInN0eWxlIixwKTtjb25zdCBiPW0uYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsYSkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLHBNZSk7cmV0dXJuIHYmJmIuYXR0cigieG1sbnM6eGxpbmsiLHYpLGIuYXBwZW5kKCJnIiksaX07ZnVuY3Rpb24gY050KGksYSl7cmV0dXJuIGkuYXBwZW5kKCJpZnJhbWUiKS5hdHRyKCJpZCIsYSkuYXR0cigic3R5bGUiLCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyIpLmF0dHIoInNhbmRib3giLCIiKX1jb25zdCBETWU9KGksYSxmLHApPT57dmFyIHYsbSxiOyh2PWkuZ2V0RWxlbWVudEJ5SWQoYSkpPT1udWxsfHx2LnJlbW92ZSgpLChtPWkuZ2V0RWxlbWVudEJ5SWQoZikpPT1udWxsfHxtLnJlbW92ZSgpLChiPWkuZ2V0RWxlbWVudEJ5SWQocCkpPT1udWxsfHxiLnJlbW92ZSgpfSxPTWU9YXN5bmMgZnVuY3Rpb24oaSxhLGYpe3ZhciBudCxPdCxOdCxxdCxDdCxaO3dkdCgpO2NvbnN0IHA9c050KGEpO2E9cC5jb2RlO2NvbnN0IHY9TGUoKTtVdC5kZWJ1Zyh2KSxhLmxlbmd0aD4oKHY9PW51bGw/dm9pZCAwOnYubWF4VGV4dFNpemUpPz9oTWUpJiYoYT1mTWUpO2NvbnN0IG09IiMiK2ksYj0iaSIraSxFPSIjIitiLF89ImQiK2ksTD0iIyIrXztsZXQgTj15cigiYm9keSIpO2NvbnN0IEI9di5zZWN1cml0eUxldmVsPT09ZE1lLGo9di5zZWN1cml0eUxldmVsPT09Z01lLFI9di5mb250RmFtaWx5O2lmKGYhPT12b2lkIDApe2lmKGYmJihmLmlubmVySFRNTD0iIiksQil7Y29uc3QgVHQ9Y050KHlyKGYpLGIpO049eXIoVHQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksTi5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBOPXlyKGYpO29OdChOLGksXyxgZm9udC1mYW1pbHk6ICR7Un1gLGJNZSl9ZWxzZXtpZihETWUoZG9jdW1lbnQsaSxfLGIpLEIpe2NvbnN0IFR0PWNOdCh5cigiYm9keSIpLGIpO049eXIoVHQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksTi5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBOPXlyKCJib2R5Iik7b050KE4saSxfKX1hPVNNZShhKTtsZXQgeixLO3RyeXt6PWF3YWl0IG1kdChhLHt0aXRsZTpwLnRpdGxlfSl9Y2F0Y2goVHQpe3o9bmV3IERPdCgiZXJyb3IiKSxLPVR0fWNvbnN0IGl0PU4uc2VsZWN0KEwpLm5vZGUoKSxzdD16LnR5cGUsdXQ9aXQuZmlyc3RDaGlsZCxidD11dC5maXJzdENoaWxkLG10PShPdD0obnQ9ei5yZW5kZXJlcikuZ2V0Q2xhc3Nlcyk9PW51bGw/dm9pZCAwOk90LmNhbGwobnQsYSx6KSx5dD1MTWUodixzdCxtdCxtKSxkdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2R0LmlubmVySFRNTD15dCx1dC5pbnNlcnRCZWZvcmUoZHQsYnQpO3RyeXthd2FpdCB6LnJlbmRlcmVyLmRyYXcoYSxpLGVPdCx6KX1jYXRjaChUdCl7dGhyb3cgT1NlLmRyYXcoYSxpLGVPdCksVHR9Y29uc3QgaHQ9Ti5zZWxlY3QoYCR7TH0gc3ZnYCksd3Q9KHF0PShOdD16LmRiKS5nZXRBY2NUaXRsZSk9PW51bGw/dm9pZCAwOnF0LmNhbGwoTnQpLFg9KFo9KEN0PXouZGIpLmdldEFjY0Rlc2NyaXB0aW9uKT09bnVsbD92b2lkIDA6Wi5jYWxsKEN0KTtQTWUoc3QsaHQsd3QsWCksTi5zZWxlY3QoYFtpZD0iJHtpfSJdYCkuc2VsZWN0QWxsKCJmb3JlaWdub2JqZWN0ID4gKiIpLmF0dHIoInhtbG5zIix2TWUpO2xldCBwdD1OLnNlbGVjdChMKS5ub2RlKCkuaW5uZXJIVE1MO2lmKFV0LmRlYnVnKCJjb25maWcuYXJyb3dNYXJrZXJBYnNvbHV0ZSIsdi5hcnJvd01hcmtlckFic29sdXRlKSxwdD1NTWUocHQsQixzMSh2LmFycm93TWFya2VyQWJzb2x1dGUpKSxCKXtjb25zdCBUdD1OLnNlbGVjdChMKyIgc3ZnIikubm9kZSgpO3B0PUlNZShwdCxUdCl9ZWxzZSBqfHwocHQ9ZVcuc2FuaXRpemUocHQse0FERF9UQUdTOlRNZSxBRERfQVRUUjpDTWV9KSk7aWYoS1NlKCksSyl0aHJvdyBLO2NvbnN0IHh0PXlyKEI/RTpMKS5ub2RlKCk7cmV0dXJuIHh0JiYicmVtb3ZlImluIHh0JiZ4dC5yZW1vdmUoKSx7c3ZnOnB0LGJpbmRGdW5jdGlvbnM6ei5kYi5iaW5kRnVuY3Rpb25zfX07ZnVuY3Rpb24gTk1lKGk9e30pe3ZhciBmO2khPW51bGwmJmkuZm9udEZhbWlseSYmISgoZj1pLnRoZW1lVmFyaWFibGVzKSE9bnVsbCYmZi5mb250RmFtaWx5KSYmKGkudGhlbWVWYXJpYWJsZXN8fChpLnRoZW1lVmFyaWFibGVzPXt9KSxpLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxsU2UoaSksaSE9bnVsbCYmaS50aGVtZSYmaS50aGVtZSBpbiB3NT9pLnRoZW1lVmFyaWFibGVzPXc1W2kudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpOmkmJihpLnRoZW1lVmFyaWFibGVzPXc1LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcykpO2NvbnN0IGE9dHlwZW9mIGk9PSJvYmplY3QiP3VTZShpKTpyT3QoKTtqZnQoYS5sb2dMZXZlbCksd2R0KCl9ZnVuY3Rpb24gUE1lKGksYSxmLHApe2dBZShhLGkpLHBBZShhLGYscCxhLmF0dHIoImlkIikpfWNvbnN0IGhUPU9iamVjdC5mcmVlemUoe3JlbmRlcjpPTWUscGFyc2U6X01lLGdldERpYWdyYW1Gcm9tVGV4dDptZHQsaW5pdGlhbGl6ZTpOTWUsZ2V0Q29uZmlnOkxlLHNldENvbmZpZzppT3QsZ2V0U2l0ZUNvbmZpZzpyT3QsdXBkYXRlU2l0ZUNvbmZpZzpoU2UscmVzZXQ6KCk9PntJVygpfSxnbG9iYWxSZXNldDooKT0+e0lXKG9UKX0sZGVmYXVsdENvbmZpZzpvVH0pO2pmdChMZSgpLmxvZ0xldmVsKSxJVyhMZSgpKTtjb25zdCBGTWU9YXN5bmMoKT0+e1V0LmRlYnVnKCJMb2FkaW5nIHJlZ2lzdGVyZWQgZGlhZ3JhbXMiKTtjb25zdCBhPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoREEpLm1hcChhc3luYyhbZix7ZGV0ZWN0b3I6cCxsb2FkZXI6dn1dKT0+e2lmKHYpdHJ5e3ZkdChmKX1jYXRjaHt0cnl7Y29uc3R7ZGlhZ3JhbTpiLGlkOkV9PWF3YWl0IHYoKTtOVyhFLGIscCl9Y2F0Y2goYil7dGhyb3cgVXQuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHtmfS4gUmVtb3ZpbmcgZnJvbSBkZXRlY3RvcnMuYCksZGVsZXRlIERBW2ZdLGJ9fX0pKSkuZmlsdGVyKGY9PmYuc3RhdHVzPT09InJlamVjdGVkIik7aWYoYS5sZW5ndGg+MCl7VXQuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7YS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7Zm9yKGNvbnN0IGYgb2YgYSlVdC5lcnJvcihmKTt0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7YS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCl9fSxCTWU9KGksYSxmKT0+e1V0Lndhcm4oaSksVUR0KGkpPyhmJiZmKGkuc3RyLGkuaGFzaCksYS5wdXNoKHsuLi5pLG1lc3NhZ2U6aS5zdHIsZXJyb3I6aX0pKTooZiYmZihpKSxpIGluc3RhbmNlb2YgRXJyb3ImJmEucHVzaCh7c3RyOmkubWVzc2FnZSxtZXNzYWdlOmkubWVzc2FnZSxoYXNoOmkubmFtZSxlcnJvcjppfSkpfSx1TnQ9YXN5bmMgZnVuY3Rpb24oaT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IFJNZShpKX1jYXRjaChhKXtpZihVRHQoYSkmJlV0LmVycm9yKGEuc3RyKSxPYi5wYXJzZUVycm9yJiZPYi5wYXJzZUVycm9yKGEpLCFpLnN1cHByZXNzRXJyb3JzKXRocm93IFV0LmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxhfX0sUk1lPWFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6aSxxdWVyeVNlbGVjdG9yOmEsbm9kZXM6Zn09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2NvbnN0IHA9aFQuZ2V0Q29uZmlnKCk7VXQuZGVidWcoYCR7aT8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCB2O2lmKGYpdj1mO2Vsc2UgaWYoYSl2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1V0LmRlYnVnKGBGb3VuZCAke3YubGVuZ3RofSBkaWFncmFtc2ApLChwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkKSE9PXZvaWQgMCYmKFV0LmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiKyhwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkKSksaFQudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6cD09bnVsbD92b2lkIDA6cC5zdGFydE9uTG9hZH0pKTtjb25zdCBtPW5ldyAkYS5Jbml0SURHZW5lcmF0b3IocC5kZXRlcm1pbmlzdGljSWRzLHAuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7bGV0IGI7Y29uc3QgRT1bXTtmb3IoY29uc3QgXyBvZiBBcnJheS5mcm9tKHYpKXtVdC5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIitfLmlkKTsvKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi9pZihfLmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTtfLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7Y29uc3QgTD1gbWVybWFpZC0ke20ubmV4dCgpfWA7Yj1fLmlubmVySFRNTCxiPXdBKCRhLmVudGl0eURlY29kZShiKSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7Y29uc3QgTj0kYS5kZXRlY3RJbml0KGIpO04mJlV0LmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsTik7dHJ5e2NvbnN0e3N2ZzpCLGJpbmRGdW5jdGlvbnM6an09YXdhaXQgZE50KEwsYixfKTtfLmlubmVySFRNTD1CLGkmJmF3YWl0IGkoTCksaiYmaihfKX1jYXRjaChCKXtCTWUoQixFLE9iLnBhcnNlRXJyb3IpfX1pZihFLmxlbmd0aD4wKXRocm93IEVbMF19LGxOdD1mdW5jdGlvbihpKXtoVC5pbml0aWFsaXplKGkpfSxqTWU9YXN5bmMgZnVuY3Rpb24oaSxhLGYpe1V0Lndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLGkmJmxOdChpKTtjb25zdCBwPXtwb3N0UmVuZGVyQ2FsbGJhY2s6ZixxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBhPT0ic3RyaW5nIj9wLnF1ZXJ5U2VsZWN0b3I9YTphJiYoYSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P3Aubm9kZXM9W2FdOnAubm9kZXM9YSksYXdhaXQgdU50KHApfSwkTWU9YXN5bmMoaSx7bGF6eUxvYWQ6YT0hMH09e30pPT57b0R0KC4uLmkpLGE9PT0hMSYmYXdhaXQgRk1lKCl9LGhOdD1mdW5jdGlvbigpe2lmKE9iLnN0YXJ0T25Mb2FkKXtjb25zdHtzdGFydE9uTG9hZDppfT1oVC5nZXRDb25maWcoKTtpJiZPYi5ydW4oKS5jYXRjaChhPT5VdC5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIsYSkpfX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7LyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaE50LCExKX1jb25zdCB6TWU9ZnVuY3Rpb24oaSl7T2IucGFyc2VFcnJvcj1pfSxqVz1bXTtsZXQgSWR0PSExO2NvbnN0IGZOdD1hc3luYygpPT57aWYoIUlkdCl7Zm9yKElkdD0hMDtqVy5sZW5ndGg+MDspe2NvbnN0IGk9alcuc2hpZnQoKTtpZihpKXRyeXthd2FpdCBpKCl9Y2F0Y2goYSl7VXQuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIsYSl9fUlkdD0hMX19LHFNZT1hc3luYyhpLGEpPT5uZXcgUHJvbWlzZSgoZixwKT0+e2NvbnN0IHY9KCk9Pm5ldyBQcm9taXNlKChtLGIpPT57aFQucGFyc2UoaSxhKS50aGVuKEU9PnttKEUpLGYoRSl9LEU9Pnt2YXIgXztVdC5lcnJvcigiRXJyb3IgcGFyc2luZyIsRSksKF89T2IucGFyc2VFcnJvcik9PW51bGx8fF8uY2FsbChPYixFKSxiKEUpLHAoRSl9KX0pO2pXLnB1c2godiksZk50KCkuY2F0Y2gocCl9KSxkTnQ9KGksYSxmKT0+bmV3IFByb21pc2UoKHAsdik9Pntjb25zdCBtPSgpPT5uZXcgUHJvbWlzZSgoYixFKT0+e2hULnJlbmRlcihpLGEsZikudGhlbihfPT57YihfKSxwKF8pfSxfPT57dmFyIEw7VXQuZXJyb3IoIkVycm9yIHBhcnNpbmciLF8pLChMPU9iLnBhcnNlRXJyb3IpPT1udWxsfHxMLmNhbGwoT2IsXyksRShfKSx2KF8pfSl9KTtqVy5wdXNoKG0pLGZOdCgpLmNhdGNoKHYpfSksT2I9e3N0YXJ0T25Mb2FkOiEwLG1lcm1haWRBUEk6aFQscGFyc2U6cU1lLHJlbmRlcjpkTnQsaW5pdDpqTWUscnVuOnVOdCxyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXM6JE1lLGluaXRpYWxpemU6bE50LHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6aE50LHNldFBhcnNlRXJyb3JIYW5kbGVyOnpNZSxkZXRlY3RUeXBlOmhXfTt2YXIgJFc9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihkcyxEcixucixkaSl7Zm9yKG5yPW5yfHx7fSxkaT1kcy5sZW5ndGg7ZGktLTtucltkc1tkaV1dPURyKTtyZXR1cm4gbnJ9LGE9WzEsMjRdLGY9WzEsMjVdLHA9WzEsMjZdLHY9WzEsMjddLG09WzEsMjhdLGI9WzEsNjNdLEU9WzEsNjRdLF89WzEsNjVdLEw9WzEsNjZdLE49WzEsNjddLEI9WzEsNjhdLGo9WzEsNjldLFI9WzEsMjldLHo9WzEsMzBdLEs9WzEsMzFdLGl0PVsxLDMyXSxzdD1bMSwzM10sdXQ9WzEsMzRdLGJ0PVsxLDM1XSxtdD1bMSwzNl0seXQ9WzEsMzddLGR0PVsxLDM4XSxodD1bMSwzOV0sd3Q9WzEsNDBdLFg9WzEsNDFdLHB0PVsxLDQyXSxVPVsxLDQzXSx4dD1bMSw0NF0sbnQ9WzEsNDVdLE90PVsxLDQ2XSxOdD1bMSw0N10scXQ9WzEsNDhdLEN0PVsxLDUwXSxaPVsxLDUxXSxUdD1bMSw1Ml0sSHQ9WzEsNTNdLEl0PVsxLDU0XSxGdD1bMSw1NV0sa2U9WzEsNTZdLHBuPVsxLDU3XSxNZT1bMSw1OF0sdmU9WzEsNTldLEdlPVsxLDYwXSxLZT1bMTQsNDJdLHdlPVsxNCwzNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0sX2U9WzEyLDE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSwkdD1bMSw4Ml0scmU9WzEsODNdLGllPVsxLDg0XSxPZT1bMSw4NV0sb2U9WzEyLDE0LDQyXSxOZT1bMTIsMTQsMzMsNDJdLG1lPVsxMiwxNCwzMyw0Miw3Niw3Nyw3OSw4MF0sY249WzEyLDMzXSxsaT1bMzQsMzYsMzcsMzgsMzksNDAsNDEsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLHlhPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihEcixucixkaSxFZSxZbixIZSxUaSl7dmFyIGduPUhlLmxlbmd0aC0xO3N3aXRjaChZbil7Y2FzZSAzOkVlLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDQ6RWUuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTpFZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2OkVlLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOkVlLnNldEM0VHlwZShIZVtnbi0zXSk7YnJlYWs7Y2FzZSAxOTpFZS5zZXRUaXRsZShIZVtnbl0uc3Vic3RyaW5nKDYpKSx0aGlzLiQ9SGVbZ25dLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOkVlLnNldEFjY0Rlc2NyaXB0aW9uKEhlW2duXS5zdWJzdHJpbmcoMTUpKSx0aGlzLiQ9SGVbZ25dLnN1YnN0cmluZygxNSk7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9SGVbZ25dLnRyaW0oKSxFZS5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp0aGlzLiQ9SGVbZ25dLnRyaW0oKSxFZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpIZVtnbl0uc3BsaWNlKDIsMCwiRU5URVJQUklTRSIpLEVlLmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgMzA6RWUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSAzMTpIZVtnbl0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIiksRWUuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgMzI6RWUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDMzOkVlLmFkZERlcGxveW1lbnROb2RlKCJub2RlTCIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgMzQ6RWUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVSIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSAzNTpFZS5wb3BCb3VuZGFyeVBhcnNlU3RhY2soKTticmVhaztjYXNlIDM5OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJwZXJzb24iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQwOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9wZXJzb24iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQxOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW0iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQyOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW1fZGIiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQzOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW1fcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ0OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW0iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ1OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW1fZGIiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ2OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW1fcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ3OkVlLmFkZENvbnRhaW5lcigiY29udGFpbmVyIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA0ODpFZS5hZGRDb250YWluZXIoImNvbnRhaW5lcl9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNDk6RWUuYWRkQ29udGFpbmVyKCJjb250YWluZXJfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDUwOkVlLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA1MTpFZS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNTI6RWUuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDUzOkVlLmFkZENvbXBvbmVudCgiY29tcG9uZW50IiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA1NDpFZS5hZGRDb21wb25lbnQoImNvbXBvbmVudF9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNTU6RWUuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDU2OkVlLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50IiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA1NzpFZS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNTg6RWUuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDYwOkVlLmFkZFJlbCgicmVsIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2MTpFZS5hZGRSZWwoImJpcmVsIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2MjpFZS5hZGRSZWwoInJlbF91IiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2MzpFZS5hZGRSZWwoInJlbF9kIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NDpFZS5hZGRSZWwoInJlbF9sIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NTpFZS5hZGRSZWwoInJlbF9yIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NjpFZS5hZGRSZWwoInJlbF9iIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NzpIZVtnbl0uc3BsaWNlKDAsMSksRWUuYWRkUmVsKCJyZWwiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDY4OkVlLnVwZGF0ZUVsU3R5bGUoInVwZGF0ZV9lbF9zdHlsZSIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNjk6RWUudXBkYXRlUmVsU3R5bGUoInVwZGF0ZV9yZWxfc3R5bGUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDcwOkVlLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDcxOnRoaXMuJD1bSGVbZ25dXTticmVhaztjYXNlIDcyOkhlW2duXS51bnNoaWZ0KEhlW2duLTFdKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9SGVbZ25dLnRyaW0oKTticmVhaztjYXNlIDc0OmxldCBrcz17fTtrc1tIZVtnbi0xXS50cmltKCldPUhlW2duXS50cmltKCksdGhpcy4kPWtzO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDc6WzEsNl0sODpbMSw3XSw5OlsxLDhdLDEwOjQsMTE6WzEsOV0sMTU6WzEsMTBdLDE2OlsxLDExXSwxNzpbMSwxMl0sMTg6WzEsMTNdfSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsN119LHsxOlsyLDNdfSx7MTpbMiw0XX0sezE6WzIsNV19LHsxOlsyLDZdfSx7MTI6WzEsMTRdfSx7MTI6WzEsMTVdfSx7MTI6WzEsMTZdfSx7MTI6WzEsMTddfSx7MTI6WzEsMThdfSx7MTM6MTksMTk6MjAsMjA6MjEsMjE6MjIsMjI6YSwyMzpmLDI0OnAsMjY6diwyODptLDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDM6MjMsNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9LHsxMzo3MCwxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp2LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6TCwzOTpOLDQwOkIsNDE6aiw0MzoyMyw0NDpSLDQ1OnosNDY6Syw0NzppdCw0ODpzdCw0OTp1dCw1MDpidCw1MTptdCw1Mjp5dCw1MzpkdCw1NDpodCw1NTp3dCw1NjpYLDU3OnB0LDU4OlUsNTk6eHQsNjA6bnQsNjE6T3QsNjI6TnQsNjM6cXQsNjQ6Q3QsNjU6Wiw2NjpUdCw2NzpIdCw2ODpJdCw2OTpGdCw3MDprZSw3MTpwbiw3MjpNZSw3Mzp2ZSw3NDpHZX0sezEzOjcxLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmEsMjM6ZiwyNDpwLDI2OnYsMjg6bSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpMLDM5Ok4sNDA6Qiw0MTpqLDQzOjIzLDQ0OlIsNDU6eiw0NjpLLDQ3Oml0LDQ4OnN0LDQ5OnV0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmR0LDU0Omh0LDU1Ond0LDU2OlgsNTc6cHQsNTg6VSw1OTp4dCw2MDpudCw2MTpPdCw2MjpOdCw2MzpxdCw2NDpDdCw2NTpaLDY2OlR0LDY3Okh0LDY4Okl0LDY5OkZ0LDcwOmtlLDcxOnBuLDcyOk1lLDczOnZlLDc0OkdlfSx7MTM6NzIsMTk6MjAsMjA6MjEsMjE6MjIsMjI6YSwyMzpmLDI0OnAsMjY6diwyODptLDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDM6MjMsNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9LHsxMzo3MywxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp2LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6TCwzOTpOLDQwOkIsNDE6aiw0MzoyMyw0NDpSLDQ1OnosNDY6Syw0NzppdCw0ODpzdCw0OTp1dCw1MDpidCw1MTptdCw1Mjp5dCw1MzpkdCw1NDpodCw1NTp3dCw1NjpYLDU3OnB0LDU4OlUsNTk6eHQsNjA6bnQsNjE6T3QsNjI6TnQsNjM6cXQsNjQ6Q3QsNjU6Wiw2NjpUdCw2NzpIdCw2ODpJdCw2OTpGdCw3MDprZSw3MTpwbiw3MjpNZSw3Mzp2ZSw3NDpHZX0sezE0OlsxLDc0XX0saShLZSxbMiwxM10sezQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDIwOjc1LDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9KSxpKEtlLFsyLDE0XSksaSh3ZSxbMiwxNl0sezEyOlsxLDc2XX0pLGkoS2UsWzIsMzZdLHsxMjpbMSw3N119KSxpKF9lLFsyLDE5XSksaShfZSxbMiwyMF0pLHsyNTpbMSw3OF19LHsyNzpbMSw3OV19LGkoX2UsWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo4Niw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1Ojg3LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6ODgsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo4OSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjkwLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6OTEsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo5Miw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjkzLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6OTQsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo5NSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1Ojk2LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6OTcsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo5OCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1Ojk5LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAwLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAxLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAyLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAzLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTA0LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSxpKG9lLFsyLDU5XSksezM1OjEwNSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwNiw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwNyw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwOCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwOSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMiw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMyw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExNCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExNSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezIwOjExNiwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpMLDM5Ok4sNDA6Qiw0MTpqLDQzOjIzLDQ0OlIsNDU6eiw0NjpLLDQ3Oml0LDQ4OnN0LDQ5OnV0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmR0LDU0Omh0LDU1Ond0LDU2OlgsNTc6cHQsNTg6VSw1OTp4dCw2MDpudCw2MTpPdCw2MjpOdCw2MzpxdCw2NDpDdCw2NTpaLDY2OlR0LDY3Okh0LDY4Okl0LDY5OkZ0LDcwOmtlLDcxOnBuLDcyOk1lLDczOnZlLDc0OkdlfSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIwLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIxLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIyLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIzLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTI0LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTI1LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MTQ6WzEsMTI2XX0sezE0OlsxLDEyN119LHsxNDpbMSwxMjhdfSx7MTQ6WzEsMTI5XX0sezE6WzIsOF19LGkoS2UsWzIsMTVdKSxpKHdlLFsyLDE3XSx7MjE6MjIsMTk6MTMwLDIyOmEsMjM6ZiwyNDpwLDI2OnYsMjg6bX0pLGkoS2UsWzIsMzddLHsxOToyMCwyMDoyMSwyMToyMiw0MzoyMywyOTo0OSwzMDo2MSwzMjo2MiwxMzoxMzEsMjI6YSwyMzpmLDI0OnAsMjY6diwyODptLDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9KSxpKF9lLFsyLDIxXSksaShfZSxbMiwyMl0pLGkob2UsWzIsMzldKSxpKE5lLFsyLDcxXSx7NzU6ODEsMzU6MTMyLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSksaShtZSxbMiw3M10pLHs3ODpbMSwxMzNdfSxpKG1lLFsyLDc1XSksaShtZSxbMiw3Nl0pLGkob2UsWzIsNDBdKSxpKG9lLFsyLDQxXSksaShvZSxbMiw0Ml0pLGkob2UsWzIsNDNdKSxpKG9lLFsyLDQ0XSksaShvZSxbMiw0NV0pLGkob2UsWzIsNDZdKSxpKG9lLFsyLDQ3XSksaShvZSxbMiw0OF0pLGkob2UsWzIsNDldKSxpKG9lLFsyLDUwXSksaShvZSxbMiw1MV0pLGkob2UsWzIsNTJdKSxpKG9lLFsyLDUzXSksaShvZSxbMiw1NF0pLGkob2UsWzIsNTVdKSxpKG9lLFsyLDU2XSksaShvZSxbMiw1N10pLGkob2UsWzIsNThdKSxpKG9lLFsyLDYwXSksaShvZSxbMiw2MV0pLGkob2UsWzIsNjJdKSxpKG9lLFsyLDYzXSksaShvZSxbMiw2NF0pLGkob2UsWzIsNjVdKSxpKG9lLFsyLDY2XSksaShvZSxbMiw2N10pLGkob2UsWzIsNjhdKSxpKG9lLFsyLDY5XSksaShvZSxbMiw3MF0pLHszMToxMzQsNDI6WzEsMTM1XX0sezEyOlsxLDEzNl19LHszMzpbMSwxMzddfSxpKGNuLFsyLDI4XSksaShjbixbMiwyOV0pLGkoY24sWzIsMzBdKSxpKGNuLFsyLDMxXSksaShjbixbMiwzMl0pLGkoY24sWzIsMzNdKSxpKGNuLFsyLDM0XSksezE6WzIsOV19LHsxOlsyLDEwXX0sezE6WzIsMTFdfSx7MTpbMiwxMl19LGkod2UsWzIsMThdKSxpKEtlLFsyLDM4XSksaShOZSxbMiw3Ml0pLGkobWUsWzIsNzRdKSxpKG9lLFsyLDI0XSksaShvZSxbMiwzNV0pLGkobGksWzIsMjVdKSxpKGxpLFsyLDI2XSx7MTI6WzEsMTM4XX0pLGkobGksWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDddLDU6WzIsM10sNjpbMiw0XSw3OlsyLDVdLDg6WzIsNl0sNzQ6WzIsOF0sMTI2OlsyLDldLDEyNzpbMiwxMF0sMTI4OlsyLDExXSwxMjk6WzIsMTJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKERyLG5yKXtpZihuci5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKERyKTtlbHNle3ZhciBkaT1uZXcgRXJyb3IoRHIpO3Rocm93IGRpLmhhc2g9bnIsZGl9fSxwYXJzZTpmdW5jdGlvbihEcil7dmFyIG5yPXRoaXMsZGk9WzBdLEVlPVtdLFluPVtudWxsXSxIZT1bXSxUaT10aGlzLnRhYmxlLGduPSIiLGtzPTAscWE9MCxMYT0yLEdzPTEsTm89SGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksdnM9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxudT17eXk6e319O2Zvcih2YXIgJHMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwkcykmJihudS55eVskc109dGhpcy55eVskc10pO3ZzLnNldElucHV0KERyLG51Lnl5KSxudS55eS5sZXhlcj12cyxudS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgdnMueXlsbG9jPiJ1IiYmKHZzLnl5bGxvYz17fSk7dmFyIEx1PXZzLnl5bGxvYztIZS5wdXNoKEx1KTt2YXIgZm09dnMub3B0aW9ucyYmdnMub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG51Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW51Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGF2KCl7dmFyIExsO3JldHVybiBMbD1FZS5wb3AoKXx8dnMubGV4KCl8fEdzLHR5cGVvZiBMbCE9Im51bWJlciImJihMbCBpbnN0YW5jZW9mIEFycmF5JiYoRWU9TGwsTGw9RWUucG9wKCkpLExsPW5yLnN5bWJvbHNfW0xsXXx8TGwpLExsfWZvcih2YXIgVXUsWmwsUGEsQWwsdWE9e30sYmMsQ2MsZ2EsTWE7Oyl7aWYoWmw9ZGlbZGkubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWmxdP1BhPXRoaXMuZGVmYXVsdEFjdGlvbnNbWmxdOigoVXU9PT1udWxsfHx0eXBlb2YgVXU+InUiKSYmKFV1PWF2KCkpLFBhPVRpW1psXSYmVGlbWmxdW1V1XSksdHlwZW9mIFBhPiJ1Inx8IVBhLmxlbmd0aHx8IVBhWzBdKXt2YXIgSGE9IiI7TWE9W107Zm9yKGJjIGluIFRpW1psXSl0aGlzLnRlcm1pbmFsc19bYmNdJiZiYz5MYSYmTWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2JjXSsiJyIpO3ZzLnNob3dQb3NpdGlvbj9IYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrcysxKStgOgpgK3ZzLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArTWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVdV18fFV1KSsiJyI6SGE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoa3MrMSkrIjogVW5leHBlY3RlZCAiKyhVdT09R3M/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVXVdfHxVdSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoSGEse3RleHQ6dnMubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1V1XXx8VXUsbGluZTp2cy55eWxpbmVubyxsb2M6THUsZXhwZWN0ZWQ6TWF9KX1pZihQYVswXWluc3RhbmNlb2YgQXJyYXkmJlBhLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWmwrIiwgdG9rZW46ICIrVXUpO3N3aXRjaChQYVswXSl7Y2FzZSAxOmRpLnB1c2goVXUpLFluLnB1c2godnMueXl0ZXh0KSxIZS5wdXNoKHZzLnl5bGxvYyksZGkucHVzaChQYVsxXSksVXU9bnVsbCxxYT12cy55eWxlbmcsZ249dnMueXl0ZXh0LGtzPXZzLnl5bGluZW5vLEx1PXZzLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQ2M9dGhpcy5wcm9kdWN0aW9uc19bUGFbMV1dWzFdLHVhLiQ9WW5bWW4ubGVuZ3RoLUNjXSx1YS5fJD17Zmlyc3RfbGluZTpIZVtIZS5sZW5ndGgtKENjfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SGVbSGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46SGVbSGUubGVuZ3RoLShDY3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpIZVtIZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGZtJiYodWEuXyQucmFuZ2U9W0hlW0hlLmxlbmd0aC0oQ2N8fDEpXS5yYW5nZVswXSxIZVtIZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxBbD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkodWEsW2duLHFhLGtzLG51Lnl5LFBhWzFdLFluLEhlXS5jb25jYXQoTm8pKSx0eXBlb2YgQWw8InUiKXJldHVybiBBbDtDYyYmKGRpPWRpLnNsaWNlKDAsLTEqQ2MqMiksWW49WW4uc2xpY2UoMCwtMSpDYyksSGU9SGUuc2xpY2UoMCwtMSpDYykpLGRpLnB1c2godGhpcy5wcm9kdWN0aW9uc19bUGFbMV1dWzBdKSxZbi5wdXNoKHVhLiQpLEhlLnB1c2godWEuXyQpLGdhPVRpW2RpW2RpLmxlbmd0aC0yXV1bZGlbZGkubGVuZ3RoLTFdXSxkaS5wdXNoKGdhKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sZGE9ZnVuY3Rpb24oKXt2YXIgZHM9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24obnIsZGkpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IobnIsZGkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG5yKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRHIsbnIpe3JldHVybiB0aGlzLnl5PW5yfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1Ecix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRHI9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPURyLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1Ecix0aGlzLm1hdGNoZWQrPURyO3ZhciBucj1Eci5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIG5yPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxEcn0sdW5wdXQ6ZnVuY3Rpb24oRHIpe3ZhciBucj1Eci5sZW5ndGgsZGk9RHIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1Ecit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtbnIpLHRoaXMub2Zmc2V0LT1ucjt2YXIgRWU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZGkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1kaS5sZW5ndGgtMSk7dmFyIFluPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkaT8oZGkubGVuZ3RoPT09RWUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStFZVtFZS5sZW5ndGgtZGkubGVuZ3RoXS5sZW5ndGgtZGlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1ucn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtZblswXSxZblswXSt0aGlzLnl5bGVuZy1ucl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKERyKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRHIpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIERyPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRHIubGVuZ3RoPjIwPyIuLi4iOiIiKStEci5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBEcj10aGlzLm1hdGNoO3JldHVybiBEci5sZW5ndGg8MjAmJihEcis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRHIubGVuZ3RoKSksKERyLnN1YnN0cigwLDIwKSsoRHIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBEcj10aGlzLnBhc3RJbnB1dCgpLG5yPW5ldyBBcnJheShEci5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBEcit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArbnIrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKERyLG5yKXt2YXIgZGksRWUsWW47aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFluPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFluLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEVlPURyWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxFZSYmKHRoaXMueXlsaW5lbm8rPUVlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkVlP0VlW0VlLmxlbmd0aC0xXS5sZW5ndGgtRWVbRWUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRHJbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RHJbMF0sdGhpcy5tYXRjaCs9RHJbMF0sdGhpcy5tYXRjaGVzPURyLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKERyWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1EclswXSxkaT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxucix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxkaSlyZXR1cm4gZGk7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEhlIGluIFluKXRoaXNbSGVdPVluW0hlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBEcixucixkaSxFZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBZbj10aGlzLl9jdXJyZW50UnVsZXMoKSxIZT0wO0hlPFluLmxlbmd0aDtIZSsrKWlmKGRpPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbWW5bSGVdXSksZGkmJighbnJ8fGRpWzBdLmxlbmd0aD5uclswXS5sZW5ndGgpKXtpZihucj1kaSxFZT1IZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihEcj10aGlzLnRlc3RfbWF0Y2goZGksWW5bSGVdKSxEciE9PSExKXJldHVybiBEcjtpZih0aGlzLl9iYWNrdHJhY2spe25yPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIG5yPyhEcj10aGlzLnRlc3RfbWF0Y2gobnIsWW5bRWVdKSxEciE9PSExP0RyOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgbnI9dGhpcy5uZXh0KCk7cmV0dXJuIG5yfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihucil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKG5yKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgbnI9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gbnI+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihucil7cmV0dXJuIG5yPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMobnJ8fDApLG5yPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbbnJdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKG5yKXt0aGlzLmJlZ2luKG5yKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihucixkaSxFZSxZbil7c3dpdGNoKEVlKXtjYXNlIDA6cmV0dXJuIDY7Y2FzZSAxOnJldHVybiA3O2Nhc2UgMjpyZXR1cm4gODtjYXNlIDM6cmV0dXJuIDk7Y2FzZSA0OnJldHVybiAyMjtjYXNlIDU6cmV0dXJuIDIzO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjQ7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNjtjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6YzticmVhaztjYXNlIDE1OnJldHVybiAxMjtjYXNlIDE2OmJyZWFrO2Nhc2UgMTc6cmV0dXJuIDExO2Nhc2UgMTg6cmV0dXJuIDE1O2Nhc2UgMTk6cmV0dXJuIDE2O2Nhc2UgMjA6cmV0dXJuIDE3O2Nhc2UgMjE6cmV0dXJuIDE4O2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbl9leHQiKSw0NTtjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJwZXJzb24iKSw0NDtjYXNlIDI0OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X3F1ZXVlIiksNTE7Y2FzZSAyNTpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dF9kYiIpLDUwO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHQiKSw0OTtjYXNlIDI3OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fcXVldWUiKSw0ODtjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZGIiKSw0NztjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW0iKSw0NjtjYXNlIDMwOnJldHVybiB0aGlzLmJlZ2luKCJib3VuZGFyeSIpLDM3O2Nhc2UgMzE6cmV0dXJuIHRoaXMuYmVnaW4oImVudGVycHJpc2VfYm91bmRhcnkiKSwzNDtjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fYm91bmRhcnkiKSwzNjtjYXNlIDMzOnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X3F1ZXVlIiksNTc7Y2FzZSAzNDpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dF9kYiIpLDU2O2Nhc2UgMzU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHQiKSw1NTtjYXNlIDM2OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfcXVldWUiKSw1NDtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZGIiKSw1MztjYXNlIDM4OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXIiKSw1MjtjYXNlIDM5OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfYm91bmRhcnkiKSwzODtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X3F1ZXVlIiksNjM7Y2FzZSA0MTpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9kYiIpLDYyO2Nhc2UgNDI6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHQiKSw2MTtjYXNlIDQzOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfcXVldWUiKSw2MDtjYXNlIDQ0OnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZGIiKSw1OTtjYXNlIDQ1OnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnQiKSw1ODtjYXNlIDQ2OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7Y2FzZSA0NzpyZXR1cm4gdGhpcy5iZWdpbigibm9kZSIpLDM5O2Nhc2UgNDg6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGVfbCIpLDQwO2Nhc2UgNDk6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGVfciIpLDQxO2Nhc2UgNTA6cmV0dXJuIHRoaXMuYmVnaW4oInJlbCIpLDY0O2Nhc2UgNTE6cmV0dXJuIHRoaXMuYmVnaW4oImJpcmVsIiksNjU7Y2FzZSA1MjpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSw2NjtjYXNlIDUzOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2Nhc2UgNTQ6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksNjc7Y2FzZSA1NTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NztjYXNlIDU2OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLDY4O2Nhc2UgNTc6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7Y2FzZSA1ODpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSw2OTtjYXNlIDU5OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2Nhc2UgNjA6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9iIiksNzA7Y2FzZSA2MTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2luZGV4IiksNzE7Y2FzZSA2MjpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2VsX3N0eWxlIiksNzI7Y2FzZSA2MzpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX3JlbF9zdHlsZSIpLDczO2Nhc2UgNjQ6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9sYXlvdXRfY29uZmlnIiksNzQ7Y2FzZSA2NTpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA2NjpyZXR1cm4gdGhpcy5iZWdpbigiYXR0cmlidXRlIiksIkFUVFJJQlVURV9FTVBUWSI7Y2FzZSA2Nzp0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKTticmVhaztjYXNlIDY4OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OTpyZXR1cm4gODA7Y2FzZSA3MDpicmVhaztjYXNlIDcxOnJldHVybiA4MDtjYXNlIDcyOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgNzM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzQ6cmV0dXJuIlNUUiI7Y2FzZSA3NTp0aGlzLmJlZ2luKCJzdHJpbmdfa3YiKTticmVhaztjYXNlIDc2OnJldHVybiB0aGlzLmJlZ2luKCJzdHJpbmdfa3Zfa2V5IiksIlNUUl9LRVkiO2Nhc2UgNzc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInN0cmluZ19rdl92YWx1ZSIpO2JyZWFrO2Nhc2UgNzg6cmV0dXJuIlNUUl9WQUxVRSI7Y2FzZSA3OTp0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgODA6cmV0dXJuIlNUUiI7Y2FzZSA4MTpyZXR1cm4iTEJSQUNFIjtjYXNlIDgyOnJldHVybiJSQlJBQ0UiO2Nhc2UgODM6cmV0dXJuIlNQQUNFIjtjYXNlIDg0OnJldHVybiJFT0wiO2Nhc2UgODU6cmV0dXJuIDE0fX0scnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86dGl0bGVcc1teI1xuO10rKS8sL14oPzphY2NEZXNjcmlwdGlvblxzW14jXG47XSspLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OkM0Q29udGV4dFxiKS8sL14oPzpDNENvbnRhaW5lclxiKS8sL14oPzpDNENvbXBvbmVudFxiKS8sL14oPzpDNER5bmFtaWNcYikvLC9eKD86QzREZXBsb3ltZW50XGIpLywvXig/OlBlcnNvbl9FeHRcYikvLC9eKD86UGVyc29uXGIpLywvXig/OlN5c3RlbVF1ZXVlX0V4dFxiKS8sL14oPzpTeXN0ZW1EYl9FeHRcYikvLC9eKD86U3lzdGVtX0V4dFxiKS8sL14oPzpTeXN0ZW1RdWV1ZVxiKS8sL14oPzpTeXN0ZW1EYlxiKS8sL14oPzpTeXN0ZW1cYikvLC9eKD86Qm91bmRhcnlcYikvLC9eKD86RW50ZXJwcmlzZV9Cb3VuZGFyeVxiKS8sL14oPzpTeXN0ZW1fQm91bmRhcnlcYikvLC9eKD86Q29udGFpbmVyUXVldWVfRXh0XGIpLywvXig/OkNvbnRhaW5lckRiX0V4dFxiKS8sL14oPzpDb250YWluZXJfRXh0XGIpLywvXig/OkNvbnRhaW5lclF1ZXVlXGIpLywvXig/OkNvbnRhaW5lckRiXGIpLywvXig/OkNvbnRhaW5lclxiKS8sL14oPzpDb250YWluZXJfQm91bmRhcnlcYikvLC9eKD86Q29tcG9uZW50UXVldWVfRXh0XGIpLywvXig/OkNvbXBvbmVudERiX0V4dFxiKS8sL14oPzpDb21wb25lbnRfRXh0XGIpLywvXig/OkNvbXBvbmVudFF1ZXVlXGIpLywvXig/OkNvbXBvbmVudERiXGIpLywvXig/OkNvbXBvbmVudFxiKS8sL14oPzpEZXBsb3ltZW50X05vZGVcYikvLC9eKD86Tm9kZVxiKS8sL14oPzpOb2RlX0xcYikvLC9eKD86Tm9kZV9SXGIpLywvXig/OlJlbFxiKS8sL14oPzpCaVJlbFxiKS8sL14oPzpSZWxfVXBcYikvLC9eKD86UmVsX1VcYikvLC9eKD86UmVsX0Rvd25cYikvLC9eKD86UmVsX0RcYikvLC9eKD86UmVsX0xlZnRcYikvLC9eKD86UmVsX0xcYikvLC9eKD86UmVsX1JpZ2h0XGIpLywvXig/OlJlbF9SXGIpLywvXig/OlJlbF9CYWNrXGIpLywvXig/OlJlbEluZGV4XGIpLywvXig/OlVwZGF0ZUVsZW1lbnRTdHlsZVxiKS8sL14oPzpVcGRhdGVSZWxTdHlsZVxiKS8sL14oPzpVcGRhdGVMYXlvdXRDb25maWdcYikvLC9eKD86JCkvLC9eKD86WyhdWyBdKlssXSkvLC9eKD86WyhdKS8sL14oPzpbKV0pLywvXig/OiwsKS8sL14oPzosKS8sL14oPzpbIF0qWyJdWyJdKS8sL14oPzpbIF0qWyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbIF0qW1wkXSkvLC9eKD86W149XSopLywvXig/Ols9XVsgXSpbIl0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlteLF0rKS8sL14oPzpceykvLC9eKD86XH0pLywvXig/Oltcc10rKS8sL14oPzpbXG5ccl0rKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X3ZhbHVlOntydWxlczpbNzgsNzldLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X2tleTp7cnVsZXM6Wzc3XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdjp7cnVsZXM6Wzc2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzczLDc0XSxpbmNsdXNpdmU6ITF9LGF0dHJpYnV0ZTp7cnVsZXM6WzY4LDY5LDcwLDcxLDcyLDc1LDgwXSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9sYXlvdXRfY29uZmlnOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX3JlbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9lbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9kOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3U6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfYmk6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9yOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGluZGV4OntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHJlbF9pbmRleDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHRfcXVldWU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxiaXJlbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGVudGVycHJpc2VfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxwZXJzb246e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDgxLDgyLDgzLDg0LDg1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGRzfSgpO3lhLmxleGVyPWRhO2Z1bmN0aW9uIE9vKCl7dGhpcy55eT17fX1yZXR1cm4gT28ucHJvdG90eXBlPXlhLHlhLlBhcnNlcj1PbyxuZXcgT299KCk7JFcucGFyc2VyPSRXO2NvbnN0IEhNZT0kVztsZXQgcm09W10sc2s9WyIiXSxsZz0iZ2xvYmFsIixpbT0iIixkMz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0sclA9W10sRGR0PSIiLE9kdD0hMSx6Vz00LHFXPTI7dmFyIGdOdDtjb25zdCBHTWU9ZnVuY3Rpb24oKXtyZXR1cm4gZ050fSxWTWU9ZnVuY3Rpb24oaSl7Z050PURkKGksTGUoKSl9LFVNZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiLEUsXyl7aWYoaT09bnVsbHx8YT09PXZvaWQgMHx8YT09PW51bGx8fGY9PT12b2lkIDB8fGY9PT1udWxsfHxwPT09dm9pZCAwfHxwPT09bnVsbClyZXR1cm47bGV0IEw9e307Y29uc3QgTj1yUC5maW5kKEI9PkIuZnJvbT09PWEmJkIudG89PT1mKTtpZihOP0w9TjpyUC5wdXNoKEwpLEwudHlwZT1pLEwuZnJvbT1hLEwudG89ZixMLmxhYmVsPXt0ZXh0OnB9LHY9PW51bGwpTC50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtCLGpdPU9iamVjdC5lbnRyaWVzKHYpWzBdO0xbQl09e3RleHQ6an19ZWxzZSBMLnRlY2huPXt0ZXh0OnZ9O2lmKG09PW51bGwpTC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtCLGpdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0xbQl09e3RleHQ6an19ZWxzZSBMLmRlc2NyPXt0ZXh0Om19O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0Isal09T2JqZWN0LmVudHJpZXMoYilbMF07TFtCXT1qfWVsc2UgTC5zcHJpdGU9YjtpZih0eXBlb2YgRT09Im9iamVjdCIpe2xldFtCLGpdPU9iamVjdC5lbnRyaWVzKEUpWzBdO0xbQl09an1lbHNlIEwudGFncz1FO2lmKHR5cGVvZiBfPT0ib2JqZWN0Iil7bGV0W0Isal09T2JqZWN0LmVudHJpZXMoXylbMF07TFtCXT1qfWVsc2UgTC5saW5rPV87TC53cmFwPWFrKCl9LFdNZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBFPXt9O2NvbnN0IF89cm0uZmluZChMPT5MLmFsaWFzPT09YSk7aWYoXyYmYT09PV8uYWxpYXM/RT1fOihFLmFsaWFzPWEscm0ucHVzaChFKSksZj09bnVsbD9FLmxhYmVsPXt0ZXh0OiIifTpFLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpRS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtMLE5dPU9iamVjdC5lbnRyaWVzKHApWzBdO0VbTF09e3RleHQ6Tn19ZWxzZSBFLmRlc2NyPXt0ZXh0OnB9O2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0wsTl09T2JqZWN0LmVudHJpZXModilbMF07RVtMXT1OfWVsc2UgRS5zcHJpdGU9djtpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtMLE5dPU9iamVjdC5lbnRyaWVzKG0pWzBdO0VbTF09Tn1lbHNlIEUudGFncz1tO2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0wsTl09T2JqZWN0LmVudHJpZXMoYilbMF07RVtMXT1OfWVsc2UgRS5saW5rPWI7RS50eXBlQzRTaGFwZT17dGV4dDppfSxFLnBhcmVudEJvdW5kYXJ5PWxnLEUud3JhcD1haygpfSxLTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBfPXt9O2NvbnN0IEw9cm0uZmluZChOPT5OLmFsaWFzPT09YSk7aWYoTCYmYT09PUwuYWxpYXM/Xz1MOihfLmFsaWFzPWEscm0ucHVzaChfKSksZj09bnVsbD9fLmxhYmVsPXt0ZXh0OiIifTpfLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpXy50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHApWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLnRlY2huPXt0ZXh0OnB9O2lmKHY9PW51bGwpXy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHYpWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLmRlc2NyPXt0ZXh0OnZ9O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMobSlbMF07X1tOXT1CfWVsc2UgXy5zcHJpdGU9bTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO19bTl09Qn1lbHNlIF8udGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMoRSlbMF07X1tOXT1CfWVsc2UgXy5saW5rPUU7Xy53cmFwPWFrKCksXy50eXBlQzRTaGFwZT17dGV4dDppfSxfLnBhcmVudEJvdW5kYXJ5PWxnfSxZTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBfPXt9O2NvbnN0IEw9cm0uZmluZChOPT5OLmFsaWFzPT09YSk7aWYoTCYmYT09PUwuYWxpYXM/Xz1MOihfLmFsaWFzPWEscm0ucHVzaChfKSksZj09bnVsbD9fLmxhYmVsPXt0ZXh0OiIifTpfLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpXy50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHApWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLnRlY2huPXt0ZXh0OnB9O2lmKHY9PW51bGwpXy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHYpWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLmRlc2NyPXt0ZXh0OnZ9O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMobSlbMF07X1tOXT1CfWVsc2UgXy5zcHJpdGU9bTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO19bTl09Qn1lbHNlIF8udGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMoRSlbMF07X1tOXT1CfWVsc2UgXy5saW5rPUU7Xy53cmFwPWFrKCksXy50eXBlQzRTaGFwZT17dGV4dDppfSxfLnBhcmVudEJvdW5kYXJ5PWxnfSxYTWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtpZihpPT09bnVsbHx8YT09PW51bGwpcmV0dXJuO2xldCBtPXt9O2NvbnN0IGI9ZDMuZmluZChFPT5FLmFsaWFzPT09aSk7aWYoYiYmaT09PWIuYWxpYXM/bT1iOihtLmFsaWFzPWksZDMucHVzaChtKSksYT09bnVsbD9tLmxhYmVsPXt0ZXh0OiIifTptLmxhYmVsPXt0ZXh0OmF9LGY9PW51bGwpbS50eXBlPXt0ZXh0OiJzeXN0ZW0ifTtlbHNlIGlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMoZilbMF07bVtFXT17dGV4dDpffX1lbHNlIG0udHlwZT17dGV4dDpmfTtpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtFLF9dPU9iamVjdC5lbnRyaWVzKHApWzBdO21bRV09X31lbHNlIG0udGFncz1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXModilbMF07bVtFXT1ffWVsc2UgbS5saW5rPXY7bS5wYXJlbnRCb3VuZGFyeT1sZyxtLndyYXA9YWsoKSxpbT1sZyxsZz1pLHNrLnB1c2goaW0pfSxRTWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtpZihpPT09bnVsbHx8YT09PW51bGwpcmV0dXJuO2xldCBtPXt9O2NvbnN0IGI9ZDMuZmluZChFPT5FLmFsaWFzPT09aSk7aWYoYiYmaT09PWIuYWxpYXM/bT1iOihtLmFsaWFzPWksZDMucHVzaChtKSksYT09bnVsbD9tLmxhYmVsPXt0ZXh0OiIifTptLmxhYmVsPXt0ZXh0OmF9LGY9PW51bGwpbS50eXBlPXt0ZXh0OiJjb250YWluZXIifTtlbHNlIGlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMoZilbMF07bVtFXT17dGV4dDpffX1lbHNlIG0udHlwZT17dGV4dDpmfTtpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtFLF9dPU9iamVjdC5lbnRyaWVzKHApWzBdO21bRV09X31lbHNlIG0udGFncz1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXModilbMF07bVtFXT1ffWVsc2UgbS5saW5rPXY7bS5wYXJlbnRCb3VuZGFyeT1sZyxtLndyYXA9YWsoKSxpbT1sZyxsZz1pLHNrLnB1c2goaW0pfSxaTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBfPXt9O2NvbnN0IEw9ZDMuZmluZChOPT5OLmFsaWFzPT09YSk7aWYoTCYmYT09PUwuYWxpYXM/Xz1MOihfLmFsaWFzPWEsZDMucHVzaChfKSksZj09bnVsbD9fLmxhYmVsPXt0ZXh0OiIifTpfLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpXy50eXBlPXt0ZXh0OiJub2RlIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHApWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLnR5cGU9e3RleHQ6cH07aWYodj09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXModilbMF07X1tOXT17dGV4dDpCfX1lbHNlIF8uZGVzY3I9e3RleHQ6dn07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbTixCXT1PYmplY3QuZW50cmllcyhiKVswXTtfW05dPUJ9ZWxzZSBfLnRhZ3M9YjtpZih0eXBlb2YgRT09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKEUpWzBdO19bTl09Qn1lbHNlIF8ubGluaz1FO18ubm9kZVR5cGU9aSxfLnBhcmVudEJvdW5kYXJ5PWxnLF8ud3JhcD1haygpLGltPWxnLGxnPWEsc2sucHVzaChpbSl9LEpNZT1mdW5jdGlvbigpe2xnPWltLHNrLnBvcCgpLGltPXNrLnBvcCgpLHNrLnB1c2goaW0pfSx0SWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFLF8sTCxOKXtsZXQgQj1ybS5maW5kKGo9PmouYWxpYXM9PT1hKTtpZighKEI9PT12b2lkIDAmJihCPWQzLmZpbmQoaj0+ai5hbGlhcz09PWEpLEI9PT12b2lkIDApKSl7aWYoZiE9bnVsbClpZih0eXBlb2YgZj09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKGYpWzBdO0Jbal09Un1lbHNlIEIuYmdDb2xvcj1mO2lmKHAhPW51bGwpaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyhwKVswXTtCW2pdPVJ9ZWxzZSBCLmZvbnRDb2xvcj1wO2lmKHYhPW51bGwpaWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyh2KVswXTtCW2pdPVJ9ZWxzZSBCLmJvcmRlckNvbG9yPXY7aWYobSE9bnVsbClpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0Jbal09Un1lbHNlIEIuc2hhZG93aW5nPW07aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO0Jbal09Un1lbHNlIEIuc2hhcGU9YjtpZihFIT1udWxsKWlmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoRSlbMF07QltqXT1SfWVsc2UgQi5zcHJpdGU9RTtpZihfIT1udWxsKWlmKHR5cGVvZiBfPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoXylbMF07QltqXT1SfWVsc2UgQi50ZWNobj1fO2lmKEwhPW51bGwpaWYodHlwZW9mIEw9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyhMKVswXTtCW2pdPVJ9ZWxzZSBCLmxlZ2VuZFRleHQ9TDtpZihOIT1udWxsKWlmKHR5cGVvZiBOPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoTilbMF07QltqXT1SfWVsc2UgQi5sZWdlbmRTcHJpdGU9Tn19LGVJZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiKXtjb25zdCBFPXJQLmZpbmQoXz0+Xy5mcm9tPT09YSYmXy50bz09PWYpO2lmKEUhPT12b2lkIDApe2lmKHAhPW51bGwpaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyhwKVswXTtFW19dPUx9ZWxzZSBFLnRleHRDb2xvcj1wO2lmKHYhPW51bGwpaWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyh2KVswXTtFW19dPUx9ZWxzZSBFLmxpbmVDb2xvcj12O2lmKG0hPW51bGwpaWYodHlwZW9mIG09PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyhtKVswXTtFW19dPXBhcnNlSW50KEwpfWVsc2UgRS5vZmZzZXRYPXBhcnNlSW50KG0pO2lmKGIhPW51bGwpaWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyhiKVswXTtFW19dPXBhcnNlSW50KEwpfWVsc2UgRS5vZmZzZXRZPXBhcnNlSW50KGIpfX0sbkllPWZ1bmN0aW9uKGksYSxmKXtsZXQgcD16Vyx2PXFXO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Y29uc3QgbT1PYmplY3QudmFsdWVzKGEpWzBdO3A9cGFyc2VJbnQobSl9ZWxzZSBwPXBhcnNlSW50KGEpO2lmKHR5cGVvZiBmPT0ib2JqZWN0Iil7Y29uc3QgbT1PYmplY3QudmFsdWVzKGYpWzBdO3Y9cGFyc2VJbnQobSl9ZWxzZSB2PXBhcnNlSW50KGYpO3A+PTEmJih6Vz1wKSx2Pj0xJiYocVc9dil9LHJJZT1mdW5jdGlvbigpe3JldHVybiB6V30saUllPWZ1bmN0aW9uKCl7cmV0dXJuIHFXfSxzSWU9ZnVuY3Rpb24oKXtyZXR1cm4gbGd9LGFJZT1mdW5jdGlvbigpe3JldHVybiBpbX0scE50PWZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP3JtOnJtLmZpbHRlcihhPT5hLnBhcmVudEJvdW5kYXJ5PT09aSl9LG9JZT1mdW5jdGlvbihpKXtyZXR1cm4gcm0uZmluZChhPT5hLmFsaWFzPT09aSl9LGNJZT1mdW5jdGlvbihpKXtyZXR1cm4gT2JqZWN0LmtleXMocE50KGkpKX0sdUllPWZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP2QzOmQzLmZpbHRlcihhPT5hLnBhcmVudEJvdW5kYXJ5PT09aSl9LGxJZT1mdW5jdGlvbigpe3JldHVybiByUH0saEllPWZ1bmN0aW9uKCl7cmV0dXJuIERkdH0sZkllPWZ1bmN0aW9uKGkpe09kdD1pfSxhaz1mdW5jdGlvbigpe3JldHVybiBPZHR9LE5kdD17YWRkUGVyc29uT3JTeXN0ZW06V01lLGFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnk6WE1lLGFkZENvbnRhaW5lcjpLTWUsYWRkQ29udGFpbmVyQm91bmRhcnk6UU1lLGFkZENvbXBvbmVudDpZTWUsYWRkRGVwbG95bWVudE5vZGU6Wk1lLHBvcEJvdW5kYXJ5UGFyc2VTdGFjazpKTWUsYWRkUmVsOlVNZSx1cGRhdGVFbFN0eWxlOnRJZSx1cGRhdGVSZWxTdHlsZTplSWUsdXBkYXRlTGF5b3V0Q29uZmlnOm5JZSxhdXRvV3JhcDphayxzZXRXcmFwOmZJZSxnZXRDNFNoYXBlQXJyYXk6cE50LGdldEM0U2hhcGU6b0llLGdldEM0U2hhcGVLZXlzOmNJZSxnZXRCb3VuZGFyeXM6dUllLGdldEN1cnJlbnRCb3VuZGFyeVBhcnNlOnNJZSxnZXRQYXJlbnRCb3VuZGFyeVBhcnNlOmFJZSxnZXRSZWxzOmxJZSxnZXRUaXRsZTpoSWUsZ2V0QzRUeXBlOkdNZSxnZXRDNFNoYXBlSW5Sb3c6ckllLGdldEM0Qm91bmRhcnlJblJvdzppSWUsc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0Q29uZmlnOigpPT5MZSgpLmM0LGNsZWFyOmZ1bmN0aW9uKCl7cm09W10sZDM9W3thbGlhczoiZ2xvYmFsIixsYWJlbDp7dGV4dDoiZ2xvYmFsIn0sdHlwZTp7dGV4dDoiZ2xvYmFsIn0sdGFnczpudWxsLGxpbms6bnVsbCxwYXJlbnRCb3VuZGFyeToiIn1dLGltPSIiLGxnPSJnbG9iYWwiLHNrPVsiIl0sclA9W10sc2s9WyIiXSxEZHQ9IiIsT2R0PSExLHpXPTQscVc9Mn0sTElORVRZUEU6e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1fSxBUlJPV1RZUEU6e0ZJTExFRDowLE9QRU46MX0sUExBQ0VNRU5UOntMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxzZXRUaXRsZTpmdW5jdGlvbihpKXtEZHQ9RGQoaSxMZSgpKX0sc2V0QzRUeXBlOlZNZX0sSFc9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJyZWN0Iik7aWYoZi5hdHRyKCJ4IixhLngpLGYuYXR0cigieSIsYS55KSxmLmF0dHIoImZpbGwiLGEuZmlsbCksZi5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKSxmLmF0dHIoIndpZHRoIixhLndpZHRoKSxmLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLGEucnghPT12b2lkIDAmJmYuYXR0cigicngiLGEucngpLGEucnkhPT12b2lkIDAmJmYuYXR0cigicnkiLGEucnkpLGEuYXR0cnMhPT12b2lkIDApZm9yKGNvbnN0IHAgaW4gYS5hdHRycylmLmF0dHIocCxhLmF0dHJzW3BdKTtyZXR1cm4gYS5jbGFzcyE9PXZvaWQgMCYmZi5hdHRyKCJjbGFzcyIsYS5jbGFzcyksZn0sYk50PShpLGEpPT57Y29uc3QgZj17eDphLnN0YXJ0eCx5OmEuc3RhcnR5LHdpZHRoOmEuc3RvcHgtYS5zdGFydHgsaGVpZ2h0OmEuc3RvcHktYS5zdGFydHksZmlsbDphLmZpbGwsc3Ryb2tlOmEuc3Ryb2tlLGNsYXNzOiJyZWN0In07SFcoaSxmKS5sb3dlcigpfSxkSWU9KGksYSk9Pntjb25zdCBmPWEudGV4dC5yZXBsYWNlKCROLCIgIikscD1pLmFwcGVuZCgidGV4dCIpO3AuYXR0cigieCIsYS54KSxwLmF0dHIoInkiLGEueSkscC5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHAuc3R5bGUoInRleHQtYW5jaG9yIixhLmFuY2hvciksYS5jbGFzcyE9PXZvaWQgMCYmcC5hdHRyKCJjbGFzcyIsYS5jbGFzcyk7Y29uc3Qgdj1wLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gdi5hdHRyKCJ4IixhLngrYS50ZXh0TWFyZ2luKjIpLHYudGV4dChmKSxwfSxnSWU9KGksYSxmLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgiaW1hZ2UiKTt2LmF0dHIoIngiLGEpLHYuYXR0cigieSIsZik7Y29uc3QgbT1RNihwKTt2LmF0dHIoInhsaW5rOmhyZWYiLG0pfSxwSWU9KGksYSxmLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgidXNlIik7di5hdHRyKCJ4IixhKSx2LmF0dHIoInkiLGYpO2NvbnN0IG09UTYocCk7di5hdHRyKCJ4bGluazpocmVmIixgIyR7bX1gKX0sZlQ9KCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLGFuY2hvcjoic3RhcnQiLHJ4OjAscnk6MH0pLFBkdD0oKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IixzdHlsZToiIzY2NiIsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMH0pLEZkdD1mdW5jdGlvbihpLGEpe3JldHVybiBIVyhpLGEpfSx2TnQ9ZnVuY3Rpb24oaSxhLGYscCx2LG0pe2NvbnN0IGI9aS5hcHBlbmQoImltYWdlIik7Yi5hdHRyKCJ3aWR0aCIsYSksYi5hdHRyKCJoZWlnaHQiLGYpLGIuYXR0cigieCIscCksYi5hdHRyKCJ5Iix2KTtsZXQgRT1tLnN0YXJ0c1dpdGgoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCIpP206UTYobSk7Yi5hdHRyKCJ4bGluazpocmVmIixFKX0sYkllPShpLGEsZik9Pntjb25zdCBwPWkuYXBwZW5kKCJnIik7bGV0IHY9MDtmb3IobGV0IG0gb2YgYSl7bGV0IGI9bS50ZXh0Q29sb3I/bS50ZXh0Q29sb3I6IiM0NDQ0NDQiLEU9bS5saW5lQ29sb3I/bS5saW5lQ29sb3I6IiM0NDQ0NDQiLF89bS5vZmZzZXRYP3BhcnNlSW50KG0ub2Zmc2V0WCk6MCxMPW0ub2Zmc2V0WT9wYXJzZUludChtLm9mZnNldFkpOjAsTj0iIjtpZih2PT09MCl7bGV0IGo9cC5hcHBlbmQoImxpbmUiKTtqLmF0dHIoIngxIixtLnN0YXJ0UG9pbnQueCksai5hdHRyKCJ5MSIsbS5zdGFydFBvaW50LnkpLGouYXR0cigieDIiLG0uZW5kUG9pbnQueCksai5hdHRyKCJ5MiIsbS5lbmRQb2ludC55KSxqLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKSxqLmF0dHIoInN0cm9rZSIsRSksai5zdHlsZSgiZmlsbCIsIm5vbmUiKSxtLnR5cGUhPT0icmVsX2IiJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitOKyIjYXJyb3doZWFkKSIpLChtLnR5cGU9PT0iYmlyZWwifHxtLnR5cGU9PT0icmVsX2IiKSYmai5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitOKyIjYXJyb3dlbmQpIiksdj0tMX1lbHNle2xldCBqPXAuYXBwZW5kKCJwYXRoIik7ai5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKS5hdHRyKCJzdHJva2UiLEUpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eSBRY29udHJvbHgsY29udHJvbHkgc3RvcHgsc3RvcHkgIi5yZXBsYWNlQWxsKCJzdGFydHgiLG0uc3RhcnRQb2ludC54KS5yZXBsYWNlQWxsKCJzdGFydHkiLG0uc3RhcnRQb2ludC55KS5yZXBsYWNlQWxsKCJjb250cm9seCIsbS5zdGFydFBvaW50LngrKG0uZW5kUG9pbnQueC1tLnN0YXJ0UG9pbnQueCkvMi0obS5lbmRQb2ludC54LW0uc3RhcnRQb2ludC54KS80KS5yZXBsYWNlQWxsKCJjb250cm9seSIsbS5zdGFydFBvaW50LnkrKG0uZW5kUG9pbnQueS1tLnN0YXJ0UG9pbnQueSkvMikucmVwbGFjZUFsbCgic3RvcHgiLG0uZW5kUG9pbnQueCkucmVwbGFjZUFsbCgic3RvcHkiLG0uZW5kUG9pbnQueSkpLG0udHlwZSE9PSJyZWxfYiImJmouYXR0cigibWFya2VyLWVuZCIsInVybCgiK04rIiNhcnJvd2hlYWQpIiksKG0udHlwZT09PSJiaXJlbCJ8fG0udHlwZT09PSJyZWxfYiIpJiZqLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK04rIiNhcnJvd2VuZCkiKX1sZXQgQj1mLm1lc3NhZ2VGb250KCk7azUoZikobS5sYWJlbC50ZXh0LHAsTWF0aC5taW4obS5zdGFydFBvaW50LngsbS5lbmRQb2ludC54KStNYXRoLmFicyhtLmVuZFBvaW50LngtbS5zdGFydFBvaW50LngpLzIrXyxNYXRoLm1pbihtLnN0YXJ0UG9pbnQueSxtLmVuZFBvaW50LnkpK01hdGguYWJzKG0uZW5kUG9pbnQueS1tLnN0YXJ0UG9pbnQueSkvMitMLG0ubGFiZWwud2lkdGgsbS5sYWJlbC5oZWlnaHQse2ZpbGw6Yn0sQiksbS50ZWNobiYmbS50ZWNobi50ZXh0IT09IiImJihCPWYubWVzc2FnZUZvbnQoKSxrNShmKSgiWyIrbS50ZWNobi50ZXh0KyJdIixwLE1hdGgubWluKG0uc3RhcnRQb2ludC54LG0uZW5kUG9pbnQueCkrTWF0aC5hYnMobS5lbmRQb2ludC54LW0uc3RhcnRQb2ludC54KS8yK18sTWF0aC5taW4obS5zdGFydFBvaW50LnksbS5lbmRQb2ludC55KStNYXRoLmFicyhtLmVuZFBvaW50LnktbS5zdGFydFBvaW50LnkpLzIrZi5tZXNzYWdlRm9udFNpemUrNStMLE1hdGgubWF4KG0ubGFiZWwud2lkdGgsbS50ZWNobi53aWR0aCksbS50ZWNobi5oZWlnaHQse2ZpbGw6YiwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEIpKX19LHZJZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpO2xldCB2PWEuYmdDb2xvcj9hLmJnQ29sb3I6Im5vbmUiLG09YS5ib3JkZXJDb2xvcj9hLmJvcmRlckNvbG9yOiIjNDQ0NDQ0IixiPWEuZm9udENvbG9yP2EuZm9udENvbG9yOiJibGFjayIsRT17InN0cm9rZS13aWR0aCI6MSwic3Ryb2tlLWRhc2hhcnJheSI6IjcuMCw3LjAifTthLm5vZGVUeXBlJiYoRT17InN0cm9rZS13aWR0aCI6MX0pO2xldCBfPXt4OmEueCx5OmEueSxmaWxsOnYsc3Ryb2tlOm0sd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQscng6Mi41LHJ5OjIuNSxhdHRyczpFfTtGZHQocCxfKTtsZXQgTD1mLmJvdW5kYXJ5Rm9udCgpO0wuZm9udFdlaWdodD0iYm9sZCIsTC5mb250U2l6ZT1MLmZvbnRTaXplKzIsTC5mb250Q29sb3I9YixrNShmKShhLmxhYmVsLnRleHQscCxhLngsYS55K2EubGFiZWwuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sTCksYS50eXBlJiZhLnR5cGUudGV4dCE9PSIiJiYoTD1mLmJvdW5kYXJ5Rm9udCgpLEwuZm9udENvbG9yPWIsazUoZikoYS50eXBlLnRleHQscCxhLngsYS55K2EudHlwZS5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxMKSksYS5kZXNjciYmYS5kZXNjci50ZXh0IT09IiImJihMPWYuYm91bmRhcnlGb250KCksTC5mb250U2l6ZT1MLmZvbnRTaXplLTIsTC5mb250Q29sb3I9YixrNShmKShhLmRlc2NyLnRleHQscCxhLngsYS55K2EuZGVzY3IuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sTCkpfSx3SWU9ZnVuY3Rpb24oaSxhLGYpe3ZhciBCO2xldCBwPWEuYmdDb2xvcj9hLmJnQ29sb3I6ZlthLnR5cGVDNFNoYXBlLnRleHQrIl9iZ19jb2xvciJdLHY9YS5ib3JkZXJDb2xvcj9hLmJvcmRlckNvbG9yOmZbYS50eXBlQzRTaGFwZS50ZXh0KyJfYm9yZGVyX2NvbG9yIl0sbT1hLmZvbnRDb2xvcj9hLmZvbnRDb2xvcjoiI0ZGRkZGRiIsYj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7c3dpdGNoKGEudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrO2Nhc2UiZXh0ZXJuYWxfcGVyc29uIjpiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFCNkVsRVFWUjRYdTJZTFkrRU1CQ0c5K2RXcjBhajBXZzBHbzFHbzArajhYZHYydVRDdnYxZ3B0MGViSEtQdWhEYWVXNDYwNVo5bUp2eDRBZFhVeVRVZGQwOHordTZmbG1XWlJuSHNXa2FmazlEcHRBd0RQdStmMGVBWXR1MlBFYUdXdWo1ZkNJWnJCQUMyZUxCQW5SQ3NFa2t4bWVhSnA3aURKMlFNRGRIc0xnOFN4S0ZFSmFBbzhsQVhubXVPRkloVE1weHhLQVRlYm80VWlGa251Tm80T25pU0lYUXlSeEVBM1lzbmpHQ1ZFalZYRDd5TFVBcXhCR1V5UHYvWTRXMmJlTWdHdVM3a1ZRSUJ5Y0gwZkQrb2k1cGV6UUVUeGRIS21RS0drMWVRRVlsZEsranc1R3hQZlo5ejdNazBRbmhmMVcxbTN3Ly9FVW41QkRtU1pzYlI0NFFRTEJFcXJCSHFPcm1TS2FRQXhkbkxBckNyeFpjTTdBN1pLczRpb1JxOExGQytOcEMzV0NCSnN2cFZ3NWVkbTlpRVhGdXlOZnhYQWdTd2ZyRlExYzBpTmRhOEFkZWp2VWdua3RPdEpRUXhtY2ZGekdnbGM1V1ZDajdvRGdGcVUxOGJvZUZTczUyQ1VoOExFOEJJVlFEVDFBQnJCMEh0Z1NFWWxYNWRvSm5Dd3Y5VFhvY0tDYUtibndoZERLUHE0bGYzU3dVM0hMcTRWLytXWWhIVk1hLzNiNElsZnlpa0FkdUNrY0JjN21RMy96L1FxL2NUdWlraGt6QjEyQWUvbWNKQzlVK1ZvOEVqMWdXQXRnYmVHZ0ZzQU1IcjUwQklXT0xDYmV6dmhwQkZVZFk2RUp1Si9RRFcwWG9NWDYwelowQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrfWNvbnN0IEU9aS5hcHBlbmQoImciKTtFLmF0dHIoImNsYXNzIiwicGVyc29uLW1hbiIpO2NvbnN0IF89ZlQoKTtzd2l0Y2goYS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOmNhc2Uic3lzdGVtIjpjYXNlImV4dGVybmFsX3N5c3RlbSI6Y2FzZSJjb250YWluZXIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyIjpjYXNlImNvbXBvbmVudCI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnQiOl8ueD1hLngsXy55PWEueSxfLmZpbGw9cCxfLndpZHRoPWEud2lkdGgsXy5oZWlnaHQ9YS5oZWlnaHQsXy5zdHJva2U9dixfLnJ4PTIuNSxfLnJ5PTIuNSxfLmF0dHJzPXsic3Ryb2tlLXdpZHRoIjouNX0sRmR0KEUsXyk7YnJlYWs7Y2FzZSJzeXN0ZW1fZGIiOmNhc2UiZXh0ZXJuYWxfc3lzdGVtX2RiIjpjYXNlImNvbnRhaW5lcl9kYiI6Y2FzZSJleHRlcm5hbF9jb250YWluZXJfZGIiOmNhc2UiY29tcG9uZW50X2RiIjpjYXNlImV4dGVybmFsX2NvbXBvbmVudF9kYiI6RS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIixwKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHYpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMwLC0xMCBoYWxmLC0xMCBoYWxmLC0xMGMwLDAgaGFsZiwwIGhhbGYsMTBsMCxoZWlnaHRjMCwxMCAtaGFsZiwxMCAtaGFsZiwxMGMwLDAgLWhhbGYsMCAtaGFsZiwtMTBsMCwtaGVpZ2h0Ii5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCkucmVwbGFjZUFsbCgic3RhcnR5IixhLnkpLnJlcGxhY2VBbGwoImhhbGYiLGEud2lkdGgvMikucmVwbGFjZUFsbCgiaGVpZ2h0IixhLmhlaWdodCkpLEUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHYpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMwLDEwIGhhbGYsMTAgaGFsZiwxMGMwLDAgaGFsZiwwIGhhbGYsLTEwIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCkucmVwbGFjZUFsbCgic3RhcnR5IixhLnkpLnJlcGxhY2VBbGwoImhhbGYiLGEud2lkdGgvMikpO2JyZWFrO2Nhc2Uic3lzdGVtX3F1ZXVlIjpjYXNlImV4dGVybmFsX3N5c3RlbV9xdWV1ZSI6Y2FzZSJjb250YWluZXJfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlIjpjYXNlImNvbXBvbmVudF9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfcXVldWUiOkUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIscCkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIix2KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHlsd2lkdGgsMGM1LDAgNSxoYWxmIDUsaGFsZmMwLDAgMCxoYWxmIC01LGhhbGZsLXdpZHRoLDBjLTUsMCAtNSwtaGFsZiAtNSwtaGFsZmMwLDAgMCwtaGFsZiA1LC1oYWxmIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCkucmVwbGFjZUFsbCgic3RhcnR5IixhLnkpLnJlcGxhY2VBbGwoIndpZHRoIixhLndpZHRoKS5yZXBsYWNlQWxsKCJoYWxmIixhLmhlaWdodC8yKSksRS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsdikuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5Yy01LDAgLTUsaGFsZiAtNSxoYWxmYzAsaGFsZiA1LGhhbGYgNSxoYWxmIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCthLndpZHRoKS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgiaGFsZiIsYS5oZWlnaHQvMikpO2JyZWFrfWxldCBMPVNJZShmLGEudHlwZUM0U2hhcGUudGV4dCk7c3dpdGNoKEUuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsbSkuYXR0cigiZm9udC1mYW1pbHkiLEwuZm9udEZhbWlseSkuYXR0cigiZm9udC1zaXplIixMLmZvbnRTaXplLTIpLmF0dHIoImZvbnQtc3R5bGUiLCJpdGFsaWMiKS5hdHRyKCJsZW5ndGhBZGp1c3QiLCJzcGFjaW5nIikuYXR0cigidGV4dExlbmd0aCIsYS50eXBlQzRTaGFwZS53aWR0aCkuYXR0cigieCIsYS54K2Eud2lkdGgvMi1hLnR5cGVDNFNoYXBlLndpZHRoLzIpLmF0dHIoInkiLGEueSthLnR5cGVDNFNoYXBlLlkpLnRleHQoIjw8IithLnR5cGVDNFNoYXBlLnRleHQrIj4+IiksYS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOnZOdChFLDQ4LDQ4LGEueCthLndpZHRoLzItMjQsYS55K2EuaW1hZ2UuWSxiKTticmVha31sZXQgTj1mW2EudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCk7cmV0dXJuIE4uZm9udFdlaWdodD0iYm9sZCIsTi5mb250U2l6ZT1OLmZvbnRTaXplKzIsTi5mb250Q29sb3I9bSxrNShmKShhLmxhYmVsLnRleHQsRSxhLngsYS55K2EubGFiZWwuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm19LE4pLE49ZlthLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpLE4uZm9udENvbG9yPW0sYS50ZWNobiYmKChCPWEudGVjaG4pPT1udWxsP3ZvaWQgMDpCLnRleHQpIT09IiI/azUoZikoYS50ZWNobi50ZXh0LEUsYS54LGEueSthLnRlY2huLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDptLCJmb250LXN0eWxlIjoiaXRhbGljIn0sTik6YS50eXBlJiZhLnR5cGUudGV4dCE9PSIiJiZrNShmKShhLnR5cGUudGV4dCxFLGEueCxhLnkrYS50eXBlLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDptLCJmb250LXN0eWxlIjoiaXRhbGljIn0sTiksYS5kZXNjciYmYS5kZXNjci50ZXh0IT09IiImJihOPWYucGVyc29uRm9udCgpLE4uZm9udENvbG9yPW0sazUoZikoYS5kZXNjci50ZXh0LEUsYS54LGEueSthLmRlc2NyLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDptfSxOKSksYS5oZWlnaHR9LG1JZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0seUllPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LHhJZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSxrSWU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sRUllPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93ZW5kIikuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6Iil9LFRJZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxDSWU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwic2VxdWVuY2VudW1iZXIiKS5hdHRyKCJyZWZYIiwxNSkuYXR0cigicmVmWSIsMTUpLmF0dHIoIm1hcmtlcldpZHRoIiw2MCkuYXR0cigibWFya2VySGVpZ2h0Iiw0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDE1KS5hdHRyKCJjeSIsMTUpLmF0dHIoInIiLDYpfSxfSWU9ZnVuY3Rpb24oaSl7Y29uc3QgZj1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJjcm9zc2hlYWQiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTUpLmF0dHIoIm1hcmtlckhlaWdodCIsOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmF0dHIoInJlZlgiLDE2KS5hdHRyKCJyZWZZIiw0KTtmLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSA5LDIgViA2IEwxNiw0IFoiKSxmLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDAsMSBMIDYsNyBNIDYsMSBMIDAsNyIpfSxTSWU9KGksYSk9Pih7Zm9udEZhbWlseTppW2ErIkZvbnRGYW1pbHkiXSxmb250U2l6ZTppW2ErIkZvbnRTaXplIl0sZm9udFdlaWdodDppW2ErIkZvbnRXZWlnaHQiXX0pLGs1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh2LG0sYixFLF8sTCxOKXtjb25zdCBCPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUrTC8yKzUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodik7cChCLE4pfWZ1bmN0aW9uIGEodixtLGIsRSxfLEwsTixCKXtjb25zdHtmb250U2l6ZTpqLGZvbnRGYW1pbHk6Uixmb250V2VpZ2h0Onp9PUIsSz12LnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IobGV0IGl0PTA7aXQ8Sy5sZW5ndGg7aXQrKyl7Y29uc3Qgc3Q9aXQqai1qKihLLmxlbmd0aC0xKS8yLHV0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsaikuc3R5bGUoImZvbnQtd2VpZ2h0Iix6KS5zdHlsZSgiZm9udC1mYW1pbHkiLFIpO3V0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJkeSIsc3QpLnRleHQoS1tpdF0pLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1hdGhlbWF0aWNhbCIpLHAodXQsTil9fWZ1bmN0aW9uIGYodixtLGIsRSxfLEwsTixCKXtjb25zdCBqPW0uYXBwZW5kKCJzd2l0Y2giKSx6PWouYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsTCkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7ei5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxhKHYsaixiLEUsXyxMLE4sQikscCh6LE4pfWZ1bmN0aW9uIHAodixtKXtmb3IoY29uc3QgYiBpbiBtKW0uaGFzT3duUHJvcGVydHkoYikmJnYuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gdi50ZXh0UGxhY2VtZW50PT09ImZvIj9mOnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksZzM9e2RyYXdSZWN0OkZkdCxkcmF3Qm91bmRhcnk6dkllLGRyYXdDNFNoYXBlOndJZSxkcmF3UmVsczpiSWUsZHJhd0ltYWdlOnZOdCxpbnNlcnRBcnJvd0hlYWQ6a0llLGluc2VydEFycm93RW5kOkVJZSxpbnNlcnRBcnJvd0ZpbGxlZEhlYWQ6VEllLGluc2VydER5bmFtaWNOdW1iZXI6Q0llLGluc2VydEFycm93Q3Jvc3NIZWFkOl9JZSxpbnNlcnREYXRhYmFzZUljb246bUllLGluc2VydENvbXB1dGVySWNvbjp5SWUsaW5zZXJ0Q2xvY2tJY29uOnhJZX07bGV0IEdXPTAsVlc9MCx3TnQ9NCxCZHQ9MjskVy55eT1OZHQ7bGV0IGZzPXt9O2NsYXNzIG1OdHtjb25zdHJ1Y3RvcihhKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXt9LHRoaXMuZGF0YS5zdGFydHg9dm9pZCAwLHRoaXMuZGF0YS5zdG9weD12b2lkIDAsdGhpcy5kYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5kYXRhLnN0b3B5PXZvaWQgMCx0aGlzLmRhdGEud2lkdGhMaW1pdD12b2lkIDAsdGhpcy5uZXh0RGF0YT17fSx0aGlzLm5leHREYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdGFydHk9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHk9dm9pZCAwLHRoaXMubmV4dERhdGEuY250PTAsUmR0KGEuZGIuZ2V0Q29uZmlnKCkpfXNldERhdGEoYSxmLHAsdil7dGhpcy5uZXh0RGF0YS5zdGFydHg9dGhpcy5kYXRhLnN0YXJ0eD1hLHRoaXMubmV4dERhdGEuc3RvcHg9dGhpcy5kYXRhLnN0b3B4PWYsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5kYXRhLnN0YXJ0eT1wLHRoaXMubmV4dERhdGEuc3RvcHk9dGhpcy5kYXRhLnN0b3B5PXZ9dXBkYXRlVmFsKGEsZixwLHYpe2FbZl09PT12b2lkIDA/YVtmXT1wOmFbZl09dihwLGFbZl0pfWluc2VydChhKXt0aGlzLm5leHREYXRhLmNudD10aGlzLm5leHREYXRhLmNudCsxO2xldCBmPXRoaXMubmV4dERhdGEuc3RhcnR4PT09dGhpcy5uZXh0RGF0YS5zdG9weD90aGlzLm5leHREYXRhLnN0b3B4K2EubWFyZ2luOnRoaXMubmV4dERhdGEuc3RvcHgrYS5tYXJnaW4qMixwPWYrYS53aWR0aCx2PXRoaXMubmV4dERhdGEuc3RhcnR5K2EubWFyZ2luKjIsbT12K2EuaGVpZ2h0OyhmPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8cD49dGhpcy5kYXRhLndpZHRoTGltaXR8fHRoaXMubmV4dERhdGEuY250PndOdCkmJihmPXRoaXMubmV4dERhdGEuc3RhcnR4K2EubWFyZ2luK2ZzLm5leHRMaW5lUGFkZGluZ1gsdj10aGlzLm5leHREYXRhLnN0b3B5K2EubWFyZ2luKjIsdGhpcy5uZXh0RGF0YS5zdG9weD1wPWYrYS53aWR0aCx0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLm5leHREYXRhLnN0b3B5LHRoaXMubmV4dERhdGEuc3RvcHk9bT12K2EuaGVpZ2h0LHRoaXMubmV4dERhdGEuY250PTEpLGEueD1mLGEueT12LHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RhcnR4IixmLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eSIsdixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdG9weCIscCxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdG9weSIsbSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR4IixmLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdGFydHkiLHYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0b3B4IixwLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weSIsbSxNYXRoLm1heCl9aW5pdChhKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMCx3aWR0aExpbWl0OnZvaWQgMH0sdGhpcy5uZXh0RGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsY250OjB9LFJkdChhLmRiLmdldENvbmZpZygpKX1idW1wTGFzdE1hcmdpbihhKXt0aGlzLmRhdGEuc3RvcHgrPWEsdGhpcy5kYXRhLnN0b3B5Kz1hfX1jb25zdCBSZHQ9ZnVuY3Rpb24oaSl7WTEoZnMsaSksaS5mb250RmFtaWx5JiYoZnMucGVyc29uRm9udEZhbWlseT1mcy5zeXN0ZW1Gb250RmFtaWx5PWZzLm1lc3NhZ2VGb250RmFtaWx5PWkuZm9udEZhbWlseSksaS5mb250U2l6ZSYmKGZzLnBlcnNvbkZvbnRTaXplPWZzLnN5c3RlbUZvbnRTaXplPWZzLm1lc3NhZ2VGb250U2l6ZT1pLmZvbnRTaXplKSxpLmZvbnRXZWlnaHQmJihmcy5wZXJzb25Gb250V2VpZ2h0PWZzLnN5c3RlbUZvbnRXZWlnaHQ9ZnMubWVzc2FnZUZvbnRXZWlnaHQ9aS5mb250V2VpZ2h0KX0saVA9KGksYSk9Pih7Zm9udEZhbWlseTppW2ErIkZvbnRGYW1pbHkiXSxmb250U2l6ZTppW2ErIkZvbnRTaXplIl0sZm9udFdlaWdodDppW2ErIkZvbnRXZWlnaHQiXX0pLFVXPWk9Pih7Zm9udEZhbWlseTppLmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTppLmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDppLmJvdW5kYXJ5Rm9udFdlaWdodH0pLEFJZT1pPT4oe2ZvbnRGYW1pbHk6aS5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTppLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OmkubWVzc2FnZUZvbnRXZWlnaHR9KTtmdW5jdGlvbiBzbShpLGEsZixwLHYpe2lmKCFhW2ldLndpZHRoKWlmKGYpYVtpXS50ZXh0PVZEdChhW2ldLnRleHQsdixwKSxhW2ldLnRleHRMaW5lcz1hW2ldLnRleHQuc3BsaXQoWXIubGluZUJyZWFrUmVnZXgpLmxlbmd0aCxhW2ldLndpZHRoPXYsYVtpXS5oZWlnaHQ9bmR0KGFbaV0udGV4dCxwKTtlbHNle2xldCBtPWFbaV0udGV4dC5zcGxpdChZci5saW5lQnJlYWtSZWdleCk7YVtpXS50ZXh0TGluZXM9bS5sZW5ndGg7bGV0IGI9MDthW2ldLmhlaWdodD0wLGFbaV0ud2lkdGg9MDtmb3IoY29uc3QgRSBvZiBtKWFbaV0ud2lkdGg9TWF0aC5tYXgoaDMoRSxwKSxhW2ldLndpZHRoKSxiPW5kdChFLHApLGFbaV0uaGVpZ2h0PWFbaV0uaGVpZ2h0K2J9fWNvbnN0IHlOdD1mdW5jdGlvbihpLGEsZil7YS54PWYuZGF0YS5zdGFydHgsYS55PWYuZGF0YS5zdGFydHksYS53aWR0aD1mLmRhdGEuc3RvcHgtZi5kYXRhLnN0YXJ0eCxhLmhlaWdodD1mLmRhdGEuc3RvcHktZi5kYXRhLnN0YXJ0eSxhLmxhYmVsLnk9ZnMuYzRTaGFwZU1hcmdpbi0zNTtsZXQgcD1hLndyYXAmJmZzLndyYXAsdj1VVyhmcyk7di5mb250U2l6ZT12LmZvbnRTaXplKzIsdi5mb250V2VpZ2h0PSJib2xkIjtsZXQgbT1oMyhhLmxhYmVsLnRleHQsdik7c20oImxhYmVsIixhLHAsdixtKSxnMy5kcmF3Qm91bmRhcnkoaSxhLGZzKX0seE50PWZ1bmN0aW9uKGksYSxmLHApe2xldCB2PTA7Zm9yKGNvbnN0IG0gb2YgcCl7dj0wO2NvbnN0IGI9ZlttXTtsZXQgRT1pUChmcyxiLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChFLmZvbnRTaXplPUUuZm9udFNpemUtMixiLnR5cGVDNFNoYXBlLndpZHRoPWgzKCLCqyIrYi50eXBlQzRTaGFwZS50ZXh0KyLCuyIsRSksYi50eXBlQzRTaGFwZS5oZWlnaHQ9RS5mb250U2l6ZSsyLGIudHlwZUM0U2hhcGUuWT1mcy5jNFNoYXBlUGFkZGluZyx2PWIudHlwZUM0U2hhcGUuWStiLnR5cGVDNFNoYXBlLmhlaWdodC00LGIuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSxiLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Yi5pbWFnZS53aWR0aD00OCxiLmltYWdlLmhlaWdodD00OCxiLmltYWdlLlk9dix2PWIuaW1hZ2UuWStiLmltYWdlLmhlaWdodDticmVha31iLnNwcml0ZSYmKGIuaW1hZ2Uud2lkdGg9NDgsYi5pbWFnZS5oZWlnaHQ9NDgsYi5pbWFnZS5ZPXYsdj1iLmltYWdlLlkrYi5pbWFnZS5oZWlnaHQpO2xldCBfPWIud3JhcCYmZnMud3JhcCxMPWZzLndpZHRoLWZzLmM0U2hhcGVQYWRkaW5nKjIsTj1pUChmcyxiLnR5cGVDNFNoYXBlLnRleHQpO2lmKE4uZm9udFNpemU9Ti5mb250U2l6ZSsyLE4uZm9udFdlaWdodD0iYm9sZCIsc20oImxhYmVsIixiLF8sTixMKSxiLmxhYmVsLlk9dis4LHY9Yi5sYWJlbC5ZK2IubGFiZWwuaGVpZ2h0LGIudHlwZSYmYi50eXBlLnRleHQhPT0iIil7Yi50eXBlLnRleHQ9IlsiK2IudHlwZS50ZXh0KyJdIjtsZXQgUj1pUChmcyxiLnR5cGVDNFNoYXBlLnRleHQpO3NtKCJ0eXBlIixiLF8sUixMKSxiLnR5cGUuWT12KzUsdj1iLnR5cGUuWStiLnR5cGUuaGVpZ2h0fWVsc2UgaWYoYi50ZWNobiYmYi50ZWNobi50ZXh0IT09IiIpe2IudGVjaG4udGV4dD0iWyIrYi50ZWNobi50ZXh0KyJdIjtsZXQgUj1pUChmcyxiLnRlY2huLnRleHQpO3NtKCJ0ZWNobiIsYixfLFIsTCksYi50ZWNobi5ZPXYrNSx2PWIudGVjaG4uWStiLnRlY2huLmhlaWdodH1sZXQgQj12LGo9Yi5sYWJlbC53aWR0aDtpZihiLmRlc2NyJiZiLmRlc2NyLnRleHQhPT0iIil7bGV0IFI9aVAoZnMsYi50eXBlQzRTaGFwZS50ZXh0KTtzbSgiZGVzY3IiLGIsXyxSLEwpLGIuZGVzY3IuWT12KzIwLHY9Yi5kZXNjci5ZK2IuZGVzY3IuaGVpZ2h0LGo9TWF0aC5tYXgoYi5sYWJlbC53aWR0aCxiLmRlc2NyLndpZHRoKSxCPXYtYi5kZXNjci50ZXh0TGluZXMqNX1qPWorZnMuYzRTaGFwZVBhZGRpbmcsYi53aWR0aD1NYXRoLm1heChiLndpZHRofHxmcy53aWR0aCxqLGZzLndpZHRoKSxiLmhlaWdodD1NYXRoLm1heChiLmhlaWdodHx8ZnMuaGVpZ2h0LEIsZnMuaGVpZ2h0KSxiLm1hcmdpbj1iLm1hcmdpbnx8ZnMuYzRTaGFwZU1hcmdpbixpLmluc2VydChiKSxnMy5kcmF3QzRTaGFwZShhLGIsZnMpfWkuYnVtcExhc3RNYXJnaW4oZnMuYzRTaGFwZU1hcmdpbil9O2xldCBKMj1jbGFzc3tjb25zdHJ1Y3RvcihhLGYpe3RoaXMueD1hLHRoaXMueT1mfX0sa050PWZ1bmN0aW9uKGksYSl7bGV0IGY9aS54LHA9aS55LHY9YS54LG09YS55LGI9ZitpLndpZHRoLzIsRT1wK2kuaGVpZ2h0LzIsXz1NYXRoLmFicyhmLXYpLEw9TWF0aC5hYnMocC1tKSxOPUwvXyxCPWkuaGVpZ2h0L2kud2lkdGgsaj1udWxsO3JldHVybiBwPT1tJiZmPHY/aj1uZXcgSjIoZitpLndpZHRoLEUpOnA9PW0mJmY+dj9qPW5ldyBKMihmLEUpOmY9PXYmJnA8bT9qPW5ldyBKMihiLHAraS5oZWlnaHQpOmY9PXYmJnA+bSYmKGo9bmV3IEoyKGIscCkpLGY+diYmcDxtP0I+PU4/aj1uZXcgSjIoZixFK04qaS53aWR0aC8yKTpqPW5ldyBKMihiLV8vTCppLmhlaWdodC8yLHAraS5oZWlnaHQpOmY8diYmcDxtP0I+PU4/aj1uZXcgSjIoZitpLndpZHRoLEUrTippLndpZHRoLzIpOmo9bmV3IEoyKGIrXy9MKmkuaGVpZ2h0LzIscCtpLmhlaWdodCk6Zjx2JiZwPm0/Qj49Tj9qPW5ldyBKMihmK2kud2lkdGgsRS1OKmkud2lkdGgvMik6aj1uZXcgSjIoYitpLmhlaWdodC8yKl8vTCxwKTpmPnYmJnA+bSYmKEI+PU4/aj1uZXcgSjIoZixFLWkud2lkdGgvMipOKTpqPW5ldyBKMihiLWkuaGVpZ2h0LzIqXy9MLHApKSxqfSxMSWU9ZnVuY3Rpb24oaSxhKXtsZXQgZj17eDowLHk6MH07Zi54PWEueCthLndpZHRoLzIsZi55PWEueSthLmhlaWdodC8yO2xldCBwPWtOdChpLGYpO2YueD1pLngraS53aWR0aC8yLGYueT1pLnkraS5oZWlnaHQvMjtsZXQgdj1rTnQoYSxmKTtyZXR1cm57c3RhcnRQb2ludDpwLGVuZFBvaW50OnZ9fTtjb25zdCBNSWU9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9MDtmb3IobGV0IG0gb2YgYSl7dj12KzE7bGV0IGI9bS53cmFwJiZmcy53cmFwLEU9QUllKGZzKTtwLmRiLmdldEM0VHlwZSgpPT09IkM0RHluYW1pYyImJihtLmxhYmVsLnRleHQ9disiOiAiK20ubGFiZWwudGV4dCk7bGV0IEw9aDMobS5sYWJlbC50ZXh0LEUpO3NtKCJsYWJlbCIsbSxiLEUsTCksbS50ZWNobiYmbS50ZWNobi50ZXh0IT09IiImJihMPWgzKG0udGVjaG4udGV4dCxFKSxzbSgidGVjaG4iLG0sYixFLEwpKSxtLmRlc2NyJiZtLmRlc2NyLnRleHQhPT0iIiYmKEw9aDMobS5kZXNjci50ZXh0LEUpLHNtKCJkZXNjciIsbSxiLEUsTCkpO2xldCBOPWYobS5mcm9tKSxCPWYobS50byksaj1MSWUoTixCKTttLnN0YXJ0UG9pbnQ9ai5zdGFydFBvaW50LG0uZW5kUG9pbnQ9ai5lbmRQb2ludH1nMy5kcmF3UmVscyhpLGEsZnMpfTtmdW5jdGlvbiBFTnQoaSxhLGYscCx2KXtsZXQgbT1uZXcgbU50KHYpO20uZGF0YS53aWR0aExpbWl0PWYuZGF0YS53aWR0aExpbWl0L01hdGgubWluKEJkdCxwLmxlbmd0aCk7Zm9yKGxldFtiLEVdb2YgcC5lbnRyaWVzKCkpe2xldCBfPTA7RS5pbWFnZT17d2lkdGg6MCxoZWlnaHQ6MCxZOjB9LEUuc3ByaXRlJiYoRS5pbWFnZS53aWR0aD00OCxFLmltYWdlLmhlaWdodD00OCxFLmltYWdlLlk9XyxfPUUuaW1hZ2UuWStFLmltYWdlLmhlaWdodCk7bGV0IEw9RS53cmFwJiZmcy53cmFwLE49VVcoZnMpO2lmKE4uZm9udFNpemU9Ti5mb250U2l6ZSsyLE4uZm9udFdlaWdodD0iYm9sZCIsc20oImxhYmVsIixFLEwsTixtLmRhdGEud2lkdGhMaW1pdCksRS5sYWJlbC5ZPV8rOCxfPUUubGFiZWwuWStFLmxhYmVsLmhlaWdodCxFLnR5cGUmJkUudHlwZS50ZXh0IT09IiIpe0UudHlwZS50ZXh0PSJbIitFLnR5cGUudGV4dCsiXSI7bGV0IHo9VVcoZnMpO3NtKCJ0eXBlIixFLEwseixtLmRhdGEud2lkdGhMaW1pdCksRS50eXBlLlk9Xys1LF89RS50eXBlLlkrRS50eXBlLmhlaWdodH1pZihFLmRlc2NyJiZFLmRlc2NyLnRleHQhPT0iIil7bGV0IHo9VVcoZnMpO3ouZm9udFNpemU9ei5mb250U2l6ZS0yLHNtKCJkZXNjciIsRSxMLHosbS5kYXRhLndpZHRoTGltaXQpLEUuZGVzY3IuWT1fKzIwLF89RS5kZXNjci5ZK0UuZGVzY3IuaGVpZ2h0fWlmKGI9PTB8fGIlQmR0PT09MCl7bGV0IHo9Zi5kYXRhLnN0YXJ0eCtmcy5kaWFncmFtTWFyZ2luWCxLPWYuZGF0YS5zdG9weStmcy5kaWFncmFtTWFyZ2luWStfO20uc2V0RGF0YSh6LHosSyxLKX1lbHNle2xldCB6PW0uZGF0YS5zdG9weCE9PW0uZGF0YS5zdGFydHg/bS5kYXRhLnN0b3B4K2ZzLmRpYWdyYW1NYXJnaW5YOm0uZGF0YS5zdGFydHgsSz1tLmRhdGEuc3RhcnR5O20uc2V0RGF0YSh6LHosSyxLKX1tLm5hbWU9RS5hbGlhcztsZXQgQj12LmRiLmdldEM0U2hhcGVBcnJheShFLmFsaWFzKSxqPXYuZGIuZ2V0QzRTaGFwZUtleXMoRS5hbGlhcyk7ai5sZW5ndGg+MCYmeE50KG0saSxCLGopLGE9RS5hbGlhcztsZXQgUj12LmRiLmdldEJvdW5kYXJ5cyhhKTtSLmxlbmd0aD4wJiZFTnQoaSxhLG0sUix2KSxFLmFsaWFzIT09Imdsb2JhbCImJnlOdChpLEUsbSksZi5kYXRhLnN0b3B5PU1hdGgubWF4KG0uZGF0YS5zdG9weStmcy5jNFNoYXBlTWFyZ2luLGYuZGF0YS5zdG9weSksZi5kYXRhLnN0b3B4PU1hdGgubWF4KG0uZGF0YS5zdG9weCtmcy5jNFNoYXBlTWFyZ2luLGYuZGF0YS5zdG9weCksR1c9TWF0aC5tYXgoR1csZi5kYXRhLnN0b3B4KSxWVz1NYXRoLm1heChWVyxmLmRhdGEuc3RvcHkpfX1jb25zdCBUTnQ9e2RyYXdQZXJzb25PclN5c3RlbUFycmF5OnhOdCxkcmF3Qm91bmRhcnk6eU50LHNldENvbmY6UmR0LGRyYXc6ZnVuY3Rpb24oaSxhLGYscCl7ZnM9TGUoKS5jNDtjb25zdCB2PUxlKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt2PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBiPXlyKHY9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iik7bGV0IEU9cC5kYjtwLmRiLnNldFdyYXAoZnMud3JhcCksd050PUUuZ2V0QzRTaGFwZUluUm93KCksQmR0PUUuZ2V0QzRCb3VuZGFyeUluUm93KCksVXQuZGVidWcoYEM6JHtKU09OLnN0cmluZ2lmeShmcyxudWxsLDIpfWApO2NvbnN0IF89dj09PSJzYW5kYm94Ij9iLnNlbGVjdChgW2lkPSIke2F9Il1gKTp5cihgW2lkPSIke2F9Il1gKTtnMy5pbnNlcnRDb21wdXRlckljb24oXyksZzMuaW5zZXJ0RGF0YWJhc2VJY29uKF8pLGczLmluc2VydENsb2NrSWNvbihfKTtsZXQgTD1uZXcgbU50KHApO0wuc2V0RGF0YShmcy5kaWFncmFtTWFyZ2luWCxmcy5kaWFncmFtTWFyZ2luWCxmcy5kaWFncmFtTWFyZ2luWSxmcy5kaWFncmFtTWFyZ2luWSksTC5kYXRhLndpZHRoTGltaXQ9c2NyZWVuLmF2YWlsV2lkdGgsR1c9ZnMuZGlhZ3JhbU1hcmdpblgsVlc9ZnMuZGlhZ3JhbU1hcmdpblk7Y29uc3QgTj1wLmRiLmdldFRpdGxlKCk7bGV0IEI9cC5kYi5nZXRCb3VuZGFyeXMoIiIpO0VOdChfLCIiLEwsQixwKSxnMy5pbnNlcnRBcnJvd0hlYWQoXyksZzMuaW5zZXJ0QXJyb3dFbmQoXyksZzMuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoXyksZzMuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKF8pLE1JZShfLHAuZGIuZ2V0UmVscygpLHAuZGIuZ2V0QzRTaGFwZSxwKSxMLmRhdGEuc3RvcHg9R1csTC5kYXRhLnN0b3B5PVZXO2NvbnN0IGo9TC5kYXRhO2xldCB6PWouc3RvcHktai5zdGFydHkrMipmcy5kaWFncmFtTWFyZ2luWTtjb25zdCBpdD1qLnN0b3B4LWouc3RhcnR4KzIqZnMuZGlhZ3JhbU1hcmdpblg7TiYmXy5hcHBlbmQoInRleHQiKS50ZXh0KE4pLmF0dHIoIngiLChqLnN0b3B4LWouc3RhcnR4KS8yLTQqZnMuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLGouc3RhcnR5K2ZzLmRpYWdyYW1NYXJnaW5ZKSxvZyhfLHosaXQsZnMudXNlTWF4V2lkdGgpO2NvbnN0IHN0PU4/NjA6MDtfLmF0dHIoInZpZXdCb3giLGouc3RhcnR4LWZzLmRpYWdyYW1NYXJnaW5YKyIgLSIrKGZzLmRpYWdyYW1NYXJnaW5ZK3N0KSsiICIraXQrIiAiKyh6K3N0KSksVXQuZGVidWcoIm1vZGVsczoiLGopfX0sSUllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6SE1lLGRiOk5kdCxyZW5kZXJlcjpUTnQsc3R5bGVzOmk9PmAucGVyc29uIHsKICAgIHN0cm9rZTogJHtpLnBlcnNvbkJvcmRlcn07CiAgICBmaWxsOiAke2kucGVyc29uQmtnfTsKICB9CmAsaW5pdDooe2M0Omksd3JhcDphfSk9PntUTnQuc2V0Q29uZihpKSxOZHQuc2V0V3JhcChhKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBqZHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihuZixYaSxFcyx4YSl7Zm9yKEVzPUVzfHx7fSx4YT1uZi5sZW5ndGg7eGEtLTtFc1tuZlt4YV1dPVhpKTtyZXR1cm4gRXN9LGE9WzEsNF0sZj1bMSwzXSxwPVsxLDVdLHY9WzEsOCw5LDEwLDExLDI3LDM0LDM2LDM4LDQyLDU4LDgxLDgyLDgzLDg0LDg1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExMywxMTgsMTE5LDEyMCwxMjFdLG09WzIsMl0sYj1bMSwxM10sRT1bMSwxNF0sXz1bMSwxNV0sTD1bMSwxNl0sTj1bMSwyM10sQj1bMSwyNV0saj1bMSwyNl0sUj1bMSwyN10sej1bMSw0OV0sSz1bMSw0OF0saXQ9WzEsMjldLHN0PVsxLDMwXSx1dD1bMSwzMV0sYnQ9WzEsMzJdLG10PVsxLDMzXSx5dD1bMSw0NF0sZHQ9WzEsNDZdLGh0PVsxLDQyXSx3dD1bMSw0N10sWD1bMSw0M10scHQ9WzEsNTBdLFU9WzEsNDVdLHh0PVsxLDUxXSxudD1bMSw1Ml0sT3Q9WzEsMzRdLE50PVsxLDM1XSxxdD1bMSwzNl0sQ3Q9WzEsMzddLFo9WzEsNTddLFR0PVsxLDgsOSwxMCwxMSwyNywzMiwzNCwzNiwzOCw0Miw1OCw4MSw4Miw4Myw4NCw4NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTMsMTE4LDExOSwxMjAsMTIxXSxIdD1bMSw2MV0sSXQ9WzEsNjBdLEZ0PVsxLDYyXSxrZT1bOCw5LDExLDczLDc1XSxwbj1bMSw4OF0sTWU9WzEsOTNdLHZlPVsxLDkyXSxHZT1bMSw4OV0sS2U9WzEsODVdLHdlPVsxLDkxXSxfZT1bMSw4N10sJHQ9WzEsOTRdLHJlPVsxLDkwXSxpZT1bMSw5NV0sT2U9WzEsODZdLG9lPVs4LDksMTAsMTEsNzMsNzVdLE5lPVs4LDksMTAsMTEsNDQsNzMsNzVdLG1lPVs4LDksMTAsMTEsMjksNDIsNDQsNDYsNDgsNTAsNTIsNTQsNTYsNTgsNjEsNjMsNjUsNjYsNjgsNzMsNzUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxjbj1bOCw5LDExLDQyLDU4LDczLDc1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sbGk9WzQyLDU4LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10seWE9WzEsMTIxXSxkYT1bMSwxMjBdLE9vPVsxLDEyOF0sZHM9WzEsMTQyXSxEcj1bMSwxNDNdLG5yPVsxLDE0NF0sZGk9WzEsMTQ1XSxFZT1bMSwxMzBdLFluPVsxLDEzMl0sSGU9WzEsMTM2XSxUaT1bMSwxMzddLGduPVsxLDEzOF0sa3M9WzEsMTM5XSxxYT1bMSwxNDBdLExhPVsxLDE0MV0sR3M9WzEsMTQ2XSxObz1bMSwxNDddLHZzPVsxLDEyNl0sbnU9WzEsMTI3XSwkcz1bMSwxMzRdLEx1PVsxLDEyOV0sZm09WzEsMTMzXSxhdj1bMSwxMzFdLFV1PVs4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDIsNTgsODEsODIsODMsODQsODUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzLDExOCwxMTksMTIwLDEyMV0sWmw9WzEsMTQ5XSxQYT1bOCw5LDExXSxBbD1bOCw5LDEwLDExLDE0LDQyLDU4LDg2LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sdWE9WzEsMTY5XSxiYz1bMSwxNjVdLENjPVsxLDE2Nl0sZ2E9WzEsMTcwXSxNYT1bMSwxNjddLEhhPVsxLDE2OF0sTGw9Wzc1LDExMywxMTZdLF9jPVs4LDksMTAsMTEsMTIsMTQsMjcsMjksMzIsNDIsNTgsNzMsODEsODIsODMsODQsODUsODYsODcsMTAyLDEwNiwxMDgsMTExLDExMiwxMTNdLG92PVsxMCwxMDNdLEpsPVszMSw0Nyw0OSw1MSw1Myw1NSw2MCw2Miw2NCw2NSw2Nyw2OSwxMTMsMTE0LDExNV0sWjE9WzEsMjM1XSxGZD1bMSwyMzNdLEoxPVsxLDIzN10sQmQ9WzEsMjMxXSxFMD1bMSwyMzJdLEJpPVsxLDIzNF0sb249WzEsMjM2XSxrcj1bMSwyMzhdLEVpPVsxLDI1NV0sSm89WzgsOSwxMSwxMDNdLHZjPVs4LDksMTAsMTEsNTgsODEsMTAyLDEwMywxMDYsMTA3LDEwOCwxMDldLHRmPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxncmFwaENvbmZpZzo0LGRvY3VtZW50OjUsbGluZTo2LHN0YXRlbWVudDo3LFNFTUk6OCxORVdMSU5FOjksU1BBQ0U6MTAsRU9GOjExLEdSQVBIOjEyLE5PRElSOjEzLERJUjoxNCxGaXJzdFN0bXRTZXBlcmF0b3I6MTUsZW5kaW5nOjE2LGVuZFRva2VuOjE3LHNwYWNlTGlzdDoxOCxzcGFjZUxpc3ROZXdsaW5lOjE5LHZlcnRpY2VTdGF0ZW1lbnQ6MjAsc2VwYXJhdG9yOjIxLHN0eWxlU3RhdGVtZW50OjIyLGxpbmtTdHlsZVN0YXRlbWVudDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxjbGFzc1N0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixzdWJncmFwaDoyNyx0ZXh0Tm9UYWdzOjI4LFNRUzoyOSx0ZXh0OjMwLFNRRTozMSxlbmQ6MzIsZGlyZWN0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LGxpbms6Mzksbm9kZTo0MCxzdHlsZWRWZXJ0ZXg6NDEsQU1QOjQyLHZlcnRleDo0MyxTVFlMRV9TRVBBUkFUT1I6NDQsaWRTdHJpbmc6NDUsRE9VQkxFQ0lSQ0xFU1RBUlQ6NDYsRE9VQkxFQ0lSQ0xFRU5EOjQ3LFBTOjQ4LFBFOjQ5LCIoLSI6NTAsIi0pIjo1MSxTVEFESVVNU1RBUlQ6NTIsU1RBRElVTUVORDo1MyxTVUJST1VUSU5FU1RBUlQ6NTQsU1VCUk9VVElORUVORDo1NSxWRVJURVhfV0lUSF9QUk9QU19TVEFSVDo1NiwiTk9ERV9TVFJJTkdbZmllbGRdIjo1NyxDT0xPTjo1OCwiTk9ERV9TVFJJTkdbdmFsdWVdIjo1OSxQSVBFOjYwLENZTElOREVSU1RBUlQ6NjEsQ1lMSU5ERVJFTkQ6NjIsRElBTU9ORF9TVEFSVDo2MyxESUFNT05EX1NUT1A6NjQsVEFHRU5EOjY1LFRSQVBTVEFSVDo2NixUUkFQRU5EOjY3LElOVlRSQVBTVEFSVDo2OCxJTlZUUkFQRU5EOjY5LGxpbmtTdGF0ZW1lbnQ6NzAsYXJyb3dUZXh0OjcxLFRFU1RTVFI6NzIsU1RBUlRfTElOSzo3MyxlZGdlVGV4dDo3NCxMSU5LOjc1LGVkZ2VUZXh0VG9rZW46NzYsU1RSOjc3LE1EX1NUUjo3OCx0ZXh0VG9rZW46Nzksa2V5d29yZHM6ODAsU1RZTEU6ODEsTElOS1NUWUxFOjgyLENMQVNTREVGOjgzLENMQVNTOjg0LENMSUNLOjg1LERPV046ODYsVVA6ODcsdGV4dE5vVGFnc1Rva2VuOjg4LHN0eWxlc09wdDo4OSwiaWRTdHJpbmdbdmVydGV4XSI6OTAsImlkU3RyaW5nW2NsYXNzXSI6OTEsQ0FMTEJBQ0tOQU1FOjkyLENBTExCQUNLQVJHUzo5MyxIUkVGOjk0LExJTktfVEFSR0VUOjk1LCJTVFJbbGlua10iOjk2LCJTVFJbdG9vbHRpcF0iOjk3LGFscGhhTnVtOjk4LERFRkFVTFQ6OTksbnVtTGlzdDoxMDAsSU5URVJQT0xBVEU6MTAxLE5VTToxMDIsQ09NTUE6MTAzLHN0eWxlOjEwNCxzdHlsZUNvbXBvbmVudDoxMDUsTk9ERV9TVFJJTkc6MTA2LFVOSVQ6MTA3LEJSS1Q6MTA4LFBDVDoxMDksaWRTdHJpbmdUb2tlbjoxMTAsTUlOVVM6MTExLE1VTFQ6MTEyLFVOSUNPREVfVEVYVDoxMTMsVEVYVDoxMTQsVEFHU1RBUlQ6MTE1LEVER0VfVEVYVDoxMTYsYWxwaGFOdW1Ub2tlbjoxMTcsZGlyZWN0aW9uX3RiOjExOCxkaXJlY3Rpb25fYnQ6MTE5LGRpcmVjdGlvbl9ybDoxMjAsZGlyZWN0aW9uX2xyOjEyMSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDI6IkFNUCIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkRPVUJMRUNJUkNMRVNUQVJUIiw0NzoiRE9VQkxFQ0lSQ0xFRU5EIiw0ODoiUFMiLDQ5OiJQRSIsNTA6IigtIiw1MToiLSkiLDUyOiJTVEFESVVNU1RBUlQiLDUzOiJTVEFESVVNRU5EIiw1NDoiU1VCUk9VVElORVNUQVJUIiw1NToiU1VCUk9VVElORUVORCIsNTY6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw1NzoiTk9ERV9TVFJJTkdbZmllbGRdIiw1ODoiQ09MT04iLDU5OiJOT0RFX1NUUklOR1t2YWx1ZV0iLDYwOiJQSVBFIiw2MToiQ1lMSU5ERVJTVEFSVCIsNjI6IkNZTElOREVSRU5EIiw2MzoiRElBTU9ORF9TVEFSVCIsNjQ6IkRJQU1PTkRfU1RPUCIsNjU6IlRBR0VORCIsNjY6IlRSQVBTVEFSVCIsNjc6IlRSQVBFTkQiLDY4OiJJTlZUUkFQU1RBUlQiLDY5OiJJTlZUUkFQRU5EIiw3MjoiVEVTVFNUUiIsNzM6IlNUQVJUX0xJTksiLDc1OiJMSU5LIiw3NzoiU1RSIiw3ODoiTURfU1RSIiw4MToiU1RZTEUiLDgyOiJMSU5LU1RZTEUiLDgzOiJDTEFTU0RFRiIsODQ6IkNMQVNTIiw4NToiQ0xJQ0siLDg2OiJET1dOIiw4NzoiVVAiLDkwOiJpZFN0cmluZ1t2ZXJ0ZXhdIiw5MToiaWRTdHJpbmdbY2xhc3NdIiw5MjoiQ0FMTEJBQ0tOQU1FIiw5MzoiQ0FMTEJBQ0tBUkdTIiw5NDoiSFJFRiIsOTU6IkxJTktfVEFSR0VUIiw5NjoiU1RSW2xpbmtdIiw5NzoiU1RSW3Rvb2x0aXBdIiw5OToiREVGQVVMVCIsMTAxOiJJTlRFUlBPTEFURSIsMTAyOiJOVU0iLDEwMzoiQ09NTUEiLDEwNjoiTk9ERV9TVFJJTkciLDEwNzoiVU5JVCIsMTA4OiJCUktUIiwxMDk6IlBDVCIsMTExOiJNSU5VUyIsMTEyOiJNVUxUIiwxMTM6IlVOSUNPREVfVEVYVCIsMTE0OiJURVhUIiwxMTU6IlRBR1NUQVJUIiwxMTY6IkVER0VfVEVYVCIsMTE4OiJkaXJlY3Rpb25fdGIiLDExOToiZGlyZWN0aW9uX2J0IiwxMjA6ImRpcmVjdGlvbl9ybCIsMTIxOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMV0sWzQwLDFdLFs0MCw1XSxbNDEsMV0sWzQxLDNdLFs0Myw0XSxbNDMsNF0sWzQzLDZdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw4XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsNl0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsMV0sWzM5LDJdLFszOSwzXSxbMzksM10sWzM5LDFdLFszOSwzXSxbNzQsMV0sWzc0LDJdLFs3NCwxXSxbNzQsMV0sWzcwLDFdLFs3MSwzXSxbMzAsMV0sWzMwLDJdLFszMCwxXSxbMzAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbMjgsMV0sWzI4LDJdLFsyOCwxXSxbMjgsMV0sWzI0LDVdLFsyNSw1XSxbMjYsMl0sWzI2LDRdLFsyNiwzXSxbMjYsNV0sWzI2LDNdLFsyNiw1XSxbMjYsNV0sWzI2LDddLFsyNiwyXSxbMjYsNF0sWzI2LDJdLFsyNiw0XSxbMjYsNF0sWzI2LDZdLFsyMiw1XSxbMjMsNV0sWzIzLDVdLFsyMyw5XSxbMjMsOV0sWzIzLDddLFsyMyw3XSxbMTAwLDFdLFsxMDAsM10sWzg5LDFdLFs4OSwzXSxbMTA0LDFdLFsxMDQsMl0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbNzYsMV0sWzc2LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbNDUsMV0sWzQ1LDJdLFs5OCwxXSxbOTgsMl0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFhpLEVzLHhhLHhpLFdjLENlLGdwKXt2YXIgQmU9Q2UubGVuZ3RoLTE7c3dpdGNoKFdjKXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoQ2VbQmVdKXx8Q2VbQmVdLmxlbmd0aD4wKSYmQ2VbQmUtMV0ucHVzaChDZVtCZV0pLHRoaXMuJD1DZVtCZS0xXTticmVhaztjYXNlIDQ6Y2FzZSAxNzY6dGhpcy4kPUNlW0JlXTticmVhaztjYXNlIDExOnhpLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOnhpLnNldERpcmVjdGlvbihDZVtCZS0xXSksdGhpcy4kPUNlW0JlLTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPUNlW0JlLTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9eGkuYWRkU3ViR3JhcGgoQ2VbQmUtNl0sQ2VbQmUtMV0sQ2VbQmUtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPXhpLmFkZFN1YkdyYXBoKENlW0JlLTNdLENlW0JlLTFdLENlW0JlLTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD14aS5hZGRTdWJHcmFwaCh2b2lkIDAsQ2VbQmUtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1DZVtCZV0udHJpbSgpLHhpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1DZVtCZV0udHJpbSgpLHhpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp4aS5hZGRMaW5rKENlW0JlLTJdLnN0bXQsQ2VbQmVdLENlW0JlLTFdKSx0aGlzLiQ9e3N0bXQ6Q2VbQmVdLG5vZGVzOkNlW0JlXS5jb25jYXQoQ2VbQmUtMl0ubm9kZXMpfTticmVhaztjYXNlIDQ0OnhpLmFkZExpbmsoQ2VbQmUtM10uc3RtdCxDZVtCZS0xXSxDZVtCZS0yXSksdGhpcy4kPXtzdG10OkNlW0JlLTFdLG5vZGVzOkNlW0JlLTFdLmNvbmNhdChDZVtCZS0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtzdG10OkNlW0JlLTFdLG5vZGVzOkNlW0JlLTFdfTticmVhaztjYXNlIDQ2OnRoaXMuJD17c3RtdDpDZVtCZV0sbm9kZXM6Q2VbQmVdfTticmVhaztjYXNlIDQ3OnRoaXMuJD1bQ2VbQmVdXTticmVhaztjYXNlIDQ4OnRoaXMuJD1DZVtCZS00XS5jb25jYXQoQ2VbQmVdKTticmVhaztjYXNlIDQ5OnRoaXMuJD1DZVtCZV07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9Q2VbQmUtMl0seGkuc2V0Q2xhc3MoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDUxOnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTI6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9Q2VbQmUtNV0seGkuYWRkVmVydGV4KENlW0JlLTVdLENlW0JlLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU0OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDU1OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDU2OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1DZVtCZS03XSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtN10sQ2VbQmUtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW0NlW0JlLTVdLENlW0JlLTNdXV0pKTticmVhaztjYXNlIDU4OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPUNlW0JlLTVdLHhpLmFkZFZlcnRleChDZVtCZS01XSxDZVtCZS0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwib2RkIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY0OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDY1OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPUNlW0JlXSx4aS5hZGRWZXJ0ZXgoQ2VbQmVdKTticmVhaztjYXNlIDY4OkNlW0JlLTFdLnRleHQ9Q2VbQmVdLHRoaXMuJD1DZVtCZS0xXTticmVhaztjYXNlIDY5OmNhc2UgNzA6Q2VbQmUtMl0udGV4dD1DZVtCZS0xXSx0aGlzLiQ9Q2VbQmUtMl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9Q2VbQmVdO2JyZWFrO2Nhc2UgNzI6dmFyIEZmPXhpLmRlc3RydWN0TGluayhDZVtCZV0sQ2VbQmUtMl0pO3RoaXMuJD17dHlwZTpGZi50eXBlLHN0cm9rZTpGZi5zdHJva2UsbGVuZ3RoOkZmLmxlbmd0aCx0ZXh0OkNlW0JlLTFdfTticmVhaztjYXNlIDczOnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXt0ZXh0OkNlW0JlLTFdLnRleHQrIiIrQ2VbQmVdLHR5cGU6Q2VbQmUtMV0udHlwZX07YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgNzc6dmFyIEZmPXhpLmRlc3RydWN0TGluayhDZVtCZV0pO3RoaXMuJD17dHlwZTpGZi50eXBlLHN0cm9rZTpGZi5zdHJva2UsbGVuZ3RoOkZmLmxlbmd0aH07YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9Q2VbQmUtMV07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpDZVtCZS0xXS50ZXh0KyIiK0NlW0JlXSx0eXBlOkNlW0JlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDgyOmNhc2UgOTc6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgOTQ6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9e3RleHQ6Q2VbQmUtMV0udGV4dCsiIitDZVtCZV0sdHlwZTpDZVtCZS0xXS50eXBlfTticmVhaztjYXNlIDk2OnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgOTg6dGhpcy4kPUNlW0JlLTRdLHhpLmFkZENsYXNzKENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0Q2xhc3MoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDEwMDpjYXNlIDEwODp0aGlzLiQ9Q2VbQmUtMV0seGkuc2V0Q2xpY2tFdmVudChDZVtCZS0xXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA5OnRoaXMuJD1DZVtCZS0zXSx4aS5zZXRDbGlja0V2ZW50KENlW0JlLTNdLENlW0JlLTJdKSx4aS5zZXRUb29sdGlwKENlW0JlLTNdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDI6dGhpcy4kPUNlW0JlLTJdLHhpLnNldENsaWNrRXZlbnQoQ2VbQmUtMl0sQ2VbQmUtMV0sQ2VbQmVdKTticmVhaztjYXNlIDEwMzp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0Q2xpY2tFdmVudChDZVtCZS00XSxDZVtCZS0zXSxDZVtCZS0yXSkseGkuc2V0VG9vbHRpcChDZVtCZS00XSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1DZVtCZS0yXSx4aS5zZXRMaW5rKENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDU6dGhpcy4kPUNlW0JlLTRdLHhpLnNldExpbmsoQ2VbQmUtNF0sQ2VbQmUtMl0pLHhpLnNldFRvb2x0aXAoQ2VbQmUtNF0sQ2VbQmVdKTticmVhaztjYXNlIDEwNjp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0TGluayhDZVtCZS00XSxDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1DZVtCZS02XSx4aS5zZXRMaW5rKENlW0JlLTZdLENlW0JlLTRdLENlW0JlXSkseGkuc2V0VG9vbHRpcChDZVtCZS02XSxDZVtCZS0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPUNlW0JlLTFdLHhpLnNldExpbmsoQ2VbQmUtMV0sQ2VbQmVdKTticmVhaztjYXNlIDExMTp0aGlzLiQ9Q2VbQmUtM10seGkuc2V0TGluayhDZVtCZS0zXSxDZVtCZS0yXSkseGkuc2V0VG9vbHRpcChDZVtCZS0zXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTEyOnRoaXMuJD1DZVtCZS0zXSx4aS5zZXRMaW5rKENlW0JlLTNdLENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPUNlW0JlLTVdLHhpLnNldExpbmsoQ2VbQmUtNV0sQ2VbQmUtNF0sQ2VbQmVdKSx4aS5zZXRUb29sdGlwKENlW0JlLTVdLENlW0JlLTJdKTticmVhaztjYXNlIDExNDp0aGlzLiQ9Q2VbQmUtNF0seGkuYWRkVmVydGV4KENlW0JlLTJdLHZvaWQgMCx2b2lkIDAsQ2VbQmVdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9Q2VbQmUtNF0seGkudXBkYXRlTGluayhbQ2VbQmUtMl1dLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPUNlW0JlLTRdLHhpLnVwZGF0ZUxpbmsoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9Q2VbQmUtOF0seGkudXBkYXRlTGlua0ludGVycG9sYXRlKFtDZVtCZS02XV0sQ2VbQmUtMl0pLHhpLnVwZGF0ZUxpbmsoW0NlW0JlLTZdXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1DZVtCZS04XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoQ2VbQmUtNl0sQ2VbQmUtMl0pLHhpLnVwZGF0ZUxpbmsoQ2VbQmUtNl0sQ2VbQmVdKTticmVhaztjYXNlIDExOTp0aGlzLiQ9Q2VbQmUtNl0seGkudXBkYXRlTGlua0ludGVycG9sYXRlKFtDZVtCZS00XV0sQ2VbQmVdKTticmVhaztjYXNlIDEyMDp0aGlzLiQ9Q2VbQmUtNl0seGkudXBkYXRlTGlua0ludGVycG9sYXRlKENlW0JlLTRdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMjE6Y2FzZSAxMjM6dGhpcy4kPVtDZVtCZV1dO2JyZWFrO2Nhc2UgMTIyOmNhc2UgMTI0OkNlW0JlLTJdLnB1c2goQ2VbQmVdKSx0aGlzLiQ9Q2VbQmUtMl07YnJlYWs7Y2FzZSAxMjY6dGhpcy4kPUNlW0JlLTFdK0NlW0JlXTticmVhaztjYXNlIDE3NDp0aGlzLiQ9Q2VbQmVdO2JyZWFrO2Nhc2UgMTc1OnRoaXMuJD1DZVtCZS0xXSsiIitDZVtCZV07YnJlYWs7Y2FzZSAxNzc6dGhpcy4kPUNlW0JlLTFdKyIiK0NlW0JlXTticmVhaztjYXNlIDE3ODp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAxNzk6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMTgwOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDE4MTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsOTphLDEwOmYsMTI6cH0sezE6WzNdfSxpKHYsbSx7NTo2fSksezQ6Nyw5OmEsMTA6ZiwxMjpwfSx7NDo4LDk6YSwxMDpmLDEyOnB9LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6TCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpOLDMzOjI0LDM0OkIsMzY6aiwzODpSLDQwOjI4LDQxOjM4LDQyOnosNDM6MzksNDU6NDAsNTg6Syw4MTppdCw4MjpzdCw4Mzp1dCw4NDpidCw4NTptdCw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudCwxMTg6T3QsMTE5Ok50LDEyMDpxdCwxMjE6Q3R9LGkodixbMiw5XSksaSh2LFsyLDEwXSksaSh2LFsyLDExXSksezg6WzEsNTRdLDk6WzEsNTVdLDEwOlosMTU6NTMsMTg6NTZ9LGkoVHQsWzIsM10pLGkoVHQsWzIsNF0pLGkoVHQsWzIsNV0pLGkoVHQsWzIsNl0pLGkoVHQsWzIsN10pLGkoVHQsWzIsOF0pLHs4Okh0LDk6SXQsMTE6RnQsMjE6NTgsMzk6NTksNzA6NjMsNzM6WzEsNjRdLDc1OlsxLDY1XX0sezg6SHQsOTpJdCwxMTpGdCwyMTo2Nn0sezg6SHQsOTpJdCwxMTpGdCwyMTo2N30sezg6SHQsOTpJdCwxMTpGdCwyMTo2OH0sezg6SHQsOTpJdCwxMTpGdCwyMTo2OX0sezg6SHQsOTpJdCwxMTpGdCwyMTo3MH0sezg6SHQsOTpJdCwxMDpbMSw3MV0sMTE6RnQsMjE6NzJ9LGkoVHQsWzIsMzZdKSx7MzU6WzEsNzNdfSx7Mzc6WzEsNzRdfSxpKFR0LFsyLDM5XSksaShrZSxbMiw0Nl0sezE4Ojc1LDEwOlp9KSx7MTA6WzEsNzZdfSx7MTA6WzEsNzddfSx7MTA6WzEsNzhdfSx7MTA6WzEsNzldfSx7MTQ6cG4sNDI6TWUsNTg6dmUsNzc6WzEsODNdLDg2OkdlLDkyOlsxLDgwXSw5NDpbMSw4MV0sOTg6ODIsMTAyOktlLDEwMzp3ZSwxMDY6X2UsMTA4OiR0LDExMTpyZSwxMTI6aWUsMTEzOk9lLDExNzo4NH0saShUdCxbMiwxNzhdKSxpKFR0LFsyLDE3OV0pLGkoVHQsWzIsMTgwXSksaShUdCxbMiwxODFdKSxpKG9lLFsyLDQ3XSksaShvZSxbMiw0OV0sezQ0OlsxLDk2XX0pLGkoTmUsWzIsNjddLHsxMTA6MTA5LDI5OlsxLDk3XSw0Mjp6LDQ2OlsxLDk4XSw0ODpbMSw5OV0sNTA6WzEsMTAwXSw1MjpbMSwxMDFdLDU0OlsxLDEwMl0sNTY6WzEsMTAzXSw1ODpLLDYxOlsxLDEwNF0sNjM6WzEsMTA1XSw2NTpbMSwxMDZdLDY2OlsxLDEwN10sNjg6WzEsMTA4XSw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTE6VSwxMTI6eHQsMTEzOm50fSksaShtZSxbMiwxNzRdKSxpKG1lLFsyLDEzNV0pLGkobWUsWzIsMTM2XSksaShtZSxbMiwxMzddKSxpKG1lLFsyLDEzOF0pLGkobWUsWzIsMTM5XSksaShtZSxbMiwxNDBdKSxpKG1lLFsyLDE0MV0pLGkobWUsWzIsMTQyXSksaShtZSxbMiwxNDNdKSxpKG1lLFsyLDE0NF0pLGkobWUsWzIsMTQ1XSksaSh2LFsyLDEyXSksaSh2LFsyLDE4XSksaSh2LFsyLDE5XSksezk6WzEsMTEwXX0saShjbixbMiwyNl0sezE4OjExMSwxMDpafSksaShUdCxbMiwyN10pLHs0MDoxMTIsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6eHQsMTEzOm50fSxpKFR0LFsyLDQwXSksaShUdCxbMiw0MV0pLGkoVHQsWzIsNDJdKSxpKGxpLFsyLDcxXSx7NzE6MTEzLDYwOlsxLDExNV0sNzI6WzEsMTE0XX0pLHs3NDoxMTYsNzY6MTE3LDc3OlsxLDExOF0sNzg6WzEsMTE5XSwxMTM6eWEsMTE2OmRhfSxpKFs0Miw1OCw2MCw3Miw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFsyLDc3XSksaShUdCxbMiwyOF0pLGkoVHQsWzIsMjldKSxpKFR0LFsyLDMwXSksaShUdCxbMiwzMV0pLGkoVHQsWzIsMzJdKSx7MTA6T28sMTI6ZHMsMTQ6RHIsMjc6bnIsMjg6MTIyLDMyOmRpLDQyOkVlLDU4OlluLDczOkhlLDc3OlsxLDEyNF0sNzg6WzEsMTI1XSw4MDoxMzUsODE6VGksODI6Z24sODM6a3MsODQ6cWEsODU6TGEsODY6R3MsODc6Tm8sODg6MTIzLDEwMjp2cywxMDY6bnUsMTA4OiRzLDExMTpMdSwxMTI6Zm0sMTEzOmF2fSxpKFV1LG0sezU6MTQ4fSksaShUdCxbMiwzN10pLGkoVHQsWzIsMzhdKSxpKGtlLFsyLDQ1XSx7NDI6Wmx9KSx7NDI6eiw0NToxNTAsNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudH0sezk5OlsxLDE1MV0sMTAwOjE1MiwxMDI6WzEsMTUzXX0sezQyOnosNDU6MTU0LDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjp4dCwxMTM6bnR9LHs0Mjp6LDQ1OjE1NSw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6eHQsMTEzOm50fSxpKFBhLFsyLDEwMF0sezEwOlsxLDE1Nl0sOTM6WzEsMTU3XX0pLHs3NzpbMSwxNThdfSxpKFBhLFsyLDEwOF0sezExNzoxNjAsMTA6WzEsMTU5XSwxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSwxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2V9KSxpKFBhLFsyLDExMF0sezEwOlsxLDE2MV19KSxpKEFsLFsyLDE3Nl0pLGkoQWwsWzIsMTYzXSksaShBbCxbMiwxNjRdKSxpKEFsLFsyLDE2NV0pLGkoQWwsWzIsMTY2XSksaShBbCxbMiwxNjddKSxpKEFsLFsyLDE2OF0pLGkoQWwsWzIsMTY5XSksaShBbCxbMiwxNzBdKSxpKEFsLFsyLDE3MV0pLGkoQWwsWzIsMTcyXSksaShBbCxbMiwxNzNdKSx7NDI6eiw0NToxNjIsNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudH0sezMwOjE2Myw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoxNzEsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTczLDQ4OlsxLDE3Ml0sNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTc0LDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezMwOjE3NSw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoxNzYsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MTA2OlsxLDE3N119LHszMDoxNzgsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTc5LDYzOlsxLDE4MF0sNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTgxLDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezMwOjE4Miw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoxODMsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSxpKG1lLFsyLDE3NV0pLGkodixbMiwyMF0pLGkoY24sWzIsMjVdKSxpKGtlLFsyLDQzXSx7MTg6MTg0LDEwOlp9KSxpKGxpLFsyLDY4XSx7MTA6WzEsMTg1XX0pLHsxMDpbMSwxODZdfSx7MzA6MTg3LDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezc1OlsxLDE4OF0sNzY6MTg5LDExMzp5YSwxMTY6ZGF9LGkoTGwsWzIsNzNdKSxpKExsLFsyLDc1XSksaShMbCxbMiw3Nl0pLGkoTGwsWzIsMTYxXSksaShMbCxbMiwxNjJdKSx7ODpIdCw5Okl0LDEwOk9vLDExOkZ0LDEyOmRzLDE0OkRyLDIxOjE5MSwyNzpuciwyOTpbMSwxOTBdLDMyOmRpLDQyOkVlLDU4OlluLDczOkhlLDgwOjEzNSw4MTpUaSw4Mjpnbiw4Mzprcyw4NDpxYSw4NTpMYSw4NjpHcyw4NzpObyw4ODoxOTIsMTAyOnZzLDEwNjpudSwxMDg6JHMsMTExOkx1LDExMjpmbSwxMTM6YXZ9LGkoX2MsWzIsOTRdKSxpKF9jLFsyLDk2XSksaShfYyxbMiw5N10pLGkoX2MsWzIsMTUwXSksaShfYyxbMiwxNTFdKSxpKF9jLFsyLDE1Ml0pLGkoX2MsWzIsMTUzXSksaShfYyxbMiwxNTRdKSxpKF9jLFsyLDE1NV0pLGkoX2MsWzIsMTU2XSksaShfYyxbMiwxNTddKSxpKF9jLFsyLDE1OF0pLGkoX2MsWzIsMTU5XSksaShfYyxbMiwxNjBdKSxpKF9jLFsyLDgzXSksaShfYyxbMiw4NF0pLGkoX2MsWzIsODVdKSxpKF9jLFsyLDg2XSksaShfYyxbMiw4N10pLGkoX2MsWzIsODhdKSxpKF9jLFsyLDg5XSksaShfYyxbMiw5MF0pLGkoX2MsWzIsOTFdKSxpKF9jLFsyLDkyXSksaShfYyxbMiw5M10pLHs2OjExLDc6MTIsODpiLDk6RSwxMDpfLDExOkwsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6TiwzMjpbMSwxOTNdLDMzOjI0LDM0OkIsMzY6aiwzODpSLDQwOjI4LDQxOjM4LDQyOnosNDM6MzksNDU6NDAsNTg6Syw4MTppdCw4MjpzdCw4Mzp1dCw4NDpidCw4NTptdCw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudCwxMTg6T3QsMTE5Ok50LDEyMDpxdCwxMjE6Q3R9LHsxMDpaLDE4OjE5NH0sezEwOlsxLDE5NV0sNDI6eiw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDoxMDksMTExOlUsMTEyOnh0LDExMzpudH0sezEwOlsxLDE5Nl19LHsxMDpbMSwxOTddLDEwMzpbMSwxOThdfSxpKG92LFsyLDEyMV0pLHsxMDpbMSwxOTldLDQyOnosNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6MTA5LDExMTpVLDExMjp4dCwxMTM6bnR9LHsxMDpbMSwyMDBdLDQyOnosNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6MTA5LDExMTpVLDExMjp4dCwxMTM6bnR9LHs3NzpbMSwyMDFdfSxpKFBhLFsyLDEwMl0sezEwOlsxLDIwMl19KSxpKFBhLFsyLDEwNF0sezEwOlsxLDIwM119KSx7Nzc6WzEsMjA0XX0saShBbCxbMiwxNzddKSx7Nzc6WzEsMjA1XSw5NTpbMSwyMDZdfSxpKG9lLFsyLDUwXSx7MTEwOjEwOSw0Mjp6LDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTExOlUsMTEyOnh0LDExMzpudH0pLHszMTpbMSwyMDddLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0saShKbCxbMiw3OV0pLGkoSmwsWzIsODFdKSxpKEpsLFsyLDgyXSksaShKbCxbMiwxNDZdKSxpKEpsLFsyLDE0N10pLGkoSmwsWzIsMTQ4XSksaShKbCxbMiwxNDldKSx7NDc6WzEsMjA5XSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoyMTAsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7NDk6WzEsMjExXSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs1MTpbMSwyMTJdLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezUzOlsxLDIxM10sNjU6dWEsNzk6MjA4LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7NTU6WzEsMjE0XSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs1ODpbMSwyMTVdfSx7NjI6WzEsMjE2XSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs2NDpbMSwyMTddLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezMwOjIxOCw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMTpbMSwyMTldLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezY1OnVhLDY3OlsxLDIyMF0sNjk6WzEsMjIxXSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs2NTp1YSw2NzpbMSwyMjNdLDY5OlsxLDIyMl0sNzk6MjA4LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSxpKGtlLFsyLDQ0XSx7NDI6Wmx9KSxpKGxpLFsyLDcwXSksaShsaSxbMiw2OV0pLHs2MDpbMSwyMjRdLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0saShsaSxbMiw3Ml0pLGkoTGwsWzIsNzRdKSx7MzA6MjI1LDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0saShVdSxtLHs1OjIyNn0pLGkoX2MsWzIsOTVdKSxpKFR0LFsyLDM1XSksezQxOjIyNyw0Mjp6LDQzOjM5LDQ1OjQwLDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjp4dCwxMTM6bnR9LHsxMDpaMSw1ODpGZCw4MTpKMSw4OToyMjgsMTAyOkJkLDEwNDoyMjksMTA1OjIzMCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9LHsxMDpaMSw1ODpGZCw4MTpKMSw4OToyMzksMTAxOlsxLDI0MF0sMTAyOkJkLDEwNDoyMjksMTA1OjIzMCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9LHsxMDpaMSw1ODpGZCw4MTpKMSw4OToyNDEsMTAxOlsxLDI0Ml0sMTAyOkJkLDEwNDoyMjksMTA1OjIzMCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9LHsxMDI6WzEsMjQzXX0sezEwOloxLDU4OkZkLDgxOkoxLDg5OjI0NCwxMDI6QmQsMTA0OjIyOSwxMDU6MjMwLDEwNjpFMCwxMDc6QmksMTA4Om9uLDEwOTprcn0sezQyOnosNDU6MjQ1LDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjp4dCwxMTM6bnR9LGkoUGEsWzIsMTAxXSksezc3OlsxLDI0Nl19LHs3NzpbMSwyNDddLDk1OlsxLDI0OF19LGkoUGEsWzIsMTA5XSksaShQYSxbMiwxMTFdLHsxMDpbMSwyNDldfSksaShQYSxbMiwxMTJdKSxpKE5lLFsyLDUxXSksaShKbCxbMiw4MF0pLGkoTmUsWzIsNTJdKSx7NDk6WzEsMjUwXSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LGkoTmUsWzIsNTldKSxpKE5lLFsyLDU0XSksaShOZSxbMiw1NV0pLGkoTmUsWzIsNTZdKSx7MTA2OlsxLDI1MV19LGkoTmUsWzIsNThdKSxpKE5lLFsyLDYwXSksezY0OlsxLDI1Ml0sNjU6dWEsNzk6MjA4LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSxpKE5lLFsyLDYyXSksaShOZSxbMiw2M10pLGkoTmUsWzIsNjVdKSxpKE5lLFsyLDY0XSksaShOZSxbMiw2Nl0pLGkoWzEwLDQyLDU4LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sWzIsNzhdKSx7MzE6WzEsMjUzXSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs2OjExLDc6MTIsODpiLDk6RSwxMDpfLDExOkwsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6TiwzMjpbMSwyNTRdLDMzOjI0LDM0OkIsMzY6aiwzODpSLDQwOjI4LDQxOjM4LDQyOnosNDM6MzksNDU6NDAsNTg6Syw4MTppdCw4MjpzdCw4Mzp1dCw4NDpidCw4NTptdCw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudCwxMTg6T3QsMTE5Ok50LDEyMDpxdCwxMjE6Q3R9LGkob2UsWzIsNDhdKSxpKFBhLFsyLDExNF0sezEwMzpFaX0pLGkoSm8sWzIsMTIzXSx7MTA1OjI1NiwxMDpaMSw1ODpGZCw4MTpKMSwxMDI6QmQsMTA2OkUwLDEwNzpCaSwxMDg6b24sMTA5OmtyfSksaSh2YyxbMiwxMjVdKSxpKHZjLFsyLDEyN10pLGkodmMsWzIsMTI4XSksaSh2YyxbMiwxMjldKSxpKHZjLFsyLDEzMF0pLGkodmMsWzIsMTMxXSksaSh2YyxbMiwxMzJdKSxpKHZjLFsyLDEzM10pLGkodmMsWzIsMTM0XSksaShQYSxbMiwxMTVdLHsxMDM6RWl9KSx7MTA6WzEsMjU3XX0saShQYSxbMiwxMTZdLHsxMDM6RWl9KSx7MTA6WzEsMjU4XX0saShvdixbMiwxMjJdKSxpKFBhLFsyLDk4XSx7MTAzOkVpfSksaShQYSxbMiw5OV0sezExMDoxMDksNDI6eiw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMTpVLDExMjp4dCwxMTM6bnR9KSxpKFBhLFsyLDEwM10pLGkoUGEsWzIsMTA1XSx7MTA6WzEsMjU5XX0pLGkoUGEsWzIsMTA2XSksezk1OlsxLDI2MF19LHs0OTpbMSwyNjFdfSx7NjA6WzEsMjYyXX0sezY0OlsxLDI2M119LHs4Okh0LDk6SXQsMTE6RnQsMjE6MjY0fSxpKFR0LFsyLDM0XSksezEwOloxLDU4OkZkLDgxOkoxLDEwMjpCZCwxMDQ6MjY1LDEwNToyMzAsMTA2OkUwLDEwNzpCaSwxMDg6b24sMTA5OmtyfSxpKHZjLFsyLDEyNl0pLHsxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSw5ODoyNjYsMTAyOktlLDEwMzp3ZSwxMDY6X2UsMTA4OiR0LDExMTpyZSwxMTI6aWUsMTEzOk9lLDExNzo4NH0sezE0OnBuLDQyOk1lLDU4OnZlLDg2OkdlLDk4OjI2NywxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2UsMTE3Ojg0fSx7OTU6WzEsMjY4XX0saShQYSxbMiwxMTNdKSxpKE5lLFsyLDUzXSksezMwOjI2OSw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LGkoTmUsWzIsNjFdKSxpKFV1LG0sezU6MjcwfSksaShKbyxbMiwxMjRdLHsxMDU6MjU2LDEwOloxLDU4OkZkLDgxOkoxLDEwMjpCZCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9KSxpKFBhLFsyLDExOV0sezExNzoxNjAsMTA6WzEsMjcxXSwxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSwxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2V9KSxpKFBhLFsyLDEyMF0sezExNzoxNjAsMTA6WzEsMjcyXSwxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSwxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2V9KSxpKFBhLFsyLDEwN10pLHszMTpbMSwyNzNdLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6TCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpOLDMyOlsxLDI3NF0sMzM6MjQsMzQ6QiwzNjpqLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpLLDgxOml0LDgyOnN0LDgzOnV0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6eHQsMTEzOm50LDExODpPdCwxMTk6TnQsMTIwOnF0LDEyMTpDdH0sezEwOloxLDU4OkZkLDgxOkoxLDg5OjI3NSwxMDI6QmQsMTA0OjIyOSwxMDU6MjMwLDEwNjpFMCwxMDc6QmksMTA4Om9uLDEwOTprcn0sezEwOloxLDU4OkZkLDgxOkoxLDg5OjI3NiwxMDI6QmQsMTA0OjIyOSwxMDU6MjMwLDEwNjpFMCwxMDc6QmksMTA4Om9uLDEwOTprcn0saShOZSxbMiw1N10pLGkoVHQsWzIsMzNdKSxpKFBhLFsyLDExN10sezEwMzpFaX0pLGkoUGEsWzIsMTE4XSx7MTAzOkVpfSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oWGksRXMpe2lmKEVzLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoWGkpO2Vsc2V7dmFyIHhhPW5ldyBFcnJvcihYaSk7dGhyb3cgeGEuaGFzaD1Fcyx4YX19LHBhcnNlOmZ1bmN0aW9uKFhpKXt2YXIgRXM9dGhpcyx4YT1bMF0seGk9W10sV2M9W251bGxdLENlPVtdLGdwPXRoaXMudGFibGUsQmU9IiIsRmY9MCxkZz0wLGRtPTIscGs9MSx4Mz1DZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxNbD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFQwPXt5eTp7fX07Zm9yKHZhciBjdiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGN2KSYmKFQwLnl5W2N2XT10aGlzLnl5W2N2XSk7TWwuc2V0SW5wdXQoWGksVDAueXkpLFQwLnl5LmxleGVyPU1sLFQwLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBNbC55eWxsb2M+InUiJiYoTWwueXlsbG9jPXt9KTt2YXIgRjU9TWwueXlsbG9jO0NlLnB1c2goRjUpO3ZhciBqYj1NbC5vcHRpb25zJiZNbC5vcHRpb25zLnJhbmdlczt0eXBlb2YgVDAueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9VDAueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gQjUoKXt2YXIgZ2c7cmV0dXJuIGdnPXhpLnBvcCgpfHxNbC5sZXgoKXx8cGssdHlwZW9mIGdnIT0ibnVtYmVyIiYmKGdnIGluc3RhbmNlb2YgQXJyYXkmJih4aT1nZyxnZz14aS5wb3AoKSksZ2c9RXMuc3ltYm9sc19bZ2ddfHxnZyksZ2d9Zm9yKHZhciBsMSx0ZCxlZCxSNSx1dj17fSxqNSxwcCwkNSxrMzs7KXtpZih0ZD14YVt4YS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t0ZF0/ZWQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t0ZF06KChsMT09PW51bGx8fHR5cGVvZiBsMT4idSIpJiYobDE9QjUoKSksZWQ9Z3BbdGRdJiZncFt0ZF1bbDFdKSx0eXBlb2YgZWQ+InUifHwhZWQubGVuZ3RofHwhZWRbMF0pe3ZhciBnbT0iIjtrMz1bXTtmb3IoajUgaW4gZ3BbdGRdKXRoaXMudGVybWluYWxzX1tqNV0mJmo1PmRtJiZrMy5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bajVdKyInIik7TWwuc2hvd1Bvc2l0aW9uP2dtPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEZmKzEpK2A6CmArTWwuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtrMy5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2wxXXx8bDEpKyInIjpnbT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhGZisxKSsiOiBVbmV4cGVjdGVkICIrKGwxPT1waz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tsMV18fGwxKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnbSx7dGV4dDpNbC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bbDFdfHxsMSxsaW5lOk1sLnl5bGluZW5vLGxvYzpGNSxleHBlY3RlZDprM30pfWlmKGVkWzBdaW5zdGFuY2VvZiBBcnJheSYmZWQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit0ZCsiLCB0b2tlbjogIitsMSk7c3dpdGNoKGVkWzBdKXtjYXNlIDE6eGEucHVzaChsMSksV2MucHVzaChNbC55eXRleHQpLENlLnB1c2goTWwueXlsbG9jKSx4YS5wdXNoKGVkWzFdKSxsMT1udWxsLGRnPU1sLnl5bGVuZyxCZT1NbC55eXRleHQsRmY9TWwueXlsaW5lbm8sRjU9TWwueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihwcD10aGlzLnByb2R1Y3Rpb25zX1tlZFsxXV1bMV0sdXYuJD1XY1tXYy5sZW5ndGgtcHBdLHV2Ll8kPXtmaXJzdF9saW5lOkNlW0NlLmxlbmd0aC0ocHB8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpDZVtDZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpDZVtDZS5sZW5ndGgtKHBwfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkNlW0NlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0samImJih1di5fJC5yYW5nZT1bQ2VbQ2UubGVuZ3RoLShwcHx8MSldLnJhbmdlWzBdLENlW0NlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFI1PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh1dixbQmUsZGcsRmYsVDAueXksZWRbMV0sV2MsQ2VdLmNvbmNhdCh4MykpLHR5cGVvZiBSNTwidSIpcmV0dXJuIFI1O3BwJiYoeGE9eGEuc2xpY2UoMCwtMSpwcCoyKSxXYz1XYy5zbGljZSgwLC0xKnBwKSxDZT1DZS5zbGljZSgwLC0xKnBwKSkseGEucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tlZFsxXV1bMF0pLFdjLnB1c2godXYuJCksQ2UucHVzaCh1di5fJCksJDU9Z3BbeGFbeGEubGVuZ3RoLTJdXVt4YVt4YS5sZW5ndGgtMV1dLHhhLnB1c2goJDUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxPYz1mdW5jdGlvbigpe3ZhciBuZj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihFcyx4YSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFcyx4YSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRXMpfSxzZXRJbnB1dDpmdW5jdGlvbihYaSxFcyl7cmV0dXJuIHRoaXMueXk9RXN8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVhpLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBYaT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9WGksdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVhpLHRoaXMubWF0Y2hlZCs9WGk7dmFyIEVzPVhpLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRXM/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFhpfSx1bnB1dDpmdW5jdGlvbihYaSl7dmFyIEVzPVhpLmxlbmd0aCx4YT1YaS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVhpK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FcyksdGhpcy5vZmZzZXQtPUVzO3ZhciB4aT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx4YS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXhhLmxlbmd0aC0xKTt2YXIgV2M9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhhPyh4YS5sZW5ndGg9PT14aS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3hpW3hpLmxlbmd0aC14YS5sZW5ndGhdLmxlbmd0aC14YVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUVzfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1djWzBdLFdjWzBdK3RoaXMueXlsZW5nLUVzXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oWGkpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShYaSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWGk9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihYaS5sZW5ndGg+MjA/Ii4uLiI6IiIpK1hpLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFhpPXRoaXMubWF0Y2g7cmV0dXJuIFhpLmxlbmd0aDwyMCYmKFhpKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1YaS5sZW5ndGgpKSwoWGkuc3Vic3RyKDAsMjApKyhYaS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFhpPXRoaXMucGFzdElucHV0KCksRXM9bmV3IEFycmF5KFhpLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFhpK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFcysiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oWGksRXMpe3ZhciB4YSx4aSxXYztpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoV2M9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoV2MueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseGk9WGlbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHhpJiYodGhpcy55eWxpbmVubys9eGkubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eGk/eGlbeGkubGVuZ3RoLTFdLmxlbmd0aC14aVt4aS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitYaVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1YaVswXSx0aGlzLm1hdGNoKz1YaVswXSx0aGlzLm1hdGNoZXM9WGksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoWGlbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVhpWzBdLHhhPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEVzLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHhhKXJldHVybiB4YTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgQ2UgaW4gV2MpdGhpc1tDZV09V2NbQ2VdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFhpLEVzLHhhLHhpO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIFdjPXRoaXMuX2N1cnJlbnRSdWxlcygpLENlPTA7Q2U8V2MubGVuZ3RoO0NlKyspaWYoeGE9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tXY1tDZV1dKSx4YSYmKCFFc3x8eGFbMF0ubGVuZ3RoPkVzWzBdLmxlbmd0aCkpe2lmKEVzPXhhLHhpPUNlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFhpPXRoaXMudGVzdF9tYXRjaCh4YSxXY1tDZV0pLFhpIT09ITEpcmV0dXJuIFhpO2lmKHRoaXMuX2JhY2t0cmFjayl7RXM9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRXM/KFhpPXRoaXMudGVzdF9tYXRjaChFcyxXY1t4aV0pLFhpIT09ITE/WGk6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBFcz10aGlzLm5leHQoKTtyZXR1cm4gRXN8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEVzKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRXMpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBFcz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBFcz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEVzKXtyZXR1cm4gRXM9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhFc3x8MCksRXM+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFc106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oRXMpe3RoaXMuYmVnaW4oRXMpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEVzLHhhLHhpLFdjKXtzd2l0Y2goeGkpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSA4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDkyO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIDkzO2Nhc2UgMTM6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTp0aGlzLmJlZ2luKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDE2OnJldHVybiJTVFIiO2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDgxO2Nhc2UgMjA6cmV0dXJuIDk5O2Nhc2UgMjE6cmV0dXJuIDgyO2Nhc2UgMjI6cmV0dXJuIDEwMTtjYXNlIDIzOnJldHVybiA4MztjYXNlIDI0OnJldHVybiA4NDtjYXNlIDI1OnJldHVybiA5NDtjYXNlIDI2OnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4gODU7Y2FzZSAyOTpyZXR1cm4gRXMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMDpyZXR1cm4gRXMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMTpyZXR1cm4gRXMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMjpyZXR1cm4gMjc7Y2FzZSAzMzpyZXR1cm4gMzI7Y2FzZSAzNDpyZXR1cm4gOTU7Y2FzZSAzNTpyZXR1cm4gOTU7Y2FzZSAzNjpyZXR1cm4gOTU7Y2FzZSAzNzpyZXR1cm4gOTU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDEzO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ5OnJldHVybiAxMTg7Y2FzZSA1MDpyZXR1cm4gMTE5O2Nhc2UgNTE6cmV0dXJuIDEyMDtjYXNlIDUyOnJldHVybiAxMjE7Y2FzZSA1MzpyZXR1cm4gMTAyO2Nhc2UgNTQ6cmV0dXJuIDEwODtjYXNlIDU1OnJldHVybiA0NDtjYXNlIDU2OnJldHVybiA1ODtjYXNlIDU3OnJldHVybiA0MjtjYXNlIDU4OnJldHVybiA4O2Nhc2UgNTk6cmV0dXJuIDEwMztjYXNlIDYwOnJldHVybiAxMTI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlZGdlVGV4dCIpLDczO2Nhc2UgNjM6cmV0dXJuIDExNjtjYXNlIDY0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRoaWNrRWRnZVRleHQiKSw3MztjYXNlIDY2OnJldHVybiAxMTY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkb3R0ZWRFZGdlVGV4dCIpLDczO2Nhc2UgNjk6cmV0dXJuIDExNjtjYXNlIDcwOnJldHVybiA3NTtjYXNlIDcxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTE7Y2FzZSA3MjpyZXR1cm4iVEVYVCI7Y2FzZSA3MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVsbGlwc2VUZXh0IiksNTA7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUzO2Nhc2UgNzU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTI7Y2FzZSA3NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDU1O2Nhc2UgNzc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTQ7Y2FzZSA3ODpyZXR1cm4gNTY7Y2FzZSA3OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2NTtjYXNlIDgwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MTtjYXNlIDgyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDc7Y2FzZSA4MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0NjtjYXNlIDg0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjc7Y2FzZSA4NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY5O2Nhc2UgODY6cmV0dXJuIDExNDtjYXNlIDg3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2NjtjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2ODtjYXNlIDg5OnJldHVybiAxMTU7Y2FzZSA5MDpyZXR1cm4gNjU7Y2FzZSA5MTpyZXR1cm4gODc7Y2FzZSA5MjpyZXR1cm4iU0VQIjtjYXNlIDkzOnJldHVybiA4NjtjYXNlIDk0OnJldHVybiAxMTI7Y2FzZSA5NTpyZXR1cm4gMTA4O2Nhc2UgOTY6cmV0dXJuIDQyO2Nhc2UgOTc6cmV0dXJuIDEwNjtjYXNlIDk4OnJldHVybiAxMTE7Y2FzZSA5OTpyZXR1cm4gMTEzO2Nhc2UgMTAwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjA7Y2FzZSAxMDE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjA7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTtjYXNlIDEwMzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0ODtjYXNlIDEwNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2Nhc2UgMTA1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2Nhc2UgMTA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjQ7Y2FzZSAxMDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjM7Y2FzZSAxMDg6cmV0dXJuIlRFWFQiO2Nhc2UgMTA5OnJldHVybiJRVU9URSI7Y2FzZSAxMTA6cmV0dXJuIDk7Y2FzZSAxMTE6cmV0dXJuIDEwO2Nhc2UgMTEyOnJldHVybiAxMX19LHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl1bYF0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10pLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmZsb3djaGFydC1lbGtcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86W14tXXwtKD8hLSkrKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpbXj1dfD0oPyEpKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86W15cLl18XC4oPyEpKS8sL14oPzpccyp+fltcfl0rXHMqKS8sL14oPzpbLS9cKV1bXCldKS8sL14oPzpbXlwoXClcW1xdXHtcfV18KD8hXCkrKSkvLC9eKD86XCgtKS8sL14oPzpcXVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVxdKS8sL14oPzpcW1xbKS8sL14oPzpcW1x8KS8sL14oPzo+KS8sL14oPzpcKVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVwpXCkpLywvXig/OlwoXChcKCkvLC9eKD86W1xcKD89XF0pXVtcXV0pLywvXig/OlwvKD89XF0pXF0pLywvXig/OlwvKD8hXF0pfFxcKD8hXF0pfFteXFxcW1xdXChcKVx7XH1cL10rKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpcKikvLC9eKD86IykvLC9eKD86JikvLC9eKD86KFtBLVphLXowLTkhIlwjJCUmJyorXC5gP1xcX1wvXXwtKD89W15cPlwtXC5dKXwoPyEpKSspLywvXig/Oi0pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/Olx8KS8sL14oPzpcKSkvLC9eKD86XCgpLywvXig/OlxdKS8sL14oPzpcWykvLC9eKD86KFx9KSkvLC9eKD86XHspLywvXig/OlteXFtcXVwoXClce1x9XHxcIl0rKS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2FsbGJhY2thcmdzOntydWxlczpbMTEsMTIsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzgsOSwxMCwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzE1LDE4LDI3LDI4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzE1LDE4LDY3LDY5LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMTUsMTgsNjQsNjYsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMTUsMTgsNjEsNjMsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODQsODUsODYsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMTUsMTgsNzAsNzEsNzIsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NCw3NSw3Niw3Nyw4MCw4MSw4Miw4Myw4Nyw4OCwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOF0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMTUsMTgsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEzLDE0LDE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNiwxNywxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTUsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjQsNjUsNjcsNjgsNzAsNzMsNzUsNzcsNzgsNzksODEsODMsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAxLDEwMywxMDUsMTA3LDEwOSwxMTAsMTExLDExMl0saW5jbHVzaXZlOiEwfX19O3JldHVybiBuZn0oKTt0Zi5sZXhlcj1PYztmdW5jdGlvbiBlZigpe3RoaXMueXk9e319cmV0dXJuIGVmLnByb3RvdHlwZT10Zix0Zi5QYXJzZXI9ZWYsbmV3IGVmfSgpO2pkdC5wYXJzZXI9amR0O2NvbnN0ICRkdD1qZHQsREllPSJmbG93Y2hhcnQtIjtsZXQgQ050PTAsemR0PUxlKCkscGw9e30sZFQ9W10sWEE9e30sRTU9W10sV1c9e30sS1c9e30sWVc9MCxxZHQ9ITAsdHYsWFcsUVc9W107Y29uc3QgWlc9aT0+WXIuc2FuaXRpemVUZXh0KGksemR0KSxzUD1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5rZXlzKHBsKTtmb3IoY29uc3QgZiBvZiBhKWlmKHBsW2ZdLmlkPT09aSlyZXR1cm4gcGxbZl0uZG9tSWQ7cmV0dXJuIGl9LF9OdD1mdW5jdGlvbihpLGEsZixwLHYsbSxiPXt9KXtsZXQgRSxfPWk7XyE9PXZvaWQgMCYmXy50cmltKCkubGVuZ3RoIT09MCYmKHBsW19dPT09dm9pZCAwJiYocGxbX109e2lkOl8sbGFiZWxUeXBlOiJ0ZXh0Iixkb21JZDpESWUrXysiLSIrQ050LHN0eWxlczpbXSxjbGFzc2VzOltdfSksQ050KyssYSE9PXZvaWQgMD8oemR0PUxlKCksRT1aVyhhLnRleHQudHJpbSgpKSxwbFtfXS5sYWJlbFR5cGU9YS50eXBlLEVbMF09PT0nIicmJkVbRS5sZW5ndGgtMV09PT0nIicmJihFPUUuc3Vic3RyaW5nKDEsRS5sZW5ndGgtMSkpLHBsW19dLnRleHQ9RSk6cGxbX10udGV4dD09PXZvaWQgMCYmKHBsW19dLnRleHQ9aSksZiE9PXZvaWQgMCYmKHBsW19dLnR5cGU9ZikscCE9bnVsbCYmcC5mb3JFYWNoKGZ1bmN0aW9uKEwpe3BsW19dLnN0eWxlcy5wdXNoKEwpfSksdiE9bnVsbCYmdi5mb3JFYWNoKGZ1bmN0aW9uKEwpe3BsW19dLmNsYXNzZXMucHVzaChMKX0pLG0hPT12b2lkIDAmJihwbFtfXS5kaXI9bSkscGxbX10ucHJvcHM9PT12b2lkIDA/cGxbX10ucHJvcHM9YjpiIT09dm9pZCAwJiZPYmplY3QuYXNzaWduKHBsW19dLnByb3BzLGIpKX0sU050PWZ1bmN0aW9uKGksYSxmKXtjb25zdCBtPXtzdGFydDppLGVuZDphLHR5cGU6dm9pZCAwLHRleHQ6IiIsbGFiZWxUeXBlOiJ0ZXh0In07VXQuaW5mbygiYWJjNzggR290IGVkZ2UuLi4iLG0pO2NvbnN0IGI9Zi50ZXh0O2IhPT12b2lkIDAmJihtLnRleHQ9WlcoYi50ZXh0LnRyaW0oKSksbS50ZXh0WzBdPT09JyInJiZtLnRleHRbbS50ZXh0Lmxlbmd0aC0xXT09PSciJyYmKG0udGV4dD1tLnRleHQuc3Vic3RyaW5nKDEsbS50ZXh0Lmxlbmd0aC0xKSksbS5sYWJlbFR5cGU9Yi50eXBlKSxmIT09dm9pZCAwJiYobS50eXBlPWYudHlwZSxtLnN0cm9rZT1mLnN0cm9rZSxtLmxlbmd0aD1mLmxlbmd0aCksZFQucHVzaChtKX0sQU50PWZ1bmN0aW9uKGksYSxmKXtVdC5pbmZvKCJhZGRMaW5rIChhYmM3OCkiLGksYSxmKTtsZXQgcCx2O2ZvcihwPTA7cDxpLmxlbmd0aDtwKyspZm9yKHY9MDt2PGEubGVuZ3RoO3YrKylTTnQoaVtwXSxhW3ZdLGYpfSxMTnQ9ZnVuY3Rpb24oaSxhKXtpLmZvckVhY2goZnVuY3Rpb24oZil7Zj09PSJkZWZhdWx0Ij9kVC5kZWZhdWx0SW50ZXJwb2xhdGU9YTpkVFtmXS5pbnRlcnBvbGF0ZT1hfSl9LE1OdD1mdW5jdGlvbihpLGEpe2kuZm9yRWFjaChmdW5jdGlvbihmKXtmPT09ImRlZmF1bHQiP2RULmRlZmF1bHRTdHlsZT1hOigkYS5pc1N1YnN0cmluZ0luQXJyYXkoImZpbGwiLGEpPT09LTEmJmEucHVzaCgiZmlsbDpub25lIiksZFRbZl0uc3R5bGU9YSl9KX0sSU50PWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7WEFbZl09PT12b2lkIDAmJihYQVtmXT17aWQ6ZixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLGEhPW51bGwmJmEuZm9yRWFjaChmdW5jdGlvbihwKXtpZihwLm1hdGNoKCJjb2xvciIpKXtjb25zdCB2PXAucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO1hBW2ZdLnRleHRTdHlsZXMucHVzaCh2KX1YQVtmXS5zdHlsZXMucHVzaChwKX0pfSl9LEROdD1mdW5jdGlvbihpKXt0dj1pLHR2Lm1hdGNoKC8uKjwvKSYmKHR2PSJSTCIpLHR2Lm1hdGNoKC8uKlxeLykmJih0dj0iQlQiKSx0di5tYXRjaCgvLio+LykmJih0dj0iTFIiKSx0di5tYXRjaCgvLip2LykmJih0dj0iVEIiKSx0dj09PSJURCImJih0dj0iVEIiKX0sSlc9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1mO3BsW3BdIT09dm9pZCAwJiZwbFtwXS5jbGFzc2VzLnB1c2goYSksV1dbcF0hPT12b2lkIDAmJldXW3BdLmNsYXNzZXMucHVzaChhKX0pfSxPSWU9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXthIT09dm9pZCAwJiYoS1dbWFc9PT0iZ2VuLTEiP3NQKGYpOmZdPVpXKGEpKX0pfSxOSWU9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPXNQKGkpO2lmKExlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGE9PT12b2lkIDApcmV0dXJuO2xldCB2PVtdO2lmKHR5cGVvZiBmPT0ic3RyaW5nIil7dj1mLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgbT0wO208di5sZW5ndGg7bSsrKXtsZXQgYj12W21dLnRyaW0oKTtiLmNoYXJBdCgwKT09PSciJyYmYi5jaGFyQXQoYi5sZW5ndGgtMSk9PT0nIicmJihiPWIuc3Vic3RyKDEsYi5sZW5ndGgtMikpLHZbbV09Yn19di5sZW5ndGg9PT0wJiZ2LnB1c2goaSkscGxbaV0hPT12b2lkIDAmJihwbFtpXS5oYXZlQ2FsbGJhY2s9ITAsUVcucHVzaChmdW5jdGlvbigpe2NvbnN0IG09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3B9Il1gKTttIT09bnVsbCYmbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXskYS5ydW5GdW5jKGEsLi4udil9LCExKX0pKX0sT050PWZ1bmN0aW9uKGksYSxmKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXtwbFtwXSE9PXZvaWQgMCYmKHBsW3BdLmxpbms9JGEuZm9ybWF0VXJsKGEsemR0KSxwbFtwXS5saW5rVGFyZ2V0PWYpfSksSlcoaSwiY2xpY2thYmxlIil9LE5OdD1mdW5jdGlvbihpKXtpZihLVy5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gS1dbaV19LFBOdD1mdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7TkllKHAsYSxmKX0pLEpXKGksImNsaWNrYWJsZSIpfSxGTnQ9ZnVuY3Rpb24oaSl7UVcuZm9yRWFjaChmdW5jdGlvbihhKXthKGkpfSl9LEJOdD1mdW5jdGlvbigpe3JldHVybiB0di50cmltKCl9LFJOdD1mdW5jdGlvbigpe3JldHVybiBwbH0sak50PWZ1bmN0aW9uKCl7cmV0dXJuIGRUfSwkTnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWEF9LHpOdD1mdW5jdGlvbihpKXtsZXQgYT15cigiLm1lcm1haWRUb29sdGlwIik7KGEuX2dyb3Vwc3x8YSlbMF1bMF09PT1udWxsJiYoYT15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSkseXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3Qgdj15cih0aGlzKTtpZih2LmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksYS50ZXh0KHYuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksYS5odG1sKGEuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSx2LmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCkseXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtRVy5wdXNoKHpOdCk7Y29uc3QgcU50PWZ1bmN0aW9uKGk9Imdlbi0xIil7cGw9e30sWEE9e30sZFQ9W10sUVc9W3pOdF0sRTU9W10sV1c9e30sWVc9MCxLVz17fSxxZHQ9ITAsWFc9aSxhcCgpfSxITnQ9aT0+e1hXPWl8fCJnZW4tMiJ9LEdOdD1mdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LFZOdD1mdW5jdGlvbihpLGEsZil7bGV0IHA9aS50ZXh0LnRyaW0oKSx2PWYudGV4dDtpPT09ZiYmZi50ZXh0Lm1hdGNoKC9ccy8pJiYocD12b2lkIDApO2Z1bmN0aW9uIG0oTil7Y29uc3QgQj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxqPVtdO2xldCBSO3JldHVybntub2RlTGlzdDpOLmZpbHRlcihmdW5jdGlvbihLKXtjb25zdCBpdD10eXBlb2YgSztyZXR1cm4gSy5zdG10JiZLLnN0bXQ9PT0iZGlyIj8oUj1LLnZhbHVlLCExKTpLLnRyaW0oKT09PSIiPyExOml0IGluIEI/QltpdF0uaGFzT3duUHJvcGVydHkoSyk/ITE6QltpdF1bS109ITA6ai5pbmNsdWRlcyhLKT8hMTpqLnB1c2goSyl9KSxkaXI6Un19bGV0IGI9W107Y29uc3R7bm9kZUxpc3Q6RSxkaXI6X309bShiLmNvbmNhdC5hcHBseShiLGEpKTtpZihiPUUsWFc9PT0iZ2VuLTEiKWZvcihsZXQgTj0wO048Yi5sZW5ndGg7TisrKWJbTl09c1AoYltOXSk7cD1wfHwic3ViR3JhcGgiK1lXLHY9dnx8IiIsdj1aVyh2KSxZVz1ZVysxO2NvbnN0IEw9e2lkOnAsbm9kZXM6Yix0aXRsZTp2LnRyaW0oKSxjbGFzc2VzOltdLGRpcjpfLGxhYmVsVHlwZTpmLnR5cGV9O3JldHVybiBVdC5pbmZvKCJBZGRpbmciLEwuaWQsTC5ub2RlcyxMLmRpciksTC5ub2Rlcz10UHQoTCxFNSkubm9kZXMsRTUucHVzaChMKSxXV1twXT1MLHB9LFBJZT1mdW5jdGlvbihpKXtmb3IoY29uc3RbYSxmXW9mIEU1LmVudHJpZXMoKSlpZihmLmlkPT09aSlyZXR1cm4gYTtyZXR1cm4tMX07bGV0IGFQPS0xO2NvbnN0IFVOdD1bXSxXTnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUU1W2FdLm5vZGVzO2lmKGFQPWFQKzEsYVA+MmUzKXJldHVybjtpZihVTnRbYVBdPWEsRTVbYV0uaWQ9PT1pKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IHA9MCx2PTE7Zm9yKDtwPGYubGVuZ3RoOyl7Y29uc3QgbT1QSWUoZltwXSk7aWYobT49MCl7Y29uc3QgYj1XTnQoaSxtKTtpZihiLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OnYrYi5jb3VudH07dj12K2IuY291bnR9cD1wKzF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDp2fX0sS050PWZ1bmN0aW9uKGkpe3JldHVybiBVTnRbaV19LFlOdD1mdW5jdGlvbigpe2FQPS0xLEU1Lmxlbmd0aD4wJiZXTnQoIm5vbmUiLEU1Lmxlbmd0aC0xKX0sWE50PWZ1bmN0aW9uKCl7cmV0dXJuIEU1fSxRTnQ9KCk9PnFkdD8ocWR0PSExLCEwKTohMSxGSWU9aT0+e2xldCBhPWkudHJpbSgpLGY9ImFycm93X29wZW4iO3N3aXRjaChhWzBdKXtjYXNlIjwiOmY9ImFycm93X3BvaW50IixhPWEuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpmPSJhcnJvd19jcm9zcyIsYT1hLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6Zj0iYXJyb3dfY2lyY2xlIixhPWEuc2xpY2UoMSk7YnJlYWt9bGV0IHA9Im5vcm1hbCI7cmV0dXJuIGEuaW5jbHVkZXMoIj0iKSYmKHA9InRoaWNrIiksYS5pbmNsdWRlcygiLiIpJiYocD0iZG90dGVkIikse3R5cGU6ZixzdHJva2U6cH19LEJJZT0oaSxhKT0+e2NvbnN0IGY9YS5sZW5ndGg7bGV0IHA9MDtmb3IobGV0IHY9MDt2PGY7Kyt2KWFbdl09PT1pJiYrK3A7cmV0dXJuIHB9LFJJZT1pPT57Y29uc3QgYT1pLnRyaW0oKTtsZXQgZj1hLnNsaWNlKDAsLTEpLHA9ImFycm93X29wZW4iO3N3aXRjaChhLnNsaWNlKC0xKSl7Y2FzZSJ4IjpwPSJhcnJvd19jcm9zcyIsYVswXT09PSJ4IiYmKHA9ImRvdWJsZV8iK3AsZj1mLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOnA9ImFycm93X3BvaW50IixhWzBdPT09IjwiJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrO2Nhc2UibyI6cD0iYXJyb3dfY2lyY2xlIixhWzBdPT09Im8iJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrfWxldCB2PSJub3JtYWwiLG09Zi5sZW5ndGgtMTtmWzBdPT09Ij0iJiYodj0idGhpY2siKSxmWzBdPT09In4iJiYodj0iaW52aXNpYmxlIik7bGV0IGI9QkllKCIuIixmKTtyZXR1cm4gYiYmKHY9ImRvdHRlZCIsbT1iKSx7dHlwZTpwLHN0cm9rZTp2LGxlbmd0aDptfX0sWk50PShpLGEpPT57Y29uc3QgZj1SSWUoaSk7bGV0IHA7aWYoYSl7aWYocD1GSWUoYSkscC5zdHJva2UhPT1mLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYocC50eXBlPT09ImFycm93X29wZW4iKXAudHlwZT1mLnR5cGU7ZWxzZXtpZihwLnR5cGUhPT1mLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O3AudHlwZT0iZG91YmxlXyIrcC50eXBlfXJldHVybiBwLnR5cGU9PT0iZG91YmxlX2Fycm93IiYmKHAudHlwZT0iZG91YmxlX2Fycm93X3BvaW50IikscC5sZW5ndGg9Zi5sZW5ndGgscH1yZXR1cm4gZn0sSk50PShpLGEpPT57bGV0IGY9ITE7cmV0dXJuIGkuZm9yRWFjaChwPT57cC5ub2Rlcy5pbmRleE9mKGEpPj0wJiYoZj0hMCl9KSxmfSx0UHQ9KGksYSk9Pntjb25zdCBmPVtdO3JldHVybiBpLm5vZGVzLmZvckVhY2goKHAsdik9PntKTnQoYSxwKXx8Zi5wdXNoKGkubm9kZXNbdl0pfSkse25vZGVzOmZ9fSxlUHQ9e2ZpcnN0R3JhcGg6UU50fSxnVD17ZGVmYXVsdENvbmZpZzooKT0+b1QuZmxvd2NoYXJ0LHNldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLGdldEFjY0Rlc2NyaXB0aW9uOnVwLHNldEFjY0Rlc2NyaXB0aW9uOmNwLGFkZFZlcnRleDpfTnQsbG9va1VwRG9tSWQ6c1AsYWRkTGluazpBTnQsdXBkYXRlTGlua0ludGVycG9sYXRlOkxOdCx1cGRhdGVMaW5rOk1OdCxhZGRDbGFzczpJTnQsc2V0RGlyZWN0aW9uOkROdCxzZXRDbGFzczpKVyxzZXRUb29sdGlwOk9JZSxnZXRUb29sdGlwOk5OdCxzZXRDbGlja0V2ZW50OlBOdCxzZXRMaW5rOk9OdCxiaW5kRnVuY3Rpb25zOkZOdCxnZXREaXJlY3Rpb246Qk50LGdldFZlcnRpY2VzOlJOdCxnZXRFZGdlczpqTnQsZ2V0Q2xhc3NlczokTnQsY2xlYXI6cU50LHNldEdlbjpITnQsZGVmYXVsdFN0eWxlOkdOdCxhZGRTdWJHcmFwaDpWTnQsZ2V0RGVwdGhGaXJzdFBvczpLTnQsaW5kZXhOb2RlczpZTnQsZ2V0U3ViR3JhcGhzOlhOdCxkZXN0cnVjdExpbms6Wk50LGxleDplUHQsZXhpc3RzOkpOdCxtYWtlVW5pcTp0UHQsc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYn0sakllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhZGRDbGFzczpJTnQsYWRkTGluazpBTnQsYWRkU2luZ2xlTGluazpTTnQsYWRkU3ViR3JhcGg6Vk50LGFkZFZlcnRleDpfTnQsYmluZEZ1bmN0aW9uczpGTnQsY2xlYXI6cU50LGRlZmF1bHQ6Z1QsZGVmYXVsdFN0eWxlOkdOdCxkZXN0cnVjdExpbms6Wk50LGZpcnN0R3JhcGg6UU50LGdldENsYXNzZXM6JE50LGdldERlcHRoRmlyc3RQb3M6S050LGdldERpcmVjdGlvbjpCTnQsZ2V0RWRnZXM6ak50LGdldFN1YkdyYXBoczpYTnQsZ2V0VG9vbHRpcDpOTnQsZ2V0VmVydGljZXM6Uk50LGluZGV4Tm9kZXM6WU50LGxleDplUHQsbG9va1VwRG9tSWQ6c1Asc2V0Q2xhc3M6Slcsc2V0Q2xpY2tFdmVudDpQTnQsc2V0RGlyZWN0aW9uOkROdCxzZXRHZW46SE50LHNldExpbms6T050LHVwZGF0ZUxpbms6TU50LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpMTnR9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyICRJZT0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBwVChpKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wifHxsMyhpKSYmdFQoaSk9PSRJZX1mdW5jdGlvbiBRQShpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aCx2PUFycmF5KHApOysrZjxwOyl2W2ZdPWEoaVtmXSxmLGkpO3JldHVybiB2fXZhciB6SWU9MS8wLG5QdD1ZMj9ZMi5wcm90b3R5cGU6dm9pZCAwLHJQdD1uUHQ/blB0LnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBpUHQoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmciKXJldHVybiBpO2lmKE1mKGkpKXJldHVybiBRQShpLGlQdCkrIiI7aWYocFQoaSkpcmV0dXJuIHJQdD9yUHQuY2FsbChpKToiIjt2YXIgYT1pKyIiO3JldHVybiBhPT0iMCImJjEvaT09LXpJZT8iLTAiOmF9dmFyIHFJZT0vXHMvO2Z1bmN0aW9uIEhJZShpKXtmb3IodmFyIGE9aS5sZW5ndGg7YS0tJiZxSWUudGVzdChpLmNoYXJBdChhKSk7KTtyZXR1cm4gYX12YXIgR0llPS9eXHMrLztmdW5jdGlvbiBWSWUoaSl7cmV0dXJuIGkmJmkuc2xpY2UoMCxISWUoaSkrMSkucmVwbGFjZShHSWUsIiIpfXZhciBzUHQ9MC8wLFVJZT0vXlstK10weFswLTlhLWZdKyQvaSxXSWU9L14wYlswMV0rJC9pLEtJZT0vXjBvWzAtN10rJC9pLFlJZT1wYXJzZUludDtmdW5jdGlvbiBYSWUoaSl7aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybiBpO2lmKHBUKGkpKXJldHVybiBzUHQ7aWYoSWIoaSkpe3ZhciBhPXR5cGVvZiBpLnZhbHVlT2Y9PSJmdW5jdGlvbiI/aS52YWx1ZU9mKCk6aTtpPUliKGEpP2ErIiI6YX1pZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk9PT0wP2k6K2k7aT1WSWUoaSk7dmFyIGY9V0llLnRlc3QoaSk7cmV0dXJuIGZ8fEtJZS50ZXN0KGkpP1lJZShpLnNsaWNlKDIpLGY/Mjo4KTpVSWUudGVzdChpKT9zUHQ6K2l9dmFyIGFQdD0xLzAsUUllPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiB0SyhpKXtpZighaSlyZXR1cm4gaT09PTA/aTowO2lmKGk9WEllKGkpLGk9PT1hUHR8fGk9PT0tYVB0KXt2YXIgYT1pPDA/LTE6MTtyZXR1cm4gYSpRSWV9cmV0dXJuIGk9PT1pP2k6MH1mdW5jdGlvbiBaSWUoaSl7dmFyIGE9dEsoaSksZj1hJTE7cmV0dXJuIGE9PT1hP2Y/YS1mOmE6MH1mdW5jdGlvbiBKSWUoKXt9ZnVuY3Rpb24gb1B0KGksYSl7Zm9yKHZhciBmPS0xLHA9aT09bnVsbD8wOmkubGVuZ3RoOysrZjxwJiZhKGlbZl0sZixpKSE9PSExOyk7cmV0dXJuIGl9ZnVuY3Rpb24gY1B0KGksYSxmLHApe2Zvcih2YXIgdj1pLmxlbmd0aCxtPWYrKHA/MTotMSk7cD9tLS06KyttPHY7KWlmKGEoaVttXSxtLGkpKXJldHVybiBtO3JldHVybi0xfWZ1bmN0aW9uIHREZShpKXtyZXR1cm4gaSE9PWl9ZnVuY3Rpb24gZURlKGksYSxmKXtmb3IodmFyIHA9Zi0xLHY9aS5sZW5ndGg7KytwPHY7KWlmKGlbcF09PT1hKXJldHVybiBwO3JldHVybi0xfWZ1bmN0aW9uIG5EZShpLGEsZil7cmV0dXJuIGE9PT1hP2VEZShpLGEsZik6Y1B0KGksdERlLGYpfWZ1bmN0aW9uIHJEZShpLGEpe3ZhciBmPWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4hIWYmJm5EZShpLGEsMCk+LTF9ZnVuY3Rpb24gTmIoaSl7cmV0dXJuIGVrKGkpP09EdChpKTpPT3QoaSl9dmFyIGlEZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxzRGU9L15cdyokLztmdW5jdGlvbiBIZHQoaSxhKXtpZihNZihpKSlyZXR1cm4hMTt2YXIgZj10eXBlb2YgaTtyZXR1cm4gZj09Im51bWJlciJ8fGY9PSJzeW1ib2wifHxmPT0iYm9vbGVhbiJ8fGk9PW51bGx8fHBUKGkpPyEwOnNEZS50ZXN0KGkpfHwhaURlLnRlc3QoaSl8fGEhPW51bGwmJmkgaW4gT2JqZWN0KGEpfXZhciBhRGU9NTAwO2Z1bmN0aW9uIG9EZShpKXt2YXIgYT1QQShpLGZ1bmN0aW9uKHApe3JldHVybiBmLnNpemU9PT1hRGUmJmYuY2xlYXIoKSxwfSksZj1hLmNhY2hlO3JldHVybiBhfXZhciBjRGU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csdURlPS9cXChcXCk/L2csbERlPW9EZShmdW5jdGlvbihpKXt2YXIgYT1bXTtyZXR1cm4gaS5jaGFyQ29kZUF0KDApPT09NDYmJmEucHVzaCgiIiksaS5yZXBsYWNlKGNEZSxmdW5jdGlvbihmLHAsdixtKXthLnB1c2godj9tLnJlcGxhY2UodURlLCIkMSIpOnB8fGYpfSksYX0pO2NvbnN0IGhEZT1sRGU7ZnVuY3Rpb24gdVB0KGkpe3JldHVybiBpPT1udWxsPyIiOmlQdChpKX1mdW5jdGlvbiBlSyhpLGEpe3JldHVybiBNZihpKT9pOkhkdChpLGEpP1tpXTpoRGUodVB0KGkpKX12YXIgZkRlPTEvMDtmdW5jdGlvbiBvUChpKXtpZih0eXBlb2YgaT09InN0cmluZyJ8fHBUKGkpKXJldHVybiBpO3ZhciBhPWkrIiI7cmV0dXJuIGE9PSIwIiYmMS9pPT0tZkRlPyItMCI6YX1mdW5jdGlvbiBuSyhpLGEpe2E9ZUsoYSxpKTtmb3IodmFyIGY9MCxwPWEubGVuZ3RoO2khPW51bGwmJmY8cDspaT1pW29QKGFbZisrXSldO3JldHVybiBmJiZmPT1wP2k6dm9pZCAwfWZ1bmN0aW9uIGREZShpLGEsZil7dmFyIHA9aT09bnVsbD92b2lkIDA6bksoaSxhKTtyZXR1cm4gcD09PXZvaWQgMD9mOnB9ZnVuY3Rpb24gR2R0KGksYSl7Zm9yKHZhciBmPS0xLHA9YS5sZW5ndGgsdj1pLmxlbmd0aDsrK2Y8cDspaVt2K2ZdPWFbZl07cmV0dXJuIGl9dmFyIGxQdD1ZMj9ZMi5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIGdEZShpKXtyZXR1cm4gTWYoaSl8fEZBKGkpfHwhIShsUHQmJmkmJmlbbFB0XSl9ZnVuY3Rpb24gcksoaSxhLGYscCx2KXt2YXIgbT0tMSxiPWkubGVuZ3RoO2ZvcihmfHwoZj1nRGUpLHZ8fCh2PVtdKTsrK208Yjspe3ZhciBFPWlbbV07YT4wJiZmKEUpP2E+MT9ySyhFLGEtMSxmLHAsdik6R2R0KHYsRSk6cHx8KHZbdi5sZW5ndGhdPUUpfXJldHVybiB2fWZ1bmN0aW9uIFpBKGkpe3ZhciBhPWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4gYT9ySyhpLDEpOltdfWZ1bmN0aW9uIHBEZShpKXtyZXR1cm4gQkR0KEZEdChpLHZvaWQgMCxaQSksaSsiIil9ZnVuY3Rpb24gYkRlKGksYSxmLHApe3ZhciB2PS0xLG09aT09bnVsbD8wOmkubGVuZ3RoO2ZvcihwJiZtJiYoZj1pWysrdl0pOysrdjxtOylmPWEoZixpW3ZdLHYsaSk7cmV0dXJuIGZ9ZnVuY3Rpb24gdkRlKGksYSl7cmV0dXJuIGkmJktOKGEsTmIoYSksaSl9ZnVuY3Rpb24gd0RlKGksYSl7cmV0dXJuIGkmJktOKGEsaVQoYSksaSl9ZnVuY3Rpb24gaFB0KGksYSl7Zm9yKHZhciBmPS0xLHA9aT09bnVsbD8wOmkubGVuZ3RoLHY9MCxtPVtdOysrZjxwOyl7dmFyIGI9aVtmXTthKGIsZixpKSYmKG1bdisrXT1iKX1yZXR1cm4gbX1mdW5jdGlvbiBmUHQoKXtyZXR1cm5bXX12YXIgbURlPU9iamVjdC5wcm90b3R5cGUseURlPW1EZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxkUHQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyx4RGU9ZFB0P2Z1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP1tdOihpPU9iamVjdChpKSxoUHQoZFB0KGkpLGZ1bmN0aW9uKGEpe3JldHVybiB5RGUuY2FsbChpLGEpfSkpfTpmUHQ7Y29uc3QgVmR0PXhEZTtmdW5jdGlvbiBrRGUoaSxhKXtyZXR1cm4gS04oaSxWZHQoaSksYSl9dmFyIEVEZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFREZT1FRGU/ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdO2k7KUdkdChhLFZkdChpKSksaT1RMXQoaSk7cmV0dXJuIGF9OmZQdDtjb25zdCBnUHQ9VERlO2Z1bmN0aW9uIENEZShpLGEpe3JldHVybiBLTihpLGdQdChpKSxhKX1mdW5jdGlvbiBwUHQoaSxhLGYpe3ZhciBwPWEoaSk7cmV0dXJuIE1mKGkpP3A6R2R0KHAsZihpKSl9ZnVuY3Rpb24gVWR0KGkpe3JldHVybiBwUHQoaSxOYixWZHQpfWZ1bmN0aW9uIF9EZShpKXtyZXR1cm4gcFB0KGksaVQsZ1B0KX12YXIgU0RlPU9iamVjdC5wcm90b3R5cGUsQURlPVNEZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBMRGUoaSl7dmFyIGE9aS5sZW5ndGgsZj1uZXcgaS5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYSYmdHlwZW9mIGlbMF09PSJzdHJpbmciJiZBRGUuY2FsbChpLCJpbmRleCIpJiYoZi5pbmRleD1pLmluZGV4LGYuaW5wdXQ9aS5pbnB1dCksZn1mdW5jdGlvbiBNRGUoaSxhKXt2YXIgZj1hP1gxdChpLmJ1ZmZlcik6aS5idWZmZXI7cmV0dXJuIG5ldyBpLmNvbnN0cnVjdG9yKGYsaS5ieXRlT2Zmc2V0LGkuYnl0ZUxlbmd0aCl9dmFyIElEZT0vXHcqJC87ZnVuY3Rpb24gRERlKGkpe3ZhciBhPW5ldyBpLmNvbnN0cnVjdG9yKGkuc291cmNlLElEZS5leGVjKGkpKTtyZXR1cm4gYS5sYXN0SW5kZXg9aS5sYXN0SW5kZXgsYX12YXIgYlB0PVkyP1kyLnByb3RvdHlwZTp2b2lkIDAsdlB0PWJQdD9iUHQudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gT0RlKGkpe3JldHVybiB2UHQ/T2JqZWN0KHZQdC5jYWxsKGkpKTp7fX12YXIgTkRlPSJbb2JqZWN0IEJvb2xlYW5dIixQRGU9IltvYmplY3QgRGF0ZV0iLEZEZT0iW29iamVjdCBNYXBdIixCRGU9IltvYmplY3QgTnVtYmVyXSIsUkRlPSJbb2JqZWN0IFJlZ0V4cF0iLGpEZT0iW29iamVjdCBTZXRdIiwkRGU9IltvYmplY3QgU3RyaW5nXSIsekRlPSJbb2JqZWN0IFN5bWJvbF0iLHFEZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEhEZT0iW29iamVjdCBEYXRhVmlld10iLEdEZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixWRGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsVURlPSJbb2JqZWN0IEludDhBcnJheV0iLFdEZT0iW29iamVjdCBJbnQxNkFycmF5XSIsS0RlPSJbb2JqZWN0IEludDMyQXJyYXldIixZRGU9IltvYmplY3QgVWludDhBcnJheV0iLFhEZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFFEZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFpEZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEpEZShpLGEsZil7dmFyIHA9aS5jb25zdHJ1Y3Rvcjtzd2l0Y2goYSl7Y2FzZSBxRGU6cmV0dXJuIFgxdChpKTtjYXNlIE5EZTpjYXNlIFBEZTpyZXR1cm4gbmV3IHAoK2kpO2Nhc2UgSERlOnJldHVybiBNRGUoaSxmKTtjYXNlIEdEZTpjYXNlIFZEZTpjYXNlIFVEZTpjYXNlIFdEZTpjYXNlIEtEZTpjYXNlIFlEZTpjYXNlIFhEZTpjYXNlIFFEZTpjYXNlIFpEZTpyZXR1cm4gd0R0KGksZik7Y2FzZSBGRGU6cmV0dXJuIG5ldyBwO2Nhc2UgQkRlOmNhc2UgJERlOnJldHVybiBuZXcgcChpKTtjYXNlIFJEZTpyZXR1cm4gRERlKGkpO2Nhc2UgakRlOnJldHVybiBuZXcgcDtjYXNlIHpEZTpyZXR1cm4gT0RlKGkpfX12YXIgdE9lPSJbb2JqZWN0IE1hcF0iO2Z1bmN0aW9uIGVPZShpKXtyZXR1cm4gbDMoaSkmJlZBKGkpPT10T2V9dmFyIHdQdD1SQSYmUkEuaXNNYXAsbk9lPXdQdD93Vyh3UHQpOmVPZTtjb25zdCByT2U9bk9lO3ZhciBpT2U9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gc09lKGkpe3JldHVybiBsMyhpKSYmVkEoaSk9PWlPZX12YXIgbVB0PVJBJiZSQS5pc1NldCxhT2U9bVB0P3dXKG1QdCk6c09lO2NvbnN0IG9PZT1hT2U7dmFyIGNPZT0xLHVPZT0yLGxPZT00LHlQdD0iW29iamVjdCBBcmd1bWVudHNdIixoT2U9IltvYmplY3QgQXJyYXldIixmT2U9IltvYmplY3QgQm9vbGVhbl0iLGRPZT0iW29iamVjdCBEYXRlXSIsZ09lPSJbb2JqZWN0IEVycm9yXSIseFB0PSJbb2JqZWN0IEZ1bmN0aW9uXSIscE9lPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsYk9lPSJbb2JqZWN0IE1hcF0iLHZPZT0iW29iamVjdCBOdW1iZXJdIixrUHQ9IltvYmplY3QgT2JqZWN0XSIsd09lPSJbb2JqZWN0IFJlZ0V4cF0iLG1PZT0iW29iamVjdCBTZXRdIix5T2U9IltvYmplY3QgU3RyaW5nXSIseE9lPSJbb2JqZWN0IFN5bWJvbF0iLGtPZT0iW29iamVjdCBXZWFrTWFwXSIsRU9lPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVE9lPSJbb2JqZWN0IERhdGFWaWV3XSIsQ09lPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLF9PZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixTT2U9IltvYmplY3QgSW50OEFycmF5XSIsQU9lPSJbb2JqZWN0IEludDE2QXJyYXldIixMT2U9IltvYmplY3QgSW50MzJBcnJheV0iLE1PZT0iW29iamVjdCBVaW50OEFycmF5XSIsSU9lPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsRE9lPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsT09lPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsbmw9e307bmxbeVB0XT1ubFtoT2VdPW5sW0VPZV09bmxbVE9lXT1ubFtmT2VdPW5sW2RPZV09bmxbQ09lXT1ubFtfT2VdPW5sW1NPZV09bmxbQU9lXT1ubFtMT2VdPW5sW2JPZV09bmxbdk9lXT1ubFtrUHRdPW5sW3dPZV09bmxbbU9lXT1ubFt5T2VdPW5sW3hPZV09bmxbTU9lXT1ubFtJT2VdPW5sW0RPZV09bmxbT09lXT0hMCxubFtnT2VdPW5sW3hQdF09bmxba09lXT0hMTtmdW5jdGlvbiBjUChpLGEsZixwLHYsbSl7dmFyIGIsRT1hJmNPZSxfPWEmdU9lLEw9YSZsT2U7aWYoZiYmKGI9dj9mKGkscCx2LG0pOmYoaSkpLGIhPT12b2lkIDApcmV0dXJuIGI7aWYoIUliKGkpKXJldHVybiBpO3ZhciBOPU1mKGkpO2lmKE4pe2lmKGI9TERlKGkpLCFFKXJldHVybiBtRHQoaSxiKX1lbHNle3ZhciBCPVZBKGkpLGo9Qj09eFB0fHxCPT1wT2U7aWYoQkEoaSkpcmV0dXJuIHZEdChpLEUpO2lmKEI9PWtQdHx8Qj09eVB0fHxqJiYhdil7aWYoYj1ffHxqP3t9OmtEdChpKSwhRSlyZXR1cm4gXz9DRGUoaSx3RGUoYixpKSk6a0RlKGksdkRlKGIsaSkpfWVsc2V7aWYoIW5sW0JdKXJldHVybiB2P2k6e307Yj1KRGUoaSxCLEUpfX1tfHwobT1uZXcgdG0pO3ZhciBSPW0uZ2V0KGkpO2lmKFIpcmV0dXJuIFI7bS5zZXQoaSxiKSxvT2UoaSk/aS5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtiLmFkZChjUChpdCxhLGYsaXQsaSxtKSl9KTpyT2UoaSkmJmkuZm9yRWFjaChmdW5jdGlvbihpdCxzdCl7Yi5zZXQoc3QsY1AoaXQsYSxmLHN0LGksbSkpfSk7dmFyIHo9TD9fP19EZTpVZHQ6Xz9pVDpOYixLPU4/dm9pZCAwOnooaSk7cmV0dXJuIG9QdChLfHxpLGZ1bmN0aW9uKGl0LHN0KXtLJiYoc3Q9aXQsaXQ9aVtzdF0pLHlXKGIsc3QsY1AoaXQsYSxmLHN0LGksbSkpfSksYn12YXIgTk9lPTQ7ZnVuY3Rpb24gUE9lKGkpe3JldHVybiBjUChpLE5PZSl9dmFyIEZPZT0xLEJPZT00O2Z1bmN0aW9uIFJPZShpKXtyZXR1cm4gY1AoaSxGT2V8Qk9lKX12YXIgak9lPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiAkT2UoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGksak9lKSx0aGlzfWZ1bmN0aW9uIHpPZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9ZnVuY3Rpb24gdVAoaSl7dmFyIGE9LTEsZj1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IHk1OysrYTxmOyl0aGlzLmFkZChpW2FdKX11UC5wcm90b3R5cGUuYWRkPXVQLnByb3RvdHlwZS5wdXNoPSRPZSx1UC5wcm90b3R5cGUuaGFzPXpPZTtmdW5jdGlvbiBxT2UoaSxhKXtmb3IodmFyIGY9LTEscD1pPT1udWxsPzA6aS5sZW5ndGg7KytmPHA7KWlmKGEoaVtmXSxmLGkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEVQdChpLGEpe3JldHVybiBpLmhhcyhhKX12YXIgSE9lPTEsR09lPTI7ZnVuY3Rpb24gVFB0KGksYSxmLHAsdixtKXt2YXIgYj1mJkhPZSxFPWkubGVuZ3RoLF89YS5sZW5ndGg7aWYoRSE9XyYmIShiJiZfPkUpKXJldHVybiExO3ZhciBMPW0uZ2V0KGkpLE49bS5nZXQoYSk7aWYoTCYmTilyZXR1cm4gTD09YSYmTj09aTt2YXIgQj0tMSxqPSEwLFI9ZiZHT2U/bmV3IHVQOnZvaWQgMDtmb3IobS5zZXQoaSxhKSxtLnNldChhLGkpOysrQjxFOyl7dmFyIHo9aVtCXSxLPWFbQl07aWYocCl2YXIgaXQ9Yj9wKEsseixCLGEsaSxtKTpwKHosSyxCLGksYSxtKTtpZihpdCE9PXZvaWQgMCl7aWYoaXQpY29udGludWU7aj0hMTticmVha31pZihSKXtpZighcU9lKGEsZnVuY3Rpb24oc3QsdXQpe2lmKCFFUHQoUix1dCkmJih6PT09c3R8fHYoeixzdCxmLHAsbSkpKXJldHVybiBSLnB1c2godXQpfSkpe2o9ITE7YnJlYWt9fWVsc2UgaWYoISh6PT09S3x8dih6LEssZixwLG0pKSl7aj0hMTticmVha319cmV0dXJuIG0uZGVsZXRlKGkpLG0uZGVsZXRlKGEpLGp9ZnVuY3Rpb24gVk9lKGkpe3ZhciBhPS0xLGY9QXJyYXkoaS5zaXplKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKHAsdil7ZlsrK2FdPVt2LHBdfSksZn1mdW5jdGlvbiBXZHQoaSl7dmFyIGE9LTEsZj1BcnJheShpLnNpemUpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24ocCl7ZlsrK2FdPXB9KSxmfXZhciBVT2U9MSxXT2U9MixLT2U9IltvYmplY3QgQm9vbGVhbl0iLFlPZT0iW29iamVjdCBEYXRlXSIsWE9lPSJbb2JqZWN0IEVycm9yXSIsUU9lPSJbb2JqZWN0IE1hcF0iLFpPZT0iW29iamVjdCBOdW1iZXJdIixKT2U9IltvYmplY3QgUmVnRXhwXSIsdE5lPSJbb2JqZWN0IFNldF0iLGVOZT0iW29iamVjdCBTdHJpbmddIixuTmU9IltvYmplY3QgU3ltYm9sXSIsck5lPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsaU5lPSJbb2JqZWN0IERhdGFWaWV3XSIsQ1B0PVkyP1kyLnByb3RvdHlwZTp2b2lkIDAsS2R0PUNQdD9DUHQudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gc05lKGksYSxmLHAsdixtLGIpe3N3aXRjaChmKXtjYXNlIGlOZTppZihpLmJ5dGVMZW5ndGghPWEuYnl0ZUxlbmd0aHx8aS5ieXRlT2Zmc2V0IT1hLmJ5dGVPZmZzZXQpcmV0dXJuITE7aT1pLmJ1ZmZlcixhPWEuYnVmZmVyO2Nhc2Ugck5lOnJldHVybiEoaS5ieXRlTGVuZ3RoIT1hLmJ5dGVMZW5ndGh8fCFtKG5ldyBiVyhpKSxuZXcgYlcoYSkpKTtjYXNlIEtPZTpjYXNlIFlPZTpjYXNlIFpPZTpyZXR1cm4gTkEoK2ksK2EpO2Nhc2UgWE9lOnJldHVybiBpLm5hbWU9PWEubmFtZSYmaS5tZXNzYWdlPT1hLm1lc3NhZ2U7Y2FzZSBKT2U6Y2FzZSBlTmU6cmV0dXJuIGk9PWErIiI7Y2FzZSBRT2U6dmFyIEU9Vk9lO2Nhc2UgdE5lOnZhciBfPXAmVU9lO2lmKEV8fChFPVdkdCksaS5zaXplIT1hLnNpemUmJiFfKXJldHVybiExO3ZhciBMPWIuZ2V0KGkpO2lmKEwpcmV0dXJuIEw9PWE7cHw9V09lLGIuc2V0KGksYSk7dmFyIE49VFB0KEUoaSksRShhKSxwLHYsbSxiKTtyZXR1cm4gYi5kZWxldGUoaSksTjtjYXNlIG5OZTppZihLZHQpcmV0dXJuIEtkdC5jYWxsKGkpPT1LZHQuY2FsbChhKX1yZXR1cm4hMX12YXIgYU5lPTEsb05lPU9iamVjdC5wcm90b3R5cGUsY05lPW9OZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB1TmUoaSxhLGYscCx2LG0pe3ZhciBiPWYmYU5lLEU9VWR0KGkpLF89RS5sZW5ndGgsTD1VZHQoYSksTj1MLmxlbmd0aDtpZihfIT1OJiYhYilyZXR1cm4hMTtmb3IodmFyIEI9XztCLS07KXt2YXIgaj1FW0JdO2lmKCEoYj9qIGluIGE6Y05lLmNhbGwoYSxqKSkpcmV0dXJuITF9dmFyIFI9bS5nZXQoaSksej1tLmdldChhKTtpZihSJiZ6KXJldHVybiBSPT1hJiZ6PT1pO3ZhciBLPSEwO20uc2V0KGksYSksbS5zZXQoYSxpKTtmb3IodmFyIGl0PWI7KytCPF87KXtqPUVbQl07dmFyIHN0PWlbal0sdXQ9YVtqXTtpZihwKXZhciBidD1iP3AodXQsc3QsaixhLGksbSk6cChzdCx1dCxqLGksYSxtKTtpZighKGJ0PT09dm9pZCAwP3N0PT09dXR8fHYoc3QsdXQsZixwLG0pOmJ0KSl7Sz0hMTticmVha31pdHx8KGl0PWo9PSJjb25zdHJ1Y3RvciIpfWlmKEsmJiFpdCl7dmFyIG10PWkuY29uc3RydWN0b3IseXQ9YS5jb25zdHJ1Y3RvcjttdCE9eXQmJiJjb25zdHJ1Y3RvciJpbiBpJiYiY29uc3RydWN0b3IiaW4gYSYmISh0eXBlb2YgbXQ9PSJmdW5jdGlvbiImJm10IGluc3RhbmNlb2YgbXQmJnR5cGVvZiB5dD09ImZ1bmN0aW9uIiYmeXQgaW5zdGFuY2VvZiB5dCkmJihLPSExKX1yZXR1cm4gbS5kZWxldGUoaSksbS5kZWxldGUoYSksS312YXIgbE5lPTEsX1B0PSJbb2JqZWN0IEFyZ3VtZW50c10iLFNQdD0iW29iamVjdCBBcnJheV0iLGlLPSJbb2JqZWN0IE9iamVjdF0iLGhOZT1PYmplY3QucHJvdG90eXBlLEFQdD1oTmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gZk5lKGksYSxmLHAsdixtKXt2YXIgYj1NZihpKSxFPU1mKGEpLF89Yj9TUHQ6VkEoaSksTD1FP1NQdDpWQShhKTtfPV89PV9QdD9pSzpfLEw9TD09X1B0P2lLOkw7dmFyIE49Xz09aUssQj1MPT1pSyxqPV89PUw7aWYoaiYmQkEoaSkpe2lmKCFCQShhKSlyZXR1cm4hMTtiPSEwLE49ITF9aWYoaiYmIU4pcmV0dXJuIG18fChtPW5ldyB0bSksYnx8bVcoaSk/VFB0KGksYSxmLHAsdixtKTpzTmUoaSxhLF8sZixwLHYsbSk7aWYoIShmJmxOZSkpe3ZhciBSPU4mJkFQdC5jYWxsKGksIl9fd3JhcHBlZF9fIiksej1CJiZBUHQuY2FsbChhLCJfX3dyYXBwZWRfXyIpO2lmKFJ8fHope3ZhciBLPVI/aS52YWx1ZSgpOmksaXQ9ej9hLnZhbHVlKCk6YTtyZXR1cm4gbXx8KG09bmV3IHRtKSx2KEssaXQsZixwLG0pfX1yZXR1cm4gaj8obXx8KG09bmV3IHRtKSx1TmUoaSxhLGYscCx2LG0pKTohMX1mdW5jdGlvbiBZZHQoaSxhLGYscCx2KXtyZXR1cm4gaT09PWE/ITA6aT09bnVsbHx8YT09bnVsbHx8IWwzKGkpJiYhbDMoYSk/aSE9PWkmJmEhPT1hOmZOZShpLGEsZixwLFlkdCx2KX12YXIgZE5lPTEsZ05lPTI7ZnVuY3Rpb24gcE5lKGksYSxmLHApe3ZhciB2PWYubGVuZ3RoLG09dixiPSFwO2lmKGk9PW51bGwpcmV0dXJuIW07Zm9yKGk9T2JqZWN0KGkpO3YtLTspe3ZhciBFPWZbdl07aWYoYiYmRVsyXT9FWzFdIT09aVtFWzBdXTohKEVbMF1pbiBpKSlyZXR1cm4hMX1mb3IoOysrdjxtOyl7RT1mW3ZdO3ZhciBfPUVbMF0sTD1pW19dLE49RVsxXTtpZihiJiZFWzJdKXtpZihMPT09dm9pZCAwJiYhKF8gaW4gaSkpcmV0dXJuITF9ZWxzZXt2YXIgQj1uZXcgdG07aWYocCl2YXIgaj1wKEwsTixfLGksYSxCKTtpZighKGo9PT12b2lkIDA/WWR0KE4sTCxkTmV8Z05lLHAsQik6aikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIExQdChpKXtyZXR1cm4gaT09PWkmJiFJYihpKX1mdW5jdGlvbiBiTmUoaSl7Zm9yKHZhciBhPU5iKGkpLGY9YS5sZW5ndGg7Zi0tOyl7dmFyIHA9YVtmXSx2PWlbcF07YVtmXT1bcCx2LExQdCh2KV19cmV0dXJuIGF9ZnVuY3Rpb24gTVB0KGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmPT1udWxsPyExOmZbaV09PT1hJiYoYSE9PXZvaWQgMHx8aSBpbiBPYmplY3QoZikpfX1mdW5jdGlvbiB2TmUoaSl7dmFyIGE9Yk5lKGkpO3JldHVybiBhLmxlbmd0aD09MSYmYVswXVsyXT9NUHQoYVswXVswXSxhWzBdWzFdKTpmdW5jdGlvbihmKXtyZXR1cm4gZj09PWl8fHBOZShmLGksYSl9fWZ1bmN0aW9uIHdOZShpLGEpe3JldHVybiBpIT1udWxsJiZhIGluIE9iamVjdChpKX1mdW5jdGlvbiBJUHQoaSxhLGYpe2E9ZUsoYSxpKTtmb3IodmFyIHA9LTEsdj1hLmxlbmd0aCxtPSExOysrcDx2Oyl7dmFyIGI9b1AoYVtwXSk7aWYoIShtPWkhPW51bGwmJmYoaSxiKSkpYnJlYWs7aT1pW2JdfXJldHVybiBtfHwrK3AhPXY/bToodj1pPT1udWxsPzA6aS5sZW5ndGgsISF2JiZaMXQodikmJnhXKGIsdikmJihNZihpKXx8RkEoaSkpKX1mdW5jdGlvbiBEUHQoaSxhKXtyZXR1cm4gaSE9bnVsbCYmSVB0KGksYSx3TmUpfXZhciBtTmU9MSx5TmU9MjtmdW5jdGlvbiB4TmUoaSxhKXtyZXR1cm4gSGR0KGkpJiZMUHQoYSk/TVB0KG9QKGkpLGEpOmZ1bmN0aW9uKGYpe3ZhciBwPWREZShmLGkpO3JldHVybiBwPT09dm9pZCAwJiZwPT09YT9EUHQoZixpKTpZZHQoYSxwLG1OZXx5TmUpfX1mdW5jdGlvbiBrTmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3ZvaWQgMDphW2ldfX1mdW5jdGlvbiBFTmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBuSyhhLGkpfX1mdW5jdGlvbiBUTmUoaSl7cmV0dXJuIEhkdChpKT9rTmUob1AoaSkpOkVOZShpKX1mdW5jdGlvbiBvayhpKXtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT1udWxsP3NUOnR5cGVvZiBpPT0ib2JqZWN0Ij9NZihpKT94TmUoaVswXSxpWzFdKTp2TmUoaSk6VE5lKGkpfWZ1bmN0aW9uIFhkdChpLGEpe3JldHVybiBpJiZZMXQoaSxhLE5iKX1mdW5jdGlvbiBDTmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZixwKXtpZihmPT1udWxsKXJldHVybiBmO2lmKCFlayhmKSlyZXR1cm4gaShmLHApO2Zvcih2YXIgdj1mLmxlbmd0aCxtPWE/djotMSxiPU9iamVjdChmKTsoYT9tLS06KyttPHYpJiZwKGJbbV0sbSxiKSE9PSExOyk7cmV0dXJuIGZ9fXZhciBfTmU9Q05lKFhkdCk7Y29uc3Qgc0s9X05lO3ZhciBTTmU9ZnVuY3Rpb24oKXtyZXR1cm4gSncuRGF0ZS5ub3coKX07Y29uc3QgT1B0PVNOZTt2YXIgTlB0PU9iamVjdC5wcm90b3R5cGUsQU5lPU5QdC5oYXNPd25Qcm9wZXJ0eSxMTmU9a1coZnVuY3Rpb24oaSxhKXtpPU9iamVjdChpKTt2YXIgZj0tMSxwPWEubGVuZ3RoLHY9cD4yP2FbMl06dm9pZCAwO2Zvcih2JiZZTihhWzBdLGFbMV0sdikmJihwPTEpOysrZjxwOylmb3IodmFyIG09YVtmXSxiPWlUKG0pLEU9LTEsXz1iLmxlbmd0aDsrK0U8Xzspe3ZhciBMPWJbRV0sTj1pW0xdOyhOPT09dm9pZCAwfHxOQShOLE5QdFtMXSkmJiFBTmUuY2FsbChpLEwpKSYmKGlbTF09bVtMXSl9cmV0dXJuIGl9KTtjb25zdCBKQT1MTmU7ZnVuY3Rpb24gTU5lKGksYSxmKXtmb3IodmFyIHA9LTEsdj1pPT1udWxsPzA6aS5sZW5ndGg7KytwPHY7KWlmKGYoYSxpW3BdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBhSyhpKXt2YXIgYT1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIGE/aVthLTFdOnZvaWQgMH1mdW5jdGlvbiBRZHQoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6c1R9ZnVuY3Rpb24gY3IoaSxhKXt2YXIgZj1NZihpKT9vUHQ6c0s7cmV0dXJuIGYoaSxRZHQoYSkpfWZ1bmN0aW9uIElOZShpLGEpe3ZhciBmPVtdO3JldHVybiBzSyhpLGZ1bmN0aW9uKHAsdixtKXthKHAsdixtKSYmZi5wdXNoKHApfSksZn1mdW5jdGlvbiBUNShpLGEpe3ZhciBmPU1mKGkpP2hQdDpJTmU7cmV0dXJuIGYoaSxvayhhKSl9ZnVuY3Rpb24gRE5lKGkpe3JldHVybiBmdW5jdGlvbihhLGYscCl7dmFyIHY9T2JqZWN0KGEpO2lmKCFlayhhKSl7dmFyIG09b2soZik7YT1OYihhKSxmPWZ1bmN0aW9uKEUpe3JldHVybiBtKHZbRV0sRSx2KX19dmFyIGI9aShhLGYscCk7cmV0dXJuIGI+LTE/dlttP2FbYl06Yl06dm9pZCAwfX12YXIgT05lPU1hdGgubWF4O2Z1bmN0aW9uIE5OZShpLGEsZil7dmFyIHA9aT09bnVsbD8wOmkubGVuZ3RoO2lmKCFwKXJldHVybi0xO3ZhciB2PWY9PW51bGw/MDpaSWUoZik7cmV0dXJuIHY8MCYmKHY9T05lKHArdiwwKSksY1B0KGksb2soYSksdil9dmFyIFBOZT1ETmUoTk5lKTtjb25zdCBaZHQ9UE5lO2Z1bmN0aW9uIFBQdChpLGEpe3ZhciBmPS0xLHA9ZWsoaSk/QXJyYXkoaS5sZW5ndGgpOltdO3JldHVybiBzSyhpLGZ1bmN0aW9uKHYsbSxiKXtwWysrZl09YSh2LG0sYil9KSxwfWZ1bmN0aW9uIE9mKGksYSl7dmFyIGY9TWYoaSk/UUE6UFB0O3JldHVybiBmKGksb2soYSkpfWZ1bmN0aW9uIEZOZShpLGEpe3JldHVybiBpPT1udWxsP2k6WTF0KGksUWR0KGEpLGlUKX1mdW5jdGlvbiBCTmUoaSxhKXtyZXR1cm4gaSYmWGR0KGksUWR0KGEpKX1mdW5jdGlvbiBSTmUoaSxhKXtyZXR1cm4gaT5hfXZhciBqTmU9T2JqZWN0LnByb3RvdHlwZSwkTmU9ak5lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHpOZShpLGEpe3JldHVybiBpIT1udWxsJiYkTmUuY2FsbChpLGEpfWZ1bmN0aW9uIHphKGksYSl7cmV0dXJuIGkhPW51bGwmJklQdChpLGEsek5lKX1mdW5jdGlvbiBxTmUoaSxhKXtyZXR1cm4gUUEoYSxmdW5jdGlvbihmKXtyZXR1cm4gaVtmXX0pfWZ1bmN0aW9uIEM1KGkpe3JldHVybiBpPT1udWxsP1tdOnFOZShpLE5iKGkpKX1mdW5jdGlvbiBYaChpKXtyZXR1cm4gaT09PXZvaWQgMH1mdW5jdGlvbiBGUHQoaSxhKXtyZXR1cm4gaTxhfWZ1bmN0aW9uIG9LKGksYSl7dmFyIGY9e307cmV0dXJuIGE9b2soYSksWGR0KGksZnVuY3Rpb24ocCx2LG0pe3BXKGYsdixhKHAsdixtKSl9KSxmfWZ1bmN0aW9uIEpkdChpLGEsZil7Zm9yKHZhciBwPS0xLHY9aS5sZW5ndGg7KytwPHY7KXt2YXIgbT1pW3BdLGI9YShtKTtpZihiIT1udWxsJiYoRT09PXZvaWQgMD9iPT09YiYmIXBUKGIpOmYoYixFKSkpdmFyIEU9YixfPW19cmV0dXJuIF99ZnVuY3Rpb24gYlQoaSl7cmV0dXJuIGkmJmkubGVuZ3RoP0pkdChpLHNULFJOZSk6dm9pZCAwfWZ1bmN0aW9uIGxQKGkpe3JldHVybiBpJiZpLmxlbmd0aD9KZHQoaSxzVCxGUHQpOnZvaWQgMH1mdW5jdGlvbiB0MHQoaSxhKXtyZXR1cm4gaSYmaS5sZW5ndGg/SmR0KGksb2soYSksRlB0KTp2b2lkIDB9ZnVuY3Rpb24gSE5lKGksYSxmLHApe2lmKCFJYihpKSlyZXR1cm4gaTthPWVLKGEsaSk7Zm9yKHZhciB2PS0xLG09YS5sZW5ndGgsYj1tLTEsRT1pO0UhPW51bGwmJisrdjxtOyl7dmFyIF89b1AoYVt2XSksTD1mO2lmKF89PT0iX19wcm90b19fInx8Xz09PSJjb25zdHJ1Y3RvciJ8fF89PT0icHJvdG90eXBlIilyZXR1cm4gaTtpZih2IT1iKXt2YXIgTj1FW19dO0w9cD9wKE4sXyxFKTp2b2lkIDAsTD09PXZvaWQgMCYmKEw9SWIoTik/Tjp4VyhhW3YrMV0pP1tdOnt9KX15VyhFLF8sTCksRT1FW19dfXJldHVybiBpfWZ1bmN0aW9uIEdOZShpLGEsZil7Zm9yKHZhciBwPS0xLHY9YS5sZW5ndGgsbT17fTsrK3A8djspe3ZhciBiPWFbcF0sRT1uSyhpLGIpO2YoRSxiKSYmSE5lKG0sZUsoYixpKSxFKX1yZXR1cm4gbX1mdW5jdGlvbiBWTmUoaSxhKXt2YXIgZj1pLmxlbmd0aDtmb3IoaS5zb3J0KGEpO2YtLTspaVtmXT1pW2ZdLnZhbHVlO3JldHVybiBpfWZ1bmN0aW9uIFVOZShpLGEpe2lmKGkhPT1hKXt2YXIgZj1pIT09dm9pZCAwLHA9aT09PW51bGwsdj1pPT09aSxtPXBUKGkpLGI9YSE9PXZvaWQgMCxFPWE9PT1udWxsLF89YT09PWEsTD1wVChhKTtpZighRSYmIUwmJiFtJiZpPmF8fG0mJmImJl8mJiFFJiYhTHx8cCYmYiYmX3x8IWYmJl98fCF2KXJldHVybiAxO2lmKCFwJiYhbSYmIUwmJmk8YXx8TCYmZiYmdiYmIXAmJiFtfHxFJiZmJiZ2fHwhYiYmdnx8IV8pcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gV05lKGksYSxmKXtmb3IodmFyIHA9LTEsdj1pLmNyaXRlcmlhLG09YS5jcml0ZXJpYSxiPXYubGVuZ3RoLEU9Zi5sZW5ndGg7KytwPGI7KXt2YXIgXz1VTmUodltwXSxtW3BdKTtpZihfKXtpZihwPj1FKXJldHVybiBfO3ZhciBMPWZbcF07cmV0dXJuIF8qKEw9PSJkZXNjIj8tMToxKX19cmV0dXJuIGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiBLTmUoaSxhLGYpe2EubGVuZ3RoP2E9UUEoYSxmdW5jdGlvbihtKXtyZXR1cm4gTWYobSk/ZnVuY3Rpb24oYil7cmV0dXJuIG5LKGIsbS5sZW5ndGg9PT0xP21bMF06bSl9Om19KTphPVtzVF07dmFyIHA9LTE7YT1RQShhLHdXKG9rKSk7dmFyIHY9UFB0KGksZnVuY3Rpb24obSxiLEUpe3ZhciBfPVFBKGEsZnVuY3Rpb24oTCl7cmV0dXJuIEwobSl9KTtyZXR1cm57Y3JpdGVyaWE6XyxpbmRleDorK3AsdmFsdWU6bX19KTtyZXR1cm4gVk5lKHYsZnVuY3Rpb24obSxiKXtyZXR1cm4gV05lKG0sYixmKX0pfWZ1bmN0aW9uIFlOZShpLGEpe3JldHVybiBHTmUoaSxhLGZ1bmN0aW9uKGYscCl7cmV0dXJuIERQdChpLHApfSl9dmFyIFhOZT1wRGUoZnVuY3Rpb24oaSxhKXtyZXR1cm4gaT09bnVsbD97fTpZTmUoaSxhKX0pO2NvbnN0IGhQPVhOZTt2YXIgUU5lPU1hdGguY2VpbCxaTmU9TWF0aC5tYXg7ZnVuY3Rpb24gSk5lKGksYSxmLHApe2Zvcih2YXIgdj0tMSxtPVpOZShRTmUoKGEtaSkvKGZ8fDEpKSwwKSxiPUFycmF5KG0pO20tLTspYltwP206Kyt2XT1pLGkrPWY7cmV0dXJuIGJ9ZnVuY3Rpb24gdFBlKGkpe3JldHVybiBmdW5jdGlvbihhLGYscCl7cmV0dXJuIHAmJnR5cGVvZiBwIT0ibnVtYmVyIiYmWU4oYSxmLHApJiYoZj1wPXZvaWQgMCksYT10SyhhKSxmPT09dm9pZCAwPyhmPWEsYT0wKTpmPXRLKGYpLHA9cD09PXZvaWQgMD9hPGY/MTotMTp0SyhwKSxKTmUoYSxmLHAsaSl9fXZhciBlUGU9dFBlKCk7Y29uc3QgdlQ9ZVBlO2Z1bmN0aW9uIG5QZShpLGEsZixwLHYpe3JldHVybiB2KGksZnVuY3Rpb24obSxiLEUpe2Y9cD8ocD0hMSxtKTphKGYsbSxiLEUpfSksZn1mdW5jdGlvbiBmUChpLGEsZil7dmFyIHA9TWYoaSk/YkRlOm5QZSx2PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcChpLG9rKGEpLGYsdixzSyl9dmFyIHJQZT1rVyhmdW5jdGlvbihpLGEpe2lmKGk9PW51bGwpcmV0dXJuW107dmFyIGY9YS5sZW5ndGg7cmV0dXJuIGY+MSYmWU4oaSxhWzBdLGFbMV0pP2E9W106Zj4yJiZZTihhWzBdLGFbMV0sYVsyXSkmJihhPVthWzBdXSksS05lKGkscksoYSwxKSxbXSl9KTtjb25zdCBkUD1yUGU7dmFyIGlQZT0xLzAsc1BlPUdBJiYxL1dkdChuZXcgR0EoWywtMF0pKVsxXT09aVBlP2Z1bmN0aW9uKGkpe3JldHVybiBuZXcgR0EoaSl9OkpJZTtjb25zdCBhUGU9c1BlO3ZhciBvUGU9MjAwO2Z1bmN0aW9uIGNQZShpLGEsZil7dmFyIHA9LTEsdj1yRGUsbT1pLmxlbmd0aCxiPSEwLEU9W10sXz1FO2lmKGYpYj0hMSx2PU1OZTtlbHNlIGlmKG0+PW9QZSl7dmFyIEw9YT9udWxsOmFQZShpKTtpZihMKXJldHVybiBXZHQoTCk7Yj0hMSx2PUVQdCxfPW5ldyB1UH1lbHNlIF89YT9bXTpFO3Q6Zm9yKDsrK3A8bTspe3ZhciBOPWlbcF0sQj1hP2EoTik6TjtpZihOPWZ8fE4hPT0wP046MCxiJiZCPT09Qil7Zm9yKHZhciBqPV8ubGVuZ3RoO2otLTspaWYoX1tqXT09PUIpY29udGludWUgdDthJiZfLnB1c2goQiksRS5wdXNoKE4pfWVsc2UgdihfLEIsZil8fChfIT09RSYmXy5wdXNoKEIpLEUucHVzaChOKSl9cmV0dXJuIEV9dmFyIHVQZT1rVyhmdW5jdGlvbihpKXtyZXR1cm4gY1BlKHJLKGksMSxDRHQsITApKX0pO2NvbnN0IGxQZT11UGU7dmFyIGhQZT0wO2Z1bmN0aW9uIGNLKGkpe3ZhciBhPSsraFBlO3JldHVybiB1UHQoaSkrYX1mdW5jdGlvbiBmUGUoaSxhLGYpe2Zvcih2YXIgcD0tMSx2PWkubGVuZ3RoLG09YS5sZW5ndGgsYj17fTsrK3A8djspe3ZhciBFPXA8bT9hW3BdOnZvaWQgMDtmKGIsaVtwXSxFKX1yZXR1cm4gYn1mdW5jdGlvbiBkUGUoaSxhKXtyZXR1cm4gZlBlKGl8fFtdLGF8fFtdLHlXKX12YXIgZ1BlPSJcMCIsd1Q9IlwwIixCUHQ9IgEiO2NsYXNzIGExe2NvbnN0cnVjdG9yKGE9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9emEoYSwiZGlyZWN0ZWQiKT9hLmRpcmVjdGVkOiEwLHRoaXMuX2lzTXVsdGlncmFwaD16YShhLCJtdWx0aWdyYXBoIik/YS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9emEoYSwiY29tcG91bmQiKT9hLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49akEodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49akEodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW3dUXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgoYSl7cmV0dXJuIHRoaXMuX2xhYmVsPWEsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKGEpe3JldHVybiBPQShhKXx8KGE9akEoYSkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1hLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiBOYih0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBhPXRoaXM7cmV0dXJuIFQ1KHRoaXMubm9kZXMoKSxmdW5jdGlvbihmKXtyZXR1cm4gdFAoYS5faW5bZl0pfSl9c2lua3MoKXt2YXIgYT10aGlzO3JldHVybiBUNSh0aGlzLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIHRQKGEuX291dFtmXSl9KX1zZXROb2RlcyhhLGYpe3ZhciBwPWFyZ3VtZW50cyx2PXRoaXM7cmV0dXJuIGNyKGEsZnVuY3Rpb24obSl7cC5sZW5ndGg+MT92LnNldE5vZGUobSxmKTp2LnNldE5vZGUobSl9KSx0aGlzfXNldE5vZGUoYSxmKXtyZXR1cm4gemEodGhpcy5fbm9kZXMsYSk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW2FdPWYpLHRoaXMpOih0aGlzLl9ub2Rlc1thXT1hcmd1bWVudHMubGVuZ3RoPjE/Zjp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4oYSksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFthXT13VCx0aGlzLl9jaGlsZHJlblthXT17fSx0aGlzLl9jaGlsZHJlblt3VF1bYV09ITApLHRoaXMuX2luW2FdPXt9LHRoaXMuX3ByZWRzW2FdPXt9LHRoaXMuX291dFthXT17fSx0aGlzLl9zdWNzW2FdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfW5vZGUoYSl7cmV0dXJuIHRoaXMuX25vZGVzW2FdfWhhc05vZGUoYSl7cmV0dXJuIHphKHRoaXMuX25vZGVzLGEpfXJlbW92ZU5vZGUoYSl7dmFyIGY9dGhpcztpZih6YSh0aGlzLl9ub2RlcyxhKSl7dmFyIHA9ZnVuY3Rpb24odil7Zi5yZW1vdmVFZGdlKGYuX2VkZ2VPYmpzW3ZdKX07ZGVsZXRlIHRoaXMuX25vZGVzW2FdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKSxkZWxldGUgdGhpcy5fcGFyZW50W2FdLGNyKHRoaXMuY2hpbGRyZW4oYSksZnVuY3Rpb24odil7Zi5zZXRQYXJlbnQodil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bYV0pLGNyKE5iKHRoaXMuX2luW2FdKSxwKSxkZWxldGUgdGhpcy5faW5bYV0sZGVsZXRlIHRoaXMuX3ByZWRzW2FdLGNyKE5iKHRoaXMuX291dFthXSkscCksZGVsZXRlIHRoaXMuX291dFthXSxkZWxldGUgdGhpcy5fc3Vjc1thXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQoYSxmKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoWGgoZikpZj13VDtlbHNle2YrPSIiO2Zvcih2YXIgcD1mOyFYaChwKTtwPXRoaXMucGFyZW50KHApKWlmKHA9PT1hKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK2YrIiBhcyBwYXJlbnQgb2YgIithKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUoZil9cmV0dXJuIHRoaXMuc2V0Tm9kZShhKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKSx0aGlzLl9wYXJlbnRbYV09Zix0aGlzLl9jaGlsZHJlbltmXVthXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2FdXVthXX1wYXJlbnQoYSl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGY9dGhpcy5fcGFyZW50W2FdO2lmKGYhPT13VClyZXR1cm4gZn19Y2hpbGRyZW4oYSl7aWYoWGgoYSkmJihhPXdUKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZj10aGlzLl9jaGlsZHJlblthXTtpZihmKXJldHVybiBOYihmKX1lbHNle2lmKGE9PT13VClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShhKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKGEpe3ZhciBmPXRoaXMuX3ByZWRzW2FdO2lmKGYpcmV0dXJuIE5iKGYpfXN1Y2Nlc3NvcnMoYSl7dmFyIGY9dGhpcy5fc3Vjc1thXTtpZihmKXJldHVybiBOYihmKX1uZWlnaGJvcnMoYSl7dmFyIGY9dGhpcy5wcmVkZWNlc3NvcnMoYSk7aWYoZilyZXR1cm4gbFBlKGYsdGhpcy5zdWNjZXNzb3JzKGEpKX1pc0xlYWYoYSl7dmFyIGY7cmV0dXJuIHRoaXMuaXNEaXJlY3RlZCgpP2Y9dGhpcy5zdWNjZXNzb3JzKGEpOmY9dGhpcy5uZWlnaGJvcnMoYSksZi5sZW5ndGg9PT0wfWZpbHRlck5vZGVzKGEpe3ZhciBmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTtmLnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHA9dGhpcztjcih0aGlzLl9ub2RlcyxmdW5jdGlvbihiLEUpe2EoRSkmJmYuc2V0Tm9kZShFLGIpfSksY3IodGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oYil7Zi5oYXNOb2RlKGIudikmJmYuaGFzTm9kZShiLncpJiZmLnNldEVkZ2UoYixwLmVkZ2UoYikpfSk7dmFyIHY9e307ZnVuY3Rpb24gbShiKXt2YXIgRT1wLnBhcmVudChiKTtyZXR1cm4gRT09PXZvaWQgMHx8Zi5oYXNOb2RlKEUpPyh2W2JdPUUsRSk6RSBpbiB2P3ZbRV06bShFKX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmY3IoZi5ub2RlcygpLGZ1bmN0aW9uKGIpe2Yuc2V0UGFyZW50KGIsbShiKSl9KSxmfXNldERlZmF1bHRFZGdlTGFiZWwoYSl7cmV0dXJuIE9BKGEpfHwoYT1qQShhKSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPWEsdGhpc31lZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fWVkZ2VzKCl7cmV0dXJuIEM1KHRoaXMuX2VkZ2VPYmpzKX1zZXRQYXRoKGEsZil7dmFyIHA9dGhpcyx2PWFyZ3VtZW50cztyZXR1cm4gZlAoYSxmdW5jdGlvbihtLGIpe3JldHVybiB2Lmxlbmd0aD4xP3Auc2V0RWRnZShtLGIsZik6cC5zZXRFZGdlKG0sYiksYn0pLHRoaXN9c2V0RWRnZSgpe3ZhciBhLGYscCx2LG09ITEsYj1hcmd1bWVudHNbMF07dHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCYmInYiaW4gYj8oYT1iLnYsZj1iLncscD1iLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJih2PWFyZ3VtZW50c1sxXSxtPSEwKSk6KGE9YixmPWFyZ3VtZW50c1sxXSxwPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJih2PWFyZ3VtZW50c1syXSxtPSEwKSksYT0iIithLGY9IiIrZixYaChwKXx8KHA9IiIrcCk7dmFyIEU9Z1AodGhpcy5faXNEaXJlY3RlZCxhLGYscCk7aWYoemEodGhpcy5fZWRnZUxhYmVscyxFKSlyZXR1cm4gbSYmKHRoaXMuX2VkZ2VMYWJlbHNbRV09diksdGhpcztpZighWGgocCkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGEpLHRoaXMuc2V0Tm9kZShmKSx0aGlzLl9lZGdlTGFiZWxzW0VdPW0/djp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oYSxmLHApO3ZhciBfPXBQZSh0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gYT1fLnYsZj1fLncsT2JqZWN0LmZyZWV6ZShfKSx0aGlzLl9lZGdlT2Jqc1tFXT1fLFJQdCh0aGlzLl9wcmVkc1tmXSxhKSxSUHQodGhpcy5fc3Vjc1thXSxmKSx0aGlzLl9pbltmXVtFXT1fLHRoaXMuX291dFthXVtFXT1fLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShhLGYscCl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD09PTE/ZTB0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpnUCh0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1t2XX1oYXNFZGdlKGEsZixwKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPT09MT9lMHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmdQKHRoaXMuX2lzRGlyZWN0ZWQsYSxmLHApO3JldHVybiB6YSh0aGlzLl9lZGdlTGFiZWxzLHYpfXJlbW92ZUVkZ2UoYSxmLHApe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg9PT0xP2UwdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6Z1AodGhpcy5faXNEaXJlY3RlZCxhLGYscCksbT10aGlzLl9lZGdlT2Jqc1t2XTtyZXR1cm4gbSYmKGE9bS52LGY9bS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3ZdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1t2XSxqUHQodGhpcy5fcHJlZHNbZl0sYSksalB0KHRoaXMuX3N1Y3NbYV0sZiksZGVsZXRlIHRoaXMuX2luW2ZdW3ZdLGRlbGV0ZSB0aGlzLl9vdXRbYV1bdl0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhhLGYpe3ZhciBwPXRoaXMuX2luW2FdO2lmKHApe3ZhciB2PUM1KHApO3JldHVybiBmP1Q1KHYsZnVuY3Rpb24obSl7cmV0dXJuIG0udj09PWZ9KTp2fX1vdXRFZGdlcyhhLGYpe3ZhciBwPXRoaXMuX291dFthXTtpZihwKXt2YXIgdj1DNShwKTtyZXR1cm4gZj9UNSh2LGZ1bmN0aW9uKG0pe3JldHVybiBtLnc9PT1mfSk6dn19bm9kZUVkZ2VzKGEsZil7dmFyIHA9dGhpcy5pbkVkZ2VzKGEsZik7aWYocClyZXR1cm4gcC5jb25jYXQodGhpcy5vdXRFZGdlcyhhLGYpKX19YTEucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxhMS5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2Z1bmN0aW9uIFJQdChpLGEpe2lbYV0/aVthXSsrOmlbYV09MX1mdW5jdGlvbiBqUHQoaSxhKXstLWlbYV18fGRlbGV0ZSBpW2FdfWZ1bmN0aW9uIGdQKGksYSxmLHApe3ZhciB2PSIiK2EsbT0iIitmO2lmKCFpJiZ2Pm0pe3ZhciBiPXY7dj1tLG09Yn1yZXR1cm4gditCUHQrbStCUHQrKFhoKHApP2dQZTpwKX1mdW5jdGlvbiBwUGUoaSxhLGYscCl7dmFyIHY9IiIrYSxtPSIiK2Y7aWYoIWkmJnY+bSl7dmFyIGI9djt2PW0sbT1ifXZhciBFPXt2LHc6bX07cmV0dXJuIHAmJihFLm5hbWU9cCksRX1mdW5jdGlvbiBlMHQoaSxhKXtyZXR1cm4gZ1AoaSxhLnYsYS53LGEubmFtZSl9Y2xhc3MgYlBle2NvbnN0cnVjdG9yKCl7dmFyIGE9e307YS5fbmV4dD1hLl9wcmV2PWEsdGhpcy5fc2VudGluZWw9YX1kZXF1ZXVlKCl7dmFyIGE9dGhpcy5fc2VudGluZWwsZj1hLl9wcmV2O2lmKGYhPT1hKXJldHVybiAkUHQoZiksZn1lbnF1ZXVlKGEpe3ZhciBmPXRoaXMuX3NlbnRpbmVsO2EuX3ByZXYmJmEuX25leHQmJiRQdChhKSxhLl9uZXh0PWYuX25leHQsZi5fbmV4dC5fcHJldj1hLGYuX25leHQ9YSxhLl9wcmV2PWZ9dG9TdHJpbmcoKXtmb3IodmFyIGE9W10sZj10aGlzLl9zZW50aW5lbCxwPWYuX3ByZXY7cCE9PWY7KWEucHVzaChKU09OLnN0cmluZ2lmeShwLHZQZSkpLHA9cC5fcHJldjtyZXR1cm4iWyIrYS5qb2luKCIsICIpKyJdIn19ZnVuY3Rpb24gJFB0KGkpe2kuX3ByZXYuX25leHQ9aS5fbmV4dCxpLl9uZXh0Ll9wcmV2PWkuX3ByZXYsZGVsZXRlIGkuX25leHQsZGVsZXRlIGkuX3ByZXZ9ZnVuY3Rpb24gdlBlKGksYSl7aWYoaSE9PSJfbmV4dCImJmkhPT0iX3ByZXYiKXJldHVybiBhfXZhciB3UGU9akEoMSk7ZnVuY3Rpb24gbVBlKGksYSl7aWYoaS5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgZj14UGUoaSxhfHx3UGUpLHA9eVBlKGYuZ3JhcGgsZi5idWNrZXRzLGYuemVyb0lkeCk7cmV0dXJuIFpBKE9mKHAsZnVuY3Rpb24odil7cmV0dXJuIGkub3V0RWRnZXModi52LHYudyl9KSl9ZnVuY3Rpb24geVBlKGksYSxmKXtmb3IodmFyIHA9W10sdj1hW2EubGVuZ3RoLTFdLG09YVswXSxiO2kubm9kZUNvdW50KCk7KXtmb3IoO2I9bS5kZXF1ZXVlKCk7KW4wdChpLGEsZixiKTtmb3IoO2I9di5kZXF1ZXVlKCk7KW4wdChpLGEsZixiKTtpZihpLm5vZGVDb3VudCgpKXtmb3IodmFyIEU9YS5sZW5ndGgtMjtFPjA7LS1FKWlmKGI9YVtFXS5kZXF1ZXVlKCksYil7cD1wLmNvbmNhdChuMHQoaSxhLGYsYiwhMCkpO2JyZWFrfX19cmV0dXJuIHB9ZnVuY3Rpb24gbjB0KGksYSxmLHAsdil7dmFyIG09dj9bXTp2b2lkIDA7cmV0dXJuIGNyKGkuaW5FZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWkubm9kZShiLnYpO3YmJm0ucHVzaCh7djpiLnYsdzpiLnd9KSxfLm91dC09RSxyMHQoYSxmLF8pfSksY3IoaS5vdXRFZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWIudyxMPWkubm9kZShfKTtMLmluLT1FLHIwdChhLGYsTCl9KSxpLnJlbW92ZU5vZGUocC52KSxtfWZ1bmN0aW9uIHhQZShpLGEpe3ZhciBmPW5ldyBhMSxwPTAsdj0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihFKXtmLnNldE5vZGUoRSx7djpFLGluOjAsb3V0OjB9KX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihFKXt2YXIgXz1mLmVkZ2UoRS52LEUudyl8fDAsTD1hKEUpLE49XytMO2Yuc2V0RWRnZShFLnYsRS53LE4pLHY9TWF0aC5tYXgodixmLm5vZGUoRS52KS5vdXQrPUwpLHA9TWF0aC5tYXgocCxmLm5vZGUoRS53KS5pbis9TCl9KTt2YXIgbT12VCh2K3ArMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiUGV9KSxiPXArMTtyZXR1cm4gY3IoZi5ub2RlcygpLGZ1bmN0aW9uKEUpe3IwdChtLGIsZi5ub2RlKEUpKX0pLHtncmFwaDpmLGJ1Y2tldHM6bSx6ZXJvSWR4OmJ9fWZ1bmN0aW9uIHIwdChpLGEsZil7Zi5vdXQ/Zi5pbj9pW2Yub3V0LWYuaW4rYV0uZW5xdWV1ZShmKTppW2kubGVuZ3RoLTFdLmVucXVldWUoZik6aVswXS5lbnF1ZXVlKGYpfWZ1bmN0aW9uIGtQZShpKXt2YXIgYT1pLmdyYXBoKCkuYWN5Y2xpY2VyPT09ImdyZWVkeSI/bVBlKGksZihpKSk6RVBlKGkpO2NyKGEsZnVuY3Rpb24ocCl7dmFyIHY9aS5lZGdlKHApO2kucmVtb3ZlRWRnZShwKSx2LmZvcndhcmROYW1lPXAubmFtZSx2LnJldmVyc2VkPSEwLGkuc2V0RWRnZShwLncscC52LHYsY0soInJldiIpKX0pO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBwLmVkZ2Uodikud2VpZ2h0fX19ZnVuY3Rpb24gRVBlKGkpe3ZhciBhPVtdLGY9e30scD17fTtmdW5jdGlvbiB2KG0pe3phKHAsbSl8fChwW21dPSEwLGZbbV09ITAsY3IoaS5vdXRFZGdlcyhtKSxmdW5jdGlvbihiKXt6YShmLGIudyk/YS5wdXNoKGIpOnYoYi53KX0pLGRlbGV0ZSBmW21dKX1yZXR1cm4gY3IoaS5ub2RlcygpLHYpLGF9ZnVuY3Rpb24gVFBlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoZi5yZXZlcnNlZCl7aS5yZW1vdmVFZGdlKGEpO3ZhciBwPWYuZm9yd2FyZE5hbWU7ZGVsZXRlIGYucmV2ZXJzZWQsZGVsZXRlIGYuZm9yd2FyZE5hbWUsaS5zZXRFZGdlKGEudyxhLnYsZixwKX19KX1mdW5jdGlvbiB0TChpLGEsZixwKXt2YXIgdjtkbyB2PWNLKHApO3doaWxlKGkuaGFzTm9kZSh2KSk7cmV0dXJuIGYuZHVtbXk9YSxpLnNldE5vZGUodixmKSx2fWZ1bmN0aW9uIENQZShpKXt2YXIgYT1uZXcgYTEoKS5zZXRHcmFwaChpLmdyYXBoKCkpO3JldHVybiBjcihpLm5vZGVzKCksZnVuY3Rpb24oZil7YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1hLmVkZ2UoZi52LGYudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sdj1pLmVkZ2UoZik7YS5zZXRFZGdlKGYudixmLncse3dlaWdodDpwLndlaWdodCt2LndlaWdodCxtaW5sZW46TWF0aC5tYXgocC5taW5sZW4sdi5taW5sZW4pfSl9KSxhfWZ1bmN0aW9uIHpQdChpKXt2YXIgYT1uZXcgYTEoe211bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihmKXtpLmNoaWxkcmVuKGYpLmxlbmd0aHx8YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXthLnNldEVkZ2UoZixpLmVkZ2UoZikpfSksYX1mdW5jdGlvbiBxUHQoaSxhKXt2YXIgZj1pLngscD1pLnksdj1hLngtZixtPWEueS1wLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtpZighdiYmIW0pdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTt2YXIgXyxMO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHYpKkU/KG08MCYmKEU9LUUpLF89RSp2L20sTD1FKToodjwwJiYoYj0tYiksXz1iLEw9YiptL3YpLHt4OmYrXyx5OnArTH19ZnVuY3Rpb24gdUsoaSl7dmFyIGE9T2YodlQoR1B0KGkpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gY3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx2PXAucmFuaztYaCh2KXx8KGFbdl1bcC5vcmRlcl09Zil9KSxhfWZ1bmN0aW9uIF9QZShpKXt2YXIgYT1sUChPZihpLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIGkubm9kZShmKS5yYW5rfSkpO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7emEocCwicmFuayIpJiYocC5yYW5rLT1hKX0pfWZ1bmN0aW9uIFNQZShpKXt2YXIgYT1sUChPZihpLm5vZGVzKCksZnVuY3Rpb24obSl7cmV0dXJuIGkubm9kZShtKS5yYW5rfSkpLGY9W107Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKG0pe3ZhciBiPWkubm9kZShtKS5yYW5rLWE7ZltiXXx8KGZbYl09W10pLGZbYl0ucHVzaChtKX0pO3ZhciBwPTAsdj1pLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7Y3IoZixmdW5jdGlvbihtLGIpe1hoKG0pJiZiJXYhPT0wPy0tcDpwJiZjcihtLGZ1bmN0aW9uKEUpe2kubm9kZShFKS5yYW5rKz1wfSl9KX1mdW5jdGlvbiBIUHQoaSxhLGYscCl7dmFyIHY9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYodi5yYW5rPWYsdi5vcmRlcj1wKSx0TChpLCJib3JkZXIiLHYsYSl9ZnVuY3Rpb24gR1B0KGkpe3JldHVybiBiVChPZihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpLnJhbms7aWYoIVhoKGYpKXJldHVybiBmfSkpfWZ1bmN0aW9uIEFQZShpLGEpe3ZhciBmPXtsaHM6W10scmhzOltdfTtyZXR1cm4gY3IoaSxmdW5jdGlvbihwKXthKHApP2YubGhzLnB1c2gocCk6Zi5yaHMucHVzaChwKX0pLGZ9ZnVuY3Rpb24gTFBlKGksYSl7dmFyIGY9T1B0KCk7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtjb25zb2xlLmxvZyhpKyIgdGltZTogIisoT1B0KCktZikrIm1zIil9fWZ1bmN0aW9uIE1QZShpLGEpe3JldHVybiBhKCl9ZnVuY3Rpb24gSVBlKGkpe2Z1bmN0aW9uIGEoZil7dmFyIHA9aS5jaGlsZHJlbihmKSx2PWkubm9kZShmKTtpZihwLmxlbmd0aCYmY3IocCxhKSx6YSh2LCJtaW5SYW5rIikpe3YuYm9yZGVyTGVmdD1bXSx2LmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgbT12Lm1pblJhbmssYj12Lm1heFJhbmsrMTttPGI7KyttKVZQdChpLCJib3JkZXJMZWZ0IiwiX2JsIixmLHYsbSksVlB0KGksImJvcmRlclJpZ2h0IiwiX2JyIixmLHYsbSl9fWNyKGkuY2hpbGRyZW4oKSxhKX1mdW5jdGlvbiBWUHQoaSxhLGYscCx2LG0pe3ZhciBiPXt3aWR0aDowLGhlaWdodDowLHJhbms6bSxib3JkZXJUeXBlOmF9LEU9dlthXVttLTFdLF89dEwoaSwiYm9yZGVyIixiLGYpO3ZbYV1bbV09XyxpLnNldFBhcmVudChfLHApLEUmJmkuc2V0RWRnZShFLF8se3dlaWdodDoxfSl9ZnVuY3Rpb24gRFBlKGkpe3ZhciBhPWkuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGE9PT0ibHIifHxhPT09InJsIikmJlVQdChpKX1mdW5jdGlvbiBPUGUoaSl7dmFyIGE9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsoYT09PSJidCJ8fGE9PT0icmwiKSYmTlBlKGkpLChhPT09ImxyInx8YT09PSJybCIpJiYoUFBlKGkpLFVQdChpKSl9ZnVuY3Rpb24gVVB0KGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXtXUHQoaS5ub2RlKGEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXtXUHQoaS5lZGdlKGEpKX0pfWZ1bmN0aW9uIFdQdChpKXt2YXIgYT1pLndpZHRoO2kud2lkdGg9aS5oZWlnaHQsaS5oZWlnaHQ9YX1mdW5jdGlvbiBOUGUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe2kwdChpLm5vZGUoYSkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtjcihmLnBvaW50cyxpMHQpLHphKGYsInkiKSYmaTB0KGYpfSl9ZnVuY3Rpb24gaTB0KGkpe2kueT0taS55fWZ1bmN0aW9uIFBQZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7czB0KGkubm9kZShhKSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2NyKGYucG9pbnRzLHMwdCksemEoZiwieCIpJiZzMHQoZil9KX1mdW5jdGlvbiBzMHQoaSl7dmFyIGE9aS54O2kueD1pLnksaS55PWF9ZnVuY3Rpb24gRlBlKGkpe2kuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7QlBlKGksYSl9KX1mdW5jdGlvbiBCUGUoaSxhKXt2YXIgZj1hLnYscD1pLm5vZGUoZikucmFuayx2PWEudyxtPWkubm9kZSh2KS5yYW5rLGI9YS5uYW1lLEU9aS5lZGdlKGEpLF89RS5sYWJlbFJhbms7aWYobSE9PXArMSl7aS5yZW1vdmVFZGdlKGEpO3ZhciBMLE4sQjtmb3IoQj0wLCsrcDtwPG07KytCLCsrcClFLnBvaW50cz1bXSxOPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpFLGVkZ2VPYmo6YSxyYW5rOnB9LEw9dEwoaSwiZWRnZSIsTiwiX2QiKSxwPT09XyYmKE4ud2lkdGg9RS53aWR0aCxOLmhlaWdodD1FLmhlaWdodCxOLmR1bW15PSJlZGdlLWxhYmVsIixOLmxhYmVscG9zPUUubGFiZWxwb3MpLGkuc2V0RWRnZShmLEwse3dlaWdodDpFLndlaWdodH0sYiksQj09PTAmJmkuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKEwpLGY9TDtpLnNldEVkZ2UoZix2LHt3ZWlnaHQ6RS53ZWlnaHR9LGIpfX1mdW5jdGlvbiBSUGUoaSl7Y3IoaS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWYuZWRnZUxhYmVsLHY7Zm9yKGkuc2V0RWRnZShmLmVkZ2VPYmoscCk7Zi5kdW1teTspdj1pLnN1Y2Nlc3NvcnMoYSlbMF0saS5yZW1vdmVOb2RlKGEpLHAucG9pbnRzLnB1c2goe3g6Zi54LHk6Zi55fSksZi5kdW1teT09PSJlZGdlLWxhYmVsIiYmKHAueD1mLngscC55PWYueSxwLndpZHRoPWYud2lkdGgscC5oZWlnaHQ9Zi5oZWlnaHQpLGE9dixmPWkubm9kZShhKX0pfWZ1bmN0aW9uIGEwdChpKXt2YXIgYT17fTtmdW5jdGlvbiBmKHApe3ZhciB2PWkubm9kZShwKTtpZih6YShhLHApKXJldHVybiB2LnJhbms7YVtwXT0hMDt2YXIgbT1sUChPZihpLm91dEVkZ2VzKHApLGZ1bmN0aW9uKGIpe3JldHVybiBmKGIudyktaS5lZGdlKGIpLm1pbmxlbn0pKTtyZXR1cm4obT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWXx8bT09PXZvaWQgMHx8bT09PW51bGwpJiYobT0wKSx2LnJhbms9bX1jcihpLnNvdXJjZXMoKSxmKX1mdW5jdGlvbiBwUChpLGEpe3JldHVybiBpLm5vZGUoYS53KS5yYW5rLWkubm9kZShhLnYpLnJhbmstaS5lZGdlKGEpLm1pbmxlbn1mdW5jdGlvbiBLUHQoaSl7dmFyIGE9bmV3IGExKHtkaXJlY3RlZDohMX0pLGY9aS5ub2RlcygpWzBdLHA9aS5ub2RlQ291bnQoKTthLnNldE5vZGUoZix7fSk7Zm9yKHZhciB2LG07alBlKGEsaSk8cDspdj0kUGUoYSxpKSxtPWEuaGFzTm9kZSh2LnYpP3BQKGksdik6LXBQKGksdikselBlKGEsaSxtKTtyZXR1cm4gYX1mdW5jdGlvbiBqUGUoaSxhKXtmdW5jdGlvbiBmKHApe2NyKGEubm9kZUVkZ2VzKHApLGZ1bmN0aW9uKHYpe3ZhciBtPXYudixiPXA9PT1tP3YudzptOyFpLmhhc05vZGUoYikmJiFwUChhLHYpJiYoaS5zZXROb2RlKGIse30pLGkuc2V0RWRnZShwLGIse30pLGYoYikpfSl9cmV0dXJuIGNyKGkubm9kZXMoKSxmKSxpLm5vZGVDb3VudCgpfWZ1bmN0aW9uICRQZShpLGEpe3JldHVybiB0MHQoYS5lZGdlcygpLGZ1bmN0aW9uKGYpe2lmKGkuaGFzTm9kZShmLnYpIT09aS5oYXNOb2RlKGYudykpcmV0dXJuIHBQKGEsZil9KX1mdW5jdGlvbiB6UGUoaSxhLGYpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihwKXthLm5vZGUocCkucmFuays9Zn0pfWZ1bmN0aW9uIHFQZSgpe31xUGUucHJvdG90eXBlPW5ldyBFcnJvcjtmdW5jdGlvbiBZUHQoaSxhLGYpe01mKGEpfHwoYT1bYV0pO3ZhciBwPShpLmlzRGlyZWN0ZWQoKT9pLnN1Y2Nlc3NvcnM6aS5uZWlnaGJvcnMpLmJpbmQoaSksdj1bXSxtPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKGIpe2lmKCFpLmhhc05vZGUoYikpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrYik7WFB0KGksYixmPT09InBvc3QiLG0scCx2KX0pLHZ9ZnVuY3Rpb24gWFB0KGksYSxmLHAsdixtKXt6YShwLGEpfHwocFthXT0hMCxmfHxtLnB1c2goYSksY3IodihhKSxmdW5jdGlvbihiKXtYUHQoaSxiLGYscCx2LG0pfSksZiYmbS5wdXNoKGEpKX1mdW5jdGlvbiBIUGUoaSxhKXtyZXR1cm4gWVB0KGksYSwicG9zdCIpfWZ1bmN0aW9uIEdQZShpLGEpe3JldHVybiBZUHQoaSxhLCJwcmUiKX1tVC5pbml0TG93TGltVmFsdWVzPWMwdCxtVC5pbml0Q3V0VmFsdWVzPW8wdCxtVC5jYWxjQ3V0VmFsdWU9UVB0LG1ULmxlYXZlRWRnZT1KUHQsbVQuZW50ZXJFZGdlPXRGdCxtVC5leGNoYW5nZUVkZ2VzPWVGdDtmdW5jdGlvbiBtVChpKXtpPUNQZShpKSxhMHQoaSk7dmFyIGE9S1B0KGkpO2MwdChhKSxvMHQoYSxpKTtmb3IodmFyIGYscDtmPUpQdChhKTspcD10RnQoYSxpLGYpLGVGdChhLGksZixwKX1mdW5jdGlvbiBvMHQoaSxhKXt2YXIgZj1IUGUoaSxpLm5vZGVzKCkpO2Y9Zi5zbGljZSgwLGYubGVuZ3RoLTEpLGNyKGYsZnVuY3Rpb24ocCl7VlBlKGksYSxwKX0pfWZ1bmN0aW9uIFZQZShpLGEsZil7dmFyIHA9aS5ub2RlKGYpLHY9cC5wYXJlbnQ7aS5lZGdlKGYsdikuY3V0dmFsdWU9UVB0KGksYSxmKX1mdW5jdGlvbiBRUHQoaSxhLGYpe3ZhciBwPWkubm9kZShmKSx2PXAucGFyZW50LG09ITAsYj1hLmVkZ2UoZix2KSxFPTA7cmV0dXJuIGJ8fChtPSExLGI9YS5lZGdlKHYsZikpLEU9Yi53ZWlnaHQsY3IoYS5ub2RlRWRnZXMoZiksZnVuY3Rpb24oXyl7dmFyIEw9Xy52PT09ZixOPUw/Xy53Ol8udjtpZihOIT09dil7dmFyIEI9TD09PW0saj1hLmVkZ2UoXykud2VpZ2h0O2lmKEUrPUI/ajotaixXUGUoaSxmLE4pKXt2YXIgUj1pLmVkZ2UoZixOKS5jdXR2YWx1ZTtFKz1CPy1SOlJ9fX0pLEV9ZnVuY3Rpb24gYzB0KGksYSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoYT1pLm5vZGVzKClbMF0pLFpQdChpLHt9LDEsYSl9ZnVuY3Rpb24gWlB0KGksYSxmLHAsdil7dmFyIG09ZixiPWkubm9kZShwKTtyZXR1cm4gYVtwXT0hMCxjcihpLm5laWdoYm9ycyhwKSxmdW5jdGlvbihFKXt6YShhLEUpfHwoZj1aUHQoaSxhLGYsRSxwKSl9KSxiLmxvdz1tLGIubGltPWYrKyx2P2IucGFyZW50PXY6ZGVsZXRlIGIucGFyZW50LGZ9ZnVuY3Rpb24gSlB0KGkpe3JldHVybiBaZHQoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3JldHVybiBpLmVkZ2UoYSkuY3V0dmFsdWU8MH0pfWZ1bmN0aW9uIHRGdChpLGEsZil7dmFyIHA9Zi52LHY9Zi53O2EuaGFzRWRnZShwLHYpfHwocD1mLncsdj1mLnYpO3ZhciBtPWkubm9kZShwKSxiPWkubm9kZSh2KSxFPW0sXz0hMTttLmxpbT5iLmxpbSYmKEU9YixfPSEwKTt2YXIgTD1UNShhLmVkZ2VzKCksZnVuY3Rpb24oTil7cmV0dXJuIF89PT1uRnQoaSxpLm5vZGUoTi52KSxFKSYmXyE9PW5GdChpLGkubm9kZShOLncpLEUpfSk7cmV0dXJuIHQwdChMLGZ1bmN0aW9uKE4pe3JldHVybiBwUChhLE4pfSl9ZnVuY3Rpb24gZUZ0KGksYSxmLHApe3ZhciB2PWYudixtPWYudztpLnJlbW92ZUVkZ2UodixtKSxpLnNldEVkZ2UocC52LHAudyx7fSksYzB0KGkpLG8wdChpLGEpLFVQZShpLGEpfWZ1bmN0aW9uIFVQZShpLGEpe3ZhciBmPVpkdChpLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIWEubm9kZSh2KS5wYXJlbnR9KSxwPUdQZShpLGYpO3A9cC5zbGljZSgxKSxjcihwLGZ1bmN0aW9uKHYpe3ZhciBtPWkubm9kZSh2KS5wYXJlbnQsYj1hLmVkZ2UodixtKSxFPSExO2J8fChiPWEuZWRnZShtLHYpLEU9ITApLGEubm9kZSh2KS5yYW5rPWEubm9kZShtKS5yYW5rKyhFP2IubWlubGVuOi1iLm1pbmxlbil9KX1mdW5jdGlvbiBXUGUoaSxhLGYpe3JldHVybiBpLmhhc0VkZ2UoYSxmKX1mdW5jdGlvbiBuRnQoaSxhLGYpe3JldHVybiBmLmxvdzw9YS5saW0mJmEubGltPD1mLmxpbX1mdW5jdGlvbiBLUGUoaSl7c3dpdGNoKGkuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpyRnQoaSk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjpYUGUoaSk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOllQZShpKTticmVhaztkZWZhdWx0OnJGdChpKX19dmFyIFlQZT1hMHQ7ZnVuY3Rpb24gWFBlKGkpe2EwdChpKSxLUHQoaSl9ZnVuY3Rpb24gckZ0KGkpe21UKGkpfWZ1bmN0aW9uIFFQZShpKXt2YXIgYT10TChpLCJyb290Iix7fSwiX3Jvb3QiKSxmPVpQZShpKSxwPWJUKEM1KGYpKS0xLHY9MipwKzE7aS5ncmFwaCgpLm5lc3RpbmdSb290PWEsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGIpe2kuZWRnZShiKS5taW5sZW4qPXZ9KTt2YXIgbT1KUGUoaSkrMTtjcihpLmNoaWxkcmVuKCksZnVuY3Rpb24oYil7aUZ0KGksYSx2LG0scCxmLGIpfSksaS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPXZ9ZnVuY3Rpb24gaUZ0KGksYSxmLHAsdixtLGIpe3ZhciBFPWkuY2hpbGRyZW4oYik7aWYoIUUubGVuZ3RoKXtiIT09YSYmaS5zZXRFZGdlKGEsYix7d2VpZ2h0OjAsbWlubGVuOmZ9KTtyZXR1cm59dmFyIF89SFB0KGksIl9idCIpLEw9SFB0KGksIl9iYiIpLE49aS5ub2RlKGIpO2kuc2V0UGFyZW50KF8sYiksTi5ib3JkZXJUb3A9XyxpLnNldFBhcmVudChMLGIpLE4uYm9yZGVyQm90dG9tPUwsY3IoRSxmdW5jdGlvbihCKXtpRnQoaSxhLGYscCx2LG0sQik7dmFyIGo9aS5ub2RlKEIpLFI9ai5ib3JkZXJUb3A/ai5ib3JkZXJUb3A6Qix6PWouYm9yZGVyQm90dG9tP2ouYm9yZGVyQm90dG9tOkIsSz1qLmJvcmRlclRvcD9wOjIqcCxpdD1SIT09ej8xOnYtbVtiXSsxO2kuc2V0RWRnZShfLFIse3dlaWdodDpLLG1pbmxlbjppdCxuZXN0aW5nRWRnZTohMH0pLGkuc2V0RWRnZSh6LEwse3dlaWdodDpLLG1pbmxlbjppdCxuZXN0aW5nRWRnZTohMH0pfSksaS5wYXJlbnQoYil8fGkuc2V0RWRnZShhLF8se3dlaWdodDowLG1pbmxlbjp2K21bYl19KX1mdW5jdGlvbiBaUGUoaSl7dmFyIGE9e307ZnVuY3Rpb24gZihwLHYpe3ZhciBtPWkuY2hpbGRyZW4ocCk7bSYmbS5sZW5ndGgmJmNyKG0sZnVuY3Rpb24oYil7ZihiLHYrMSl9KSxhW3BdPXZ9cmV0dXJuIGNyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihwKXtmKHAsMSl9KSxhfWZ1bmN0aW9uIEpQZShpKXtyZXR1cm4gZlAoaS5lZGdlcygpLGZ1bmN0aW9uKGEsZil7cmV0dXJuIGEraS5lZGdlKGYpLndlaWdodH0sMCl9ZnVuY3Rpb24gdEZlKGkpe3ZhciBhPWkuZ3JhcGgoKTtpLnJlbW92ZU5vZGUoYS5uZXN0aW5nUm9vdCksZGVsZXRlIGEubmVzdGluZ1Jvb3QsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkuZWRnZShmKTtwLm5lc3RpbmdFZGdlJiZpLnJlbW92ZUVkZ2UoZil9KX1mdW5jdGlvbiBlRmUoaSxhLGYpe3ZhciBwPXt9LHY7Y3IoZixmdW5jdGlvbihtKXtmb3IodmFyIGI9aS5wYXJlbnQobSksRSxfO2I7KXtpZihFPWkucGFyZW50KGIpLEU/KF89cFtFXSxwW0VdPWIpOihfPXYsdj1iKSxfJiZfIT09Yil7YS5zZXRFZGdlKF8sYik7cmV0dXJufWI9RX19KX1mdW5jdGlvbiBuRmUoaSxhLGYpe3ZhciBwPXJGZShpKSx2PW5ldyBhMSh7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpwfSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihtKXtyZXR1cm4gaS5ub2RlKG0pfSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihtKXt2YXIgYj1pLm5vZGUobSksRT1pLnBhcmVudChtKTsoYi5yYW5rPT09YXx8Yi5taW5SYW5rPD1hJiZhPD1iLm1heFJhbmspJiYodi5zZXROb2RlKG0pLHYuc2V0UGFyZW50KG0sRXx8cCksY3IoaVtmXShtKSxmdW5jdGlvbihfKXt2YXIgTD1fLnY9PT1tP18udzpfLnYsTj12LmVkZ2UoTCxtKSxCPVhoKE4pPzA6Ti53ZWlnaHQ7di5zZXRFZGdlKEwsbSx7d2VpZ2h0OmkuZWRnZShfKS53ZWlnaHQrQn0pfSksemEoYiwibWluUmFuayIpJiZ2LnNldE5vZGUobSx7Ym9yZGVyTGVmdDpiLmJvcmRlckxlZnRbYV0sYm9yZGVyUmlnaHQ6Yi5ib3JkZXJSaWdodFthXX0pKX0pLHZ9ZnVuY3Rpb24gckZlKGkpe2Zvcih2YXIgYTtpLmhhc05vZGUoYT1jSygiX3Jvb3QiKSk7KTtyZXR1cm4gYX1mdW5jdGlvbiBpRmUoaSxhKXtmb3IodmFyIGY9MCxwPTE7cDxhLmxlbmd0aDsrK3ApZis9c0ZlKGksYVtwLTFdLGFbcF0pO3JldHVybiBmfWZ1bmN0aW9uIHNGZShpLGEsZil7Zm9yKHZhciBwPWRQZShmLE9mKGYsZnVuY3Rpb24oTCxOKXtyZXR1cm4gTn0pKSx2PVpBKE9mKGEsZnVuY3Rpb24oTCl7cmV0dXJuIGRQKE9mKGkub3V0RWRnZXMoTCksZnVuY3Rpb24oTil7cmV0dXJue3BvczpwW04ud10sd2VpZ2h0OmkuZWRnZShOKS53ZWlnaHR9fSksInBvcyIpfSkpLG09MTttPGYubGVuZ3RoOyltPDw9MTt2YXIgYj0yKm0tMTttLT0xO3ZhciBFPU9mKG5ldyBBcnJheShiKSxmdW5jdGlvbigpe3JldHVybiAwfSksXz0wO3JldHVybiBjcih2LmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIE49TC5wb3MrbTtFW05dKz1MLndlaWdodDtmb3IodmFyIEI9MDtOPjA7KU4lMiYmKEIrPUVbTisxXSksTj1OLTE+PjEsRVtOXSs9TC53ZWlnaHQ7Xys9TC53ZWlnaHQqQn0pKSxffWZ1bmN0aW9uIGFGZShpKXt2YXIgYT17fSxmPVQ1KGkubm9kZXMoKSxmdW5jdGlvbihFKXtyZXR1cm4haS5jaGlsZHJlbihFKS5sZW5ndGh9KSxwPWJUKE9mKGYsZnVuY3Rpb24oRSl7cmV0dXJuIGkubm9kZShFKS5yYW5rfSkpLHY9T2YodlQocCsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gbShFKXtpZighemEoYSxFKSl7YVtFXT0hMDt2YXIgXz1pLm5vZGUoRSk7dltfLnJhbmtdLnB1c2goRSksY3IoaS5zdWNjZXNzb3JzKEUpLG0pfX12YXIgYj1kUChmLGZ1bmN0aW9uKEUpe3JldHVybiBpLm5vZGUoRSkucmFua30pO3JldHVybiBjcihiLG0pLHZ9ZnVuY3Rpb24gb0ZlKGksYSl7cmV0dXJuIE9mKGEsZnVuY3Rpb24oZil7dmFyIHA9aS5pbkVkZ2VzKGYpO2lmKHAubGVuZ3RoKXt2YXIgdj1mUChwLGZ1bmN0aW9uKG0sYil7dmFyIEU9aS5lZGdlKGIpLF89aS5ub2RlKGIudik7cmV0dXJue3N1bTptLnN1bStFLndlaWdodCpfLm9yZGVyLHdlaWdodDptLndlaWdodCtFLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmYsYmFyeWNlbnRlcjp2LnN1bS92LndlaWdodCx3ZWlnaHQ6di53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6Zn19KX1mdW5jdGlvbiBjRmUoaSxhKXt2YXIgZj17fTtjcihpLGZ1bmN0aW9uKHYsbSl7dmFyIGI9Zlt2LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdi52XSxpOm19O1hoKHYuYmFyeWNlbnRlcil8fChiLmJhcnljZW50ZXI9di5iYXJ5Y2VudGVyLGIud2VpZ2h0PXYud2VpZ2h0KX0pLGNyKGEuZWRnZXMoKSxmdW5jdGlvbih2KXt2YXIgbT1mW3Yudl0sYj1mW3Yud107IVhoKG0pJiYhWGgoYikmJihiLmluZGVncmVlKyssbS5vdXQucHVzaChmW3Yud10pKX0pO3ZhciBwPVQ1KGYsZnVuY3Rpb24odil7cmV0dXJuIXYuaW5kZWdyZWV9KTtyZXR1cm4gdUZlKHApfWZ1bmN0aW9uIHVGZShpKXt2YXIgYT1bXTtmdW5jdGlvbiBmKG0pe3JldHVybiBmdW5jdGlvbihiKXtiLm1lcmdlZHx8KFhoKGIuYmFyeWNlbnRlcil8fFhoKG0uYmFyeWNlbnRlcil8fGIuYmFyeWNlbnRlcj49bS5iYXJ5Y2VudGVyKSYmbEZlKG0sYil9fWZ1bmN0aW9uIHAobSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2IuaW4ucHVzaChtKSwtLWIuaW5kZWdyZWU9PT0wJiZpLnB1c2goYil9fWZvcig7aS5sZW5ndGg7KXt2YXIgdj1pLnBvcCgpO2EucHVzaCh2KSxjcih2LmluLnJldmVyc2UoKSxmKHYpKSxjcih2Lm91dCxwKHYpKX1yZXR1cm4gT2YoVDUoYSxmdW5jdGlvbihtKXtyZXR1cm4hbS5tZXJnZWR9KSxmdW5jdGlvbihtKXtyZXR1cm4gaFAobSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBsRmUoaSxhKXt2YXIgZj0wLHA9MDtpLndlaWdodCYmKGYrPWkuYmFyeWNlbnRlcippLndlaWdodCxwKz1pLndlaWdodCksYS53ZWlnaHQmJihmKz1hLmJhcnljZW50ZXIqYS53ZWlnaHQscCs9YS53ZWlnaHQpLGkudnM9YS52cy5jb25jYXQoaS52cyksaS5iYXJ5Y2VudGVyPWYvcCxpLndlaWdodD1wLGkuaT1NYXRoLm1pbihhLmksaS5pKSxhLm1lcmdlZD0hMH1mdW5jdGlvbiBoRmUoaSxhKXt2YXIgZj1BUGUoaSxmdW5jdGlvbihOKXtyZXR1cm4gemEoTiwiYmFyeWNlbnRlciIpfSkscD1mLmxocyx2PWRQKGYucmhzLGZ1bmN0aW9uKE4pe3JldHVybi1OLml9KSxtPVtdLGI9MCxFPTAsXz0wO3Auc29ydChmRmUoISFhKSksXz1zRnQobSx2LF8pLGNyKHAsZnVuY3Rpb24oTil7Xys9Ti52cy5sZW5ndGgsbS5wdXNoKE4udnMpLGIrPU4uYmFyeWNlbnRlcipOLndlaWdodCxFKz1OLndlaWdodCxfPXNGdChtLHYsXyl9KTt2YXIgTD17dnM6WkEobSl9O3JldHVybiBFJiYoTC5iYXJ5Y2VudGVyPWIvRSxMLndlaWdodD1FKSxMfWZ1bmN0aW9uIHNGdChpLGEsZil7Zm9yKHZhciBwO2EubGVuZ3RoJiYocD1hSyhhKSkuaTw9ZjspYS5wb3AoKSxpLnB1c2gocC52cyksZisrO3JldHVybiBmfWZ1bmN0aW9uIGZGZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXtyZXR1cm4gYS5iYXJ5Y2VudGVyPGYuYmFyeWNlbnRlcj8tMTphLmJhcnljZW50ZXI+Zi5iYXJ5Y2VudGVyPzE6aT9mLmktYS5pOmEuaS1mLml9fWZ1bmN0aW9uIGFGdChpLGEsZixwKXt2YXIgdj1pLmNoaWxkcmVuKGEpLG09aS5ub2RlKGEpLGI9bT9tLmJvcmRlckxlZnQ6dm9pZCAwLEU9bT9tLmJvcmRlclJpZ2h0OnZvaWQgMCxfPXt9O2ImJih2PVQ1KHYsZnVuY3Rpb24oeil7cmV0dXJuIHohPT1iJiZ6IT09RX0pKTt2YXIgTD1vRmUoaSx2KTtjcihMLGZ1bmN0aW9uKHope2lmKGkuY2hpbGRyZW4oei52KS5sZW5ndGgpe3ZhciBLPWFGdChpLHoudixmLHApO19bei52XT1LLHphKEssImJhcnljZW50ZXIiKSYmZ0ZlKHosSyl9fSk7dmFyIE49Y0ZlKEwsZik7ZEZlKE4sXyk7dmFyIEI9aEZlKE4scCk7aWYoYiYmKEIudnM9WkEoW2IsQi52cyxFXSksaS5wcmVkZWNlc3NvcnMoYikubGVuZ3RoKSl7dmFyIGo9aS5ub2RlKGkucHJlZGVjZXNzb3JzKGIpWzBdKSxSPWkubm9kZShpLnByZWRlY2Vzc29ycyhFKVswXSk7emEoQiwiYmFyeWNlbnRlciIpfHwoQi5iYXJ5Y2VudGVyPTAsQi53ZWlnaHQ9MCksQi5iYXJ5Y2VudGVyPShCLmJhcnljZW50ZXIqQi53ZWlnaHQrai5vcmRlcitSLm9yZGVyKS8oQi53ZWlnaHQrMiksQi53ZWlnaHQrPTJ9cmV0dXJuIEJ9ZnVuY3Rpb24gZEZlKGksYSl7Y3IoaSxmdW5jdGlvbihmKXtmLnZzPVpBKGYudnMubWFwKGZ1bmN0aW9uKHApe3JldHVybiBhW3BdP2FbcF0udnM6cH0pKX0pfWZ1bmN0aW9uIGdGZShpLGEpe1hoKGkuYmFyeWNlbnRlcik/KGkuYmFyeWNlbnRlcj1hLmJhcnljZW50ZXIsaS53ZWlnaHQ9YS53ZWlnaHQpOihpLmJhcnljZW50ZXI9KGkuYmFyeWNlbnRlcippLndlaWdodCthLmJhcnljZW50ZXIqYS53ZWlnaHQpLyhpLndlaWdodCthLndlaWdodCksaS53ZWlnaHQrPWEud2VpZ2h0KX1mdW5jdGlvbiBwRmUoaSl7dmFyIGE9R1B0KGkpLGY9b0Z0KGksdlQoMSxhKzEpLCJpbkVkZ2VzIikscD1vRnQoaSx2VChhLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHY9YUZlKGkpO2NGdChpLHYpO2Zvcih2YXIgbT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYixFPTAsXz0wO188NDsrK0UsKytfKXtiRmUoRSUyP2Y6cCxFJTQ+PTIpLHY9dUsoaSk7dmFyIEw9aUZlKGksdik7TDxtJiYoXz0wLGI9Uk9lKHYpLG09TCl9Y0Z0KGksYil9ZnVuY3Rpb24gb0Z0KGksYSxmKXtyZXR1cm4gT2YoYSxmdW5jdGlvbihwKXtyZXR1cm4gbkZlKGkscCxmKX0pfWZ1bmN0aW9uIGJGZShpLGEpe3ZhciBmPW5ldyBhMTtjcihpLGZ1bmN0aW9uKHApe3ZhciB2PXAuZ3JhcGgoKS5yb290LG09YUZ0KHAsdixmLGEpO2NyKG0udnMsZnVuY3Rpb24oYixFKXtwLm5vZGUoYikub3JkZXI9RX0pLGVGZShwLGYsbS52cyl9KX1mdW5jdGlvbiBjRnQoaSxhKXtjcihhLGZ1bmN0aW9uKGYpe2NyKGYsZnVuY3Rpb24ocCx2KXtpLm5vZGUocCkub3JkZXI9dn0pfSl9ZnVuY3Rpb24gdkZlKGkpe3ZhciBhPW1GZShpKTtjcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24oZil7Zm9yKHZhciBwPWkubm9kZShmKSx2PXAuZWRnZU9iaixtPXdGZShpLGEsdi52LHYudyksYj1tLnBhdGgsRT1tLmxjYSxfPTAsTD1iW19dLE49ITA7ZiE9PXYudzspe2lmKHA9aS5ub2RlKGYpLE4pe2Zvcig7KEw9YltfXSkhPT1FJiZpLm5vZGUoTCkubWF4UmFuazxwLnJhbms7KV8rKztMPT09RSYmKE49ITEpfWlmKCFOKXtmb3IoO188Yi5sZW5ndGgtMSYmaS5ub2RlKEw9YltfKzFdKS5taW5SYW5rPD1wLnJhbms7KV8rKztMPWJbX119aS5zZXRQYXJlbnQoZixMKSxmPWkuc3VjY2Vzc29ycyhmKVswXX19KX1mdW5jdGlvbiB3RmUoaSxhLGYscCl7dmFyIHY9W10sbT1bXSxiPU1hdGgubWluKGFbZl0ubG93LGFbcF0ubG93KSxFPU1hdGgubWF4KGFbZl0ubGltLGFbcF0ubGltKSxfLEw7Xz1mO2RvIF89aS5wYXJlbnQoXyksdi5wdXNoKF8pO3doaWxlKF8mJihhW19dLmxvdz5ifHxFPmFbX10ubGltKSk7Zm9yKEw9XyxfPXA7KF89aS5wYXJlbnQoXykpIT09TDspbS5wdXNoKF8pO3JldHVybntwYXRoOnYuY29uY2F0KG0ucmV2ZXJzZSgpKSxsY2E6TH19ZnVuY3Rpb24gbUZlKGkpe3ZhciBhPXt9LGY9MDtmdW5jdGlvbiBwKHYpe3ZhciBtPWY7Y3IoaS5jaGlsZHJlbih2KSxwKSxhW3ZdPXtsb3c6bSxsaW06ZisrfX1yZXR1cm4gY3IoaS5jaGlsZHJlbigpLHApLGF9ZnVuY3Rpb24geUZlKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcCh2LG0pe3ZhciBiPTAsRT0wLF89di5sZW5ndGgsTD1hSyhtKTtyZXR1cm4gY3IobSxmdW5jdGlvbihOLEIpe3ZhciBqPWtGZShpLE4pLFI9aj9pLm5vZGUoaikub3JkZXI6Xzsoanx8Tj09PUwpJiYoY3IobS5zbGljZShFLEIrMSksZnVuY3Rpb24oeil7Y3IoaS5wcmVkZWNlc3NvcnMoeiksZnVuY3Rpb24oSyl7dmFyIGl0PWkubm9kZShLKSxzdD1pdC5vcmRlcjsoc3Q8Ynx8UjxzdCkmJiEoaXQuZHVtbXkmJmkubm9kZSh6KS5kdW1teSkmJnVGdChmLEsseil9KX0pLEU9QisxLGI9Uil9KSxtfXJldHVybiBmUChhLHApLGZ9ZnVuY3Rpb24geEZlKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcChtLGIsRSxfLEwpe3ZhciBOO2NyKHZUKGIsRSksZnVuY3Rpb24oQil7Tj1tW0JdLGkubm9kZShOKS5kdW1teSYmY3IoaS5wcmVkZWNlc3NvcnMoTiksZnVuY3Rpb24oail7dmFyIFI9aS5ub2RlKGopO1IuZHVtbXkmJihSLm9yZGVyPF98fFIub3JkZXI+TCkmJnVGdChmLGosTil9KX0pfWZ1bmN0aW9uIHYobSxiKXt2YXIgRT0tMSxfLEw9MDtyZXR1cm4gY3IoYixmdW5jdGlvbihOLEIpe2lmKGkubm9kZShOKS5kdW1teT09PSJib3JkZXIiKXt2YXIgaj1pLnByZWRlY2Vzc29ycyhOKTtqLmxlbmd0aCYmKF89aS5ub2RlKGpbMF0pLm9yZGVyLHAoYixMLEIsRSxfKSxMPUIsRT1fKX1wKGIsTCxiLmxlbmd0aCxfLG0ubGVuZ3RoKX0pLGJ9cmV0dXJuIGZQKGEsdiksZn1mdW5jdGlvbiBrRmUoaSxhKXtpZihpLm5vZGUoYSkuZHVtbXkpcmV0dXJuIFpkdChpLnByZWRlY2Vzc29ycyhhKSxmdW5jdGlvbihmKXtyZXR1cm4gaS5ub2RlKGYpLmR1bW15fSl9ZnVuY3Rpb24gdUZ0KGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH12YXIgdj1pW2FdO3Z8fChpW2FdPXY9e30pLHZbZl09ITB9ZnVuY3Rpb24gRUZlKGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH1yZXR1cm4gemEoaVthXSxmKX1mdW5jdGlvbiBURmUoaSxhLGYscCl7dmFyIHY9e30sbT17fSxiPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKEUpe2NyKEUsZnVuY3Rpb24oXyxMKXt2W19dPV8sbVtfXT1fLGJbX109TH0pfSksY3IoYSxmdW5jdGlvbihFKXt2YXIgXz0tMTtjcihFLGZ1bmN0aW9uKEwpe3ZhciBOPXAoTCk7aWYoTi5sZW5ndGgpe049ZFAoTixmdW5jdGlvbihLKXtyZXR1cm4gYltLXX0pO2Zvcih2YXIgQj0oTi5sZW5ndGgtMSkvMixqPU1hdGguZmxvb3IoQiksUj1NYXRoLmNlaWwoQik7ajw9UjsrK2ope3ZhciB6PU5bal07bVtMXT09PUwmJl88Ylt6XSYmIUVGZShmLEwseikmJihtW3pdPUwsbVtMXT12W0xdPXZbel0sXz1iW3pdKX19fSl9KSx7cm9vdDp2LGFsaWduOm19fWZ1bmN0aW9uIENGZShpLGEsZixwLHYpe3ZhciBtPXt9LGI9X0ZlKGksYSxmLHYpLEU9dj8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBfKEIsail7Zm9yKHZhciBSPWIubm9kZXMoKSx6PVIucG9wKCksSz17fTt6OylLW3pdP0Ioeik6KEtbel09ITAsUi5wdXNoKHopLFI9Ui5jb25jYXQoaih6KSkpLHo9Ui5wb3AoKX1mdW5jdGlvbiBMKEIpe21bQl09Yi5pbkVkZ2VzKEIpLnJlZHVjZShmdW5jdGlvbihqLFIpe3JldHVybiBNYXRoLm1heChqLG1bUi52XStiLmVkZ2UoUikpfSwwKX1mdW5jdGlvbiBOKEIpe3ZhciBqPWIub3V0RWRnZXMoQikucmVkdWNlKGZ1bmN0aW9uKHosSyl7cmV0dXJuIE1hdGgubWluKHosbVtLLnddLWIuZWRnZShLKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksUj1pLm5vZGUoQik7aiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmUi5ib3JkZXJUeXBlIT09RSYmKG1bQl09TWF0aC5tYXgobVtCXSxqKSl9cmV0dXJuIF8oTCxiLnByZWRlY2Vzc29ycy5iaW5kKGIpKSxfKE4sYi5zdWNjZXNzb3JzLmJpbmQoYikpLGNyKHAsZnVuY3Rpb24oQil7bVtCXT1tW2ZbQl1dfSksbX1mdW5jdGlvbiBfRmUoaSxhLGYscCl7dmFyIHY9bmV3IGExLG09aS5ncmFwaCgpLGI9SUZlKG0ubm9kZXNlcCxtLmVkZ2VzZXAscCk7cmV0dXJuIGNyKGEsZnVuY3Rpb24oRSl7dmFyIF87Y3IoRSxmdW5jdGlvbihMKXt2YXIgTj1mW0xdO2lmKHYuc2V0Tm9kZShOKSxfKXt2YXIgQj1mW19dLGo9di5lZGdlKEIsTik7di5zZXRFZGdlKEIsTixNYXRoLm1heChiKGksTCxfKSxqfHwwKSl9Xz1MfSl9KSx2fWZ1bmN0aW9uIFNGZShpLGEpe3JldHVybiB0MHQoQzUoYSksZnVuY3Rpb24oZil7dmFyIHA9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHY9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBGTmUoZixmdW5jdGlvbihtLGIpe3ZhciBFPURGZShpLGIpLzI7cD1NYXRoLm1heChtK0UscCksdj1NYXRoLm1pbihtLUUsdil9KSxwLXZ9KX1mdW5jdGlvbiBBRmUoaSxhKXt2YXIgZj1DNShhKSxwPWxQKGYpLHY9YlQoZik7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKG0pe2NyKFsibCIsInIiXSxmdW5jdGlvbihiKXt2YXIgRT1tK2IsXz1pW0VdLEw7aWYoXyE9PWEpe3ZhciBOPUM1KF8pO0w9Yj09PSJsIj9wLWxQKE4pOnYtYlQoTiksTCYmKGlbRV09b0soXyxmdW5jdGlvbihCKXtyZXR1cm4gQitMfSkpfX0pfSl9ZnVuY3Rpb24gTEZlKGksYSl7cmV0dXJuIG9LKGkudWwsZnVuY3Rpb24oZixwKXtpZihhKXJldHVybiBpW2EudG9Mb3dlckNhc2UoKV1bcF07dmFyIHY9ZFAoT2YoaSxwKSk7cmV0dXJuKHZbMV0rdlsyXSkvMn0pfWZ1bmN0aW9uIE1GZShpKXt2YXIgYT11SyhpKSxmPUVXKHlGZShpLGEpLHhGZShpLGEpKSxwPXt9LHY7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKGIpe3Y9Yj09PSJ1Ij9hOkM1KGEpLnJldmVyc2UoKSxjcihbImwiLCJyIl0sZnVuY3Rpb24oRSl7RT09PSJyIiYmKHY9T2YodixmdW5jdGlvbihCKXtyZXR1cm4gQzUoQikucmV2ZXJzZSgpfSkpO3ZhciBfPShiPT09InUiP2kucHJlZGVjZXNzb3JzOmkuc3VjY2Vzc29ycykuYmluZChpKSxMPVRGZShpLHYsZixfKSxOPUNGZShpLHYsTC5yb290LEwuYWxpZ24sRT09PSJyIik7RT09PSJyIiYmKE49b0soTixmdW5jdGlvbihCKXtyZXR1cm4tQn0pKSxwW2IrRV09Tn0pfSk7dmFyIG09U0ZlKGkscCk7cmV0dXJuIEFGZShwLG0pLExGZShwLGkuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gSUZlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24ocCx2LG0pe3ZhciBiPXAubm9kZSh2KSxFPXAubm9kZShtKSxfPTAsTDtpZihfKz1iLndpZHRoLzIsemEoYiwibGFiZWxwb3MiKSlzd2l0Y2goYi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOkw9LWIud2lkdGgvMjticmVhaztjYXNlInIiOkw9Yi53aWR0aC8yO2JyZWFrfWlmKEwmJihfKz1mP0w6LUwpLEw9MCxfKz0oYi5kdW1teT9hOmkpLzIsXys9KEUuZHVtbXk/YTppKS8yLF8rPUUud2lkdGgvMix6YShFLCJsYWJlbHBvcyIpKXN3aXRjaChFLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6TD1FLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpMPS1FLndpZHRoLzI7YnJlYWt9cmV0dXJuIEwmJihfKz1mP0w6LUwpLEw9MCxffX1mdW5jdGlvbiBERmUoaSxhKXtyZXR1cm4gaS5ub2RlKGEpLndpZHRofWZ1bmN0aW9uIE9GZShpKXtpPXpQdChpKSxORmUoaSksQk5lKE1GZShpKSxmdW5jdGlvbihhLGYpe2kubm9kZShmKS54PWF9KX1mdW5jdGlvbiBORmUoaSl7dmFyIGE9dUsoaSksZj1pLmdyYXBoKCkucmFua3NlcCxwPTA7Y3IoYSxmdW5jdGlvbih2KXt2YXIgbT1iVChPZih2LGZ1bmN0aW9uKGIpe3JldHVybiBpLm5vZGUoYikuaGVpZ2h0fSkpO2NyKHYsZnVuY3Rpb24oYil7aS5ub2RlKGIpLnk9cCttLzJ9KSxwKz1tK2Z9KX1mdW5jdGlvbiBlTChpLGEpe3ZhciBmPWEmJmEuZGVidWdUaW1pbmc/TFBlOk1QZTtmKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIHA9ZigiICBidWlsZExheW91dEdyYXBoIixmdW5jdGlvbigpe3JldHVybiBWRmUoaSl9KTtmKCIgIHJ1bkxheW91dCIsZnVuY3Rpb24oKXtQRmUocCxmKX0pLGYoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXtGRmUoaSxwKX0pfSl9ZnVuY3Rpb24gUEZlKGksYSl7YSgiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiLGZ1bmN0aW9uKCl7VUZlKGkpfSksYSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtlQmUoaSl9KSxhKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXtrUGUoaSl9KSxhKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsZnVuY3Rpb24oKXtRUGUoaSl9KSxhKCIgICAgcmFuayIsZnVuY3Rpb24oKXtLUGUoelB0KGkpKX0pLGEoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe1dGZShpKX0pLGEoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe1NQZShpKX0pLGEoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXt0RmUoaSl9KSxhKCIgICAgbm9ybWFsaXplUmFua3MiLGZ1bmN0aW9uKCl7X1BlKGkpfSksYSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLGZ1bmN0aW9uKCl7S0ZlKGkpfSksYSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7WUZlKGkpfSksYSgiICAgIG5vcm1hbGl6ZS5ydW4iLGZ1bmN0aW9uKCl7RlBlKGkpfSksYSgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe3ZGZShpKX0pLGEoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtJUGUoaSl9KSxhKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7cEZlKGkpfSksYSgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtuQmUoaSl9KSxhKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtEUGUoaSl9KSxhKCIgICAgcG9zaXRpb24iLGZ1bmN0aW9uKCl7T0ZlKGkpfSksYSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe3JCZShpKX0pLGEoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsZnVuY3Rpb24oKXt0QmUoaSl9KSxhKCIgICAgbm9ybWFsaXplLnVuZG8iLGZ1bmN0aW9uKCl7UlBlKGkpfSksYSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1pGZShpKX0pLGEoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPUGUoaSl9KSxhKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7WEZlKGkpfSksYSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIixmdW5jdGlvbigpe1FGZShpKX0pLGEoIiAgICByZXZlcnNlUG9pbnRzIixmdW5jdGlvbigpe0pGZShpKX0pLGEoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7VFBlKGkpfSl9ZnVuY3Rpb24gRkZlKGksYSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx2PWEubm9kZShmKTtwJiYocC54PXYueCxwLnk9di55LGEuY2hpbGRyZW4oZikubGVuZ3RoJiYocC53aWR0aD12LndpZHRoLHAuaGVpZ2h0PXYuaGVpZ2h0KSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpLHY9YS5lZGdlKGYpO3AucG9pbnRzPXYucG9pbnRzLHphKHYsIngiKSYmKHAueD12LngscC55PXYueSl9KSxpLmdyYXBoKCkud2lkdGg9YS5ncmFwaCgpLndpZHRoLGkuZ3JhcGgoKS5oZWlnaHQ9YS5ncmFwaCgpLmhlaWdodH12YXIgQkZlPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxSRmU9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sakZlPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sJEZlPVsid2lkdGgiLCJoZWlnaHQiXSx6RmU9e3dpZHRoOjAsaGVpZ2h0OjB9LHFGZT1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxIRmU9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxHRmU9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIFZGZShpKXt2YXIgYT1uZXcgYTEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxmPWwwdChpLmdyYXBoKCkpO3JldHVybiBhLnNldEdyYXBoKEVXKHt9LFJGZSx1MHQoZixCRmUpLGhQKGYsakZlKSkpLGNyKGkubm9kZXMoKSxmdW5jdGlvbihwKXt2YXIgdj1sMHQoaS5ub2RlKHApKTthLnNldE5vZGUocCxKQSh1MHQodiwkRmUpLHpGZSkpLGEuc2V0UGFyZW50KHAsaS5wYXJlbnQocCkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB2PWwwdChpLmVkZ2UocCkpO2Euc2V0RWRnZShwLEVXKHt9LEhGZSx1MHQodixxRmUpLGhQKHYsR0ZlKSkpfSksYX1mdW5jdGlvbiBVRmUoaSl7dmFyIGE9aS5ncmFwaCgpO2EucmFua3NlcC89MixjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpO3AubWlubGVuKj0yLHAubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIiYmKGEucmFua2Rpcj09PSJUQiJ8fGEucmFua2Rpcj09PSJCVCI/cC53aWR0aCs9cC5sYWJlbG9mZnNldDpwLmhlaWdodCs9cC5sYWJlbG9mZnNldCl9KX1mdW5jdGlvbiBXRmUoaSl7Y3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtpZihmLndpZHRoJiZmLmhlaWdodCl7dmFyIHA9aS5ub2RlKGEudiksdj1pLm5vZGUoYS53KSxtPXtyYW5rOih2LnJhbmstcC5yYW5rKS8yK3AucmFuayxlOmF9O3RMKGksImVkZ2UtcHJveHkiLG0sIl9lcCIpfX0pfWZ1bmN0aW9uIEtGZShpKXt2YXIgYT0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7cC5ib3JkZXJUb3AmJihwLm1pblJhbms9aS5ub2RlKHAuYm9yZGVyVG9wKS5yYW5rLHAubWF4UmFuaz1pLm5vZGUocC5ib3JkZXJCb3R0b20pLnJhbmssYT1iVChhLHAubWF4UmFuaykpfSksaS5ncmFwaCgpLm1heFJhbms9YX1mdW5jdGlvbiBZRmUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKTtmLmR1bW15PT09ImVkZ2UtcHJveHkiJiYoaS5lZGdlKGYuZSkubGFiZWxSYW5rPWYucmFuayxpLnJlbW92ZU5vZGUoYSkpfSl9ZnVuY3Rpb24gWEZlKGkpe3ZhciBhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPTAscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdj0wLG09aS5ncmFwaCgpLGI9bS5tYXJnaW54fHwwLEU9bS5tYXJnaW55fHwwO2Z1bmN0aW9uIF8oTCl7dmFyIE49TC54LEI9TC55LGo9TC53aWR0aCxSPUwuaGVpZ2h0O2E9TWF0aC5taW4oYSxOLWovMiksZj1NYXRoLm1heChmLE4rai8yKSxwPU1hdGgubWluKHAsQi1SLzIpLHY9TWF0aC5tYXgodixCK1IvMil9Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKEwpe18oaS5ub2RlKEwpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihMKXt2YXIgTj1pLmVkZ2UoTCk7emEoTiwieCIpJiZfKE4pfSksYS09YixwLT1FLGNyKGkubm9kZXMoKSxmdW5jdGlvbihMKXt2YXIgTj1pLm5vZGUoTCk7Ti54LT1hLE4ueS09cH0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihMKXt2YXIgTj1pLmVkZ2UoTCk7Y3IoTi5wb2ludHMsZnVuY3Rpb24oQil7Qi54LT1hLEIueS09cH0pLHphKE4sIngiKSYmKE4ueC09YSksemEoTiwieSIpJiYoTi55LT1wKX0pLG0ud2lkdGg9Zi1hK2IsbS5oZWlnaHQ9di1wK0V9ZnVuY3Rpb24gUUZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD1pLm5vZGUoYS52KSx2PWkubm9kZShhLncpLG0sYjtmLnBvaW50cz8obT1mLnBvaW50c1swXSxiPWYucG9pbnRzW2YucG9pbnRzLmxlbmd0aC0xXSk6KGYucG9pbnRzPVtdLG09dixiPXApLGYucG9pbnRzLnVuc2hpZnQocVB0KHAsbSkpLGYucG9pbnRzLnB1c2gocVB0KHYsYikpfSl9ZnVuY3Rpb24gWkZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoemEoZiwieCIpKXN3aXRjaCgoZi5sYWJlbHBvcz09PSJsInx8Zi5sYWJlbHBvcz09PSJyIikmJihmLndpZHRoLT1mLmxhYmVsb2Zmc2V0KSxmLmxhYmVscG9zKXtjYXNlImwiOmYueC09Zi53aWR0aC8yK2YubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpmLngrPWYud2lkdGgvMitmLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIEpGZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2YucmV2ZXJzZWQmJmYucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIHRCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aWYoaS5jaGlsZHJlbihhKS5sZW5ndGgpe3ZhciBmPWkubm9kZShhKSxwPWkubm9kZShmLmJvcmRlclRvcCksdj1pLm5vZGUoZi5ib3JkZXJCb3R0b20pLG09aS5ub2RlKGFLKGYuYm9yZGVyTGVmdCkpLGI9aS5ub2RlKGFLKGYuYm9yZGVyUmlnaHQpKTtmLndpZHRoPU1hdGguYWJzKGIueC1tLngpLGYuaGVpZ2h0PU1hdGguYWJzKHYueS1wLnkpLGYueD1tLngrZi53aWR0aC8yLGYueT1wLnkrZi5oZWlnaHQvMn19KSxjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aS5ub2RlKGEpLmR1bW15PT09ImJvcmRlciImJmkucmVtb3ZlTm9kZShhKX0pfWZ1bmN0aW9uIGVCZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7aWYoYS52PT09YS53KXt2YXIgZj1pLm5vZGUoYS52KTtmLnNlbGZFZGdlc3x8KGYuc2VsZkVkZ2VzPVtdKSxmLnNlbGZFZGdlcy5wdXNoKHtlOmEsbGFiZWw6aS5lZGdlKGEpfSksaS5yZW1vdmVFZGdlKGEpfX0pfWZ1bmN0aW9uIG5CZShpKXt2YXIgYT11SyhpKTtjcihhLGZ1bmN0aW9uKGYpe3ZhciBwPTA7Y3IoZixmdW5jdGlvbih2LG0pe3ZhciBiPWkubm9kZSh2KTtiLm9yZGVyPW0rcCxjcihiLnNlbGZFZGdlcyxmdW5jdGlvbihFKXt0TChpLCJzZWxmZWRnZSIse3dpZHRoOkUubGFiZWwud2lkdGgsaGVpZ2h0OkUubGFiZWwuaGVpZ2h0LHJhbms6Yi5yYW5rLG9yZGVyOm0rICsrcCxlOkUuZSxsYWJlbDpFLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYi5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIHJCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpO2lmKGYuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgcD1pLm5vZGUoZi5lLnYpLHY9cC54K3Aud2lkdGgvMixtPXAueSxiPWYueC12LEU9cC5oZWlnaHQvMjtpLnNldEVkZ2UoZi5lLGYubGFiZWwpLGkucmVtb3ZlTm9kZShhKSxmLmxhYmVsLnBvaW50cz1be3g6disyKmIvMyx5Om0tRX0se3g6dis1KmIvNix5Om0tRX0se3g6ditiLHk6bX0se3g6dis1KmIvNix5Om0rRX0se3g6disyKmIvMyx5Om0rRX1dLGYubGFiZWwueD1mLngsZi5sYWJlbC55PWYueX19KX1mdW5jdGlvbiB1MHQoaSxhKXtyZXR1cm4gb0soaFAoaSxhKSxOdW1iZXIpfWZ1bmN0aW9uIGwwdChpKXt2YXIgYT17fTtyZXR1cm4gY3IoaSxmdW5jdGlvbihmLHApe2FbcC50b0xvd2VyQ2FzZSgpXT1mfSksYX1mdW5jdGlvbiBsRnQoaSxhKXtyZXR1cm4hIWkuY2hpbGRyZW4oYSkubGVuZ3RofWZ1bmN0aW9uIGhGdChpKXtyZXR1cm4gaDB0KGkudikrIjoiK2gwdChpLncpKyI6IitoMHQoaS5uYW1lKX12YXIgaUJlPS86L2c7ZnVuY3Rpb24gaDB0KGkpe3JldHVybiBpP1N0cmluZyhpKS5yZXBsYWNlKGlCZSwiXFw6Iik6IiJ9ZnVuY3Rpb24gcDMoaSxhKXthJiZpLmF0dHIoInN0eWxlIixhKX1mdW5jdGlvbiBmRnQoaSxhLGYpe2EmJmkuYXR0cigiY2xhc3MiLGEpLmF0dHIoImNsYXNzIixmKyIgIitpLmF0dHIoImNsYXNzIikpfWZ1bmN0aW9uIGFtKGksYSl7dmFyIGY9YS5ncmFwaCgpO2lmKE1EdChmKSl7dmFyIHA9Zi50cmFuc2l0aW9uO2lmKE9BKHApKXJldHVybiBwKGkpfXJldHVybiBpfXZhciBmMHQ9e25vcm1hbDphQmUsdmVlOm9CZSx1bmRpcmVjdGVkOmNCZX07ZnVuY3Rpb24gc0JlKGkpe2YwdD1pfWZ1bmN0aW9uIGFCZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIG9CZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIGNCZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIGQwdChpLGEpe3ZhciBmPWkuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCIxMDAwMDAiKSxwPWYuYXBwZW5kKCJ4aHRtbDpkaXYiKTtwLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciB2PWEubGFiZWw7c3dpdGNoKHR5cGVvZiB2KXtjYXNlImZ1bmN0aW9uIjpwLmluc2VydCh2KTticmVhaztjYXNlIm9iamVjdCI6cC5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gdn0pO2JyZWFrO2RlZmF1bHQ6cC5odG1sKHYpfXAzKHAsYS5sYWJlbFN0eWxlKSxwLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIikscC5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKTt2YXIgbT1wLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZi5hdHRyKCJ3aWR0aCIsbS53aWR0aCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCksZn1mdW5jdGlvbiB1QmUoaSxhKXt2YXIgZj1pO3JldHVybiBmLm5vZGUoKS5hcHBlbmRDaGlsZChhLmxhYmVsKSxwMyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBsQmUoaSxhKXtmb3IodmFyIGY9aS5hcHBlbmQoInRleHQiKSxwPWhCZShhLmxhYmVsKS5zcGxpdChgCmApLHY9MDt2PHAubGVuZ3RoO3YrKylmLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KHBbdl0pO3JldHVybiBwMyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBoQmUoaSl7Zm9yKHZhciBhPSIiLGY9ITEscCx2PTA7djxpLmxlbmd0aDsrK3YpaWYocD1pW3ZdLGYpe3N3aXRjaChwKXtjYXNlIm4iOmErPWAKYDticmVhaztkZWZhdWx0OmErPXB9Zj0hMX1lbHNlIHA9PT0iXFwiP2Y9ITA6YSs9cDtyZXR1cm4gYX1mdW5jdGlvbiBnMHQoaSxhLGYpe3ZhciBwPWEubGFiZWwsdj1pLmFwcGVuZCgiZyIpO2EubGFiZWxUeXBlPT09InN2ZyI/dUJlKHYsYSk6dHlwZW9mIHAhPSJzdHJpbmcifHxhLmxhYmVsVHlwZT09PSJodG1sIj9kMHQodixhKTpsQmUodixhKTt2YXIgbT12Lm5vZGUoKS5nZXRCQm94KCksYjtzd2l0Y2goZil7Y2FzZSJ0b3AiOmI9LWEuaGVpZ2h0LzI7YnJlYWs7Y2FzZSJib3R0b20iOmI9YS5oZWlnaHQvMi1tLmhlaWdodDticmVhaztkZWZhdWx0OmI9LW0uaGVpZ2h0LzJ9cmV0dXJuIHYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLW0ud2lkdGgvMisiLCIrYisiKSIpLHZ9dmFyIHAwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIGxGdChhLG0pfSkscD1pLnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShmLGZ1bmN0aW9uKG0pe3JldHVybiBtfSk7YW0ocC5leGl0KCksYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciB2PXAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKS5hdHRyKCJpZCIsZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pO3JldHVybiBiLmlkfSkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pLEU9eXIodGhpcyk7eXIodGhpcykuYXBwZW5kKCJyZWN0Iik7dmFyIF89RS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7ZzB0KF8sYixiLmNsdXN0ZXJMYWJlbFBvcyl9KTtyZXR1cm4gcD1wLm1lcmdlKHYpLHA9YW0ocCxhKS5zdHlsZSgib3BhY2l0eSIsMSkscC5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBiPWEubm9kZShtKSxFPXlyKHRoaXMpO3AzKEUsYi5zdHlsZSl9KSxwfTtmdW5jdGlvbiBmQmUoaSl7cDB0PWl9bGV0IGIwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWkuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoYS5lZGdlcygpLGZ1bmN0aW9uKHYpe3JldHVybiBoRnQodil9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtmLmV4aXQoKS5yZW1vdmUoKSxmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZWRnZUxhYmVsIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLGY9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIiksZi5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBtPXlyKHRoaXMpO20uc2VsZWN0KCIubGFiZWwiKS5yZW1vdmUoKTt2YXIgYj1hLmVkZ2UodiksRT1nMHQobSxhLmVkZ2UodiksMCkuY2xhc3NlZCgibGFiZWwiLCEwKSxfPUUubm9kZSgpLmdldEJCb3goKTtiLmxhYmVsSWQmJkUuYXR0cigiaWQiLGIubGFiZWxJZCksemEoYiwid2lkdGgiKXx8KGIud2lkdGg9Xy53aWR0aCksemEoYiwiaGVpZ2h0Iil8fChiLmhlaWdodD1fLmhlaWdodCl9KTt2YXIgcDtyZXR1cm4gZi5leGl0P3A9Zi5leGl0KCk6cD1mLnNlbGVjdEFsbChudWxsKSxhbShwLGEpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxmfTtmdW5jdGlvbiBkQmUoaSl7YjB0PWl9ZnVuY3Rpb24gZEZ0KGksYSl7cmV0dXJuIGkuaW50ZXJzZWN0KGEpfXZhciB2MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWkuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShhLmVkZ2VzKCksZnVuY3Rpb24oYil7cmV0dXJuIGhGdChiKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApLHY9d0JlKHAsYSk7bUJlKHAsYSk7dmFyIG09cC5tZXJnZSE9PXZvaWQgMD9wLm1lcmdlKHYpOnA7cmV0dXJuIGFtKG0sYSkuc3R5bGUoIm9wYWNpdHkiLDEpLG0uZWFjaChmdW5jdGlvbihiKXt2YXIgRT15cih0aGlzKSxfPWEuZWRnZShiKTtfLmVsZW09dGhpcyxfLmlkJiZFLmF0dHIoImlkIixfLmlkKSxmRnQoRSxfLmNsYXNzLChFLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSxtLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYik7RS5hcnJvd2hlYWRJZD1jSygiYXJyb3doZWFkIik7dmFyIF89eXIodGhpcykuYXR0cigibWFya2VyLWVuZCIsZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrcEJlKGxvY2F0aW9uLmhyZWYsRS5hcnJvd2hlYWRJZCkrIikifSkuc3R5bGUoImZpbGwiLCJub25lIik7YW0oXyxhKS5hdHRyKCJkIixmdW5jdGlvbihMKXtyZXR1cm4gYkJlKGEsTCl9KSxwMyhfLEUuc3R5bGUpfSksbS5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLG0uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYiksXz1mW0UuYXJyb3doZWFkXTtfKHlyKHRoaXMpLEUuYXJyb3doZWFkSWQsRSwiYXJyb3doZWFkIil9KSxtfTtmdW5jdGlvbiBnQmUoaSl7djB0PWl9ZnVuY3Rpb24gcEJlKGksYSl7dmFyIGY9aS5zcGxpdCgiIyIpWzBdO3JldHVybiBmKyIjIithfWZ1bmN0aW9uIGJCZShpLGEpe3ZhciBmPWkuZWRnZShhKSxwPWkubm9kZShhLnYpLHY9aS5ub2RlKGEudyksbT1mLnBvaW50cy5zbGljZSgxLGYucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbS51bnNoaWZ0KGRGdChwLG1bMF0pKSxtLnB1c2goZEZ0KHYsbVttLmxlbmd0aC0xXSkpLGdGdChmLG0pfWZ1bmN0aW9uIGdGdChpLGEpe3ZhciBmPShaN3x8SzhlLmxpbmUpKCkueChmdW5jdGlvbihwKXtyZXR1cm4gcC54fSkueShmdW5jdGlvbihwKXtyZXR1cm4gcC55fSk7cmV0dXJuKGYuY3VydmV8fGYuaW50ZXJwb2xhdGUpKGkuY3VydmUpLGYoYSl9ZnVuY3Rpb24gdkJlKGkpe3ZhciBhPWkuZ2V0QkJveCgpLGY9aS5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KGkuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShhLndpZHRoLzIsYS5oZWlnaHQvMik7cmV0dXJue3g6Zi5lLHk6Zi5mfX1mdW5jdGlvbiB3QmUoaSxhKXt2YXIgZj1pLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihwKXt2YXIgdj1hLmVkZ2UocCksbT1hLm5vZGUocC52KS5lbGVtLGI9dlQodi5wb2ludHMubGVuZ3RoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdkJlKG0pfSk7cmV0dXJuIGdGdCh2LGIpfSksZi5hcHBlbmQoImRlZnMiKSxmfWZ1bmN0aW9uIG1CZShpLGEpe3ZhciBmPWkuZXhpdCgpO2FtKGYsYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfXZhciB3MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIWxGdChhLGIpfSksdj1pLnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShwLGZ1bmN0aW9uKGIpe3JldHVybiBifSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7di5leGl0KCkucmVtb3ZlKCksdi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSx2PWkuc2VsZWN0QWxsKCJnLm5vZGUiKSx2LmVhY2goZnVuY3Rpb24oYil7dmFyIEU9YS5ub2RlKGIpLF89eXIodGhpcyk7ZkZ0KF8sRS5jbGFzcywoXy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksXy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgTD1fLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxOPWcwdChMLEUpLEI9ZltFLnNoYXBlXSxqPWhQKE4ubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtFLmVsZW09dGhpcyxFLmlkJiZfLmF0dHIoImlkIixFLmlkKSxFLmxhYmVsSWQmJkwuYXR0cigiaWQiLEUubGFiZWxJZCksemEoRSwid2lkdGgiKSYmKGoud2lkdGg9RS53aWR0aCksemEoRSwiaGVpZ2h0IikmJihqLmhlaWdodD1FLmhlaWdodCksai53aWR0aCs9RS5wYWRkaW5nTGVmdCtFLnBhZGRpbmdSaWdodCxqLmhlaWdodCs9RS5wYWRkaW5nVG9wK0UucGFkZGluZ0JvdHRvbSxMLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFLnBhZGRpbmdMZWZ0LUUucGFkZGluZ1JpZ2h0KS8yKyIsIisoRS5wYWRkaW5nVG9wLUUucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBSPXlyKHRoaXMpO1Iuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHo9QihSLGosRSkuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7cDMoeixFLnN0eWxlKTt2YXIgSz16Lm5vZGUoKS5nZXRCQm94KCk7RS53aWR0aD1LLndpZHRoLEUuaGVpZ2h0PUsuaGVpZ2h0fSk7dmFyIG07cmV0dXJuIHYuZXhpdD9tPXYuZXhpdCgpOm09di5zZWxlY3RBbGwobnVsbCksYW0obSxhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksdn07ZnVuY3Rpb24geUJlKGkpe3cwdD1pfWZ1bmN0aW9uIHhCZShpLGEpe3ZhciBmPWkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXlyKHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSk7ZnVuY3Rpb24gcCh2KXt2YXIgbT1hLm5vZGUodik7cmV0dXJuInRyYW5zbGF0ZSgiK20ueCsiLCIrbS55KyIpIn1mLmF0dHIoInRyYW5zZm9ybSIscCksYW0oaSxhKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixwKSxhbShmLnNlbGVjdEFsbCgicmVjdCIpLGEpLmF0dHIoIndpZHRoIixmdW5jdGlvbih2KXtyZXR1cm4gYS5ub2RlKHYpLndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih2KXtyZXR1cm4gYS5ub2RlKHYpLmhlaWdodH0pLmF0dHIoIngiLGZ1bmN0aW9uKHYpe3ZhciBtPWEubm9kZSh2KTtyZXR1cm4tbS53aWR0aC8yfSkuYXR0cigieSIsZnVuY3Rpb24odil7dmFyIG09YS5ub2RlKHYpO3JldHVybi1tLmhlaWdodC8yfSl9ZnVuY3Rpb24ga0JlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHYpe3ZhciBtPWEuZWRnZSh2KTtyZXR1cm4gemEobSwieCIpPyJ0cmFuc2xhdGUoIittLngrIiwiK20ueSsiKSI6IiJ9Zi5hdHRyKCJ0cmFuc2Zvcm0iLHApLGFtKGksYSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIscCl9ZnVuY3Rpb24gRUJlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHYpe3ZhciBtPWEubm9kZSh2KTtyZXR1cm4idHJhbnNsYXRlKCIrbS54KyIsIittLnkrIikifWYuYXR0cigidHJhbnNmb3JtIixwKSxhbShpLGEpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLHApfWZ1bmN0aW9uIHBGdChpLGEsZixwKXt2YXIgdj1pLngsbT1pLnksYj12LXAueCxFPW0tcC55LF89TWF0aC5zcXJ0KGEqYSpFKkUrZipmKmIqYiksTD1NYXRoLmFicyhhKmYqYi9fKTtwLng8diYmKEw9LUwpO3ZhciBOPU1hdGguYWJzKGEqZipFL18pO3JldHVybiBwLnk8bSYmKE49LU4pLHt4OnYrTCx5Om0rTn19ZnVuY3Rpb24gVEJlKGksYSxmKXtyZXR1cm4gcEZ0KGksYSxhLGYpfWZ1bmN0aW9uIENCZShpLGEsZixwKXt2YXIgdixtLGIsRSxfLEwsTixCLGosUix6LEssaXQsc3QsdXQ7aWYodj1hLnktaS55LGI9aS54LWEueCxfPWEueCppLnktaS54KmEueSxqPXYqZi54K2IqZi55K18sUj12KnAueCtiKnAueStfLCEoaiE9PTAmJlIhPT0wJiZiRnQoaixSKSkmJihtPXAueS1mLnksRT1mLngtcC54LEw9cC54KmYueS1mLngqcC55LE49bSppLngrRSppLnkrTCxCPW0qYS54K0UqYS55K0wsIShOIT09MCYmQiE9PTAmJmJGdChOLEIpKSYmKHo9dipFLW0qYix6IT09MCkpKXJldHVybiBLPU1hdGguYWJzKHovMiksaXQ9YipMLUUqXyxzdD1pdDwwPyhpdC1LKS96OihpdCtLKS96LGl0PW0qXy12KkwsdXQ9aXQ8MD8oaXQtSykvejooaXQrSykveix7eDpzdCx5OnV0fX1mdW5jdGlvbiBiRnQoaSxhKXtyZXR1cm4gaSphPjB9ZnVuY3Rpb24gYjMoaSxhLGYpe3ZhciBwPWkueCx2PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2EuZm9yRWFjaChmdW5jdGlvbih6KXtiPU1hdGgubWluKGIsei54KSxFPU1hdGgubWluKEUsei55KX0pO2Zvcih2YXIgXz1wLWkud2lkdGgvMi1iLEw9di1pLmhlaWdodC8yLUUsTj0wO048YS5sZW5ndGg7TisrKXt2YXIgQj1hW05dLGo9YVtOPGEubGVuZ3RoLTE/TisxOjBdLFI9Q0JlKGksZix7eDpfK0IueCx5OkwrQi55fSx7eDpfK2oueCx5Okwrai55fSk7UiYmbS5wdXNoKFIpfXJldHVybiBtLmxlbmd0aD8obS5sZW5ndGg+MSYmbS5zb3J0KGZ1bmN0aW9uKHosSyl7dmFyIGl0PXoueC1mLngsc3Q9ei55LWYueSx1dD1NYXRoLnNxcnQoaXQqaXQrc3Qqc3QpLGJ0PUsueC1mLngsbXQ9Sy55LWYueSx5dD1NYXRoLnNxcnQoYnQqYnQrbXQqbXQpO3JldHVybiB1dDx5dD8tMTp1dD09PXl0PzA6MX0pLG1bMF0pOihjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLGkpLGkpfWZ1bmN0aW9uIG0wdChpLGEpe3ZhciBmPWkueCxwPWkueSx2PWEueC1mLG09YS55LXAsYj1pLndpZHRoLzIsRT1pLmhlaWdodC8yLF8sTDtyZXR1cm4gTWF0aC5hYnMobSkqYj5NYXRoLmFicyh2KSpFPyhtPDAmJihFPS1FKSxfPW09PT0wPzA6RSp2L20sTD1FKToodjwwJiYoYj0tYiksXz1iLEw9dj09PTA/MDpiKm0vdikse3g6ZitfLHk6cCtMfX12YXIgeTB0PXtyZWN0OlNCZSxlbGxpcHNlOkFCZSxjaXJjbGU6TEJlLGRpYW1vbmQ6TUJlfTtmdW5jdGlvbiBfQmUoaSl7eTB0PWl9ZnVuY3Rpb24gU0JlKGksYSxmKXt2YXIgcD1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixmLnJ4KS5hdHRyKCJyeSIsZi5yeSkuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIG0wdChmLHYpfSxwfWZ1bmN0aW9uIEFCZShpLGEsZil7dmFyIHA9YS53aWR0aC8yLHY9YS5oZWlnaHQvMixtPWkuaW5zZXJ0KCJlbGxpcHNlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoInJ4IixwKS5hdHRyKCJyeSIsdik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBwRnQoZixwLHYsYil9LG19ZnVuY3Rpb24gTEJlKGksYSxmKXt2YXIgcD1NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KS8yLHY9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1hLndpZHRoLzIpLmF0dHIoInkiLC1hLmhlaWdodC8yKS5hdHRyKCJyIixwKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFRCZShmLHAsbSl9LHZ9ZnVuY3Rpb24gTUJlKGksYSxmKXt2YXIgcD1hLndpZHRoKk1hdGguU1FSVDIvMix2PWEuaGVpZ2h0Kk1hdGguU1FSVDIvMixtPVt7eDowLHk6LXZ9LHt4Oi1wLHk6MH0se3g6MCx5OnZ9LHt4OnAseTowfV0sYj1pLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbS5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIEUueCsiLCIrRS55fSkuam9pbigiICIpKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBJQmUoKXt2YXIgaT1mdW5jdGlvbihhLGYpe05CZShmKTt2YXIgcD1iUChhLCJvdXRwdXQiKSx2PWJQKHAsImNsdXN0ZXJzIiksbT1iUChwLCJlZGdlUGF0aHMiKSxiPWIwdChiUChwLCJlZGdlTGFiZWxzIiksZiksRT13MHQoYlAocCwibm9kZXMiKSxmLHkwdCk7ZUwoZiksRUJlKEUsZiksa0JlKGIsZiksdjB0KG0sZixmMHQpO3ZhciBfPXAwdCh2LGYpO3hCZShfLGYpLFBCZShmKX07cmV0dXJuIGkuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHlCZShhKSxpKTp3MHR9LGkuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZCZShhKSxpKTpwMHR9LGkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZEJlKGEpLGkpOmIwdH0saS5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdCZShhKSxpKTp2MHR9LGkuc2hhcGVzPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfQmUoYSksaSk6eTB0fSxpLmFycm93cz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oc0JlKGEpLGkpOmYwdH0saX12YXIgREJlPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LE9CZT17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmlnfTtmdW5jdGlvbiBOQmUoaSl7aS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpOyF6YShmLCJsYWJlbCIpJiYhaS5jaGlsZHJlbihhKS5sZW5ndGgmJihmLmxhYmVsPWEpLHphKGYsInBhZGRpbmdYIikmJkpBKGYse3BhZGRpbmdMZWZ0OmYucGFkZGluZ1gscGFkZGluZ1JpZ2h0OmYucGFkZGluZ1h9KSx6YShmLCJwYWRkaW5nWSIpJiZKQShmLHtwYWRkaW5nVG9wOmYucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpmLnBhZGRpbmdZfSksemEoZiwicGFkZGluZyIpJiZKQShmLHtwYWRkaW5nTGVmdDpmLnBhZGRpbmcscGFkZGluZ1JpZ2h0OmYucGFkZGluZyxwYWRkaW5nVG9wOmYucGFkZGluZyxwYWRkaW5nQm90dG9tOmYucGFkZGluZ30pLEpBKGYsREJlKSxjcihbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxmdW5jdGlvbihwKXtmW3BdPU51bWJlcihmW3BdKX0pLHphKGYsIndpZHRoIikmJihmLl9wcmV2V2lkdGg9Zi53aWR0aCksemEoZiwiaGVpZ2h0IikmJihmLl9wcmV2SGVpZ2h0PWYuaGVpZ2h0KX0pLGkuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTt6YShmLCJsYWJlbCIpfHwoZi5sYWJlbD0iIiksSkEoZixPQmUpfSl9ZnVuY3Rpb24gUEJlKGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLm5vZGUoYSk7emEoZiwiX3ByZXZXaWR0aCIpP2Yud2lkdGg9Zi5fcHJldldpZHRoOmRlbGV0ZSBmLndpZHRoLHphKGYsIl9wcmV2SGVpZ2h0Iik/Zi5oZWlnaHQ9Zi5fcHJldkhlaWdodDpkZWxldGUgZi5oZWlnaHQsZGVsZXRlIGYuX3ByZXZXaWR0aCxkZWxldGUgZi5fcHJldkhlaWdodH0pfWZ1bmN0aW9uIGJQKGksYSl7dmFyIGY9aS5zZWxlY3QoImcuIithKTtyZXR1cm4gZi5lbXB0eSgpJiYoZj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhKSksZn1mdW5jdGlvbiB2RnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PWEuaGVpZ2h0LG09KHArdikqLjksYj1be3g6bS8yLHk6MH0se3g6bSx5Oi1tLzJ9LHt4Om0vMix5Oi1tfSx7eDowLHk6LW0vMn1dLEU9XzUoaSxtLG0sYik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBiMyhmLGIsXyl9LEV9ZnVuY3Rpb24gd0Z0KGksYSxmKXtjb25zdCB2PWEuaGVpZ2h0LG09di80LGI9YS53aWR0aCsyKm0sRT1be3g6bSx5OjB9LHt4OmItbSx5OjB9LHt4OmIseTotdi8yfSx7eDpiLW0seTotdn0se3g6bSx5Oi12fSx7eDowLHk6LXYvMn1dLF89XzUoaSxiLHYsRSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEwpe3JldHVybiBiMyhmLEUsTCl9LF99ZnVuY3Rpb24gbUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDotdi8yLHk6MH0se3g6cCx5OjB9LHt4OnAseTotdn0se3g6LXYvMix5Oi12fSx7eDowLHk6LXYvMn1dLGI9XzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24geUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDotMip2LzYseTowfSx7eDpwLXYvNix5OjB9LHt4OnArMip2LzYseTotdn0se3g6di82LHk6LXZ9XSxiPV81KGkscCx2LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gYjMoZixtLEUpfSxifWZ1bmN0aW9uIHhGdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHY9YS5oZWlnaHQsbT1be3g6Mip2LzYseTowfSx7eDpwK3YvNix5OjB9LHt4OnAtMip2LzYseTotdn0se3g6LXYvNix5Oi12fV0sYj1fNShpLHAsdixtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBrRnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PWEuaGVpZ2h0LG09W3t4Oi0yKnYvNix5OjB9LHt4OnArMip2LzYseTowfSx7eDpwLXYvNix5Oi12fSx7eDp2LzYseTotdn1dLGI9XzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24gRUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDp2LzYseTowfSx7eDpwLXYvNix5OjB9LHt4OnArMip2LzYseTotdn0se3g6LTIqdi82LHk6LXZ9XSxiPV81KGkscCx2LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gYjMoZixtLEUpfSxifWZ1bmN0aW9uIFRGdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHY9YS5oZWlnaHQsbT1be3g6MCx5OjB9LHt4OnArdi8yLHk6MH0se3g6cCx5Oi12LzJ9LHt4OnArdi8yLHk6LXZ9LHt4OjAseTotdn1dLGI9XzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24gQ0Z0KGksYSxmKXtjb25zdCBwPWEuaGVpZ2h0LHY9YS53aWR0aCtwLzQsbT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixwLzIpLmF0dHIoInJ5IixwLzIpLmF0dHIoIngiLC12LzIpLmF0dHIoInkiLC1wLzIpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLHApO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gbTB0KGYsYil9LG19ZnVuY3Rpb24gX0Z0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDowLHk6MH0se3g6cCx5OjB9LHt4OnAseTotdn0se3g6MCx5Oi12fSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpwKzgseTowfSx7eDpwKzgseTotdn0se3g6LTgseTotdn0se3g6LTgseTowfV0sYj1fNShpLHAsdixtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBTRnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PXAvMixtPXYvKDIuNStwLzUwKSxiPWEuaGVpZ2h0K20sRT0iTSAwLCIrbSsiIGEgIit2KyIsIittKyIgMCwwLDAgIitwKyIgMCBhICIrdisiLCIrbSsiIDAsMCwwICIrLXArIiAwIGwgMCwiK2IrIiBhICIrdisiLCIrbSsiIDAsMCwwICIrcCsiIDAgbCAwLCIrLWIsXz1pLmF0dHIoImxhYmVsLW9mZnNldC15IixtKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixFKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcC8yKyIsIistKGIvMittKSsiKSIpO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihMKXtjb25zdCBOPW0wdChmLEwpLEI9Ti54LWYueDtpZih2IT0wJiYoTWF0aC5hYnMoQik8Zi53aWR0aC8yfHxNYXRoLmFicyhCKT09Zi53aWR0aC8yJiZNYXRoLmFicyhOLnktZi55KT5mLmhlaWdodC8yLW0pKXtsZXQgaj1tKm0qKDEtQipCLyh2KnYpKTtqIT0wJiYoaj1NYXRoLnNxcnQoaikpLGo9bS1qLEwueS1mLnk+MCYmKGo9LWopLE4ueSs9an1yZXR1cm4gTn0sX31mdW5jdGlvbiBGQmUoaSl7aS5zaGFwZXMoKS5xdWVzdGlvbj12RnQsaS5zaGFwZXMoKS5oZXhhZ29uPXdGdCxpLnNoYXBlcygpLnN0YWRpdW09Q0Z0LGkuc2hhcGVzKCkuc3Vicm91dGluZT1fRnQsaS5zaGFwZXMoKS5jeWxpbmRlcj1TRnQsaS5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PW1GdCxpLnNoYXBlcygpLmxlYW5fcmlnaHQ9eUZ0LGkuc2hhcGVzKCkubGVhbl9sZWZ0PXhGdCxpLnNoYXBlcygpLnRyYXBlem9pZD1rRnQsaS5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPUVGdCxpLnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PVRGdH1mdW5jdGlvbiBCQmUoaSl7aSh7cXVlc3Rpb246dkZ0fSksaSh7aGV4YWdvbjp3RnR9KSxpKHtzdGFkaXVtOkNGdH0pLGkoe3N1YnJvdXRpbmU6X0Z0fSksaSh7Y3lsaW5kZXI6U0Z0fSksaSh7cmVjdF9sZWZ0X2ludl9hcnJvdzptRnR9KSxpKHtsZWFuX3JpZ2h0OnlGdH0pLGkoe2xlYW5fbGVmdDp4RnR9KSxpKHt0cmFwZXpvaWQ6a0Z0fSksaSh7aW52X3RyYXBlem9pZDpFRnR9KSxpKHtyZWN0X3JpZ2h0X2ludl9hcnJvdzpURnR9KX1mdW5jdGlvbiBfNShpLGEsZixwKXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LngrIiwiK3YueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWEvMisiLCIrZi8yKyIpIil9Y29uc3QgUkJlPXthZGRUb1JlbmRlcjpGQmUsYWRkVG9SZW5kZXJWMjpCQmV9LEFGdD17fSxqQmU9ZnVuY3Rpb24oaSl7Y29uc3QgYT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgZiBvZiBhKUFGdFtmXT1pW2ZdfSxMRnQ9ZnVuY3Rpb24oaSxhLGYscCx2LG0pe2NvbnN0IGI9cD9wLnNlbGVjdChgW2lkPSIke2Z9Il1gKTp5cihgW2lkPSIke2Z9Il1gKSxFPXZ8fGRvY3VtZW50O09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oTCl7Y29uc3QgTj1pW0xdO2xldCBCPSJkZWZhdWx0IjtOLmNsYXNzZXMubGVuZ3RoPjAmJihCPU4uY2xhc3Nlcy5qb2luKCIgIikpO2NvbnN0IGo9ZW0oTi5zdHlsZXMpO2xldCBSPU4udGV4dCE9PXZvaWQgMD9OLnRleHQ6Ti5pZCx6O2lmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBzdD17bGFiZWw6Ui5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csdXQ9PmA8aSBjbGFzcz0nJHt1dC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTt6PWQwdChiLHN0KS5ub2RlKCksei5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHopfWVsc2V7Y29uc3Qgc3Q9RS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO3N0LnNldEF0dHJpYnV0ZSgic3R5bGUiLGoubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCB1dD1SLnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgYnQgb2YgdXQpe2NvbnN0IG10PUUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7bXQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksbXQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLG10LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxtdC50ZXh0Q29udGVudD1idCxzdC5hcHBlbmRDaGlsZChtdCl9ej1zdH1sZXQgSz0wLGl0PSIiO3N3aXRjaChOLnR5cGUpe2Nhc2Uicm91bmQiOks9NSxpdD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOml0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOml0PSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjppdD0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOml0PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOml0PSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6aXQ9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOml0PSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6aXQ9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjppdD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOml0PSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6aXQ9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6aXQ9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6aXQ9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOml0PSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6aXQ9InJlY3QiO2JyZWFrO2RlZmF1bHQ6aXQ9InJlY3QifVV0Lndhcm4oIkFkZGluZyBub2RlIixOLmlkLE4uZG9tSWQpLGEuc2V0Tm9kZShtLmRiLmxvb2tVcERvbUlkKE4uaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpqLmxhYmVsU3R5bGUsc2hhcGU6aXQsbGFiZWw6eixyeDpLLHJ5OkssY2xhc3M6QixzdHlsZTpqLnN0eWxlLGlkOm0uZGIubG9va1VwRG9tSWQoTi5pZCl9KX0pfSxNRnQ9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPTAsdixtO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBiPWVtKGkuZGVmYXVsdFN0eWxlKTt2PWIuc3R5bGUsbT1iLmxhYmVsU3R5bGV9aS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ArKztjb25zdCBFPSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsXz0iTFMtIitiLnN0YXJ0LEw9IkxFLSIrYi5lbmQsTj17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/Ti5hcnJvd2hlYWQ9Im5vbmUiOk4uYXJyb3doZWFkPSJub3JtYWwiO2xldCBCPSIiLGo9IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgUj1lbShiLnN0eWxlKTtCPVIuc3R5bGUsaj1SLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpCPSJmaWxsOm5vbmUiLHYhPT12b2lkIDAmJihCPXYpLG0hPT12b2lkIDAmJihqPW0pO2JyZWFrO2Nhc2UiZG90dGVkIjpCPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpCPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfU4uc3R5bGU9QixOLmxhYmVsU3R5bGU9aixiLmludGVycG9sYXRlIT09dm9pZCAwP04uY3VydmU9WDIoYi5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/Ti5jdXJ2ZT1YMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6Ti5jdXJ2ZT1YMihBRnQuY3VydmUsaWcpLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoTi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihOLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixOLmxhYmVscG9zPSJjIixzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oTi5sYWJlbFR5cGU9Imh0bWwiLE4ubGFiZWw9YDxzcGFuIGlkPSJMLSR7RX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke199JyBMLSR7TH0iIHN0eWxlPSIke04ubGFiZWxTdHlsZX0iPiR7Yi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxSPT5gPGkgY2xhc3M9JyR7Ui5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTwvc3Bhbj5gKTooTi5sYWJlbFR5cGU9InRleHQiLE4ubGFiZWw9Yi50ZXh0LnJlcGxhY2UoWXIubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoTi5zdHlsZT1OLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLE4ubGFiZWxTdHlsZT1OLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLE4uaWQ9RSxOLmNsYXNzPV8rIiAiK0wsTi5taW5sZW49Yi5sZW5ndGh8fDEsYS5zZXRFZGdlKGYuZGIubG9va1VwRG9tSWQoYi5zdGFydCksZi5kYi5sb29rVXBEb21JZChiLmVuZCksTixwKX0pfSwkQmU9e3NldENvbmY6akJlLGFkZFZlcnRpY2VzOkxGdCxhZGRFZGdlczpNRnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBVdC5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxhLmRiLmdldENsYXNzZXMoKX0sZHJhdzpmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2NvbnN0e3NlY3VyaXR5TGV2ZWw6dixmbG93Y2hhcnQ6bX09TGUoKTtsZXQgYjt2PT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKHY9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz12PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bGV0IEw9cC5kYi5nZXREaXJlY3Rpb24oKTtMPT09dm9pZCAwJiYoTD0iVEQiKTtjb25zdCBOPW0ubm9kZVNwYWNpbmd8fDUwLEI9bS5yYW5rU3BhY2luZ3x8NTAsaj1uZXcgYTEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpMLG5vZGVzZXA6TixyYW5rc2VwOkIsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtmb3IobGV0IGR0PXoubGVuZ3RoLTE7ZHQ+PTA7ZHQtLSlSPXpbZHRdLHAuZGIuYWRkVmVydGV4KFIuaWQsUi50aXRsZSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMpO2NvbnN0IEs9cC5kYi5nZXRWZXJ0aWNlcygpO1V0Lndhcm4oIkdldCB2ZXJ0aWNlcyIsSyk7Y29uc3QgaXQ9cC5kYi5nZXRFZGdlcygpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sWkx0KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBkdD0wO2R0PFIubm9kZXMubGVuZ3RoO2R0KyspVXQud2FybigiU2V0dGluZyBzdWJncmFwaCIsUi5ub2Rlc1tkdF0scC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2R0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSksai5zZXRQYXJlbnQocC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2R0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSl9TEZ0KEssaixhLEUsXyxwKSxNRnQoaXQsaixwKTtjb25zdCB1dD1uZXcgSUJlO1JCZS5hZGRUb1JlbmRlcih1dCksdXQuYXJyb3dzKCkubm9uZT1mdW5jdGlvbihodCx3dCxYLHB0KXtjb25zdCB4dD1odC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTtwMyh4dCxYW3B0KyJTdHlsZSJdKX0sdXQuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKGh0LHd0KXtodC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O2NvbnN0IGJ0PUUuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLG10PUUuc2VsZWN0KCIjIithKyIgZyIpO2Zvcih1dChtdCxqKSxtdC5zZWxlY3RBbGwoImcubm9kZSIpLmF0dHIoInRpdGxlIixmdW5jdGlvbigpe3JldHVybiBwLmRiLmdldFRvb2x0aXAodGhpcy5pZCl9KSxwLmRiLmluZGV4Tm9kZXMoInN1YkdyYXBoIitzdCksc3Q9MDtzdDx6Lmxlbmd0aDtzdCsrKWlmKFI9eltzdF0sUi50aXRsZSE9PSJ1bmRlZmluZWQiKXtjb25zdCBkdD1fLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ErJyBbaWQ9IicrcC5kYi5sb29rVXBEb21JZChSLmlkKSsnIl0gcmVjdCcpLGh0PV8ucXVlcnlTZWxlY3RvckFsbCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKFIuaWQpKyciXScpLHd0PWR0WzBdLnguYmFzZVZhbC52YWx1ZSxYPWR0WzBdLnkuYmFzZVZhbC52YWx1ZSxwdD1kdFswXS53aWR0aC5iYXNlVmFsLnZhbHVlLHh0PXlyKGh0WzBdKS5zZWxlY3QoIi5sYWJlbCIpO3h0LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3d0K3B0LzJ9LCAke1grMTR9KWApLHh0LmF0dHIoImlkIixhKyJUZXh0Iik7Zm9yKGxldCBudD0wO250PFIuY2xhc3Nlcy5sZW5ndGg7bnQrKylodFswXS5jbGFzc0xpc3QuYWRkKFIuY2xhc3Nlc1tudF0pfWlmKCFtLmh0bWxMYWJlbHMpe2NvbnN0IGR0PV8ucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IGh0IG9mIGR0KXtjb25zdCB3dD1odC5nZXRCQm94KCksWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7WC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxYLnNldEF0dHJpYnV0ZSgicnkiLDApLFguc2V0QXR0cmlidXRlKCJ3aWR0aCIsd3Qud2lkdGgpLFguc2V0QXR0cmlidXRlKCJoZWlnaHQiLHd0LmhlaWdodCksaHQuaW5zZXJ0QmVmb3JlKFgsaHQuZmlyc3RDaGlsZCl9fWNUKGosYnQsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoKSxPYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtjb25zdCBodD1LW2R0XTtpZihodC5saW5rKXtjb25zdCB3dD1FLnNlbGVjdCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKGR0KSsnIl0nKTtpZih3dCl7Y29uc3QgWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsaHQuY2xhc3Nlcy5qb2luKCIgIikpLFguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsaHQubGluayksWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLHY9PT0ic2FuZGJveCI/WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLCJfdG9wIik6aHQubGlua1RhcmdldCYmWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLGh0LmxpbmtUYXJnZXQpO2NvbnN0IHB0PXd0Lmluc2VydChmdW5jdGlvbigpe3JldHVybiBYfSwiOmZpcnN0LWNoaWxkIiksVT13dC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtVJiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVS5ub2RlKCl9KTtjb25zdCB4dD13dC5zZWxlY3QoIi5sYWJlbCIpO3h0JiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4geHQubm9kZSgpfSl9fX0pfX07ZnVuY3Rpb24gUzUoaSl7dmFyIGE9e29wdGlvbnM6e2RpcmVjdGVkOmkuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDppLmlzQ29tcG91bmQoKX0sbm9kZXM6ekJlKGkpLGVkZ2VzOnFCZShpKX07cmV0dXJuIFhoKGkuZ3JhcGgoKSl8fChhLnZhbHVlPVBPZShpLmdyYXBoKCkpKSxhfWZ1bmN0aW9uIHpCZShpKXtyZXR1cm4gT2YoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWkucGFyZW50KGEpLHY9e3Y6YX07cmV0dXJuIFhoKGYpfHwodi52YWx1ZT1mKSxYaChwKXx8KHYucGFyZW50PXApLHZ9KX1mdW5jdGlvbiBxQmUoaSl7cmV0dXJuIE9mKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD17djphLnYsdzphLnd9O3JldHVybiBYaChhLm5hbWUpfHwocC5uYW1lPWEubmFtZSksWGgoZil8fChwLnZhbHVlPWYpLHB9KX1jb25zdCBIQmU9KGksYSxmLHApPT57YS5mb3JFYWNoKHY9PntHQmVbdl0oaSxmLHApfSl9LEdCZT17ZXh0ZW5zaW9uOihpLGEsZik9PntVdC50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsZiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrYSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSxjb21wb3NpdGlvbjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrYSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGFnZ3JlZ2F0aW9uOihpLGEsZik9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2EpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2EpLmF0dHIoInJlZlgiLDYpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIithKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sbG9sbGlwb3A6KGksYSxmKT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2EpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSxwb2ludDooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNC41KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNpcmNsZTooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLGkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrYSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX19LElGdD1IQmU7ZnVuY3Rpb24gVkJlKGksYSl7YSYmaS5hdHRyKCJzdHlsZSIsYSl9ZnVuY3Rpb24gVUJlKGkpe2NvbnN0IGE9eXIoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksZj1hLmFwcGVuZCgieGh0bWw6ZGl2IikscD1pLmxhYmVsLHY9aS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIGYuaHRtbCgnPHNwYW4gY2xhc3M9IicrdisnIiAnKyhpLmxhYmVsU3R5bGU/J3N0eWxlPSInK2kubGFiZWxTdHlsZSsnIic6IiIpKyI+IitwKyI8L3NwYW4+IiksVkJlKGYsaS5sYWJlbFN0eWxlKSxmLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksZi5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxmLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGEubm9kZSgpfWNvbnN0IGhwPShpLGEsZixwKT0+e2xldCB2PWl8fCIiO2lmKHR5cGVvZiB2PT0ib2JqZWN0IiYmKHY9dlswXSksczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3Y9di5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksVXQuaW5mbygidmVydGV4VGV4dCIrdik7Y29uc3QgbT17aXNOb2RlOnAsbGFiZWw6blAodikucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLEU9PmA8aSBjbGFzcz0nJHtFLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTphLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBVQmUobSl9ZWxzZXtjb25zdCBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bS5zZXRBdHRyaWJ1dGUoInN0eWxlIixhLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBiPVtdO3R5cGVvZiB2PT0ic3RyaW5nIj9iPXYuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KHYpP2I9djpiPVtdO2Zvcihjb25zdCBFIG9mIGIpe2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7Xy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxfLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxfLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxmP18uc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOl8uc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLF8udGV4dENvbnRlbnQ9RS50cmltKCksbS5hcHBlbmRDaGlsZChfKX1yZXR1cm4gbX19O2Z1bmN0aW9uIFdCZShpLGEpe3ZhcntpbmNsdWRlSW1hZ2VBbHQ6Zj0hMH09YXx8e307cmV0dXJuIERGdChpLGYpfWZ1bmN0aW9uIERGdChpLGEpe3JldHVybiBpJiZ0eXBlb2YgaT09Im9iamVjdCImJihpLnZhbHVlfHwoYT9pLmFsdDoiIil8fCJjaGlsZHJlbiJpbiBpJiZPRnQoaS5jaGlsZHJlbixhKXx8QXJyYXkuaXNBcnJheShpKSYmT0Z0KGksYSkpfHwiIn1mdW5jdGlvbiBPRnQoaSxhKXtmb3IodmFyIGY9W10scD0tMTsrK3A8aS5sZW5ndGg7KWZbcF09REZ0KGlbcF0sYSk7cmV0dXJuIGYuam9pbigiIil9ZnVuY3Rpb24gdjMoaSxhLGYscCl7Y29uc3Qgdj1pLmxlbmd0aDtsZXQgbT0wLGI7aWYoYTwwP2E9LWE+dj8wOnYrYTphPWE+dj92OmEsZj1mPjA/ZjowLHAubGVuZ3RoPDFlNCliPUFycmF5LmZyb20ocCksYi51bnNoaWZ0KGEsZiksW10uc3BsaWNlLmFwcGx5KGksYik7ZWxzZSBmb3IoZiYmW10uc3BsaWNlLmFwcGx5KGksW2EsZl0pO208cC5sZW5ndGg7KWI9cC5zbGljZShtLG0rMWU0KSxiLnVuc2hpZnQoYSwwKSxbXS5zcGxpY2UuYXBwbHkoaSxiKSxtKz0xZTQsYSs9MWU0fWZ1bmN0aW9uIGV2KGksYSl7cmV0dXJuIGkubGVuZ3RoPjA/KHYzKGksaS5sZW5ndGgsMCxhKSxpKTphfWNvbnN0IE5GdD17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBLQmUoaSl7Y29uc3QgYT17fTtsZXQgZj0tMTtmb3IoOysrZjxpLmxlbmd0aDspWUJlKGEsaVtmXSk7cmV0dXJuIGF9ZnVuY3Rpb24gWUJlKGksYSl7bGV0IGY7Zm9yKGYgaW4gYSl7Y29uc3Qgdj0oTkZ0LmNhbGwoaSxmKT9pW2ZdOnZvaWQgMCl8fChpW2ZdPXt9KSxtPWFbZl07bGV0IGI7Zm9yKGIgaW4gbSl7TkZ0LmNhbGwodixiKXx8KHZbYl09W10pO2NvbnN0IEU9bVtiXTtYQmUodltiXSxBcnJheS5pc0FycmF5KEUpP0U6RT9bRV06W10pfX19ZnVuY3Rpb24gWEJlKGksYSl7bGV0IGY9LTE7Y29uc3QgcD1bXTtmb3IoOysrZjxhLmxlbmd0aDspKGFbZl0uYWRkPT09ImFmdGVyIj9pOnApLnB1c2goYVtmXSk7djMoaSwwLDAscCl9Y29uc3QgUUJlPS9bIS0vOi1AWy1gey1+XHUwMEExXHUwMEE3XHUwMEFCXHUwMEI2XHUwMEI3XHUwMEJCXHUwMEJGXHUwMzdFXHUwMzg3XHUwNTVBLVx1MDU1Rlx1MDU4OVx1MDU4QVx1MDVCRVx1MDVDMFx1MDVDM1x1MDVDNlx1MDVGM1x1MDVGNFx1MDYwOVx1MDYwQVx1MDYwQ1x1MDYwRFx1MDYxQlx1MDYxRVx1MDYxRlx1MDY2QS1cdTA2NkRcdTA2RDRcdTA3MDAtXHUwNzBEXHUwN0Y3LVx1MDdGOVx1MDgzMC1cdTA4M0VcdTA4NUVcdTA5NjRcdTA5NjVcdTA5NzBcdTA5RkRcdTBBNzZcdTBBRjBcdTBDNzdcdTBDODRcdTBERjRcdTBFNEZcdTBFNUFcdTBFNUJcdTBGMDQtXHUwRjEyXHUwRjE0XHUwRjNBLVx1MEYzRFx1MEY4NVx1MEZEMC1cdTBGRDRcdTBGRDlcdTBGREFcdTEwNEEtXHUxMDRGXHUxMEZCXHUxMzYwLVx1MTM2OFx1MTQwMFx1MTY2RVx1MTY5Qlx1MTY5Q1x1MTZFQi1cdTE2RURcdTE3MzVcdTE3MzZcdTE3RDQtXHUxN0Q2XHUxN0Q4LVx1MTdEQVx1MTgwMC1cdTE4MEFcdTE5NDRcdTE5NDVcdTFBMUVcdTFBMUZcdTFBQTAtXHUxQUE2XHUxQUE4LVx1MUFBRFx1MUI1QS1cdTFCNjBcdTFCRkMtXHUxQkZGXHUxQzNCLVx1MUMzRlx1MUM3RVx1MUM3Rlx1MUNDMC1cdTFDQzdcdTFDRDNcdTIwMTAtXHUyMDI3XHUyMDMwLVx1MjA0M1x1MjA0NS1cdTIwNTFcdTIwNTMtXHUyMDVFXHUyMDdEXHUyMDdFXHUyMDhEXHUyMDhFXHUyMzA4LVx1MjMwQlx1MjMyOVx1MjMyQVx1Mjc2OC1cdTI3NzVcdTI3QzVcdTI3QzZcdTI3RTYtXHUyN0VGXHUyOTgzLVx1Mjk5OFx1MjlEOC1cdTI5REJcdTI5RkNcdTI5RkRcdTJDRjktXHUyQ0ZDXHUyQ0ZFXHUyQ0ZGXHUyRDcwXHUyRTAwLVx1MkUyRVx1MkUzMC1cdTJFNEZcdTJFNTJcdTMwMDEtXHUzMDAzXHUzMDA4LVx1MzAxMVx1MzAxNC1cdTMwMUZcdTMwMzBcdTMwM0RcdTMwQTBcdTMwRkJcdUE0RkVcdUE0RkZcdUE2MEQtXHVBNjBGXHVBNjczXHVBNjdFXHVBNkYyLVx1QTZGN1x1QTg3NC1cdUE4NzdcdUE4Q0VcdUE4Q0ZcdUE4RjgtXHVBOEZBXHVBOEZDXHVBOTJFXHVBOTJGXHVBOTVGXHVBOUMxLVx1QTlDRFx1QTlERVx1QTlERlx1QUE1Qy1cdUFBNUZcdUFBREVcdUFBREZcdUFBRjBcdUFBRjFcdUFCRUJcdUZEM0VcdUZEM0ZcdUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjFcdUZFNjNcdUZFNjhcdUZFNkFcdUZFNkJcdUZGMDEtXHVGRjAzXHVGRjA1LVx1RkYwQVx1RkYwQy1cdUZGMEZcdUZGMUFcdUZGMUJcdUZGMUZcdUZGMjBcdUZGM0ItXHVGRjNEXHVGRjNGXHVGRjVCXHVGRjVEXHVGRjVGLVx1RkY2NV0vLHczPWNrKC9bQS1aYS16XS8pLHgwdD1jaygvXGQvKSxaQmU9Y2soL1tcZEEtRmEtZl0vKSxvbT1jaygvW1xkQS1aYS16XS8pLEpCZT1jaygvWyEtLzotQFstYHstfl0vKSxQRnQ9Y2soL1sjLScqK1wtLTk9P0EtWl4tfl0vKTtmdW5jdGlvbiBrMHQoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwzMnx8aT09PTEyNyl9ZnVuY3Rpb24gbnYoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwwfHxpPT09MzIpfWZ1bmN0aW9uIE5hKGkpe3JldHVybiBpIT09bnVsbCYmaTwtMn1mdW5jdGlvbiBOZihpKXtyZXR1cm4gaT09PS0yfHxpPT09LTF8fGk9PT0zMn1jb25zdCB0UmU9Y2soL1xzLyksZVJlPWNrKFFCZSk7ZnVuY3Rpb24gY2soaSl7cmV0dXJuIGE7ZnVuY3Rpb24gYShmKXtyZXR1cm4gZiE9PW51bGwmJmkudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGYpKX19ZnVuY3Rpb24gR3UoaSxhLGYscCl7Y29uc3Qgdj1wP3AtMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IG09MDtyZXR1cm4gYjtmdW5jdGlvbiBiKF8pe3JldHVybiBOZihfKT8oaS5lbnRlcihmKSxFKF8pKTphKF8pfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIE5mKF8pJiZtKys8dj8oaS5jb25zdW1lKF8pLEUpOihpLmV4aXQoZiksYShfKSl9fWNvbnN0IG5SZT17dG9rZW5pemU6clJlfTtmdW5jdGlvbiByUmUoaSl7Y29uc3QgYT1pLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5jb250ZW50SW5pdGlhbCxwLHYpO2xldCBmO3JldHVybiBhO2Z1bmN0aW9uIHAoRSl7aWYoRT09PW51bGwpe2kuY29uc3VtZShFKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsaW5lRW5kaW5nIiksR3UoaSxhLCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gdihFKXtyZXR1cm4gaS5lbnRlcigicGFyYWdyYXBoIiksbShFKX1mdW5jdGlvbiBtKEUpe2NvbnN0IF89aS5lbnRlcigiY2h1bmtUZXh0Iix7Y29udGVudFR5cGU6InRleHQiLHByZXZpb3VzOmZ9KTtyZXR1cm4gZiYmKGYubmV4dD1fKSxmPV8sYihFKX1mdW5jdGlvbiBiKEUpe2lmKEU9PT1udWxsKXtpLmV4aXQoImNodW5rVGV4dCIpLGkuZXhpdCgicGFyYWdyYXBoIiksaS5jb25zdW1lKEUpO3JldHVybn1yZXR1cm4gTmEoRSk/KGkuY29uc3VtZShFKSxpLmV4aXQoImNodW5rVGV4dCIpLG0pOihpLmNvbnN1bWUoRSksYil9fWNvbnN0IGlSZT17dG9rZW5pemU6c1JlfSxGRnQ9e3Rva2VuaXplOmFSZX07ZnVuY3Rpb24gc1JlKGkpe2NvbnN0IGE9dGhpcyxmPVtdO2xldCBwPTAsdixtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShidCl7aWYocDxmLmxlbmd0aCl7Y29uc3QgbXQ9ZltwXTtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT1tdFsxXSxpLmF0dGVtcHQobXRbMF0uY29udGludWF0aW9uLF8sTCkoYnQpfXJldHVybiBMKGJ0KX1mdW5jdGlvbiBfKGJ0KXtpZihwKyssYS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93KXthLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwLHYmJnV0KCk7Y29uc3QgbXQ9YS5ldmVudHMubGVuZ3RoO2xldCB5dD1tdCxkdDtmb3IoO3l0LS07KWlmKGEuZXZlbnRzW3l0XVswXT09PSJleGl0IiYmYS5ldmVudHNbeXRdWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7ZHQ9YS5ldmVudHNbeXRdWzFdLmVuZDticmVha31zdChwKTtsZXQgaHQ9bXQ7Zm9yKDtodDxhLmV2ZW50cy5sZW5ndGg7KWEuZXZlbnRzW2h0XVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxkdCksaHQrKztyZXR1cm4gdjMoYS5ldmVudHMseXQrMSwwLGEuZXZlbnRzLnNsaWNlKG10KSksYS5ldmVudHMubGVuZ3RoPWh0LEwoYnQpfXJldHVybiBFKGJ0KX1mdW5jdGlvbiBMKGJ0KXtpZihwPT09Zi5sZW5ndGgpe2lmKCF2KXJldHVybiBqKGJ0KTtpZih2LmN1cnJlbnRDb25zdHJ1Y3QmJnYuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSlyZXR1cm4geihidCk7YS5pbnRlcnJ1cHQ9ISEodi5jdXJyZW50Q29uc3RydWN0JiYhdi5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFjayl9cmV0dXJuIGEuY29udGFpbmVyU3RhdGU9e30saS5jaGVjayhGRnQsTixCKShidCl9ZnVuY3Rpb24gTihidCl7cmV0dXJuIHYmJnV0KCksc3QocCksaihidCl9ZnVuY3Rpb24gQihidCl7cmV0dXJuIGEucGFyc2VyLmxhenlbYS5ub3coKS5saW5lXT1wIT09Zi5sZW5ndGgsYj1hLm5vdygpLm9mZnNldCx6KGJ0KX1mdW5jdGlvbiBqKGJ0KXtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT17fSxpLmF0dGVtcHQoRkZ0LFIseikoYnQpfWZ1bmN0aW9uIFIoYnQpe3JldHVybiBwKyssZi5wdXNoKFthLmN1cnJlbnRDb25zdHJ1Y3QsYS5jb250YWluZXJTdGF0ZV0pLGooYnQpfWZ1bmN0aW9uIHooYnQpe2lmKGJ0PT09bnVsbCl7diYmdXQoKSxzdCgwKSxpLmNvbnN1bWUoYnQpO3JldHVybn1yZXR1cm4gdj12fHxhLnBhcnNlci5mbG93KGEubm93KCkpLGkuZW50ZXIoImNodW5rRmxvdyIse2NvbnRlbnRUeXBlOiJmbG93IixwcmV2aW91czptLF90b2tlbml6ZXI6dn0pLEsoYnQpfWZ1bmN0aW9uIEsoYnQpe2lmKGJ0PT09bnVsbCl7aXQoaS5leGl0KCJjaHVua0Zsb3ciKSwhMCksc3QoMCksaS5jb25zdW1lKGJ0KTtyZXR1cm59cmV0dXJuIE5hKGJ0KT8oaS5jb25zdW1lKGJ0KSxpdChpLmV4aXQoImNodW5rRmxvdyIpKSxwPTAsYS5pbnRlcnJ1cHQ9dm9pZCAwLEUpOihpLmNvbnN1bWUoYnQpLEspfWZ1bmN0aW9uIGl0KGJ0LG10KXtjb25zdCB5dD1hLnNsaWNlU3RyZWFtKGJ0KTtpZihtdCYmeXQucHVzaChudWxsKSxidC5wcmV2aW91cz1tLG0mJihtLm5leHQ9YnQpLG09YnQsdi5kZWZpbmVTa2lwKGJ0LnN0YXJ0KSx2LndyaXRlKHl0KSxhLnBhcnNlci5sYXp5W2J0LnN0YXJ0LmxpbmVdKXtsZXQgZHQ9di5ldmVudHMubGVuZ3RoO2Zvcig7ZHQtLTspaWYodi5ldmVudHNbZHRdWzFdLnN0YXJ0Lm9mZnNldDxiJiYoIXYuZXZlbnRzW2R0XVsxXS5lbmR8fHYuZXZlbnRzW2R0XVsxXS5lbmQub2Zmc2V0PmIpKXJldHVybjtjb25zdCBodD1hLmV2ZW50cy5sZW5ndGg7bGV0IHd0PWh0LFgscHQ7Zm9yKDt3dC0tOylpZihhLmV2ZW50c1t3dF1bMF09PT0iZXhpdCImJmEuZXZlbnRzW3d0XVsxXS50eXBlPT09ImNodW5rRmxvdyIpe2lmKFgpe3B0PWEuZXZlbnRzW3d0XVsxXS5lbmQ7YnJlYWt9WD0hMH1mb3Ioc3QocCksZHQ9aHQ7ZHQ8YS5ldmVudHMubGVuZ3RoOylhLmV2ZW50c1tkdF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30scHQpLGR0Kys7djMoYS5ldmVudHMsd3QrMSwwLGEuZXZlbnRzLnNsaWNlKGh0KSksYS5ldmVudHMubGVuZ3RoPWR0fX1mdW5jdGlvbiBzdChidCl7bGV0IG10PWYubGVuZ3RoO2Zvcig7bXQtLSA+YnQ7KXtjb25zdCB5dD1mW210XTthLmNvbnRhaW5lclN0YXRlPXl0WzFdLHl0WzBdLmV4aXQuY2FsbChhLGkpfWYubGVuZ3RoPWJ0fWZ1bmN0aW9uIHV0KCl7di53cml0ZShbbnVsbF0pLG09dm9pZCAwLHY9dm9pZCAwLGEuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDB9fWZ1bmN0aW9uIGFSZShpLGEsZil7cmV0dXJuIEd1KGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZG9jdW1lbnQsYSxmKSwibGluZVByZWZpeCIsdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KX1mdW5jdGlvbiBCRnQoaSl7aWYoaT09PW51bGx8fG52KGkpfHx0UmUoaSkpcmV0dXJuIDE7aWYoZVJlKGkpKXJldHVybiAyfWZ1bmN0aW9uIEUwdChpLGEsZil7Y29uc3QgcD1bXTtsZXQgdj0tMTtmb3IoOysrdjxpLmxlbmd0aDspe2NvbnN0IG09aVt2XS5yZXNvbHZlQWxsO20mJiFwLmluY2x1ZGVzKG0pJiYoYT1tKGEsZikscC5wdXNoKG0pKX1yZXR1cm4gYX1jb25zdCBUMHQ9e25hbWU6ImF0dGVudGlvbiIsdG9rZW5pemU6Y1JlLHJlc29sdmVBbGw6b1JlfTtmdW5jdGlvbiBvUmUoaSxhKXtsZXQgZj0tMSxwLHYsbSxiLEUsXyxMLE47Zm9yKDsrK2Y8aS5sZW5ndGg7KWlmKGlbZl1bMF09PT0iZW50ZXIiJiZpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiZpW2ZdWzFdLl9jbG9zZSl7Zm9yKHA9ZjtwLS07KWlmKGlbcF1bMF09PT0iZXhpdCImJmlbcF1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJmlbcF1bMV0uX29wZW4mJmEuc2xpY2VTZXJpYWxpemUoaVtwXVsxXSkuY2hhckNvZGVBdCgwKT09PWEuc2xpY2VTZXJpYWxpemUoaVtmXVsxXSkuY2hhckNvZGVBdCgwKSl7aWYoKGlbcF1bMV0uX2Nsb3NlfHxpW2ZdWzFdLl9vcGVuKSYmKGlbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMyYmISgoaVtwXVsxXS5lbmQub2Zmc2V0LWlbcF1bMV0uc3RhcnQub2Zmc2V0K2lbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMykpY29udGludWU7Xz1pW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQ+MSYmaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PjE/MjoxO2NvbnN0IEI9T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLmVuZCksaj1PYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpO1JGdChCLC1fKSxSRnQoaixfKSxiPXt0eXBlOl8+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpCLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbcF1bMV0uZW5kKX0sRT17dHlwZTpfPjE/InN0cm9uZ1NlcXVlbmNlIjoiZW1waGFzaXNTZXF1ZW5jZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW2ZdWzFdLnN0YXJ0KSxlbmQ6an0sbT17dHlwZTpfPjE/InN0cm9uZ1RleHQiOiJlbXBoYXNpc1RleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpfSx2PXt0eXBlOl8+MT8ic3Ryb25nIjoiZW1waGFzaXMiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30sRS5lbmQpfSxpW3BdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGIuc3RhcnQpLGlbZl1bMV0uc3RhcnQ9T2JqZWN0LmFzc2lnbih7fSxFLmVuZCksTD1bXSxpW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQmJihMPWV2KEwsW1siZW50ZXIiLGlbcF1bMV0sYV0sWyJleGl0IixpW3BdWzFdLGFdXSkpLEw9ZXYoTCxbWyJlbnRlciIsdixhXSxbImVudGVyIixiLGFdLFsiZXhpdCIsYixhXSxbImVudGVyIixtLGFdXSksTD1ldihMLEUwdChhLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxpLnNsaWNlKHArMSxmKSxhKSksTD1ldihMLFtbImV4aXQiLG0sYV0sWyJlbnRlciIsRSxhXSxbImV4aXQiLEUsYV0sWyJleGl0Iix2LGFdXSksaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PyhOPTIsTD1ldihMLFtbImVudGVyIixpW2ZdWzFdLGFdLFsiZXhpdCIsaVtmXVsxXSxhXV0pKTpOPTAsdjMoaSxwLTEsZi1wKzMsTCksZj1wK0wubGVuZ3RoLU4tMjticmVha319Zm9yKGY9LTE7KytmPGkubGVuZ3RoOylpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiYoaVtmXVsxXS50eXBlPSJkYXRhIik7cmV0dXJuIGl9ZnVuY3Rpb24gY1JlKGksYSl7Y29uc3QgZj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbCxwPXRoaXMucHJldmlvdXMsdj1CRnQocCk7bGV0IG07cmV0dXJuIGI7ZnVuY3Rpb24gYihfKXtyZXR1cm4gaS5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKSxtPV8sRShfKX1mdW5jdGlvbiBFKF8pe2lmKF89PT1tKXJldHVybiBpLmNvbnN1bWUoXyksRTtjb25zdCBMPWkuZXhpdCgiYXR0ZW50aW9uU2VxdWVuY2UiKSxOPUJGdChfKSxCPSFOfHxOPT09MiYmdnx8Zi5pbmNsdWRlcyhfKSxqPSF2fHx2PT09MiYmTnx8Zi5pbmNsdWRlcyhwKTtyZXR1cm4gTC5fb3Blbj0hIShtPT09NDI/QjpCJiYodnx8IWopKSxMLl9jbG9zZT0hIShtPT09NDI/ajpqJiYoTnx8IUIpKSxhKF8pfX1mdW5jdGlvbiBSRnQoaSxhKXtpLmNvbHVtbis9YSxpLm9mZnNldCs9YSxpLl9idWZmZXJJbmRleCs9YX1jb25zdCB1UmU9e25hbWU6ImF1dG9saW5rIix0b2tlbml6ZTpsUmV9O2Z1bmN0aW9uIGxSZShpLGEsZil7bGV0IHA9MTtyZXR1cm4gdjtmdW5jdGlvbiB2KHope3JldHVybiBpLmVudGVyKCJhdXRvbGluayIpLGkuZW50ZXIoImF1dG9saW5rTWFya2VyIiksaS5jb25zdW1lKHopLGkuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSxpLmVudGVyKCJhdXRvbGlua1Byb3RvY29sIiksbX1mdW5jdGlvbiBtKHope3JldHVybiB3Myh6KT8oaS5jb25zdW1lKHopLGIpOlBGdCh6KT9MKHopOmYoeil9ZnVuY3Rpb24gYih6KXtyZXR1cm4gej09PTQzfHx6PT09NDV8fHo9PT00Nnx8b20oeik/RSh6KTpMKHopfWZ1bmN0aW9uIEUoeil7cmV0dXJuIHo9PT01OD8oaS5jb25zdW1lKHopLF8pOih6PT09NDN8fHo9PT00NXx8ej09PTQ2fHxvbSh6KSkmJnArKzwzMj8oaS5jb25zdW1lKHopLEUpOkwoeil9ZnVuY3Rpb24gXyh6KXtyZXR1cm4gej09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKSxSKHopKTp6PT09bnVsbHx8ej09PTMyfHx6PT09NjB8fGswdCh6KT9mKHopOihpLmNvbnN1bWUoeiksXyl9ZnVuY3Rpb24gTCh6KXtyZXR1cm4gej09PTY0PyhpLmNvbnN1bWUoeikscD0wLE4pOlBGdCh6KT8oaS5jb25zdW1lKHopLEwpOmYoeil9ZnVuY3Rpb24gTih6KXtyZXR1cm4gb20oeik/Qih6KTpmKHopfWZ1bmN0aW9uIEIoeil7cmV0dXJuIHo9PT00Nj8oaS5jb25zdW1lKHopLHA9MCxOKTp6PT09NjI/KGkuZXhpdCgiYXV0b2xpbmtQcm90b2NvbCIpLnR5cGU9ImF1dG9saW5rRW1haWwiLFIoeikpOmooeil9ZnVuY3Rpb24gaih6KXtyZXR1cm4oej09PTQ1fHxvbSh6KSkmJnArKzw2Mz8oaS5jb25zdW1lKHopLHo9PT00NT9qOkIpOmYoeil9ZnVuY3Rpb24gUih6KXtyZXR1cm4gaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoeiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZXhpdCgiYXV0b2xpbmsiKSxhfX1jb25zdCBsSz17dG9rZW5pemU6aFJlLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIGhSZShpLGEsZil7cmV0dXJuIEd1KGkscCwibGluZVByZWZpeCIpO2Z1bmN0aW9uIHAodil7cmV0dXJuIHY9PT1udWxsfHxOYSh2KT9hKHYpOmYodil9fWNvbnN0IGpGdD17bmFtZToiYmxvY2tRdW90ZSIsdG9rZW5pemU6ZlJlLGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6ZFJlfSxleGl0OmdSZX07ZnVuY3Rpb24gZlJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtpZihiPT09NjIpe2NvbnN0IEU9cC5jb250YWluZXJTdGF0ZTtyZXR1cm4gRS5vcGVufHwoaS5lbnRlcigiYmxvY2tRdW90ZSIse19jb250YWluZXI6ITB9KSxFLm9wZW49ITApLGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXgiKSxpLmVudGVyKCJibG9ja1F1b3RlTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZU1hcmtlciIpLG19cmV0dXJuIGYoYil9ZnVuY3Rpb24gbShiKXtyZXR1cm4gTmYoYik/KGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSxpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxhKTooaS5leGl0KCJibG9ja1F1b3RlUHJlZml4IiksYShiKSl9fWZ1bmN0aW9uIGRSZShpLGEsZil7cmV0dXJuIEd1KGksaS5hdHRlbXB0KGpGdCxhLGYpLCJsaW5lUHJlZml4Iix0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpfWZ1bmN0aW9uIGdSZShpKXtpLmV4aXQoImJsb2NrUXVvdGUiKX1jb25zdCAkRnQ9e25hbWU6ImNoYXJhY3RlckVzY2FwZSIsdG9rZW5pemU6cFJlfTtmdW5jdGlvbiBwUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAobSl7cmV0dXJuIGkuZW50ZXIoImNoYXJhY3RlckVzY2FwZSIpLGkuZW50ZXIoImVzY2FwZU1hcmtlciIpLGkuY29uc3VtZShtKSxpLmV4aXQoImVzY2FwZU1hcmtlciIpLHZ9ZnVuY3Rpb24gdihtKXtyZXR1cm4gSkJlKG0pPyhpLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLGkuY29uc3VtZShtKSxpLmV4aXQoImNoYXJhY3RlckVzY2FwZVZhbHVlIiksaS5leGl0KCJjaGFyYWN0ZXJFc2NhcGUiKSxhKTpmKG0pfX1jb25zdCB6RnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaSIpO2Z1bmN0aW9uIEMwdChpKXtjb25zdCBhPSImIitpKyI7Ijt6RnQuaW5uZXJIVE1MPWE7Y29uc3QgZj16RnQudGV4dENvbnRlbnQ7cmV0dXJuIGYuY2hhckNvZGVBdChmLmxlbmd0aC0xKT09PTU5JiZpIT09InNlbWkifHxmPT09YT8hMTpmfWNvbnN0IHFGdD17bmFtZToiY2hhcmFjdGVyUmVmZXJlbmNlIix0b2tlbml6ZTpiUmV9O2Z1bmN0aW9uIGJSZShpLGEsZil7Y29uc3QgcD10aGlzO2xldCB2PTAsbSxiO3JldHVybiBFO2Z1bmN0aW9uIEUoQil7cmV0dXJuIGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZSIpLGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShCKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLF99ZnVuY3Rpb24gXyhCKXtyZXR1cm4gQj09PTM1PyhpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLEwpOihpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLG09MzEsYj1vbSxOKEIpKX1mdW5jdGlvbiBMKEIpe3JldHVybiBCPT09ODh8fEI9PT0xMjA/KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKSxpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLG09NixiPVpCZSxOKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxtPTcsYj14MHQsTihCKSl9ZnVuY3Rpb24gTihCKXtsZXQgajtyZXR1cm4gQj09PTU5JiZ2PyhqPWkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxiPT09b20mJiFDMHQocC5zbGljZVNlcmlhbGl6ZShqKSk/ZihCKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxhKSk6YihCKSYmdisrPG0/KGkuY29uc3VtZShCKSxOKTpmKEIpfX1jb25zdCBIRnQ9e25hbWU6ImNvZGVGZW5jZWQiLHRva2VuaXplOnZSZSxjb25jcmV0ZTohMH07ZnVuY3Rpb24gdlJlKGksYSxmKXtjb25zdCBwPXRoaXMsdj17dG9rZW5pemU6eXQscGFydGlhbDohMH0sbT17dG9rZW5pemU6bXQscGFydGlhbDohMH0sYj10aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGgtMV0sRT1iJiZiWzFdLnR5cGU9PT0ibGluZVByZWZpeCI/YlsyXS5zbGljZVNlcmlhbGl6ZShiWzFdLCEwKS5sZW5ndGg6MDtsZXQgXz0wLEw7cmV0dXJuIE47ZnVuY3Rpb24gTihkdCl7cmV0dXJuIGkuZW50ZXIoImNvZGVGZW5jZWQiKSxpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSxpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLEw9ZHQsQihkdCl9ZnVuY3Rpb24gQihkdCl7cmV0dXJuIGR0PT09TD8oaS5jb25zdW1lKGR0KSxfKyssQik6KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxfPDM/ZihkdCk6R3UoaSxqLCJ3aGl0ZXNwYWNlIikoZHQpKX1mdW5jdGlvbiBqKGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxOYShkdCk/aXQoZHQpOihpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLFIoZHQpKX1mdW5jdGlvbiBSKGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxudihkdCk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxHdShpLHosIndoaXRlc3BhY2UiKShkdCkpOmR0PT09OTYmJmR0PT09TD9mKGR0KTooaS5jb25zdW1lKGR0KSxSKX1mdW5jdGlvbiB6KGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxOYShkdCk/aXQoZHQpOihpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VNZXRhIiksaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEsoZHQpKX1mdW5jdGlvbiBLKGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxOYShkdCk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoImNvZGVGZW5jZWRGZW5jZU1ldGEiKSxpdChkdCkpOmR0PT09OTYmJmR0PT09TD9mKGR0KTooaS5jb25zdW1lKGR0KSxLKX1mdW5jdGlvbiBpdChkdCl7cmV0dXJuIGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlIikscC5pbnRlcnJ1cHQ/YShkdCk6c3QoZHQpfWZ1bmN0aW9uIHN0KGR0KXtyZXR1cm4gZHQ9PT1udWxsP2J0KGR0KTpOYShkdCk/aS5hdHRlbXB0KG0saS5hdHRlbXB0KHYsYnQsRT9HdShpLHN0LCJsaW5lUHJlZml4IixFKzEpOnN0KSxidCkoZHQpOihpLmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksdXQoZHQpKX1mdW5jdGlvbiB1dChkdCl7cmV0dXJuIGR0PT09bnVsbHx8TmEoZHQpPyhpLmV4aXQoImNvZGVGbG93VmFsdWUiKSxzdChkdCkpOihpLmNvbnN1bWUoZHQpLHV0KX1mdW5jdGlvbiBidChkdCl7cmV0dXJuIGkuZXhpdCgiY29kZUZlbmNlZCIpLGEoZHQpfWZ1bmN0aW9uIG10KGR0LGh0LHd0KXtjb25zdCBYPXRoaXM7cmV0dXJuIHB0O2Z1bmN0aW9uIHB0KHh0KXtyZXR1cm4gZHQuZW50ZXIoImxpbmVFbmRpbmciKSxkdC5jb25zdW1lKHh0KSxkdC5leGl0KCJsaW5lRW5kaW5nIiksVX1mdW5jdGlvbiBVKHh0KXtyZXR1cm4gWC5wYXJzZXIubGF6eVtYLm5vdygpLmxpbmVdP3d0KHh0KTpodCh4dCl9fWZ1bmN0aW9uIHl0KGR0LGh0LHd0KXtsZXQgWD0wO3JldHVybiBHdShkdCxwdCwibGluZVByZWZpeCIsdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KTtmdW5jdGlvbiBwdChudCl7cmV0dXJuIGR0LmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSxkdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxVKG50KX1mdW5jdGlvbiBVKG50KXtyZXR1cm4gbnQ9PT1MPyhkdC5jb25zdW1lKG50KSxYKyssVSk6WDxfP3d0KG50KTooZHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxHdShkdCx4dCwid2hpdGVzcGFjZSIpKG50KSl9ZnVuY3Rpb24geHQobnQpe3JldHVybiBudD09PW51bGx8fE5hKG50KT8oZHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksaHQobnQpKTp3dChudCl9fX1jb25zdCBfMHQ9e25hbWU6ImNvZGVJbmRlbnRlZCIsdG9rZW5pemU6bVJlfSx3UmU9e3Rva2VuaXplOnlSZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBtUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdjtmdW5jdGlvbiB2KEwpe3JldHVybiBpLmVudGVyKCJjb2RlSW5kZW50ZWQiKSxHdShpLG0sImxpbmVQcmVmaXgiLDQrMSkoTCl9ZnVuY3Rpb24gbShMKXtjb25zdCBOPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gTiYmTlsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZOWzJdLnNsaWNlU2VyaWFsaXplKE5bMV0sITApLmxlbmd0aD49ND9iKEwpOmYoTCl9ZnVuY3Rpb24gYihMKXtyZXR1cm4gTD09PW51bGw/XyhMKTpOYShMKT9pLmF0dGVtcHQod1JlLGIsXykoTCk6KGkuZW50ZXIoImNvZGVGbG93VmFsdWUiKSxFKEwpKX1mdW5jdGlvbiBFKEwpe3JldHVybiBMPT09bnVsbHx8TmEoTCk/KGkuZXhpdCgiY29kZUZsb3dWYWx1ZSIpLGIoTCkpOihpLmNvbnN1bWUoTCksRSl9ZnVuY3Rpb24gXyhMKXtyZXR1cm4gaS5leGl0KCJjb2RlSW5kZW50ZWQiKSxhKEwpfX1mdW5jdGlvbiB5UmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdjtmdW5jdGlvbiB2KGIpe3JldHVybiBwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/ZihiKTpOYShiKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSx2KTpHdShpLG0sImxpbmVQcmVmaXgiLDQrMSkoYil9ZnVuY3Rpb24gbShiKXtjb25zdCBFPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gRSYmRVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZFWzJdLnNsaWNlU2VyaWFsaXplKEVbMV0sITApLmxlbmd0aD49ND9hKGIpOk5hKGIpP3YoYik6ZihiKX19Y29uc3QgeFJlPXtuYW1lOiJjb2RlVGV4dCIsdG9rZW5pemU6VFJlLHJlc29sdmU6a1JlLHByZXZpb3VzOkVSZX07ZnVuY3Rpb24ga1JlKGkpe2xldCBhPWkubGVuZ3RoLTQsZj0zLHAsdjtpZigoaVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxpW2ZdWzFdLnR5cGU9PT0ic3BhY2UiKSYmKGlbYV1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8aVthXVsxXS50eXBlPT09InNwYWNlIikpe2ZvcihwPWY7KytwPGE7KWlmKGlbcF1bMV0udHlwZT09PSJjb2RlVGV4dERhdGEiKXtpW2ZdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsaVthXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLGYrPTIsYS09MjticmVha319Zm9yKHA9Zi0xLGErKzsrK3A8PWE7KXY9PT12b2lkIDA/cCE9PWEmJmlbcF1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmKHY9cCk6KHA9PT1hfHxpW3BdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiYoaVt2XVsxXS50eXBlPSJjb2RlVGV4dERhdGEiLHAhPT12KzImJihpW3ZdWzFdLmVuZD1pW3AtMV1bMV0uZW5kLGkuc3BsaWNlKHYrMixwLXYtMiksYS09cC12LTIscD12KzIpLHY9dm9pZCAwKTtyZXR1cm4gaX1mdW5jdGlvbiBFUmUoaSl7cmV0dXJuIGkhPT05Nnx8dGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoLTFdWzFdLnR5cGU9PT0iY2hhcmFjdGVyRXNjYXBlIn1mdW5jdGlvbiBUUmUoaSxhLGYpe2xldCBwPTAsdixtO3JldHVybiBiO2Z1bmN0aW9uIGIoQil7cmV0dXJuIGkuZW50ZXIoImNvZGVUZXh0IiksaS5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpLEUoQil9ZnVuY3Rpb24gRShCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQikscCsrLEUpOihpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxfKEIpKX1mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09bnVsbD9mKEIpOkI9PT05Nj8obT1pLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIiksdj0wLE4oQikpOkI9PT0zMj8oaS5lbnRlcigic3BhY2UiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJzcGFjZSIpLF8pOk5hKEIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKEIpLGkuZXhpdCgibGluZUVuZGluZyIpLF8pOihpLmVudGVyKCJjb2RlVGV4dERhdGEiKSxMKEIpKX1mdW5jdGlvbiBMKEIpe3JldHVybiBCPT09bnVsbHx8Qj09PTMyfHxCPT09OTZ8fE5hKEIpPyhpLmV4aXQoImNvZGVUZXh0RGF0YSIpLF8oQikpOihpLmNvbnN1bWUoQiksTCl9ZnVuY3Rpb24gTihCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQiksdisrLE4pOnY9PT1wPyhpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxpLmV4aXQoImNvZGVUZXh0IiksYShCKSk6KG0udHlwZT0iY29kZVRleHREYXRhIixMKEIpKX19ZnVuY3Rpb24gR0Z0KGkpe2NvbnN0IGE9e307bGV0IGY9LTEscCx2LG0sYixFLF8sTDtmb3IoOysrZjxpLmxlbmd0aDspe2Zvcig7ZiBpbiBhOylmPWFbZl07aWYocD1pW2ZdLGYmJnBbMV0udHlwZT09PSJjaHVua0Zsb3ciJiZpW2YtMV1bMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihfPXBbMV0uX3Rva2VuaXplci5ldmVudHMsbT0wLG08Xy5sZW5ndGgmJl9bbV1bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiJiYobSs9MiksbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlPT09ImNvbnRlbnQiKSlmb3IoOysrbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlIT09ImNvbnRlbnQiOylfW21dWzFdLnR5cGU9PT0iY2h1bmtUZXh0IiYmKF9bbV1bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwLG0rKyk7aWYocFswXT09PSJlbnRlciIpcFsxXS5jb250ZW50VHlwZSYmKE9iamVjdC5hc3NpZ24oYSxDUmUoaSxmKSksZj1hW2ZdLEw9ITApO2Vsc2UgaWYocFsxXS5fY29udGFpbmVyKXtmb3IobT1mLHY9dm9pZCAwO20tLSYmKGI9aVttXSxiWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGJbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKTspYlswXT09PSJlbnRlciImJih2JiYoaVt2XVsxXS50eXBlPSJsaW5lRW5kaW5nQmxhbmsiKSxiWzFdLnR5cGU9ImxpbmVFbmRpbmciLHY9bSk7diYmKHBbMV0uZW5kPU9iamVjdC5hc3NpZ24oe30saVt2XVsxXS5zdGFydCksRT1pLnNsaWNlKHYsZiksRS51bnNoaWZ0KHApLHYzKGksdixmLXYrMSxFKSl9fXJldHVybiFMfWZ1bmN0aW9uIENSZShpLGEpe2NvbnN0IGY9aVthXVsxXSxwPWlbYV1bMl07bGV0IHY9YS0xO2NvbnN0IG09W10sYj1mLl90b2tlbml6ZXJ8fHAucGFyc2VyW2YuY29udGVudFR5cGVdKGYuc3RhcnQpLEU9Yi5ldmVudHMsXz1bXSxMPXt9O2xldCBOLEIsaj0tMSxSPWYsej0wLEs9MDtjb25zdCBpdD1bS107Zm9yKDtSOyl7Zm9yKDtpWysrdl1bMV0hPT1SOyk7bS5wdXNoKHYpLFIuX3Rva2VuaXplcnx8KE49cC5zbGljZVN0cmVhbShSKSxSLm5leHR8fE4ucHVzaChudWxsKSxCJiZiLmRlZmluZVNraXAoUi5zdGFydCksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITApLGIud3JpdGUoTiksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09dm9pZCAwKSksQj1SLFI9Ui5uZXh0fWZvcihSPWY7KytqPEUubGVuZ3RoOylFW2pdWzBdPT09ImV4aXQiJiZFW2otMV1bMF09PT0iZW50ZXIiJiZFW2pdWzFdLnR5cGU9PT1FW2otMV1bMV0udHlwZSYmRVtqXVsxXS5zdGFydC5saW5lIT09RVtqXVsxXS5lbmQubGluZSYmKEs9aisxLGl0LnB1c2goSyksUi5fdG9rZW5pemVyPXZvaWQgMCxSLnByZXZpb3VzPXZvaWQgMCxSPVIubmV4dCk7Zm9yKGIuZXZlbnRzPVtdLFI/KFIuX3Rva2VuaXplcj12b2lkIDAsUi5wcmV2aW91cz12b2lkIDApOml0LnBvcCgpLGo9aXQubGVuZ3RoO2otLTspe2NvbnN0IHN0PUUuc2xpY2UoaXRbal0saXRbaisxXSksdXQ9bS5wb3AoKTtfLnVuc2hpZnQoW3V0LHV0K3N0Lmxlbmd0aC0xXSksdjMoaSx1dCwyLHN0KX1mb3Ioaj0tMTsrK2o8Xy5sZW5ndGg7KUxbeitfW2pdWzBdXT16K19bal1bMV0seis9X1tqXVsxXS1fW2pdWzBdLTE7cmV0dXJuIEx9Y29uc3QgX1JlPXt0b2tlbml6ZTpMUmUscmVzb2x2ZTpBUmV9LFNSZT17dG9rZW5pemU6TVJlLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIEFSZShpKXtyZXR1cm4gR0Z0KGkpLGl9ZnVuY3Rpb24gTFJlKGksYSl7bGV0IGY7cmV0dXJuIHA7ZnVuY3Rpb24gcChFKXtyZXR1cm4gaS5lbnRlcigiY29udGVudCIpLGY9aS5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQifSksdihFKX1mdW5jdGlvbiB2KEUpe3JldHVybiBFPT09bnVsbD9tKEUpOk5hKEUpP2kuY2hlY2soU1JlLGIsbSkoRSk6KGkuY29uc3VtZShFKSx2KX1mdW5jdGlvbiBtKEUpe3JldHVybiBpLmV4aXQoImNodW5rQ29udGVudCIpLGkuZXhpdCgiY29udGVudCIpLGEoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gaS5jb25zdW1lKEUpLGkuZXhpdCgiY2h1bmtDb250ZW50IiksZi5uZXh0PWkuZW50ZXIoImNodW5rQ29udGVudCIse2NvbnRlbnRUeXBlOiJjb250ZW50IixwcmV2aW91czpmfSksZj1mLm5leHQsdn19ZnVuY3Rpb24gTVJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtyZXR1cm4gaS5leGl0KCJjaHVua0NvbnRlbnQiKSxpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLEd1KGksbSwibGluZVByZWZpeCIpfWZ1bmN0aW9uIG0oYil7aWYoYj09PW51bGx8fE5hKGIpKXJldHVybiBmKGIpO2NvbnN0IEU9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikmJkUmJkVbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmRVsyXS5zbGljZVNlcmlhbGl6ZShFWzFdLCEwKS5sZW5ndGg+PTQ/YShiKTppLmludGVycnVwdChwLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csZixhKShiKX19ZnVuY3Rpb24gVkZ0KGksYSxmLHAsdixtLGIsRSxfKXtjb25zdCBMPV98fE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgTj0wO3JldHVybiBCO2Z1bmN0aW9uIEIoc3Qpe3JldHVybiBzdD09PTYwPyhpLmVudGVyKHApLGkuZW50ZXIodiksaS5lbnRlcihtKSxpLmNvbnN1bWUoc3QpLGkuZXhpdChtKSxqKTpzdD09PW51bGx8fHN0PT09NDF8fGswdChzdCk/ZihzdCk6KGkuZW50ZXIocCksaS5lbnRlcihiKSxpLmVudGVyKEUpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxLKHN0KSl9ZnVuY3Rpb24gaihzdCl7cmV0dXJuIHN0PT09NjI/KGkuZW50ZXIobSksaS5jb25zdW1lKHN0KSxpLmV4aXQobSksaS5leGl0KHYpLGkuZXhpdChwKSxhKTooaS5lbnRlcihFKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksUihzdCkpfWZ1bmN0aW9uIFIoc3Qpe3JldHVybiBzdD09PTYyPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KEUpLGooc3QpKTpzdD09PW51bGx8fHN0PT09NjB8fE5hKHN0KT9mKHN0KTooaS5jb25zdW1lKHN0KSxzdD09PTkyP3o6Uil9ZnVuY3Rpb24geihzdCl7cmV0dXJuIHN0PT09NjB8fHN0PT09NjJ8fHN0PT09OTI/KGkuY29uc3VtZShzdCksUik6UihzdCl9ZnVuY3Rpb24gSyhzdCl7cmV0dXJuIHN0PT09NDA/KytOPkw/ZihzdCk6KGkuY29uc3VtZShzdCksSyk6c3Q9PT00MT9OLS0/KGkuY29uc3VtZShzdCksSyk6KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoRSksaS5leGl0KGIpLGkuZXhpdChwKSxhKHN0KSk6c3Q9PT1udWxsfHxudihzdCk/Tj9mKHN0KTooaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdChFKSxpLmV4aXQoYiksaS5leGl0KHApLGEoc3QpKTprMHQoc3QpP2Yoc3QpOihpLmNvbnN1bWUoc3QpLHN0PT09OTI/aXQ6Syl9ZnVuY3Rpb24gaXQoc3Qpe3JldHVybiBzdD09PTQwfHxzdD09PTQxfHxzdD09PTkyPyhpLmNvbnN1bWUoc3QpLEspOksoc3QpfX1mdW5jdGlvbiBVRnQoaSxhLGYscCx2LG0pe2NvbnN0IGI9dGhpcztsZXQgRT0wLF87cmV0dXJuIEw7ZnVuY3Rpb24gTChSKXtyZXR1cm4gaS5lbnRlcihwKSxpLmVudGVyKHYpLGkuY29uc3VtZShSKSxpLmV4aXQodiksaS5lbnRlcihtKSxOfWZ1bmN0aW9uIE4oUil7cmV0dXJuIFI9PT1udWxsfHxSPT09OTF8fFI9PT05MyYmIV98fFI9PT05NCYmIUUmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGIucGFyc2VyLmNvbnN0cnVjdHN8fEU+OTk5P2YoUik6Uj09PTkzPyhpLmV4aXQobSksaS5lbnRlcih2KSxpLmNvbnN1bWUoUiksaS5leGl0KHYpLGkuZXhpdChwKSxhKTpOYShSKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShSKSxpLmV4aXQoImxpbmVFbmRpbmciKSxOKTooaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEIoUikpfWZ1bmN0aW9uIEIoUil7cmV0dXJuIFI9PT1udWxsfHxSPT09OTF8fFI9PT05M3x8TmEoUil8fEUrKz45OTk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxOKFIpKTooaS5jb25zdW1lKFIpLF89X3x8IU5mKFIpLFI9PT05Mj9qOkIpfWZ1bmN0aW9uIGooUil7cmV0dXJuIFI9PT05MXx8Uj09PTkyfHxSPT09OTM/KGkuY29uc3VtZShSKSxFKyssQik6QihSKX19ZnVuY3Rpb24gV0Z0KGksYSxmLHAsdixtKXtsZXQgYjtyZXR1cm4gRTtmdW5jdGlvbiBFKGope3JldHVybiBpLmVudGVyKHApLGkuZW50ZXIodiksaS5jb25zdW1lKGopLGkuZXhpdCh2KSxiPWo9PT00MD80MTpqLF99ZnVuY3Rpb24gXyhqKXtyZXR1cm4gaj09PWI/KGkuZW50ZXIodiksaS5jb25zdW1lKGopLGkuZXhpdCh2KSxpLmV4aXQocCksYSk6KGkuZW50ZXIobSksTChqKSl9ZnVuY3Rpb24gTChqKXtyZXR1cm4gaj09PWI/KGkuZXhpdChtKSxfKGIpKTpqPT09bnVsbD9mKGopOk5hKGopPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGopLGkuZXhpdCgibGluZUVuZGluZyIpLEd1KGksTCwibGluZVByZWZpeCIpKTooaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLE4oaikpfWZ1bmN0aW9uIE4oail7cmV0dXJuIGo9PT1ifHxqPT09bnVsbHx8TmEoaik/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxMKGopKTooaS5jb25zdW1lKGopLGo9PT05Mj9COk4pfWZ1bmN0aW9uIEIoail7cmV0dXJuIGo9PT1ifHxqPT09OTI/KGkuY29uc3VtZShqKSxOKTpOKGopfX1mdW5jdGlvbiB2UChpLGEpe2xldCBmO3JldHVybiBwO2Z1bmN0aW9uIHAodil7cmV0dXJuIE5hKHYpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKHYpLGkuZXhpdCgibGluZUVuZGluZyIpLGY9ITAscCk6TmYodik/R3UoaSxwLGY/ImxpbmVQcmVmaXgiOiJsaW5lU3VmZml4Iikodik6YSh2KX19ZnVuY3Rpb24gbkwoaSl7cmV0dXJuIGkucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvXiB8ICQvZywiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpfWNvbnN0IElSZT17bmFtZToiZGVmaW5pdGlvbiIsdG9rZW5pemU6T1JlfSxEUmU9e3Rva2VuaXplOk5SZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBPUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdjtyZXR1cm4gbTtmdW5jdGlvbiBtKF8pe3JldHVybiBpLmVudGVyKCJkZWZpbml0aW9uIiksVUZ0LmNhbGwocCxpLGIsZiwiZGVmaW5pdGlvbkxhYmVsIiwiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwiZGVmaW5pdGlvbkxhYmVsU3RyaW5nIikoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gdj1uTChwLnNsaWNlU2VyaWFsaXplKHAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpLF89PT01OD8oaS5lbnRlcigiZGVmaW5pdGlvbk1hcmtlciIpLGkuY29uc3VtZShfKSxpLmV4aXQoImRlZmluaXRpb25NYXJrZXIiKSx2UChpLFZGdChpLGkuYXR0ZW1wdChEUmUsR3UoaSxFLCJ3aGl0ZXNwYWNlIiksR3UoaSxFLCJ3aGl0ZXNwYWNlIikpLGYsImRlZmluaXRpb25EZXN0aW5hdGlvbiIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwiLCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3IiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nIikpKTpmKF8pfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIF89PT1udWxsfHxOYShfKT8oaS5leGl0KCJkZWZpbml0aW9uIikscC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyh2KXx8cC5wYXJzZXIuZGVmaW5lZC5wdXNoKHYpLGEoXykpOmYoXyl9fWZ1bmN0aW9uIE5SZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gbnYoYik/dlAoaSx2KShiKTpmKGIpfWZ1bmN0aW9uIHYoYil7cmV0dXJuIGI9PT0zNHx8Yj09PTM5fHxiPT09NDA/V0Z0KGksR3UoaSxtLCJ3aGl0ZXNwYWNlIiksZiwiZGVmaW5pdGlvblRpdGxlIiwiZGVmaW5pdGlvblRpdGxlTWFya2VyIiwiZGVmaW5pdGlvblRpdGxlU3RyaW5nIikoYik6ZihiKX1mdW5jdGlvbiBtKGIpe3JldHVybiBiPT09bnVsbHx8TmEoYik/YShiKTpmKGIpfX1jb25zdCBQUmU9e25hbWU6ImhhcmRCcmVha0VzY2FwZSIsdG9rZW5pemU6RlJlfTtmdW5jdGlvbiBGUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAobSl7cmV0dXJuIGkuZW50ZXIoImhhcmRCcmVha0VzY2FwZSIpLGkuZW50ZXIoImVzY2FwZU1hcmtlciIpLGkuY29uc3VtZShtKSx2fWZ1bmN0aW9uIHYobSl7cmV0dXJuIE5hKG0pPyhpLmV4aXQoImVzY2FwZU1hcmtlciIpLGkuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIiksYShtKSk6ZihtKX19Y29uc3QgQlJlPXtuYW1lOiJoZWFkaW5nQXR4Iix0b2tlbml6ZTpqUmUscmVzb2x2ZTpSUmV9O2Z1bmN0aW9uIFJSZShpLGEpe2xldCBmPWkubGVuZ3RoLTIscD0zLHYsbTtyZXR1cm4gaVtwXVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYocCs9MiksZi0yPnAmJmlbZl1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIiYmKGYtPTIpLGlbZl1bMV0udHlwZT09PSJhdHhIZWFkaW5nU2VxdWVuY2UiJiYocD09PWYtMXx8Zi00PnAmJmlbZi0yXVsxXS50eXBlPT09IndoaXRlc3BhY2UiKSYmKGYtPXArMT09PWY/Mjo0KSxmPnAmJih2PXt0eXBlOiJhdHhIZWFkaW5nVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmR9LG09e3R5cGU6ImNodW5rVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmQsY29udGVudFR5cGU6InRleHQifSx2MyhpLHAsZi1wKzEsW1siZW50ZXIiLHYsYV0sWyJlbnRlciIsbSxhXSxbImV4aXQiLG0sYV0sWyJleGl0Iix2LGFdXSkpLGl9ZnVuY3Rpb24galJlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHY9MDtyZXR1cm4gbTtmdW5jdGlvbiBtKE4pe3JldHVybiBpLmVudGVyKCJhdHhIZWFkaW5nIiksaS5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksYihOKX1mdW5jdGlvbiBiKE4pe3JldHVybiBOPT09MzUmJnYrKzw2PyhpLmNvbnN1bWUoTiksYik6Tj09PW51bGx8fG52KE4pPyhpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHAuaW50ZXJydXB0P2EoTik6RShOKSk6ZihOKX1mdW5jdGlvbiBFKE4pe3JldHVybiBOPT09MzU/KGkuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLF8oTikpOk49PT1udWxsfHxOYShOKT8oaS5leGl0KCJhdHhIZWFkaW5nIiksYShOKSk6TmYoTik/R3UoaSxFLCJ3aGl0ZXNwYWNlIikoTik6KGkuZW50ZXIoImF0eEhlYWRpbmdUZXh0IiksTChOKSl9ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTj09PTM1PyhpLmNvbnN1bWUoTiksXyk6KGkuZXhpdCgiYXR4SGVhZGluZ1NlcXVlbmNlIiksRShOKSl9ZnVuY3Rpb24gTChOKXtyZXR1cm4gTj09PW51bGx8fE49PT0zNXx8bnYoTik/KGkuZXhpdCgiYXR4SGVhZGluZ1RleHQiKSxFKE4pKTooaS5jb25zdW1lKE4pLEwpfX1jb25zdCAkUmU9WyJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmFzZSIsImJhc2Vmb250IiwiYmxvY2txdW90ZSIsImJvZHkiLCJjYXB0aW9uIiwiY2VudGVyIiwiY29sIiwiY29sZ3JvdXAiLCJkZCIsImRldGFpbHMiLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImZyYW1lIiwiZnJhbWVzZXQiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaHIiLCJodG1sIiwiaWZyYW1lIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFpbiIsIm1lbnUiLCJtZW51aXRlbSIsIm5hdiIsIm5vZnJhbWVzIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsInAiLCJwYXJhbSIsInNlY3Rpb24iLCJzdW1tYXJ5IiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidWwiXSxLRnQ9WyJwcmUiLCJzY3JpcHQiLCJzdHlsZSIsInRleHRhcmVhIl0selJlPXtuYW1lOiJodG1sRmxvdyIsdG9rZW5pemU6R1JlLHJlc29sdmVUbzpIUmUsY29uY3JldGU6ITB9LHFSZT17dG9rZW5pemU6VlJlLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIEhSZShpKXtsZXQgYT1pLmxlbmd0aDtmb3IoO2EtLSYmIShpW2FdWzBdPT09ImVudGVyIiYmaVthXVsxXS50eXBlPT09Imh0bWxGbG93Iik7KTtyZXR1cm4gYT4xJiZpW2EtMl1bMV0udHlwZT09PSJsaW5lUHJlZml4IiYmKGlbYV1bMV0uc3RhcnQ9aVthLTJdWzFdLnN0YXJ0LGlbYSsxXVsxXS5zdGFydD1pW2EtMl1bMV0uc3RhcnQsaS5zcGxpY2UoYS0yLDIpKSxpfWZ1bmN0aW9uIEdSZShpLGEsZil7Y29uc3QgcD10aGlzO2xldCB2LG0sYixFLF87cmV0dXJuIEw7ZnVuY3Rpb24gTChGdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxGbG93IiksaS5lbnRlcigiaHRtbEZsb3dEYXRhIiksaS5jb25zdW1lKEZ0KSxOfWZ1bmN0aW9uIE4oRnQpe3JldHVybiBGdD09PTMzPyhpLmNvbnN1bWUoRnQpLEIpOkZ0PT09NDc/KGkuY29uc3VtZShGdCkseik6RnQ9PT02Mz8oaS5jb25zdW1lKEZ0KSx2PTMscC5pbnRlcnJ1cHQ/YTpUdCk6dzMoRnQpPyhpLmNvbnN1bWUoRnQpLGI9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksbT0hMCxLKTpmKEZ0KX1mdW5jdGlvbiBCKEZ0KXtyZXR1cm4gRnQ9PT00NT8oaS5jb25zdW1lKEZ0KSx2PTIsaik6RnQ9PT05MT8oaS5jb25zdW1lKEZ0KSx2PTUsYj0iQ0RBVEFbIixFPTAsUik6dzMoRnQpPyhpLmNvbnN1bWUoRnQpLHY9NCxwLmludGVycnVwdD9hOlR0KTpmKEZ0KX1mdW5jdGlvbiBqKEZ0KXtyZXR1cm4gRnQ9PT00NT8oaS5jb25zdW1lKEZ0KSxwLmludGVycnVwdD9hOlR0KTpmKEZ0KX1mdW5jdGlvbiBSKEZ0KXtyZXR1cm4gRnQ9PT1iLmNoYXJDb2RlQXQoRSsrKT8oaS5jb25zdW1lKEZ0KSxFPT09Yi5sZW5ndGg/cC5pbnRlcnJ1cHQ/YTpVOlIpOmYoRnQpfWZ1bmN0aW9uIHooRnQpe3JldHVybiB3MyhGdCk/KGkuY29uc3VtZShGdCksYj1TdHJpbmcuZnJvbUNoYXJDb2RlKEZ0KSxLKTpmKEZ0KX1mdW5jdGlvbiBLKEZ0KXtyZXR1cm4gRnQ9PT1udWxsfHxGdD09PTQ3fHxGdD09PTYyfHxudihGdCk/RnQhPT00NyYmbSYmS0Z0LmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHY9MSxwLmludGVycnVwdD9hKEZ0KTpVKEZ0KSk6JFJlLmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHY9NixGdD09PTQ3PyhpLmNvbnN1bWUoRnQpLGl0KTpwLmludGVycnVwdD9hKEZ0KTpVKEZ0KSk6KHY9NyxwLmludGVycnVwdCYmIXAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9mKEZ0KTptP3V0KEZ0KTpzdChGdCkpOkZ0PT09NDV8fG9tKEZ0KT8oaS5jb25zdW1lKEZ0KSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEZ0KSxLKTpmKEZ0KX1mdW5jdGlvbiBpdChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCkscC5pbnRlcnJ1cHQ/YTpVKTpmKEZ0KX1mdW5jdGlvbiBzdChGdCl7cmV0dXJuIE5mKEZ0KT8oaS5jb25zdW1lKEZ0KSxzdCk6WChGdCl9ZnVuY3Rpb24gdXQoRnQpe3JldHVybiBGdD09PTQ3PyhpLmNvbnN1bWUoRnQpLFgpOkZ0PT09NTh8fEZ0PT09OTV8fHczKEZ0KT8oaS5jb25zdW1lKEZ0KSxidCk6TmYoRnQpPyhpLmNvbnN1bWUoRnQpLHV0KTpYKEZ0KX1mdW5jdGlvbiBidChGdCl7cmV0dXJuIEZ0PT09NDV8fEZ0PT09NDZ8fEZ0PT09NTh8fEZ0PT09OTV8fG9tKEZ0KT8oaS5jb25zdW1lKEZ0KSxidCk6bXQoRnQpfWZ1bmN0aW9uIG10KEZ0KXtyZXR1cm4gRnQ9PT02MT8oaS5jb25zdW1lKEZ0KSx5dCk6TmYoRnQpPyhpLmNvbnN1bWUoRnQpLG10KTp1dChGdCl9ZnVuY3Rpb24geXQoRnQpe3JldHVybiBGdD09PW51bGx8fEZ0PT09NjB8fEZ0PT09NjF8fEZ0PT09NjJ8fEZ0PT09OTY/ZihGdCk6RnQ9PT0zNHx8RnQ9PT0zOT8oaS5jb25zdW1lKEZ0KSxfPUZ0LGR0KTpOZihGdCk/KGkuY29uc3VtZShGdCkseXQpOihfPW51bGwsaHQoRnQpKX1mdW5jdGlvbiBkdChGdCl7cmV0dXJuIEZ0PT09bnVsbHx8TmEoRnQpP2YoRnQpOkZ0PT09Xz8oaS5jb25zdW1lKEZ0KSx3dCk6KGkuY29uc3VtZShGdCksZHQpfWZ1bmN0aW9uIGh0KEZ0KXtyZXR1cm4gRnQ9PT1udWxsfHxGdD09PTM0fHxGdD09PTM5fHxGdD09PTYwfHxGdD09PTYxfHxGdD09PTYyfHxGdD09PTk2fHxudihGdCk/bXQoRnQpOihpLmNvbnN1bWUoRnQpLGh0KX1mdW5jdGlvbiB3dChGdCl7cmV0dXJuIEZ0PT09NDd8fEZ0PT09NjJ8fE5mKEZ0KT91dChGdCk6ZihGdCl9ZnVuY3Rpb24gWChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCkscHQpOmYoRnQpfWZ1bmN0aW9uIHB0KEZ0KXtyZXR1cm4gTmYoRnQpPyhpLmNvbnN1bWUoRnQpLHB0KTpGdD09PW51bGx8fE5hKEZ0KT9VKEZ0KTpmKEZ0KX1mdW5jdGlvbiBVKEZ0KXtyZXR1cm4gRnQ9PT00NSYmdj09PTI/KGkuY29uc3VtZShGdCksTnQpOkZ0PT09NjAmJnY9PT0xPyhpLmNvbnN1bWUoRnQpLHF0KTpGdD09PTYyJiZ2PT09ND8oaS5jb25zdW1lKEZ0KSxIdCk6RnQ9PT02MyYmdj09PTM/KGkuY29uc3VtZShGdCksVHQpOkZ0PT09OTMmJnY9PT01PyhpLmNvbnN1bWUoRnQpLFopOk5hKEZ0KSYmKHY9PT02fHx2PT09Nyk/aS5jaGVjayhxUmUsSHQseHQpKEZ0KTpGdD09PW51bGx8fE5hKEZ0KT94dChGdCk6KGkuY29uc3VtZShGdCksVSl9ZnVuY3Rpb24geHQoRnQpe3JldHVybiBpLmV4aXQoImh0bWxGbG93RGF0YSIpLG50KEZ0KX1mdW5jdGlvbiBudChGdCl7cmV0dXJuIEZ0PT09bnVsbD9JdChGdCk6TmEoRnQpP2kuYXR0ZW1wdCh7dG9rZW5pemU6T3QscGFydGlhbDohMH0sbnQsSXQpKEZ0KTooaS5lbnRlcigiaHRtbEZsb3dEYXRhIiksVShGdCkpfWZ1bmN0aW9uIE90KEZ0LGtlLHBuKXtyZXR1cm4gTWU7ZnVuY3Rpb24gTWUoR2Upe3JldHVybiBGdC5lbnRlcigibGluZUVuZGluZyIpLEZ0LmNvbnN1bWUoR2UpLEZ0LmV4aXQoImxpbmVFbmRpbmciKSx2ZX1mdW5jdGlvbiB2ZShHZSl7cmV0dXJuIHAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9wbihHZSk6a2UoR2UpfX1mdW5jdGlvbiBOdChGdCl7cmV0dXJuIEZ0PT09NDU/KGkuY29uc3VtZShGdCksVHQpOlUoRnQpfWZ1bmN0aW9uIHF0KEZ0KXtyZXR1cm4gRnQ9PT00Nz8oaS5jb25zdW1lKEZ0KSxiPSIiLEN0KTpVKEZ0KX1mdW5jdGlvbiBDdChGdCl7cmV0dXJuIEZ0PT09NjImJktGdC5pbmNsdWRlcyhiLnRvTG93ZXJDYXNlKCkpPyhpLmNvbnN1bWUoRnQpLEh0KTp3MyhGdCkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShGdCksYis9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksQ3QpOlUoRnQpfWZ1bmN0aW9uIFooRnQpe3JldHVybiBGdD09PTkzPyhpLmNvbnN1bWUoRnQpLFR0KTpVKEZ0KX1mdW5jdGlvbiBUdChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCksSHQpOkZ0PT09NDUmJnY9PT0yPyhpLmNvbnN1bWUoRnQpLFR0KTpVKEZ0KX1mdW5jdGlvbiBIdChGdCl7cmV0dXJuIEZ0PT09bnVsbHx8TmEoRnQpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLEl0KEZ0KSk6KGkuY29uc3VtZShGdCksSHQpfWZ1bmN0aW9uIEl0KEZ0KXtyZXR1cm4gaS5leGl0KCJodG1sRmxvdyIpLGEoRnQpfX1mdW5jdGlvbiBWUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAodil7cmV0dXJuIGkuZXhpdCgiaHRtbEZsb3dEYXRhIiksaS5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksaS5jb25zdW1lKHYpLGkuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksaS5hdHRlbXB0KGxLLGEsZil9fWNvbnN0IFVSZT17bmFtZToiaHRtbFRleHQiLHRva2VuaXplOldSZX07ZnVuY3Rpb24gV1JlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHYsbSxiLEU7cmV0dXJuIF87ZnVuY3Rpb24gXyhJdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0IiksaS5lbnRlcigiaHRtbFRleHREYXRhIiksaS5jb25zdW1lKEl0KSxMfWZ1bmN0aW9uIEwoSXQpe3JldHVybiBJdD09PTMzPyhpLmNvbnN1bWUoSXQpLE4pOkl0PT09NDc/KGkuY29uc3VtZShJdCksaHQpOkl0PT09NjM/KGkuY29uc3VtZShJdCkseXQpOnczKEl0KT8oaS5jb25zdW1lKEl0KSxwdCk6ZihJdCl9ZnVuY3Rpb24gTihJdCl7cmV0dXJuIEl0PT09NDU/KGkuY29uc3VtZShJdCksQik6SXQ9PT05MT8oaS5jb25zdW1lKEl0KSxtPSJDREFUQVsiLGI9MCxpdCk6dzMoSXQpPyhpLmNvbnN1bWUoSXQpLG10KTpmKEl0KX1mdW5jdGlvbiBCKEl0KXtyZXR1cm4gSXQ9PT00NT8oaS5jb25zdW1lKEl0KSxqKTpmKEl0KX1mdW5jdGlvbiBqKEl0KXtyZXR1cm4gSXQ9PT1udWxsfHxJdD09PTYyP2YoSXQpOkl0PT09NDU/KGkuY29uc3VtZShJdCksUik6eihJdCl9ZnVuY3Rpb24gUihJdCl7cmV0dXJuIEl0PT09bnVsbHx8SXQ9PT02Mj9mKEl0KTp6KEl0KX1mdW5jdGlvbiB6KEl0KXtyZXR1cm4gSXQ9PT1udWxsP2YoSXQpOkl0PT09NDU/KGkuY29uc3VtZShJdCksSyk6TmEoSXQpPyhFPXosWihJdCkpOihpLmNvbnN1bWUoSXQpLHopfWZ1bmN0aW9uIEsoSXQpe3JldHVybiBJdD09PTQ1PyhpLmNvbnN1bWUoSXQpLEh0KTp6KEl0KX1mdW5jdGlvbiBpdChJdCl7cmV0dXJuIEl0PT09bS5jaGFyQ29kZUF0KGIrKyk/KGkuY29uc3VtZShJdCksYj09PW0ubGVuZ3RoP3N0Oml0KTpmKEl0KX1mdW5jdGlvbiBzdChJdCl7cmV0dXJuIEl0PT09bnVsbD9mKEl0KTpJdD09PTkzPyhpLmNvbnN1bWUoSXQpLHV0KTpOYShJdCk/KEU9c3QsWihJdCkpOihpLmNvbnN1bWUoSXQpLHN0KX1mdW5jdGlvbiB1dChJdCl7cmV0dXJuIEl0PT09OTM/KGkuY29uc3VtZShJdCksYnQpOnN0KEl0KX1mdW5jdGlvbiBidChJdCl7cmV0dXJuIEl0PT09NjI/SHQoSXQpOkl0PT09OTM/KGkuY29uc3VtZShJdCksYnQpOnN0KEl0KX1mdW5jdGlvbiBtdChJdCl7cmV0dXJuIEl0PT09bnVsbHx8SXQ9PT02Mj9IdChJdCk6TmEoSXQpPyhFPW10LFooSXQpKTooaS5jb25zdW1lKEl0KSxtdCl9ZnVuY3Rpb24geXQoSXQpe3JldHVybiBJdD09PW51bGw/ZihJdCk6SXQ9PT02Mz8oaS5jb25zdW1lKEl0KSxkdCk6TmEoSXQpPyhFPXl0LFooSXQpKTooaS5jb25zdW1lKEl0KSx5dCl9ZnVuY3Rpb24gZHQoSXQpe3JldHVybiBJdD09PTYyP0h0KEl0KTp5dChJdCl9ZnVuY3Rpb24gaHQoSXQpe3JldHVybiB3MyhJdCk/KGkuY29uc3VtZShJdCksd3QpOmYoSXQpfWZ1bmN0aW9uIHd0KEl0KXtyZXR1cm4gSXQ9PT00NXx8b20oSXQpPyhpLmNvbnN1bWUoSXQpLHd0KTpYKEl0KX1mdW5jdGlvbiBYKEl0KXtyZXR1cm4gTmEoSXQpPyhFPVgsWihJdCkpOk5mKEl0KT8oaS5jb25zdW1lKEl0KSxYKTpIdChJdCl9ZnVuY3Rpb24gcHQoSXQpe3JldHVybiBJdD09PTQ1fHxvbShJdCk/KGkuY29uc3VtZShJdCkscHQpOkl0PT09NDd8fEl0PT09NjJ8fG52KEl0KT9VKEl0KTpmKEl0KX1mdW5jdGlvbiBVKEl0KXtyZXR1cm4gSXQ9PT00Nz8oaS5jb25zdW1lKEl0KSxIdCk6SXQ9PT01OHx8SXQ9PT05NXx8dzMoSXQpPyhpLmNvbnN1bWUoSXQpLHh0KTpOYShJdCk/KEU9VSxaKEl0KSk6TmYoSXQpPyhpLmNvbnN1bWUoSXQpLFUpOkh0KEl0KX1mdW5jdGlvbiB4dChJdCl7cmV0dXJuIEl0PT09NDV8fEl0PT09NDZ8fEl0PT09NTh8fEl0PT09OTV8fG9tKEl0KT8oaS5jb25zdW1lKEl0KSx4dCk6bnQoSXQpfWZ1bmN0aW9uIG50KEl0KXtyZXR1cm4gSXQ9PT02MT8oaS5jb25zdW1lKEl0KSxPdCk6TmEoSXQpPyhFPW50LFooSXQpKTpOZihJdCk/KGkuY29uc3VtZShJdCksbnQpOlUoSXQpfWZ1bmN0aW9uIE90KEl0KXtyZXR1cm4gSXQ9PT1udWxsfHxJdD09PTYwfHxJdD09PTYxfHxJdD09PTYyfHxJdD09PTk2P2YoSXQpOkl0PT09MzR8fEl0PT09Mzk/KGkuY29uc3VtZShJdCksdj1JdCxOdCk6TmEoSXQpPyhFPU90LFooSXQpKTpOZihJdCk/KGkuY29uc3VtZShJdCksT3QpOihpLmNvbnN1bWUoSXQpLHY9dm9pZCAwLEN0KX1mdW5jdGlvbiBOdChJdCl7cmV0dXJuIEl0PT09dj8oaS5jb25zdW1lKEl0KSxxdCk6SXQ9PT1udWxsP2YoSXQpOk5hKEl0KT8oRT1OdCxaKEl0KSk6KGkuY29uc3VtZShJdCksTnQpfWZ1bmN0aW9uIHF0KEl0KXtyZXR1cm4gSXQ9PT02Mnx8SXQ9PT00N3x8bnYoSXQpP1UoSXQpOmYoSXQpfWZ1bmN0aW9uIEN0KEl0KXtyZXR1cm4gSXQ9PT1udWxsfHxJdD09PTM0fHxJdD09PTM5fHxJdD09PTYwfHxJdD09PTYxfHxJdD09PTk2P2YoSXQpOkl0PT09NjJ8fG52KEl0KT9VKEl0KTooaS5jb25zdW1lKEl0KSxDdCl9ZnVuY3Rpb24gWihJdCl7cmV0dXJuIGkuZXhpdCgiaHRtbFRleHREYXRhIiksaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShJdCksaS5leGl0KCJsaW5lRW5kaW5nIiksR3UoaSxUdCwibGluZVByZWZpeCIscC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KX1mdW5jdGlvbiBUdChJdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLEUoSXQpfWZ1bmN0aW9uIEh0KEl0KXtyZXR1cm4gSXQ9PT02Mj8oaS5jb25zdW1lKEl0KSxpLmV4aXQoImh0bWxUZXh0RGF0YSIpLGkuZXhpdCgiaHRtbFRleHQiKSxhKTpmKEl0KX19Y29uc3QgUzB0PXtuYW1lOiJsYWJlbEVuZCIsdG9rZW5pemU6SlJlLHJlc29sdmVUbzpaUmUscmVzb2x2ZUFsbDpRUmV9LEtSZT17dG9rZW5pemU6dGplfSxZUmU9e3Rva2VuaXplOmVqZX0sWFJlPXt0b2tlbml6ZTpuamV9O2Z1bmN0aW9uIFFSZShpKXtsZXQgYT0tMSxmO2Zvcig7KythPGkubGVuZ3RoOylmPWlbYV1bMV0sKGYudHlwZT09PSJsYWJlbEltYWdlInx8Zi50eXBlPT09ImxhYmVsTGluayJ8fGYudHlwZT09PSJsYWJlbEVuZCIpJiYoaS5zcGxpY2UoYSsxLGYudHlwZT09PSJsYWJlbEltYWdlIj80OjIpLGYudHlwZT0iZGF0YSIsYSsrKTtyZXR1cm4gaX1mdW5jdGlvbiBaUmUoaSxhKXtsZXQgZj1pLmxlbmd0aCxwPTAsdixtLGIsRTtmb3IoO2YtLTspaWYodj1pW2ZdWzFdLG0pe2lmKHYudHlwZT09PSJsaW5rInx8di50eXBlPT09ImxhYmVsTGluayImJnYuX2luYWN0aXZlKWJyZWFrO2lbZl1bMF09PT0iZW50ZXIiJiZ2LnR5cGU9PT0ibGFiZWxMaW5rIiYmKHYuX2luYWN0aXZlPSEwKX1lbHNlIGlmKGIpe2lmKGlbZl1bMF09PT0iZW50ZXIiJiYodi50eXBlPT09ImxhYmVsSW1hZ2UifHx2LnR5cGU9PT0ibGFiZWxMaW5rIikmJiF2Ll9iYWxhbmNlZCYmKG09Zix2LnR5cGUhPT0ibGFiZWxMaW5rIikpe3A9MjticmVha319ZWxzZSB2LnR5cGU9PT0ibGFiZWxFbmQiJiYoYj1mKTtjb25zdCBfPXt0eXBlOmlbbV1bMV0udHlwZT09PSJsYWJlbExpbmsiPyJsaW5rIjoiaW1hZ2UiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVttXVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtpLmxlbmd0aC0xXVsxXS5lbmQpfSxMPXt0eXBlOiJsYWJlbCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW21dWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2JdWzFdLmVuZCl9LE49e3R5cGU6ImxhYmVsVGV4dCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW20rcCsyXVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbYi0yXVsxXS5zdGFydCl9O3JldHVybiBFPVtbImVudGVyIixfLGFdLFsiZW50ZXIiLEwsYV1dLEU9ZXYoRSxpLnNsaWNlKG0rMSxtK3ArMykpLEU9ZXYoRSxbWyJlbnRlciIsTixhXV0pLEU9ZXYoRSxFMHQoYS5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsaS5zbGljZShtK3ArNCxiLTMpLGEpKSxFPWV2KEUsW1siZXhpdCIsTixhXSxpW2ItMl0saVtiLTFdLFsiZXhpdCIsTCxhXV0pLEU9ZXYoRSxpLnNsaWNlKGIrMSkpLEU9ZXYoRSxbWyJleGl0IixfLGFdXSksdjMoaSxtLGkubGVuZ3RoLEUpLGl9ZnVuY3Rpb24gSlJlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHY9cC5ldmVudHMubGVuZ3RoLG0sYjtmb3IoO3YtLTspaWYoKHAuZXZlbnRzW3ZdWzFdLnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHAuZXZlbnRzW3ZdWzFdLnR5cGU9PT0ibGFiZWxMaW5rIikmJiFwLmV2ZW50c1t2XVsxXS5fYmFsYW5jZWQpe209cC5ldmVudHNbdl1bMV07YnJlYWt9cmV0dXJuIEU7ZnVuY3Rpb24gRShOKXtyZXR1cm4gbT9tLl9pbmFjdGl2ZT9MKE4pOihiPXAucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMobkwocC5zbGljZVNlcmlhbGl6ZSh7c3RhcnQ6bS5lbmQsZW5kOnAubm93KCl9KSkpLGkuZW50ZXIoImxhYmVsRW5kIiksaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoTiksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxFbmQiKSxfKTpmKE4pfWZ1bmN0aW9uIF8oTil7cmV0dXJuIE49PT00MD9pLmF0dGVtcHQoS1JlLGEsYj9hOkwpKE4pOk49PT05MT9pLmF0dGVtcHQoWVJlLGEsYj9pLmF0dGVtcHQoWFJlLGEsTCk6TCkoTik6Yj9hKE4pOkwoTil9ZnVuY3Rpb24gTChOKXtyZXR1cm4gbS5fYmFsYW5jZWQ9ITAsZihOKX19ZnVuY3Rpb24gdGplKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKF8pe3JldHVybiBpLmVudGVyKCJyZXNvdXJjZSIpLGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKF8pLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSx2UChpLHYpfWZ1bmN0aW9uIHYoXyl7cmV0dXJuIF89PT00MT9FKF8pOlZGdChpLG0sZiwicmVzb3VyY2VEZXN0aW5hdGlvbiIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJyZXNvdXJjZURlc3RpbmF0aW9uUmF3IiwicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsMzIpKF8pfWZ1bmN0aW9uIG0oXyl7cmV0dXJuIG52KF8pP3ZQKGksYikoXyk6RShfKX1mdW5jdGlvbiBiKF8pe3JldHVybiBfPT09MzR8fF89PT0zOXx8Xz09PTQwP1dGdChpLHZQKGksRSksZiwicmVzb3VyY2VUaXRsZSIsInJlc291cmNlVGl0bGVNYXJrZXIiLCJyZXNvdXJjZVRpdGxlU3RyaW5nIikoXyk6RShfKX1mdW5jdGlvbiBFKF8pe3JldHVybiBfPT09NDE/KGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKF8pLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSxpLmV4aXQoInJlc291cmNlIiksYSk6ZihfKX19ZnVuY3Rpb24gZWplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtyZXR1cm4gVUZ0LmNhbGwocCxpLG0sZiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTWFya2VyIiwicmVmZXJlbmNlU3RyaW5nIikoYil9ZnVuY3Rpb24gbShiKXtyZXR1cm4gcC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhuTChwLnNsaWNlU2VyaWFsaXplKHAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpKT9hKGIpOmYoYil9fWZ1bmN0aW9uIG5qZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigicmVmZXJlbmNlIiksaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKG0pLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksdn1mdW5jdGlvbiB2KG0pe3JldHVybiBtPT09OTM/KGkuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShtKSxpLmV4aXQoInJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgicmVmZXJlbmNlIiksYSk6ZihtKX19Y29uc3QgcmplPXtuYW1lOiJsYWJlbFN0YXJ0SW1hZ2UiLHRva2VuaXplOmlqZSxyZXNvbHZlQWxsOlMwdC5yZXNvbHZlQWxsfTtmdW5jdGlvbiBpamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdjtmdW5jdGlvbiB2KEUpe3JldHVybiBpLmVudGVyKCJsYWJlbEltYWdlIiksaS5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpLGkuY29uc3VtZShFKSxpLmV4aXQoImxhYmVsSW1hZ2VNYXJrZXIiKSxtfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIEU9PT05MT8oaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxJbWFnZSIpLGIpOmYoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gRT09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoRSk6YShFKX19Y29uc3Qgc2plPXtuYW1lOiJsYWJlbFN0YXJ0TGluayIsdG9rZW5pemU6YWplLHJlc29sdmVBbGw6UzB0LnJlc29sdmVBbGx9O2Z1bmN0aW9uIGFqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB2O2Z1bmN0aW9uIHYoYil7cmV0dXJuIGkuZW50ZXIoImxhYmVsTGluayIpLGkuZW50ZXIoImxhYmVsTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGFiZWxNYXJrZXIiKSxpLmV4aXQoImxhYmVsTGluayIpLG19ZnVuY3Rpb24gbShiKXtyZXR1cm4gYj09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoYik6YShiKX19Y29uc3QgQTB0PXtuYW1lOiJsaW5lRW5kaW5nIix0b2tlbml6ZTpvamV9O2Z1bmN0aW9uIG9qZShpLGEpe3JldHVybiBmO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUocCksaS5leGl0KCJsaW5lRW5kaW5nIiksR3UoaSxhLCJsaW5lUHJlZml4Iil9fWNvbnN0IGhLPXtuYW1lOiJ0aGVtYXRpY0JyZWFrIix0b2tlbml6ZTpjamV9O2Z1bmN0aW9uIGNqZShpLGEsZil7bGV0IHA9MCx2O3JldHVybiBtO2Z1bmN0aW9uIG0oXyl7cmV0dXJuIGkuZW50ZXIoInRoZW1hdGljQnJlYWsiKSx2PV8sYihfKX1mdW5jdGlvbiBiKF8pe3JldHVybiBfPT09dj8oaS5lbnRlcigidGhlbWF0aWNCcmVha1NlcXVlbmNlIiksRShfKSk6TmYoXyk/R3UoaSxiLCJ3aGl0ZXNwYWNlIikoXyk6cDwzfHxfIT09bnVsbCYmIU5hKF8pP2YoXyk6KGkuZXhpdCgidGhlbWF0aWNCcmVhayIpLGEoXykpfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIF89PT12PyhpLmNvbnN1bWUoXykscCsrLEUpOihpLmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLGIoXykpfX1jb25zdCBmcD17bmFtZToibGlzdCIsdG9rZW5pemU6aGplLGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6ZmplfSxleGl0OmdqZX0sdWplPXt0b2tlbml6ZTpwamUscGFydGlhbDohMH0sbGplPXt0b2tlbml6ZTpkamUscGFydGlhbDohMH07ZnVuY3Rpb24gaGplKGksYSxmKXtjb25zdCBwPXRoaXMsdj1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07bGV0IG09diYmdlsxXS50eXBlPT09ImxpbmVQcmVmaXgiP3ZbMl0uc2xpY2VTZXJpYWxpemUodlsxXSwhMCkubGVuZ3RoOjAsYj0wO3JldHVybiBFO2Z1bmN0aW9uIEUoUil7Y29uc3Qgej1wLmNvbnRhaW5lclN0YXRlLnR5cGV8fChSPT09NDJ8fFI9PT00M3x8Uj09PTQ1PyJsaXN0VW5vcmRlcmVkIjoibGlzdE9yZGVyZWQiKTtpZih6PT09Imxpc3RVbm9yZGVyZWQiPyFwLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8Uj09PXAuY29udGFpbmVyU3RhdGUubWFya2VyOngwdChSKSl7aWYocC5jb250YWluZXJTdGF0ZS50eXBlfHwocC5jb250YWluZXJTdGF0ZS50eXBlPXosaS5lbnRlcih6LHtfY29udGFpbmVyOiEwfSkpLHo9PT0ibGlzdFVub3JkZXJlZCIpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksUj09PTQyfHxSPT09NDU/aS5jaGVjayhoSyxmLEwpKFIpOkwoUik7aWYoIXAuaW50ZXJydXB0fHxSPT09NDkpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksaS5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpLF8oUil9cmV0dXJuIGYoUil9ZnVuY3Rpb24gXyhSKXtyZXR1cm4geDB0KFIpJiYrK2I8MTA/KGkuY29uc3VtZShSKSxfKTooIXAuaW50ZXJydXB0fHxiPDIpJiYocC5jb250YWluZXJTdGF0ZS5tYXJrZXI/Uj09PXAuY29udGFpbmVyU3RhdGUubWFya2VyOlI9PT00MXx8Uj09PTQ2KT8oaS5leGl0KCJsaXN0SXRlbVZhbHVlIiksTChSKSk6ZihSKX1mdW5jdGlvbiBMKFIpe3JldHVybiBpLmVudGVyKCJsaXN0SXRlbU1hcmtlciIpLGkuY29uc3VtZShSKSxpLmV4aXQoImxpc3RJdGVtTWFya2VyIikscC5jb250YWluZXJTdGF0ZS5tYXJrZXI9cC5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fFIsaS5jaGVjayhsSyxwLmludGVycnVwdD9mOk4saS5hdHRlbXB0KHVqZSxqLEIpKX1mdW5jdGlvbiBOKFIpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9ITAsbSsrLGooUil9ZnVuY3Rpb24gQihSKXtyZXR1cm4gTmYoUik/KGkuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGkuY29uc3VtZShSKSxpLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGopOmYoUil9ZnVuY3Rpb24gaihSKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5zaXplPW0rcC5zbGljZVNlcmlhbGl6ZShpLmV4aXQoImxpc3RJdGVtUHJlZml4IiksITApLmxlbmd0aCxhKFIpfX1mdW5jdGlvbiBmamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCxpLmNoZWNrKGxLLHYsbSk7ZnVuY3Rpb24gdihFKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz1wLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHxwLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUsR3UoaSxhLCJsaXN0SXRlbUluZGVudCIscC5jb250YWluZXJTdGF0ZS5zaXplKzEpKEUpfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fCFOZihFKT8ocC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAscC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxiKEUpKToocC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAscC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxpLmF0dGVtcHQobGplLGEsYikoRSkpfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz0hMCxwLmludGVycnVwdD12b2lkIDAsR3UoaSxpLmF0dGVtcHQoZnAsYSxmKSwibGluZVByZWZpeCIscC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShFKX19ZnVuY3Rpb24gZGplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIEd1KGksdiwibGlzdEl0ZW1JbmRlbnQiLHAuY29udGFpbmVyU3RhdGUuc2l6ZSsxKTtmdW5jdGlvbiB2KG0pe2NvbnN0IGI9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBiJiZiWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiJiZiWzJdLnNsaWNlU2VyaWFsaXplKGJbMV0sITApLmxlbmd0aD09PXAuY29udGFpbmVyU3RhdGUuc2l6ZT9hKG0pOmYobSl9fWZ1bmN0aW9uIGdqZShpKXtpLmV4aXQodGhpcy5jb250YWluZXJTdGF0ZS50eXBlKX1mdW5jdGlvbiBwamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gR3UoaSx2LCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLHAucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCsxKTtmdW5jdGlvbiB2KG0pe2NvbnN0IGI9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFOZihtKSYmYiYmYlsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI/YShtKTpmKG0pfX1jb25zdCBZRnQ9e25hbWU6InNldGV4dFVuZGVybGluZSIsdG9rZW5pemU6dmplLHJlc29sdmVUbzpiamV9O2Z1bmN0aW9uIGJqZShpLGEpe2xldCBmPWkubGVuZ3RoLHAsdixtO2Zvcig7Zi0tOylpZihpW2ZdWzBdPT09ImVudGVyIil7aWYoaVtmXVsxXS50eXBlPT09ImNvbnRlbnQiKXtwPWY7YnJlYWt9aVtmXVsxXS50eXBlPT09InBhcmFncmFwaCImJih2PWYpfWVsc2UgaVtmXVsxXS50eXBlPT09ImNvbnRlbnQiJiZpLnNwbGljZShmLDEpLCFtJiZpW2ZdWzFdLnR5cGU9PT0iZGVmaW5pdGlvbiImJihtPWYpO2NvbnN0IGI9e3R5cGU6InNldGV4dEhlYWRpbmciLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2XVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtpLmxlbmd0aC0xXVsxXS5lbmQpfTtyZXR1cm4gaVt2XVsxXS50eXBlPSJzZXRleHRIZWFkaW5nVGV4dCIsbT8oaS5zcGxpY2UodiwwLFsiZW50ZXIiLGIsYV0pLGkuc3BsaWNlKG0rMSwwLFsiZXhpdCIsaVtwXVsxXSxhXSksaVtwXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW21dWzFdLmVuZCkpOmlbcF1bMV09YixpLnB1c2goWyJleGl0IixiLGFdKSxpfWZ1bmN0aW9uIHZqZShpLGEsZil7Y29uc3QgcD10aGlzO2xldCB2PXAuZXZlbnRzLmxlbmd0aCxtLGI7Zm9yKDt2LS07KWlmKHAuZXZlbnRzW3ZdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJnAuZXZlbnRzW3ZdWzFdLnR5cGUhPT0ibGluZVByZWZpeCImJnAuZXZlbnRzW3ZdWzFdLnR5cGUhPT0iY29udGVudCIpe2I9cC5ldmVudHNbdl1bMV0udHlwZT09PSJwYXJhZ3JhcGgiO2JyZWFrfXJldHVybiBFO2Z1bmN0aW9uIEUoTil7cmV0dXJuIXAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXSYmKHAuaW50ZXJydXB0fHxiKT8oaS5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmUiKSxpLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksbT1OLF8oTikpOmYoTil9ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTj09PW0/KGkuY29uc3VtZShOKSxfKTooaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksR3UoaSxMLCJsaW5lU3VmZml4IikoTikpfWZ1bmN0aW9uIEwoTil7cmV0dXJuIE49PT1udWxsfHxOYShOKT8oaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpLGEoTikpOmYoTil9fWNvbnN0IHdqZT17dG9rZW5pemU6bWplfTtmdW5jdGlvbiBtamUoaSl7Y29uc3QgYT10aGlzLGY9aS5hdHRlbXB0KGxLLHAsaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsdixHdShpLGkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csdixpLmF0dGVtcHQoX1JlLHYpKSwibGluZVByZWZpeCIpKSk7cmV0dXJuIGY7ZnVuY3Rpb24gcChtKXtpZihtPT09bnVsbCl7aS5jb25zdW1lKG0pO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksaS5jb25zdW1lKG0pLGkuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfWZ1bmN0aW9uIHYobSl7aWYobT09PW51bGwpe2kuY29uc3VtZShtKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUobSksaS5leGl0KCJsaW5lRW5kaW5nIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfX1jb25zdCB5amU9e3Jlc29sdmVBbGw6UUZ0KCl9LHhqZT1YRnQoInN0cmluZyIpLGtqZT1YRnQoInRleHQiKTtmdW5jdGlvbiBYRnQoaSl7cmV0dXJue3Rva2VuaXplOmEscmVzb2x2ZUFsbDpRRnQoaT09PSJ0ZXh0Ij9FamU6dm9pZCAwKX07ZnVuY3Rpb24gYShmKXtjb25zdCBwPXRoaXMsdj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzW2ldLG09Zi5hdHRlbXB0KHYsYixFKTtyZXR1cm4gYjtmdW5jdGlvbiBiKE4pe3JldHVybiBMKE4pP20oTik6RShOKX1mdW5jdGlvbiBFKE4pe2lmKE49PT1udWxsKXtmLmNvbnN1bWUoTik7cmV0dXJufXJldHVybiBmLmVudGVyKCJkYXRhIiksZi5jb25zdW1lKE4pLF99ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTChOKT8oZi5leGl0KCJkYXRhIiksbShOKSk6KGYuY29uc3VtZShOKSxfKX1mdW5jdGlvbiBMKE4pe2lmKE49PT1udWxsKXJldHVybiEwO2NvbnN0IEI9dltOXTtsZXQgaj0tMTtpZihCKWZvcig7KytqPEIubGVuZ3RoOyl7Y29uc3QgUj1CW2pdO2lmKCFSLnByZXZpb3VzfHxSLnByZXZpb3VzLmNhbGwocCxwLnByZXZpb3VzKSlyZXR1cm4hMH1yZXR1cm4hMX19fWZ1bmN0aW9uIFFGdChpKXtyZXR1cm4gYTtmdW5jdGlvbiBhKGYscCl7bGV0IHY9LTEsbTtmb3IoOysrdjw9Zi5sZW5ndGg7KW09PT12b2lkIDA/Zlt2XSYmZlt2XVsxXS50eXBlPT09ImRhdGEiJiYobT12LHYrKyk6KCFmW3ZdfHxmW3ZdWzFdLnR5cGUhPT0iZGF0YSIpJiYodiE9PW0rMiYmKGZbbV1bMV0uZW5kPWZbdi0xXVsxXS5lbmQsZi5zcGxpY2UobSsyLHYtbS0yKSx2PW0rMiksbT12b2lkIDApO3JldHVybiBpP2koZixwKTpmfX1mdW5jdGlvbiBFamUoaSxhKXtsZXQgZj0wO2Zvcig7KytmPD1pLmxlbmd0aDspaWYoKGY9PT1pLmxlbmd0aHx8aVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmciKSYmaVtmLTFdWzFdLnR5cGU9PT0iZGF0YSIpe2NvbnN0IHA9aVtmLTFdWzFdLHY9YS5zbGljZVN0cmVhbShwKTtsZXQgbT12Lmxlbmd0aCxiPS0xLEU9MCxfO2Zvcig7bS0tOyl7Y29uc3QgTD12W21dO2lmKHR5cGVvZiBMPT0ic3RyaW5nIil7Zm9yKGI9TC5sZW5ndGg7TC5jaGFyQ29kZUF0KGItMSk9PT0zMjspRSsrLGItLTtpZihiKWJyZWFrO2I9LTF9ZWxzZSBpZihMPT09LTIpXz0hMCxFKys7ZWxzZSBpZihMIT09LTEpe20rKzticmVha319aWYoRSl7Y29uc3QgTD17dHlwZTpmPT09aS5sZW5ndGh8fF98fEU8Mj8ibGluZVN1ZmZpeCI6ImhhcmRCcmVha1RyYWlsaW5nIixzdGFydDp7bGluZTpwLmVuZC5saW5lLGNvbHVtbjpwLmVuZC5jb2x1bW4tRSxvZmZzZXQ6cC5lbmQub2Zmc2V0LUUsX2luZGV4OnAuc3RhcnQuX2luZGV4K20sX2J1ZmZlckluZGV4Om0/YjpwLnN0YXJ0Ll9idWZmZXJJbmRleCtifSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxwLmVuZCl9O3AuZW5kPU9iamVjdC5hc3NpZ24oe30sTC5zdGFydCkscC5zdGFydC5vZmZzZXQ9PT1wLmVuZC5vZmZzZXQ/T2JqZWN0LmFzc2lnbihwLEwpOihpLnNwbGljZShmLDAsWyJlbnRlciIsTCxhXSxbImV4aXQiLEwsYV0pLGYrPTIpfWYrK31yZXR1cm4gaX1mdW5jdGlvbiBUamUoaSxhLGYpe2xldCBwPU9iamVjdC5hc3NpZ24oZj9PYmplY3QuYXNzaWduKHt9LGYpOntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9LHtfaW5kZXg6MCxfYnVmZmVySW5kZXg6LTF9KTtjb25zdCB2PXt9LG09W107bGV0IGI9W10sRT1bXTtjb25zdCBfPXtjb25zdW1lOnV0LGVudGVyOmJ0LGV4aXQ6bXQsYXR0ZW1wdDpodCh5dCksY2hlY2s6aHQoZHQpLGludGVycnVwdDpodChkdCx7aW50ZXJydXB0OiEwfSl9LEw9e3ByZXZpb3VzOm51bGwsY29kZTpudWxsLGNvbnRhaW5lclN0YXRlOnt9LGV2ZW50czpbXSxwYXJzZXI6aSxzbGljZVN0cmVhbTpSLHNsaWNlU2VyaWFsaXplOmosbm93OnosZGVmaW5lU2tpcDpLLHdyaXRlOkJ9O2xldCBOPWEudG9rZW5pemUuY2FsbChMLF8pO3JldHVybiBhLnJlc29sdmVBbGwmJm0ucHVzaChhKSxMO2Z1bmN0aW9uIEIoVSl7cmV0dXJuIGI9ZXYoYixVKSxpdCgpLGJbYi5sZW5ndGgtMV0hPT1udWxsP1tdOih3dChhLDApLEwuZXZlbnRzPUUwdChtLEwuZXZlbnRzLEwpLEwuZXZlbnRzKX1mdW5jdGlvbiBqKFUseHQpe3JldHVybiBfamUoUihVKSx4dCl9ZnVuY3Rpb24gUihVKXtyZXR1cm4gQ2plKGIsVSl9ZnVuY3Rpb24geigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LHApfWZ1bmN0aW9uIEsoVSl7dltVLmxpbmVdPVUuY29sdW1uLHB0KCl9ZnVuY3Rpb24gaXQoKXtsZXQgVTtmb3IoO3AuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgeHQ9YltwLl9pbmRleF07aWYodHlwZW9mIHh0PT0ic3RyaW5nIilmb3IoVT1wLl9pbmRleCxwLl9idWZmZXJJbmRleDwwJiYocC5fYnVmZmVySW5kZXg9MCk7cC5faW5kZXg9PT1VJiZwLl9idWZmZXJJbmRleDx4dC5sZW5ndGg7KXN0KHh0LmNoYXJDb2RlQXQocC5fYnVmZmVySW5kZXgpKTtlbHNlIHN0KHh0KX19ZnVuY3Rpb24gc3QoVSl7Tj1OKFUpfWZ1bmN0aW9uIHV0KFUpe05hKFUpPyhwLmxpbmUrKyxwLmNvbHVtbj0xLHAub2Zmc2V0Kz1VPT09LTM/MjoxLHB0KCkpOlUhPT0tMSYmKHAuY29sdW1uKysscC5vZmZzZXQrKykscC5fYnVmZmVySW5kZXg8MD9wLl9pbmRleCsrOihwLl9idWZmZXJJbmRleCsrLHAuX2J1ZmZlckluZGV4PT09YltwLl9pbmRleF0ubGVuZ3RoJiYocC5fYnVmZmVySW5kZXg9LTEscC5faW5kZXgrKykpLEwucHJldmlvdXM9VX1mdW5jdGlvbiBidChVLHh0KXtjb25zdCBudD14dHx8e307cmV0dXJuIG50LnR5cGU9VSxudC5zdGFydD16KCksTC5ldmVudHMucHVzaChbImVudGVyIixudCxMXSksRS5wdXNoKG50KSxudH1mdW5jdGlvbiBtdChVKXtjb25zdCB4dD1FLnBvcCgpO3JldHVybiB4dC5lbmQ9eigpLEwuZXZlbnRzLnB1c2goWyJleGl0Iix4dCxMXSkseHR9ZnVuY3Rpb24geXQoVSx4dCl7d3QoVSx4dC5mcm9tKX1mdW5jdGlvbiBkdChVLHh0KXt4dC5yZXN0b3JlKCl9ZnVuY3Rpb24gaHQoVSx4dCl7cmV0dXJuIG50O2Z1bmN0aW9uIG50KE90LE50LHF0KXtsZXQgQ3QsWixUdCxIdDtyZXR1cm4gQXJyYXkuaXNBcnJheShPdCk/RnQoT3QpOiJ0b2tlbml6ZSJpbiBPdD9GdChbT3RdKTpJdChPdCk7ZnVuY3Rpb24gSXQodmUpe3JldHVybiBHZTtmdW5jdGlvbiBHZShLZSl7Y29uc3Qgd2U9S2UhPT1udWxsJiZ2ZVtLZV0sX2U9S2UhPT1udWxsJiZ2ZS5udWxsLCR0PVsuLi5BcnJheS5pc0FycmF5KHdlKT93ZTp3ZT9bd2VdOltdLC4uLkFycmF5LmlzQXJyYXkoX2UpP19lOl9lP1tfZV06W11dO3JldHVybiBGdCgkdCkoS2UpfX1mdW5jdGlvbiBGdCh2ZSl7cmV0dXJuIEN0PXZlLFo9MCx2ZS5sZW5ndGg9PT0wP3F0OmtlKHZlW1pdKX1mdW5jdGlvbiBrZSh2ZSl7cmV0dXJuIEdlO2Z1bmN0aW9uIEdlKEtlKXtyZXR1cm4gSHQ9WCgpLFR0PXZlLHZlLnBhcnRpYWx8fChMLmN1cnJlbnRDb25zdHJ1Y3Q9dmUpLHZlLm5hbWUmJkwucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKHZlLm5hbWUpP01lKCk6dmUudG9rZW5pemUuY2FsbCh4dD9PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTCkseHQpOkwsXyxwbixNZSkoS2UpfX1mdW5jdGlvbiBwbih2ZSl7cmV0dXJuIFUoVHQsSHQpLE50fWZ1bmN0aW9uIE1lKHZlKXtyZXR1cm4gSHQucmVzdG9yZSgpLCsrWjxDdC5sZW5ndGg/a2UoQ3RbWl0pOnF0fX19ZnVuY3Rpb24gd3QoVSx4dCl7VS5yZXNvbHZlQWxsJiYhbS5pbmNsdWRlcyhVKSYmbS5wdXNoKFUpLFUucmVzb2x2ZSYmdjMoTC5ldmVudHMseHQsTC5ldmVudHMubGVuZ3RoLXh0LFUucmVzb2x2ZShMLmV2ZW50cy5zbGljZSh4dCksTCkpLFUucmVzb2x2ZVRvJiYoTC5ldmVudHM9VS5yZXNvbHZlVG8oTC5ldmVudHMsTCkpfWZ1bmN0aW9uIFgoKXtjb25zdCBVPXooKSx4dD1MLnByZXZpb3VzLG50PUwuY3VycmVudENvbnN0cnVjdCxPdD1MLmV2ZW50cy5sZW5ndGgsTnQ9QXJyYXkuZnJvbShFKTtyZXR1cm57cmVzdG9yZTpxdCxmcm9tOk90fTtmdW5jdGlvbiBxdCgpe3A9VSxMLnByZXZpb3VzPXh0LEwuY3VycmVudENvbnN0cnVjdD1udCxMLmV2ZW50cy5sZW5ndGg9T3QsRT1OdCxwdCgpfX1mdW5jdGlvbiBwdCgpe3AubGluZSBpbiB2JiZwLmNvbHVtbjwyJiYocC5jb2x1bW49dltwLmxpbmVdLHAub2Zmc2V0Kz12W3AubGluZV0tMSl9fWZ1bmN0aW9uIENqZShpLGEpe2NvbnN0IGY9YS5zdGFydC5faW5kZXgscD1hLnN0YXJ0Ll9idWZmZXJJbmRleCx2PWEuZW5kLl9pbmRleCxtPWEuZW5kLl9idWZmZXJJbmRleDtsZXQgYjtyZXR1cm4gZj09PXY/Yj1baVtmXS5zbGljZShwLG0pXTooYj1pLnNsaWNlKGYsdikscD4tMSYmKGJbMF09YlswXS5zbGljZShwKSksbT4wJiZiLnB1c2goaVt2XS5zbGljZSgwLG0pKSksYn1mdW5jdGlvbiBfamUoaSxhKXtsZXQgZj0tMTtjb25zdCBwPVtdO2xldCB2O2Zvcig7KytmPGkubGVuZ3RoOyl7Y29uc3QgbT1pW2ZdO2xldCBiO2lmKHR5cGVvZiBtPT0ic3RyaW5nIiliPW07ZWxzZSBzd2l0Y2gobSl7Y2FzZS01OntiPSJcciI7YnJlYWt9Y2FzZS00OntiPWAKYDticmVha31jYXNlLTM6e2I9YFxyCmA7YnJlYWt9Y2FzZS0yOntiPWE/IiAiOiIJIjticmVha31jYXNlLTE6e2lmKCFhJiZ2KWNvbnRpbnVlO2I9IiAiO2JyZWFrfWRlZmF1bHQ6Yj1TdHJpbmcuZnJvbUNoYXJDb2RlKG0pfXY9bT09PS0yLHAucHVzaChiKX1yZXR1cm4gcC5qb2luKCIiKX1jb25zdCBTamU9e1s0Ml06ZnAsWzQzXTpmcCxbNDVdOmZwLFs0OF06ZnAsWzQ5XTpmcCxbNTBdOmZwLFs1MV06ZnAsWzUyXTpmcCxbNTNdOmZwLFs1NF06ZnAsWzU1XTpmcCxbNTZdOmZwLFs1N106ZnAsWzYyXTpqRnR9LEFqZT17WzkxXTpJUmV9LExqZT17Wy0yXTpfMHQsWy0xXTpfMHQsWzMyXTpfMHR9LE1qZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYXR0ZW50aW9uTWFya2Vyczp7bnVsbDpbNDIsOTVdfSxjb250ZW50SW5pdGlhbDpBamUsZGlzYWJsZTp7bnVsbDpbXX0sZG9jdW1lbnQ6U2plLGZsb3c6e1szNV06QlJlLFs0Ml06aEssWzQ1XTpbWUZ0LGhLXSxbNjBdOnpSZSxbNjFdOllGdCxbOTVdOmhLLFs5Nl06SEZ0LFsxMjZdOkhGdH0sZmxvd0luaXRpYWw6TGplLGluc2lkZVNwYW46e251bGw6W1QwdCx5amVdfSxzdHJpbmc6e1szOF06cUZ0LFs5Ml06JEZ0fSx0ZXh0OntbLTVdOkEwdCxbLTRdOkEwdCxbLTNdOkEwdCxbMzNdOnJqZSxbMzhdOnFGdCxbNDJdOlQwdCxbNjBdOlt1UmUsVVJlXSxbOTFdOnNqZSxbOTJdOltQUmUsJEZ0XSxbOTNdOlMwdCxbOTVdOlQwdCxbOTZdOnhSZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7ZnVuY3Rpb24gSWplKGk9e30pe2NvbnN0IGE9S0JlKFtNamVdLmNvbmNhdChpLmV4dGVuc2lvbnN8fFtdKSksZj17ZGVmaW5lZDpbXSxsYXp5Ont9LGNvbnN0cnVjdHM6YSxjb250ZW50OnAoblJlKSxkb2N1bWVudDpwKGlSZSksZmxvdzpwKHdqZSksc3RyaW5nOnAoeGplKSx0ZXh0OnAoa2plKX07cmV0dXJuIGY7ZnVuY3Rpb24gcCh2KXtyZXR1cm4gbTtmdW5jdGlvbiBtKGIpe3JldHVybiBUamUoZix2LGIpfX19Y29uc3QgWkZ0PS9bXDBcdFxuXHJdL2c7ZnVuY3Rpb24gRGplKCl7bGV0IGk9MSxhPSIiLGY9ITAscDtyZXR1cm4gdjtmdW5jdGlvbiB2KG0sYixFKXtjb25zdCBfPVtdO2xldCBMLE4sQixqLFI7Zm9yKG09YSttLnRvU3RyaW5nKGIpLEI9MCxhPSIiLGYmJihtLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmQisrLGY9dm9pZCAwKTtCPG0ubGVuZ3RoOyl7aWYoWkZ0Lmxhc3RJbmRleD1CLEw9WkZ0LmV4ZWMobSksaj1MJiZMLmluZGV4IT09dm9pZCAwP0wuaW5kZXg6bS5sZW5ndGgsUj1tLmNoYXJDb2RlQXQoaiksIUwpe2E9bS5zbGljZShCKTticmVha31pZihSPT09MTAmJkI9PT1qJiZwKV8ucHVzaCgtMykscD12b2lkIDA7ZWxzZSBzd2l0Y2gocCYmKF8ucHVzaCgtNSkscD12b2lkIDApLEI8aiYmKF8ucHVzaChtLnNsaWNlKEIsaikpLGkrPWotQiksUil7Y2FzZSAwOntfLnB1c2goNjU1MzMpLGkrKzticmVha31jYXNlIDk6e2ZvcihOPU1hdGguY2VpbChpLzQpKjQsXy5wdXNoKC0yKTtpKys8TjspXy5wdXNoKC0xKTticmVha31jYXNlIDEwOntfLnB1c2goLTQpLGk9MTticmVha31kZWZhdWx0OnA9ITAsaT0xfUI9aisxfXJldHVybiBFJiYocCYmXy5wdXNoKC01KSxhJiZfLnB1c2goYSksXy5wdXNoKG51bGwpKSxffX1mdW5jdGlvbiBPamUoaSl7Zm9yKDshR0Z0KGkpOyk7cmV0dXJuIGl9ZnVuY3Rpb24gSkZ0KGksYSl7Y29uc3QgZj1OdW1iZXIucGFyc2VJbnQoaSxhKTtyZXR1cm4gZjw5fHxmPT09MTF8fGY+MTMmJmY8MzJ8fGY+MTI2JiZmPDE2MHx8Zj41NTI5NSYmZjw1NzM0NHx8Zj42NDk3NSYmZjw2NTAwOHx8KGYmNjU1MzUpPT09NjU1MzV8fChmJjY1NTM1KT09PTY1NTM0fHxmPjExMTQxMTE/Iu+/vSI6U3RyaW5nLmZyb21DaGFyQ29kZShmKX1jb25zdCBOamU9L1xcKFshLS86LUBbLWB7LX5dKXwmKCMoPzpcZHsxLDd9fHhbXGRhLWZdezEsNn0pfFtcZGEtel17MSwzMX0pOy9naTtmdW5jdGlvbiBQamUoaSl7cmV0dXJuIGkucmVwbGFjZShOamUsRmplKX1mdW5jdGlvbiBGamUoaSxhLGYpe2lmKGEpcmV0dXJuIGE7aWYoZi5jaGFyQ29kZUF0KDApPT09MzUpe2NvbnN0IHY9Zi5jaGFyQ29kZUF0KDEpLG09dj09PTEyMHx8dj09PTg4O3JldHVybiBKRnQoZi5zbGljZShtPzI6MSksbT8xNjoxMCl9cmV0dXJuIEMwdChmKXx8aX1mdW5jdGlvbiBmSyhpKXtyZXR1cm4haXx8dHlwZW9mIGkhPSJvYmplY3QiPyIiOiJwb3NpdGlvbiJpbiBpfHwidHlwZSJpbiBpP3RCdChpLnBvc2l0aW9uKToic3RhcnQiaW4gaXx8ImVuZCJpbiBpP3RCdChpKToibGluZSJpbiBpfHwiY29sdW1uImluIGk/TDB0KGkpOiIifWZ1bmN0aW9uIEwwdChpKXtyZXR1cm4gZUJ0KGkmJmkubGluZSkrIjoiK2VCdChpJiZpLmNvbHVtbil9ZnVuY3Rpb24gdEJ0KGkpe3JldHVybiBMMHQoaSYmaS5zdGFydCkrIi0iK0wwdChpJiZpLmVuZCl9ZnVuY3Rpb24gZUJ0KGkpe3JldHVybiBpJiZ0eXBlb2YgaT09Im51bWJlciI/aToxfWNvbnN0IG5CdD17fS5oYXNPd25Qcm9wZXJ0eSxyQnQ9ZnVuY3Rpb24oaSxhLGYpe3JldHVybiB0eXBlb2YgYSE9InN0cmluZyImJihmPWEsYT12b2lkIDApLEJqZShmKShPamUoSWplKGYpLmRvY3VtZW50KCkud3JpdGUoRGplKCkoaSxhLCEwKSkpKX07ZnVuY3Rpb24gQmplKGkpe2NvbnN0IGE9e3RyYW5zZm9ybXM6W10sY2FuQ29udGFpbkVvbHM6WyJlbXBoYXNpcyIsImZyYWdtZW50IiwiaGVhZGluZyIsInBhcmFncmFwaCIsInN0cm9uZyJdLGVudGVyOnthdXRvbGluazpFKHlhKSxhdXRvbGlua1Byb3RvY29sOlUsYXV0b2xpbmtFbWFpbDpVLGF0eEhlYWRpbmc6RShOZSksYmxvY2tRdW90ZTpFKCR0KSxjaGFyYWN0ZXJFc2NhcGU6VSxjaGFyYWN0ZXJSZWZlcmVuY2U6VSxjb2RlRmVuY2VkOkUocmUpLGNvZGVGZW5jZWRGZW5jZUluZm86Xyxjb2RlRmVuY2VkRmVuY2VNZXRhOl8sY29kZUluZGVudGVkOkUocmUsXyksY29kZVRleHQ6RShpZSxfKSxjb2RlVGV4dERhdGE6VSxkYXRhOlUsY29kZUZsb3dWYWx1ZTpVLGRlZmluaXRpb246RShPZSksZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOl8sZGVmaW5pdGlvbkxhYmVsU3RyaW5nOl8sZGVmaW5pdGlvblRpdGxlU3RyaW5nOl8sZW1waGFzaXM6RShvZSksaGFyZEJyZWFrRXNjYXBlOkUobWUpLGhhcmRCcmVha1RyYWlsaW5nOkUobWUpLGh0bWxGbG93OkUoY24sXyksaHRtbEZsb3dEYXRhOlUsaHRtbFRleHQ6RShjbixfKSxodG1sVGV4dERhdGE6VSxpbWFnZTpFKGxpKSxsYWJlbDpfLGxpbms6RSh5YSksbGlzdEl0ZW06RShPbyksbGlzdEl0ZW1WYWx1ZTp6LGxpc3RPcmRlcmVkOkUoZGEsUiksbGlzdFVub3JkZXJlZDpFKGRhKSxwYXJhZ3JhcGg6RShkcykscmVmZXJlbmNlOk1lLHJlZmVyZW5jZVN0cmluZzpfLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6XyxyZXNvdXJjZVRpdGxlU3RyaW5nOl8sc2V0ZXh0SGVhZGluZzpFKE5lKSxzdHJvbmc6RShEciksdGhlbWF0aWNCcmVhazpFKGRpKX0sZXhpdDp7YXR4SGVhZGluZzpOKCksYXR4SGVhZGluZ1NlcXVlbmNlOmh0LGF1dG9saW5rOk4oKSxhdXRvbGlua0VtYWlsOl9lLGF1dG9saW5rUHJvdG9jb2w6d2UsYmxvY2tRdW90ZTpOKCksY2hhcmFjdGVyRXNjYXBlVmFsdWU6eHQsY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6R2UsY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzpHZSxjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTpLZSxjb2RlRmVuY2VkOk4odXQpLGNvZGVGZW5jZWRGZW5jZTpzdCxjb2RlRmVuY2VkRmVuY2VJbmZvOkssY29kZUZlbmNlZEZlbmNlTWV0YTppdCxjb2RlRmxvd1ZhbHVlOnh0LGNvZGVJbmRlbnRlZDpOKGJ0KSxjb2RlVGV4dDpOKEN0KSxjb2RlVGV4dERhdGE6eHQsZGF0YTp4dCxkZWZpbml0aW9uOk4oKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6ZHQsZGVmaW5pdGlvbkxhYmVsU3RyaW5nOm10LGRlZmluaXRpb25UaXRsZVN0cmluZzp5dCxlbXBoYXNpczpOKCksaGFyZEJyZWFrRXNjYXBlOk4oT3QpLGhhcmRCcmVha1RyYWlsaW5nOk4oT3QpLGh0bWxGbG93Ok4oTnQpLGh0bWxGbG93RGF0YTp4dCxodG1sVGV4dDpOKHF0KSxodG1sVGV4dERhdGE6eHQsaW1hZ2U6TihUdCksbGFiZWw6SXQsbGFiZWxUZXh0Okh0LGxpbmVFbmRpbmc6bnQsbGluazpOKFopLGxpc3RJdGVtOk4oKSxsaXN0T3JkZXJlZDpOKCksbGlzdFVub3JkZXJlZDpOKCkscGFyYWdyYXBoOk4oKSxyZWZlcmVuY2VTdHJpbmc6dmUscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpGdCxyZXNvdXJjZVRpdGxlU3RyaW5nOmtlLHJlc291cmNlOnBuLHNldGV4dEhlYWRpbmc6TihwdCksc2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZTpYLHNldGV4dEhlYWRpbmdUZXh0Ond0LHN0cm9uZzpOKCksdGhlbWF0aWNCcmVhazpOKCl9fTtpQnQoYSwoaXx8e30pLm1kYXN0RXh0ZW5zaW9uc3x8W10pO2NvbnN0IGY9e307cmV0dXJuIHA7ZnVuY3Rpb24gcChFZSl7bGV0IFluPXt0eXBlOiJyb290IixjaGlsZHJlbjpbXX07Y29uc3QgSGU9e3N0YWNrOltZbl0sdG9rZW5TdGFjazpbXSxjb25maWc6YSxlbnRlcjpMLGV4aXQ6QixidWZmZXI6XyxyZXN1bWU6aixzZXREYXRhOm0sZ2V0RGF0YTpifSxUaT1bXTtsZXQgZ249LTE7Zm9yKDsrK2duPEVlLmxlbmd0aDspaWYoRWVbZ25dWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHxFZVtnbl1bMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkIilpZihFZVtnbl1bMF09PT0iZW50ZXIiKVRpLnB1c2goZ24pO2Vsc2V7Y29uc3Qga3M9VGkucG9wKCk7Z249dihFZSxrcyxnbil9Zm9yKGduPS0xOysrZ248RWUubGVuZ3RoOyl7Y29uc3Qga3M9YVtFZVtnbl1bMF1dO25CdC5jYWxsKGtzLEVlW2duXVsxXS50eXBlKSYma3NbRWVbZ25dWzFdLnR5cGVdLmNhbGwoT2JqZWN0LmFzc2lnbih7c2xpY2VTZXJpYWxpemU6RWVbZ25dWzJdLnNsaWNlU2VyaWFsaXplfSxIZSksRWVbZ25dWzFdKX1pZihIZS50b2tlblN0YWNrLmxlbmd0aD4wKXtjb25zdCBrcz1IZS50b2tlblN0YWNrW0hlLnRva2VuU3RhY2subGVuZ3RoLTFdOyhrc1sxXXx8c0J0KS5jYWxsKEhlLHZvaWQgMCxrc1swXSl9Zm9yKFluLnBvc2l0aW9uPXtzdGFydDp1ayhFZS5sZW5ndGg+MD9FZVswXVsxXS5zdGFydDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSksZW5kOnVrKEVlLmxlbmd0aD4wP0VlW0VlLmxlbmd0aC0yXVsxXS5lbmQ6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0pfSxnbj0tMTsrK2duPGEudHJhbnNmb3Jtcy5sZW5ndGg7KVluPWEudHJhbnNmb3Jtc1tnbl0oWW4pfHxZbjtyZXR1cm4gWW59ZnVuY3Rpb24gdihFZSxZbixIZSl7bGV0IFRpPVluLTEsZ249LTEsa3M9ITEscWEsTGEsR3MsTm87Zm9yKDsrK1RpPD1IZTspe2NvbnN0IHZzPUVlW1RpXTtpZih2c1sxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQifHx2c1sxXS50eXBlPT09Imxpc3RPcmRlcmVkInx8dnNbMV0udHlwZT09PSJibG9ja1F1b3RlIj8odnNbMF09PT0iZW50ZXIiP2duKys6Z24tLSxObz12b2lkIDApOnZzWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIj92c1swXT09PSJlbnRlciImJihxYSYmIU5vJiYhZ24mJiFHcyYmKEdzPVRpKSxObz12b2lkIDApOnZzWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fHZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1WYWx1ZSJ8fHZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1NYXJrZXIifHx2c1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Inx8dnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UifHwoTm89dm9pZCAwKSwhZ24mJnZzWzBdPT09ImVudGVyIiYmdnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCJ8fGduPT09LTEmJnZzWzBdPT09ImV4aXQiJiYodnNbMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkInx8dnNbMV0udHlwZT09PSJsaXN0T3JkZXJlZCIpKXtpZihxYSl7bGV0IG51PVRpO2ZvcihMYT12b2lkIDA7bnUtLTspe2NvbnN0ICRzPUVlW251XTtpZigkc1sxXS50eXBlPT09ImxpbmVFbmRpbmcifHwkc1sxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpe2lmKCRzWzBdPT09ImV4aXQiKWNvbnRpbnVlO0xhJiYoRWVbTGFdWzFdLnR5cGU9ImxpbmVFbmRpbmdCbGFuayIsa3M9ITApLCRzWzFdLnR5cGU9ImxpbmVFbmRpbmciLExhPW51fWVsc2UgaWYoISgkc1sxXS50eXBlPT09ImxpbmVQcmVmaXgifHwkc1sxXS50eXBlPT09ImJsb2NrUXVvdGVQcmVmaXgifHwkc1sxXS50eXBlPT09ImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlInx8JHNbMV0udHlwZT09PSJibG9ja1F1b3RlTWFya2VyInx8JHNbMV0udHlwZT09PSJsaXN0SXRlbUluZGVudCIpKWJyZWFrfUdzJiYoIUxhfHxHczxMYSkmJihxYS5fc3ByZWFkPSEwKSxxYS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxMYT9FZVtMYV1bMV0uc3RhcnQ6dnNbMV0uZW5kKSxFZS5zcGxpY2UoTGF8fFRpLDAsWyJleGl0IixxYSx2c1syXV0pLFRpKyssSGUrK312c1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4IiYmKHFhPXt0eXBlOiJsaXN0SXRlbSIsX3NwcmVhZDohMSxzdGFydDpPYmplY3QuYXNzaWduKHt9LHZzWzFdLnN0YXJ0KX0sRWUuc3BsaWNlKFRpLDAsWyJlbnRlciIscWEsdnNbMl1dKSxUaSsrLEhlKyssR3M9dm9pZCAwLE5vPSEwKX19cmV0dXJuIEVlW1luXVsxXS5fc3ByZWFkPWtzLEhlfWZ1bmN0aW9uIG0oRWUsWW4pe2ZbRWVdPVlufWZ1bmN0aW9uIGIoRWUpe3JldHVybiBmW0VlXX1mdW5jdGlvbiBFKEVlLFluKXtyZXR1cm4gSGU7ZnVuY3Rpb24gSGUoVGkpe0wuY2FsbCh0aGlzLEVlKFRpKSxUaSksWW4mJlluLmNhbGwodGhpcyxUaSl9fWZ1bmN0aW9uIF8oKXt0aGlzLnN0YWNrLnB1c2goe3R5cGU6ImZyYWdtZW50IixjaGlsZHJlbjpbXX0pfWZ1bmN0aW9uIEwoRWUsWW4sSGUpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdLmNoaWxkcmVuLnB1c2goRWUpLHRoaXMuc3RhY2sucHVzaChFZSksdGhpcy50b2tlblN0YWNrLnB1c2goW1luLEhlXSksRWUucG9zaXRpb249e3N0YXJ0OnVrKFluLnN0YXJ0KX0sRWV9ZnVuY3Rpb24gTihFZSl7cmV0dXJuIFluO2Z1bmN0aW9uIFluKEhlKXtFZSYmRWUuY2FsbCh0aGlzLEhlKSxCLmNhbGwodGhpcyxIZSl9fWZ1bmN0aW9uIEIoRWUsWW4pe2NvbnN0IEhlPXRoaXMuc3RhY2sucG9wKCksVGk9dGhpcy50b2tlblN0YWNrLnBvcCgpO2lmKFRpKVRpWzBdLnR5cGUhPT1FZS50eXBlJiYoWW4/WW4uY2FsbCh0aGlzLEVlLFRpWzBdKTooVGlbMV18fHNCdCkuY2FsbCh0aGlzLEVlLFRpWzBdKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitFZS50eXBlKyJgICgiK2ZLKHtzdGFydDpFZS5zdGFydCxlbmQ6RWUuZW5kfSkrIik6IGl04oCZcyBub3Qgb3BlbiIpO3JldHVybiBIZS5wb3NpdGlvbi5lbmQ9dWsoRWUuZW5kKSxIZX1mdW5jdGlvbiBqKCl7cmV0dXJuIFdCZSh0aGlzLnN0YWNrLnBvcCgpKX1mdW5jdGlvbiBSKCl7bSgiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIiwhMCl9ZnVuY3Rpb24geihFZSl7aWYoYigiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIikpe2NvbnN0IFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07WW4uc3RhcnQ9TnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLDEwKSxtKCJleHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUiKX19ZnVuY3Rpb24gSygpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi5sYW5nPUVlfWZ1bmN0aW9uIGl0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxZbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1luLm1ldGE9RWV9ZnVuY3Rpb24gc3QoKXtiKCJmbG93Q29kZUluc2lkZSIpfHwodGhpcy5idWZmZXIoKSxtKCJmbG93Q29kZUluc2lkZSIsITApKX1mdW5jdGlvbiB1dCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi52YWx1ZT1FZS5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCIiKSxtKCJmbG93Q29kZUluc2lkZSIpfWZ1bmN0aW9uIGJ0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxZbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1luLnZhbHVlPUVlLnJlcGxhY2UoLyhccj9cbnxccikkL2csIiIpfWZ1bmN0aW9uIG10KEVlKXtjb25zdCBZbj10aGlzLnJlc3VtZSgpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07SGUubGFiZWw9WW4sSGUuaWRlbnRpZmllcj1uTCh0aGlzLnNsaWNlU2VyaWFsaXplKEVlKSkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB5dCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi50aXRsZT1FZX1mdW5jdGlvbiBkdCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9RWV9ZnVuY3Rpb24gaHQoRWUpe2NvbnN0IFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoIVluLmRlcHRoKXtjb25zdCBIZT10aGlzLnNsaWNlU2VyaWFsaXplKEVlKS5sZW5ndGg7WW4uZGVwdGg9SGV9fWZ1bmN0aW9uIHd0KCl7bSgic2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyIsITApfWZ1bmN0aW9uIFgoRWUpe2NvbnN0IFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4uZGVwdGg9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSkuY2hhckNvZGVBdCgwKT09PTYxPzE6Mn1mdW5jdGlvbiBwdCgpe20oInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKX1mdW5jdGlvbiBVKEVlKXtjb25zdCBZbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2xldCBIZT1Zbi5jaGlsZHJlbltZbi5jaGlsZHJlbi5sZW5ndGgtMV07KCFIZXx8SGUudHlwZSE9PSJ0ZXh0IikmJihIZT1ucigpLEhlLnBvc2l0aW9uPXtzdGFydDp1ayhFZS5zdGFydCl9LFluLmNoaWxkcmVuLnB1c2goSGUpKSx0aGlzLnN0YWNrLnB1c2goSGUpfWZ1bmN0aW9uIHh0KEVlKXtjb25zdCBZbj10aGlzLnN0YWNrLnBvcCgpO1luLnZhbHVlKz10aGlzLnNsaWNlU2VyaWFsaXplKEVlKSxZbi5wb3NpdGlvbi5lbmQ9dWsoRWUuZW5kKX1mdW5jdGlvbiBudChFZSl7Y29uc3QgWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJhdEhhcmRCcmVhayIpKXtjb25zdCBIZT1Zbi5jaGlsZHJlbltZbi5jaGlsZHJlbi5sZW5ndGgtMV07SGUucG9zaXRpb24uZW5kPXVrKEVlLmVuZCksbSgiYXRIYXJkQnJlYWsiKTtyZXR1cm59IWIoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKSYmYS5jYW5Db250YWluRW9scy5pbmNsdWRlcyhZbi50eXBlKSYmKFUuY2FsbCh0aGlzLEVlKSx4dC5jYWxsKHRoaXMsRWUpKX1mdW5jdGlvbiBPdCgpe20oImF0SGFyZEJyZWFrIiwhMCl9ZnVuY3Rpb24gTnQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udmFsdWU9RWV9ZnVuY3Rpb24gcXQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udmFsdWU9RWV9ZnVuY3Rpb24gQ3QoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udmFsdWU9RWV9ZnVuY3Rpb24gWigpe2NvbnN0IEVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3QgWW49YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO0VlLnR5cGUrPSJSZWZlcmVuY2UiLEVlLnJlZmVyZW5jZVR5cGU9WW4sZGVsZXRlIEVlLnVybCxkZWxldGUgRWUudGl0bGV9ZWxzZSBkZWxldGUgRWUuaWRlbnRpZmllcixkZWxldGUgRWUubGFiZWw7bSgicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIFR0KCl7Y29uc3QgRWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJpblJlZmVyZW5jZSIpKXtjb25zdCBZbj1iKCJyZWZlcmVuY2VUeXBlIil8fCJzaG9ydGN1dCI7RWUudHlwZSs9IlJlZmVyZW5jZSIsRWUucmVmZXJlbmNlVHlwZT1ZbixkZWxldGUgRWUudXJsLGRlbGV0ZSBFZS50aXRsZX1lbHNlIGRlbGV0ZSBFZS5pZGVudGlmaWVyLGRlbGV0ZSBFZS5sYWJlbDttKCJyZWZlcmVuY2VUeXBlIil9ZnVuY3Rpb24gSHQoRWUpe2NvbnN0IFluPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07SGUubGFiZWw9UGplKFluKSxIZS5pZGVudGlmaWVyPW5MKFluKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEl0KCl7Y29uc3QgRWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXSxZbj10aGlzLnJlc3VtZSgpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYobSgiaW5SZWZlcmVuY2UiLCEwKSxIZS50eXBlPT09ImxpbmsiKXtjb25zdCBUaT1FZS5jaGlsZHJlbjtIZS5jaGlsZHJlbj1UaX1lbHNlIEhlLmFsdD1Zbn1mdW5jdGlvbiBGdCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9RWV9ZnVuY3Rpb24ga2UoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udGl0bGU9RWV9ZnVuY3Rpb24gcG4oKXttKCJpblJlZmVyZW5jZSIpfWZ1bmN0aW9uIE1lKCl7bSgicmVmZXJlbmNlVHlwZSIsImNvbGxhcHNlZCIpfWZ1bmN0aW9uIHZlKEVlKXtjb25zdCBZbj10aGlzLnJlc3VtZSgpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07SGUubGFiZWw9WW4sSGUuaWRlbnRpZmllcj1uTCh0aGlzLnNsaWNlU2VyaWFsaXplKEVlKSkudG9Mb3dlckNhc2UoKSxtKCJyZWZlcmVuY2VUeXBlIiwiZnVsbCIpfWZ1bmN0aW9uIEdlKEVlKXttKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIixFZS50eXBlKX1mdW5jdGlvbiBLZShFZSl7Y29uc3QgWW49dGhpcy5zbGljZVNlcmlhbGl6ZShFZSksSGU9YigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpO2xldCBUaTtIZT8oVGk9SkZ0KFluLEhlPT09ImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiPzEwOjE2KSxtKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIikpOlRpPUMwdChZbik7Y29uc3QgZ249dGhpcy5zdGFjay5wb3AoKTtnbi52YWx1ZSs9VGksZ24ucG9zaXRpb24uZW5kPXVrKEVlLmVuZCl9ZnVuY3Rpb24gd2UoRWUpe3h0LmNhbGwodGhpcyxFZSk7Y29uc3QgWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSl9ZnVuY3Rpb24gX2UoRWUpe3h0LmNhbGwodGhpcyxFZSk7Y29uc3QgWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9Im1haWx0bzoiK3RoaXMuc2xpY2VTZXJpYWxpemUoRWUpfWZ1bmN0aW9uICR0KCl7cmV0dXJue3R5cGU6ImJsb2NrcXVvdGUiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiByZSgpe3JldHVybnt0eXBlOiJjb2RlIixsYW5nOm51bGwsbWV0YTpudWxsLHZhbHVlOiIifX1mdW5jdGlvbiBpZSgpe3JldHVybnt0eXBlOiJpbmxpbmVDb2RlIix2YWx1ZToiIn19ZnVuY3Rpb24gT2UoKXtyZXR1cm57dHlwZToiZGVmaW5pdGlvbiIsaWRlbnRpZmllcjoiIixsYWJlbDpudWxsLHRpdGxlOm51bGwsdXJsOiIifX1mdW5jdGlvbiBvZSgpe3JldHVybnt0eXBlOiJlbXBoYXNpcyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIE5lKCl7cmV0dXJue3R5cGU6ImhlYWRpbmciLGRlcHRoOnZvaWQgMCxjaGlsZHJlbjpbXX19ZnVuY3Rpb24gbWUoKXtyZXR1cm57dHlwZToiYnJlYWsifX1mdW5jdGlvbiBjbigpe3JldHVybnt0eXBlOiJodG1sIix2YWx1ZToiIn19ZnVuY3Rpb24gbGkoKXtyZXR1cm57dHlwZToiaW1hZ2UiLHRpdGxlOm51bGwsdXJsOiIiLGFsdDpudWxsfX1mdW5jdGlvbiB5YSgpe3JldHVybnt0eXBlOiJsaW5rIix0aXRsZTpudWxsLHVybDoiIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gZGEoRWUpe3JldHVybnt0eXBlOiJsaXN0IixvcmRlcmVkOkVlLnR5cGU9PT0ibGlzdE9yZGVyZWQiLHN0YXJ0Om51bGwsc3ByZWFkOkVlLl9zcHJlYWQsY2hpbGRyZW46W119fWZ1bmN0aW9uIE9vKEVlKXtyZXR1cm57dHlwZToibGlzdEl0ZW0iLHNwcmVhZDpFZS5fc3ByZWFkLGNoZWNrZWQ6bnVsbCxjaGlsZHJlbjpbXX19ZnVuY3Rpb24gZHMoKXtyZXR1cm57dHlwZToicGFyYWdyYXBoIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gRHIoKXtyZXR1cm57dHlwZToic3Ryb25nIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gbnIoKXtyZXR1cm57dHlwZToidGV4dCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIGRpKCl7cmV0dXJue3R5cGU6InRoZW1hdGljQnJlYWsifX19ZnVuY3Rpb24gdWsoaSl7cmV0dXJue2xpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbixvZmZzZXQ6aS5vZmZzZXR9fWZ1bmN0aW9uIGlCdChpLGEpe2xldCBmPS0xO2Zvcig7KytmPGEubGVuZ3RoOyl7Y29uc3QgcD1hW2ZdO0FycmF5LmlzQXJyYXkocCk/aUJ0KGkscCk6UmplKGkscCl9fWZ1bmN0aW9uIFJqZShpLGEpe2xldCBmO2ZvcihmIGluIGEpaWYobkJ0LmNhbGwoYSxmKSl7aWYoZj09PSJjYW5Db250YWluRW9scyIpe2NvbnN0IHA9YVtmXTtwJiZpW2ZdLnB1c2goLi4ucCl9ZWxzZSBpZihmPT09InRyYW5zZm9ybXMiKXtjb25zdCBwPWFbZl07cCYmaVtmXS5wdXNoKC4uLnApfWVsc2UgaWYoZj09PSJlbnRlciJ8fGY9PT0iZXhpdCIpe2NvbnN0IHA9YVtmXTtwJiZPYmplY3QuYXNzaWduKGlbZl0scCl9fX1mdW5jdGlvbiBzQnQoaSxhKXt0aHJvdyBpP25ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiK2kudHlwZSsiYCAoIitmSyh7c3RhcnQ6aS5zdGFydCxlbmQ6aS5lbmR9KSsiKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAiK2EudHlwZSsiYCwgIitmSyh7c3RhcnQ6YS5zdGFydCxlbmQ6YS5lbmR9KSsiKSBpcyBvcGVuIik6bmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAiK2EudHlwZSsiYCwgIitmSyh7c3RhcnQ6YS5zdGFydCxlbmQ6YS5lbmR9KSsiKSBpcyBzdGlsbCBvcGVuIil9ZnVuY3Rpb24gamplKGkpe2NvbnN0IGE9aS5yZXBsYWNlKC9cbnsyLH0vZyxgCmApO3JldHVybiB3QShhKX1mdW5jdGlvbiAkamUoaSl7Y29uc3QgYT1qamUoaSkse2NoaWxkcmVuOmZ9PXJCdChhKSxwPVtbXV07bGV0IHY9MDtmdW5jdGlvbiBtKGIsRT0ibm9ybWFsIil7Yi50eXBlPT09InRleHQiP2IudmFsdWUuc3BsaXQoYApgKS5mb3JFYWNoKChMLE4pPT57TiE9PTAmJih2KysscC5wdXNoKFtdKSksTC5zcGxpdCgiICIpLmZvckVhY2goQj0+e0ImJnBbdl0ucHVzaCh7Y29udGVudDpCLHR5cGU6RX0pfSl9KTooYi50eXBlPT09InN0cm9uZyJ8fGIudHlwZT09PSJlbXBoYXNpcyIpJiZiLmNoaWxkcmVuLmZvckVhY2goXz0+e20oXyxiLnR5cGUpfSl9cmV0dXJuIGYuZm9yRWFjaChiPT57Yi50eXBlPT09InBhcmFncmFwaCImJmIuY2hpbGRyZW4uZm9yRWFjaChFPT57bShFKX0pfSkscH1mdW5jdGlvbiB6amUoaSl7Y29uc3R7Y2hpbGRyZW46YX09ckJ0KGkpO2Z1bmN0aW9uIGYocCl7cmV0dXJuIHAudHlwZT09PSJ0ZXh0Ij9wLnZhbHVlLnJlcGxhY2UoL1xuL2csIjxici8+Iik6cC50eXBlPT09InN0cm9uZyI/YDxzdHJvbmc+JHtwLmNoaWxkcmVuLm1hcChmKS5qb2luKCIiKX08L3N0cm9uZz5gOnAudHlwZT09PSJlbXBoYXNpcyI/YDxlbT4ke3AuY2hpbGRyZW4ubWFwKGYpLmpvaW4oIiIpfTwvZW0+YDpwLnR5cGU9PT0icGFyYWdyYXBoIj9gPHA+JHtwLmNoaWxkcmVuLm1hcChmKS5qb2luKCIiKX08L3A+YDpgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7cC50eXBlfWB9cmV0dXJuIGEubWFwKGYpLmpvaW4oIiIpfWZ1bmN0aW9uIHFqZShpKXtyZXR1cm4gSW50bC5TZWdtZW50ZXI/Wy4uLm5ldyBJbnRsLlNlZ21lbnRlcigpLnNlZ21lbnQoaSldLm1hcChhPT5hLnNlZ21lbnQpOlsuLi5pXX1mdW5jdGlvbiBIamUoaSxhKXtjb25zdCBmPXFqZShhLmNvbnRlbnQpO3JldHVybiBhQnQoaSxbXSxmLGEudHlwZSl9ZnVuY3Rpb24gYUJ0KGksYSxmLHApe2lmKGYubGVuZ3RoPT09MClyZXR1cm5be2NvbnRlbnQ6YS5qb2luKCIiKSx0eXBlOnB9LHtjb250ZW50OiIiLHR5cGU6cH1dO2NvbnN0W3YsLi4ubV09ZixiPVsuLi5hLHZdO3JldHVybiBpKFt7Y29udGVudDpiLmpvaW4oIiIpLHR5cGU6cH1dKT9hQnQoaSxiLG0scCk6KGEubGVuZ3RoPT09MCYmdiYmKGEucHVzaCh2KSxmLnNoaWZ0KCkpLFt7Y29udGVudDphLmpvaW4oIiIpLHR5cGU6cH0se2NvbnRlbnQ6Zi5qb2luKCIiKSx0eXBlOnB9XSl9ZnVuY3Rpb24gR2plKGksYSl7aWYoaS5zb21lKCh7Y29udGVudDpmfSk9PmYuaW5jbHVkZXMoYApgKSkpdGhyb3cgbmV3IEVycm9yKCJzcGxpdExpbmVUb0ZpdFdpZHRoIGRvZXMgbm90IHN1cHBvcnQgbmV3bGluZXMgaW4gdGhlIGxpbmUiKTtyZXR1cm4gTTB0KGksYSl9ZnVuY3Rpb24gTTB0KGksYSxmPVtdLHA9W10pe2lmKGkubGVuZ3RoPT09MClyZXR1cm4gcC5sZW5ndGg+MCYmZi5wdXNoKHApLGYubGVuZ3RoPjA/ZjpbXTtsZXQgdj0iIjtpWzBdLmNvbnRlbnQ9PT0iICImJih2PSIgIixpLnNoaWZ0KCkpO2NvbnN0IG09aS5zaGlmdCgpPz97Y29udGVudDoiICIsdHlwZToibm9ybWFsIn0sYj1bLi4ucF07aWYodiE9PSIiJiZiLnB1c2goe2NvbnRlbnQ6dix0eXBlOiJub3JtYWwifSksYi5wdXNoKG0pLGEoYikpcmV0dXJuIE0wdChpLGEsZixiKTtpZihwLmxlbmd0aD4wKWYucHVzaChwKSxpLnVuc2hpZnQobSk7ZWxzZSBpZihtLmNvbnRlbnQpe2NvbnN0W0UsX109SGplKGEsbSk7Zi5wdXNoKFtFXSksXy5jb250ZW50JiZpLnVuc2hpZnQoXyl9cmV0dXJuIE0wdChpLGEsZil9ZnVuY3Rpb24gVmplKGksYSl7YSYmaS5hdHRyKCJzdHlsZSIsYSl9ZnVuY3Rpb24gVWplKGksYSxmLHAsdj0hMSl7Y29uc3QgbT1pLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLGI9bS5hcHBlbmQoInhodG1sOmRpdiIpLEU9YS5sYWJlbCxfPWEuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO2IuaHRtbChgCiAgICA8c3BhbiBjbGFzcz0iJHtffSAke3B9IiBgKyhhLmxhYmVsU3R5bGU/J3N0eWxlPSInK2EubGFiZWxTdHlsZSsnIic6IiIpKyI+IitFKyI8L3NwYW4+IiksVmplKGIsYS5sYWJlbFN0eWxlKSxiLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksYi5zdHlsZSgibWF4LXdpZHRoIixmKyJweCIpLGIuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksdiYmYi5hdHRyKCJjbGFzcyIsImxhYmVsQmtnIik7bGV0IEw9Yi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIEwud2lkdGg9PT1mJiYoYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlIiksYi5zdHlsZSgid2hpdGUtc3BhY2UiLCJicmVhay1zcGFjZXMiKSxiLnN0eWxlKCJ3aWR0aCIsZisicHgiKSxMPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxtLnN0eWxlKCJ3aWR0aCIsTC53aWR0aCksbS5zdHlsZSgiaGVpZ2h0IixMLmhlaWdodCksbS5ub2RlKCl9ZnVuY3Rpb24gb0J0KGksYSxmKXtyZXR1cm4gaS5hcHBlbmQoInRzcGFuIikuYXR0cigiY2xhc3MiLCJ0ZXh0LW91dGVyLXRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsYSpmLS4xKyJlbSIpLmF0dHIoImR5IixmKyJlbSIpfWZ1bmN0aW9uIFdqZShpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgidGV4dCIpLHY9b0J0KHAsMSxhKTtjQnQodixmKTtjb25zdCBtPXYubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO3JldHVybiBwLnJlbW92ZSgpLG19ZnVuY3Rpb24gS2plKGksYSxmLHA9ITEpe2NvbnN0IG09YS5hcHBlbmQoImciKSxiPW0uaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIiksRT1tLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpO2xldCBfPTA7Zm9yKGNvbnN0IEwgb2YgZil7Y29uc3QgTj1qPT5XamUobSwxLjEsaik8PWksQj1OKEwpP1tMXTpHamUoTCxOKTtmb3IoY29uc3QgaiBvZiBCKXtjb25zdCBSPW9CdChFLF8sMS4xKTtjQnQoUixqKSxfKyt9fWlmKHApe2NvbnN0IEw9RS5ub2RlKCkuZ2V0QkJveCgpLE49MjtyZXR1cm4gYi5hdHRyKCJ4IiwtTikuYXR0cigieSIsLU4pLmF0dHIoIndpZHRoIixMLndpZHRoKzIqTikuYXR0cigiaGVpZ2h0IixMLmhlaWdodCsyKk4pLG0ubm9kZSgpfWVsc2UgcmV0dXJuIEUubm9kZSgpfWZ1bmN0aW9uIGNCdChpLGEpe2kudGV4dCgiIiksYS5mb3JFYWNoKChmLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIixmLnR5cGU9PT0iZW1waGFzaXMiPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsZi50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtwPT09MD92LnRleHQoZi5jb250ZW50KTp2LnRleHQoIiAiK2YuY29udGVudCl9KX1jb25zdCBkSz0oaSxhPSIiLHtzdHlsZTpmPSIiLGlzVGl0bGU6cD0hMSxjbGFzc2VzOnY9IiIsdXNlSHRtbExhYmVsczptPSEwLGlzTm9kZTpiPSEwLHdpZHRoOkU9MjAwLGFkZFN2Z0JhY2tncm91bmQ6Xz0hMX09e30pPT57aWYoVXQuaW5mbygiY3JlYXRlVGV4dCIsYSxmLHAsdixtLGIsXyksbSl7Y29uc3QgTD16amUoYSksTj17aXNOb2RlOmIsbGFiZWw6blAoTCkucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLGo9PmA8aSBjbGFzcz0nJHtqLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTpmLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBVamUoaSxOLEUsdixfKX1lbHNle2NvbnN0IEw9JGplKGEpO3JldHVybiBLamUoRSxpLEwsXyl9fSxPZD1hc3luYyhpLGEsZixwKT0+e2xldCB2O2NvbnN0IG09YS51c2VIdG1sTGFiZWxzfHxzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKTtmP3Y9Zjp2PSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsdikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLEU9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGEubGFiZWxTdHlsZSk7bGV0IF87YS5sYWJlbFRleHQ9PT12b2lkIDA/Xz0iIjpfPXR5cGVvZiBhLmxhYmVsVGV4dD09InN0cmluZyI/YS5sYWJlbFRleHQ6YS5sYWJlbFRleHRbMF07Y29uc3QgTD1FLm5vZGUoKTtsZXQgTjthLmxhYmVsVHlwZT09PSJtYXJrZG93biI/Tj1kSyhFLERkKG5QKF8pLExlKCkpLHt1c2VIdG1sTGFiZWxzOm0sd2lkdGg6YS53aWR0aHx8TGUoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0pOk49TC5hcHBlbmRDaGlsZChocChEZChuUChfKSxMZSgpKSxhLmxhYmVsU3R5bGUsITEscCkpO2xldCBCPU4uZ2V0QkJveCgpO2NvbnN0IGo9YS5wYWRkaW5nLzI7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IFI9Ti5jaGlsZHJlblswXSx6PXlyKE4pLEs9Ui5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYoSyl7Y29uc3QgaXQ9Xy5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5LXS5tYXAoc3Q9Pm5ldyBQcm9taXNlKHV0PT57ZnVuY3Rpb24gYnQoKXtpZihzdC5zdHlsZS5kaXNwbGF5PSJmbGV4IixzdC5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGl0KXtjb25zdCBtdD1MZSgpLmZvbnRTaXplP0xlKCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUseXQ9NTtzdC5zdHlsZS53aWR0aD1wYXJzZUludChtdCwxMCkqeXQrInB4In1lbHNlIHN0LnN0eWxlLndpZHRoPSIxMDAlIjt1dChzdCl9c2V0VGltZW91dCgoKT0+e3N0LmNvbXBsZXRlJiZidCgpfSksc3QuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGJ0KSxzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixidCl9KSkpfUI9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx6LmF0dHIoIndpZHRoIixCLndpZHRoKSx6LmF0dHIoImhlaWdodCIsQi5oZWlnaHQpfXJldHVybiBtP0UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIik6RS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistQi5oZWlnaHQvMisiKSIpLGEuY2VudGVyTGFiZWwmJkUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIiksRS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YixiYm94OkIsaGFsZlBhZGRpbmc6aixsYWJlbDpFfX0sUWg9KGksYSk9Pntjb25zdCBmPWEubm9kZSgpLmdldEJCb3goKTtpLndpZHRoPWYud2lkdGgsaS5oZWlnaHQ9Zi5oZWlnaHR9O2Z1bmN0aW9uIEE1KGksYSxmLHApe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYueCsiLCIrdi55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLzIrIiwiK2YvMisiKSIpfWxldCBIbz17fSxjbT17fSx1QnQ9e307Y29uc3QgWWplPSgpPT57Y209e30sdUJ0PXt9LEhvPXt9fSxnSz0oaSxhKT0+KFV0LnRyYWNlKCJJbiBpc0RlY2VuZGFudCIsYSwiICIsaSwiID0gIixjbVthXS5pbmNsdWRlcyhpKSksISFjbVthXS5pbmNsdWRlcyhpKSksWGplPShpLGEpPT4oVXQuaW5mbygiRGVjZW5kYW50cyBvZiAiLGEsIiBpcyAiLGNtW2FdKSxVdC5pbmZvKCJFZGdlIGlzICIsaSksaS52PT09YXx8aS53PT09YT8hMTpjbVthXT9jbVthXS5pbmNsdWRlcyhpLnYpfHxnSyhpLnYsYSl8fGdLKGkudyxhKXx8Y21bYV0uaW5jbHVkZXMoaS53KTooVXQuZGVidWcoIlRpbHQsICIsYSwiLG5vdCBpbiBkZWNlbmRhbnRzIiksITEpKSxsQnQ9KGksYSxmLHApPT57VXQud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGksInJvb3QiLHAsImRhdGEiLGEubm9kZShpKSxwKTtjb25zdCB2PWEuY2hpbGRyZW4oaSl8fFtdO2khPT1wJiZ2LnB1c2goaSksVXQud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsaSwibm9kZXMiLHYpLHYuZm9yRWFjaChtPT57aWYoYS5jaGlsZHJlbihtKS5sZW5ndGg+MClsQnQobSxhLGYscCk7ZWxzZXtjb25zdCBiPWEubm9kZShtKTtVdC5pbmZvKCJjcCAiLG0sIiB0byAiLHAsIiB3aXRoIHBhcmVudCAiLGkpLGYuc2V0Tm9kZShtLGIpLHAhPT1hLnBhcmVudChtKSYmKFV0Lndhcm4oIlNldHRpbmcgcGFyZW50IixtLGEucGFyZW50KG0pKSxmLnNldFBhcmVudChtLGEucGFyZW50KG0pKSksaSE9PXAmJm0hPT1pPyhVdC5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLG0saSksZi5zZXRQYXJlbnQobSxpKSk6KFV0LmluZm8oIkluIGNvcHkgIixpLCJyb290IixwLCJkYXRhIixhLm5vZGUoaSkscCksVXQuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLG0sImNsdXN0ZXIhPT1yb290SWQiLGkhPT1wLCJub2RlIT09Y2x1c3RlcklkIixtIT09aSkpO2NvbnN0IEU9YS5lZGdlcyhtKTtVdC5kZWJ1ZygiQ29weWluZyBFZGdlcyIsRSksRS5mb3JFYWNoKF89PntVdC5pbmZvKCJFZGdlIixfKTtjb25zdCBMPWEuZWRnZShfLnYsXy53LF8ubmFtZSk7VXQuaW5mbygiRWRnZSBkYXRhIixMLHApO3RyeXtYamUoXyxwKT8oVXQuaW5mbygiQ29weWluZyBhcyAiLF8udixfLncsTCxfLm5hbWUpLGYuc2V0RWRnZShfLnYsXy53LEwsXy5uYW1lKSxVdC5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLGYuZWRnZXMoKSxmLmVkZ2UoZi5lZGdlcygpWzBdKSkpOlV0LmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLF8udiwiLS0+IixfLncsIiByb290SWQ6ICIscCwiIGNsdXN0ZXJJZDoiLGkpfWNhdGNoKE4pe1V0LmVycm9yKE4pfX0pfVV0LmRlYnVnKCJSZW1vdmluZyBub2RlIixtKSxhLnJlbW92ZU5vZGUobSl9KX0saEJ0PShpLGEpPT57Y29uc3QgZj1hLmNoaWxkcmVuKGkpO2xldCBwPVsuLi5mXTtmb3IoY29uc3QgdiBvZiBmKXVCdFt2XT1pLHA9Wy4uLnAsLi4uaEJ0KHYsYSldO3JldHVybiBwfSx3UD0oaSxhKT0+e1V0LnRyYWNlKCJTZWFyY2hpbmciLGkpO2NvbnN0IGY9YS5jaGlsZHJlbihpKTtpZihVdC50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsaSxmKSxmLmxlbmd0aDwxKXJldHVybiBVdC50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGkpLGk7Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdj13UChwLGEpO2lmKHYpcmV0dXJuIFV0LnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGksIiA9PiAiLHYpLHZ9fSxwSz1pPT4hSG9baV18fCFIb1tpXS5leHRlcm5hbENvbm5lY3Rpb25zP2k6SG9baV0/SG9baV0uaWQ6aSxRamU9KGksYSk9PntpZighaXx8YT4xMCl7VXQuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFV0LmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO2kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2kuY2hpbGRyZW4oZikubGVuZ3RoPjAmJihVdC53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLGYsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIix3UChmLGkpKSxjbVtmXT1oQnQoZixpKSxIb1tmXT17aWQ6d1AoZixpKSxjbHVzdGVyRGF0YTppLm5vZGUoZil9KX0pLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2NvbnN0IHA9aS5jaGlsZHJlbihmKSx2PWkuZWRnZXMoKTtwLmxlbmd0aD4wPyhVdC5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixmLGNtKSx2LmZvckVhY2gobT0+e2lmKG0udiE9PWYmJm0udyE9PWYpe2NvbnN0IGI9Z0sobS52LGYpLEU9Z0sobS53LGYpO2JeRSYmKFV0Lndhcm4oIkVkZ2U6ICIsbSwiIGxlYXZlcyBjbHVzdGVyICIsZiksVXQud2FybigiRGVjZW5kYW50cyBvZiBYWFggIixmLCI6ICIsY21bZl0pLEhvW2ZdLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApfX0pKTpVdC5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGYsY20pfSksaS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZil7Y29uc3QgcD1pLmVkZ2UoZik7VXQud2FybigiRWRnZSAiK2YudisiIC0+ICIrZi53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZikpLFV0Lndhcm4oIkVkZ2UgIitmLnYrIiAtPiAiK2YudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZShmKSkpO2xldCB2PWYudixtPWYudztpZihVdC53YXJuKCJGaXggWFhYIixIbywiaWRzOiIsZi52LGYudywiVHJhbnNsYXRpbmc6ICIsSG9bZi52XSwiIC0tLSAiLEhvW2Yud10pLEhvW2Yudl0mJkhvW2Yud10mJkhvW2Yudl09PT1Ib1tmLnddKXtVdC53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksVXQud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksdj1wSyhmLnYpLG09cEsoZi53KSxpLnJlbW92ZUVkZ2UoZi52LGYudyxmLm5hbWUpO2NvbnN0IGI9Zi53KyItLS0iK2YudjtpLnNldE5vZGUoYix7ZG9tSWQ6YixpZDpiLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0OnAubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7Y29uc3QgRT1zdHJ1Y3R1cmVkQ2xvbmUocCksXz1zdHJ1Y3R1cmVkQ2xvbmUocCk7RS5sYWJlbD0iIixFLmFycm93VHlwZUVuZD0ibm9uZSIsXy5sYWJlbD0iIixFLmZyb21DbHVzdGVyPWYudixfLnRvQ2x1c3Rlcj1mLnYsaS5zZXRFZGdlKHYsYixFLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIiksaS5zZXRFZGdlKGIsbSxfLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIil9ZWxzZShIb1tmLnZdfHxIb1tmLnddKSYmKFV0Lndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZi52LGYudyxmLm5hbWUpLHY9cEsoZi52KSxtPXBLKGYudyksaS5yZW1vdmVFZGdlKGYudixmLncsZi5uYW1lKSx2IT09Zi52JiYocC5mcm9tQ2x1c3Rlcj1mLnYpLG0hPT1mLncmJihwLnRvQ2x1c3Rlcj1mLncpLFV0Lndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHYsbSxmLm5hbWUpLGkuc2V0RWRnZSh2LG0scCxmLm5hbWUpKX0pLFV0Lndhcm4oIkFkanVzdGVkIEdyYXBoIixTNShpKSksZkJ0KGksMCksVXQudHJhY2UoSG8pfSxmQnQ9KGksYSk9PntpZihVdC53YXJuKCJleHRyYWN0b3IgLSAiLGEsUzUoaSksaS5jaGlsZHJlbigiRCIpKSxhPjEwKXtVdC5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IGY9aS5ub2RlcygpLHA9ITE7Zm9yKGNvbnN0IHYgb2YgZil7Y29uc3QgbT1pLmNoaWxkcmVuKHYpO3A9cHx8bS5sZW5ndGg+MH1pZighcCl7VXQuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixpLm5vZGVzKCkpO3JldHVybn1VdC5kZWJ1ZygiTm9kZXMgPSAiLGYsYSk7Zm9yKGNvbnN0IHYgb2YgZilpZihVdC5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIix2LEhvLEhvW3ZdJiYhSG9bdl0uZXh0ZXJuYWxDb25uZWN0aW9ucywhaS5wYXJlbnQodiksaS5ub2RlKHYpLGkuY2hpbGRyZW4oIkQiKSwiIERlcHRoICIsYSksIUhvW3ZdKVV0LmRlYnVnKCJOb3QgYSBjbHVzdGVyIix2LGEpO2Vsc2UgaWYoIUhvW3ZdLmV4dGVybmFsQ29ubmVjdGlvbnMmJmkuY2hpbGRyZW4odikmJmkuY2hpbGRyZW4odikubGVuZ3RoPjApe1V0Lndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsdixhKTtsZXQgYj1pLmdyYXBoKCkucmFua2Rpcj09PSJUQiI/IkxSIjoiVEIiO0hvW3ZdJiZIb1t2XS5jbHVzdGVyRGF0YSYmSG9bdl0uY2x1c3RlckRhdGEuZGlyJiYoYj1Ib1t2XS5jbHVzdGVyRGF0YS5kaXIsVXQud2FybigiRml4aW5nIGRpciIsSG9bdl0uY2x1c3RlckRhdGEuZGlyLGIpKTtjb25zdCBFPW5ldyBhMSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmIsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtVdC53YXJuKCJPbGQgZ3JhcGggYmVmb3JlIGNvcHkiLFM1KGkpKSxsQnQodixpLEUsdiksaS5zZXROb2RlKHYse2NsdXN0ZXJOb2RlOiEwLGlkOnYsY2x1c3RlckRhdGE6SG9bdl0uY2x1c3RlckRhdGEsbGFiZWxUZXh0OkhvW3ZdLmxhYmVsVGV4dCxncmFwaDpFfSksVXQud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsdiwiKSIsUzUoRSkpLFV0LmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsUzUoaSkpfWVsc2UgVXQud2FybigiQ2x1c3RlciAqKiAiLHYsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFIb1t2XS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFpLnBhcmVudCh2KSwiIGNoaWxkcmVuICIsaS5jaGlsZHJlbih2KSYmaS5jaGlsZHJlbih2KS5sZW5ndGg+MCxpLmNoaWxkcmVuKCJEIiksYSksVXQuZGVidWcoSG8pO2Y9aS5ub2RlcygpLFV0Lndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixmKTtmb3IoY29uc3QgdiBvZiBmKXtjb25zdCBtPWkubm9kZSh2KTtVdC53YXJuKCIgTm93IG5leHQgbGV2ZWwiLHYsbSksbS5jbHVzdGVyTm9kZSYmZkJ0KG0uZ3JhcGgsYSsxKX19LGRCdD0oaSxhKT0+e2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgZj1PYmplY3QuYXNzaWduKGEpO3JldHVybiBhLmZvckVhY2gocD0+e2NvbnN0IHY9aS5jaGlsZHJlbihwKSxtPWRCdChpLHYpO2Y9Wy4uLmYsLi4ubV19KSxmfSxaamU9aT0+ZEJ0KGksaS5jaGlsZHJlbigpKTtmdW5jdGlvbiBKamUoaSxhKXtyZXR1cm4gaS5pbnRlcnNlY3QoYSl9ZnVuY3Rpb24gZ0J0KGksYSxmLHApe3ZhciB2PWkueCxtPWkueSxiPXYtcC54LEU9bS1wLnksXz1NYXRoLnNxcnQoYSphKkUqRStmKmYqYipiKSxMPU1hdGguYWJzKGEqZipiL18pO3AueDx2JiYoTD0tTCk7dmFyIE49TWF0aC5hYnMoYSpmKkUvXyk7cmV0dXJuIHAueTxtJiYoTj0tTikse3g6ditMLHk6bStOfX1mdW5jdGlvbiB0JGUoaSxhLGYpe3JldHVybiBnQnQoaSxhLGEsZil9ZnVuY3Rpb24gZSRlKGksYSxmLHApe3ZhciB2LG0sYixFLF8sTCxOLEIsaixSLHosSyxpdCxzdCx1dDtpZih2PWEueS1pLnksYj1pLngtYS54LF89YS54KmkueS1pLngqYS55LGo9dipmLngrYipmLnkrXyxSPXYqcC54K2IqcC55K18sIShqIT09MCYmUiE9PTAmJnBCdChqLFIpKSYmKG09cC55LWYueSxFPWYueC1wLngsTD1wLngqZi55LWYueCpwLnksTj1tKmkueCtFKmkueStMLEI9bSphLngrRSphLnkrTCwhKE4hPT0wJiZCIT09MCYmcEJ0KE4sQikpJiYoej12KkUtbSpiLHohPT0wKSkpcmV0dXJuIEs9TWF0aC5hYnMoei8yKSxpdD1iKkwtRSpfLHN0PWl0PDA/KGl0LUspL3o6KGl0K0spL3osaXQ9bSpfLXYqTCx1dD1pdDwwPyhpdC1LKS96OihpdCtLKS96LHt4OnN0LHk6dXR9fWZ1bmN0aW9uIHBCdChpLGEpe3JldHVybiBpKmE+MH1mdW5jdGlvbiBuJGUoaSxhLGYpe3ZhciBwPWkueCx2PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBhLmZvckVhY2g9PSJmdW5jdGlvbiI/YS5mb3JFYWNoKGZ1bmN0aW9uKHope2I9TWF0aC5taW4oYix6LngpLEU9TWF0aC5taW4oRSx6LnkpfSk6KGI9TWF0aC5taW4oYixhLngpLEU9TWF0aC5taW4oRSxhLnkpKTtmb3IodmFyIF89cC1pLndpZHRoLzItYixMPXYtaS5oZWlnaHQvMi1FLE49MDtOPGEubGVuZ3RoO04rKyl7dmFyIEI9YVtOXSxqPWFbTjxhLmxlbmd0aC0xP04rMTowXSxSPWUkZShpLGYse3g6XytCLngseTpMK0IueX0se3g6XytqLngseTpMK2oueX0pO1ImJm0ucHVzaChSKX1yZXR1cm4gbS5sZW5ndGg/KG0ubGVuZ3RoPjEmJm0uc29ydChmdW5jdGlvbih6LEspe3ZhciBpdD16LngtZi54LHN0PXoueS1mLnksdXQ9TWF0aC5zcXJ0KGl0Kml0K3N0KnN0KSxidD1LLngtZi54LG10PUsueS1mLnkseXQ9TWF0aC5zcXJ0KGJ0KmJ0K210Km10KTtyZXR1cm4gdXQ8eXQ/LTE6dXQ9PT15dD8wOjF9KSxtWzBdKTppfWNvbnN0IG1QPShpLGEpPT57dmFyIGY9aS54LHA9aS55LHY9YS54LWYsbT1hLnktcCxiPWkud2lkdGgvMixFPWkuaGVpZ2h0LzIsXyxMO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHYpKkU/KG08MCYmKEU9LUUpLF89bT09PTA/MDpFKnYvbSxMPUUpOih2PDAmJihiPS1iKSxfPWIsTD12PT09MD8wOmIqbS92KSx7eDpmK18seTpwK0x9fSx5aD17bm9kZTpKamUsY2lyY2xlOnQkZSxlbGxpcHNlOmdCdCxwb2x5Z29uOm4kZSxyZWN0Om1QfSxyJGU9YXN5bmMoaSxhKT0+e2EudXNlSHRtbExhYmVsc3x8TGUoKS5mbG93Y2hhcnQuaHRtbExhYmVsc3x8KGEuY2VudGVyTGFiZWw9ITApO2NvbnN0e3NoYXBlU3ZnOnAsYmJveDp2LGhhbGZQYWRkaW5nOm19PWF3YWl0IE9kKGksYSwibm9kZSAiK2EuY2xhc3NlcywhMCk7VXQuaW5mbygiQ2xhc3NlcyA9ICIsYS5jbGFzc2VzKTtjb25zdCBiPXAuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGIuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJ4Iiwtdi53aWR0aC8yLW0pLmF0dHIoInkiLC12LmhlaWdodC8yLW0pLmF0dHIoIndpZHRoIix2LndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0Iix2LmhlaWdodCthLnBhZGRpbmcpLFFoKGEsYiksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHloLnJlY3QoYSxFKX0scH0sYkJ0PWk9Pmk/IiAiK2k6IiIsUGI9KGksYSk9PmAke2F8fCJub2RlIGRlZmF1bHQifSR7YkJ0KGkuY2xhc3Nlcyl9ICR7YkJ0KGkuY2xhc3MpfWAsdkJ0PWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksdj1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPXYrbSxFPVt7eDpiLzIseTowfSx7eDpiLHk6LWIvMn0se3g6Yi8yLHk6LWJ9LHt4OjAseTotYi8yfV07VXQuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO2NvbnN0IF89QTUoZixiLGIsRSk7cmV0dXJuIF8uYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsXyksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTCl7cmV0dXJuIFV0Lndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSx5aC5wb2x5Z29uKGEsRSxMKX0sZn0saSRlPShpLGEpPT57Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHA9Mjgsdj1be3g6MCx5OnAvMn0se3g6cC8yLHk6MH0se3g6MCx5Oi1wLzJ9LHt4Oi1wLzIseTowfV07cmV0dXJuIGYuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIix2Lm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi54KyIsIitiLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGEud2lkdGg9MjgsYS5oZWlnaHQ9MjgsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIHloLmNpcmNsZShhLDE0LGIpfSxmfSxzJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PTQsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1tL3YsRT1wLndpZHRoKzIqYithLnBhZGRpbmcsXz1be3g6Yix5OjB9LHt4OkUtYix5OjB9LHt4OkUseTotbS8yfSx7eDpFLWIseTotbX0se3g6Yix5Oi1tfSx7eDowLHk6LW0vMn1dLEw9QTUoZixFLG0sXyk7cmV0dXJuIEwuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsTCksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTil7cmV0dXJuIHloLnBvbHlnb24oYSxfLE4pfSxmfSxhJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi1tLzIseTowfSx7eDp2LHk6MH0se3g6dix5Oi1tfSx7eDotbS8yLHk6LW19LHt4OjAseTotbS8yfV07cmV0dXJuIEE1KGYsdixtLGIpLmF0dHIoInN0eWxlIixhLnN0eWxlKSxhLndpZHRoPXYrbSxhLmhlaWdodD1tLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiB5aC5wb2x5Z29uKGEsYixfKX0sZn0sbyRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEpLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OnYtbS82LHk6MH0se3g6disyKm0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSxjJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjIqbS82LHk6MH0se3g6dittLzYseTowfSx7eDp2LTIqbS82LHk6LW19LHt4Oi1tLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSx1JGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OnYrMiptLzYseTowfSx7eDp2LW0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSxsJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Om0vNix5OjB9LHt4OnYtbS82LHk6MH0se3g6disyKm0vNix5Oi1tfSx7eDotMiptLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSxoJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDp2K20vMix5OjB9LHt4OnYseTotbS8yfSx7eDp2K20vMix5Oi1tfSx7eDowLHk6LW19XSxFPUE1KGYsdixtLGIpO3JldHVybiBFLmF0dHIoInN0eWxlIixhLnN0eWxlKSxRaChhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiB5aC5wb2x5Z29uKGEsYixfKX0sZn0sZiRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksdj1wLndpZHRoK2EucGFkZGluZyxtPXYvMixiPW0vKDIuNSt2LzUwKSxFPXAuaGVpZ2h0K2IrYS5wYWRkaW5nLF89Ik0gMCwiK2IrIiBhICIrbSsiLCIrYisiIDAsMCwwICIrdisiIDAgYSAiK20rIiwiK2IrIiAwLDAsMCAiKy12KyIgMCBsIDAsIitFKyIgYSAiK20rIiwiK2IrIiAwLDAsMCAiK3YrIiAwIGwgMCwiKy1FLEw9Zi5hdHRyKCJsYWJlbC1vZmZzZXQteSIsYikuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoImQiLF8pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy12LzIrIiwiKy0oRS8yK2IpKyIpIik7cmV0dXJuIFFoKGEsTCksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTil7Y29uc3QgQj15aC5yZWN0KGEsTiksaj1CLngtYS54O2lmKG0hPTAmJihNYXRoLmFicyhqKTxhLndpZHRoLzJ8fE1hdGguYWJzKGopPT1hLndpZHRoLzImJk1hdGguYWJzKEIueS1hLnkpPmEuaGVpZ2h0LzItYikpe2xldCBSPWIqYiooMS1qKmovKG0qbSkpO1IhPTAmJihSPU1hdGguc3FydChSKSksUj1iLVIsTi55LWEueT4wJiYoUj0tUiksQi55Kz1SfXJldHVybiBCfSxmfSxkJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwLGhhbGZQYWRkaW5nOnZ9PWF3YWl0IE9kKGksYSwibm9kZSAiK2EuY2xhc3NlcysiICIrYS5jbGFzcywhMCksbT1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGI9cC53aWR0aCthLnBhZGRpbmcsRT1wLmhlaWdodCthLnBhZGRpbmc7aWYobS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLC1wLndpZHRoLzItdikuYXR0cigieSIsLXAuaGVpZ2h0LzItdikuYXR0cigid2lkdGgiLGIpLmF0dHIoImhlaWdodCIsRSksYS5wcm9wcyl7Y29uc3QgXz1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJih3QnQobSxhLnByb3BzLmJvcmRlcnMsYixFKSxfLmRlbGV0ZSgiYm9yZGVycyIpKSxfLmZvckVhY2goTD0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0x9YCl9KX1yZXR1cm4gUWgoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4geWgucmVjdChhLF8pfSxmfSxnJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmZ9PWF3YWl0IE9kKGksYSwibGFiZWwiLCEwKTtVdC50cmFjZSgiQ2xhc3NlcyA9ICIsYS5jbGFzcyk7Y29uc3QgcD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9MCxtPTA7aWYocC5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0IixtKSxmLmF0dHIoImNsYXNzIiwibGFiZWwgZWRnZUxhYmVsIiksYS5wcm9wcyl7Y29uc3QgYj1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJih3QnQocCxhLnByb3BzLmJvcmRlcnMsdixtKSxiLmRlbGV0ZSgiYm9yZGVycyIpKSxiLmZvckVhY2goRT0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0V9YCl9KX1yZXR1cm4gUWgoYSxwKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4geWgucmVjdChhLGIpfSxmfTtmdW5jdGlvbiB3QnQoaSxhLGYscCl7Y29uc3Qgdj1bXSxtPUU9Pnt2LnB1c2goRSwwKX0sYj1FPT57di5wdXNoKDAsRSl9O2EuaW5jbHVkZXMoInQiKT8oVXQuZGVidWcoImFkZCB0b3AgYm9yZGVyIiksbShmKSk6YihmKSxhLmluY2x1ZGVzKCJyIik/KFV0LmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksbShwKSk6YihwKSxhLmluY2x1ZGVzKCJiIik/KFV0LmRlYnVnKCJhZGQgYm90dG9tIGJvcmRlciIpLG0oZikpOmIoZiksYS5pbmNsdWRlcygibCIpPyhVdC5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksbShwKSk6YihwKSxpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLHYuam9pbigiICIpKX1jb25zdCBwJGU9KGksYSk9PntsZXQgZjthLmNsYXNzZXM/Zj0ibm9kZSAiK2EuY2xhc3NlczpmPSJub2RlIGRlZmF1bHQiO2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHY9cC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxtPXAuaW5zZXJ0KCJsaW5lIiksYj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxFPWEubGFiZWxUZXh0LmZsYXQ/YS5sYWJlbFRleHQuZmxhdCgpOmEubGFiZWxUZXh0O2xldCBfPSIiO3R5cGVvZiBFPT0ib2JqZWN0Ij9fPUVbMF06Xz1FLFV0LmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLF8sRSx0eXBlb2YgRT09Im9iamVjdCIpO2NvbnN0IEw9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAoXyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgTj17d2lkdGg6MCxoZWlnaHQ6MH07aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEs9TC5jaGlsZHJlblswXSxpdD15cihMKTtOPUsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaXQuYXR0cigid2lkdGgiLE4ud2lkdGgpLGl0LmF0dHIoImhlaWdodCIsTi5oZWlnaHQpfVV0LmluZm8oIlRleHQgMiIsRSk7Y29uc3QgQj1FLnNsaWNlKDEsRS5sZW5ndGgpO2xldCBqPUwuZ2V0QkJveCgpO2NvbnN0IFI9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAoQi5qb2luP0Iuam9pbigiPGJyLz4iKTpCLGEubGFiZWxTdHlsZSwhMCwhMCkpO2lmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBLPVIuY2hpbGRyZW5bMF0saXQ9eXIoUik7Tj1LLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGl0LmF0dHIoIndpZHRoIixOLndpZHRoKSxpdC5hdHRyKCJoZWlnaHQiLE4uaGVpZ2h0KX1jb25zdCB6PWEucGFkZGluZy8yO3JldHVybiB5cihSKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKE4ud2lkdGg+ai53aWR0aD8wOihqLndpZHRoLU4ud2lkdGgpLzIpKyIsICIrKGouaGVpZ2h0K3orNSkrIikiKSx5cihMKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKE4ud2lkdGg8ai53aWR0aD8wOi0oai53aWR0aC1OLndpZHRoKS8yKSsiLCAwKSIpLE49Yi5ub2RlKCkuZ2V0QkJveCgpLGIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLU4ud2lkdGgvMisiLCAiKygtTi5oZWlnaHQvMi16KzMpKyIpIiksdi5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLU4ud2lkdGgvMi16KS5hdHRyKCJ5IiwtTi5oZWlnaHQvMi16KS5hdHRyKCJ3aWR0aCIsTi53aWR0aCthLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsTi5oZWlnaHQrYS5wYWRkaW5nKSxtLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtTi53aWR0aC8yLXopLmF0dHIoIngyIixOLndpZHRoLzIreikuYXR0cigieTEiLC1OLmhlaWdodC8yLXorai5oZWlnaHQreikuYXR0cigieTIiLC1OLmhlaWdodC8yLXorai5oZWlnaHQreiksUWgoYSx2KSxhLmludGVyc2VjdD1mdW5jdGlvbihLKXtyZXR1cm4geWgucmVjdChhLEspfSxwfSxiJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAuaGVpZ2h0K2EucGFkZGluZyxtPXAud2lkdGgrdi80K2EucGFkZGluZyxiPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4Iix2LzIpLmF0dHIoInJ5Iix2LzIpLmF0dHIoIngiLC1tLzIpLmF0dHIoInkiLC12LzIpLmF0dHIoIndpZHRoIixtKS5hdHRyKCJoZWlnaHQiLHYpO3JldHVybiBRaChhLGIpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB5aC5yZWN0KGEsRSl9LGZ9LHYkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnAsaGFsZlBhZGRpbmc6dn09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksbT1mLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG0uYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigiciIscC53aWR0aC8yK3YpLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixwLmhlaWdodCthLnBhZGRpbmcpLFV0LmluZm8oIkNpcmNsZSBtYWluIiksUWgoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gVXQuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsYSxwLndpZHRoLzIrdixiKSx5aC5jaXJjbGUoYSxwLndpZHRoLzIrdixiKX0sZn0sdyRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cCxoYWxmUGFkZGluZzp2fT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSxtPTUsYj1mLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLEU9Yi5pbnNlcnQoImNpcmNsZSIpLF89Yi5pbnNlcnQoImNpcmNsZSIpO3JldHVybiBiLmF0dHIoImNsYXNzIixhLmNsYXNzKSxFLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoInIiLHAud2lkdGgvMit2K20pLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZyttKjIpLmF0dHIoImhlaWdodCIscC5oZWlnaHQrYS5wYWRkaW5nK20qMiksXy5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJyIixwLndpZHRoLzIrdikuYXR0cigid2lkdGgiLHAud2lkdGgrYS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K2EucGFkZGluZyksVXQuaW5mbygiRG91YmxlQ2lyY2xlIG1haW4iKSxRaChhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEwpe3JldHVybiBVdC5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixhLHAud2lkdGgvMit2K20sTCkseWguY2lyY2xlKGEscC53aWR0aC8yK3YrbSxMKX0sZn0sbSRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksdj1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPVt7eDowLHk6MH0se3g6dix5OjB9LHt4OnYseTotbX0se3g6MCx5Oi1tfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDp2KzgseTowfSx7eDp2KzgseTotbX0se3g6LTgseTotbX0se3g6LTgseTowfV0sRT1BNShmLHYsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksUWgoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4geWgucG9seWdvbihhLGIsXyl9LGZ9LHkkZT0oaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcC5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxRaChhLHApLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKHYpe3JldHVybiB5aC5jaXJjbGUoYSw3LHYpfSxmfSxtQnQ9KGksYSxmKT0+e2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKTtsZXQgdj03MCxtPTEwO2Y9PT0iTFIiJiYodj0xMCxtPTcwKTtjb25zdCBiPXAuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqdi8yKS5hdHRyKCJ5IiwtMSptLzIpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIFFoKGEsYiksYS5oZWlnaHQ9YS5oZWlnaHQrYS5wYWRkaW5nLzIsYS53aWR0aD1hLndpZHRoK2EucGFkZGluZy8yLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB5aC5yZWN0KGEsRSl9LHB9LHlCdD17cmhvbWJ1czp2QnQscXVlc3Rpb246dkJ0LHJlY3Q6ZCRlLGxhYmVsUmVjdDpnJGUscmVjdFdpdGhUaXRsZTpwJGUsY2hvaWNlOmkkZSxjaXJjbGU6diRlLGRvdWJsZWNpcmNsZTp3JGUsc3RhZGl1bTpiJGUsaGV4YWdvbjpzJGUscmVjdF9sZWZ0X2ludl9hcnJvdzphJGUsbGVhbl9yaWdodDpvJGUsbGVhbl9sZWZ0OmMkZSx0cmFwZXpvaWQ6dSRlLGludl90cmFwZXpvaWQ6bCRlLHJlY3RfcmlnaHRfaW52X2Fycm93OmgkZSxjeWxpbmRlcjpmJGUsc3RhcnQ6eSRlLGVuZDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSx2PWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxwLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSxRaChhLHYpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiB5aC5jaXJjbGUoYSw3LG0pfSxmfSxub3RlOnIkZSxzdWJyb3V0aW5lOm0kZSxmb3JrOm1CdCxqb2luOm1CdCxjbGFzc19ib3g6KGksYSk9Pntjb25zdCBmPWEucGFkZGluZy8yLHA9NCx2PTg7bGV0IG07YS5jbGFzc2VzP209Im5vZGUgIithLmNsYXNzZXM6bT0ibm9kZSBkZWZhdWx0Ijtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG0pLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxFPWIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksXz1iLmluc2VydCgibGluZSIpLEw9Yi5pbnNlcnQoImxpbmUiKTtsZXQgTj0wLEI9cDtjb25zdCBqPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2xldCBSPTA7Y29uc3Qgej1hLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmYS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0sSz1hLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2EuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIsaXQ9ai5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAoSyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgc3Q9aXQuZ2V0QkJveCgpO2lmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCB3dD1pdC5jaGlsZHJlblswXSxYPXlyKGl0KTtzdD13dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxYLmF0dHIoIndpZHRoIixzdC53aWR0aCksWC5hdHRyKCJoZWlnaHQiLHN0LmhlaWdodCl9YS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihCKz1zdC5oZWlnaHQrcCxOKz1zdC53aWR0aCk7bGV0IHV0PWEuY2xhc3NEYXRhLmxhYmVsO2EuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmEuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/dXQrPSImbHQ7IithLmNsYXNzRGF0YS50eXBlKyImZ3Q7Ijp1dCs9IjwiK2EuY2xhc3NEYXRhLnR5cGUrIj4iKTtjb25zdCBidD1qLm5vZGUoKS5hcHBlbmRDaGlsZChocCh1dCxhLmxhYmVsU3R5bGUsITAsITApKTt5cihidCkuYXR0cigiY2xhc3MiLCJjbGFzc1RpdGxlIik7bGV0IG10PWJ0LmdldEJCb3goKTtpZihzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3Qgd3Q9YnQuY2hpbGRyZW5bMF0sWD15cihidCk7bXQ9d3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksWC5hdHRyKCJ3aWR0aCIsbXQud2lkdGgpLFguYXR0cigiaGVpZ2h0IixtdC5oZWlnaHQpfUIrPW10LmhlaWdodCtwLG10LndpZHRoPk4mJihOPW10LndpZHRoKTtjb25zdCB5dD1bXTthLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2god3Q9Pntjb25zdCBYPXd0LmdldERpc3BsYXlEZXRhaWxzKCk7bGV0IHB0PVguZGlzcGxheVRleHQ7TGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHB0PXB0LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtjb25zdCBVPWoubm9kZSgpLmFwcGVuZENoaWxkKGhwKHB0LFguY3NzU3R5bGU/WC5jc3NTdHlsZTphLmxhYmVsU3R5bGUsITAsITApKTtsZXQgeHQ9VS5nZXRCQm94KCk7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IG50PVUuY2hpbGRyZW5bMF0sT3Q9eXIoVSk7eHQ9bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksT3QuYXR0cigid2lkdGgiLHh0LndpZHRoKSxPdC5hdHRyKCJoZWlnaHQiLHh0LmhlaWdodCl9eHQud2lkdGg+TiYmKE49eHQud2lkdGgpLEIrPXh0LmhlaWdodCtwLHl0LnB1c2goVSl9KSxCKz12O2NvbnN0IGR0PVtdO2lmKGEuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaCh3dD0+e2NvbnN0IFg9d3QuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgcHQ9WC5kaXNwbGF5VGV4dDtMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYocHQ9cHQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFU9ai5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAocHQsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOmEubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4dD1VLmdldEJCb3goKTtpZihzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgbnQ9VS5jaGlsZHJlblswXSxPdD15cihVKTt4dD1udC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxPdC5hdHRyKCJ3aWR0aCIseHQud2lkdGgpLE90LmF0dHIoImhlaWdodCIseHQuaGVpZ2h0KX14dC53aWR0aD5OJiYoTj14dC53aWR0aCksQis9eHQuaGVpZ2h0K3AsZHQucHVzaChVKX0pLEIrPXYseil7bGV0IHd0PShOLXN0LndpZHRoKS8yO3lyKGl0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKk4vMit3dCkrIiwgIistMSpCLzIrIikiKSxSPXN0LmhlaWdodCtwfWxldCBodD0oTi1tdC53aWR0aCkvMjtyZXR1cm4geXIoYnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqTi8yK2h0KSsiLCAiKygtMSpCLzIrUikrIikiKSxSKz1tdC5oZWlnaHQrcCxfLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtTi8yLWYpLmF0dHIoIngyIixOLzIrZikuYXR0cigieTEiLC1CLzItZit2K1IpLmF0dHIoInkyIiwtQi8yLWYrditSKSxSKz12LHl0LmZvckVhY2god3Q9Pnt5cih3dCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1OLzIrIiwgIisoLTEqQi8yK1Irdi8yKSsiKSIpO2NvbnN0IFg9d3Q9PW51bGw/dm9pZCAwOnd0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLFIrPXYsTC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLU4vMi1mKS5hdHRyKCJ4MiIsTi8yK2YpLmF0dHIoInkxIiwtQi8yLWYrditSKS5hdHRyKCJ5MiIsLUIvMi1mK3YrUiksUis9dixkdC5mb3JFYWNoKHd0PT57eXIod3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistTi8yKyIsICIrKC0xKkIvMitSKSsiKSIpO2NvbnN0IFg9d3Q9PW51bGw/dm9pZCAwOnd0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLEUuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1OLzItZikuYXR0cigieSIsLShCLzIpLWYpLmF0dHIoIndpZHRoIixOK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixCK2EucGFkZGluZyksUWgoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbih3dCl7cmV0dXJuIHloLnJlY3QoYSx3dCl9LGJ9fTtsZXQgckw9e307Y29uc3QgeEJ0PWFzeW5jKGksYSxmKT0+e2xldCBwLHY7aWYoYS5saW5rKXtsZXQgbTtMZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/bT0iX3RvcCI6YS5saW5rVGFyZ2V0JiYobT1hLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxwPWkuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGEubGluaykuYXR0cigidGFyZ2V0IixtKSx2PWF3YWl0IHlCdFthLnNoYXBlXShwLGEsZil9ZWxzZSB2PWF3YWl0IHlCdFthLnNoYXBlXShpLGEsZikscD12O3JldHVybiBhLnRvb2x0aXAmJnYuYXR0cigidGl0bGUiLGEudG9vbHRpcCksYS5jbGFzcyYmdi5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2EuY2xhc3MpLHJMW2EuaWRdPXAsYS5oYXZlQ2FsbGJhY2smJnJMW2EuaWRdLmF0dHIoImNsYXNzIixyTFthLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIikscH0seCRlPShpLGEpPT57ckxbYS5pZF09aX0sayRlPSgpPT57ckw9e319LGtCdD1pPT57Y29uc3QgYT1yTFtpLmlkXTtVdC50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLGkuZGlmZixpLCJ0cmFuc2xhdGUoIisoaS54LWkud2lkdGgvMi01KSsiLCAiK2kud2lkdGgvMisiKSIpO2NvbnN0IGY9OCxwPWkuZGlmZnx8MDtyZXR1cm4gaS5jbHVzdGVyTm9kZT9hLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLngrcC1pLndpZHRoLzIpKyIsICIrKGkueS1pLmhlaWdodC8yLWYpKyIpIik6YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLngrIiwgIitpLnkrIikiKSxwfSxFJGU9e3JlY3Q6KGksYSk9PntVdC5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGEuaWQsYSk7Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIrKGEuY2xhc3M/IiAiK2EuY2xhc3M6IiIpKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9czEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGI9YS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP2RLKG0sYS5sYWJlbFRleHQse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnZ9KTptLm5vZGUoKS5hcHBlbmRDaGlsZChocChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGo9Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9ai5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfWNvbnN0IF89MCphLnBhZGRpbmcsTD1fLzIsTj1hLndpZHRoPD1FLndpZHRoK18/RS53aWR0aCtfOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCtfP2EuZGlmZj0oRS53aWR0aC1hLndpZHRoKS8yLWEucGFkZGluZy8yOmEuZGlmZj0tYS5wYWRkaW5nLzIsVXQudHJhY2UoIkRhdGEgIixhLEpTT04uc3RyaW5naWZ5KGEpKSxwLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLGEueC1OLzIpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUwpLmF0dHIoIndpZHRoIixOKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K18pLHY/bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS54LUUud2lkdGgvMikrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik6bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLngrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik7Y29uc3QgQj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Qi53aWR0aCxhLmhlaWdodD1CLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gbVAoYSxqKX0sZn0scm91bmRlZFdpdGhUaXRsZTooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxtPWYuYXBwZW5kKCJyZWN0IiksYj12Lm5vZGUoKS5hcHBlbmRDaGlsZChocChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGo9Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9ai5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfUU9Yi5nZXRCQm94KCk7Y29uc3QgXz0wKmEucGFkZGluZyxMPV8vMixOPWEud2lkdGg8PUUud2lkdGgrYS5wYWRkaW5nP0Uud2lkdGgrYS5wYWRkaW5nOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCthLnBhZGRpbmc/YS5kaWZmPShFLndpZHRoK2EucGFkZGluZyowLWEud2lkdGgpLzI6YS5kaWZmPS1hLnBhZGRpbmcvMixwLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixhLngtTi8yLUwpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUwpLmF0dHIoIndpZHRoIixOK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXyksbS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsYS54LU4vMi1MKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1MK0UuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixOK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXy1FLmhlaWdodC0zKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLngtRS53aWR0aC8yKSsiLCAiKyhhLnktYS5oZWlnaHQvMi1hLnBhZGRpbmcvMysoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/NTozKSkrIikiKTtjb25zdCBCPXAubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS5oZWlnaHQ9Qi5oZWlnaHQsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oail7cmV0dXJuIG1QKGEsail9LGZ9LG5vdGVHcm91cDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixhLmlkKSxwPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksdj0wKmEucGFkZGluZyxtPXYvMjtwLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigieCIsYS54LWEud2lkdGgvMi1tKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1tKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt2KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3YpLmF0dHIoImZpbGwiLCJub25lIik7Y29uc3QgYj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Yi53aWR0aCxhLmhlaWdodD1iLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gbVAoYSxFKX0sZn0sZGl2aWRlcjooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9MCphLnBhZGRpbmcsbT12LzI7cC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixhLngtYS53aWR0aC8yLW0pLmF0dHIoInkiLGEueS1hLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt2KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3YpO2NvbnN0IGI9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBhLndpZHRoPWIud2lkdGgsYS5oZWlnaHQ9Yi5oZWlnaHQsYS5kaWZmPS1hLnBhZGRpbmcvMixhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gbVAoYSxFKX0sZn19O2xldCBFQnQ9e307Y29uc3QgVCRlPShpLGEpPT57VXQudHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7Y29uc3QgZj1hLnNoYXBlfHwicmVjdCI7RUJ0W2EuaWRdPUUkZVtmXShpLGEpfSxDJGU9KCk9PntFQnQ9e319LGxrPXthZ2dyZWdhdGlvbjoxOCxleHRlbnNpb246MTgsY29tcG9zaXRpb246MTgsZGVwZW5kZW5jeTo2LGxvbGxpcG9wOjEzLjUsYXJyb3dfcG9pbnQ6NS4zfTtmdW5jdGlvbiBiSyhpLGEpe2k9dksoaSksYT12SyhhKTtjb25zdFtmLHBdPVtpLngsaS55XSxbdixtXT1bYS54LGEueV0sYj12LWYsRT1tLXA7cmV0dXJue2FuZ2xlOk1hdGguYXRhbihFL2IpLGRlbHRhWDpiLGRlbHRhWTpFfX1jb25zdCB2Sz1pPT5BcnJheS5pc0FycmF5KGkpP3t4OmlbMF0seTppWzFdfTppLFRCdD1pPT4oe3g6ZnVuY3Rpb24oYSxmLHApe2xldCB2PTA7aWYoZj09PTAmJk9iamVjdC5oYXNPd24obGssaS5hcnJvd1R5cGVTdGFydCkpe2NvbnN0e2FuZ2xlOm0sZGVsdGFYOmJ9PWJLKHBbMF0scFsxXSk7dj1sa1tpLmFycm93VHlwZVN0YXJ0XSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1lbHNlIGlmKGY9PT1wLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKGxrLGkuYXJyb3dUeXBlRW5kKSl7Y29uc3R7YW5nbGU6bSxkZWx0YVg6Yn09YksocFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTJdKTt2PWxrW2kuYXJyb3dUeXBlRW5kXSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1yZXR1cm4gdksoYSkueCt2fSx5OmZ1bmN0aW9uKGEsZixwKXtsZXQgdj0wO2lmKGY9PT0wJiZPYmplY3QuaGFzT3duKGxrLGkuYXJyb3dUeXBlU3RhcnQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1iSyhwWzBdLHBbMV0pO3Y9bGtbaS5hcnJvd1R5cGVTdGFydF0qTWF0aC5hYnMoTWF0aC5zaW4obSkpKihiPj0wPzE6LTEpfWVsc2UgaWYoZj09PXAubGVuZ3RoLTEmJk9iamVjdC5oYXNPd24obGssaS5hcnJvd1R5cGVFbmQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1iSyhwW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMl0pO3Y9bGtbaS5hcnJvd1R5cGVFbmRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooYj49MD8xOi0xKX1yZXR1cm4gdksoYSkueSt2fX0pO2xldCB3Sz17fSxOZD17fTtjb25zdCBfJGU9KCk9Pnt3Sz17fSxOZD17fX0sQ0J0PShpLGEpPT57Y29uc3QgZj1zMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxwPWEubGFiZWxUeXBlPT09Im1hcmtkb3duIj9kSyhpLGEubGFiZWwse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOmYsYWRkU3ZnQmFja2dyb3VuZDohMH0pOmhwKGEubGFiZWwsYS5sYWJlbFN0eWxlKTtVdC5pbmZvKCJhYmM4MiIsYSxhLmxhYmVsVHlwZSk7Y29uc3Qgdj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksbT12Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTttLm5vZGUoKS5hcHBlbmRDaGlsZChwKTtsZXQgYj1wLmdldEJCb3goKTtpZihmKXtjb25zdCBfPXAuY2hpbGRyZW5bMF0sTD15cihwKTtiPV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTC5hdHRyKCJ3aWR0aCIsYi53aWR0aCksTC5hdHRyKCJoZWlnaHQiLGIuaGVpZ2h0KX1tLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1iLndpZHRoLzIrIiwgIistYi5oZWlnaHQvMisiKSIpLHdLW2EuaWRdPXYsYS53aWR0aD1iLndpZHRoLGEuaGVpZ2h0PWIuaGVpZ2h0O2xldCBFO2lmKGEuc3RhcnRMYWJlbExlZnQpe2NvbnN0IF89aHAoYS5zdGFydExhYmVsTGVmdCxhLmxhYmVsU3R5bGUpLEw9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxOPUwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLE5kW2EuaWRdfHwoTmRbYS5pZF09e30pLE5kW2EuaWRdLnN0YXJ0TGVmdD1MLG1LKEUsYS5zdGFydExhYmVsTGVmdCl9aWYoYS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IF89aHAoYS5zdGFydExhYmVsUmlnaHQsYS5sYWJlbFN0eWxlKSxMPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksTj1MLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPUwubm9kZSgpLmFwcGVuZENoaWxkKF8pLE4ubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxOZFthLmlkXXx8KE5kW2EuaWRdPXt9KSxOZFthLmlkXS5zdGFydFJpZ2h0PUwsbUsoRSxhLnN0YXJ0TGFiZWxSaWdodCl9aWYoYS5lbmRMYWJlbExlZnQpe2NvbnN0IF89aHAoYS5lbmRMYWJlbExlZnQsYS5sYWJlbFN0eWxlKSxMPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksTj1MLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPU4ubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxMLm5vZGUoKS5hcHBlbmRDaGlsZChfKSxOZFthLmlkXXx8KE5kW2EuaWRdPXt9KSxOZFthLmlkXS5lbmRMZWZ0PUwsbUsoRSxhLmVuZExhYmVsTGVmdCl9aWYoYS5lbmRMYWJlbFJpZ2h0KXtjb25zdCBfPWhwKGEuZW5kTGFiZWxSaWdodCxhLmxhYmVsU3R5bGUpLEw9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxOPUwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLEwubm9kZSgpLmFwcGVuZENoaWxkKF8pLE5kW2EuaWRdfHwoTmRbYS5pZF09e30pLE5kW2EuaWRdLmVuZFJpZ2h0PUwsbUsoRSxhLmVuZExhYmVsUmlnaHQpfXJldHVybiBwfTtmdW5jdGlvbiBtSyhpLGEpe0xlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJmkmJihpLnN0eWxlLndpZHRoPWEubGVuZ3RoKjkrInB4IixpLnN0eWxlLmhlaWdodD0iMTJweCIpfWNvbnN0IFMkZT0oaSxhKT0+e1V0LmluZm8oIk1vdmluZyBsYWJlbCBhYmM3OCAiLGkuaWQsaS5sYWJlbCx3S1tpLmlkXSk7bGV0IGY9YS51cGRhdGVkUGF0aD9hLnVwZGF0ZWRQYXRoOmEub3JpZ2luYWxQYXRoO2lmKGkubGFiZWwpe2NvbnN0IHA9d0tbaS5pZF07bGV0IHY9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY0xhYmVsUG9zaXRpb24oZik7VXQuaW5mbygiTW92aW5nIGxhYmVsICIraS5sYWJlbCsiIGZyb20gKCIsdiwiLCIsbSwiKSB0byAoIixiLngsIiwiLGIueSwiKSBhYmM3OCIpLGEudXBkYXRlZFBhdGgmJih2PWIueCxtPWIueSl9cC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsICIrbSsiKSIpfWlmKGkuc3RhcnRMYWJlbExlZnQpe2NvbnN0IHA9TmRbaS5pZF0uc3RhcnRMZWZ0O2xldCB2PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9sZWZ0IixmKTt2PWIueCxtPWIueX1wLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwgIittKyIpIil9aWYoaS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IHA9TmRbaS5pZF0uc3RhcnRSaWdodDtsZXQgdj1pLngsbT1pLnk7aWYoZil7Y29uc3QgYj0kYS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLGYpO3Y9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX1pZihpLmVuZExhYmVsTGVmdCl7Y29uc3QgcD1OZFtpLmlkXS5lbmRMZWZ0O2xldCB2PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLGYpO3Y9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX1pZihpLmVuZExhYmVsUmlnaHQpe2NvbnN0IHA9TmRbaS5pZF0uZW5kUmlnaHQ7bGV0IHY9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZUVuZD8xMDowLCJlbmRfcmlnaHQiLGYpO3Y9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX19LEEkZT0oaSxhKT0+e2NvbnN0IGY9aS54LHA9aS55LHY9TWF0aC5hYnMoYS54LWYpLG09TWF0aC5hYnMoYS55LXApLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtyZXR1cm4gdj49Ynx8bT49RX0sTCRlPShpLGEsZik9PntVdC53YXJuKGBpbnRlcnNlY3Rpb24gY2FsYyBhYmM4OToKICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkoYSl9CiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KGYpfQogIG5vZGUgICAgICAgIDogeDoke2kueH0geToke2kueX0gdzoke2kud2lkdGh9IGg6JHtpLmhlaWdodH1gKTtjb25zdCBwPWkueCx2PWkueSxtPU1hdGguYWJzKHAtZi54KSxiPWkud2lkdGgvMjtsZXQgRT1mLng8YS54P2ItbTpiK207Y29uc3QgXz1pLmhlaWdodC8yLEw9TWF0aC5hYnMoYS55LWYueSksTj1NYXRoLmFicyhhLngtZi54KTtpZihNYXRoLmFicyh2LWEueSkqYj5NYXRoLmFicyhwLWEueCkqXyl7bGV0IEI9Zi55PGEueT9hLnktXy12OnYtXy1hLnk7RT1OKkIvTDtjb25zdCBqPXt4OmYueDxhLng/Zi54K0U6Zi54LU4rRSx5OmYueTxhLnk/Zi55K0wtQjpmLnktTCtCfTtyZXR1cm4gRT09PTAmJihqLng9YS54LGoueT1hLnkpLE49PT0wJiYoai54PWEueCksTD09PTAmJihqLnk9YS55KSxVdC53YXJuKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke0x9LCBxICR7Qn0sIFIgJHtOfSwgciAke0V9YCxqKSxqfWVsc2V7Zi54PGEueD9FPWEueC1iLXA6RT1wLWItYS54O2xldCBCPUwqRS9OLGo9Zi54PGEueD9mLngrTi1FOmYueC1OK0UsUj1mLnk8YS55P2YueStCOmYueS1CO3JldHVybiBVdC53YXJuKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7TH0sIHEgJHtCfSwgUiAke059LCByICR7RX1gLHtfeDpqLF95OlJ9KSxFPT09MCYmKGo9YS54LFI9YS55KSxOPT09MCYmKGo9YS54KSxMPT09MCYmKFI9YS55KSx7eDpqLHk6Un19fSxfQnQ9KGksYSk9PntVdC53YXJuKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLGksYSk7bGV0IGY9W10scD1pWzBdLHY9ITE7cmV0dXJuIGkuZm9yRWFjaChtPT57aWYoVXQuaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLG0sYSksIUEkZShhLG0pJiYhdil7Y29uc3QgYj1MJGUoYSxwLG0pO1V0Lndhcm4oImFiYzg4IGluc2lkZSIsbSxwLGIpLFV0Lndhcm4oImFiYzg4IGludGVyc2VjdGlvbiIsYik7bGV0IEU9ITE7Zi5mb3JFYWNoKF89PntFPUV8fF8ueD09PWIueCYmXy55PT09Yi55fSksZi5zb21lKF89Pl8ueD09PWIueCYmXy55PT09Yi55KT9VdC53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGIsZik6Zi5wdXNoKGIpLHY9ITB9ZWxzZSBVdC53YXJuKCJhYmM4OCBvdXRzaWRlIixtLHApLHA9bSx2fHxmLnB1c2gobSl9KSxVdC53YXJuKCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzIixmKSxmfSxNJGU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYil7bGV0IEU9Zi5wb2ludHMsXz0hMTtjb25zdCBMPW0ubm9kZShhLnYpO3ZhciBOPW0ubm9kZShhLncpO1V0LmluZm8oImFiYzg4IEluc2VydEVkZ2U6ICIsZiksTi5pbnRlcnNlY3QmJkwuaW50ZXJzZWN0JiYoRT1FLnNsaWNlKDEsZi5wb2ludHMubGVuZ3RoLTEpLEUudW5zaGlmdChMLmludGVyc2VjdChFWzBdKSksVXQuaW5mbygiTGFzdCBwb2ludCIsRVtFLmxlbmd0aC0xXSxOLE4uaW50ZXJzZWN0KEVbRS5sZW5ndGgtMV0pKSxFLnB1c2goTi5pbnRlcnNlY3QoRVtFLmxlbmd0aC0xXSkpKSxmLnRvQ2x1c3RlciYmKFV0LmluZm8oInRvIGNsdXN0ZXIgYWJjODgiLHBbZi50b0NsdXN0ZXJdKSxFPV9CdChmLnBvaW50cyxwW2YudG9DbHVzdGVyXS5ub2RlKSxfPSEwKSxmLmZyb21DbHVzdGVyJiYoVXQuaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixwW2YuZnJvbUNsdXN0ZXJdKSxFPV9CdChFLnJldmVyc2UoKSxwW2YuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSxfPSEwKTtjb25zdCBCPUUuZmlsdGVyKG10PT4hTnVtYmVyLmlzTmFOKG10LnkpKTtsZXQgaj1GTjtmLmN1cnZlJiYodj09PSJncmFwaCJ8fHY9PT0iZmxvd2NoYXJ0IikmJihqPWYuY3VydmUpO2NvbnN0e3g6Uix5Onp9PVRCdChmKSxLPVo3KCkueChSKS55KHopLmN1cnZlKGopO2xldCBpdDtzd2l0Y2goZi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjppdD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjppdD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjppdD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2RlZmF1bHQ6aXQ9IiJ9c3dpdGNoKGYucGF0dGVybil7Y2FzZSJzb2xpZCI6aXQrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6aXQrPSIgZWRnZS1wYXR0ZXJuLWRvdHRlZCI7YnJlYWs7Y2FzZSJkYXNoZWQiOml0Kz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrfWNvbnN0IHN0PWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsSyhCKSkuYXR0cigiaWQiLGYuaWQpLmF0dHIoImNsYXNzIiwiICIraXQrKGYuY2xhc3Nlcz8iICIrZi5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLGYuc3R5bGUpO2xldCB1dD0iIjtzd2l0Y2goKExlKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fExlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJih1dD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx1dD11dC5yZXBsYWNlKC9cKC9nLCJcXCgiKSx1dD11dC5yZXBsYWNlKC9cKS9nLCJcXCkiKSksVXQuaW5mbygiYXJyb3dUeXBlU3RhcnQiLGYuYXJyb3dUeXBlU3RhcnQpLFV0LmluZm8oImFycm93VHlwZUVuZCIsZi5hcnJvd1R5cGVFbmQpLGYuYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItY3Jvc3NTdGFydCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jaXJjbGVTdGFydCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jb21wb3NpdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1sb2xsaXBvcFN0YXJ0KSIpO2JyZWFrfXN3aXRjaChmLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItY3Jvc3NFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jaXJjbGVFbmQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jb21wb3NpdGlvbkVuZCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItbG9sbGlwb3BFbmQpIik7YnJlYWt9bGV0IGJ0PXt9O3JldHVybiBfJiYoYnQudXBkYXRlZFBhdGg9RSksYnQub3JpZ2luYWxQYXRoPWYucG9pbnRzLGJ0fSxTQnQ9YXN5bmMoaSxhLGYscCx2KT0+e1V0LmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsUzUoYSksdik7Y29uc3QgbT1hLmdyYXBoKCkucmFua2RpcjtVdC50cmFjZSgiRGlyIGluIHJlY3Vyc2l2ZSByZW5kZXIgLSBkaXI6IixtKTtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7YS5ub2RlcygpP1V0LmluZm8oIlJlY3Vyc2l2ZSByZW5kZXIgWFhYIixhLm5vZGVzKCkpOlV0LmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsYSksYS5lZGdlcygpLmxlbmd0aD4wJiZVdC50cmFjZSgiUmVjdXJzaXZlIGVkZ2VzIixhLmVkZ2UoYS5lZGdlcygpWzBdKSk7Y29uc3QgRT1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxfPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxMPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksTj1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChhLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKGope2NvbnN0IFI9YS5ub2RlKGopO2lmKHYhPT12b2lkIDApe2NvbnN0IHo9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2LmNsdXN0ZXJEYXRhKSk7VXQuaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixqLCIpICIseix2KSxhLnNldE5vZGUodi5pZCx6KSxhLnBhcmVudChqKXx8KFV0LnRyYWNlKCJTZXR0aW5nIHBhcmVudCIsaix2LmlkKSxhLnNldFBhcmVudChqLHYuaWQseikpfWlmKFV0LmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitqKyI6ICIrSlNPTi5zdHJpbmdpZnkoYS5ub2RlKGopKSksUiYmUi5jbHVzdGVyTm9kZSl7VXQuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixqLFIud2lkdGgsYS5ub2RlKGopKTtjb25zdCB6PWF3YWl0IFNCdChOLFIuZ3JhcGgsZixwLGEubm9kZShqKSksSz16LmVsZW07UWgoUixLKSxSLmRpZmY9ei5kaWZmfHwwLFV0LmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixqLFIsUi53aWR0aCxSLngsUi55KSx4JGUoSyxSKSxVdC53YXJuKCJSZWN1cnNpdmUgcmVuZGVyIGNvbXBsZXRlICIsSyxSKX1lbHNlIGEuY2hpbGRyZW4oaikubGVuZ3RoPjA/KFV0LmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsaixSLmlkLFIsYSksVXQuaW5mbyh3UChSLmlkLGEpKSxIb1tSLmlkXT17aWQ6d1AoUi5pZCxhKSxub2RlOlJ9KTooVXQuaW5mbygiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGgiLGosUi5pZCxSKSxhd2FpdCB4QnQoTixhLm5vZGUoaiksbSkpfSkpLGEuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGope2NvbnN0IFI9YS5lZGdlKGoudixqLncsai5uYW1lKTtVdC5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShqKSksVXQuaW5mbygiRWRnZSAiK2oudisiIC0+ICIrai53KyI6ICIsaiwiICIsSlNPTi5zdHJpbmdpZnkoYS5lZGdlKGopKSksVXQuaW5mbygiRml4IixIbywiaWRzOiIsai52LGoudywiVHJhbnNsYXRlaW5nOiAiLEhvW2oudl0sSG9bai53XSksQ0J0KEwsUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtVdC5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShqKSl9KSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKGEpLGVMKGEpLFV0LmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLFM1KGEpKTtsZXQgQj0wO3JldHVybiBaamUoYSkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBSPWEubm9kZShqKTtVdC5pbmZvKCJQb3NpdGlvbiAiK2orIjogIitKU09OLnN0cmluZ2lmeShhLm5vZGUoaikpKSxVdC5pbmZvKCJQb3NpdGlvbiAiK2orIjogKCIrUi54LCIsIitSLnksIikgd2lkdGg6ICIsUi53aWR0aCwiIGhlaWdodDogIixSLmhlaWdodCksUiYmUi5jbHVzdGVyTm9kZT9rQnQoUik6YS5jaGlsZHJlbihqKS5sZW5ndGg+MD8oVCRlKEUsUiksSG9bUi5pZF0ubm9kZT1SKTprQnQoUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBSPWEuZWRnZShqKTtVdC5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShSKSxSKTtjb25zdCB6PU0kZShfLGosUixIbyxmLGEscCk7UyRlKFIseil9KSxhLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBSPWEubm9kZShqKTtVdC5pbmZvKGosUi50eXBlLFIuZGlmZiksUi50eXBlPT09Imdyb3VwIiYmKEI9Ui5kaWZmKX0pLHtlbGVtOmIsZGlmZjpCfX0sSTB0PWFzeW5jKGksYSxmLHAsdik9PntJRnQoaSxmLHAsdiksayRlKCksXyRlKCksQyRlKCksWWplKCksVXQud2FybigiR3JhcGggYXQgZmlyc3Q6IixKU09OLnN0cmluZ2lmeShTNShhKSkpLFFqZShhKSxVdC53YXJuKCJHcmFwaCBhZnRlcjoiLEpTT04uc3RyaW5naWZ5KFM1KGEpKSksYXdhaXQgU0J0KGksYSxwLHYpfSxBQnQ9e30sSSRlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlBQnRbZl09aVtmXX0sTEJ0PWZ1bmN0aW9uKGksYSxmLHAsdixtKXtjb25zdCBiPXAuc2VsZWN0KGBbaWQ9IiR7Zn0iXWApO09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oXyl7Y29uc3QgTD1pW19dO2xldCBOPSJkZWZhdWx0IjtMLmNsYXNzZXMubGVuZ3RoPjAmJihOPUwuY2xhc3Nlcy5qb2luKCIgIikpLE49TisiIGZsb3djaGFydC1sYWJlbCI7Y29uc3QgQj1lbShMLnN0eWxlcyk7bGV0IGo9TC50ZXh0IT09dm9pZCAwP0wudGV4dDpMLmlkLFI7aWYoVXQuaW5mbygidmVydGV4IixMLEwubGFiZWxUeXBlKSxMLmxhYmVsVHlwZT09PSJtYXJrZG93biIpVXQuaW5mbygidmVydGV4IixMLEwubGFiZWxUeXBlKTtlbHNlIGlmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBpdD17bGFiZWw6ai5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csc3Q9PmA8aSBjbGFzcz0nJHtzdC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTtSPWQwdChiLGl0KS5ub2RlKCksUi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFIpfWVsc2V7Y29uc3QgaXQ9di5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2l0LnNldEF0dHJpYnV0ZSgic3R5bGUiLEIubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCBzdD1qLnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgdXQgb2Ygc3Qpe2NvbnN0IGJ0PXYuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7YnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksYnQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGJ0LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxidC50ZXh0Q29udGVudD11dCxpdC5hcHBlbmRDaGlsZChidCl9Uj1pdH1sZXQgej0wLEs9IiI7c3dpdGNoKEwudHlwZSl7Y2FzZSJyb3VuZCI6ej01LEs9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpLPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOks9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOks9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpLPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOks9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpLPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpLPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Sz0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOks9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpLPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Sz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpLPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOks9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOks9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpLPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6Sz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0Oks9InJlY3QifWEuc2V0Tm9kZShMLmlkLHtsYWJlbFN0eWxlOkIubGFiZWxTdHlsZSxzaGFwZTpLLGxhYmVsVGV4dDpqLGxhYmVsVHlwZTpMLmxhYmVsVHlwZSxyeDp6LHJ5OnosY2xhc3M6TixzdHlsZTpCLnN0eWxlLGlkOkwuaWQsbGluazpMLmxpbmssbGlua1RhcmdldDpMLmxpbmtUYXJnZXQsdG9vbHRpcDptLmRiLmdldFRvb2x0aXAoTC5pZCl8fCIiLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoTC5pZCksaGF2ZUNhbGxiYWNrOkwuaGF2ZUNhbGxiYWNrLHdpZHRoOkwudHlwZT09PSJncm91cCI/NTAwOnZvaWQgMCxkaXI6TC5kaXIsdHlwZTpMLnR5cGUscHJvcHM6TC5wcm9wcyxwYWRkaW5nOkxlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxVdC5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTpCLmxhYmVsU3R5bGUsbGFiZWxUeXBlOkwubGFiZWxUeXBlLHNoYXBlOkssbGFiZWxUZXh0Omoscng6eixyeTp6LGNsYXNzOk4sc3R5bGU6Qi5zdHlsZSxpZDpMLmlkLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoTC5pZCksd2lkdGg6TC50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6TC50eXBlLGRpcjpMLmRpcixwcm9wczpMLnByb3BzLHBhZGRpbmc6TGUoKS5mbG93Y2hhcnQucGFkZGluZ30pfSl9LE1CdD1mdW5jdGlvbihpLGEsZil7VXQuaW5mbygiYWJjNzggZWRnZXMgPSAiLGkpO2xldCBwPTAsdj17fSxtLGI7aWYoaS5kZWZhdWx0U3R5bGUhPT12b2lkIDApe2NvbnN0IEU9ZW0oaS5kZWZhdWx0U3R5bGUpO209RS5zdHlsZSxiPUUubGFiZWxTdHlsZX1pLmZvckVhY2goZnVuY3Rpb24oRSl7cCsrO2NvbnN0IF89IkwtIitFLnN0YXJ0KyItIitFLmVuZDt2W19dPT09dm9pZCAwPyh2W19dPTAsVXQuaW5mbygiYWJjNzggbmV3IGVudHJ5IixfLHZbX10pKToodltfXSsrLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsXyx2W19dKSk7bGV0IEw9XysiLSIrdltfXTtVdC5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixfLEwsdltfXSk7Y29uc3QgTj0iTFMtIitFLnN0YXJ0LEI9IkxFLSIrRS5lbmQsaj17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKGoubWlubGVuPUUubGVuZ3RofHwxLEUudHlwZT09PSJhcnJvd19vcGVuIj9qLmFycm93aGVhZD0ibm9uZSI6ai5hcnJvd2hlYWQ9Im5vcm1hbCIsai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsai5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLEUudHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjpqLmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50IjpqLmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6ai5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOmouYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUiO2JyZWFrfWxldCBSPSIiLHo9IiI7c3dpdGNoKEUuc3Ryb2tlKXtjYXNlIm5vcm1hbCI6Uj0iZmlsbDpub25lOyIsbSE9PXZvaWQgMCYmKFI9bSksYiE9PXZvaWQgMCYmKHo9Yiksai50aGlja25lc3M9Im5vcm1hbCIsai5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmoudGhpY2tuZXNzPSJub3JtYWwiLGoucGF0dGVybj0iZG90dGVkIixqLnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpqLnRoaWNrbmVzcz0idGhpY2siLGoucGF0dGVybj0ic29saWQiLGouc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOmoudGhpY2tuZXNzPSJpbnZpc2libGUiLGoucGF0dGVybj0ic29saWQiLGouc3R5bGU9InN0cm9rZS13aWR0aDogMDtmaWxsOm5vbmU7IjticmVha31pZihFLnN0eWxlIT09dm9pZCAwKXtjb25zdCBLPWVtKEUuc3R5bGUpO1I9Sy5zdHlsZSx6PUsubGFiZWxTdHlsZX1qLnN0eWxlPWouc3R5bGUrPVIsai5sYWJlbFN0eWxlPWoubGFiZWxTdHlsZSs9eixFLmludGVycG9sYXRlIT09dm9pZCAwP2ouY3VydmU9WDIoRS5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/ai5jdXJ2ZT1YMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6ai5jdXJ2ZT1YMihBQnQuY3VydmUsaWcpLEUudGV4dD09PXZvaWQgMD9FLnN0eWxlIT09dm9pZCAwJiYoai5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihqLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixqLmxhYmVscG9zPSJjIiksai5sYWJlbFR5cGU9RS5sYWJlbFR5cGUsai5sYWJlbD1FLnRleHQucmVwbGFjZShZci5saW5lQnJlYWtSZWdleCxgCmApLEUuc3R5bGU9PT12b2lkIDAmJihqLnN0eWxlPWouc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lOyIpLGoubGFiZWxTdHlsZT1qLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSxqLmlkPUwsai5jbGFzc2VzPSJmbG93Y2hhcnQtbGluayAiK04rIiAiK0IsYS5zZXRFZGdlKEUuc3RhcnQsRS5lbmQsaixwKX0pfSxEMHQ9e3NldENvbmY6SSRlLGFkZFZlcnRpY2VzOkxCdCxhZGRFZGdlczpNQnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBhLmRiLmdldENsYXNzZXMoKX0sZHJhdzphc3luYyBmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2xldCB2PXAuZGIuZ2V0RGlyZWN0aW9uKCk7dj09PXZvaWQgMCYmKHY9IlREIik7Y29uc3R7c2VjdXJpdHlMZXZlbDptLGZsb3djaGFydDpifT1MZSgpLEU9Yi5ub2RlU3BhY2luZ3x8NTAsXz1iLnJhbmtTcGFjaW5nfHw1MDtsZXQgTDttPT09InNhbmRib3giJiYoTD15cigiI2kiK2EpKTtjb25zdCBOPXlyKG09PT0ic2FuZGJveCI/TC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQj1tPT09InNhbmRib3giP0wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsaj1uZXcgYTEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp2LG5vZGVzZXA6RSxyYW5rc2VwOl8sbWFyZ2lueDowLG1hcmdpbnk6MH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtVdC5pbmZvKCJTdWJncmFwaHMgLSAiLHopO2ZvcihsZXQgeXQ9ei5sZW5ndGgtMTt5dD49MDt5dC0tKVI9elt5dF0sVXQuaW5mbygiU3ViZ3JhcGggLSAiLFIpLHAuZGIuYWRkVmVydGV4KFIuaWQse3RleHQ6Ui50aXRsZSx0eXBlOlIubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMsUi5kaXIpO2NvbnN0IEs9cC5kYi5nZXRWZXJ0aWNlcygpLGl0PXAuZGIuZ2V0RWRnZXMoKTtVdC5pbmZvKCJFZGdlcyIsaXQpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sWkx0KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCB5dD0wO3l0PFIubm9kZXMubGVuZ3RoO3l0KyspVXQuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLFIubm9kZXNbeXRdLFIuaWQpLGouc2V0UGFyZW50KFIubm9kZXNbeXRdLFIuaWQpfUxCdChLLGosYSxOLEIscCksTUJ0KGl0LGopO2NvbnN0IHV0PU4uc2VsZWN0KGBbaWQ9IiR7YX0iXWApLGJ0PU4uc2VsZWN0KCIjIithKyIgZyIpO2lmKGF3YWl0IEkwdChidCxqLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGEpLCRhLmluc2VydFRpdGxlKHV0LCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4scC5kYi5nZXREaWFncmFtVGl0bGUoKSksY1Qoaix1dCxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLHAuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK3N0KSwhYi5odG1sTGFiZWxzKXtjb25zdCB5dD1CLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJythKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBkdCBvZiB5dCl7Y29uc3QgaHQ9ZHQuZ2V0QkJveCgpLHd0PUIuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt3dC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSx3dC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSx3dC5zZXRBdHRyaWJ1dGUoIndpZHRoIixodC53aWR0aCksd3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLGh0LmhlaWdodCksZHQuaW5zZXJ0QmVmb3JlKHd0LGR0LmZpcnN0Q2hpbGQpfX1PYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKHl0KXtjb25zdCBkdD1LW3l0XTtpZihkdC5saW5rKXtjb25zdCBodD15cigiIyIrYSsnIFtpZD0iJyt5dCsnIl0nKTtpZihodCl7Y29uc3Qgd3Q9Qi5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3d0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixkdC5jbGFzc2VzLmpvaW4oIiAiKSksd3Quc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsZHQubGluayksd3Quc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxtPT09InNhbmRib3giP3d0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpkdC5saW5rVGFyZ2V0JiZ3dC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLGR0LmxpbmtUYXJnZXQpO2NvbnN0IFg9aHQuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHd0fSwiOmZpcnN0LWNoaWxkIikscHQ9aHQuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7cHQmJlguYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHB0Lm5vZGUoKX0pO2NvbnN0IFU9aHQuc2VsZWN0KCIubGFiZWwiKTtVJiZYLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBVLm5vZGUoKX0pfX19KX19LEQkZT0oaSxhKT0+e2NvbnN0IGY9alRlLHA9ZihpLCJyIiksdj1mKGksImciKSxtPWYoaSwiYiIpO3JldHVybiBJQShwLHYsbSxhKX0sSUJ0PWk9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke0QkZShpLmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6IAogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYCxPJGU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokZHQsZGI6Z1QscmVuZGVyZXI6RDB0LHN0eWxlczpJQnQsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsJEJlLnNldENvbmYoaS5mbG93Y2hhcnQpLGdULmNsZWFyKCksZ1Quc2V0R2VuKCJnZW4tMSIpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksTiRlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6JGR0LGRiOmdULHJlbmRlcmVyOkQwdCxzdHlsZXM6SUJ0LGluaXQ6aT0+e2kuZmxvd2NoYXJ0fHwoaS5mbG93Y2hhcnQ9e30pLGkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLGlPdCh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOmkuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxEMHQuc2V0Q29uZihpLmZsb3djaGFydCksZ1QuY2xlYXIoKSxnVC5zZXRHZW4oImdlbi0yIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTzB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24od3QsWCxwdCxVKXtmb3IocHQ9cHR8fHt9LFU9d3QubGVuZ3RoO1UtLTtwdFt3dFtVXV09WCk7cmV0dXJuIHB0fSxhPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLGY9WzEsMTBdLHA9WzEsMTFdLHY9WzEsMTJdLG09WzEsMTNdLGI9WzEsMTRdLEU9WzEsMTVdLF89WzEsMjFdLEw9WzEsMjJdLE49WzEsMjNdLEI9WzEsMjRdLGo9WzEsMjVdLFI9WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0sej1bMSwzNF0sSz1bMjcsMjgsNDYsNDddLGl0PVs0MSw0Miw0Myw0NCw0NV0sc3Q9WzE3LDM0XSx1dD1bMSw1NF0sYnQ9WzEsNTNdLG10PVsxNywzNCwzNiwzOF0seXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLCI6IjoxMyxyb2xlOjE0LEJMT0NLX1NUQVJUOjE1LGF0dHJpYnV0ZXM6MTYsQkxPQ0tfU1RPUDoxNyxTUVM6MTgsU1FFOjE5LHRpdGxlOjIwLHRpdGxlX3ZhbHVlOjIxLGFjY190aXRsZToyMixhY2NfdGl0bGVfdmFsdWU6MjMsYWNjX2Rlc2NyOjI0LGFjY19kZXNjcl92YWx1ZToyNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI2LEFMUEhBTlVNOjI3LEVOVElUWV9OQU1FOjI4LGF0dHJpYnV0ZToyOSxhdHRyaWJ1dGVUeXBlOjMwLGF0dHJpYnV0ZU5hbWU6MzEsYXR0cmlidXRlS2V5VHlwZUxpc3Q6MzIsYXR0cmlidXRlQ29tbWVudDozMyxBVFRSSUJVVEVfV09SRDozNCxhdHRyaWJ1dGVLZXlUeXBlOjM1LENPTU1BOjM2LEFUVFJJQlVURV9LRVk6MzcsQ09NTUVOVDozOCxjYXJkaW5hbGl0eTozOSxyZWxUeXBlOjQwLFpFUk9fT1JfT05FOjQxLFpFUk9fT1JfTU9SRTo0MixPTkVfT1JfTU9SRTo0MyxPTkxZX09ORTo0NCxNRF9QQVJFTlQ6NDUsTk9OX0lERU5USUZZSU5HOjQ2LElERU5USUZZSU5HOjQ3LFdPUkQ6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiOiIsMTU6IkJMT0NLX1NUQVJUIiwxNzoiQkxPQ0tfU1RPUCIsMTg6IlNRUyIsMTk6IlNRRSIsMjA6InRpdGxlIiwyMToidGl0bGVfdmFsdWUiLDIyOiJhY2NfdGl0bGUiLDIzOiJhY2NfdGl0bGVfdmFsdWUiLDI0OiJhY2NfZGVzY3IiLDI1OiJhY2NfZGVzY3JfdmFsdWUiLDI2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNzoiQUxQSEFOVU0iLDI4OiJFTlRJVFlfTkFNRSIsMzQ6IkFUVFJJQlVURV9XT1JEIiwzNjoiQ09NTUEiLDM3OiJBVFRSSUJVVEVfS0VZIiwzODoiQ09NTUVOVCIsNDE6IlpFUk9fT1JfT05FIiw0MjoiWkVST19PUl9NT1JFIiw0MzoiT05FX09SX01PUkUiLDQ0OiJPTkxZX09ORSIsNDU6Ik1EX1BBUkVOVCIsNDY6Ik5PTl9JREVOVElGWUlORyIsNDc6IklERU5USUZZSU5HIiw0ODoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw0XSxbOSwzXSxbOSwxXSxbOSw3XSxbOSw2XSxbOSw0XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTEsMV0sWzExLDFdLFsxNiwxXSxbMTYsMl0sWzI5LDJdLFsyOSwzXSxbMjksM10sWzI5LDRdLFszMCwxXSxbMzEsMV0sWzMyLDFdLFszMiwzXSxbMzUsMV0sWzMzLDFdLFsxMiwzXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0MCwxXSxbNDAsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oWCxwdCxVLHh0LG50LE90LE50KXt2YXIgcXQ9T3QubGVuZ3RoLTE7c3dpdGNoKG50KXtjYXNlIDE6YnJlYWs7Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6T3RbcXQtMV0ucHVzaChPdFtxdF0pLHRoaXMuJD1PdFtxdC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1PdFtxdF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Onh0LmFkZEVudGl0eShPdFtxdC00XSkseHQuYWRkRW50aXR5KE90W3F0LTJdKSx4dC5hZGRSZWxhdGlvbnNoaXAoT3RbcXQtNF0sT3RbcXRdLE90W3F0LTJdLE90W3F0LTNdKTticmVhaztjYXNlIDk6eHQuYWRkRW50aXR5KE90W3F0LTNdKSx4dC5hZGRBdHRyaWJ1dGVzKE90W3F0LTNdLE90W3F0LTFdKTticmVhaztjYXNlIDEwOnh0LmFkZEVudGl0eShPdFtxdC0yXSk7YnJlYWs7Y2FzZSAxMTp4dC5hZGRFbnRpdHkoT3RbcXRdKTticmVhaztjYXNlIDEyOnh0LmFkZEVudGl0eShPdFtxdC02XSxPdFtxdC00XSkseHQuYWRkQXR0cmlidXRlcyhPdFtxdC02XSxPdFtxdC0xXSk7YnJlYWs7Y2FzZSAxMzp4dC5hZGRFbnRpdHkoT3RbcXQtNV0sT3RbcXQtM10pO2JyZWFrO2Nhc2UgMTQ6eHQuYWRkRW50aXR5KE90W3F0LTNdLE90W3F0LTFdKTticmVhaztjYXNlIDE1OmNhc2UgMTY6dGhpcy4kPU90W3F0XS50cmltKCkseHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPU90W3F0XS50cmltKCkseHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE5OmNhc2UgNDM6dGhpcy4kPU90W3F0XTticmVhaztjYXNlIDIwOmNhc2UgNDE6Y2FzZSA0Mjp0aGlzLiQ9T3RbcXRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAyMTpjYXNlIDI5OnRoaXMuJD1bT3RbcXRdXTticmVhaztjYXNlIDIyOk90W3F0XS5wdXNoKE90W3F0LTFdKSx0aGlzLiQ9T3RbcXRdO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOk90W3F0LTFdLGF0dHJpYnV0ZU5hbWU6T3RbcXRdfTticmVhaztjYXNlIDI0OnRoaXMuJD17YXR0cmlidXRlVHlwZTpPdFtxdC0yXSxhdHRyaWJ1dGVOYW1lOk90W3F0LTFdLGF0dHJpYnV0ZUtleVR5cGVMaXN0Ok90W3F0XX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6T3RbcXQtMl0sYXR0cmlidXRlTmFtZTpPdFtxdC0xXSxhdHRyaWJ1dGVDb21tZW50Ok90W3F0XX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6T3RbcXQtM10sYXR0cmlidXRlTmFtZTpPdFtxdC0yXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpPdFtxdC0xXSxhdHRyaWJ1dGVDb21tZW50Ok90W3F0XX07YnJlYWs7Y2FzZSAyNzpjYXNlIDI4OmNhc2UgMzE6dGhpcy4kPU90W3F0XTticmVhaztjYXNlIDMwOk90W3F0LTJdLnB1c2goT3RbcXRdKSx0aGlzLiQ9T3RbcXQtMl07YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9T3RbcXRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9e2NhcmRBOk90W3F0XSxyZWxUeXBlOk90W3F0LTFdLGNhcmRCOk90W3F0LTJdfTticmVhaztjYXNlIDM0OnRoaXMuJD14dC5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDM1OnRoaXMuJD14dC5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9eHQuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9eHQuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9eHQuQ2FyZGluYWxpdHkuTURfUEFSRU5UO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPXh0LklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDQwOnRoaXMuJD14dC5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6OSwyMDpmLDIyOnAsMjQ6diwyNjptLDI3OmIsMjg6RX0saShhLFsyLDddLHsxOlsyLDFdfSksaShhLFsyLDNdKSx7OToxNiwxMTo5LDIwOmYsMjI6cCwyNDp2LDI2Om0sMjc6YiwyODpFfSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDExXSx7MTI6MTcsMzk6MjAsMTU6WzEsMThdLDE4OlsxLDE5XSw0MTpfLDQyOkwsNDM6Tiw0NDpCLDQ1Omp9KSx7MjE6WzEsMjZdfSx7MjM6WzEsMjddfSx7MjU6WzEsMjhdfSxpKGEsWzIsMThdKSxpKFIsWzIsMTldKSxpKFIsWzIsMjBdKSxpKGEsWzIsNF0pLHsxMToyOSwyNzpiLDI4OkV9LHsxNjozMCwxNzpbMSwzMV0sMjk6MzIsMzA6MzMsMzQ6en0sezExOjM1LDI3OmIsMjg6RX0sezQwOjM2LDQ2OlsxLDM3XSw0NzpbMSwzOF19LGkoSyxbMiwzNF0pLGkoSyxbMiwzNV0pLGkoSyxbMiwzNl0pLGkoSyxbMiwzN10pLGkoSyxbMiwzOF0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLHsxMzpbMSwzOV19LHsxNzpbMSw0MF19LGkoYSxbMiwxMF0pLHsxNjo0MSwxNzpbMiwyMV0sMjk6MzIsMzA6MzMsMzQ6en0sezMxOjQyLDM0OlsxLDQzXX0sezM0OlsyLDI3XX0sezE5OlsxLDQ0XX0sezM5OjQ1LDQxOl8sNDI6TCw0MzpOLDQ0OkIsNDU6an0saShpdCxbMiwzOV0pLGkoaXQsWzIsNDBdKSx7MTQ6NDYsMjc6WzEsNDldLDI4OlsxLDQ4XSw0ODpbMSw0N119LGkoYSxbMiw5XSksezE3OlsyLDIyXX0saShzdCxbMiwyM10sezMyOjUwLDMzOjUxLDM1OjUyLDM3OnV0LDM4OmJ0fSksaShbMTcsMzQsMzcsMzhdLFsyLDI4XSksaShhLFsyLDE0XSx7MTU6WzEsNTVdfSksaShbMjcsMjhdLFsyLDMzXSksaShhLFsyLDhdKSxpKGEsWzIsNDFdKSxpKGEsWzIsNDJdKSxpKGEsWzIsNDNdKSxpKHN0LFsyLDI0XSx7MzM6NTYsMzY6WzEsNTddLDM4OmJ0fSksaShzdCxbMiwyNV0pLGkobXQsWzIsMjldKSxpKHN0LFsyLDMyXSksaShtdCxbMiwzMV0pLHsxNjo1OCwxNzpbMSw1OV0sMjk6MzIsMzA6MzMsMzQ6en0saShzdCxbMiwyNl0pLHszNTo2MCwzNzp1dH0sezE3OlsxLDYxXX0saShhLFsyLDEzXSksaShtdCxbMiwzMF0pLGkoYSxbMiwxMl0pXSxkZWZhdWx0QWN0aW9uczp7MzQ6WzIsMjddLDQxOlsyLDIyXX0scGFyc2VFcnJvcjpmdW5jdGlvbihYLHB0KXtpZihwdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFgpO2Vsc2V7dmFyIFU9bmV3IEVycm9yKFgpO3Rocm93IFUuaGFzaD1wdCxVfX0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIHB0PXRoaXMsVT1bMF0seHQ9W10sbnQ9W251bGxdLE90PVtdLE50PXRoaXMudGFibGUscXQ9IiIsQ3Q9MCxaPTAsVHQ9MixIdD0xLEl0PU90LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEZ0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksa2U9e3l5Ont9fTtmb3IodmFyIHBuIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkscG4pJiYoa2UueXlbcG5dPXRoaXMueXlbcG5dKTtGdC5zZXRJbnB1dChYLGtlLnl5KSxrZS55eS5sZXhlcj1GdCxrZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRnQueXlsbG9jPiJ1IiYmKEZ0Lnl5bGxvYz17fSk7dmFyIE1lPUZ0Lnl5bGxvYztPdC5wdXNoKE1lKTt2YXIgdmU9RnQub3B0aW9ucyYmRnQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGtlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWtlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEdlKCl7dmFyIGNuO3JldHVybiBjbj14dC5wb3AoKXx8RnQubGV4KCl8fEh0LHR5cGVvZiBjbiE9Im51bWJlciImJihjbiBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9Y24sY249eHQucG9wKCkpLGNuPXB0LnN5bWJvbHNfW2NuXXx8Y24pLGNufWZvcih2YXIgS2Usd2UsX2UsJHQscmU9e30saWUsT2Usb2UsTmU7Oyl7aWYod2U9VVtVLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3dlXT9fZT10aGlzLmRlZmF1bHRBY3Rpb25zW3dlXTooKEtlPT09bnVsbHx8dHlwZW9mIEtlPiJ1IikmJihLZT1HZSgpKSxfZT1OdFt3ZV0mJk50W3dlXVtLZV0pLHR5cGVvZiBfZT4idSJ8fCFfZS5sZW5ndGh8fCFfZVswXSl7dmFyIG1lPSIiO05lPVtdO2ZvcihpZSBpbiBOdFt3ZV0pdGhpcy50ZXJtaW5hbHNfW2llXSYmaWU+VHQmJk5lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tpZV0rIiciKTtGdC5zaG93UG9zaXRpb24/bWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQ3QrMSkrYDoKYCtGdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK05lLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bS2VdfHxLZSkrIiciOm1lPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEN0KzEpKyI6IFVuZXhwZWN0ZWQgIisoS2U9PUh0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0tlXXx8S2UpKyInIiksdGhpcy5wYXJzZUVycm9yKG1lLHt0ZXh0OkZ0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tLZV18fEtlLGxpbmU6RnQueXlsaW5lbm8sbG9jOk1lLGV4cGVjdGVkOk5lfSl9aWYoX2VbMF1pbnN0YW5jZW9mIEFycmF5JiZfZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3dlKyIsIHRva2VuOiAiK0tlKTtzd2l0Y2goX2VbMF0pe2Nhc2UgMTpVLnB1c2goS2UpLG50LnB1c2goRnQueXl0ZXh0KSxPdC5wdXNoKEZ0Lnl5bGxvYyksVS5wdXNoKF9lWzFdKSxLZT1udWxsLFo9RnQueXlsZW5nLHF0PUZ0Lnl5dGV4dCxDdD1GdC55eWxpbmVubyxNZT1GdC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKE9lPXRoaXMucHJvZHVjdGlvbnNfW19lWzFdXVsxXSxyZS4kPW50W250Lmxlbmd0aC1PZV0scmUuXyQ9e2ZpcnN0X2xpbmU6T3RbT3QubGVuZ3RoLShPZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOk90W090Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOk90W090Lmxlbmd0aC0oT2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46T3RbT3QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2ZSYmKHJlLl8kLnJhbmdlPVtPdFtPdC5sZW5ndGgtKE9lfHwxKV0ucmFuZ2VbMF0sT3RbT3QubGVuZ3RoLTFdLnJhbmdlWzFdXSksJHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHJlLFtxdCxaLEN0LGtlLnl5LF9lWzFdLG50LE90XS5jb25jYXQoSXQpKSx0eXBlb2YgJHQ8InUiKXJldHVybiAkdDtPZSYmKFU9VS5zbGljZSgwLC0xKk9lKjIpLG50PW50LnNsaWNlKDAsLTEqT2UpLE90PU90LnNsaWNlKDAsLTEqT2UpKSxVLnB1c2godGhpcy5wcm9kdWN0aW9uc19bX2VbMV1dWzBdKSxudC5wdXNoKHJlLiQpLE90LnB1c2gocmUuXyQpLG9lPU50W1VbVS5sZW5ndGgtMl1dW1VbVS5sZW5ndGgtMV1dLFUucHVzaChvZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGR0PWZ1bmN0aW9uKCl7dmFyIHd0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHB0LFUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocHQsVSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocHQpfSxzZXRJbnB1dDpmdW5jdGlvbihYLHB0KXtyZXR1cm4gdGhpcy55eT1wdHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9WCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9WCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9WCx0aGlzLm1hdGNoZWQrPVg7dmFyIHB0PVgubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBwdD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksWH0sdW5wdXQ6ZnVuY3Rpb24oWCl7dmFyIHB0PVgubGVuZ3RoLFU9WC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVgrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXB0KSx0aGlzLm9mZnNldC09cHQ7dmFyIHh0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1VLmxlbmd0aC0xKTt2YXIgbnQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlU/KFUubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtVS5sZW5ndGhdLmxlbmd0aC1VWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tcHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bbnRbMF0sbnRbMF0rdGhpcy55eWxlbmctcHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihYKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoWCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFgubGVuZ3RoPjIwPyIuLi4iOiIiKStYLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5tYXRjaDtyZXR1cm4gWC5sZW5ndGg8MjAmJihYKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1YLmxlbmd0aCkpLChYLnN1YnN0cigwLDIwKSsoWC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5wYXN0SW5wdXQoKSxwdD1uZXcgQXJyYXkoWC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBYK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtwdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oWCxwdCl7dmFyIFUseHQsbnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKG50PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKG50Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PVhbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHh0JiYodGhpcy55eWxpbmVubys9eHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eHQ/eHRbeHQubGVuZ3RoLTFdLmxlbmd0aC14dFt4dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitYWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVhbMF0sdGhpcy5tYXRjaCs9WFswXSx0aGlzLm1hdGNoZXM9WCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShYWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1YWzBdLFU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMscHQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVSlyZXR1cm4gVTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgT3QgaW4gbnQpdGhpc1tPdF09bnRbT3RdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgscHQsVSx4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBudD10aGlzLl9jdXJyZW50UnVsZXMoKSxPdD0wO090PG50Lmxlbmd0aDtPdCsrKWlmKFU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tudFtPdF1dKSxVJiYoIXB0fHxVWzBdLmxlbmd0aD5wdFswXS5sZW5ndGgpKXtpZihwdD1VLHh0PU90LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFg9dGhpcy50ZXN0X21hdGNoKFUsbnRbT3RdKSxYIT09ITEpcmV0dXJuIFg7aWYodGhpcy5fYmFja3RyYWNrKXtwdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBwdD8oWD10aGlzLnRlc3RfbWF0Y2gocHQsbnRbeHRdKSxYIT09ITE/WDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMubmV4dCgpO3JldHVybiBwdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24ocHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChwdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHB0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24ocHQpe3JldHVybiBwdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHB0fHwwKSxwdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3B0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihwdCl7dGhpcy5iZWdpbihwdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24ocHQsVSx4dCxudCl7c3dpdGNoKHh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDI4O2Nhc2UgMTE6cmV0dXJuIDQ4O2Nhc2UgMTI6cmV0dXJuIDQ7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwxNTtjYXNlIDE0OnJldHVybiAzNjtjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDM3O2Nhc2UgMTc6cmV0dXJuIDM0O2Nhc2UgMTg6cmV0dXJuIDM0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgMjI6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgMjM6cmV0dXJuIDE4O2Nhc2UgMjQ6cmV0dXJuIDE5O2Nhc2UgMjU6cmV0dXJuIDQxO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6cmV0dXJuIDQzO2Nhc2UgMjk6cmV0dXJuIDQxO2Nhc2UgMzA6cmV0dXJuIDQxO2Nhc2UgMzE6cmV0dXJuIDQyO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQyO2Nhc2UgMzQ6cmV0dXJuIDQyO2Nhc2UgMzU6cmV0dXJuIDQyO2Nhc2UgMzY6cmV0dXJuIDQzO2Nhc2UgMzc6cmV0dXJuIDQyO2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ0O2Nhc2UgNDE6cmV0dXJuIDQ0O2Nhc2UgNDI6cmV0dXJuIDQ0O2Nhc2UgNDM6cmV0dXJuIDQxO2Nhc2UgNDQ6cmV0dXJuIDQyO2Nhc2UgNDU6cmV0dXJuIDQzO2Nhc2UgNDY6cmV0dXJuIDQ1O2Nhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6cmV0dXJuIDQ3O2Nhc2UgNDk6cmV0dXJuIDQ3O2Nhc2UgNTA6cmV0dXJuIDQ2O2Nhc2UgNTE6cmV0dXJuIDQ2O2Nhc2UgNTI6cmV0dXJuIDQ2O2Nhc2UgNTM6cmV0dXJuIDI3O2Nhc2UgNTQ6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgNTU6cmV0dXJuIDZ9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHd0fSgpO3l0LmxleGVyPWR0O2Z1bmN0aW9uIGh0KCl7dGhpcy55eT17fX1yZXR1cm4gaHQucHJvdG90eXBlPXl0LHl0LlBhcnNlcj1odCxuZXcgaHR9KCk7TzB0LnBhcnNlcj1PMHQ7Y29uc3QgUCRlPU8wdDtsZXQgaGs9e30sTjB0PVtdO2NvbnN0IEYkZT17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn0sQiRlPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0sREJ0PWZ1bmN0aW9uKGksYT12b2lkIDApe3JldHVybiBoa1tpXT09PXZvaWQgMD8oaGtbaV09e2F0dHJpYnV0ZXM6W10sYWxpYXM6YX0sVXQuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSk6aGtbaV0mJiFoa1tpXS5hbGlhcyYmYSYmKGhrW2ldLmFsaWFzPWEsVXQuaW5mbyhgQWRkIGFsaWFzICcke2F9JyB0byBlbnRpdHkgJyR7aX0nYCkpLGhrW2ldfSxSJGU9e0NhcmRpbmFsaXR5OkYkZSxJZGVudGlmaWNhdGlvbjpCJGUsZ2V0Q29uZmlnOigpPT5MZSgpLmVyLGFkZEVudGl0eTpEQnQsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLGEpe2xldCBmPURCdChpKSxwO2ZvcihwPWEubGVuZ3RoLTE7cD49MDtwLS0pZi5hdHRyaWJ1dGVzLnB1c2goYVtwXSksVXQuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGFbcF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT5oayxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9e2VudGl0eUE6aSxyb2xlQTphLGVudGl0eUI6ZixyZWxTcGVjOnB9O04wdC5wdXNoKHYpLFV0LmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHYpfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5OMHQsY2xlYXI6ZnVuY3Rpb24oKXtoaz17fSxOMHQ9W10sYXAoKX0sc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3Asc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYn0sdW09e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LGxtPXtFUk1hcmtlcnM6dW0saW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLGEpe2xldCBmO2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksZi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxmLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksZj1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSxmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxqJGU9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uICQkZShpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZqJGUudGVzdChpKX1jb25zdCBQZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpUGQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24geiRlKGksYT0wKXtyZXR1cm4oUGRbaVthKzBdXStQZFtpW2ErMV1dK1BkW2lbYSsyXV0rUGRbaVthKzNdXSsiLSIrUGRbaVthKzRdXStQZFtpW2ErNV1dKyItIitQZFtpW2ErNl1dK1BkW2lbYSs3XV0rIi0iK1BkW2lbYSs4XV0rUGRbaVthKzldXSsiLSIrUGRbaVthKzEwXV0rUGRbaVthKzExXV0rUGRbaVthKzEyXV0rUGRbaVthKzEzXV0rUGRbaVthKzE0XV0rUGRbaVthKzE1XV0pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcSRlKGkpe2lmKCEkJGUoaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgYTtjb25zdCBmPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gZlswXT0oYT1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LGZbMV09YT4+PjE2JjI1NSxmWzJdPWE+Pj44JjI1NSxmWzNdPWEmMjU1LGZbNF09KGE9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCxmWzVdPWEmMjU1LGZbNl09KGE9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsZls3XT1hJjI1NSxmWzhdPShhPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LGZbOV09YSYyNTUsZlsxMF09KGE9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxmWzExXT1hLzQyOTQ5NjcyOTYmMjU1LGZbMTJdPWE+Pj4yNCYyNTUsZlsxM109YT4+PjE2JjI1NSxmWzE0XT1hPj4+OCYyNTUsZlsxNV09YSYyNTUsZn1mdW5jdGlvbiBIJGUoaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IGE9W107Zm9yKGxldCBmPTA7ZjxpLmxlbmd0aDsrK2YpYS5wdXNoKGkuY2hhckNvZGVBdChmKSk7cmV0dXJuIGF9Y29uc3QgRyRlPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLFYkZT0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiBVJGUoaSxhLGYpe2Z1bmN0aW9uIHAodixtLGIsRSl7dmFyIF87aWYodHlwZW9mIHY9PSJzdHJpbmciJiYodj1IJGUodikpLHR5cGVvZiBtPT0ic3RyaW5nIiYmKG09cSRlKG0pKSwoKF89bSk9PT1udWxsfHxfPT09dm9pZCAwP3ZvaWQgMDpfLmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgTD1uZXcgVWludDhBcnJheSgxNit2Lmxlbmd0aCk7aWYoTC5zZXQobSksTC5zZXQodixtLmxlbmd0aCksTD1mKEwpLExbNl09TFs2XSYxNXxhLExbOF09TFs4XSY2M3wxMjgsYil7RT1FfHwwO2ZvcihsZXQgTj0wO048MTY7KytOKWJbRStOXT1MW05dO3JldHVybiBifXJldHVybiB6JGUoTCl9dHJ5e3AubmFtZT1pfWNhdGNoe31yZXR1cm4gcC5ETlM9RyRlLHAuVVJMPVYkZSxwfWZ1bmN0aW9uIFckZShpLGEsZixwKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhJmZefmEmcDtjYXNlIDE6cmV0dXJuIGFeZl5wO2Nhc2UgMjpyZXR1cm4gYSZmXmEmcF5mJnA7Y2FzZSAzOnJldHVybiBhXmZecH19ZnVuY3Rpb24gUDB0KGksYSl7cmV0dXJuIGk8PGF8aT4+PjMyLWF9ZnVuY3Rpb24gSyRlKGkpe2NvbnN0IGE9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLGY9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgRT0wO0U8Yi5sZW5ndGg7KytFKWkucHVzaChiLmNoYXJDb2RlQXQoRSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IHA9aS5sZW5ndGgvNCsyLHY9TWF0aC5jZWlsKHAvMTYpLG09bmV3IEFycmF5KHYpO2ZvcihsZXQgYj0wO2I8djsrK2Ipe2NvbnN0IEU9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IF89MDtfPDE2OysrXylFW19dPWlbYio2NCtfKjRdPDwyNHxpW2IqNjQrXyo0KzFdPDwxNnxpW2IqNjQrXyo0KzJdPDw4fGlbYio2NCtfKjQrM107bVtiXT1FfW1bdi0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksbVt2LTFdWzE0XT1NYXRoLmZsb29yKG1bdi0xXVsxNF0pLG1bdi0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHY7KytiKXtjb25zdCBFPW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBSPTA7UjwxNjsrK1IpRVtSXT1tW2JdW1JdO2ZvcihsZXQgUj0xNjtSPDgwOysrUilFW1JdPVAwdChFW1ItM11eRVtSLThdXkVbUi0xNF1eRVtSLTE2XSwxKTtsZXQgXz1mWzBdLEw9ZlsxXSxOPWZbMl0sQj1mWzNdLGo9Zls0XTtmb3IobGV0IFI9MDtSPDgwOysrUil7Y29uc3Qgej1NYXRoLmZsb29yKFIvMjApLEs9UDB0KF8sNSkrVyRlKHosTCxOLEIpK2orYVt6XStFW1JdPj4+MDtqPUIsQj1OLE49UDB0KEwsMzApPj4+MCxMPV8sXz1LfWZbMF09ZlswXStfPj4+MCxmWzFdPWZbMV0rTD4+PjAsZlsyXT1mWzJdK04+Pj4wLGZbM109ZlszXStCPj4+MCxmWzRdPWZbNF0raj4+PjB9cmV0dXJuW2ZbMF0+PjI0JjI1NSxmWzBdPj4xNiYyNTUsZlswXT4+OCYyNTUsZlswXSYyNTUsZlsxXT4+MjQmMjU1LGZbMV0+PjE2JjI1NSxmWzFdPj44JjI1NSxmWzFdJjI1NSxmWzJdPj4yNCYyNTUsZlsyXT4+MTYmMjU1LGZbMl0+PjgmMjU1LGZbMl0mMjU1LGZbM10+PjI0JjI1NSxmWzNdPj4xNiYyNTUsZlszXT4+OCYyNTUsZlszXSYyNTUsZls0XT4+MjQmMjU1LGZbNF0+PjE2JjI1NSxmWzRdPj44JjI1NSxmWzRdJjI1NV19Y29uc3QgWSRlPVUkZSgidjUiLDgwLEskZSksWCRlPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IG8xPXt9LHlQPW5ldyBNYXA7Y29uc3QgUSRlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlvMVtmXT1pW2ZdfSxaJGU9KGksYSxmKT0+e2NvbnN0IHA9bzEuZW50aXR5UGFkZGluZy8zLHY9bzEuZW50aXR5UGFkZGluZy8zLG09bzEuZm9udFNpemUqLjg1LGI9YS5ub2RlKCkuZ2V0QkJveCgpLEU9W107bGV0IF89ITEsTD0hMSxOPTAsQj0wLGo9MCxSPTAsej1iLmhlaWdodCtwKjIsSz0xO2YuZm9yRWFjaChidD0+e2J0LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZidC5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKF89ITApLGJ0LmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihMPSEwKX0pLGYuZm9yRWFjaChidD0+e2NvbnN0IG10PWAke2Eubm9kZSgpLmlkfS1hdHRyLSR7S31gO2xldCB5dD0wO2NvbnN0IGR0PXpOKGJ0LmF0dHJpYnV0ZVR5cGUpLGh0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixMZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChkdCksd3Q9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHttdH0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLExlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KGJ0LmF0dHJpYnV0ZU5hbWUpLFg9e307WC50bj1odCxYLm5uPXd0O2NvbnN0IHB0PWh0Lm5vZGUoKS5nZXRCQm94KCksVT13dC5ub2RlKCkuZ2V0QkJveCgpO2lmKE49TWF0aC5tYXgoTixwdC53aWR0aCksQj1NYXRoLm1heChCLFUud2lkdGgpLHl0PU1hdGgubWF4KHB0LmhlaWdodCxVLmhlaWdodCksXyl7Y29uc3QgeHQ9YnQuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/YnQuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLG50PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWtleWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLExlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KHh0KTtYLmtuPW50O2NvbnN0IE90PW50Lm5vZGUoKS5nZXRCQm94KCk7aj1NYXRoLm1heChqLE90LndpZHRoKSx5dD1NYXRoLm1heCh5dCxPdC5oZWlnaHQpfWlmKEwpe2NvbnN0IHh0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWNvbW1lbnRgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixMZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChidC5hdHRyaWJ1dGVDb21tZW50fHwiIik7WC5jbj14dDtjb25zdCBudD14dC5ub2RlKCkuZ2V0QkJveCgpO1I9TWF0aC5tYXgoUixudC53aWR0aCkseXQ9TWF0aC5tYXgoeXQsbnQuaGVpZ2h0KX1YLmhlaWdodD15dCxFLnB1c2goWCkseis9eXQrcCoyLEsrPTF9KTtsZXQgaXQ9NDtfJiYoaXQrPTIpLEwmJihpdCs9Mik7Y29uc3Qgc3Q9TitCK2orUix1dD17d2lkdGg6TWF0aC5tYXgobzEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCtvMS5lbnRpdHlQYWRkaW5nKjIsc3QrdippdCkpLGhlaWdodDpmLmxlbmd0aD4wP3o6TWF0aC5tYXgobzEubWluRW50aXR5SGVpZ2h0LGIuaGVpZ2h0K28xLmVudGl0eVBhZGRpbmcqMil9O2lmKGYubGVuZ3RoPjApe2NvbnN0IGJ0PU1hdGgubWF4KDAsKHV0LndpZHRoLXN0LXYqaXQpLyhpdC8yKSk7YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1dC53aWR0aC8yKyIsIisocCtiLmhlaWdodC8yKSsiKSIpO2xldCBtdD1iLmhlaWdodCtwKjIseXQ9ImF0dHJpYnV0ZUJveE9kZCI7RS5mb3JFYWNoKGR0PT57Y29uc3QgaHQ9bXQrcCtkdC5oZWlnaHQvMjtkdC50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsIitodCsiKSIpO2NvbnN0IHd0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZHQudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsTit2KjIrYnQpLmF0dHIoImhlaWdodCIsZHQuaGVpZ2h0K3AqMiksWD1wYXJzZUZsb2F0KHd0LmF0dHIoIngiKSkrcGFyc2VGbG9hdCh3dC5hdHRyKCJ3aWR0aCIpKTtkdC5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoWCt2KSsiLCIraHQrIikiKTtjb25zdCBwdD1pLmluc2VydCgicmVjdCIsIiMiK2R0Lm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHt5dH1gLCEwKS5hdHRyKCJ4IixYKS5hdHRyKCJ5IixtdCkuYXR0cigid2lkdGgiLEIrdioyK2J0KS5hdHRyKCJoZWlnaHQiLGR0LmhlaWdodCtwKjIpO2xldCBVPXBhcnNlRmxvYXQocHQuYXR0cigieCIpKStwYXJzZUZsb2F0KHB0LmF0dHIoIndpZHRoIikpO2lmKF8pe2R0LmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhVK3YpKyIsIitodCsiKSIpO2NvbnN0IHh0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZHQua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsait2KjIrYnQpLmF0dHIoImhlaWdodCIsZHQuaGVpZ2h0K3AqMik7VT1wYXJzZUZsb2F0KHh0LmF0dHIoIngiKSkrcGFyc2VGbG9hdCh4dC5hdHRyKCJ3aWR0aCIpKX1MJiYoZHQuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKFUrdikrIiwiK2h0KyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIitkdC5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7eXR9YCwidHJ1ZSIpLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsUit2KjIrYnQpLmF0dHIoImhlaWdodCIsZHQuaGVpZ2h0K3AqMikpLG10Kz1kdC5oZWlnaHQrcCoyLHl0PXl0PT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSB1dC5oZWlnaHQ9TWF0aC5tYXgobzEubWluRW50aXR5SGVpZ2h0LHopLGEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdXQud2lkdGgvMisiLCIrdXQuaGVpZ2h0LzIrIikiKTtyZXR1cm4gdXR9LEokZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1PYmplY3Qua2V5cyhhKTtsZXQgdjtyZXR1cm4gcC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2NvbnN0IGI9c3plKG0sImVudGl0eSIpO3lQLnNldChtLGIpO2NvbnN0IEU9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYik7dj12PT09dm9pZCAwP2I6djtjb25zdCBfPSJ0ZXh0LSIrYixMPUUuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsXykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixMZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG8xLmZvbnRTaXplKyJweCIpLnRleHQoYVttXS5hbGlhcz8/bSkse3dpZHRoOk4saGVpZ2h0OkJ9PVokZShFLEwsYVttXS5hdHRyaWJ1dGVzKSxSPUUuaW5zZXJ0KCJyZWN0IiwiIyIrXykuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLE4pLmF0dHIoImhlaWdodCIsQikubm9kZSgpLmdldEJCb3goKTtmLnNldE5vZGUoYix7d2lkdGg6Ui53aWR0aCxoZWlnaHQ6Ui5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmJ9KX0pLHZ9LHR6ZT1mdW5jdGlvbihpLGEpe2Eubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YhPT12b2lkIDAmJmEubm9kZShmKSE9PXZvaWQgMCYmaS5zZWxlY3QoIiMiK2YpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLm5vZGUoZikueC1hLm5vZGUoZikud2lkdGgvMikrIiwiKyhhLm5vZGUoZikueS1hLm5vZGUoZikuaGVpZ2h0LzIpKyIgKSIpfSl9LE9CdD1mdW5jdGlvbihpKXtyZXR1cm4oaS5lbnRpdHlBK2kucm9sZUEraS5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sZXplPWZ1bmN0aW9uKGksYSl7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihmKXthLnNldEVkZ2UoeVAuZ2V0KGYuZW50aXR5QSkseVAuZ2V0KGYuZW50aXR5Qikse3JlbGF0aW9uc2hpcDpmfSxPQnQoZikpfSksaX07bGV0IE5CdD0wO2NvbnN0IG56ZT1mdW5jdGlvbihpLGEsZixwLHYpe05CdCsrO2NvbnN0IG09Zi5lZGdlKHlQLmdldChhLmVudGl0eUEpLHlQLmdldChhLmVudGl0eUIpLE9CdChhKSksYj1aNygpLngoZnVuY3Rpb24oeil7cmV0dXJuIHoueH0pLnkoZnVuY3Rpb24oeil7cmV0dXJuIHoueX0pLmN1cnZlKEZOKSxFPWkuaW5zZXJ0KCJwYXRoIiwiIyIrcCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGluZSIsITApLmF0dHIoImQiLGIobS5wb2ludHMpKS5zdHlsZSgic3Ryb2tlIixvMS5zdHJva2UpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2EucmVsU3BlYy5yZWxUeXBlPT09di5kYi5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJkUuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO2xldCBfPSIiO3N3aXRjaChvMS5hcnJvd01hcmtlckFic29sdXRlJiYoXz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxfPV8ucmVwbGFjZSgvXCgvZywiXFwoIiksXz1fLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLnJlbFNwZWMuY2FyZEEpe2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2xtLkVSTWFya2Vycy5PTkxZX09ORV9FTkQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2xtLkVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKyIpIik7YnJlYWt9c3dpdGNoKGEucmVsU3BlYy5jYXJkQil7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrbG0uRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK18rIiMiK2xtLkVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrbG0uRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCsiKSIpO2JyZWFrfWNvbnN0IEw9RS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxOPUUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoTCouNSksQj0icmVsIitOQnQsUj1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsIiwhMCkuYXR0cigiaWQiLEIpLmF0dHIoIngiLE4ueCkuYXR0cigieSIsTi55KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1mYW1pbHkiLExlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbzEuZm9udFNpemUrInB4IikudGV4dChhLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrQikuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giLCEwKS5hdHRyKCJ4IixOLngtUi53aWR0aC8yKS5hdHRyKCJ5IixOLnktUi5oZWlnaHQvMikuYXR0cigid2lkdGgiLFIud2lkdGgpLmF0dHIoImhlaWdodCIsUi5oZWlnaHQpfSxyemU9ZnVuY3Rpb24oaSxhLGYscCl7bzE9TGUoKS5lcixVdC5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtjb25zdCB2PUxlKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt2PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBFPXlyKHY9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9JyR7YX0nXWApO2xtLmluc2VydE1hcmtlcnMoRSxvMSk7bGV0IF87Xz1uZXcgYTEoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpvMS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgTD1KJGUoRSxwLmRiLmdldEVudGl0aWVzKCksXyksTj1lemUocC5kYi5nZXRSZWxhdGlvbnNoaXBzKCksXyk7ZUwoXyksdHplKEUsXyksTi5mb3JFYWNoKGZ1bmN0aW9uKEspe256ZShFLEssXyxMLHApfSk7Y29uc3QgQj1vMS5kaWFncmFtUGFkZGluZzskYS5pbnNlcnRUaXRsZShFLCJlbnRpdHlUaXRsZVRleHQiLG8xLnRpdGxlVG9wTWFyZ2luLHAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IGo9RS5ub2RlKCkuZ2V0QkJveCgpLFI9ai53aWR0aCtCKjIsej1qLmhlaWdodCtCKjI7b2coRSx6LFIsbzEudXNlTWF4V2lkdGgpLEUuYXR0cigidmlld0JveCIsYCR7ai54LUJ9ICR7ai55LUJ9ICR7Un0gJHt6fWApfSxpemU9IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7ZnVuY3Rpb24gc3plKGk9IiIsYT0iIil7Y29uc3QgZj1pLnJlcGxhY2UoWCRlLCIiKTtyZXR1cm5gJHtQQnQoYSl9JHtQQnQoZil9JHtZJGUoaSxpemUpfWB9ZnVuY3Rpb24gUEJ0KGk9IiIpe3JldHVybiBpLmxlbmd0aD4wP2Ake2l9LWA6IiJ9Y29uc3QgYXplPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6UCRlLGRiOlIkZSxyZW5kZXJlcjp7c2V0Q29uZjpRJGUsZHJhdzpyemV9LHN0eWxlczppPT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke2kuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBGMHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih5dCxkdCxodCx3dCl7Zm9yKGh0PWh0fHx7fSx3dD15dC5sZW5ndGg7d3QtLTtodFt5dFt3dF1dPWR0KTtyZXR1cm4gaHR9LGE9WzEsM10sZj1bMSw2XSxwPVsxLDRdLHY9WzEsNV0sbT1bMiw1XSxiPVsxLDEyXSxFPVs1LDcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzksNDZdLF89WzcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLEw9WzcsMTIsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLE49WzcsMTMsNDZdLEI9WzEsNDJdLGo9WzEsNDFdLFI9WzcsMTMsMjksMzIsMzQsMzcsNDZdLHo9WzEsNTVdLEs9WzEsNTZdLGl0PVsxLDU3XSxzdD1bNywxMywzMiwzNCw0MSw0Nl0sdXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LEdHOjUsZG9jdW1lbnQ6NixFT0Y6NywiOiI6OCxESVI6OSxvcHRpb25zOjEwLGJvZHk6MTEsT1BUOjEyLE5MOjEzLGxpbmU6MTQsc3RhdGVtZW50OjE1LGNvbW1pdFN0YXRlbWVudDoxNixtZXJnZVN0YXRlbWVudDoxNyxjaGVycnlQaWNrU3RhdGVtZW50OjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLHNlY3Rpb246MjQsYnJhbmNoU3RhdGVtZW50OjI1LENIRUNLT1VUOjI2LHJlZjoyNyxCUkFOQ0g6MjgsT1JERVI6MjksTlVNOjMwLENIRVJSWV9QSUNLOjMxLENPTU1JVF9JRDozMixTVFI6MzMsQ09NTUlUX1RBRzozNCxFTVBUWVNUUjozNSxNRVJHRTozNixDT01NSVRfVFlQRTozNyxjb21taXRUeXBlOjM4LENPTU1JVDozOSxjb21taXRfYXJnOjQwLENPTU1JVF9NU0c6NDEsTk9STUFMOjQyLFJFVkVSU0U6NDMsSElHSExJR0hUOjQ0LElEOjQ1LCI7Ijo0NiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiR0ciLDc6IkVPRiIsODoiOiIsOToiRElSIiwxMjoiT1BUIiwxMzoiTkwiLDE5OiJhY2NfdGl0bGUiLDIwOiJhY2NfdGl0bGVfdmFsdWUiLDIxOiJhY2NfZGVzY3IiLDIyOiJhY2NfZGVzY3JfdmFsdWUiLDIzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNDoic2VjdGlvbiIsMjY6IkNIRUNLT1VUIiwyODoiQlJBTkNIIiwyOToiT1JERVIiLDMwOiJOVU0iLDMxOiJDSEVSUllfUElDSyIsMzI6IkNPTU1JVF9JRCIsMzM6IlNUUiIsMzQ6IkNPTU1JVF9UQUciLDM1OiJFTVBUWVNUUiIsMzY6Ik1FUkdFIiwzNzoiQ09NTUlUX1RZUEUiLDM5OiJDT01NSVQiLDQxOiJDT01NSVRfTVNHIiw0MjoiTk9STUFMIiw0MzoiUkVWRVJTRSIsNDQ6IkhJR0hMSUdIVCIsNDU6IklEIiw0NjoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbMTAsMl0sWzEwLDFdLFsxMSwwXSxbMTEsMl0sWzE0LDJdLFsxNCwxXSxbMTUsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE1LDJdLFsxNSwxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMjUsMl0sWzI1LDRdLFsxOCwzXSxbMTgsNV0sWzE4LDVdLFsxOCw1XSxbMTgsNV0sWzE3LDJdLFsxNyw0XSxbMTcsNF0sWzE3LDRdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNiwyXSxbMTYsM10sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsM10sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzQwLDBdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFszOCwxXSxbMjcsMV0sWzI3LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGR0LGh0LHd0LFgscHQsVSx4dCl7dmFyIG50PVUubGVuZ3RoLTE7c3dpdGNoKHB0KXtjYXNlIDI6cmV0dXJuIFVbbnRdO2Nhc2UgMzpyZXR1cm4gVVtudC0xXTtjYXNlIDQ6cmV0dXJuIFguc2V0RGlyZWN0aW9uKFVbbnQtM10pLFVbbnQtMV07Y2FzZSA2Olguc2V0T3B0aW9ucyhVW250LTFdKSx0aGlzLiQ9VVtudF07YnJlYWs7Y2FzZSA3OlVbbnQtMV0rPVVbbnRdLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMDpVW250LTFdLnB1c2goVVtudF0pLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPVVbbnQtMV07YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9VVtudF0udHJpbSgpLFguc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPVVbbnRdLnRyaW0oKSxYLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpYLmFkZFNlY3Rpb24oVVtudF0uc3Vic3RyKDgpKSx0aGlzLiQ9VVtudF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjE6WC5jaGVja291dChVW250XSk7YnJlYWs7Y2FzZSAyMjpYLmJyYW5jaChVW250XSk7YnJlYWs7Y2FzZSAyMzpYLmJyYW5jaChVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDI0OlguY2hlcnJ5UGljayhVW250XSwiIix2b2lkIDApO2JyZWFrO2Nhc2UgMjU6WC5jaGVycnlQaWNrKFVbbnQtMl0sIiIsVVtudF0pO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyODpYLmNoZXJyeVBpY2soVVtudC0yXSwiIiwiIik7YnJlYWs7Y2FzZSAyNzpYLmNoZXJyeVBpY2soVVtudF0sIiIsVVtudC0yXSk7YnJlYWs7Y2FzZSAyOTpYLm1lcmdlKFVbbnRdLCIiLCIiLCIiKTticmVhaztjYXNlIDMwOlgubWVyZ2UoVVtudC0yXSxVW250XSwiIiwiIik7YnJlYWs7Y2FzZSAzMTpYLm1lcmdlKFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgMzI6WC5tZXJnZShVW250LTJdLCIiLCIiLFVbbnRdKTticmVhaztjYXNlIDMzOlgubWVyZ2UoVVtudC00XSxVW250XSwiIixVW250LTJdKTticmVhaztjYXNlIDM0OlgubWVyZ2UoVVtudC00XSwiIixVW250XSxVW250LTJdKTticmVhaztjYXNlIDM1OlgubWVyZ2UoVVtudC00XSwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDM2OlgubWVyZ2UoVVtudC00XSxVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDM3OlgubWVyZ2UoVVtudC00XSxVW250LTJdLCIiLFVbbnRdKTticmVhaztjYXNlIDM4OlgubWVyZ2UoVVtudC00XSxVW250XSxVW250LTJdLCIiKTticmVhaztjYXNlIDM5OlgubWVyZ2UoVVtudC02XSxVW250LTRdLFVbbnQtMl0sVVtudF0pO2JyZWFrO2Nhc2UgNDA6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0MTpYLm1lcmdlKFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDQyOlgubWVyZ2UoVVtudC02XSxVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNDM6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA0NDpYLm1lcmdlKFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDQ1OlguY29tbWl0KFVbbnRdKTticmVhaztjYXNlIDQ2OlguY29tbWl0KCIiLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudF0pO2JyZWFrO2Nhc2UgNDc6WC5jb21taXQoIiIsIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNDg6WC5jb21taXQoIiIsIiIsVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0OTpYLmNvbW1pdCgiIiwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDUwOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNTE6WC5jb21taXQoIiIsVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDUyOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudC0yXSk7YnJlYWs7Y2FzZSA1MzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDU0OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNTU6WC5jb21taXQoIiIsVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDU2OlguY29tbWl0KCIiLFVbbnQtNF0sVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA1NzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNTg6WC5jb21taXQoIiIsVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDU5OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA2MDpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNjE6WC5jb21taXQoVVtudF0sIiIsWC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA2MjpYLmNvbW1pdChVW250XSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNjM6WC5jb21taXQoVVtudC0yXSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDY0OlguY29tbWl0KFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNjU6WC5jb21taXQoVVtudF0sIiIsVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA2NjpYLmNvbW1pdChVW250XSxVW250LTJdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNjc6WC5jb21taXQoVVtudC0yXSxVW250XSxYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY4OlguY29tbWl0KFVbbnQtNF0sIiIsVVtudC0yXSxVW250XSk7YnJlYWs7Y2FzZSA2OTpYLmNvbW1pdChVW250LTRdLCIiLFVbbnRdLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNzA6WC5jb21taXQoVVtudC0yXSwiIixVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDcxOlguY29tbWl0KFVbbnRdLCIiLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA3MjpYLmNvbW1pdChVW250XSwiIixVW250LTJdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNzM6WC5jb21taXQoVVtudC0yXSwiIixVW250XSxVW250LTRdKTticmVhaztjYXNlIDc0OlguY29tbWl0KFVbbnQtNF0sVVtudF0sVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA3NTpYLmNvbW1pdChVW250LTRdLFVbbnQtMl0sVVtudF0sIiIpO2JyZWFrO2Nhc2UgNzY6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLCIiKTticmVhaztjYXNlIDc3OlguY29tbWl0KFVbbnRdLFVbbnQtMl0sVVtudC00XSwiIik7YnJlYWs7Y2FzZSA3ODpYLmNvbW1pdChVW250XSxVW250LTRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNzk6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnRdLCIiKTticmVhaztjYXNlIDgwOlguY29tbWl0KFVbbnQtNF0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDgxOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDgyOlguY29tbWl0KFVbbnQtMl0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDgzOlguY29tbWl0KFVbbnRdLFVbbnQtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDg0OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDg1OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDg2OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDg3OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDg4OlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDg5OlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDkwOlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDkxOlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDkyOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDkzOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDk0OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDk1OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDk2OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDk3OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDk4OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC0yXSxVW250LTZdKTticmVhaztjYXNlIDk5OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMDpYLmNvbW1pdChVW250XSxVW250LTJdLFVbbnQtNF0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDE6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLFVbbnQtNl0pO2JyZWFrO2Nhc2UgMTAyOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMzpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtMl0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDQ6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnQtNl0sVVtudF0pO2JyZWFrO2Nhc2UgMTA1OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC02XSxVW250LTJdKTticmVhaztjYXNlIDEwNjpYLmNvbW1pdChVW250LTJdLFVbbnRdLFVbbnQtNl0sVVtudC00XSk7YnJlYWs7Y2FzZSAxMDc6WC5jb21taXQoVVtudF0sVVtudC0yXSxVW250LTZdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgMTA4OlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250LTZdLFVbbnRdKTticmVhaztjYXNlIDEwOTpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtNl0sVVtudC0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1VW250XTticmVhaztjYXNlIDExMjp0aGlzLiQ9WC5jb21taXRUeXBlLk5PUk1BTDticmVhaztjYXNlIDExMzp0aGlzLiQ9WC5jb21taXRUeXBlLlJFVkVSU0U7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPVguY29tbWl0VHlwZS5ISUdITElHSFQ7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDc6ZiwxMzpwLDQ2OnZ9LHsxOlszXX0sezM6Nyw0OjIsNTphLDc6ZiwxMzpwLDQ2OnZ9LHs2OjgsNzptLDg6WzEsOV0sOTpbMSwxMF0sMTA6MTEsMTM6Yn0saShFLFsyLDExN10pLGkoRSxbMiwxMThdKSxpKEUsWzIsMTE5XSksezE6WzIsMV19LHs3OlsxLDEzXX0sezY6MTQsNzptLDEwOjExLDEzOmJ9LHs4OlsxLDE1XX0saShfLFsyLDldLHsxMToxNiwxMjpbMSwxN119KSxpKEwsWzIsOF0pLHsxOlsyLDJdfSx7NzpbMSwxOF19LHs2OjE5LDc6bSwxMDoxMSwxMzpifSx7NzpbMiw2XSwxMzpbMSwyMl0sMTQ6MjAsMTU6MjEsMTY6MjMsMTc6MjQsMTg6MjUsMTk6WzEsMjZdLDIxOlsxLDI3XSwyMzpbMSwyOF0sMjQ6WzEsMjldLDI1OjMwLDI2OlsxLDMxXSwyODpbMSwzNV0sMzE6WzEsMzRdLDM2OlsxLDMzXSwzOTpbMSwzMl19LGkoTCxbMiw3XSksezE6WzIsM119LHs3OlsxLDM2XX0saShfLFsyLDEwXSksezQ6MzcsNzpmLDEzOnAsNDY6dn0saShfLFsyLDEyXSksaShOLFsyLDEzXSksaShOLFsyLDE0XSksaShOLFsyLDE1XSksezIwOlsxLDM4XX0sezIyOlsxLDM5XX0saShOLFsyLDE4XSksaShOLFsyLDE5XSksaShOLFsyLDIwXSksezI3OjQwLDMzOkIsNDU6an0saShOLFsyLDExMF0sezQwOjQzLDMyOlsxLDQ2XSwzMzpbMSw0OF0sMzQ6WzEsNDRdLDM3OlsxLDQ1XSw0MTpbMSw0N119KSx7Mjc6NDksMzM6Qiw0NTpqfSx7MzI6WzEsNTBdLDM0OlsxLDUxXX0sezI3OjUyLDMzOkIsNDU6an0sezE6WzIsNF19LGkoXyxbMiwxMV0pLGkoTixbMiwxNl0pLGkoTixbMiwxN10pLGkoTixbMiwyMV0pLGkoUixbMiwxMTVdKSxpKFIsWzIsMTE2XSksaShOLFsyLDQ1XSksezMzOlsxLDUzXX0sezM4OjU0LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDU4XX0sezMzOlsxLDU5XX0saShOLFsyLDExMV0pLGkoTixbMiwyOV0sezMyOlsxLDYwXSwzNDpbMSw2Ml0sMzc6WzEsNjFdfSksezMzOlsxLDYzXX0sezMzOlsxLDY0XSwzNTpbMSw2NV19LGkoTixbMiwyMl0sezI5OlsxLDY2XX0pLGkoTixbMiw0Nl0sezMyOlsxLDY4XSwzNzpbMSw2N10sNDE6WzEsNjldfSksaShOLFsyLDQ3XSx7MzI6WzEsNzFdLDM0OlsxLDcwXSw0MTpbMSw3Ml19KSxpKHN0LFsyLDExMl0pLGkoc3QsWzIsMTEzXSksaShzdCxbMiwxMTRdKSxpKE4sWzIsNTBdLHszNDpbMSw3M10sMzc6WzEsNzRdLDQxOlsxLDc1XX0pLGkoTixbMiw2MV0sezMyOlsxLDc4XSwzNDpbMSw3Nl0sMzc6WzEsNzddfSksezMzOlsxLDc5XX0sezM4OjgwLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDgxXX0saShOLFsyLDI0XSx7MzQ6WzEsODJdfSksezMyOlsxLDgzXX0sezMyOlsxLDg0XX0sezMwOlsxLDg1XX0sezM4Ojg2LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDg3XX0sezMzOlsxLDg4XX0sezMzOlsxLDg5XX0sezMzOlsxLDkwXX0sezMzOlsxLDkxXX0sezMzOlsxLDkyXX0sezM4OjkzLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDk0XX0sezMzOlsxLDk1XX0sezM4Ojk2LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDk3XX0saShOLFsyLDMwXSx7MzQ6WzEsOTldLDM3OlsxLDk4XX0pLGkoTixbMiwzMV0sezMyOlsxLDEwMV0sMzQ6WzEsMTAwXX0pLGkoTixbMiwzMl0sezMyOlsxLDEwMl0sMzc6WzEsMTAzXX0pLHszMzpbMSwxMDRdLDM1OlsxLDEwNV19LHszMzpbMSwxMDZdfSx7MzM6WzEsMTA3XX0saShOLFsyLDIzXSksaShOLFsyLDQ4XSx7MzI6WzEsMTA4XSw0MTpbMSwxMDldfSksaShOLFsyLDUyXSx7Mzc6WzEsMTEwXSw0MTpbMSwxMTFdfSksaShOLFsyLDYyXSx7MzI6WzEsMTEzXSwzNzpbMSwxMTJdfSksaShOLFsyLDQ5XSx7MzI6WzEsMTE0XSw0MTpbMSwxMTVdfSksaShOLFsyLDU0XSx7MzQ6WzEsMTE2XSw0MTpbMSwxMTddfSksaShOLFsyLDY1XSx7MzI6WzEsMTE5XSwzNDpbMSwxMThdfSksaShOLFsyLDUxXSx7Mzc6WzEsMTIwXSw0MTpbMSwxMjFdfSksaShOLFsyLDUzXSx7MzQ6WzEsMTIyXSw0MTpbMSwxMjNdfSksaShOLFsyLDY2XSx7MzQ6WzEsMTI1XSwzNzpbMSwxMjRdfSksaShOLFsyLDYzXSx7MzI6WzEsMTI3XSwzNzpbMSwxMjZdfSksaShOLFsyLDY0XSx7MzI6WzEsMTI5XSwzNDpbMSwxMjhdfSksaShOLFsyLDY3XSx7MzQ6WzEsMTMxXSwzNzpbMSwxMzBdfSksezM4OjEzMiw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwxMzNdfSx7MzM6WzEsMTM0XX0sezMzOlsxLDEzNV19LHszMzpbMSwxMzZdfSx7Mzg6MTM3LDQyOnosNDM6Syw0NDppdH0saShOLFsyLDI1XSksaShOLFsyLDI2XSksaShOLFsyLDI3XSksaShOLFsyLDI4XSksezMzOlsxLDEzOF19LHszMzpbMSwxMzldfSx7Mzg6MTQwLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDE0MV19LHszODoxNDIsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTQzXX0sezMzOlsxLDE0NF19LHszMzpbMSwxNDVdfSx7MzM6WzEsMTQ2XX0sezMzOlsxLDE0N119LHszMzpbMSwxNDhdfSx7MzM6WzEsMTQ5XX0sezM4OjE1MCw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwxNTFdfSx7MzM6WzEsMTUyXX0sezMzOlsxLDE1M119LHszODoxNTQsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTU1XX0sezM4OjE1Niw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwxNTddfSx7MzM6WzEsMTU4XX0sezMzOlsxLDE1OV19LHszODoxNjAsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTYxXX0saShOLFsyLDM2XSx7MzQ6WzEsMTYyXX0pLGkoTixbMiwzN10sezM3OlsxLDE2M119KSxpKE4sWzIsMzVdLHszMjpbMSwxNjRdfSksaShOLFsyLDM4XSx7MzQ6WzEsMTY1XX0pLGkoTixbMiwzM10sezM3OlsxLDE2Nl19KSxpKE4sWzIsMzRdLHszMjpbMSwxNjddfSksaShOLFsyLDU5XSx7NDE6WzEsMTY4XX0pLGkoTixbMiw3Ml0sezMyOlsxLDE2OV19KSxpKE4sWzIsNjBdLHs0MTpbMSwxNzBdfSksaShOLFsyLDgzXSx7Mzc6WzEsMTcxXX0pLGkoTixbMiw3M10sezMyOlsxLDE3Ml19KSxpKE4sWzIsODJdLHszNzpbMSwxNzNdfSksaShOLFsyLDU4XSx7NDE6WzEsMTc0XX0pLGkoTixbMiw3MV0sezMyOlsxLDE3NV19KSxpKE4sWzIsNTddLHs0MTpbMSwxNzZdfSksaShOLFsyLDc3XSx7MzQ6WzEsMTc3XX0pLGkoTixbMiw3MF0sezMyOlsxLDE3OF19KSxpKE4sWzIsNzZdLHszNDpbMSwxNzldfSksaShOLFsyLDU2XSx7NDE6WzEsMTgwXX0pLGkoTixbMiw4NF0sezM3OlsxLDE4MV19KSxpKE4sWzIsNTVdLHs0MTpbMSwxODJdfSksaShOLFsyLDc4XSx7MzQ6WzEsMTgzXX0pLGkoTixbMiw3OV0sezM0OlsxLDE4NF19KSxpKE4sWzIsODVdLHszNzpbMSwxODVdfSksaShOLFsyLDY5XSx7MzI6WzEsMTg2XX0pLGkoTixbMiw4MF0sezM3OlsxLDE4N119KSxpKE4sWzIsNjhdLHszMjpbMSwxODhdfSksaShOLFsyLDc0XSx7MzQ6WzEsMTg5XX0pLGkoTixbMiw3NV0sezM0OlsxLDE5MF19KSxpKE4sWzIsODFdLHszNzpbMSwxOTFdfSksezMzOlsxLDE5Ml19LHszODoxOTMsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTk0XX0sezMzOlsxLDE5NV19LHszODoxOTYsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTk3XX0sezMzOlsxLDE5OF19LHszMzpbMSwxOTldfSx7MzM6WzEsMjAwXX0sezM4OjIwMSw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwyMDJdfSx7Mzg6MjAzLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDIwNF19LHszMzpbMSwyMDVdfSx7MzM6WzEsMjA2XX0sezMzOlsxLDIwN119LHszMzpbMSwyMDhdfSx7MzM6WzEsMjA5XX0sezMzOlsxLDIxMF19LHszODoyMTEsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMjEyXX0sezMzOlsxLDIxM119LHszMzpbMSwyMTRdfSx7Mzg6MjE1LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDIxNl19LHszODoyMTcsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMjE4XX0sezMzOlsxLDIxOV19LHszMzpbMSwyMjBdfSx7Mzg6MjIxLDQyOnosNDM6Syw0NDppdH0saShOLFsyLDM5XSksaShOLFsyLDQxXSksaShOLFsyLDQwXSksaShOLFsyLDQyXSksaShOLFsyLDQ0XSksaShOLFsyLDQzXSksaShOLFsyLDEwMF0pLGkoTixbMiwxMDFdKSxpKE4sWzIsOThdKSxpKE4sWzIsOTldKSxpKE4sWzIsMTAzXSksaShOLFsyLDEwMl0pLGkoTixbMiwxMDddKSxpKE4sWzIsMTA2XSksaShOLFsyLDEwNV0pLGkoTixbMiwxMDRdKSxpKE4sWzIsMTA5XSksaShOLFsyLDEwOF0pLGkoTixbMiw5N10pLGkoTixbMiw5Nl0pLGkoTixbMiw5NV0pLGkoTixbMiw5NF0pLGkoTixbMiw5Ml0pLGkoTixbMiw5M10pLGkoTixbMiw5MV0pLGkoTixbMiw5MF0pLGkoTixbMiw4OV0pLGkoTixbMiw4OF0pLGkoTixbMiw4Nl0pLGkoTixbMiw4N10pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiwxXSwxMzpbMiwyXSwxODpbMiwzXSwzNjpbMiw0XX0scGFyc2VFcnJvcjpmdW5jdGlvbihkdCxodCl7aWYoaHQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShkdCk7ZWxzZXt2YXIgd3Q9bmV3IEVycm9yKGR0KTt0aHJvdyB3dC5oYXNoPWh0LHd0fX0scGFyc2U6ZnVuY3Rpb24oZHQpe3ZhciBodD10aGlzLHd0PVswXSxYPVtdLHB0PVtudWxsXSxVPVtdLHh0PXRoaXMudGFibGUsbnQ9IiIsT3Q9MCxOdD0wLHF0PTIsQ3Q9MSxaPVUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksVHQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxIdD17eXk6e319O2Zvcih2YXIgSXQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxJdCkmJihIdC55eVtJdF09dGhpcy55eVtJdF0pO1R0LnNldElucHV0KGR0LEh0Lnl5KSxIdC55eS5sZXhlcj1UdCxIdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgVHQueXlsbG9jPiJ1IiYmKFR0Lnl5bGxvYz17fSk7dmFyIEZ0PVR0Lnl5bGxvYztVLnB1c2goRnQpO3ZhciBrZT1UdC5vcHRpb25zJiZUdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgSHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9SHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gcG4oKXt2YXIgb2U7cmV0dXJuIG9lPVgucG9wKCl8fFR0LmxleCgpfHxDdCx0eXBlb2Ygb2UhPSJudW1iZXIiJiYob2UgaW5zdGFuY2VvZiBBcnJheSYmKFg9b2Usb2U9WC5wb3AoKSksb2U9aHQuc3ltYm9sc19bb2VdfHxvZSksb2V9Zm9yKHZhciBNZSx2ZSxHZSxLZSx3ZT17fSxfZSwkdCxyZSxpZTs7KXtpZih2ZT13dFt3dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t2ZV0/R2U9dGhpcy5kZWZhdWx0QWN0aW9uc1t2ZV06KChNZT09PW51bGx8fHR5cGVvZiBNZT4idSIpJiYoTWU9cG4oKSksR2U9eHRbdmVdJiZ4dFt2ZV1bTWVdKSx0eXBlb2YgR2U+InUifHwhR2UubGVuZ3RofHwhR2VbMF0pe3ZhciBPZT0iIjtpZT1bXTtmb3IoX2UgaW4geHRbdmVdKXRoaXMudGVybWluYWxzX1tfZV0mJl9lPnF0JiZpZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bX2VdKyInIik7VHQuc2hvd1Bvc2l0aW9uP09lPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE90KzEpK2A6CmArVHQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtpZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW01lXXx8TWUpKyInIjpPZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPdCsxKSsiOiBVbmV4cGVjdGVkICIrKE1lPT1DdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tNZV18fE1lKSsiJyIpLHRoaXMucGFyc2VFcnJvcihPZSx7dGV4dDpUdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTWVdfHxNZSxsaW5lOlR0Lnl5bGluZW5vLGxvYzpGdCxleHBlY3RlZDppZX0pfWlmKEdlWzBdaW5zdGFuY2VvZiBBcnJheSYmR2UubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit2ZSsiLCB0b2tlbjogIitNZSk7c3dpdGNoKEdlWzBdKXtjYXNlIDE6d3QucHVzaChNZSkscHQucHVzaChUdC55eXRleHQpLFUucHVzaChUdC55eWxsb2MpLHd0LnB1c2goR2VbMV0pLE1lPW51bGwsTnQ9VHQueXlsZW5nLG50PVR0Lnl5dGV4dCxPdD1UdC55eWxpbmVubyxGdD1UdC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKCR0PXRoaXMucHJvZHVjdGlvbnNfW0dlWzFdXVsxXSx3ZS4kPXB0W3B0Lmxlbmd0aC0kdF0sd2UuXyQ9e2ZpcnN0X2xpbmU6VVtVLmxlbmd0aC0oJHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpVW1UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46VVtVLmxlbmd0aC0oJHR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VVtVLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sa2UmJih3ZS5fJC5yYW5nZT1bVVtVLmxlbmd0aC0oJHR8fDEpXS5yYW5nZVswXSxVW1UubGVuZ3RoLTFdLnJhbmdlWzFdXSksS2U9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHdlLFtudCxOdCxPdCxIdC55eSxHZVsxXSxwdCxVXS5jb25jYXQoWikpLHR5cGVvZiBLZTwidSIpcmV0dXJuIEtlOyR0JiYod3Q9d3Quc2xpY2UoMCwtMSokdCoyKSxwdD1wdC5zbGljZSgwLC0xKiR0KSxVPVUuc2xpY2UoMCwtMSokdCkpLHd0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bR2VbMV1dWzBdKSxwdC5wdXNoKHdlLiQpLFUucHVzaCh3ZS5fJCkscmU9eHRbd3Rbd3QubGVuZ3RoLTJdXVt3dFt3dC5sZW5ndGgtMV1dLHd0LnB1c2gocmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxidD1mdW5jdGlvbigpe3ZhciB5dD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihodCx3dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihodCx3dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaHQpfSxzZXRJbnB1dDpmdW5jdGlvbihkdCxodCl7cmV0dXJuIHRoaXMueXk9aHR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWR0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBkdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9ZHQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWR0LHRoaXMubWF0Y2hlZCs9ZHQ7dmFyIGh0PWR0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gaHQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGR0fSx1bnB1dDpmdW5jdGlvbihkdCl7dmFyIGh0PWR0Lmxlbmd0aCx3dD1kdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWR0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1odCksdGhpcy5vZmZzZXQtPWh0O3ZhciBYPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHd0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09d3QubGVuZ3RoLTEpO3ZhciBwdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46d3Q/KHd0Lmxlbmd0aD09PVgubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStYW1gubGVuZ3RoLXd0Lmxlbmd0aF0ubGVuZ3RoLXd0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4taHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcHRbMF0scHRbMF0rdGhpcy55eWxlbmctaHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihkdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGR0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBkdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGR0Lmxlbmd0aD4yMD8iLi4uIjoiIikrZHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgZHQ9dGhpcy5tYXRjaDtyZXR1cm4gZHQubGVuZ3RoPDIwJiYoZHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWR0Lmxlbmd0aCkpLChkdC5zdWJzdHIoMCwyMCkrKGR0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZHQ9dGhpcy5wYXN0SW5wdXQoKSxodD1uZXcgQXJyYXkoZHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gZHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2h0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihkdCxodCl7dmFyIHd0LFgscHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFg9ZHRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFgmJih0aGlzLnl5bGluZW5vKz1YLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlg/WFtYLmxlbmd0aC0xXS5sZW5ndGgtWFtYLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2R0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWR0WzBdLHRoaXMubWF0Y2grPWR0WzBdLHRoaXMubWF0Y2hlcz1kdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShkdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9ZHRbMF0sd3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsaHQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksd3QpcmV0dXJuIHd0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBVIGluIHB0KXRoaXNbVV09cHRbVV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgZHQsaHQsd3QsWDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBwdD10aGlzLl9jdXJyZW50UnVsZXMoKSxVPTA7VTxwdC5sZW5ndGg7VSsrKWlmKHd0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcHRbVV1dKSx3dCYmKCFodHx8d3RbMF0ubGVuZ3RoPmh0WzBdLmxlbmd0aCkpe2lmKGh0PXd0LFg9VSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihkdD10aGlzLnRlc3RfbWF0Y2god3QscHRbVV0pLGR0IT09ITEpcmV0dXJuIGR0O2lmKHRoaXMuX2JhY2t0cmFjayl7aHQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaHQ/KGR0PXRoaXMudGVzdF9tYXRjaChodCxwdFtYXSksZHQhPT0hMT9kdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGh0PXRoaXMubmV4dCgpO3JldHVybiBodHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oaHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChodCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGh0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGh0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oaHQpe3JldHVybiBodD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGh0fHwwKSxodD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2h0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihodCl7dGhpcy5iZWdpbihodCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oaHQsd3QsWCxwdCl7c3dpdGNoKFgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTk7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyMTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDEzO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNTtjYXNlIDExOnJldHVybiAzOTtjYXNlIDEyOnJldHVybiAzMjtjYXNlIDEzOnJldHVybiAzNztjYXNlIDE0OnJldHVybiA0MTtjYXNlIDE1OnJldHVybiA0MjtjYXNlIDE2OnJldHVybiA0MztjYXNlIDE3OnJldHVybiA0NDtjYXNlIDE4OnJldHVybiAzNDtjYXNlIDE5OnJldHVybiAyODtjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnJldHVybiAzNjtjYXNlIDIyOnJldHVybiAzMTtjYXNlIDIzOnJldHVybiAyNjtjYXNlIDI0OnJldHVybiA5O2Nhc2UgMjU6cmV0dXJuIDk7Y2FzZSAyNjpyZXR1cm4gODtjYXNlIDI3OnJldHVybiJDQVJFVCI7Y2FzZSAyODp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gMTI7Y2FzZSAzMTpyZXR1cm4gMzU7Y2FzZSAzMjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiAzMztjYXNlIDM1OnJldHVybiAzMDtjYXNlIDM2OnJldHVybiA0NTtjYXNlIDM3OnJldHVybiA3fX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86Z2l0R3JhcGhcYikvaSwvXig/OmNvbW1pdCg/PVxzfCQpKS9pLC9eKD86aWQ6KS9pLC9eKD86dHlwZTopL2ksL14oPzptc2c6KS9pLC9eKD86Tk9STUFMXGIpL2ksL14oPzpSRVZFUlNFXGIpL2ksL14oPzpISUdITElHSFRcYikvaSwvXig/OnRhZzopL2ksL14oPzpicmFuY2goPz1cc3wkKSkvaSwvXig/Om9yZGVyOikvaSwvXig/Om1lcmdlKD89XHN8JCkpL2ksL14oPzpjaGVycnktcGljayg/PVxzfCQpKS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMjksMzBdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMxLDMyLDM1LDM2LDM3LDM4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHl0fSgpO3V0LmxleGVyPWJ0O2Z1bmN0aW9uIG10KCl7dGhpcy55eT17fX1yZXR1cm4gbXQucHJvdG90eXBlPXV0LHV0LlBhcnNlcj1tdCxuZXcgbXR9KCk7RjB0LnBhcnNlcj1GMHQ7Y29uc3Qgb3plPUYwdDtsZXQgeUs9TGUoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxjemU9TGUoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIsYzE9e30saGc9bnVsbCx4UD17fTt4UFt5S109e25hbWU6eUssb3JkZXI6Y3plfTtsZXQgUGY9e307UGZbeUtdPWhnO2xldCBYMT15SyxGQnQ9IkxSIix5VD0wO2Z1bmN0aW9uIEIwdCgpe3JldHVybiBHRHQoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gdXplKGksYSl7Y29uc3QgZj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLnJlZHVjZSgocCx2KT0+e2NvbnN0IG09YSh2KTtyZXR1cm4gZlttXXx8KGZbbV09ITAscC5wdXNoKHYpKSxwfSxbXSl9Y29uc3QgbHplPWZ1bmN0aW9uKGkpe0ZCdD1pfTtsZXQgQkJ0PXt9O2NvbnN0IGh6ZT1mdW5jdGlvbihpKXtVdC5kZWJ1Zygib3B0aW9ucyBzdHIiLGkpLGk9aSYmaS50cmltKCksaT1pfHwie30iO3RyeXtCQnQ9SlNPTi5wYXJzZShpKX1jYXRjaChhKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixhLm1lc3NhZ2UpfX0sZnplPWZ1bmN0aW9uKCl7cmV0dXJuIEJCdH0sZHplPWZ1bmN0aW9uKGksYSxmLHApe1V0LmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixpLGEsZixwKSxhPVlyLnNhbml0aXplVGV4dChhLExlKCkpLGk9WXIuc2FuaXRpemVUZXh0KGksTGUoKSkscD1Zci5zYW5pdGl6ZVRleHQocCxMZSgpKTtjb25zdCB2PXtpZDphfHx5VCsiLSIrQjB0KCksbWVzc2FnZTppLHNlcTp5VCsrLHR5cGU6Znx8a1AuTk9STUFMLHRhZzpwfHwiIixwYXJlbnRzOmhnPT1udWxsP1tdOltoZy5pZF0sYnJhbmNoOlgxfTtoZz12LGMxW3YuaWRdPXYsUGZbWDFdPXYuaWQsVXQuZGVidWcoImluIHB1c2hDb21taXQgIit2LmlkKX0sZ3plPWZ1bmN0aW9uKGksYSl7aWYoaT1Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKSxQZltpXT09PXZvaWQgMClQZltpXT1oZyE9bnVsbD9oZy5pZDpudWxsLHhQW2ldPXtuYW1lOmksb3JkZXI6YT9wYXJzZUludChhLDEwKTpudWxsfSxSQnQoaSksVXQuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpO2Vsc2V7bGV0IGY9bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJytpKyciKScpO3Rocm93IGYuaGFzaD17dGV4dDoiYnJhbmNoICIraSx0b2tlbjoiYnJhbmNoICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK2krJyInXX0sZn19LHB6ZT1mdW5jdGlvbihpLGEsZixwKXtpPVlyLnNhbml0aXplVGV4dChpLExlKCkpLGE9WXIuc2FuaXRpemVUZXh0KGEsTGUoKSk7Y29uc3Qgdj1jMVtQZltYMV1dLG09YzFbUGZbaV1dO2lmKFgxPT09aSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZih2PT09dm9pZCAwfHwhdil7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrWDErIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0sRX1lbHNlIGlmKFBmW2ldPT09dm9pZCAwKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgZG9lcyBub3QgZXhpc3QiKTt0aHJvdyBFLmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiYnJhbmNoICIraV19LEV9ZWxzZSBpZihtPT09dm9pZCAwfHwhbSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytpKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjb21taXQiJ119LEV9ZWxzZSBpZih2PT09bSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZihhJiZjMVthXSE9PXZvaWQgMCl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JythKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2krYStmK3AsdG9rZW46Im1lcmdlICIraSthK2YrcCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIm1lcmdlICIraSsiICIrYSsiX1VOSVFVRSAiK2YrIiAiK3BdfSxFfWNvbnN0IGI9e2lkOmF8fHlUKyItIitCMHQoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIraSsiIGludG8gIitYMSxzZXE6eVQrKyxwYXJlbnRzOltoZz09bnVsbD9udWxsOmhnLmlkLFBmW2ldXSxicmFuY2g6WDEsdHlwZTprUC5NRVJHRSxjdXN0b21UeXBlOmYsY3VzdG9tSWQ6ISFhLHRhZzpwfHwiIn07aGc9YixjMVtiLmlkXT1iLFBmW1gxXT1iLmlkLFV0LmRlYnVnKFBmKSxVdC5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sYnplPWZ1bmN0aW9uKGksYSxmKXtpZihVdC5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGksYSxmKSxpPVlyLnNhbml0aXplVGV4dChpLExlKCkpLGE9WXIuc2FuaXRpemVUZXh0KGEsTGUoKSksZj1Zci5zYW5pdGl6ZVRleHQoZixMZSgpKSwhaXx8YzFbaV09PT12b2lkIDApe2xldCBtPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgbS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sbX1sZXQgcD1jMVtpXSx2PXAuYnJhbmNoO2lmKHAudHlwZT09PWtQLk1FUkdFKXtsZXQgbT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgc2hvdWxkIG5vdCBiZSBhIG1lcmdlIGNvbW1pdCcpO3Rocm93IG0uaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK2EsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIithLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LG19aWYoIWF8fGMxW2FdPT09dm9pZCAwKXtpZih2PT09WDEpe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpcyBhbHJlYWR5IG9uIGN1cnJlbnQgYnJhbmNoJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sRX1jb25zdCBtPWMxW1BmW1gxXV07aWYobT09PXZvaWQgMHx8IW0pe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnktcGljayIuIEN1cnJlbnQgYnJhbmNoICgnK1gxKyIpaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyBFLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIitpKyIgIithLHRva2VuOiJjaGVycnlQaWNrICIraSsiICIrYSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxFfWNvbnN0IGI9e2lkOnlUKyItIitCMHQoKSxtZXNzYWdlOiJjaGVycnktcGlja2VkICIrcCsiIGludG8gIitYMSxzZXE6eVQrKyxwYXJlbnRzOltoZz09bnVsbD9udWxsOmhnLmlkLHAuaWRdLGJyYW5jaDpYMSx0eXBlOmtQLkNIRVJSWV9QSUNLLHRhZzpmPz8iY2hlcnJ5LXBpY2s6IitwLmlkfTtoZz1iLGMxW2IuaWRdPWIsUGZbWDFdPWIuaWQsVXQuZGVidWcoUGYpLFV0LmRlYnVnKCJpbiBjaGVycnlQaWNrIil9fSxSQnQ9ZnVuY3Rpb24oaSl7aWYoaT1Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKSxQZltpXT09PXZvaWQgMCl7bGV0IGE9bmV3IEVycm9yKCdUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJytpKyciKScpO3Rocm93IGEuaGFzaD17dGV4dDoiY2hlY2tvdXQgIitpLHRva2VuOiJjaGVja291dCAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyciYnJhbmNoICcraSsnIiddfSxhfWVsc2V7WDE9aTtjb25zdCBhPVBmW1gxXTtoZz1jMVthXX19O2Z1bmN0aW9uIGpCdChpLGEsZil7Y29uc3QgcD1pLmluZGV4T2YoYSk7cD09PS0xP2kucHVzaChmKTppLnNwbGljZShwLDEsZil9ZnVuY3Rpb24gJEJ0KGkpe2NvbnN0IGE9aS5yZWR1Y2UoKHYsbSk9PnYuc2VxPm0uc2VxP3Y6bSxpWzBdKTtsZXQgZj0iIjtpLmZvckVhY2goZnVuY3Rpb24odil7dj09PWE/Zis9IgkqIjpmKz0iCXwifSk7Y29uc3QgcD1bZixhLmlkLGEuc2VxXTtmb3IobGV0IHYgaW4gUGYpUGZbdl09PT1hLmlkJiZwLnB1c2godik7aWYoVXQuZGVidWcocC5qb2luKCIgIikpLGEucGFyZW50cyYmYS5wYXJlbnRzLmxlbmd0aD09Mil7Y29uc3Qgdj1jMVthLnBhcmVudHNbMF1dO2pCdChpLGEsdiksaS5wdXNoKGMxW2EucGFyZW50c1sxXV0pfWVsc2V7aWYoYS5wYXJlbnRzLmxlbmd0aD09MClyZXR1cm47e2NvbnN0IHY9YzFbYS5wYXJlbnRzXTtqQnQoaSxhLHYpfX1pPXV6ZShpLHY9PnYuaWQpLCRCdChpKX1jb25zdCB2emU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZyhjMSk7Y29uc3QgaT16QnQoKVswXTskQnQoW2ldKX0sd3plPWZ1bmN0aW9uKCl7YzE9e30saGc9bnVsbDtsZXQgaT1MZSgpLmdpdEdyYXBoLm1haW5CcmFuY2hOYW1lLGE9TGUoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXI7UGY9e30sUGZbaV09bnVsbCx4UD17fSx4UFtpXT17bmFtZTppLG9yZGVyOmF9LFgxPWkseVQ9MCxhcCgpfSxtemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh4UCkubWFwKChhLGYpPT5hLm9yZGVyIT09bnVsbD9hOnsuLi5hLG9yZGVyOnBhcnNlRmxvYXQoYDAuJHtmfWAsMTApfSkuc29ydCgoYSxmKT0+YS5vcmRlci1mLm9yZGVyKS5tYXAoKHtuYW1lOmF9KT0+KHtuYW1lOmF9KSl9LHl6ZT1mdW5jdGlvbigpe3JldHVybiBQZn0seHplPWZ1bmN0aW9uKCl7cmV0dXJuIGMxfSx6QnQ9ZnVuY3Rpb24oKXtjb25zdCBpPU9iamVjdC5rZXlzKGMxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGMxW2FdfSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihhKXtVdC5kZWJ1ZyhhLmlkKX0pLGkuc29ydCgoYSxmKT0+YS5zZXEtZi5zZXEpLGl9LGt6ZT1mdW5jdGlvbigpe3JldHVybiBYMX0sRXplPWZ1bmN0aW9uKCl7cmV0dXJuIEZCdH0sVHplPWZ1bmN0aW9uKCl7cmV0dXJuIGhnfSxrUD17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0sQ3plPXtnZXRDb25maWc6KCk9PkxlKCkuZ2l0R3JhcGgsc2V0RGlyZWN0aW9uOmx6ZSxzZXRPcHRpb25zOmh6ZSxnZXRPcHRpb25zOmZ6ZSxjb21taXQ6ZHplLGJyYW5jaDpnemUsbWVyZ2U6cHplLGNoZXJyeVBpY2s6YnplLGNoZWNrb3V0OlJCdCxwcmV0dHlQcmludDp2emUsY2xlYXI6d3plLGdldEJyYW5jaGVzQXNPYmpBcnJheTptemUsZ2V0QnJhbmNoZXM6eXplLGdldENvbW1pdHM6eHplLGdldENvbW1pdHNBcnJheTp6QnQsZ2V0Q3VycmVudEJyYW5jaDpremUsZ2V0RGlyZWN0aW9uOkV6ZSxnZXRIZWFkOlR6ZSxzZXRBY2NUaXRsZTpjZyxnZXRBY2NUaXRsZTpvcCxnZXRBY2NEZXNjcmlwdGlvbjp1cCxzZXRBY2NEZXNjcmlwdGlvbjpjcCxzZXREaWFncmFtVGl0bGU6WjIsZ2V0RGlhZ3JhbVRpdGxlOkRiLGNvbW1pdFR5cGU6a1B9O2xldCBFUD17fTtjb25zdCBGYj17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0seFQ9ODtsZXQgUTE9e30sVFA9e30seEs9W10sQ1A9MCx5MD0iTFIiO2NvbnN0IF96ZT0oKT0+e1ExPXt9LFRQPXt9LEVQPXt9LENQPTAseEs9W10seTA9IkxSIn0scUJ0PWk9Pntjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bGV0IGY9W107dHlwZW9mIGk9PSJzdHJpbmciP2Y9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/Zj1pOmY9W107Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt2LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHYuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHYuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHYuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHYudGV4dENvbnRlbnQ9cC50cmltKCksYS5hcHBlbmRDaGlsZCh2KX1yZXR1cm4gYX0sSEJ0PShpLGEsZik9Pntjb25zdCBwPUpOKCkuZ2l0R3JhcGgsdj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxtPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIik7bGV0IGI9MDt5MD09PSJUQiImJihiPTMwKSxPYmplY3Qua2V5cyhhKS5zb3J0KChMLE4pPT5hW0xdLnNlcS1hW05dLnNlcSkuZm9yRWFjaChMPT57Y29uc3QgTj1hW0xdLEI9eTA9PT0iVEIiP2IrMTA6UTFbTi5icmFuY2hdLnBvcyxqPXkwPT09IlRCIj9RMVtOLmJyYW5jaF0ucG9zOmIrMTA7aWYoZil7bGV0IFIsej1OLmN1c3RvbVR5cGUhPT12b2lkIDAmJk4uY3VzdG9tVHlwZSE9PSIiP04uY3VzdG9tVHlwZTpOLnR5cGU7c3dpdGNoKHope2Nhc2UgRmIuTk9STUFMOlI9ImNvbW1pdC1ub3JtYWwiO2JyZWFrO2Nhc2UgRmIuUkVWRVJTRTpSPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSBGYi5ISUdITElHSFQ6Uj0iY29tbWl0LWhpZ2hsaWdodCI7YnJlYWs7Y2FzZSBGYi5NRVJHRTpSPSJjb21taXQtbWVyZ2UiO2JyZWFrO2Nhc2UgRmIuQ0hFUlJZX1BJQ0s6Uj0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OlI9ImNvbW1pdC1ub3JtYWwifWlmKHo9PT1GYi5ISUdITElHSFQpe2NvbnN0IEs9di5hcHBlbmQoInJlY3QiKTtLLmF0dHIoIngiLGotMTApLEsuYXR0cigieSIsQi0xMCksSy5hdHRyKCJoZWlnaHQiLDIwKSxLLmF0dHIoIndpZHRoIiwyMCksSy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9IGNvbW1pdC1oaWdobGlnaHQke1ExW04uYnJhbmNoXS5pbmRleCV4VH0gJHtSfS1vdXRlcmApLHYuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsai02KS5hdHRyKCJ5IixCLTYpLmF0dHIoImhlaWdodCIsMTIpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtOLmlkfSBjb21taXQke1ExW04uYnJhbmNoXS5pbmRleCV4VH0gJHtSfS1pbm5lcmApfWVsc2UgaWYoej09PUZiLkNIRVJSWV9QSUNLKXYuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsaikuYXR0cigiY3kiLEIpLmF0dHIoInIiLDEwKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9ICR7Un1gKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGotMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9ICR7Un1gKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGorMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9ICR7Un1gKSx2LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixqKzMpLmF0dHIoInkxIixCKzEpLmF0dHIoIngyIixqKS5hdHRyKCJ5MiIsQi01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtOLmlkfSAke1J9YCksdi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsai0zKS5hdHRyKCJ5MSIsQisxKS5hdHRyKCJ4MiIsaikuYXR0cigieTIiLEItNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ti5pZH0gJHtSfWApO2Vsc2V7Y29uc3QgSz12LmFwcGVuZCgiY2lyY2xlIik7aWYoSy5hdHRyKCJjeCIsaiksSy5hdHRyKCJjeSIsQiksSy5hdHRyKCJyIixOLnR5cGU9PT1GYi5NRVJHRT85OjEwKSxLLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ti5pZH0gY29tbWl0JHtRMVtOLmJyYW5jaF0uaW5kZXgleFR9YCksej09PUZiLk1FUkdFKXtjb25zdCBpdD12LmFwcGVuZCgiY2lyY2xlIik7aXQuYXR0cigiY3giLGopLGl0LmF0dHIoImN5IixCKSxpdC5hdHRyKCJyIiw2KSxpdC5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1J9ICR7Ti5pZH0gY29tbWl0JHtRMVtOLmJyYW5jaF0uaW5kZXgleFR9YCl9ej09PUZiLlJFVkVSU0UmJnYuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtqLTV9LCR7Qi01fUwke2orNX0sJHtCKzV9TSR7ai01fSwke0IrNX1MJHtqKzV9LCR7Qi01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Un0gJHtOLmlkfSBjb21taXQke1ExW04uYnJhbmNoXS5pbmRleCV4VH1gKX19aWYoeTA9PT0iVEIiP1RQW04uaWRdPXt4OmoseTpiKzEwfTpUUFtOLmlkXT17eDpiKzEwLHk6Qn0sZil7aWYoTi50eXBlIT09RmIuQ0hFUlJZX1BJQ0smJihOLmN1c3RvbUlkJiZOLnR5cGU9PT1GYi5NRVJHRXx8Ti50eXBlIT09RmIuTUVSR0UpJiZwLnNob3dDb21taXRMYWJlbCl7Y29uc3QgSz1tLmFwcGVuZCgiZyIpLGl0PUsuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwtYmtnIiksc3Q9Sy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixCKzI1KS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbCIpLnRleHQoTi5pZCk7bGV0IHV0PXN0Lm5vZGUoKS5nZXRCQm94KCk7aWYoaXQuYXR0cigieCIsYisxMC11dC53aWR0aC8yLTIpLmF0dHIoInkiLEIrMTMuNSkuYXR0cigid2lkdGgiLHV0LndpZHRoKzIqMikuYXR0cigiaGVpZ2h0Iix1dC5oZWlnaHQrMioyKSx5MD09PSJUQiImJihpdC5hdHRyKCJ4IixqLSh1dC53aWR0aCs0KjQrNSkpLmF0dHIoInkiLEItMTIpLHN0LmF0dHIoIngiLGotKHV0LndpZHRoKzQqNCkpLmF0dHIoInkiLEIrdXQuaGVpZ2h0LTEyKSkseTAhPT0iVEIiJiZzdC5hdHRyKCJ4IixiKzEwLXV0LndpZHRoLzIpLHAucm90YXRlQ29tbWl0TGFiZWwpaWYoeTA9PT0iVEIiKXN0LmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIraisiLCAiK0IrIikiKSxpdC5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK2orIiwgIitCKyIpIik7ZWxzZXtsZXQgYnQ9LTcuNS0odXQud2lkdGgrMTApLzI1KjkuNSxtdD0xMCt1dC53aWR0aC8yNSo4LjU7Sy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitidCsiLCAiK210KyIpIHJvdGF0ZSgtNDUsICIrYisiLCAiK0IrIikiKX19aWYoTi50YWcpe2NvbnN0IEs9bS5pbnNlcnQoInBvbHlnb24iKSxpdD1tLmFwcGVuZCgiY2lyY2xlIiksc3Q9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixCLTE2KS5hdHRyKCJjbGFzcyIsInRhZy1sYWJlbCIpLnRleHQoTi50YWcpO2xldCB1dD1zdC5ub2RlKCkuZ2V0QkJveCgpO3N0LmF0dHIoIngiLGIrMTAtdXQud2lkdGgvMik7Y29uc3QgYnQ9dXQuaGVpZ2h0LzIsbXQ9Qi0xOS4yO0suYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAke2ItdXQud2lkdGgvMi00LzJ9LCR7bXQrMn0KICAgICAgICAgICR7Yi11dC53aWR0aC8yLTQvMn0sJHttdC0yfQogICAgICAgICAgJHtiKzEwLXV0LndpZHRoLzItNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK3V0LndpZHRoLzIrNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK3V0LndpZHRoLzIrNH0sJHttdCtidCsyfQogICAgICAgICAgJHtiKzEwLXV0LndpZHRoLzItNH0sJHttdCtidCsyfWApLGl0LmF0dHIoImN4IixiLXV0LndpZHRoLzIrNC8yKS5hdHRyKCJjeSIsbXQpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpLHkwPT09IlRCIiYmKEsuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAgICR7an0sJHtiKzJ9CiAgICAgICAgICAgICR7an0sJHtiLTJ9CiAgICAgICAgICAgICR7aisxMH0sJHtiLWJ0LTJ9CiAgICAgICAgICAgICR7aisxMCt1dC53aWR0aCs0fSwke2ItYnQtMn0KICAgICAgICAgICAgJHtqKzEwK3V0LndpZHRoKzR9LCR7YitidCsyfQogICAgICAgICAgICAke2orMTB9LCR7YitidCsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2orIiwiK2IrIikiKSxpdC5hdHRyKCJjeCIsais0LzIpLmF0dHIoImN5IixiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIitqKyIsIitiKyIpIiksc3QuYXR0cigieCIsais1KS5hdHRyKCJ5IixiKzMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNCwxNCkgcm90YXRlKDQ1LCAiK2orIiwiK2IrIikiKSl9fWIrPTUwLGI+Q1AmJihDUD1iKX0pfSxTemU9KGksYSxmKT0+T2JqZWN0LmtleXMoZikuZmlsdGVyKG09PmZbbV0uYnJhbmNoPT09YS5icmFuY2gmJmZbbV0uc2VxPmkuc2VxJiZmW21dLnNlcTxhLnNlcSkubGVuZ3RoPjAsX1A9KGksYSxmPTApPT57Y29uc3QgcD1pK01hdGguYWJzKGktYSkvMjtpZihmPjUpcmV0dXJuIHA7aWYoeEsuZXZlcnkoYj0+TWF0aC5hYnMoYi1wKT49MTApKXJldHVybiB4Sy5wdXNoKHApLHA7Y29uc3QgbT1NYXRoLmFicyhpLWEpO3JldHVybiBfUChpLGEtbS81LGYrMSl9LEF6ZT0oaSxhLGYscCk9Pntjb25zdCB2PVRQW2EuaWRdLG09VFBbZi5pZF0sYj1TemUoYSxmLHApO2xldCBFPSIiLF89IiIsTD0wLE49MCxCPVExW2YuYnJhbmNoXS5pbmRleCxqO2lmKGIpe0U9IkEgMTAgMTAsIDAsIDAsIDAsIixfPSJBIDEwIDEwLCAwLCAwLCAxLCIsTD0xMCxOPTEwLEI9UTFbZi5icmFuY2hdLmluZGV4O2NvbnN0IFI9di55PG0ueT9fUCh2LnksbS55KTpfUChtLnksdi55KSx6PXYueDxtLng/X1Aodi54LG0ueCk6X1AobS54LHYueCk7eTA9PT0iVEIiP3YueDxtLng/aj1gTSAke3YueH0gJHt2Lnl9IEwgJHt6LUx9ICR7di55fSAke199ICR7en0gJHt2LnkrTn0gTCAke3p9ICR7bS55LUx9ICR7RX0gJHt6K059ICR7bS55fSBMICR7bS54fSAke20ueX1gOmo9YE0gJHt2Lnh9ICR7di55fSBMICR7eitMfSAke3YueX0gJHtFfSAke3p9ICR7di55K059IEwgJHt6fSAke20ueS1MfSAke199ICR7ei1OfSAke20ueX0gTCAke20ueH0gJHttLnl9YDp2Lnk8bS55P2o9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke1ItTH0gJHtFfSAke3YueCtOfSAke1J9IEwgJHttLngtTH0gJHtSfSAke199ICR7bS54fSAke1IrTn0gTCAke20ueH0gJHttLnl9YDpqPWBNICR7di54fSAke3YueX0gTCAke3YueH0gJHtSK0x9ICR7X30gJHt2LngrTn0gJHtSfSBMICR7bS54LUx9ICR7Un0gJHtFfSAke20ueH0gJHtSLU59IEwgJHttLnh9ICR7bS55fWB9ZWxzZSB5MD09PSJUQiI/KHYueDxtLngmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsXz0iQSAyMCAyMCwgMCwgMCwgMSwiLEw9MjAsTj0yMCxCPVExW2YuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke20ueC1MfSAke3YueX0gJHtffSAke20ueH0gJHt2LnkrTn0gTCAke20ueH0gJHttLnl9YCksdi54Pm0ueCYmKEU9IkEgMjAgMjAsIDAsIDAsIDAsIixfPSJBIDIwIDIwLCAwLCAwLCAxLCIsTD0yMCxOPTIwLEI9UTFbYS5icmFuY2hdLmluZGV4LGo9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke20ueS1MfSAke199ICR7di54LU59ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx2Lng9PT1tLngmJihCPVExW2EuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke3YueCtMfSAke3YueX0gJHtFfSAke3YueCtOfSAke20ueStMfSBMICR7bS54fSAke20ueX1gKSk6KHYueTxtLnkmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsTD0yMCxOPTIwLEI9UTFbZi5icmFuY2hdLmluZGV4LGo9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke20ueS1MfSAke0V9ICR7di54K059ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx2Lnk+bS55JiYoRT0iQSAyMCAyMCwgMCwgMCwgMCwiLEw9MjAsTj0yMCxCPVExW2EuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke20ueC1MfSAke3YueX0gJHtFfSAke20ueH0gJHt2LnktTn0gTCAke20ueH0gJHttLnl9YCksdi55PT09bS55JiYoQj1RMVthLmJyYW5jaF0uaW5kZXgsaj1gTSAke3YueH0gJHt2Lnl9IEwgJHt2Lnh9ICR7bS55LUx9ICR7RX0gJHt2LngrTn0gJHttLnl9IEwgJHttLnh9ICR7bS55fWApKTtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGopLmF0dHIoImNsYXNzIiwiYXJyb3cgYXJyb3ciK0IleFQpfSxMemU9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYXJyb3dzIik7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChwPT57Y29uc3Qgdj1hW3BdO3YucGFyZW50cyYmdi5wYXJlbnRzLmxlbmd0aD4wJiZ2LnBhcmVudHMuZm9yRWFjaChtPT57QXplKGYsYVttXSx2LGEpfSl9KX0sTXplPShpLGEpPT57Y29uc3QgZj1KTigpLmdpdEdyYXBoLHA9aS5hcHBlbmQoImciKTthLmZvckVhY2goKHYsbSk9Pntjb25zdCBiPW0leFQsRT1RMVt2Lm5hbWVdLnBvcyxfPXAuYXBwZW5kKCJsaW5lIik7Xy5hdHRyKCJ4MSIsMCksXy5hdHRyKCJ5MSIsRSksXy5hdHRyKCJ4MiIsQ1ApLF8uYXR0cigieTIiLEUpLF8uYXR0cigiY2xhc3MiLCJicmFuY2ggYnJhbmNoIitiKSx5MD09PSJUQiImJihfLmF0dHIoInkxIiwzMCksXy5hdHRyKCJ4MSIsRSksXy5hdHRyKCJ5MiIsQ1ApLF8uYXR0cigieDIiLEUpKSx4Sy5wdXNoKEUpO2xldCBMPXYubmFtZTtjb25zdCBOPXFCdChMKSxCPXAuaW5zZXJ0KCJyZWN0IiksUj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYik7Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoTik7bGV0IHo9Ti5nZXRCQm94KCk7Qi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIitiKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC16LndpZHRoLTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkuYXR0cigieSIsLXouaGVpZ2h0LzIrOCkuYXR0cigid2lkdGgiLHoud2lkdGgrMTgpLmF0dHIoImhlaWdodCIsei5oZWlnaHQrNCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoLXoud2lkdGgtMTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkrIiwgIisoRS16LmhlaWdodC8yLTEpKyIpIikseTA9PT0iVEIiJiYoQi5hdHRyKCJ4IixFLXoud2lkdGgvMi0xMCkuYXR0cigieSIsMCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRS16LndpZHRoLzItNSkrIiwgMCkiKSkseTAhPT0iVEIiJiZCLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKEUtei5oZWlnaHQvMikrIikiKX0pfSxJemU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvemUsZGI6Q3plLHJlbmRlcmVyOntkcmF3OmZ1bmN0aW9uKGksYSxmLHApe196ZSgpO2NvbnN0IHY9Sk4oKSxtPXYuZ2l0R3JhcGg7VXQuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIixpK2AKYCwiaWQ6IixhLGYpLEVQPXAuZGIuZ2V0Q29tbWl0cygpO2NvbnN0IGI9cC5kYi5nZXRCcmFuY2hlc0FzT2JqQXJyYXkoKTt5MD1wLmRiLmdldERpcmVjdGlvbigpO2NvbnN0IEU9eXIoYFtpZD0iJHthfSJdYCk7bGV0IF89MDtiLmZvckVhY2goKEwsTik9Pntjb25zdCBCPXFCdChMLm5hbWUpLGo9RS5hcHBlbmQoImciKSxSPWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLHo9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIpO3oubm9kZSgpLmFwcGVuZENoaWxkKEIpO2xldCBLPUIuZ2V0QkJveCgpO1ExW0wubmFtZV09e3BvczpfLGluZGV4Ok59LF8rPTUwKyhtLnJvdGF0ZUNvbW1pdExhYmVsPzQwOjApKyh5MD09PSJUQiI/Sy53aWR0aC8yOjApLHoucmVtb3ZlKCksUi5yZW1vdmUoKSxqLnJlbW92ZSgpfSksSEJ0KEUsRVAsITEpLG0uc2hvd0JyYW5jaGVzJiZNemUoRSxiKSxMemUoRSxFUCksSEJ0KEUsRVAsITApLCRhLmluc2VydFRpdGxlKEUsImdpdFRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxNT3Qodm9pZCAwLEUsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoPz92LnVzZU1heFdpZHRoKX19LHN0eWxlczppPT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChhPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7YX0geyBmaWxsOiAke2lbImdpdEJyYW5jaExhYmVsIithXX07IH0KICAgICAgICAuY29tbWl0JHthfSB7IHN0cm9rZTogJHtpWyJnaXQiK2FdfTsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHthfSB7IHN0cm9rZTogJHtpWyJnaXRJbnYiK2FdfTsgZmlsbDogJHtpWyJnaXRJbnYiK2FdfTsgfQogICAgICAgIC5sYWJlbCR7YX0gIHsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5hcnJvdyR7YX0geyBzdHJva2U6ICR7aVsiZ2l0IithXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7aS5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtpLmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke2kudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHtpLnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHtpLnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7aS50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHtpLnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke2kucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFIwdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFUseHQsbnQsT3Qpe2ZvcihudD1udHx8e30sT3Q9VS5sZW5ndGg7T3QtLTtudFtVW090XV09eHQpO3JldHVybiBudH0sYT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwLDMyLDMzLDM1LDM3XSxmPVsxLDI1XSxwPVsxLDI2XSx2PVsxLDI3XSxtPVsxLDI4XSxiPVsxLDI5XSxFPVsxLDMwXSxfPVsxLDMxXSxMPVsxLDldLE49WzEsMTBdLEI9WzEsMTFdLGo9WzEsMTJdLFI9WzEsMTNdLHo9WzEsMTRdLEs9WzEsMTVdLGl0PVsxLDE2XSxzdD1bMSwxOF0sdXQ9WzEsMTldLGJ0PVsxLDIwXSxtdD1bMSwyMV0seXQ9WzEsMjJdLGR0PVsxLDI0XSxodD1bMSwzMl0sd3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdhbnR0OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxOTDoxMCx3ZWVrZGF5OjExLHdlZWtkYXlfbW9uZGF5OjEyLHdlZWtkYXlfdHVlc2RheToxMyx3ZWVrZGF5X3dlZG5lc2RheToxNCx3ZWVrZGF5X3RodXJzZGF5OjE1LHdlZWtkYXlfZnJpZGF5OjE2LHdlZWtkYXlfc2F0dXJkYXk6MTcsd2Vla2RheV9zdW5kYXk6MTgsZGF0ZUZvcm1hdDoxOSxpbmNsdXNpdmVFbmREYXRlczoyMCx0b3BBeGlzOjIxLGF4aXNGb3JtYXQ6MjIsdGlja0ludGVydmFsOjIzLGV4Y2x1ZGVzOjI0LGluY2x1ZGVzOjI1LHRvZGF5TWFya2VyOjI2LHRpdGxlOjI3LGFjY190aXRsZToyOCxhY2NfdGl0bGVfdmFsdWU6MjksYWNjX2Rlc2NyOjMwLGFjY19kZXNjcl92YWx1ZTozMSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMyLHNlY3Rpb246MzMsY2xpY2tTdGF0ZW1lbnQ6MzQsdGFza1R4dDozNSx0YXNrRGF0YTozNixjbGljazozNyxjYWxsYmFja25hbWU6MzgsY2FsbGJhY2thcmdzOjM5LGhyZWY6NDAsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDE5OiJkYXRlRm9ybWF0IiwyMDoiaW5jbHVzaXZlRW5kRGF0ZXMiLDIxOiJ0b3BBeGlzIiwyMjoiYXhpc0Zvcm1hdCIsMjM6InRpY2tJbnRlcnZhbCIsMjQ6ImV4Y2x1ZGVzIiwyNToiaW5jbHVkZXMiLDI2OiJ0b2RheU1hcmtlciIsMjc6InRpdGxlIiwyODoiYWNjX3RpdGxlIiwyOToiYWNjX3RpdGxlX3ZhbHVlIiwzMDoiYWNjX2Rlc2NyIiwzMToiYWNjX2Rlc2NyX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6InNlY3Rpb24iLDM1OiJ0YXNrVHh0IiwzNjoidGFza0RhdGEiLDM3OiJjbGljayIsMzg6ImNhbGxiYWNrbmFtZSIsMzk6ImNhbGxiYWNrYXJncyIsNDA6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFszNCwyXSxbMzQsM10sWzM0LDNdLFszNCw0XSxbMzQsM10sWzM0LDRdLFszNCwyXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsNF0sWzQxLDNdLFs0MSw0XSxbNDEsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oeHQsbnQsT3QsTnQscXQsQ3QsWil7dmFyIFR0PUN0Lmxlbmd0aC0xO3N3aXRjaChxdCl7Y2FzZSAxOnJldHVybiBDdFtUdC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpDdFtUdC0xXS5wdXNoKEN0W1R0XSksdGhpcy4kPUN0W1R0LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUN0W1R0XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6TnQuc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSA5Ok50LnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOk50LnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6TnQuc2V0V2Vla2RheSgidGh1cnNkYXkiKTticmVhaztjYXNlIDEyOk50LnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6TnQuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0Ok50LnNldFdlZWtkYXkoInN1bmRheSIpO2JyZWFrO2Nhc2UgMTU6TnQuc2V0RGF0ZUZvcm1hdChDdFtUdF0uc3Vic3RyKDExKSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTY6TnQuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9Q3RbVHRdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxNzpOdC5Ub3BBeGlzKCksdGhpcy4kPUN0W1R0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxODpOdC5zZXRBeGlzRm9ybWF0KEN0W1R0XS5zdWJzdHIoMTEpKSx0aGlzLiQ9Q3RbVHRdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxOTpOdC5zZXRUaWNrSW50ZXJ2YWwoQ3RbVHRdLnN1YnN0cigxMykpLHRoaXMuJD1DdFtUdF0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIwOk50LnNldEV4Y2x1ZGVzKEN0W1R0XS5zdWJzdHIoOSkpLHRoaXMuJD1DdFtUdF0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjE6TnQuc2V0SW5jbHVkZXMoQ3RbVHRdLnN1YnN0cig5KSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAyMjpOdC5zZXRUb2RheU1hcmtlcihDdFtUdF0uc3Vic3RyKDEyKSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjQ6TnQuc2V0RGlhZ3JhbVRpdGxlKEN0W1R0XS5zdWJzdHIoNikpLHRoaXMuJD1DdFtUdF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUN0W1R0XS50cmltKCksTnQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPUN0W1R0XS50cmltKCksTnQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI4Ok50LmFkZFNlY3Rpb24oQ3RbVHRdLnN1YnN0cig4KSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAzMDpOdC5hZGRUYXNrKEN0W1R0LTFdLEN0W1R0XSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDMxOnRoaXMuJD1DdFtUdC0xXSxOdC5zZXRDbGlja0V2ZW50KEN0W1R0LTFdLEN0W1R0XSxudWxsKTticmVhaztjYXNlIDMyOnRoaXMuJD1DdFtUdC0yXSxOdC5zZXRDbGlja0V2ZW50KEN0W1R0LTJdLEN0W1R0LTFdLEN0W1R0XSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9Q3RbVHQtMl0sTnQuc2V0Q2xpY2tFdmVudChDdFtUdC0yXSxDdFtUdC0xXSxudWxsKSxOdC5zZXRMaW5rKEN0W1R0LTJdLEN0W1R0XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9Q3RbVHQtM10sTnQuc2V0Q2xpY2tFdmVudChDdFtUdC0zXSxDdFtUdC0yXSxDdFtUdC0xXSksTnQuc2V0TGluayhDdFtUdC0zXSxDdFtUdF0pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUN0W1R0LTJdLE50LnNldENsaWNrRXZlbnQoQ3RbVHQtMl0sQ3RbVHRdLG51bGwpLE50LnNldExpbmsoQ3RbVHQtMl0sQ3RbVHQtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUN0W1R0LTNdLE50LnNldENsaWNrRXZlbnQoQ3RbVHQtM10sQ3RbVHQtMV0sQ3RbVHRdKSxOdC5zZXRMaW5rKEN0W1R0LTNdLEN0W1R0LTJdKTticmVhaztjYXNlIDM3OnRoaXMuJD1DdFtUdC0xXSxOdC5zZXRMaW5rKEN0W1R0LTFdLEN0W1R0XSk7YnJlYWs7Y2FzZSAzODpjYXNlIDQ0OnRoaXMuJD1DdFtUdC0xXSsiICIrQ3RbVHRdO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpjYXNlIDQyOnRoaXMuJD1DdFtUdC0yXSsiICIrQ3RbVHQtMV0rIiAiK0N0W1R0XTticmVhaztjYXNlIDQxOmNhc2UgNDM6dGhpcy4kPUN0W1R0LTNdKyIgIitDdFtUdC0yXSsiICIrQ3RbVHQtMV0rIiAiK0N0W1R0XTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6ZiwxMzpwLDE0OnYsMTU6bSwxNjpiLDE3OkUsMTg6XywxOTpMLDIwOk4sMjE6QiwyMjpqLDIzOlIsMjQ6eiwyNTpLLDI2Oml0LDI3OnN0LDI4OnV0LDMwOmJ0LDMyOm10LDMzOnl0LDM0OjIzLDM1OmR0LDM3Omh0fSxpKGEsWzIsN10sezE6WzIsMV19KSxpKGEsWzIsM10pLHs5OjMzLDExOjE3LDEyOmYsMTM6cCwxNDp2LDE1Om0sMTY6YiwxNzpFLDE4Ol8sMTk6TCwyMDpOLDIxOkIsMjI6aiwyMzpSLDI0OnosMjU6SywyNjppdCwyNzpzdCwyODp1dCwzMDpidCwzMjptdCwzMzp5dCwzNDoyMywzNTpkdCwzNzpodH0saShhLFsyLDVdKSxpKGEsWzIsNl0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLGkoYSxbMiwxOF0pLGkoYSxbMiwxOV0pLGkoYSxbMiwyMF0pLGkoYSxbMiwyMV0pLGkoYSxbMiwyMl0pLGkoYSxbMiwyM10pLGkoYSxbMiwyNF0pLHsyOTpbMSwzNF19LHszMTpbMSwzNV19LGkoYSxbMiwyN10pLGkoYSxbMiwyOF0pLGkoYSxbMiwyOV0pLHszNjpbMSwzNl19LGkoYSxbMiw4XSksaShhLFsyLDldKSxpKGEsWzIsMTBdKSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSxpKGEsWzIsMTNdKSxpKGEsWzIsMTRdKSx7Mzg6WzEsMzddLDQwOlsxLDM4XX0saShhLFsyLDRdKSxpKGEsWzIsMjVdKSxpKGEsWzIsMjZdKSxpKGEsWzIsMzBdKSxpKGEsWzIsMzFdLHszOTpbMSwzOV0sNDA6WzEsNDBdfSksaShhLFsyLDM3XSx7Mzg6WzEsNDFdfSksaShhLFsyLDMyXSx7NDA6WzEsNDJdfSksaShhLFsyLDMzXSksaShhLFsyLDM1XSx7Mzk6WzEsNDNdfSksaShhLFsyLDM0XSksaShhLFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oeHQsbnQpe2lmKG50LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoeHQpO2Vsc2V7dmFyIE90PW5ldyBFcnJvcih4dCk7dGhyb3cgT3QuaGFzaD1udCxPdH19LHBhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgbnQ9dGhpcyxPdD1bMF0sTnQ9W10scXQ9W251bGxdLEN0PVtdLFo9dGhpcy50YWJsZSxUdD0iIixIdD0wLEl0PTAsRnQ9MixrZT0xLHBuPUN0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLE1lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksdmU9e3l5Ont9fTtmb3IodmFyIEdlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksR2UpJiYodmUueXlbR2VdPXRoaXMueXlbR2VdKTtNZS5zZXRJbnB1dCh4dCx2ZS55eSksdmUueXkubGV4ZXI9TWUsdmUueXkucGFyc2VyPXRoaXMsdHlwZW9mIE1lLnl5bGxvYz4idSImJihNZS55eWxsb2M9e30pO3ZhciBLZT1NZS55eWxsb2M7Q3QucHVzaChLZSk7dmFyIHdlPU1lLm9wdGlvbnMmJk1lLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiB2ZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj12ZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBfZSgpe3ZhciBkYTtyZXR1cm4gZGE9TnQucG9wKCl8fE1lLmxleCgpfHxrZSx0eXBlb2YgZGEhPSJudW1iZXIiJiYoZGEgaW5zdGFuY2VvZiBBcnJheSYmKE50PWRhLGRhPU50LnBvcCgpKSxkYT1udC5zeW1ib2xzX1tkYV18fGRhKSxkYX1mb3IodmFyICR0LHJlLGllLE9lLG9lPXt9LE5lLG1lLGNuLGxpOzspe2lmKHJlPU90W090Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3JlXT9pZT10aGlzLmRlZmF1bHRBY3Rpb25zW3JlXTooKCR0PT09bnVsbHx8dHlwZW9mICR0PiJ1IikmJigkdD1fZSgpKSxpZT1aW3JlXSYmWltyZV1bJHRdKSx0eXBlb2YgaWU+InUifHwhaWUubGVuZ3RofHwhaWVbMF0pe3ZhciB5YT0iIjtsaT1bXTtmb3IoTmUgaW4gWltyZV0pdGhpcy50ZXJtaW5hbHNfW05lXSYmTmU+RnQmJmxpLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tOZV0rIiciKTtNZS5zaG93UG9zaXRpb24/eWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoSHQrMSkrYDoKYCtNZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2xpLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bJHRdfHwkdCkrIiciOnlhPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEh0KzEpKyI6IFVuZXhwZWN0ZWQgIisoJHQ9PWtlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfWyR0XXx8JHQpKyInIiksdGhpcy5wYXJzZUVycm9yKHlhLHt0ZXh0Ok1lLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1skdF18fCR0LGxpbmU6TWUueXlsaW5lbm8sbG9jOktlLGV4cGVjdGVkOmxpfSl9aWYoaWVbMF1pbnN0YW5jZW9mIEFycmF5JiZpZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3JlKyIsIHRva2VuOiAiKyR0KTtzd2l0Y2goaWVbMF0pe2Nhc2UgMTpPdC5wdXNoKCR0KSxxdC5wdXNoKE1lLnl5dGV4dCksQ3QucHVzaChNZS55eWxsb2MpLE90LnB1c2goaWVbMV0pLCR0PW51bGwsSXQ9TWUueXlsZW5nLFR0PU1lLnl5dGV4dCxIdD1NZS55eWxpbmVubyxLZT1NZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKG1lPXRoaXMucHJvZHVjdGlvbnNfW2llWzFdXVsxXSxvZS4kPXF0W3F0Lmxlbmd0aC1tZV0sb2UuXyQ9e2ZpcnN0X2xpbmU6Q3RbQ3QubGVuZ3RoLShtZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkN0W0N0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkN0W0N0Lmxlbmd0aC0obWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Q3RbQ3QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx3ZSYmKG9lLl8kLnJhbmdlPVtDdFtDdC5sZW5ndGgtKG1lfHwxKV0ucmFuZ2VbMF0sQ3RbQ3QubGVuZ3RoLTFdLnJhbmdlWzFdXSksT2U9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG9lLFtUdCxJdCxIdCx2ZS55eSxpZVsxXSxxdCxDdF0uY29uY2F0KHBuKSksdHlwZW9mIE9lPCJ1IilyZXR1cm4gT2U7bWUmJihPdD1PdC5zbGljZSgwLC0xKm1lKjIpLHF0PXF0LnNsaWNlKDAsLTEqbWUpLEN0PUN0LnNsaWNlKDAsLTEqbWUpKSxPdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2llWzFdXVswXSkscXQucHVzaChvZS4kKSxDdC5wdXNoKG9lLl8kKSxjbj1aW090W090Lmxlbmd0aC0yXV1bT3RbT3QubGVuZ3RoLTFdXSxPdC5wdXNoKGNuKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBVPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKG50LE90KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKG50LE90KTtlbHNlIHRocm93IG5ldyBFcnJvcihudCl9LHNldElucHV0OmZ1bmN0aW9uKHh0LG50KXtyZXR1cm4gdGhpcy55eT1udHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9eHQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHh0PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz14dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9eHQsdGhpcy5tYXRjaGVkKz14dDt2YXIgbnQ9eHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBudD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSkseHR9LHVucHV0OmZ1bmN0aW9uKHh0KXt2YXIgbnQ9eHQubGVuZ3RoLE90PXh0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9eHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW50KSx0aGlzLm9mZnNldC09bnQ7dmFyIE50PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLE90Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09T3QubGVuZ3RoLTEpO3ZhciBxdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46T3Q/KE90Lmxlbmd0aD09PU50Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrTnRbTnQubGVuZ3RoLU90Lmxlbmd0aF0ubGVuZ3RoLU90WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbnR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcXRbMF0scXRbMF0rdGhpcy55eWxlbmctbnRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbih4dCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB4dD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHh0Lmxlbmd0aD4yMD8iLi4uIjoiIikreHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeHQ9dGhpcy5tYXRjaDtyZXR1cm4geHQubGVuZ3RoPDIwJiYoeHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXh0Lmxlbmd0aCkpLCh4dC5zdWJzdHIoMCwyMCkrKHh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgeHQ9dGhpcy5wYXN0SW5wdXQoKSxudD1uZXcgQXJyYXkoeHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4geHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK250KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih4dCxudCl7dmFyIE90LE50LHF0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihxdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihxdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxOdD14dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksTnQmJih0aGlzLnl5bGluZW5vKz1OdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpOdD9OdFtOdC5sZW5ndGgtMV0ubGVuZ3RoLU50W050Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3h0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXh0WzBdLHRoaXMubWF0Y2grPXh0WzBdLHRoaXMubWF0Y2hlcz14dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh4dFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9eHRbMF0sT3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbnQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksT3QpcmV0dXJuIE90O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBDdCBpbiBxdCl0aGlzW0N0XT1xdFtDdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeHQsbnQsT3QsTnQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgcXQ9dGhpcy5fY3VycmVudFJ1bGVzKCksQ3Q9MDtDdDxxdC5sZW5ndGg7Q3QrKylpZihPdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3F0W0N0XV0pLE90JiYoIW50fHxPdFswXS5sZW5ndGg+bnRbMF0ubGVuZ3RoKSl7aWYobnQ9T3QsTnQ9Q3QsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeHQ9dGhpcy50ZXN0X21hdGNoKE90LHF0W0N0XSkseHQhPT0hMSlyZXR1cm4geHQ7aWYodGhpcy5fYmFja3RyYWNrKXtudD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBudD8oeHQ9dGhpcy50ZXN0X21hdGNoKG50LHF0W050XSkseHQhPT0hMT94dDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMubmV4dCgpO3JldHVybiBudHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24obnQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChudCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG50PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24obnQpe3JldHVybiBudD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG50fHwwKSxudD49MD90aGlzLmNvbmRpdGlvblN0YWNrW250XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihudCl7dGhpcy5iZWdpbihudCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obnQsT3QsTnQscXQpe3N3aXRjaChOdCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLCJvcGVuX2RpcmVjdGl2ZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyODtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMwO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiA0MDtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDM5O2Nhc2UgMjQ6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnJldHVybiAzNztjYXNlIDI3OnJldHVybiA0O2Nhc2UgMjg6cmV0dXJuIDE5O2Nhc2UgMjk6cmV0dXJuIDIwO2Nhc2UgMzA6cmV0dXJuIDIxO2Nhc2UgMzE6cmV0dXJuIDIyO2Nhc2UgMzI6cmV0dXJuIDIzO2Nhc2UgMzM6cmV0dXJuIDI1O2Nhc2UgMzQ6cmV0dXJuIDI0O2Nhc2UgMzU6cmV0dXJuIDI2O2Nhc2UgMzY6cmV0dXJuIDEyO2Nhc2UgMzc6cmV0dXJuIDEzO2Nhc2UgMzg6cmV0dXJuIDE0O2Nhc2UgMzk6cmV0dXJuIDE1O2Nhc2UgNDA6cmV0dXJuIDE2O2Nhc2UgNDE6cmV0dXJuIDE3O2Nhc2UgNDI6cmV0dXJuIDE4O2Nhc2UgNDM6cmV0dXJuImRhdGUiO2Nhc2UgNDQ6cmV0dXJuIDI3O2Nhc2UgNDU6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiAzNTtjYXNlIDQ4OnJldHVybiAzNjtjYXNlIDQ5OnJldHVybiI6IjtjYXNlIDUwOnJldHVybiA2O2Nhc2UgNTE6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/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/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTksMjAsMjFdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE2LDE3XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE4LDI0LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFV9KCk7d3QubGV4ZXI9WDtmdW5jdGlvbiBwdCgpe3RoaXMueXk9e319cmV0dXJuIHB0LnByb3RvdHlwZT13dCx3dC5QYXJzZXI9cHQsbmV3IHB0fSgpO1IwdC5wYXJzZXI9UjB0O2NvbnN0IER6ZT1SMHQ7dmFyIEdCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7dmFyIGY9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1mdW5jdGlvbihMKXtyZXR1cm4gTC5hZGQoNC1MLmlzb1dlZWtkYXkoKSxmKX0sRT12LnByb3RvdHlwZTtFLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcykueWVhcigpfSxFLmlzb1dlZWs9ZnVuY3Rpb24oTCl7aWYoIXRoaXMuJHV0aWxzKCkudShMKSlyZXR1cm4gdGhpcy5hZGQoNyooTC10aGlzLmlzb1dlZWsoKSksZik7dmFyIE4sQixqLFIsej1iKHRoaXMpLEs9KE49dGhpcy5pc29XZWVrWWVhcigpLEI9dGhpcy4kdSxqPShCP20udXRjOm0pKCkueWVhcihOKS5zdGFydE9mKCJ5ZWFyIiksUj00LWouaXNvV2Vla2RheSgpLGouaXNvV2Vla2RheSgpPjQmJihSKz03KSxqLmFkZChSLGYpKTtyZXR1cm4gei5kaWZmKEssIndlZWsiKSsxfSxFLmlzb1dlZWtkYXk9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuJHV0aWxzKCkudShMKT90aGlzLmRheSgpfHw3OnRoaXMuZGF5KHRoaXMuZGF5KCklNz9MOkwtNyl9O3ZhciBfPUUuc3RhcnRPZjtFLnN0YXJ0T2Y9ZnVuY3Rpb24oTCxOKXt2YXIgQj10aGlzLiR1dGlscygpLGo9ISFCLnUoTil8fE47cmV0dXJuIEIucChMKT09PSJpc293ZWVrIj9qP3RoaXMuZGF0ZSh0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpLnN0YXJ0T2YoImRheSIpOnRoaXMuZGF0ZSh0aGlzLmRhdGUoKS0xLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS5lbmRPZigiZGF5Iik6Xy5iaW5kKHRoaXMpKEwsTil9fX0pfSkoR0J0KTt2YXIgT3plPUdCdC5leHBvcnRzO2NvbnN0IE56ZT1CNyhPemUpO3ZhciBWQnQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihmLHApe2kuZXhwb3J0cz1wKCl9KShkMCxmdW5jdGlvbigpe3ZhciBmPXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0scD0vKFxbW15bXSpcXSl8KFstXzovLiwoKVxzXSspfChBfGF8WVlZWXxZWT98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyx2PS9cZFxkLyxtPS9cZFxkPy8sYj0vXGQqW14tXzovLCgpXHNcZF0rLyxFPXt9LF89ZnVuY3Rpb24oSyl7cmV0dXJuKEs9K0spKyhLPjY4PzE5MDA6MmUzKX0sTD1mdW5jdGlvbihLKXtyZXR1cm4gZnVuY3Rpb24oaXQpe3RoaXNbS109K2l0fX0sTj1bL1srLV1cZFxkOj8oXGRcZCk/fFovLGZ1bmN0aW9uKEspeyh0aGlzLnpvbmV8fCh0aGlzLnpvbmU9e30pKS5vZmZzZXQ9ZnVuY3Rpb24oaXQpe2lmKCFpdHx8aXQ9PT0iWiIpcmV0dXJuIDA7dmFyIHN0PWl0Lm1hdGNoKC8oWystXXxcZFxkKS9nKSx1dD02MCpzdFsxXSsoK3N0WzJdfHwwKTtyZXR1cm4gdXQ9PT0wPzA6c3RbMF09PT0iKyI/LXV0OnV0fShLKX1dLEI9ZnVuY3Rpb24oSyl7dmFyIGl0PUVbS107cmV0dXJuIGl0JiYoaXQuaW5kZXhPZj9pdDppdC5zLmNvbmNhdChpdC5mKSl9LGo9ZnVuY3Rpb24oSyxpdCl7dmFyIHN0LHV0PUUubWVyaWRpZW07aWYodXQpe2Zvcih2YXIgYnQ9MTtidDw9MjQ7YnQrPTEpaWYoSy5pbmRleE9mKHV0KGJ0LDAsaXQpKT4tMSl7c3Q9YnQ+MTI7YnJlYWt9fWVsc2Ugc3Q9Sz09PShpdD8icG0iOiJQTSIpO3JldHVybiBzdH0sUj17QTpbYixmdW5jdGlvbihLKXt0aGlzLmFmdGVybm9vbj1qKEssITEpfV0sYTpbYixmdW5jdGlvbihLKXt0aGlzLmFmdGVybm9vbj1qKEssITApfV0sUzpbL1xkLyxmdW5jdGlvbihLKXt0aGlzLm1pbGxpc2Vjb25kcz0xMDAqK0t9XSxTUzpbdixmdW5jdGlvbihLKXt0aGlzLm1pbGxpc2Vjb25kcz0xMCorS31dLFNTUzpbL1xkezN9LyxmdW5jdGlvbihLKXt0aGlzLm1pbGxpc2Vjb25kcz0rS31dLHM6W20sTCgic2Vjb25kcyIpXSxzczpbbSxMKCJzZWNvbmRzIildLG06W20sTCgibWludXRlcyIpXSxtbTpbbSxMKCJtaW51dGVzIildLEg6W20sTCgiaG91cnMiKV0saDpbbSxMKCJob3VycyIpXSxISDpbbSxMKCJob3VycyIpXSxoaDpbbSxMKCJob3VycyIpXSxEOlttLEwoImRheSIpXSxERDpbdixMKCJkYXkiKV0sRG86W2IsZnVuY3Rpb24oSyl7dmFyIGl0PUUub3JkaW5hbCxzdD1LLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT1zdFswXSxpdClmb3IodmFyIHV0PTE7dXQ8PTMxO3V0Kz0xKWl0KHV0KS5yZXBsYWNlKC9cW3xcXS9nLCIiKT09PUsmJih0aGlzLmRheT11dCl9XSxNOlttLEwoIm1vbnRoIildLE1NOlt2LEwoIm1vbnRoIildLE1NTTpbYixmdW5jdGlvbihLKXt2YXIgaXQ9QigibW9udGhzIiksc3Q9KEIoIm1vbnRoc1Nob3J0Iil8fGl0Lm1hcChmdW5jdGlvbih1dCl7cmV0dXJuIHV0LnNsaWNlKDAsMyl9KSkuaW5kZXhPZihLKSsxO2lmKHN0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9c3QlMTJ8fHN0fV0sTU1NTTpbYixmdW5jdGlvbihLKXt2YXIgaXQ9QigibW9udGhzIikuaW5kZXhPZihLKSsxO2lmKGl0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9aXQlMTJ8fGl0fV0sWTpbL1srLV0/XGQrLyxMKCJ5ZWFyIildLFlZOlt2LGZ1bmN0aW9uKEspe3RoaXMueWVhcj1fKEspfV0sWVlZWTpbL1xkezR9LyxMKCJ5ZWFyIildLFo6TixaWjpOfTtmdW5jdGlvbiB6KEspe3ZhciBpdCxzdDtpdD1LLHN0PUUmJkUuZm9ybWF0cztmb3IodmFyIHV0PShLPWl0LnJlcGxhY2UoLyhcW1teXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csZnVuY3Rpb24oWCxwdCxVKXt2YXIgeHQ9VSYmVS50b1VwcGVyQ2FzZSgpO3JldHVybiBwdHx8c3RbVV18fGZbVV18fHN0W3h0XS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLGZ1bmN0aW9uKG50LE90LE50KXtyZXR1cm4gT3R8fE50LnNsaWNlKDEpfSl9KSkubWF0Y2gocCksYnQ9dXQubGVuZ3RoLG10PTA7bXQ8YnQ7bXQrPTEpe3ZhciB5dD11dFttdF0sZHQ9Ult5dF0saHQ9ZHQmJmR0WzBdLHd0PWR0JiZkdFsxXTt1dFttdF09d3Q/e3JlZ2V4Omh0LHBhcnNlcjp3dH06eXQucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oWCl7Zm9yKHZhciBwdD17fSxVPTAseHQ9MDtVPGJ0O1UrPTEpe3ZhciBudD11dFtVXTtpZih0eXBlb2YgbnQ9PSJzdHJpbmciKXh0Kz1udC5sZW5ndGg7ZWxzZXt2YXIgT3Q9bnQucmVnZXgsTnQ9bnQucGFyc2VyLHF0PVguc2xpY2UoeHQpLEN0PU90LmV4ZWMocXQpWzBdO050LmNhbGwocHQsQ3QpLFg9WC5yZXBsYWNlKEN0LCIiKX19cmV0dXJuIGZ1bmN0aW9uKFope3ZhciBUdD1aLmFmdGVybm9vbjtpZihUdCE9PXZvaWQgMCl7dmFyIEh0PVouaG91cnM7VHQ/SHQ8MTImJihaLmhvdXJzKz0xMik6SHQ9PT0xMiYmKFouaG91cnM9MCksZGVsZXRlIFouYWZ0ZXJub29ufX0ocHQpLHB0fX1yZXR1cm4gZnVuY3Rpb24oSyxpdCxzdCl7c3QucC5jdXN0b21QYXJzZUZvcm1hdD0hMCxLJiZLLnBhcnNlVHdvRGlnaXRZZWFyJiYoXz1LLnBhcnNlVHdvRGlnaXRZZWFyKTt2YXIgdXQ9aXQucHJvdG90eXBlLGJ0PXV0LnBhcnNlO3V0LnBhcnNlPWZ1bmN0aW9uKG10KXt2YXIgeXQ9bXQuZGF0ZSxkdD1tdC51dGMsaHQ9bXQuYXJnczt0aGlzLiR1PWR0O3ZhciB3dD1odFsxXTtpZih0eXBlb2Ygd3Q9PSJzdHJpbmciKXt2YXIgWD1odFsyXT09PSEwLHB0PWh0WzNdPT09ITAsVT1YfHxwdCx4dD1odFsyXTtwdCYmKHh0PWh0WzJdKSxFPXRoaXMuJGxvY2FsZSgpLCFYJiZ4dCYmKEU9c3QuTHNbeHRdKSx0aGlzLiRkPWZ1bmN0aW9uKHF0LEN0LFope3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihDdCk+LTEpcmV0dXJuIG5ldyBEYXRlKChDdD09PSJYIj8xZTM6MSkqcXQpO3ZhciBUdD16KEN0KShxdCksSHQ9VHQueWVhcixJdD1UdC5tb250aCxGdD1UdC5kYXksa2U9VHQuaG91cnMscG49VHQubWludXRlcyxNZT1UdC5zZWNvbmRzLHZlPVR0Lm1pbGxpc2Vjb25kcyxHZT1UdC56b25lLEtlPW5ldyBEYXRlLHdlPUZ0fHwoSHR8fEl0PzE6S2UuZ2V0RGF0ZSgpKSxfZT1IdHx8S2UuZ2V0RnVsbFllYXIoKSwkdD0wO0h0JiYhSXR8fCgkdD1JdD4wP0l0LTE6S2UuZ2V0TW9udGgoKSk7dmFyIHJlPWtlfHwwLGllPXBufHwwLE9lPU1lfHwwLG9lPXZlfHwwO3JldHVybiBHZT9uZXcgRGF0ZShEYXRlLlVUQyhfZSwkdCx3ZSxyZSxpZSxPZSxvZSs2MCpHZS5vZmZzZXQqMWUzKSk6Wj9uZXcgRGF0ZShEYXRlLlVUQyhfZSwkdCx3ZSxyZSxpZSxPZSxvZSkpOm5ldyBEYXRlKF9lLCR0LHdlLHJlLGllLE9lLG9lKX1jYXRjaHtyZXR1cm4gbmV3IERhdGUoIiIpfX0oeXQsd3QsZHQpLHRoaXMuaW5pdCgpLHh0JiZ4dCE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZSh4dCkuJEwpLFUmJnl0IT10aGlzLmZvcm1hdCh3dCkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSksRT17fX1lbHNlIGlmKHd0IGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBudD13dC5sZW5ndGgsT3Q9MTtPdDw9bnQ7T3QrPTEpe2h0WzFdPXd0W090LTFdO3ZhciBOdD1zdC5hcHBseSh0aGlzLGh0KTtpZihOdC5pc1ZhbGlkKCkpe3RoaXMuJGQ9TnQuJGQsdGhpcy4kTD1OdC4kTCx0aGlzLmluaXQoKTticmVha31PdD09PW50JiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgYnQuY2FsbCh0aGlzLG10KX19fSl9KShWQnQpO3ZhciBQemU9VkJ0LmV4cG9ydHM7Y29uc3QgRnplPUI3KFB6ZSk7dmFyIFVCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGYscCl7dmFyIHY9cC5wcm90b3R5cGUsbT12LmZvcm1hdDt2LmZvcm1hdD1mdW5jdGlvbihiKXt2YXIgRT10aGlzLF89dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBtLmJpbmQodGhpcykoYik7dmFyIEw9dGhpcy4kdXRpbHMoKSxOPShifHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oQil7c3dpdGNoKEIpe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoRS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gXy5vcmRpbmFsKEUuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIEUud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiBFLmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIF8ub3JkaW5hbChFLndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIEwucyhFLndlZWsoKSxCPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIEwucyhFLmlzb1dlZWsoKSxCPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIEwucyhTdHJpbmcoRS4kSD09PTA/MjQ6RS4kSCksQj09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKEUuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4gRS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIEJ9fSk7cmV0dXJuIG0uYmluZCh0aGlzKShOKX19fSl9KShVQnQpO3ZhciBCemU9VUJ0LmV4cG9ydHM7Y29uc3QgUnplPUI3KEJ6ZSk7ZzAuZXh0ZW5kKE56ZSksZzAuZXh0ZW5kKEZ6ZSksZzAuZXh0ZW5kKFJ6ZSk7bGV0IG0zPSIiLGowdD0iIiwkMHQsejB0PSIiLFNQPVtdLEFQPVtdLHEwdD17fSxIMHQ9W10sa0s9W10saUw9IiIsRzB0PSIiO2NvbnN0IFdCdD1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl07bGV0IFYwdD1bXSxMUD0hMSxVMHQ9ITEsVzB0PSJzdW5kYXkiLEswdD0wO2NvbnN0IGp6ZT1mdW5jdGlvbigpe0gwdD1bXSxrSz1bXSxpTD0iIixWMHQ9W10sRUs9MCxYMHQ9dm9pZCAwLFRLPXZvaWQgMCx1MT1bXSxtMz0iIixqMHQ9IiIsRzB0PSIiLCQwdD12b2lkIDAsejB0PSIiLFNQPVtdLEFQPVtdLExQPSExLFUwdD0hMSxLMHQ9MCxxMHQ9e30sYXAoKSxXMHQ9InN1bmRheSJ9LCR6ZT1mdW5jdGlvbihpKXtqMHQ9aX0senplPWZ1bmN0aW9uKCl7cmV0dXJuIGowdH0scXplPWZ1bmN0aW9uKGkpeyQwdD1pfSxIemU9ZnVuY3Rpb24oKXtyZXR1cm4gJDB0fSxHemU9ZnVuY3Rpb24oaSl7ejB0PWl9LFZ6ZT1mdW5jdGlvbigpe3JldHVybiB6MHR9LFV6ZT1mdW5jdGlvbihpKXttMz1pfSxXemU9ZnVuY3Rpb24oKXtMUD0hMH0sS3plPWZ1bmN0aW9uKCl7cmV0dXJuIExQfSxZemU9ZnVuY3Rpb24oKXtVMHQ9ITB9LFh6ZT1mdW5jdGlvbigpe3JldHVybiBVMHR9LFF6ZT1mdW5jdGlvbihpKXtHMHQ9aX0sWnplPWZ1bmN0aW9uKCl7cmV0dXJuIEcwdH0sSnplPWZ1bmN0aW9uKCl7cmV0dXJuIG0zfSx0cWU9ZnVuY3Rpb24oaSl7U1A9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sZXFlPWZ1bmN0aW9uKCl7cmV0dXJuIFNQfSxucWU9ZnVuY3Rpb24oaSl7QVA9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0scnFlPWZ1bmN0aW9uKCl7cmV0dXJuIEFQfSxpcWU9ZnVuY3Rpb24oKXtyZXR1cm4gcTB0fSxzcWU9ZnVuY3Rpb24oaSl7aUw9aSxIMHQucHVzaChpKX0sYXFlPWZ1bmN0aW9uKCl7cmV0dXJuIEgwdH0sb3FlPWZ1bmN0aW9uKCl7bGV0IGk9SkJ0KCk7Y29uc3QgYT0xMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1KQnQoKSxmKys7cmV0dXJuIGtLPXUxLGtLfSxLQnQ9ZnVuY3Rpb24oaSxhLGYscCl7cmV0dXJuIHAuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKT8hMTppLmlzb1dlZWtkYXkoKT49NiYmZi5pbmNsdWRlcygid2Vla2VuZHMiKXx8Zi5pbmNsdWRlcyhpLmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOmYuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKX0sY3FlPWZ1bmN0aW9uKGkpe1cwdD1pfSx1cWU9ZnVuY3Rpb24oKXtyZXR1cm4gVzB0fSxZQnQ9ZnVuY3Rpb24oaSxhLGYscCl7aWYoIWYubGVuZ3RofHxpLm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCB2O2kuc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT92PWcwKGkuc3RhcnRUaW1lKTp2PWcwKGkuc3RhcnRUaW1lLGEsITApLHY9di5hZGQoMSwiZCIpO2xldCBtO2kuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/bT1nMChpLmVuZFRpbWUpOm09ZzAoaS5lbmRUaW1lLGEsITApO2NvbnN0W2IsRV09bHFlKHYsbSxhLGYscCk7aS5lbmRUaW1lPWIudG9EYXRlKCksaS5yZW5kZXJFbmRUaW1lPUV9LGxxZT1mdW5jdGlvbihpLGEsZixwLHYpe2xldCBtPSExLGI9bnVsbDtmb3IoO2k8PWE7KW18fChiPWEudG9EYXRlKCkpLG09S0J0KGksZixwLHYpLG0mJihhPWEuYWRkKDEsImQiKSksaT1pLmFkZCgxLCJkIik7cmV0dXJuW2EsYl19LFkwdD1mdW5jdGlvbihpLGEsZil7Zj1mLnRyaW0oKTtjb25zdCB2PS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhmLnRyaW0oKSk7aWYodiE9PW51bGwpe2xldCBiPW51bGw7aWYodlsxXS5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oRSl7bGV0IF89YUwoRSk7XyE9PXZvaWQgMCYmKGI/Xy5lbmRUaW1lPmIuZW5kVGltZSYmKGI9Xyk6Yj1fKX0pLGIpcmV0dXJuIGIuZW5kVGltZTt7Y29uc3QgRT1uZXcgRGF0ZTtyZXR1cm4gRS5zZXRIb3VycygwLDAsMCwwKSxFfX1sZXQgbT1nMChmLGEudHJpbSgpLCEwKTtpZihtLmlzVmFsaWQoKSlyZXR1cm4gbS50b0RhdGUoKTt7VXQuZGVidWcoIkludmFsaWQgZGF0ZToiK2YpLFV0LmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrYS50cmltKCkpO2NvbnN0IGI9bmV3IERhdGUoZik7aWYoYj09PXZvaWQgMHx8aXNOYU4oYi5nZXRUaW1lKCkpfHxiLmdldEZ1bGxZZWFyKCk8LTFlNHx8Yi5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK2YpO3JldHVybiBifX0sWEJ0PWZ1bmN0aW9uKGkpe2NvbnN0IGE9L14oXGQrKD86XC5cZCspPykoW01kaG1zd3ldfG1zKSQvLmV4ZWMoaS50cmltKCkpO3JldHVybiBhIT09bnVsbD9bTnVtYmVyLnBhcnNlRmxvYXQoYVsxXSksYVsyXV06W05hTiwibXMiXX0sUUJ0PWZ1bmN0aW9uKGksYSxmLHA9ITEpe2Y9Zi50cmltKCk7bGV0IHY9ZzAoZixhLnRyaW0oKSwhMCk7aWYodi5pc1ZhbGlkKCkpcmV0dXJuIHAmJih2PXYuYWRkKDEsImQiKSksdi50b0RhdGUoKTtsZXQgbT1nMChpKTtjb25zdFtiLEVdPVhCdChmKTtpZighTnVtYmVyLmlzTmFOKGIpKXtjb25zdCBfPW0uYWRkKGIsRSk7Xy5pc1ZhbGlkKCkmJihtPV8pfXJldHVybiBtLnRvRGF0ZSgpfTtsZXQgRUs9MDtjb25zdCBzTD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMD8oRUs9RUsrMSwidGFzayIrRUspOml9LGhxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdj17fTtuUnQocCx2LFdCdCk7Zm9yKGxldCBiPTA7YjxwLmxlbmd0aDtiKyspcFtiXT1wW2JdLnRyaW0oKTtsZXQgbT0iIjtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp2LmlkPXNMKCksdi5zdGFydFRpbWU9aS5lbmRUaW1lLG09cFswXTticmVhaztjYXNlIDI6di5pZD1zTCgpLHYuc3RhcnRUaW1lPVkwdCh2b2lkIDAsbTMscFswXSksbT1wWzFdO2JyZWFrO2Nhc2UgMzp2LmlkPXNMKHBbMF0pLHYuc3RhcnRUaW1lPVkwdCh2b2lkIDAsbTMscFsxXSksbT1wWzJdO2JyZWFrfXJldHVybiBtJiYodi5lbmRUaW1lPVFCdCh2LnN0YXJ0VGltZSxtMyxtLExQKSx2Lm1hbnVhbEVuZFRpbWU9ZzAobSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxZQnQodixtMyxBUCxTUCkpLHZ9LGZxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdj17fTtuUnQocCx2LFdCdCk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspcFttXT1wW21dLnRyaW0oKTtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp2LmlkPXNMKCksdi5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDppfSx2LmVuZFRpbWU9e2RhdGE6cFswXX07YnJlYWs7Y2FzZSAyOnYuaWQ9c0woKSx2LnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6cFswXX0sdi5lbmRUaW1lPXtkYXRhOnBbMV19O2JyZWFrO2Nhc2UgMzp2LmlkPXNMKHBbMF0pLHYuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpwWzFdfSx2LmVuZFRpbWU9e2RhdGE6cFsyXX07YnJlYWt9cmV0dXJuIHZ9O2xldCBYMHQsVEssdTE9W107Y29uc3QgWkJ0PXt9LGRxZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9e3NlY3Rpb246aUwsdHlwZTppTCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmF9LHRhc2s6aSxjbGFzc2VzOltdfSxwPWZxZShUSyxhKTtmLnJhdy5zdGFydFRpbWU9cC5zdGFydFRpbWUsZi5yYXcuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYucHJldlRhc2tJZD1USyxmLmFjdGl2ZT1wLmFjdGl2ZSxmLmRvbmU9cC5kb25lLGYuY3JpdD1wLmNyaXQsZi5taWxlc3RvbmU9cC5taWxlc3RvbmUsZi5vcmRlcj1LMHQsSzB0Kys7Y29uc3Qgdj11MS5wdXNoKGYpO1RLPWYuaWQsWkJ0W2YuaWRdPXYtMX0sYUw9ZnVuY3Rpb24oaSl7Y29uc3QgYT1aQnRbaV07cmV0dXJuIHUxW2FdfSxncWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPXtzZWN0aW9uOmlMLHR5cGU6aUwsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX0scD1ocWUoWDB0LGEpO2Yuc3RhcnRUaW1lPXAuc3RhcnRUaW1lLGYuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYuYWN0aXZlPXAuYWN0aXZlLGYuZG9uZT1wLmRvbmUsZi5jcml0PXAuY3JpdCxmLm1pbGVzdG9uZT1wLm1pbGVzdG9uZSxYMHQ9ZixrSy5wdXNoKGYpfSxKQnQ9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKGYpe2NvbnN0IHA9dTFbZl07bGV0IHY9IiI7c3dpdGNoKHUxW2ZdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2NvbnN0IG09YUwocC5wcmV2VGFza0lkKTtwLnN0YXJ0VGltZT1tLmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOnY9WTB0KHZvaWQgMCxtMyx1MVtmXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSksdiYmKHUxW2ZdLnN0YXJ0VGltZT12KTticmVha31yZXR1cm4gdTFbZl0uc3RhcnRUaW1lJiYodTFbZl0uZW5kVGltZT1RQnQodTFbZl0uc3RhcnRUaW1lLG0zLHUxW2ZdLnJhdy5lbmRUaW1lLmRhdGEsTFApLHUxW2ZdLmVuZFRpbWUmJih1MVtmXS5wcm9jZXNzZWQ9ITAsdTFbZl0ubWFudWFsRW5kVGltZT1nMCh1MVtmXS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFlCdCh1MVtmXSxtMyxBUCxTUCkpKSx1MVtmXS5wcm9jZXNzZWR9O2xldCBhPSEwO2Zvcihjb25zdFtmLHBdb2YgdTEuZW50cmllcygpKWkoZiksYT1hJiZwLnByb2Nlc3NlZDtyZXR1cm4gYX0scHFlPWZ1bmN0aW9uKGksYSl7bGV0IGY9YTtMZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYoZj1RNihhKSksaS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7YUwocCkhPT12b2lkIDAmJihlUnQocCwoKT0+e3dpbmRvdy5vcGVuKGYsIl9zZWxmIil9KSxxMHRbcF09Zil9KSx0UnQoaSwiY2xpY2thYmxlIil9LHRSdD1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2xldCBwPWFMKGYpO3AhPT12b2lkIDAmJnAuY2xhc3Nlcy5wdXNoKGEpfSl9LGJxZT1mdW5jdGlvbihpLGEsZil7aWYoTGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47bGV0IHA9W107aWYodHlwZW9mIGY9PSJzdHJpbmciKXtwPWYuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspe2xldCBiPXBbbV0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSkscFttXT1ifX1wLmxlbmd0aD09PTAmJnAucHVzaChpKSxhTChpKSE9PXZvaWQgMCYmZVJ0KGksKCk9PnskYS5ydW5GdW5jKGEsLi4ucCl9KX0sZVJ0PWZ1bmN0aW9uKGksYSl7VjB0LnB1c2goZnVuY3Rpb24oKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9LGZ1bmN0aW9uKCl7Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0tdGV4dCJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9KX0sdnFlPXtnZXRDb25maWc6KCk9PkxlKCkuZ2FudHQsY2xlYXI6anplLHNldERhdGVGb3JtYXQ6VXplLGdldERhdGVGb3JtYXQ6SnplLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOld6ZSxlbmREYXRlc0FyZUluY2x1c2l2ZTpLemUsZW5hYmxlVG9wQXhpczpZemUsdG9wQXhpc0VuYWJsZWQ6WHplLHNldEF4aXNGb3JtYXQ6JHplLGdldEF4aXNGb3JtYXQ6enplLHNldFRpY2tJbnRlcnZhbDpxemUsZ2V0VGlja0ludGVydmFsOkh6ZSxzZXRUb2RheU1hcmtlcjpHemUsZ2V0VG9kYXlNYXJrZXI6VnplLHNldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLHNldERpYWdyYW1UaXRsZTpaMixnZXREaWFncmFtVGl0bGU6RGIsc2V0RGlzcGxheU1vZGU6UXplLGdldERpc3BsYXlNb2RlOlp6ZSxzZXRBY2NEZXNjcmlwdGlvbjpjcCxnZXRBY2NEZXNjcmlwdGlvbjp1cCxhZGRTZWN0aW9uOnNxZSxnZXRTZWN0aW9uczphcWUsZ2V0VGFza3M6b3FlLGFkZFRhc2s6ZHFlLGZpbmRUYXNrQnlJZDphTCxhZGRUYXNrT3JnOmdxZSxzZXRJbmNsdWRlczp0cWUsZ2V0SW5jbHVkZXM6ZXFlLHNldEV4Y2x1ZGVzOm5xZSxnZXRFeGNsdWRlczpycWUsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7YnFlKHAsYSxmKX0pLHRSdChpLCJjbGlja2FibGUiKX0sc2V0TGluazpwcWUsZ2V0TGlua3M6aXFlLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7VjB0LmZvckVhY2goZnVuY3Rpb24oYSl7YShpKX0pfSxwYXJzZUR1cmF0aW9uOlhCdCxpc0ludmFsaWREYXRlOktCdCxzZXRXZWVrZGF5OmNxZSxnZXRXZWVrZGF5OnVxZX07ZnVuY3Rpb24gblJ0KGksYSxmKXtsZXQgcD0hMDtmb3IoO3A7KXA9ITEsZi5mb3JFYWNoKGZ1bmN0aW9uKHYpe2NvbnN0IG09Il5cXHMqIit2KyJcXHMqJCIsYj1uZXcgUmVnRXhwKG0pO2lbMF0ubWF0Y2goYikmJihhW3ZdPSEwLGkuc2hpZnQoMSkscD0hMCl9KX1jb25zdCB3cWU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSxyUnQ9e21vbmRheTpNTix0dWVzZGF5OllNdCx3ZWRuZXNkYXk6WE10LHRodXJzZGF5Oks3LGZyaWRheTpRTXQsc2F0dXJkYXk6Wk10LHN1bmRheTpMTn0sbXFlPShpLGEpPT57bGV0IGY9Wy4uLmldLm1hcCgoKT0+LTEvMCkscD1bLi4uaV0uc29ydCgobSxiKT0+bS5zdGFydFRpbWUtYi5zdGFydFRpbWV8fG0ub3JkZXItYi5vcmRlciksdj0wO2Zvcihjb25zdCBtIG9mIHApZm9yKGxldCBiPTA7YjxmLmxlbmd0aDtiKyspaWYobS5zdGFydFRpbWU+PWZbYl0pe2ZbYl09bS5lbmRUaW1lLG0ub3JkZXI9YithLGI+diYmKHY9Yik7YnJlYWt9cmV0dXJuIHZ9O2xldCBMNTtjb25zdCB5cWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpEemUsZGI6dnFlLHJlbmRlcmVyOntzZXRDb25mOndxZSxkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9TGUoKS5nYW50dCxtPUxlKCkuc2VjdXJpdHlMZXZlbDtsZXQgYjttPT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKG09PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz1tPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsTD1fLmdldEVsZW1lbnRCeUlkKGEpO0w1PUwucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxMNT09PXZvaWQgMCYmKEw1PTEyMDApLHYudXNlV2lkdGghPT12b2lkIDAmJihMNT12LnVzZVdpZHRoKTtjb25zdCBOPXAuZGIuZ2V0VGFza3MoKTtsZXQgQj1bXTtmb3IoY29uc3Qgd3Qgb2YgTilCLnB1c2god3QudHlwZSk7Qj1odChCKTtjb25zdCBqPXt9O2xldCBSPTIqdi50b3BQYWRkaW5nO2lmKHAuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8di5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3Qgd3Q9e307Zm9yKGNvbnN0IHB0IG9mIE4pd3RbcHQuc2VjdGlvbl09PT12b2lkIDA/d3RbcHQuc2VjdGlvbl09W3B0XTp3dFtwdC5zZWN0aW9uXS5wdXNoKHB0KTtsZXQgWD0wO2Zvcihjb25zdCBwdCBvZiBPYmplY3Qua2V5cyh3dCkpe2NvbnN0IFU9bXFlKHd0W3B0XSxYKSsxO1grPVUsUis9VSoodi5iYXJIZWlnaHQrdi5iYXJHYXApLGpbcHRdPVV9fWVsc2V7Uis9Ti5sZW5ndGgqKHYuYmFySGVpZ2h0K3YuYmFyR2FwKTtmb3IoY29uc3Qgd3Qgb2YgQilqW3d0XT1OLmZpbHRlcihYPT5YLnR5cGU9PT13dCkubGVuZ3RofUwuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrTDUrIiAiK1IpO2NvbnN0IHo9RS5zZWxlY3QoYFtpZD0iJHthfSJdYCksSz1DN2UoKS5kb21haW4oW2x4ZShOLGZ1bmN0aW9uKHd0KXtyZXR1cm4gd3Quc3RhcnRUaW1lfSksdXhlKE4sZnVuY3Rpb24od3Qpe3JldHVybiB3dC5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLEw1LXYubGVmdFBhZGRpbmctdi5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBpdCh3dCxYKXtjb25zdCBwdD13dC5zdGFydFRpbWUsVT1YLnN0YXJ0VGltZTtsZXQgeHQ9MDtyZXR1cm4gcHQ+VT94dD0xOnB0PFUmJih4dD0tMSkseHR9Ti5zb3J0KGl0KSxzdChOLEw1LFIpLG9nKHosUixMNSx2LnVzZU1heFdpZHRoKSx6LmFwcGVuZCgidGV4dCIpLnRleHQocC5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsTDUvMikuYXR0cigieSIsdi50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiBzdCh3dCxYLHB0KXtjb25zdCBVPXYuYmFySGVpZ2h0LHh0PVUrdi5iYXJHYXAsbnQ9di50b3BQYWRkaW5nLE90PXYubGVmdFBhZGRpbmcsTnQ9QlUoKS5kb21haW4oWzAsQi5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKElrZSk7YnQoeHQsbnQsT3QsWCxwdCx3dCxwLmRiLmdldEV4Y2x1ZGVzKCkscC5kYi5nZXRJbmNsdWRlcygpKSxtdChPdCxudCxYLHB0KSx1dCh3dCx4dCxudCxPdCxVLE50LFgpLHl0KHh0LG50KSxkdChPdCxudCxYLHB0KX1mdW5jdGlvbiB1dCh3dCxYLHB0LFUseHQsbnQsT3Qpe2NvbnN0IHF0PVsuLi5uZXcgU2V0KHd0Lm1hcChIdD0+SHQub3JkZXIpKV0ubWFwKEh0PT53dC5maW5kKEl0PT5JdC5vcmRlcj09PUh0KSk7ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHF0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKEh0LEl0KXtyZXR1cm4gSXQ9SHQub3JkZXIsSXQqWCtwdC0yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIE90LXYucmlnaHRQYWRkaW5nLzJ9KS5hdHRyKCJoZWlnaHQiLFgpLmF0dHIoImNsYXNzIixmdW5jdGlvbihIdCl7Zm9yKGNvbnN0W0l0LEZ0XW9mIEIuZW50cmllcygpKWlmKEh0LnR5cGU9PT1GdClyZXR1cm4ic2VjdGlvbiBzZWN0aW9uIitJdCV2Lm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSk7Y29uc3QgQ3Q9ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHd0KS5lbnRlcigpLFo9cC5kYi5nZXRMaW5rcygpO2lmKEN0LmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihIdCl7cmV0dXJuIEh0LmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbihIdCl7cmV0dXJuIEh0Lm1pbGVzdG9uZT9LKEh0LnN0YXJ0VGltZSkrVSsuNSooSyhIdC5lbmRUaW1lKS1LKEh0LnN0YXJ0VGltZSkpLS41Knh0OksoSHQuc3RhcnRUaW1lKStVfSkuYXR0cigieSIsZnVuY3Rpb24oSHQsSXQpe3JldHVybiBJdD1IdC5vcmRlcixJdCpYK3B0fSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKEh0KXtyZXR1cm4gSHQubWlsZXN0b25lP3h0OksoSHQucmVuZGVyRW5kVGltZXx8SHQuZW5kVGltZSktSyhIdC5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0Iix4dCkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oSHQsSXQpe3JldHVybiBJdD1IdC5vcmRlciwoSyhIdC5zdGFydFRpbWUpK1UrLjUqKEsoSHQuZW5kVGltZSktSyhIdC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoSXQqWCtwdCsuNSp4dCkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKEh0KXtjb25zdCBJdD0idGFzayI7bGV0IEZ0PSIiO0h0LmNsYXNzZXMubGVuZ3RoPjAmJihGdD1IdC5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IGtlPTA7Zm9yKGNvbnN0W01lLHZlXW9mIEIuZW50cmllcygpKUh0LnR5cGU9PT12ZSYmKGtlPU1lJXYubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IHBuPSIiO3JldHVybiBIdC5hY3RpdmU/SHQuY3JpdD9wbis9IiBhY3RpdmVDcml0Ijpwbj0iIGFjdGl2ZSI6SHQuZG9uZT9IdC5jcml0P3BuPSIgZG9uZUNyaXQiOnBuPSIgZG9uZSI6SHQuY3JpdCYmKHBuKz0iIGNyaXQiKSxwbi5sZW5ndGg9PT0wJiYocG49IiB0YXNrIiksSHQubWlsZXN0b25lJiYocG49IiBtaWxlc3RvbmUgIitwbikscG4rPWtlLHBuKz0iICIrRnQsSXQrcG59KSxDdC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oSHQpe3JldHVybiBIdC5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbihIdCl7cmV0dXJuIEh0LnRhc2t9KS5hdHRyKCJmb250LXNpemUiLHYuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKEh0KXtsZXQgSXQ9SyhIdC5zdGFydFRpbWUpLEZ0PUsoSHQucmVuZGVyRW5kVGltZXx8SHQuZW5kVGltZSk7SHQubWlsZXN0b25lJiYoSXQrPS41KihLKEh0LmVuZFRpbWUpLUsoSHQuc3RhcnRUaW1lKSktLjUqeHQpLEh0Lm1pbGVzdG9uZSYmKEZ0PUl0K3h0KTtjb25zdCBrZT10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4ga2U+RnQtSXQ/RnQra2UrMS41KnYubGVmdFBhZGRpbmc+T3Q/SXQrVS01OkZ0K1UrNTooRnQtSXQpLzIrSXQrVX0pLmF0dHIoInkiLGZ1bmN0aW9uKEh0LEl0KXtyZXR1cm4gSXQ9SHQub3JkZXIsSXQqWCt2LmJhckhlaWdodC8yKyh2LmZvbnRTaXplLzItMikrcHR9KS5hdHRyKCJ0ZXh0LWhlaWdodCIseHQpLmF0dHIoImNsYXNzIixmdW5jdGlvbihIdCl7Y29uc3QgSXQ9SyhIdC5zdGFydFRpbWUpO2xldCBGdD1LKEh0LmVuZFRpbWUpO0h0Lm1pbGVzdG9uZSYmKEZ0PUl0K3h0KTtjb25zdCBrZT10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgcG49IiI7SHQuY2xhc3Nlcy5sZW5ndGg+MCYmKHBuPUh0LmNsYXNzZXMuam9pbigiICIpKTtsZXQgTWU9MDtmb3IoY29uc3RbR2UsS2Vdb2YgQi5lbnRyaWVzKCkpSHQudHlwZT09PUtlJiYoTWU9R2Uldi5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgdmU9IiI7cmV0dXJuIEh0LmFjdGl2ZSYmKEh0LmNyaXQ/dmU9ImFjdGl2ZUNyaXRUZXh0IitNZTp2ZT0iYWN0aXZlVGV4dCIrTWUpLEh0LmRvbmU/SHQuY3JpdD92ZT12ZSsiIGRvbmVDcml0VGV4dCIrTWU6dmU9dmUrIiBkb25lVGV4dCIrTWU6SHQuY3JpdCYmKHZlPXZlKyIgY3JpdFRleHQiK01lKSxIdC5taWxlc3RvbmUmJih2ZSs9IiBtaWxlc3RvbmVUZXh0Iiksa2U+RnQtSXQ/RnQra2UrMS41KnYubGVmdFBhZGRpbmc+T3Q/cG4rIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrTWUrIiAiK3ZlOnBuKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitNZSsiICIrdmUrIiB3aWR0aC0iK2tlOnBuKyIgdGFza1RleHQgdGFza1RleHQiK01lKyIgIit2ZSsiIHdpZHRoLSIra2V9KSxMZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCBIdDtIdD15cigiI2kiK2EpO2NvbnN0IEl0PUh0Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0N0LmZpbHRlcihmdW5jdGlvbihGdCl7cmV0dXJuIFpbRnQuaWRdIT09dm9pZCAwfSkuZWFjaChmdW5jdGlvbihGdCl7dmFyIGtlPUl0LnF1ZXJ5U2VsZWN0b3IoIiMiK0Z0LmlkKSxwbj1JdC5xdWVyeVNlbGVjdG9yKCIjIitGdC5pZCsiLXRleHQiKTtjb25zdCBNZT1rZS5wYXJlbnROb2RlO3ZhciB2ZT1JdC5jcmVhdGVFbGVtZW50KCJhIik7dmUuc2V0QXR0cmlidXRlKCJ4bGluazpocmVmIixaW0Z0LmlkXSksdmUuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfdG9wIiksTWUuYXBwZW5kQ2hpbGQodmUpLHZlLmFwcGVuZENoaWxkKGtlKSx2ZS5hcHBlbmRDaGlsZChwbil9KX19ZnVuY3Rpb24gYnQod3QsWCxwdCxVLHh0LG50LE90LE50KXtpZihPdC5sZW5ndGg9PT0wJiZOdC5sZW5ndGg9PT0wKXJldHVybjtsZXQgcXQsQ3Q7Zm9yKGNvbnN0e3N0YXJ0VGltZTprZSxlbmRUaW1lOnBufW9mIG50KShxdD09PXZvaWQgMHx8a2U8cXQpJiYocXQ9a2UpLChDdD09PXZvaWQgMHx8cG4+Q3QpJiYoQ3Q9cG4pO2lmKCFxdHx8IUN0KXJldHVybjtpZihnMChDdCkuZGlmZihnMChxdCksInllYXIiKT41KXtVdC53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59Y29uc3QgWj1wLmRiLmdldERhdGVGb3JtYXQoKSxUdD1bXTtsZXQgSHQ9bnVsbCxJdD1nMChxdCk7Zm9yKDtJdC52YWx1ZU9mKCk8PUN0OylwLmRiLmlzSW52YWxpZERhdGUoSXQsWixPdCxOdCk/SHQ/SHQuZW5kPUl0Okh0PXtzdGFydDpJdCxlbmQ6SXR9Okh0JiYoVHQucHVzaChIdCksSHQ9bnVsbCksSXQ9SXQuYWRkKDEsImQiKTt6LmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoVHQpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKGtlKXtyZXR1cm4iZXhjbHVkZS0iK2tlLnN0YXJ0LmZvcm1hdCgiWVlZWS1NTS1ERCIpfSkuYXR0cigieCIsZnVuY3Rpb24oa2Upe3JldHVybiBLKGtlLnN0YXJ0KStwdH0pLmF0dHIoInkiLHYuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoIndpZHRoIixmdW5jdGlvbihrZSl7Y29uc3QgcG49a2UuZW5kLmFkZCgxLCJkYXkiKTtyZXR1cm4gSyhwbiktSyhrZS5zdGFydCl9KS5hdHRyKCJoZWlnaHQiLHh0LVgtdi5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oa2UscG4pe3JldHVybihLKGtlLnN0YXJ0KStwdCsuNSooSyhrZS5lbmQpLUsoa2Uuc3RhcnQpKSkudG9TdHJpbmcoKSsicHggIisocG4qd3QrLjUqeHQpLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfWZ1bmN0aW9uIG10KHd0LFgscHQsVSl7bGV0IHh0PXd4ZShLKS50aWNrU2l6ZSgtVStYK3YuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoSFUocC5kYi5nZXRBeGlzRm9ybWF0KCl8fHYuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2NvbnN0IE90PS9eKFsxLTldXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC8uZXhlYyhwLmRiLmdldFRpY2tJbnRlcnZhbCgpfHx2LnRpY2tJbnRlcnZhbCk7aWYoT3QhPT1udWxsKXtjb25zdCBOdD1PdFsxXSxxdD1PdFsyXSxDdD1wLmRiLmdldFdlZWtkYXkoKXx8di53ZWVrZGF5O3N3aXRjaChxdCl7Y2FzZSJtaWxsaXNlY29uZCI6eHQudGlja3MoQzF0LmV2ZXJ5KE50KSk7YnJlYWs7Y2FzZSJzZWNvbmQiOnh0LnRpY2tzKFU3LmV2ZXJ5KE50KSk7YnJlYWs7Y2FzZSJtaW51dGUiOnh0LnRpY2tzKGpVLmV2ZXJ5KE50KSk7YnJlYWs7Y2FzZSJob3VyIjp4dC50aWNrcygkVS5ldmVyeShOdCkpO2JyZWFrO2Nhc2UiZGF5Ijp4dC50aWNrcyhDQS5ldmVyeShOdCkpO2JyZWFrO2Nhc2Uid2VlayI6eHQudGlja3MoclJ0W0N0XS5ldmVyeShOdCkpO2JyZWFrO2Nhc2UibW9udGgiOnh0LnRpY2tzKHpVLmV2ZXJ5KE50KSk7YnJlYWt9fWlmKHouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrd3QrIiwgIisoVS01MCkrIikiKS5jYWxsKHh0KS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLHAuZGIudG9wQXhpc0VuYWJsZWQoKXx8di50b3BBeGlzKXtsZXQgTnQ9dnhlKEspLnRpY2tTaXplKC1VK1grdi5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChIVShwLmRiLmdldEF4aXNGb3JtYXQoKXx8di5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoT3QhPT1udWxsKXtjb25zdCBxdD1PdFsxXSxDdD1PdFsyXSxaPXAuZGIuZ2V0V2Vla2RheSgpfHx2LndlZWtkYXk7c3dpdGNoKEN0KXtjYXNlIm1pbGxpc2Vjb25kIjpOdC50aWNrcyhDMXQuZXZlcnkocXQpKTticmVhaztjYXNlInNlY29uZCI6TnQudGlja3MoVTcuZXZlcnkocXQpKTticmVhaztjYXNlIm1pbnV0ZSI6TnQudGlja3MoalUuZXZlcnkocXQpKTticmVhaztjYXNlImhvdXIiOk50LnRpY2tzKCRVLmV2ZXJ5KHF0KSk7YnJlYWs7Y2FzZSJkYXkiOk50LnRpY2tzKENBLmV2ZXJ5KHF0KSk7YnJlYWs7Y2FzZSJ3ZWVrIjpOdC50aWNrcyhyUnRbWl0uZXZlcnkocXQpKTticmVhaztjYXNlIm1vbnRoIjpOdC50aWNrcyh6VS5ldmVyeShxdCkpO2JyZWFrfX16LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3d0KyIsICIrWCsiKSIpLmNhbGwoTnQpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX1mdW5jdGlvbiB5dCh3dCxYKXtsZXQgcHQ9MDtjb25zdCBVPU9iamVjdC5rZXlzKGopLm1hcCh4dD0+W3h0LGpbeHRdXSk7ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFUpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKHh0KXtjb25zdCBudD14dFswXS5zcGxpdChZci5saW5lQnJlYWtSZWdleCksT3Q9LShudC5sZW5ndGgtMSkvMixOdD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7TnQuc2V0QXR0cmlidXRlKCJkeSIsT3QrImVtIik7Zm9yKGNvbnN0W3F0LEN0XW9mIG50LmVudHJpZXMoKSl7Y29uc3QgWj1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO1ouc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksWi5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLHF0PjAmJlouc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFoudGV4dENvbnRlbnQ9Q3QsTnQuYXBwZW5kQ2hpbGQoWil9cmV0dXJuIE50fSkuYXR0cigieCIsMTApLmF0dHIoInkiLGZ1bmN0aW9uKHh0LG50KXtpZihudD4wKWZvcihsZXQgT3Q9MDtPdDxudDtPdCsrKXJldHVybiBwdCs9VVtudC0xXVsxXSx4dFsxXSp3dC8yK3B0Knd0K1g7ZWxzZSByZXR1cm4geHRbMV0qd3QvMitYfSkuYXR0cigiZm9udC1zaXplIix2LnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHh0KXtmb3IoY29uc3RbbnQsT3Rdb2YgQi5lbnRyaWVzKCkpaWYoeHRbMF09PT1PdClyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrbnQldi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSl9ZnVuY3Rpb24gZHQod3QsWCxwdCxVKXtjb25zdCB4dD1wLmRiLmdldFRvZGF5TWFya2VyKCk7aWYoeHQ9PT0ib2ZmIilyZXR1cm47Y29uc3QgbnQ9ei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksT3Q9bmV3IERhdGUsTnQ9bnQuYXBwZW5kKCJsaW5lIik7TnQuYXR0cigieDEiLEsoT3QpK3d0KS5hdHRyKCJ4MiIsSyhPdCkrd3QpLmF0dHIoInkxIix2LnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsVS12LnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IikseHQhPT0iIiYmTnQuYXR0cigic3R5bGUiLHh0LnJlcGxhY2UoLywvZywiOyIpKX1mdW5jdGlvbiBodCh3dCl7Y29uc3QgWD17fSxwdD1bXTtmb3IobGV0IFU9MCx4dD13dC5sZW5ndGg7VTx4dDsrK1UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsd3RbVV0pfHwoWFt3dFtVXV09ITAscHQucHVzaCh3dFtVXSkpO3JldHVybiBwdH19fSxzdHlsZXM6aT0+YAogIC5tZXJtYWlkLW1haW4tZm9udCB7CiAgICBmb250LWZhbWlseTogInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAuZXhjbHVkZS1yYW5nZSB7CiAgICBmaWxsOiAke2kuZXhjbHVkZUJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uIHsKICAgIHN0cm9rZTogbm9uZTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uMCB7CiAgICBmaWxsOiAke2kuc2VjdGlvbkJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uMiB7CiAgICBmaWxsOiAke2kuc2VjdGlvbkJrZ0NvbG9yMn07CiAgfQoKICAuc2VjdGlvbjEsCiAgLnNlY3Rpb24zIHsKICAgIGZpbGw6ICR7aS5hbHRTZWN0aW9uQmtnQ29sb3J9OwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb25UaXRsZTAgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTEgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTIgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTMgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZSB7CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAvLyBmb250LXNpemU6ICR7aS5nYW50dEZvbnRTaXplfTsKICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKCiAgfQoKCiAgLyogR3JpZCBhbmQgYXhpcyAqLwoKICAuZ3JpZCAudGljayB7CiAgICBzdHJva2U6ICR7aS5ncmlkQ29sb3J9OwogICAgb3BhY2l0eTogMC44OwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogICAgdGV4dCB7CiAgICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogICAgfQogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHtpLnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KCiAgLy8gLnRhc2tUZXh0Om5vdChbZm9udC1zaXplXSkgewogIC8vICAgZm9udC1zaXplOiAke2kuZ2FudHRGb250U2l6ZX07CiAgLy8gfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIC8vIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKCiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IGVuZDsKICAgIC8vIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogIH0KCiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqLwogIC50YXNrLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQogIC50YXNrVGV4dC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke2kudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke2kudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi8KCiAgLnRhc2tUZXh0MCwKICAudGFza1RleHQxLAogIC50YXNrVGV4dDIsCiAgLnRhc2tUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHRDb2xvcn07CiAgfQoKICAudGFzazAsCiAgLnRhc2sxLAogIC50YXNrMiwKICAudGFzazMgewogICAgZmlsbDogJHtpLnRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS50YXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTAsCiAgLnRhc2tUZXh0T3V0c2lkZTIKICB7CiAgICBmaWxsOiAke2kudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTEsCiAgLnRhc2tUZXh0T3V0c2lkZTMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgoKICAvKiBBY3RpdmUgdGFzayAqLwoKICAuYWN0aXZlMCwKICAuYWN0aXZlMSwKICAuYWN0aXZlMiwKICAuYWN0aXZlMyB7CiAgICBmaWxsOiAke2kuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZlVGV4dDAsCiAgLmFjdGl2ZVRleHQxLAogIC5hY3RpdmVUZXh0MiwKICAuYWN0aXZlVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIENvbXBsZXRlZCB0YXNrICovCgogIC5kb25lMCwKICAuZG9uZTEsCiAgLmRvbmUyLAogIC5kb25lMyB7CiAgICBzdHJva2U6ICR7aS5kb25lVGFza0JvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lVGV4dDAsCiAgLmRvbmVUZXh0MSwKICAuZG9uZVRleHQyLAogIC5kb25lVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovCgogIC5jcml0MCwKICAuY3JpdDEsCiAgLmNyaXQyLAogIC5jcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmNyaXRCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuYWN0aXZlQ3JpdDAsCiAgLmFjdGl2ZUNyaXQxLAogIC5hY3RpdmVDcml0MiwKICAuYWN0aXZlQ3JpdDMgewogICAgc3Ryb2tlOiAke2kuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVDcml0MCwKICAuZG9uZUNyaXQxLAogIC5kb25lQ3JpdDIsCiAgLmRvbmVDcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLm1pbGVzdG9uZSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7CiAgfQoKICAubWlsZXN0b25lVGV4dCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQogIC5kb25lQ3JpdFRleHQwLAogIC5kb25lQ3JpdFRleHQxLAogIC5kb25lQ3JpdFRleHQyLAogIC5kb25lQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC5hY3RpdmVDcml0VGV4dDAsCiAgLmFjdGl2ZUNyaXRUZXh0MSwKICAuYWN0aXZlQ3JpdFRleHQyLAogIC5hY3RpdmVDcml0VGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLnRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHtpLnRleHRDb2xvcn0gICAgOwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBRMHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihtLGIsRSxfKXtmb3IoRT1FfHx7fSxfPW0ubGVuZ3RoO18tLTtFW21bX11dPWIpO3JldHVybiBFfSxhPVs2LDksMTBdLGY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYixFLF8sTCxOLEIsail7c3dpdGNoKEIubGVuZ3RoLTEsTil7Y2FzZSAxOnJldHVybiBMO2Nhc2UgNDpicmVhaztjYXNlIDY6TC5zZXRJbmZvKCEwKTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODo2LDk6WzEsN10sMTA6WzEsOF19LHsxOlsyLDFdfSxpKGEsWzIsM10pLGkoYSxbMiw0XSksaShhLFsyLDVdKSxpKGEsWzIsNl0pXSxkZWZhdWx0QWN0aW9uczp7NDpbMiwxXX0scGFyc2VFcnJvcjpmdW5jdGlvbihiLEUpe2lmKEUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShiKTtlbHNle3ZhciBfPW5ldyBFcnJvcihiKTt0aHJvdyBfLmhhc2g9RSxffX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIEU9dGhpcyxfPVswXSxMPVtdLE49W251bGxdLEI9W10saj10aGlzLnRhYmxlLFI9IiIsej0wLEs9MCxpdD0yLHN0PTEsdXQ9Qi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxidD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLG10PXt5eTp7fX07Zm9yKHZhciB5dCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHl0KSYmKG10Lnl5W3l0XT10aGlzLnl5W3l0XSk7YnQuc2V0SW5wdXQoYixtdC55eSksbXQueXkubGV4ZXI9YnQsbXQueXkucGFyc2VyPXRoaXMsdHlwZW9mIGJ0Lnl5bGxvYz4idSImJihidC55eWxsb2M9e30pO3ZhciBkdD1idC55eWxsb2M7Qi5wdXNoKGR0KTt2YXIgaHQ9YnQub3B0aW9ucyYmYnQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG10Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW10Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHd0KCl7dmFyIFR0O3JldHVybiBUdD1MLnBvcCgpfHxidC5sZXgoKXx8c3QsdHlwZW9mIFR0IT0ibnVtYmVyIiYmKFR0IGluc3RhbmNlb2YgQXJyYXkmJihMPVR0LFR0PUwucG9wKCkpLFR0PUUuc3ltYm9sc19bVHRdfHxUdCksVHR9Zm9yKHZhciBYLHB0LFUseHQsbnQ9e30sT3QsTnQscXQsQ3Q7Oyl7aWYocHQ9X1tfLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3B0XT9VPXRoaXMuZGVmYXVsdEFjdGlvbnNbcHRdOigoWD09PW51bGx8fHR5cGVvZiBYPiJ1IikmJihYPXd0KCkpLFU9altwdF0mJmpbcHRdW1hdKSx0eXBlb2YgVT4idSJ8fCFVLmxlbmd0aHx8IVVbMF0pe3ZhciBaPSIiO0N0PVtdO2ZvcihPdCBpbiBqW3B0XSl0aGlzLnRlcm1pbmFsc19bT3RdJiZPdD5pdCYmQ3QucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW090XSsiJyIpO2J0LnNob3dQb3NpdGlvbj9aPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHorMSkrYDoKYCtidC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0N0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWF18fFgpKyInIjpaPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHorMSkrIjogVW5leHBlY3RlZCAiKyhYPT1zdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoWix7dGV4dDpidC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWF18fFgsbGluZTpidC55eWxpbmVubyxsb2M6ZHQsZXhwZWN0ZWQ6Q3R9KX1pZihVWzBdaW5zdGFuY2VvZiBBcnJheSYmVS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3B0KyIsIHRva2VuOiAiK1gpO3N3aXRjaChVWzBdKXtjYXNlIDE6Xy5wdXNoKFgpLE4ucHVzaChidC55eXRleHQpLEIucHVzaChidC55eWxsb2MpLF8ucHVzaChVWzFdKSxYPW51bGwsSz1idC55eWxlbmcsUj1idC55eXRleHQsej1idC55eWxpbmVubyxkdD1idC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKE50PXRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzFdLG50LiQ9TltOLmxlbmd0aC1OdF0sbnQuXyQ9e2ZpcnN0X2xpbmU6QltCLmxlbmd0aC0oTnR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpCW0IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46QltCLmxlbmd0aC0oTnR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QltCLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0saHQmJihudC5fJC5yYW5nZT1bQltCLmxlbmd0aC0oTnR8fDEpXS5yYW5nZVswXSxCW0IubGVuZ3RoLTFdLnJhbmdlWzFdXSkseHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG50LFtSLEsseixtdC55eSxVWzFdLE4sQl0uY29uY2F0KHV0KSksdHlwZW9mIHh0PCJ1IilyZXR1cm4geHQ7TnQmJihfPV8uc2xpY2UoMCwtMSpOdCoyKSxOPU4uc2xpY2UoMCwtMSpOdCksQj1CLnNsaWNlKDAsLTEqTnQpKSxfLnB1c2godGhpcy5wcm9kdWN0aW9uc19bVVsxXV1bMF0pLE4ucHVzaChudC4kKSxCLnB1c2gobnQuXyQpLHF0PWpbX1tfLmxlbmd0aC0yXV1bX1tfLmxlbmd0aC0xXV0sXy5wdXNoKHF0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0scD1mdW5jdGlvbigpe3ZhciBtPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKEUsXyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFLF8pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEUpfSxzZXRJbnB1dDpmdW5jdGlvbihiLEUpe3JldHVybiB0aGlzLnl5PUV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWIsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPWIsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWIsdGhpcy5tYXRjaGVkKz1iO3ZhciBFPWIubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBFPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxifSx1bnB1dDpmdW5jdGlvbihiKXt2YXIgRT1iLmxlbmd0aCxfPWIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1iK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FKSx0aGlzLm9mZnNldC09RTt2YXIgTD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxfLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Xy5sZW5ndGgtMSk7dmFyIE49dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOl8/KF8ubGVuZ3RoPT09TC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0xbTC5sZW5ndGgtXy5sZW5ndGhdLmxlbmd0aC1fWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtOWzBdLE5bMF0rdGhpcy55eWxlbmctRV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKGIpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShiKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oYi5sZW5ndGg+MjA/Ii4uLiI6IiIpK2Iuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoO3JldHVybiBiLmxlbmd0aDwyMCYmKGIrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWIubGVuZ3RoKSksKGIuc3Vic3RyKDAsMjApKyhiLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBhc3RJbnB1dCgpLEU9bmV3IEFycmF5KGIubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gYit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYixFKXt2YXIgXyxMLE47aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKE49e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxMPWJbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEwmJih0aGlzLnl5bGluZW5vKz1MLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkw/TFtMLmxlbmd0aC0xXS5sZW5ndGgtTFtMLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9YlswXSx0aGlzLm1hdGNoKz1iWzBdLHRoaXMubWF0Y2hlcz1iLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWJbMF0sXz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxFLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLF8pcmV0dXJuIF87aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEIgaW4gTil0aGlzW0JdPU5bQl07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgYixFLF8sTDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBOPXRoaXMuX2N1cnJlbnRSdWxlcygpLEI9MDtCPE4ubGVuZ3RoO0IrKylpZihfPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbTltCXV0pLF8mJighRXx8X1swXS5sZW5ndGg+RVswXS5sZW5ndGgpKXtpZihFPV8sTD1CLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGI9dGhpcy50ZXN0X21hdGNoKF8sTltCXSksYiE9PSExKXJldHVybiBiO2lmKHRoaXMuX2JhY2t0cmFjayl7RT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFPyhiPXRoaXMudGVzdF9tYXRjaChFLE5bTF0pLGIhPT0hMT9iOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLm5leHQoKTtyZXR1cm4gRXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oRSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihFKXtyZXR1cm4gRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV8fDApLEU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihFKXt0aGlzLmJlZ2luKEUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEUsXyxMLE4pe3N3aXRjaChMKXtjYXNlIDA6cmV0dXJuIDQ7Y2FzZSAxOnJldHVybiA5O2Nhc2UgMjpyZXR1cm4ic3BhY2UiO2Nhc2UgMzpyZXR1cm4gMTA7Y2FzZSA0OnJldHVybiA2O2Nhc2UgNTpyZXR1cm4iVFhUIn19LHJ1bGVzOlsvXig/OmluZm9cYikvaSwvXig/Oltcc1xuXHJdKykvaSwvXig/Oltcc10rKS9pLC9eKD86c2hvd0luZm9cYikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gbX0oKTtmLmxleGVyPXA7ZnVuY3Rpb24gdigpe3RoaXMueXk9e319cmV0dXJuIHYucHJvdG90eXBlPWYsZi5QYXJzZXI9dixuZXcgdn0oKTtRMHQucGFyc2VyPVEwdDtjb25zdCB4cWU9UTB0LGlSdD17aW5mbzohMX07bGV0IFowdD1pUnQuaW5mbztjb25zdCBrcWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp4cWUsZGI6e2NsZWFyOigpPT57WjB0PWlSdC5pbmZvfSxzZXRJbmZvOmk9PntaMHQ9aX0sZ2V0SW5mbzooKT0+WjB0fSxyZW5kZXJlcjp7ZHJhdzooaSxhLGYpPT57VXQuZGVidWcoYHJlbmRlcmluZyBpbmZvIGRpYWdyYW0KYCtpKTtjb25zdCBwPWZkdChhKTtvZyhwLDEwMCw0MDAsITApLHAuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7Zn1gKX19fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgSjB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oYnQsbXQseXQsZHQpe2Zvcih5dD15dHx8e30sZHQ9YnQubGVuZ3RoO2R0LS07eXRbYnRbZHRdXT1tdCk7cmV0dXJuIHl0fSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx2PVsxLDZdLG09WzEsMTAsMTIsMTQsMTYsMTgsMTksMjAsMjEsMjJdLGI9WzIsNF0sRT1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIwLDIxLDIyXSxfPVsyMCwyMSwyMl0sTD1bMiw3XSxOPVsxLDEyXSxCPVsxLDEzXSxqPVsxLDE0XSxSPVsxLDE1XSx6PVsxLDE2XSxLPVsxLDE3XSxpdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsUElFOjUsZG9jdW1lbnQ6NixzaG93RGF0YTo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsc2VjdGlvbjoxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlBJRSIsNzoic2hvd0RhdGEiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToic2VjdGlvbiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG10LHl0LGR0LGh0LHd0LFgscHQpe3ZhciBVPVgubGVuZ3RoLTE7c3dpdGNoKHd0KXtjYXNlIDM6aHQuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9WFtVLTFdO2JyZWFrO2Nhc2UgODpodC5hZGRTZWN0aW9uKFhbVS0xXSxodC5jbGVhbnVwVmFsdWUoWFtVXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9WFtVXS50cmltKCksaHQuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9WFtVXS50cmltKCksaHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDExOmNhc2UgMTI6dGhpcy4kPVhbVV0udHJpbSgpLGh0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMzpodC5hZGRTZWN0aW9uKFhbVV0uc3Vic3RyKDgpKSx0aGlzLiQ9WFtVXS5zdWJzdHIoOCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDIwOmYsMjE6cCwyMjp2fSx7MTpbM119LHszOjcsNDoyLDU6YSwyMDpmLDIxOnAsMjI6dn0saShtLGIsezY6OCw3OlsxLDldfSksaShFLFsyLDE0XSksaShFLFsyLDE1XSksaShFLFsyLDE2XSksezE6WzIsMV19LGkoXyxMLHs4OjEwLDk6MTEsMTpbMiwyXSwxMDpOLDEyOkIsMTQ6aiwxNjpSLDE4OnosMTk6S30pLGkobSxiLHs2OjE4fSksaShtLFsyLDVdKSx7NDoxOSwyMDpmLDIxOnAsMjI6dn0sezExOlsxLDIwXX0sezEzOlsxLDIxXX0sezE1OlsxLDIyXX0sezE3OlsxLDIzXX0saShfLFsyLDEyXSksaShfLFsyLDEzXSksaShfLEwsezg6MTAsOToxMSwxOlsyLDNdLDEwOk4sMTI6QiwxNDpqLDE2OlIsMTg6eiwxOTpLfSksaShtLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiw5XSksaShfLFsyLDEwXSksaShfLFsyLDExXSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG10LHl0KXtpZih5dC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG10KTtlbHNle3ZhciBkdD1uZXcgRXJyb3IobXQpO3Rocm93IGR0Lmhhc2g9eXQsZHR9fSxwYXJzZTpmdW5jdGlvbihtdCl7dmFyIHl0PXRoaXMsZHQ9WzBdLGh0PVtdLHd0PVtudWxsXSxYPVtdLHB0PXRoaXMudGFibGUsVT0iIix4dD0wLG50PTAsT3Q9MixOdD0xLHF0PVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ3Q9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxaPXt5eTp7fX07Zm9yKHZhciBUdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFR0KSYmKFoueXlbVHRdPXRoaXMueXlbVHRdKTtDdC5zZXRJbnB1dChtdCxaLnl5KSxaLnl5LmxleGVyPUN0LFoueXkucGFyc2VyPXRoaXMsdHlwZW9mIEN0Lnl5bGxvYz4idSImJihDdC55eWxsb2M9e30pO3ZhciBIdD1DdC55eWxsb2M7WC5wdXNoKEh0KTt2YXIgSXQ9Q3Qub3B0aW9ucyYmQ3Qub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Wi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBGdCgpe3ZhciBpZTtyZXR1cm4gaWU9aHQucG9wKCl8fEN0LmxleCgpfHxOdCx0eXBlb2YgaWUhPSJudW1iZXIiJiYoaWUgaW5zdGFuY2VvZiBBcnJheSYmKGh0PWllLGllPWh0LnBvcCgpKSxpZT15dC5zeW1ib2xzX1tpZV18fGllKSxpZX1mb3IodmFyIGtlLHBuLE1lLHZlLEdlPXt9LEtlLHdlLF9lLCR0Ozspe2lmKHBuPWR0W2R0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3BuXT9NZT10aGlzLmRlZmF1bHRBY3Rpb25zW3BuXTooKGtlPT09bnVsbHx8dHlwZW9mIGtlPiJ1IikmJihrZT1GdCgpKSxNZT1wdFtwbl0mJnB0W3BuXVtrZV0pLHR5cGVvZiBNZT4idSJ8fCFNZS5sZW5ndGh8fCFNZVswXSl7dmFyIHJlPSIiOyR0PVtdO2ZvcihLZSBpbiBwdFtwbl0pdGhpcy50ZXJtaW5hbHNfW0tlXSYmS2U+T3QmJiR0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tLZV0rIiciKTtDdC5zaG93UG9zaXRpb24/cmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeHQrMSkrYDoKYCtDdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgKyR0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19ba2VdfHxrZSkrIiciOnJlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHh0KzEpKyI6IFVuZXhwZWN0ZWQgIisoa2U9PU50PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2tlXXx8a2UpKyInIiksdGhpcy5wYXJzZUVycm9yKHJlLHt0ZXh0OkN0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1trZV18fGtlLGxpbmU6Q3QueXlsaW5lbm8sbG9jOkh0LGV4cGVjdGVkOiR0fSl9aWYoTWVbMF1pbnN0YW5jZW9mIEFycmF5JiZNZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3BuKyIsIHRva2VuOiAiK2tlKTtzd2l0Y2goTWVbMF0pe2Nhc2UgMTpkdC5wdXNoKGtlKSx3dC5wdXNoKEN0Lnl5dGV4dCksWC5wdXNoKEN0Lnl5bGxvYyksZHQucHVzaChNZVsxXSksa2U9bnVsbCxudD1DdC55eWxlbmcsVT1DdC55eXRleHQseHQ9Q3QueXlsaW5lbm8sSHQ9Q3QueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih3ZT10aGlzLnByb2R1Y3Rpb25zX1tNZVsxXV1bMV0sR2UuJD13dFt3dC5sZW5ndGgtd2VdLEdlLl8kPXtmaXJzdF9saW5lOlhbWC5sZW5ndGgtKHdlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6WFtYLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlhbWC5sZW5ndGgtKHdlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlhbWC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEl0JiYoR2UuXyQucmFuZ2U9W1hbWC5sZW5ndGgtKHdlfHwxKV0ucmFuZ2VbMF0sWFtYLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShHZSxbVSxudCx4dCxaLnl5LE1lWzFdLHd0LFhdLmNvbmNhdChxdCkpLHR5cGVvZiB2ZTwidSIpcmV0dXJuIHZlO3dlJiYoZHQ9ZHQuc2xpY2UoMCwtMSp3ZSoyKSx3dD13dC5zbGljZSgwLC0xKndlKSxYPVguc2xpY2UoMCwtMSp3ZSkpLGR0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bTWVbMV1dWzBdKSx3dC5wdXNoKEdlLiQpLFgucHVzaChHZS5fJCksX2U9cHRbZHRbZHQubGVuZ3RoLTJdXVtkdFtkdC5sZW5ndGgtMV1dLGR0LnB1c2goX2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxzdD1mdW5jdGlvbigpe3ZhciBidD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5dCxkdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih5dCxkdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoeXQpfSxzZXRJbnB1dDpmdW5jdGlvbihtdCx5dCl7cmV0dXJuIHRoaXMueXk9eXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBtdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPW10LHRoaXMubWF0Y2hlZCs9bXQ7dmFyIHl0PW10Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG10fSx1bnB1dDpmdW5jdGlvbihtdCl7dmFyIHl0PW10Lmxlbmd0aCxkdD1tdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC15dCksdGhpcy5vZmZzZXQtPXl0O3ZhciBodD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxkdC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWR0Lmxlbmd0aC0xKTt2YXIgd3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmR0PyhkdC5sZW5ndGg9PT1odC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK2h0W2h0Lmxlbmd0aC1kdC5sZW5ndGhdLmxlbmd0aC1kdFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3d0WzBdLHd0WzBdK3RoaXMueXlsZW5nLXl0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24obXQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShtdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK210LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMubWF0Y2g7cmV0dXJuIG10Lmxlbmd0aDwyMCYmKG10Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1tdC5sZW5ndGgpKSwobXQuc3Vic3RyKDAsMjApKyhtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMucGFzdElucHV0KCkseXQ9bmV3IEFycmF5KG10Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIG10K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt5dCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24obXQseXQpe3ZhciBkdCxodCx3dDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYod3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYod3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaHQ9bXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGh0JiYodGhpcy55eWxpbmVubys9aHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46aHQ/aHRbaHQubGVuZ3RoLTFdLmxlbmd0aC1odFtodC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbittdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1tdFswXSx0aGlzLm1hdGNoKz1tdFswXSx0aGlzLm1hdGNoZXM9bXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UobXRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW10WzBdLGR0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHl0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGR0KXJldHVybiBkdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWCBpbiB3dCl0aGlzW1hdPXd0W1hdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG10LHl0LGR0LGh0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHd0PXRoaXMuX2N1cnJlbnRSdWxlcygpLFg9MDtYPHd0Lmxlbmd0aDtYKyspaWYoZHQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t3dFtYXV0pLGR0JiYoIXl0fHxkdFswXS5sZW5ndGg+eXRbMF0ubGVuZ3RoKSl7aWYoeXQ9ZHQsaHQ9WCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtdD10aGlzLnRlc3RfbWF0Y2goZHQsd3RbWF0pLG10IT09ITEpcmV0dXJuIG10O2lmKHRoaXMuX2JhY2t0cmFjayl7eXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geXQ/KG10PXRoaXMudGVzdF9tYXRjaCh5dCx3dFtodF0pLG10IT09ITE/bXQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLm5leHQoKTtyZXR1cm4geXR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHl0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goeXQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB5dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5dD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHl0KXtyZXR1cm4geXQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5dHx8MCkseXQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1t5dF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeXQpe3RoaXMuYmVnaW4oeXQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHl0LGR0LGh0LHd0KXtzd2l0Y2goaHQpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAyMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMjtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTQ7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNjtjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiJ0eHQiO2Nhc2UgMTc6cmV0dXJuIDU7Y2FzZSAxODpyZXR1cm4gNztjYXNlIDE5OnJldHVybiJ2YWx1ZSI7Y2FzZSAyMDpyZXR1cm4gMjJ9fSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86cGllXGIpL2ksL14oPzpzaG93RGF0YVxiKS9pLC9eKD86Oltcc10qW1xkXSsoPzpcLltcZF0rKT8pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDcsOSwxMSwxNCwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBidH0oKTtpdC5sZXhlcj1zdDtmdW5jdGlvbiB1dCgpe3RoaXMueXk9e319cmV0dXJuIHV0LnByb3RvdHlwZT1pdCxpdC5QYXJzZXI9dXQsbmV3IHV0fSgpO0owdC5wYXJzZXI9SjB0O2NvbnN0IEVxZT1KMHQsc1J0PUxmLnBpZSxDSz17c2VjdGlvbnM6e30sc2hvd0RhdGE6ITEsY29uZmlnOnNSdH07bGV0IF9LPUNLLnNlY3Rpb25zLHRndD1DSy5zaG93RGF0YTtjb25zdCBUcWU9c3RydWN0dXJlZENsb25lKHNSdCksQ3FlPXtnZXRDb25maWc6KCk9PnN0cnVjdHVyZWRDbG9uZShUcWUpLGNsZWFyOigpPT57X0s9c3RydWN0dXJlZENsb25lKENLLnNlY3Rpb25zKSx0Z3Q9Q0suc2hvd0RhdGEsYXAoKX0sc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYixzZXRBY2NUaXRsZTpjZyxnZXRBY2NUaXRsZTpvcCxzZXRBY2NEZXNjcmlwdGlvbjpjcCxnZXRBY2NEZXNjcmlwdGlvbjp1cCxhZGRTZWN0aW9uOihpLGEpPT57aT1EZChpLExlKCkpLF9LW2ldPT09dm9pZCAwJiYoX0tbaV09YSxVdC5kZWJ1ZyhgYWRkZWQgbmV3IHNlY3Rpb246ICR7aX0sIHdpdGggdmFsdWU6ICR7YX1gKSl9LGdldFNlY3Rpb25zOigpPT5fSyxjbGVhbnVwVmFsdWU6aT0+KGkuc3Vic3RyaW5nKDAsMSk9PT0iOiImJihpPWkuc3Vic3RyaW5nKDEpLnRyaW0oKSksTnVtYmVyKGkudHJpbSgpKSksc2V0U2hvd0RhdGE6aT0+e3RndD1pfSxnZXRTaG93RGF0YTooKT0+dGd0fSxfcWU9aT0+YAogIC5waWVDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGggOiAke2kucGllU3Ryb2tlV2lkdGh9OwogICAgb3BhY2l0eSA6ICR7aS5waWVPcGFjaXR5fTsKICB9CiAgLnBpZU91dGVyQ2lyY2xlewogICAgc3Ryb2tlOiAke2kucGllT3V0ZXJTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5waWVPdXRlclN0cm9rZVdpZHRofTsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5waWVUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZVRpdGxlVGV4dFNpemV9OwogICAgZmlsbDogJHtpLnBpZVRpdGxlVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgfQogIC5zbGljZSB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHtpLnBpZVNlY3Rpb25UZXh0Q29sb3J9OwogICAgZm9udC1zaXplOiR7aS5waWVTZWN0aW9uVGV4dFNpemV9OwogICAgLy8gZmlsbDogd2hpdGU7CiAgfQogIC5sZWdlbmQgdGV4dCB7CiAgICBmaWxsOiAke2kucGllTGVnZW5kVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7aS5waWVMZWdlbmRUZXh0U2l6ZX07CiAgfQpgLFNxZT1pPT57Y29uc3QgYT1PYmplY3QuZW50cmllcyhpKS5tYXAocD0+KHtsYWJlbDpwWzBdLHZhbHVlOnBbMV19KSkuc29ydCgocCx2KT0+di52YWx1ZS1wLnZhbHVlKTtyZXR1cm4gJDdlKCkudmFsdWUocD0+cC52YWx1ZSkoYSl9LEFxZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkVxZSxkYjpDcWUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHB0LFU7VXQuZGVidWcoYHJlbmRlcmluZyBwaWUgY2hhcnQKYCtpKTtjb25zdCB2PXAuZGIsbT1MZSgpLGI9aWR0KHYuZ2V0Q29uZmlnKCksbS5waWUpLEU9NDUwLF89KChVPShwdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSk9PW51bGw/dm9pZCAwOnB0LnBhcmVudEVsZW1lbnQpPT1udWxsP3ZvaWQgMDpVLm9mZnNldFdpZHRoKT8/Yi51c2VXaWR0aCxMPWZkdChhKTtMLmF0dHIoInZpZXdCb3giLGAwIDAgJHtffSAke0V9YCksb2coTCxFLF8sYi51c2VNYXhXaWR0aCk7Y29uc3QgTj00MCxCPTE4LGo9NCxSPUwuYXBwZW5kKCJnIik7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitfLzIrIiwiK0UvMisiKSIpO2NvbnN0e3RoZW1lVmFyaWFibGVzOnp9PW07bGV0W0tdPSRBKHoucGllT3V0ZXJTdHJva2VXaWR0aCk7Sz8/KEs9Mik7Y29uc3QgaXQ9Yi50ZXh0UG9zaXRpb24sc3Q9TWF0aC5taW4oXyxFKS8yLU4sdXQ9TEEoKS5pbm5lclJhZGl1cygwKS5vdXRlclJhZGl1cyhzdCksYnQ9TEEoKS5pbm5lclJhZGl1cyhzdCppdCkub3V0ZXJSYWRpdXMoc3QqaXQpO1IuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApLmF0dHIoInIiLHN0K0svMikuYXR0cigiY2xhc3MiLCJwaWVPdXRlckNpcmNsZSIpO2NvbnN0IG10PXYuZ2V0U2VjdGlvbnMoKSx5dD1TcWUobXQpLGR0PVt6LnBpZTEsei5waWUyLHoucGllMyx6LnBpZTQsei5waWU1LHoucGllNix6LnBpZTcsei5waWU4LHoucGllOSx6LnBpZTEwLHoucGllMTEsei5waWUxMl0saHQ9eDF0KGR0KTtSLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKHl0KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHV0KS5hdHRyKCJmaWxsIix4dD0+aHQoeHQuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IHd0PTA7T2JqZWN0LmtleXMobXQpLmZvckVhY2goeHQ9Pnt3dCs9bXRbeHRdfSksUi5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh5dCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KHh0PT4oeHQuZGF0YS52YWx1ZS93dCoxMDApLnRvRml4ZWQoMCkrIiUiKS5hdHRyKCJ0cmFuc2Zvcm0iLHh0PT4idHJhbnNsYXRlKCIrYnQuY2VudHJvaWQoeHQpKyIpIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLFIuYXBwZW5kKCJ0ZXh0IikudGV4dCh2LmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtKEUtNTApLzIpLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7Y29uc3QgWD1SLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoaHQuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCh4dCxudCk9Pntjb25zdCBPdD1CK2osTnQ9T3QqaHQuZG9tYWluKCkubGVuZ3RoLzIscXQ9MTIqQixDdD1udCpPdC1OdDtyZXR1cm4idHJhbnNsYXRlKCIrcXQrIiwiK0N0KyIpIn0pO1guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEIpLmF0dHIoImhlaWdodCIsQikuc3R5bGUoImZpbGwiLGh0KS5zdHlsZSgic3Ryb2tlIixodCksWC5kYXRhKHl0KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixCK2opLmF0dHIoInkiLEItaikudGV4dCh4dD0+e2NvbnN0e2xhYmVsOm50LHZhbHVlOk90fT14dC5kYXRhO3JldHVybiB2LmdldFNob3dEYXRhKCk/YCR7bnR9IFske090fV1gOm50fSl9fSxzdHlsZXM6X3FlfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgZWd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oTWUsdmUsR2UsS2Upe2ZvcihHZT1HZXx8e30sS2U9TWUubGVuZ3RoO0tlLS07R2VbTWVbS2VdXT12ZSk7cmV0dXJuIEdlfSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx2PVsxLDZdLG09WzEsN10sYj1bMSw1LDEzLDE1LDE3LDE5LDIwLDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDM4LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxFPVsxLDUsNiwxMywxNSwxNywxOSwyMCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNywzOCw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sXz1bMzIsMzMsMzRdLEw9WzIsN10sTj1bMSwxM10sQj1bMSwxN10saj1bMSwxOF0sUj1bMSwxOV0sej1bMSwyMF0sSz1bMSwyMV0saXQ9WzEsMjJdLHN0PVsxLDIzXSx1dD1bMSwyNF0sYnQ9WzEsMjVdLG10PVsxLDI2XSx5dD1bMSwyN10sZHQ9WzEsMzBdLGh0PVsxLDMxXSx3dD1bMSwzMl0sWD1bMSwzM10scHQ9WzEsMzRdLFU9WzEsMzVdLHh0PVsxLDM2XSxudD1bMSwzN10sT3Q9WzEsMzhdLE50PVsxLDM5XSxxdD1bMSw0MF0sQ3Q9WzEsNDFdLFo9WzEsNDJdLFR0PVsxLDU3XSxIdD1bMSw1OF0sSXQ9WzUsMjIsMjYsMzIsMzMsMzQsNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxTUEFDRTo1LFFVQURSQU5UOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYXhpc0RldGFpbHM6MTAscXVhZHJhbnREZXRhaWxzOjExLHBvaW50czoxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLHRleHQ6MjEscG9pbnRfc3RhcnQ6MjIscG9pbnRfeDoyMyxwb2ludF95OjI0LCJYLUFYSVMiOjI1LCJBWElTLVRFWFQtREVMSU1JVEVSIjoyNiwiWS1BWElTIjoyNyxRVUFEUkFOVF8xOjI4LFFVQURSQU5UXzI6MjksUVVBRFJBTlRfMzozMCxRVUFEUkFOVF80OjMxLE5FV0xJTkU6MzIsU0VNSTozMyxFT0Y6MzQsYWxwaGFOdW1Ub2tlbjozNSx0ZXh0Tm9UYWdzVG9rZW46MzYsU1RSOjM3LE1EX1NUUjozOCxhbHBoYU51bTozOSxQVU5DVFVBVElPTjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLENPTU1BOjQ0LFBMVVM6NDUsRVFVQUxTOjQ2LE1VTFQ6NDcsRE9UOjQ4LEJSS1Q6NDksVU5ERVJTQ09SRTo1MCxNSU5VUzo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiU1BBQ0UiLDY6IlFVQURSQU5UIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyMjoicG9pbnRfc3RhcnQiLDIzOiJwb2ludF94IiwyNDoicG9pbnRfeSIsMjU6IlgtQVhJUyIsMjY6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDI3OiJZLUFYSVMiLDI4OiJRVUFEUkFOVF8xIiwyOToiUVVBRFJBTlRfMiIsMzA6IlFVQURSQU5UXzMiLDMxOiJRVUFEUkFOVF80IiwzMjoiTkVXTElORSIsMzM6IlNFTUkiLDM0OiJFT0YiLDM3OiJTVFIiLDM4OiJNRF9TVFIiLDQwOiJQVU5DVFVBVElPTiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiQ09NTUEiLDQ1OiJQTFVTIiw0NjoiRVFVQUxTIiw0NzoiTVVMVCIsNDg6IkRPVCIsNDk6IkJSS1QiLDUwOiJVTkRFUlNDT1JFIiw1MToiTUlOVVMifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzksMF0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzEyLDRdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMSwyXSxbMTEsMl0sWzExLDJdLFsxMSwyXSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIxLDJdLFsyMSwxXSxbMjEsMV0sWzM5LDFdLFszOSwyXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHZlLEdlLEtlLHdlLF9lLCR0LHJlKXt2YXIgaWU9JHQubGVuZ3RoLTE7c3dpdGNoKF9lKXtjYXNlIDEyOnRoaXMuJD0kdFtpZV0udHJpbSgpLHdlLnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPSR0W2llXS50cmltKCksd2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPSR0W2llXS50cmltKCksd2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE2OndlLmFkZFNlY3Rpb24oJHRbaWVdLnN1YnN0cig4KSksdGhpcy4kPSR0W2llXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNzp3ZS5hZGRQb2ludCgkdFtpZS0zXSwkdFtpZS0xXSwkdFtpZV0pO2JyZWFrO2Nhc2UgMTg6d2Uuc2V0WEF4aXNMZWZ0VGV4dCgkdFtpZS0yXSksd2Uuc2V0WEF4aXNSaWdodFRleHQoJHRbaWVdKTticmVhaztjYXNlIDE5OiR0W2llLTFdLnRleHQrPSIg4p+2ICIsd2Uuc2V0WEF4aXNMZWZ0VGV4dCgkdFtpZS0xXSk7YnJlYWs7Y2FzZSAyMDp3ZS5zZXRYQXhpc0xlZnRUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyMTp3ZS5zZXRZQXhpc0JvdHRvbVRleHQoJHRbaWUtMl0pLHdlLnNldFlBeGlzVG9wVGV4dCgkdFtpZV0pO2JyZWFrO2Nhc2UgMjI6JHRbaWUtMV0udGV4dCs9IiDin7YgIix3ZS5zZXRZQXhpc0JvdHRvbVRleHQoJHRbaWUtMV0pO2JyZWFrO2Nhc2UgMjM6d2Uuc2V0WUF4aXNCb3R0b21UZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNDp3ZS5zZXRRdWFkcmFudDFUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNTp3ZS5zZXRRdWFkcmFudDJUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNjp3ZS5zZXRRdWFkcmFudDNUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNzp3ZS5zZXRRdWFkcmFudDRUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9e3RleHQ6JHRbaWVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDMyOnRoaXMuJD17dGV4dDokdFtpZS0xXS50ZXh0KyIiKyR0W2llXSx0eXBlOiR0W2llLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXt0ZXh0OiR0W2llXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e3RleHQ6JHRbaWVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9JHRbaWVdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPSR0W2llLTFdKyIiKyR0W2llXTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OmEsNjpmLDMyOnAsMzM6diwzNDptfSx7MTpbM119LHszOjgsNDoyLDU6YSw2OmYsMzI6cCwzMzp2LDM0Om19LHszOjksNDoyLDU6YSw2OmYsMzI6cCwzMzp2LDM0Om19LGkoYixbMiw0XSx7NzoxMH0pLGkoRSxbMiwyOF0pLGkoRSxbMiwyOV0pLGkoRSxbMiwzMF0pLHsxOlsyLDFdfSx7MTpbMiwyXX0saShfLEwsezg6MTEsOToxMiwxMDoxNCwxMToxNSwxMjoxNiwyMToyOCwzNToyOSwxOlsyLDNdLDU6TiwxMzpCLDE1OmosMTc6UiwxOTp6LDIwOkssMjU6aXQsMjc6c3QsMjg6dXQsMjk6YnQsMzA6bXQsMzE6eXQsMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9KSxpKGIsWzIsNV0pLHs0OjQzLDMyOnAsMzM6diwzNDptfSxpKF8sTCx7MTA6MTQsMTE6MTUsMTI6MTYsMjE6MjgsMzU6MjksOTo0NCw1Ok4sMTM6QiwxNTpqLDE3OlIsMTk6eiwyMDpLLDI1Oml0LDI3OnN0LDI4OnV0LDI5OmJ0LDMwOm10LDMxOnl0LDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSksaShfLFsyLDldKSxpKF8sWzIsMTBdKSxpKF8sWzIsMTFdKSx7MTQ6WzEsNDVdfSx7MTY6WzEsNDZdfSx7MTg6WzEsNDddfSxpKF8sWzIsMTVdKSxpKF8sWzIsMTZdKSx7MjE6NDgsMzU6MjksMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9LHsyMTo0OSwzNToyOSwzNzpkdCwzODpodCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wn0sezIxOjUwLDM1OjI5LDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSx7MjE6NTEsMzU6MjksMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9LHsyMTo1MiwzNToyOSwzNzpkdCwzODpodCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wn0sezIxOjUzLDM1OjI5LDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSx7NTpUdCwyMjpbMSw1NF0sMzU6NTYsMzY6NTUsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlosNTE6SHR9LGkoSXQsWzIsMzFdKSxpKEl0LFsyLDMzXSksaShJdCxbMiwzNF0pLGkoSXQsWzIsMzddKSxpKEl0LFsyLDM4XSksaShJdCxbMiwzOV0pLGkoSXQsWzIsNDBdKSxpKEl0LFsyLDQxXSksaShJdCxbMiw0Ml0pLGkoSXQsWzIsNDNdKSxpKEl0LFsyLDQ0XSksaShJdCxbMiw0NV0pLGkoSXQsWzIsNDZdKSxpKEl0LFsyLDQ3XSksaShiLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiwxMl0pLGkoXyxbMiwxM10pLGkoXyxbMiwxNF0pLGkoXyxbMiwyMF0sezM2OjU1LDM1OjU2LDU6VHQsMjY6WzEsNTldLDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksaShfLFsyLDIzXSx7MzY6NTUsMzU6NTYsNTpUdCwyNjpbMSw2MF0sNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlosNTE6SHR9KSxpKF8sWzIsMjRdLHszNjo1NSwzNTo1Niw1OlR0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksaShfLFsyLDI1XSx7MzY6NTUsMzU6NTYsNTpUdCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wiw1MTpIdH0pLGkoXyxbMiwyNl0sezM2OjU1LDM1OjU2LDU6VHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlosNTE6SHR9KSxpKF8sWzIsMjddLHszNjo1NSwzNTo1Niw1OlR0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksezIzOlsxLDYxXX0saShJdCxbMiwzMl0pLGkoSXQsWzIsNDhdKSxpKEl0LFsyLDQ5XSksaShJdCxbMiw1MF0pLGkoXyxbMiwxOV0sezM1OjI5LDIxOjYyLDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSksaShfLFsyLDIyXSx7MzU6MjksMjE6NjMsMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9KSx7MjQ6WzEsNjRdfSxpKF8sWzIsMThdLHszNjo1NSwzNTo1Niw1OlR0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksaShfLFsyLDIxXSx7MzY6NTUsMzU6NTYsNTpUdCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wiw1MTpIdH0pLGkoXyxbMiwxN10pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSw5OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHZlLEdlKXtpZihHZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHZlKTtlbHNle3ZhciBLZT1uZXcgRXJyb3IodmUpO3Rocm93IEtlLmhhc2g9R2UsS2V9fSxwYXJzZTpmdW5jdGlvbih2ZSl7dmFyIEdlPXRoaXMsS2U9WzBdLHdlPVtdLF9lPVtudWxsXSwkdD1bXSxyZT10aGlzLnRhYmxlLGllPSIiLE9lPTAsb2U9MCxOZT0yLG1lPTEsY249JHQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5YT17eXk6e319O2Zvcih2YXIgZGEgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxkYSkmJih5YS55eVtkYV09dGhpcy55eVtkYV0pO2xpLnNldElucHV0KHZlLHlhLnl5KSx5YS55eS5sZXhlcj1saSx5YS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbGkueXlsbG9jPiJ1IiYmKGxpLnl5bGxvYz17fSk7dmFyIE9vPWxpLnl5bGxvYzskdC5wdXNoKE9vKTt2YXIgZHM9bGkub3B0aW9ucyYmbGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHlhLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXlhLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIERyKCl7dmFyIEdzO3JldHVybiBHcz13ZS5wb3AoKXx8bGkubGV4KCl8fG1lLHR5cGVvZiBHcyE9Im51bWJlciImJihHcyBpbnN0YW5jZW9mIEFycmF5JiYod2U9R3MsR3M9d2UucG9wKCkpLEdzPUdlLnN5bWJvbHNfW0dzXXx8R3MpLEdzfWZvcih2YXIgbnIsZGksRWUsWW4sSGU9e30sVGksZ24sa3MscWE7Oyl7aWYoZGk9S2VbS2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZGldP0VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbZGldOigobnI9PT1udWxsfHx0eXBlb2YgbnI+InUiKSYmKG5yPURyKCkpLEVlPXJlW2RpXSYmcmVbZGldW25yXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgTGE9IiI7cWE9W107Zm9yKFRpIGluIHJlW2RpXSl0aGlzLnRlcm1pbmFsc19bVGldJiZUaT5OZSYmcWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RpXSsiJyIpO2xpLnNob3dQb3NpdGlvbj9MYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPZSsxKStgOgpgK2xpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tucl18fG5yKSsiJyI6TGE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT2UrMSkrIjogVW5leHBlY3RlZCAiKyhucj09bWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bbnJdfHxucikrIiciKSx0aGlzLnBhcnNlRXJyb3IoTGEse3RleHQ6bGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW25yXXx8bnIsbGluZTpsaS55eWxpbmVubyxsb2M6T28sZXhwZWN0ZWQ6cWF9KX1pZihFZVswXWluc3RhbmNlb2YgQXJyYXkmJkVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrZGkrIiwgdG9rZW46ICIrbnIpO3N3aXRjaChFZVswXSl7Y2FzZSAxOktlLnB1c2gobnIpLF9lLnB1c2gobGkueXl0ZXh0KSwkdC5wdXNoKGxpLnl5bGxvYyksS2UucHVzaChFZVsxXSksbnI9bnVsbCxvZT1saS55eWxlbmcsaWU9bGkueXl0ZXh0LE9lPWxpLnl5bGluZW5vLE9vPWxpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoZ249dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEhlLiQ9X2VbX2UubGVuZ3RoLWduXSxIZS5fJD17Zmlyc3RfbGluZTokdFskdC5sZW5ndGgtKGdufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6JHRbJHQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46JHRbJHQubGVuZ3RoLShnbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjokdFskdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGRzJiYoSGUuXyQucmFuZ2U9WyR0WyR0Lmxlbmd0aC0oZ258fDEpXS5yYW5nZVswXSwkdFskdC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxZbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSGUsW2llLG9lLE9lLHlhLnl5LEVlWzFdLF9lLCR0XS5jb25jYXQoY24pKSx0eXBlb2YgWW48InUiKXJldHVybiBZbjtnbiYmKEtlPUtlLnNsaWNlKDAsLTEqZ24qMiksX2U9X2Uuc2xpY2UoMCwtMSpnbiksJHQ9JHQuc2xpY2UoMCwtMSpnbikpLEtlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzBdKSxfZS5wdXNoKEhlLiQpLCR0LnB1c2goSGUuXyQpLGtzPXJlW0tlW0tlLmxlbmd0aC0yXV1bS2VbS2UubGVuZ3RoLTFdXSxLZS5wdXNoKGtzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sa2U9ZnVuY3Rpb24oKXt2YXIgTWU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR2UsS2Upe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR2UsS2UpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEdlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odmUsR2Upe3JldHVybiB0aGlzLnl5PUdlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD12ZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXZlLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz12ZSx0aGlzLm1hdGNoZWQrPXZlO3ZhciBHZT12ZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEdlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx2ZX0sdW5wdXQ6ZnVuY3Rpb24odmUpe3ZhciBHZT12ZS5sZW5ndGgsS2U9dmUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD12ZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR2UpLHRoaXMub2Zmc2V0LT1HZTt2YXIgd2U9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksS2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1LZS5sZW5ndGgtMSk7dmFyIF9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLZT8oS2UubGVuZ3RoPT09d2UubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt3ZVt3ZS5sZW5ndGgtS2UubGVuZ3RoXS5sZW5ndGgtS2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtfZVswXSxfZVswXSt0aGlzLnl5bGVuZy1HZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHZlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHZlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odmUubGVuZ3RoPjIwPyIuLi4iOiIiKSt2ZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLm1hdGNoO3JldHVybiB2ZS5sZW5ndGg8MjAmJih2ZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdmUubGVuZ3RoKSksKHZlLnN1YnN0cigwLDIwKSsodmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLnBhc3RJbnB1dCgpLEdlPW5ldyBBcnJheSh2ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB2ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHZlLEdlKXt2YXIgS2Usd2UsX2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKF9lPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKF9lLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHdlPXZlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx3ZSYmKHRoaXMueXlsaW5lbm8rPXdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOndlP3dlW3dlLmxlbmd0aC0xXS5sZW5ndGgtd2Vbd2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dmVbMF0sdGhpcy5tYXRjaCs9dmVbMF0sdGhpcy5tYXRjaGVzPXZlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHZlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz12ZVswXSxLZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxLZSlyZXR1cm4gS2U7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyICR0IGluIF9lKXRoaXNbJHRdPV9lWyR0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB2ZSxHZSxLZSx3ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBfZT10aGlzLl9jdXJyZW50UnVsZXMoKSwkdD0wOyR0PF9lLmxlbmd0aDskdCsrKWlmKEtlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbX2VbJHRdXSksS2UmJighR2V8fEtlWzBdLmxlbmd0aD5HZVswXS5sZW5ndGgpKXtpZihHZT1LZSx3ZT0kdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih2ZT10aGlzLnRlc3RfbWF0Y2goS2UsX2VbJHRdKSx2ZSE9PSExKXJldHVybiB2ZTtpZih0aGlzLl9iYWNrdHJhY2spe0dlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEdlPyh2ZT10aGlzLnRlc3RfbWF0Y2goR2UsX2Vbd2VdKSx2ZSE9PSExP3ZlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5uZXh0KCk7cmV0dXJuIEdlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEdlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHZSl7cmV0dXJuIEdlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR2V8fDApLEdlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEdlKXt0aGlzLmJlZ2luKEdlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHZSxLZSx3ZSxfZSl7c3dpdGNoKHdlKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMzI7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiAyNTtjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OnJldHVybiAyNjtjYXNlIDE2OnJldHVybiAyODtjYXNlIDE3OnJldHVybiAyOTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksMjI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDIzO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSAzMTpyZXR1cm4gNjtjYXNlIDMyOnJldHVybiA0MztjYXNlIDMzOnJldHVybiJDT0xPTiI7Y2FzZSAzNDpyZXR1cm4gNDU7Y2FzZSAzNTpyZXR1cm4gNDQ7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDY7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gNDk7Y2FzZSA0MDpyZXR1cm4gNTA7Y2FzZSA0MTpyZXR1cm4gNDg7Y2FzZSA0MjpyZXR1cm4gNDE7Y2FzZSA0MzpyZXR1cm4gNTE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiA0MDtjYXNlIDQ4OnJldHVybiAzNH19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XHMqOlxzKlxbXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzpccypcXSAqKS9pLC9eKD86XHMqLFxzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86ICpxdWFkcmFudENoYXJ0ICopL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKS9pLC9eKD86OykvaSwvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7cG9pbnRfeTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIzLDI2LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE1lfSgpO0Z0LmxleGVyPWtlO2Z1bmN0aW9uIHBuKCl7dGhpcy55eT17fX1yZXR1cm4gcG4ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1wbixuZXcgcG59KCk7ZWd0LnBhcnNlcj1lZ3Q7Y29uc3QgTHFlPWVndCxmZz1uRHQoKTtjbGFzcyBNcWV7Y29uc3RydWN0b3IoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7dmFyIGEsZixwLHYsbSxiLEUsXyxMLE4sQixqLFIseixLLGl0LHN0LHV0O3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKGE9TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOmEuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigoZj1MZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Zi5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChwPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KCh2PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KChtPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDptLnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKEU9TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkUueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKF89TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOl8ueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoTD1MZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6TC55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChOPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpOLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChCPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpCLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChqPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKFI9TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlIucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KCh6PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp6LnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoSz1MZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Sy54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKGl0PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDppdC55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKHN0PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpzdC5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKHV0PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp1dC5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDpmZy5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6ZmcucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOmZnLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDpmZy5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOmZnLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOmZnLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOmZnLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOmZnLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOmZnLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDpmZy5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOmZnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6ZmcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOmZnLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmZnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmZnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLFV0LmluZm8oImNsZWFyIGNhbGxlZCIpfXNldERhdGEoYSl7dGhpcy5kYXRhPXsuLi50aGlzLmRhdGEsLi4uYX19YWRkUG9pbnRzKGEpe3RoaXMuZGF0YS5wb2ludHM9Wy4uLmEsLi4udGhpcy5kYXRhLnBvaW50c119c2V0Q29uZmlnKGEpe1V0LnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIsYSksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLmF9fXNldFRoZW1lQ29uZmlnKGEpe1V0LnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixhKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLmF9fWNhbGN1bGF0ZVNwYWNlKGEsZixwLHYpe2NvbnN0IG09dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsYj17dG9wOmE9PT0idG9wIiYmZj9tOjAsYm90dG9tOmE9PT0iYm90dG9tIiYmZj9tOjB9LEU9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsXz17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZwP0U6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmcD9FOjB9LEw9dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixOPXt0b3A6dj9MOjB9LEI9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK18ubGVmdCxqPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytiLnRvcCtOLnRvcCxSPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItXy5sZWZ0LV8ucmlnaHQsej10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1iLnRvcC1iLmJvdHRvbS1OLnRvcCxLPVIvMixpdD16LzI7cmV0dXJue3hBeGlzU3BhY2U6Yix5QXhpc1NwYWNlOl8sdGl0bGVTcGFjZTpOLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpCLHF1YWRyYW50VG9wOmoscXVhZHJhbnRXaWR0aDpSLHF1YWRyYW50SGFsZldpZHRoOksscXVhZHJhbnRIZWlnaHQ6eixxdWFkcmFudEhhbGZIZWlnaHQ6aXR9fX1nZXRBeGlzTGFiZWxzKGEsZixwLHYpe2NvbnN0e3F1YWRyYW50U3BhY2U6bSx0aXRsZVNwYWNlOmJ9PXYse3F1YWRyYW50SGFsZkhlaWdodDpFLHF1YWRyYW50SGVpZ2h0Ol8scXVhZHJhbnRMZWZ0OkwscXVhZHJhbnRIYWxmV2lkdGg6TixxdWFkcmFudFRvcDpCLHF1YWRyYW50V2lkdGg6an09bSxSPXRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPT09MCx6PVtdO3JldHVybiB0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCYmZiYmei5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc0xlZnRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwseDpMKyhSP04vMjowKSx5OmE9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytiLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytCK18rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpSPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQmJmYmJnoucHVzaCh7dGV4dDp0aGlzLmRhdGEueEF4aXNSaWdodFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4OkwrTisoUj9OLzI6MCkseTphPT09InRvcCI/dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrYi50b3A6dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrQitfK3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxmb250U2l6ZTp0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Uj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjowfSksdGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCYmcCYmei5wdXNoKHt0ZXh0OnRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCx4OnRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb249PT0ibGVmdCI/dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmc6dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcrTCtqK3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyx5OkIrXy0oUj9FLzI6MCksZm9udFNpemU6dGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOlI/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246LTkwfSksdGhpcy5kYXRhLnlBeGlzVG9wVGV4dCYmcCYmei5wdXNoKHt0ZXh0OnRoaXMuZGF0YS55QXhpc1RvcFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCx4OnRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb249PT0ibGVmdCI/dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmc6dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcrTCtqK3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyx5OkIrRS0oUj9FLzI6MCksZm9udFNpemU6dGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOlI/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246LTkwfSksen1nZXRRdWFkcmFudHMoYSl7Y29uc3R7cXVhZHJhbnRTcGFjZTpmfT1hLHtxdWFkcmFudEhhbGZIZWlnaHQ6cCxxdWFkcmFudExlZnQ6dixxdWFkcmFudEhhbGZXaWR0aDptLHF1YWRyYW50VG9wOmJ9PWYsRT1be3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MVRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp2K20seTpiLHdpZHRoOm0saGVpZ2h0OnAsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MUZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDJUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6dix5OmIsd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50M1RleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M1RleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp2LHk6YitwLHdpZHRoOm0saGVpZ2h0OnAsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M0ZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDRUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6dittLHk6YitwLHdpZHRoOm0saGVpZ2h0OnAsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NEZpbGx9XTtmb3IoY29uc3QgXyBvZiBFKV8udGV4dC54PV8ueCtfLndpZHRoLzIsdGhpcy5kYXRhLnBvaW50cy5sZW5ndGg9PT0wPyhfLnRleHQueT1fLnkrXy5oZWlnaHQvMixfLnRleHQuaG9yaXpvbnRhbFBvcz0ibWlkZGxlIik6KF8udGV4dC55PV8ueSt0aGlzLmNvbmZpZy5xdWFkcmFudFRleHRUb3BQYWRkaW5nLF8udGV4dC5ob3Jpem9udGFsUG9zPSJ0b3AiKTtyZXR1cm4gRX1nZXRRdWFkcmFudFBvaW50cyhhKXtjb25zdHtxdWFkcmFudFNwYWNlOmZ9PWEse3F1YWRyYW50SGVpZ2h0OnAscXVhZHJhbnRMZWZ0OnYscXVhZHJhbnRUb3A6bSxxdWFkcmFudFdpZHRoOmJ9PWYsRT1CVSgpLmRvbWFpbihbMCwxXSkucmFuZ2UoW3YsYit2XSksXz1CVSgpLmRvbWFpbihbMCwxXSkucmFuZ2UoW3ArbSxtXSk7cmV0dXJuIHRoaXMuZGF0YS5wb2ludHMubWFwKE49Pih7eDpFKE4ueCkseTpfKE4ueSksZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHJhZGl1czp0aGlzLmNvbmZpZy5wb2ludFJhZGl1cyx0ZXh0Ont0ZXh0Ok4udGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludFRleHRGaWxsLHg6RShOLngpLHk6XyhOLnkpK3RoaXMuY29uZmlnLnBvaW50VGV4dFBhZGRpbmcsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoidG9wIixmb250U2l6ZTp0aGlzLmNvbmZpZy5wb2ludExhYmVsRm9udFNpemUscm90YXRpb246MH19KSl9Z2V0Qm9yZGVycyhhKXtjb25zdCBmPXRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aC8yLHtxdWFkcmFudFNwYWNlOnB9PWEse3F1YWRyYW50SGFsZkhlaWdodDp2LHF1YWRyYW50SGVpZ2h0Om0scXVhZHJhbnRMZWZ0OmIscXVhZHJhbnRIYWxmV2lkdGg6RSxxdWFkcmFudFRvcDpfLHF1YWRyYW50V2lkdGg6TH09cDtyZXR1cm5be3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yi1mLHkxOl8seDI6YitMK2YseTI6X30se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6YitMLHkxOl8rZix4MjpiK0wseTI6XyttLWZ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmItZix5MTpfK20seDI6YitMK2YseTI6XyttfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLHkxOl8rZix4MjpiLHkyOl8rbS1mfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK0UseTE6XytmLHgyOmIrRSx5MjpfK20tZn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6YitmLHkxOl8rdix4MjpiK0wtZix5MjpfK3Z9XX1nZXRUaXRsZShhKXtpZihhKXJldHVybnt0ZXh0OnRoaXMuZGF0YS50aXRsZVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50VGl0bGVGaWxsLGZvbnRTaXplOnRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUsaG9yaXpvbnRhbFBvczoidG9wIix2ZXJ0aWNhbFBvczoiY2VudGVyIixyb3RhdGlvbjowLHk6dGhpcy5jb25maWcudGl0bGVQYWRkaW5nLHg6dGhpcy5jb25maWcuY2hhcnRXaWR0aC8yfX1idWlsZCgpe2NvbnN0IGE9dGhpcy5jb25maWcuc2hvd1hBeGlzJiYhISh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dHx8dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KSxmPXRoaXMuY29uZmlnLnNob3dZQXhpcyYmISEodGhpcy5kYXRhLnlBeGlzVG9wVGV4dHx8dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCkscD10aGlzLmNvbmZpZy5zaG93VGl0bGUmJiEhdGhpcy5kYXRhLnRpdGxlVGV4dCx2PXRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPjA/ImJvdHRvbSI6dGhpcy5jb25maWcueEF4aXNQb3NpdGlvbixtPXRoaXMuY2FsY3VsYXRlU3BhY2UodixhLGYscCk7cmV0dXJue3BvaW50czp0aGlzLmdldFF1YWRyYW50UG9pbnRzKG0pLHF1YWRyYW50czp0aGlzLmdldFF1YWRyYW50cyhtKSxheGlzTGFiZWxzOnRoaXMuZ2V0QXhpc0xhYmVscyh2LGEsZixtKSxib3JkZXJMaW5lczp0aGlzLmdldEJvcmRlcnMobSksdGl0bGU6dGhpcy5nZXRUaXRsZShwKX19fWNvbnN0IElxZT1MZSgpO2Z1bmN0aW9uIE01KGkpe3JldHVybiBEZChpLnRyaW0oKSxJcWUpfWNvbnN0IHgwPW5ldyBNcWU7ZnVuY3Rpb24gRHFlKGkpe3gwLnNldERhdGEoe3F1YWRyYW50MVRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIE9xZShpKXt4MC5zZXREYXRhKHtxdWFkcmFudDJUZXh0Ok01KGkudGV4dCl9KX1mdW5jdGlvbiBOcWUoaSl7eDAuc2V0RGF0YSh7cXVhZHJhbnQzVGV4dDpNNShpLnRleHQpfSl9ZnVuY3Rpb24gUHFlKGkpe3gwLnNldERhdGEoe3F1YWRyYW50NFRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIEZxZShpKXt4MC5zZXREYXRhKHt4QXhpc0xlZnRUZXh0Ok01KGkudGV4dCl9KX1mdW5jdGlvbiBCcWUoaSl7eDAuc2V0RGF0YSh7eEF4aXNSaWdodFRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIFJxZShpKXt4MC5zZXREYXRhKHt5QXhpc1RvcFRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIGpxZShpKXt4MC5zZXREYXRhKHt5QXhpc0JvdHRvbVRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uICRxZShpLGEsZil7eDAuYWRkUG9pbnRzKFt7eDphLHk6Zix0ZXh0Ok01KGkudGV4dCl9XSl9ZnVuY3Rpb24genFlKGkpe3gwLnNldENvbmZpZyh7Y2hhcnRXaWR0aDppfSl9ZnVuY3Rpb24gcXFlKGkpe3gwLnNldENvbmZpZyh7Y2hhcnRIZWlnaHQ6aX0pfWZ1bmN0aW9uIEhxZSgpe2NvbnN0IGk9TGUoKSx7dGhlbWVWYXJpYWJsZXM6YSxxdWFkcmFudENoYXJ0OmZ9PWk7cmV0dXJuIGYmJngwLnNldENvbmZpZyhmKSx4MC5zZXRUaGVtZUNvbmZpZyh7cXVhZHJhbnQxRmlsbDphLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDphLnF1YWRyYW50MkZpbGwscXVhZHJhbnQzRmlsbDphLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDphLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6YS5xdWFkcmFudDFUZXh0RmlsbCxxdWFkcmFudDJUZXh0RmlsbDphLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOmEucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6YS5xdWFkcmFudDRUZXh0RmlsbCxxdWFkcmFudFBvaW50RmlsbDphLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDphLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6YS5xdWFkcmFudFhBeGlzVGV4dEZpbGwscXVhZHJhbnRZQXhpc1RleHRGaWxsOmEucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmEucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6YS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudFRpdGxlRmlsbDphLnF1YWRyYW50VGl0bGVGaWxsfSkseDAuc2V0RGF0YSh7dGl0bGVUZXh0OkRiKCl9KSx4MC5idWlsZCgpfWNvbnN0IEdxZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkxxZSxkYjp7c2V0V2lkdGg6enFlLHNldEhlaWdodDpxcWUsc2V0UXVhZHJhbnQxVGV4dDpEcWUsc2V0UXVhZHJhbnQyVGV4dDpPcWUsc2V0UXVhZHJhbnQzVGV4dDpOcWUsc2V0UXVhZHJhbnQ0VGV4dDpQcWUsc2V0WEF4aXNMZWZ0VGV4dDpGcWUsc2V0WEF4aXNSaWdodFRleHQ6QnFlLHNldFlBeGlzVG9wVGV4dDpScWUsc2V0WUF4aXNCb3R0b21UZXh0OmpxZSxhZGRQb2ludDokcWUsZ2V0UXVhZHJhbnREYXRhOkhxZSxjbGVhcjpmdW5jdGlvbigpe3gwLmNsZWFyKCksYXAoKX0sc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3Asc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYixnZXRBY2NEZXNjcmlwdGlvbjp1cCxzZXRBY2NEZXNjcmlwdGlvbjpjcH0scmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHd0LFgscHQ7ZnVuY3Rpb24gdihVKXtyZXR1cm4gVT09PSJ0b3AiPyJoYW5naW5nIjoibWlkZGxlIn1mdW5jdGlvbiBtKFUpe3JldHVybiBVPT09ImxlZnQiPyJzdGFydCI6Im1pZGRsZSJ9ZnVuY3Rpb24gYihVKXtyZXR1cm5gdHJhbnNsYXRlKCR7VS54fSwgJHtVLnl9KSByb3RhdGUoJHtVLnJvdGF0aW9ufHwwfSlgfWNvbnN0IEU9TGUoKTtVdC5kZWJ1ZyhgUmVuZGVyaW5nIHF1YWRyYW50IGNoYXJ0CmAraSk7Y29uc3QgXz1FLnNlY3VyaXR5TGV2ZWw7bGV0IEw7Xz09PSJzYW5kYm94IiYmKEw9eXIoIiNpIithKSk7Y29uc3QgQj15cihfPT09InNhbmRib3giP0wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPSIke2F9Il1gKSxqPUIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtYWluIiksUj0oKHd0PUUucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnd0LmNoYXJ0V2lkdGgpfHw1MDAsej0oKFg9RS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6WC5jaGFydEhlaWdodCl8fDUwMDtvZyhCLHosUiwoKHB0PUUucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnB0LnVzZU1heFdpZHRoKXx8ITApLEIuYXR0cigidmlld0JveCIsIjAgMCAiK1IrIiAiK3opLHAuZGIuc2V0SGVpZ2h0KHopLHAuZGIuc2V0V2lkdGgoUik7Y29uc3QgSz1wLmRiLmdldFF1YWRyYW50RGF0YSgpLGl0PWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudHMiKSxzdD1qLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYm9yZGVyIiksdXQ9ai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnRzIiksYnQ9ai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVscyIpLG10PWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aXRsZSIpO0sudGl0bGUmJm10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLEsudGl0bGUuZmlsbCkuYXR0cigiZm9udC1zaXplIixLLnRpdGxlLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsdihLLnRpdGxlLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsbShLLnRpdGxlLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixiKEsudGl0bGUpKS50ZXh0KEsudGl0bGUudGV4dCksSy5ib3JkZXJMaW5lcyYmc3Quc2VsZWN0QWxsKCJsaW5lIikuZGF0YShLLmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixVPT5VLngxKS5hdHRyKCJ5MSIsVT0+VS55MSkuYXR0cigieDIiLFU9PlUueDIpLmF0dHIoInkyIixVPT5VLnkyKS5zdHlsZSgic3Ryb2tlIixVPT5VLnN0cm9rZUZpbGwpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFU9PlUuc3Ryb2tlV2lkdGgpO2NvbnN0IHl0PWl0LnNlbGVjdEFsbCgiZy5xdWFkcmFudCIpLmRhdGEoSy5xdWFkcmFudHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudCIpO3l0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLFU9PlUueCkuYXR0cigieSIsVT0+VS55KS5hdHRyKCJ3aWR0aCIsVT0+VS53aWR0aCkuYXR0cigiaGVpZ2h0IixVPT5VLmhlaWdodCkuYXR0cigiZmlsbCIsVT0+VS5maWxsKSx5dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixVPT5VLnRleHQuZmlsbCkuYXR0cigiZm9udC1zaXplIixVPT5VLnRleHQuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixVPT52KFUudGV4dC5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFU9Pm0oVS50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixVPT5iKFUudGV4dCkpLnRleHQoVT0+VS50ZXh0LnRleHQpLGJ0LnNlbGVjdEFsbCgiZy5sYWJlbCIpLmRhdGEoSy5heGlzTGFiZWxzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS50ZXh0KFU9PlUudGV4dCkuYXR0cigiZmlsbCIsVT0+VS5maWxsKS5hdHRyKCJmb250LXNpemUiLFU9PlUuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixVPT52KFUuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixVPT5tKFUudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFU9PmIoVSkpO2NvbnN0IGh0PXV0LnNlbGVjdEFsbCgiZy5kYXRhLXBvaW50IikuZGF0YShLLnBvaW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnQiKTtodC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixVPT5VLngpLmF0dHIoImN5IixVPT5VLnkpLmF0dHIoInIiLFU9PlUucmFkaXVzKS5hdHRyKCJmaWxsIixVPT5VLmZpbGwpLGh0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoVT0+VS50ZXh0LnRleHQpLmF0dHIoImZpbGwiLFU9PlUudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFU9PlUudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFU9PnYoVS50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsVT0+bShVLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFU9PmIoVS50ZXh0KSl9fSxzdHlsZXM6KCk9PiIifX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbmd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oTWUsdmUsR2UsS2Upe2ZvcihHZT1HZXx8e30sS2U9TWUubGVuZ3RoO0tlLS07R2VbTWVbS2VdXT12ZSk7cmV0dXJuIEdlfSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx2PVsxLDZdLG09WzUsNiw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNjIsNjNdLGI9WzEsMThdLEU9WzIsN10sXz1bMSwyMl0sTD1bMSwyM10sTj1bMSwyNF0sQj1bMSwyNV0saj1bMSwyNl0sUj1bMSwyN10sej1bMSwyMF0sSz1bMSwyOF0saXQ9WzEsMjldLHN0PVs2Miw2M10sdXQ9WzUsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDUxLDUzLDYyLDYzXSxidD1bMSw0N10sbXQ9WzEsNDhdLHl0PVsxLDQ5XSxkdD1bMSw1MF0saHQ9WzEsNTFdLHd0PVsxLDUyXSxYPVsxLDUzXSxwdD1bNTMsNTRdLFU9WzEsNjRdLHh0PVsxLDYwXSxudD1bMSw2MV0sT3Q9WzEsNjJdLE50PVsxLDYzXSxxdD1bMSw2NV0sQ3Q9WzEsNjldLFo9WzEsNzBdLFR0PVsxLDY3XSxIdD1bMSw2OF0sSXQ9WzUsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxGdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsTkVXTElORTo1LFJEOjYsZGlhZ3JhbTo3LEVPRjo4LGFjY190aXRsZTo5LGFjY190aXRsZV92YWx1ZToxMCxhY2NfZGVzY3I6MTEsYWNjX2Rlc2NyX3ZhbHVlOjEyLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTMscmVxdWlyZW1lbnREZWY6MTQsZWxlbWVudERlZjoxNSxyZWxhdGlvbnNoaXBEZWY6MTYscmVxdWlyZW1lbnRUeXBlOjE3LHJlcXVpcmVtZW50TmFtZToxOCxTVFJVQ1RfU1RBUlQ6MTkscmVxdWlyZW1lbnRCb2R5OjIwLElEOjIxLENPTE9OU0VQOjIyLGlkOjIzLFRFWFQ6MjQsdGV4dDoyNSxSSVNLOjI2LHJpc2tMZXZlbDoyNyxWRVJJRllNVEhEOjI4LHZlcmlmeVR5cGU6MjksU1RSVUNUX1NUT1A6MzAsUkVRVUlSRU1FTlQ6MzEsRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDozMixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6MzMsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6MzQsUEhZU0lDQUxfUkVRVUlSRU1FTlQ6MzUsREVTSUdOX0NPTlNUUkFJTlQ6MzYsTE9XX1JJU0s6MzcsTUVEX1JJU0s6MzgsSElHSF9SSVNLOjM5LFZFUklGWV9BTkFMWVNJUzo0MCxWRVJJRllfREVNT05TVFJBVElPTjo0MSxWRVJJRllfSU5TUEVDVElPTjo0MixWRVJJRllfVEVTVDo0MyxFTEVNRU5UOjQ0LGVsZW1lbnROYW1lOjQ1LGVsZW1lbnRCb2R5OjQ2LFRZUEU6NDcsdHlwZTo0OCxET0NSRUY6NDkscmVmOjUwLEVORF9BUlJPV19MOjUxLHJlbGF0aW9uc2hpcDo1MixMSU5FOjUzLEVORF9BUlJPV19SOjU0LENPTlRBSU5TOjU1LENPUElFUzo1NixERVJJVkVTOjU3LFNBVElTRklFUzo1OCxWRVJJRklFUzo1OSxSRUZJTkVTOjYwLFRSQUNFUzo2MSx1bnFTdHJpbmc6NjIscVN0cmluZzo2MywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiTkVXTElORSIsNjoiUkQiLDg6IkVPRiIsOToiYWNjX3RpdGxlIiwxMDoiYWNjX3RpdGxlX3ZhbHVlIiwxMToiYWNjX2Rlc2NyIiwxMjoiYWNjX2Rlc2NyX3ZhbHVlIiwxMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTk6IlNUUlVDVF9TVEFSVCIsMjE6IklEIiwyMjoiQ09MT05TRVAiLDI0OiJURVhUIiwyNjoiUklTSyIsMjg6IlZFUklGWU1USEQiLDMwOiJTVFJVQ1RfU1RPUCIsMzE6IlJFUVVJUkVNRU5UIiwzMjoiRlVOQ1RJT05BTF9SRVFVSVJFTUVOVCIsMzM6IklOVEVSRkFDRV9SRVFVSVJFTUVOVCIsMzQ6IlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UIiwzNToiUEhZU0lDQUxfUkVRVUlSRU1FTlQiLDM2OiJERVNJR05fQ09OU1RSQUlOVCIsMzc6IkxPV19SSVNLIiwzODoiTUVEX1JJU0siLDM5OiJISUdIX1JJU0siLDQwOiJWRVJJRllfQU5BTFlTSVMiLDQxOiJWRVJJRllfREVNT05TVFJBVElPTiIsNDI6IlZFUklGWV9JTlNQRUNUSU9OIiw0MzoiVkVSSUZZX1RFU1QiLDQ0OiJFTEVNRU5UIiw0NzoiVFlQRSIsNDk6IkRPQ1JFRiIsNTE6IkVORF9BUlJPV19MIiw1MzoiTElORSIsNTQ6IkVORF9BUlJPV19SIiw1NToiQ09OVEFJTlMiLDU2OiJDT1BJRVMiLDU3OiJERVJJVkVTIiw1ODoiU0FUSVNGSUVTIiw1OToiVkVSSUZJRVMiLDYwOiJSRUZJTkVTIiw2MToiVFJBQ0VTIiw2MjoidW5xU3RyaW5nIiw2MzoicVN0cmluZyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbMyw0XSxbNCwyXSxbNCwyXSxbNCwxXSxbNywwXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbMTQsNV0sWzIwLDVdLFsyMCw1XSxbMjAsNV0sWzIwLDVdLFsyMCwyXSxbMjAsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsxNSw1XSxbNDYsNV0sWzQ2LDVdLFs0NiwyXSxbNDYsMV0sWzE2LDVdLFsxNiw1XSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzE4LDFdLFsxOCwxXSxbMjMsMV0sWzIzLDFdLFsyNSwxXSxbMjUsMV0sWzQ1LDFdLFs0NSwxXSxbNDgsMV0sWzQ4LDFdLFs1MCwxXSxbNTAsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odmUsR2UsS2Usd2UsX2UsJHQscmUpe3ZhciBpZT0kdC5sZW5ndGgtMTtzd2l0Y2goX2Upe2Nhc2UgNDp0aGlzLiQ9JHRbaWVdLnRyaW0oKSx3ZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPSR0W2llXS50cmltKCksd2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTM6d2UuYWRkUmVxdWlyZW1lbnQoJHRbaWUtM10sJHRbaWUtNF0pO2JyZWFrO2Nhc2UgMTQ6d2Uuc2V0TmV3UmVxSWQoJHRbaWUtMl0pO2JyZWFrO2Nhc2UgMTU6d2Uuc2V0TmV3UmVxVGV4dCgkdFtpZS0yXSk7YnJlYWs7Y2FzZSAxNjp3ZS5zZXROZXdSZXFSaXNrKCR0W2llLTJdKTticmVhaztjYXNlIDE3OndlLnNldE5ld1JlcVZlcmlmeU1ldGhvZCgkdFtpZS0yXSk7YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9d2UuUmVxdWlyZW1lbnRUeXBlLlJFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXdlLlJlcXVpcmVtZW50VHlwZS5GVU5DVElPTkFMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXdlLlJlcXVpcmVtZW50VHlwZS5JTlRFUkZBQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9d2UuUmVxdWlyZW1lbnRUeXBlLlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXdlLlJlcXVpcmVtZW50VHlwZS5QSFlTSUNBTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI1OnRoaXMuJD13ZS5SZXF1aXJlbWVudFR5cGUuREVTSUdOX0NPTlNUUkFJTlQ7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9d2UuUmlza0xldmVsLkxPV19SSVNLO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXdlLlJpc2tMZXZlbC5NRURfUklTSzticmVhaztjYXNlIDI4OnRoaXMuJD13ZS5SaXNrTGV2ZWwuSElHSF9SSVNLO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPXdlLlZlcmlmeVR5cGUuVkVSSUZZX0FOQUxZU0lTO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPXdlLlZlcmlmeVR5cGUuVkVSSUZZX0RFTU9OU1RSQVRJT047YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9d2UuVmVyaWZ5VHlwZS5WRVJJRllfSU5TUEVDVElPTjticmVhaztjYXNlIDMyOnRoaXMuJD13ZS5WZXJpZnlUeXBlLlZFUklGWV9URVNUO2JyZWFrO2Nhc2UgMzM6d2UuYWRkRWxlbWVudCgkdFtpZS0zXSk7YnJlYWs7Y2FzZSAzNDp3ZS5zZXROZXdFbGVtZW50VHlwZSgkdFtpZS0yXSk7YnJlYWs7Y2FzZSAzNTp3ZS5zZXROZXdFbGVtZW50RG9jUmVmKCR0W2llLTJdKTticmVhaztjYXNlIDM4OndlLmFkZFJlbGF0aW9uc2hpcCgkdFtpZS0yXSwkdFtpZV0sJHRbaWUtNF0pO2JyZWFrO2Nhc2UgMzk6d2UuYWRkUmVsYXRpb25zaGlwKCR0W2llLTJdLCR0W2llLTRdLCR0W2llXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5DT05UQUlOUzticmVhaztjYXNlIDQxOnRoaXMuJD13ZS5SZWxhdGlvbnNoaXBzLkNPUElFUzticmVhaztjYXNlIDQyOnRoaXMuJD13ZS5SZWxhdGlvbnNoaXBzLkRFUklWRVM7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5WRVJJRklFUzticmVhaztjYXNlIDQ1OnRoaXMuJD13ZS5SZWxhdGlvbnNoaXBzLlJFRklORVM7YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5UUkFDRVM7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNjphLDk6ZiwxMTpwLDEzOnZ9LHsxOlszXX0sezM6OCw0OjIsNTpbMSw3XSw2OmEsOTpmLDExOnAsMTM6dn0sezU6WzEsOV19LHsxMDpbMSwxMF19LHsxMjpbMSwxMV19LGkobSxbMiw2XSksezM6MTIsNDoyLDY6YSw5OmYsMTE6cCwxMzp2fSx7MTpbMiwyXX0sezQ6MTcsNTpiLDc6MTMsODpFLDk6ZiwxMTpwLDEzOnYsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpMLDMzOk4sMzQ6QiwzNTpqLDM2OlIsNDQ6eiw2MjpLLDYzOml0fSxpKG0sWzIsNF0pLGkobSxbMiw1XSksezE6WzIsMV19LHs4OlsxLDMwXX0sezQ6MTcsNTpiLDc6MzEsODpFLDk6ZiwxMTpwLDEzOnYsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpMLDMzOk4sMzQ6QiwzNTpqLDM2OlIsNDQ6eiw2MjpLLDYzOml0fSx7NDoxNyw1OmIsNzozMiw4OkUsOTpmLDExOnAsMTM6diwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpfLDMyOkwsMzM6TiwzNDpCLDM1OmosMzY6Uiw0NDp6LDYyOkssNjM6aXR9LHs0OjE3LDU6Yiw3OjMzLDg6RSw5OmYsMTE6cCwxMzp2LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6TCwzMzpOLDM0OkIsMzU6aiwzNjpSLDQ0OnosNjI6Syw2MzppdH0sezQ6MTcsNTpiLDc6MzQsODpFLDk6ZiwxMTpwLDEzOnYsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpMLDMzOk4sMzQ6QiwzNTpqLDM2OlIsNDQ6eiw2MjpLLDYzOml0fSx7NDoxNyw1OmIsNzozNSw4OkUsOTpmLDExOnAsMTM6diwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpfLDMyOkwsMzM6TiwzNDpCLDM1OmosMzY6Uiw0NDp6LDYyOkssNjM6aXR9LHsxODozNiw2MjpbMSwzN10sNjM6WzEsMzhdfSx7NDU6MzksNjI6WzEsNDBdLDYzOlsxLDQxXX0sezUxOlsxLDQyXSw1MzpbMSw0M119LGkoc3QsWzIsMjBdKSxpKHN0LFsyLDIxXSksaShzdCxbMiwyMl0pLGkoc3QsWzIsMjNdKSxpKHN0LFsyLDI0XSksaShzdCxbMiwyNV0pLGkodXQsWzIsNDldKSxpKHV0LFsyLDUwXSksezE6WzIsM119LHs4OlsyLDhdfSx7ODpbMiw5XX0sezg6WzIsMTBdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezE5OlsxLDQ0XX0sezE5OlsyLDQ3XX0sezE5OlsyLDQ4XX0sezE5OlsxLDQ1XX0sezE5OlsyLDUzXX0sezE5OlsyLDU0XX0sezUyOjQ2LDU1OmJ0LDU2Om10LDU3Onl0LDU4OmR0LDU5Omh0LDYwOnd0LDYxOlh9LHs1Mjo1NCw1NTpidCw1NjptdCw1Nzp5dCw1ODpkdCw1OTpodCw2MDp3dCw2MTpYfSx7NTpbMSw1NV19LHs1OlsxLDU2XX0sezUzOlsxLDU3XX0saShwdCxbMiw0MF0pLGkocHQsWzIsNDFdKSxpKHB0LFsyLDQyXSksaShwdCxbMiw0M10pLGkocHQsWzIsNDRdKSxpKHB0LFsyLDQ1XSksaShwdCxbMiw0Nl0pLHs1NDpbMSw1OF19LHs1OlUsMjA6NTksMjE6eHQsMjQ6bnQsMjY6T3QsMjg6TnQsMzA6cXR9LHs1OkN0LDMwOlosNDY6NjYsNDc6VHQsNDk6SHR9LHsyMzo3MSw2MjpLLDYzOml0fSx7MjM6NzIsNjI6Syw2MzppdH0saShJdCxbMiwxM10pLHsyMjpbMSw3M119LHsyMjpbMSw3NF19LHsyMjpbMSw3NV19LHsyMjpbMSw3Nl19LHs1OlUsMjA6NzcsMjE6eHQsMjQ6bnQsMjY6T3QsMjg6TnQsMzA6cXR9LGkoSXQsWzIsMTldKSxpKEl0LFsyLDMzXSksezIyOlsxLDc4XX0sezIyOlsxLDc5XX0sezU6Q3QsMzA6Wiw0Njo4MCw0NzpUdCw0OTpIdH0saShJdCxbMiwzN10pLGkoSXQsWzIsMzhdKSxpKEl0LFsyLDM5XSksezIzOjgxLDYyOkssNjM6aXR9LHsyNTo4Miw2MjpbMSw4M10sNjM6WzEsODRdfSx7Mjc6ODUsMzc6WzEsODZdLDM4OlsxLDg3XSwzOTpbMSw4OF19LHsyOTo4OSw0MDpbMSw5MF0sNDE6WzEsOTFdLDQyOlsxLDkyXSw0MzpbMSw5M119LGkoSXQsWzIsMThdKSx7NDg6OTQsNjI6WzEsOTVdLDYzOlsxLDk2XX0sezUwOjk3LDYyOlsxLDk4XSw2MzpbMSw5OV19LGkoSXQsWzIsMzZdKSx7NTpbMSwxMDBdfSx7NTpbMSwxMDFdfSx7NTpbMiw1MV19LHs1OlsyLDUyXX0sezU6WzEsMTAyXX0sezU6WzIsMjZdfSx7NTpbMiwyN119LHs1OlsyLDI4XX0sezU6WzEsMTAzXX0sezU6WzIsMjldfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezU6WzIsMzJdfSx7NTpbMSwxMDRdfSx7NTpbMiw1NV19LHs1OlsyLDU2XX0sezU6WzEsMTA1XX0sezU6WzIsNTddfSx7NTpbMiw1OF19LHs1OlUsMjA6MTA2LDIxOnh0LDI0Om50LDI2Ok90LDI4Ok50LDMwOnF0fSx7NTpVLDIwOjEwNywyMTp4dCwyNDpudCwyNjpPdCwyODpOdCwzMDpxdH0sezU6VSwyMDoxMDgsMjE6eHQsMjQ6bnQsMjY6T3QsMjg6TnQsMzA6cXR9LHs1OlUsMjA6MTA5LDIxOnh0LDI0Om50LDI2Ok90LDI4Ok50LDMwOnF0fSx7NTpDdCwzMDpaLDQ2OjExMCw0NzpUdCw0OTpIdH0sezU6Q3QsMzA6Wiw0NjoxMTEsNDc6VHQsNDk6SHR9LGkoSXQsWzIsMTRdKSxpKEl0LFsyLDE1XSksaShJdCxbMiwxNl0pLGkoSXQsWzIsMTddKSxpKEl0LFsyLDM0XSksaShJdCxbMiwzNV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSwzMDpbMiwzXSwzMTpbMiw4XSwzMjpbMiw5XSwzMzpbMiwxMF0sMzQ6WzIsMTFdLDM1OlsyLDEyXSwzNzpbMiw0N10sMzg6WzIsNDhdLDQwOlsyLDUzXSw0MTpbMiw1NF0sODM6WzIsNTFdLDg0OlsyLDUyXSw4NjpbMiwyNl0sODc6WzIsMjddLDg4OlsyLDI4XSw5MDpbMiwyOV0sOTE6WzIsMzBdLDkyOlsyLDMxXSw5MzpbMiwzMl0sOTU6WzIsNTVdLDk2OlsyLDU2XSw5ODpbMiw1N10sOTk6WzIsNThdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHZlLEdlKXtpZihHZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHZlKTtlbHNle3ZhciBLZT1uZXcgRXJyb3IodmUpO3Rocm93IEtlLmhhc2g9R2UsS2V9fSxwYXJzZTpmdW5jdGlvbih2ZSl7dmFyIEdlPXRoaXMsS2U9WzBdLHdlPVtdLF9lPVtudWxsXSwkdD1bXSxyZT10aGlzLnRhYmxlLGllPSIiLE9lPTAsb2U9MCxOZT0yLG1lPTEsY249JHQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5YT17eXk6e319O2Zvcih2YXIgZGEgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxkYSkmJih5YS55eVtkYV09dGhpcy55eVtkYV0pO2xpLnNldElucHV0KHZlLHlhLnl5KSx5YS55eS5sZXhlcj1saSx5YS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbGkueXlsbG9jPiJ1IiYmKGxpLnl5bGxvYz17fSk7dmFyIE9vPWxpLnl5bGxvYzskdC5wdXNoKE9vKTt2YXIgZHM9bGkub3B0aW9ucyYmbGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHlhLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXlhLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIERyKCl7dmFyIEdzO3JldHVybiBHcz13ZS5wb3AoKXx8bGkubGV4KCl8fG1lLHR5cGVvZiBHcyE9Im51bWJlciImJihHcyBpbnN0YW5jZW9mIEFycmF5JiYod2U9R3MsR3M9d2UucG9wKCkpLEdzPUdlLnN5bWJvbHNfW0dzXXx8R3MpLEdzfWZvcih2YXIgbnIsZGksRWUsWW4sSGU9e30sVGksZ24sa3MscWE7Oyl7aWYoZGk9S2VbS2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZGldP0VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbZGldOigobnI9PT1udWxsfHx0eXBlb2YgbnI+InUiKSYmKG5yPURyKCkpLEVlPXJlW2RpXSYmcmVbZGldW25yXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgTGE9IiI7cWE9W107Zm9yKFRpIGluIHJlW2RpXSl0aGlzLnRlcm1pbmFsc19bVGldJiZUaT5OZSYmcWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RpXSsiJyIpO2xpLnNob3dQb3NpdGlvbj9MYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPZSsxKStgOgpgK2xpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tucl18fG5yKSsiJyI6TGE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT2UrMSkrIjogVW5leHBlY3RlZCAiKyhucj09bWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bbnJdfHxucikrIiciKSx0aGlzLnBhcnNlRXJyb3IoTGEse3RleHQ6bGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW25yXXx8bnIsbGluZTpsaS55eWxpbmVubyxsb2M6T28sZXhwZWN0ZWQ6cWF9KX1pZihFZVswXWluc3RhbmNlb2YgQXJyYXkmJkVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrZGkrIiwgdG9rZW46ICIrbnIpO3N3aXRjaChFZVswXSl7Y2FzZSAxOktlLnB1c2gobnIpLF9lLnB1c2gobGkueXl0ZXh0KSwkdC5wdXNoKGxpLnl5bGxvYyksS2UucHVzaChFZVsxXSksbnI9bnVsbCxvZT1saS55eWxlbmcsaWU9bGkueXl0ZXh0LE9lPWxpLnl5bGluZW5vLE9vPWxpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoZ249dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEhlLiQ9X2VbX2UubGVuZ3RoLWduXSxIZS5fJD17Zmlyc3RfbGluZTokdFskdC5sZW5ndGgtKGdufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6JHRbJHQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46JHRbJHQubGVuZ3RoLShnbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjokdFskdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGRzJiYoSGUuXyQucmFuZ2U9WyR0WyR0Lmxlbmd0aC0oZ258fDEpXS5yYW5nZVswXSwkdFskdC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxZbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSGUsW2llLG9lLE9lLHlhLnl5LEVlWzFdLF9lLCR0XS5jb25jYXQoY24pKSx0eXBlb2YgWW48InUiKXJldHVybiBZbjtnbiYmKEtlPUtlLnNsaWNlKDAsLTEqZ24qMiksX2U9X2Uuc2xpY2UoMCwtMSpnbiksJHQ9JHQuc2xpY2UoMCwtMSpnbikpLEtlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzBdKSxfZS5wdXNoKEhlLiQpLCR0LnB1c2goSGUuXyQpLGtzPXJlW0tlW0tlLmxlbmd0aC0yXV1bS2VbS2UubGVuZ3RoLTFdXSxLZS5wdXNoKGtzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sa2U9ZnVuY3Rpb24oKXt2YXIgTWU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR2UsS2Upe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR2UsS2UpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEdlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odmUsR2Upe3JldHVybiB0aGlzLnl5PUdlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD12ZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXZlLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz12ZSx0aGlzLm1hdGNoZWQrPXZlO3ZhciBHZT12ZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEdlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx2ZX0sdW5wdXQ6ZnVuY3Rpb24odmUpe3ZhciBHZT12ZS5sZW5ndGgsS2U9dmUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD12ZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR2UpLHRoaXMub2Zmc2V0LT1HZTt2YXIgd2U9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksS2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1LZS5sZW5ndGgtMSk7dmFyIF9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLZT8oS2UubGVuZ3RoPT09d2UubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt3ZVt3ZS5sZW5ndGgtS2UubGVuZ3RoXS5sZW5ndGgtS2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtfZVswXSxfZVswXSt0aGlzLnl5bGVuZy1HZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHZlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHZlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odmUubGVuZ3RoPjIwPyIuLi4iOiIiKSt2ZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLm1hdGNoO3JldHVybiB2ZS5sZW5ndGg8MjAmJih2ZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdmUubGVuZ3RoKSksKHZlLnN1YnN0cigwLDIwKSsodmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLnBhc3RJbnB1dCgpLEdlPW5ldyBBcnJheSh2ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB2ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHZlLEdlKXt2YXIgS2Usd2UsX2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKF9lPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKF9lLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHdlPXZlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx3ZSYmKHRoaXMueXlsaW5lbm8rPXdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOndlP3dlW3dlLmxlbmd0aC0xXS5sZW5ndGgtd2Vbd2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dmVbMF0sdGhpcy5tYXRjaCs9dmVbMF0sdGhpcy5tYXRjaGVzPXZlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHZlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz12ZVswXSxLZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxLZSlyZXR1cm4gS2U7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyICR0IGluIF9lKXRoaXNbJHRdPV9lWyR0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB2ZSxHZSxLZSx3ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBfZT10aGlzLl9jdXJyZW50UnVsZXMoKSwkdD0wOyR0PF9lLmxlbmd0aDskdCsrKWlmKEtlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbX2VbJHRdXSksS2UmJighR2V8fEtlWzBdLmxlbmd0aD5HZVswXS5sZW5ndGgpKXtpZihHZT1LZSx3ZT0kdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih2ZT10aGlzLnRlc3RfbWF0Y2goS2UsX2VbJHRdKSx2ZSE9PSExKXJldHVybiB2ZTtpZih0aGlzLl9iYWNrdHJhY2spe0dlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEdlPyh2ZT10aGlzLnRlc3RfbWF0Y2goR2UsX2Vbd2VdKSx2ZSE9PSExP3ZlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5uZXh0KCk7cmV0dXJuIEdlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEdlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHZSl7cmV0dXJuIEdlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR2V8fDApLEdlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEdlKXt0aGlzLmJlZ2luKEdlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHZSxLZSx3ZSxfZSl7c3dpdGNoKHdlKXtjYXNlIDA6cmV0dXJuInRpdGxlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDk7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxMTtjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIDU7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEyOnJldHVybiA4O2Nhc2UgMTM6cmV0dXJuIDY7Y2FzZSAxNDpyZXR1cm4gMTk7Y2FzZSAxNTpyZXR1cm4gMzA7Y2FzZSAxNjpyZXR1cm4gMjI7Y2FzZSAxNzpyZXR1cm4gMjE7Y2FzZSAxODpyZXR1cm4gMjQ7Y2FzZSAxOTpyZXR1cm4gMjY7Y2FzZSAyMDpyZXR1cm4gMjg7Y2FzZSAyMTpyZXR1cm4gMzE7Y2FzZSAyMjpyZXR1cm4gMzI7Y2FzZSAyMzpyZXR1cm4gMzM7Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyNTpyZXR1cm4gMzU7Y2FzZSAyNjpyZXR1cm4gMzY7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpyZXR1cm4gMzk7Y2FzZSAzMDpyZXR1cm4gNDA7Y2FzZSAzMTpyZXR1cm4gNDE7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDM7Y2FzZSAzNDpyZXR1cm4gNDQ7Y2FzZSAzNTpyZXR1cm4gNTU7Y2FzZSAzNjpyZXR1cm4gNTY7Y2FzZSAzNzpyZXR1cm4gNTc7Y2FzZSAzODpyZXR1cm4gNTg7Y2FzZSAzOTpyZXR1cm4gNTk7Y2FzZSA0MDpyZXR1cm4gNjA7Y2FzZSA0MTpyZXR1cm4gNjE7Y2FzZSA0MjpyZXR1cm4gNDc7Y2FzZSA0MzpyZXR1cm4gNDk7Y2FzZSA0NDpyZXR1cm4gNTE7Y2FzZSA0NTpyZXR1cm4gNTQ7Y2FzZSA0NjpyZXR1cm4gNTM7Y2FzZSA0Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ5OnJldHVybiJxU3RyaW5nIjtjYXNlIDUwOnJldHVybiBLZS55eXRleHQ9S2UueXl0ZXh0LnRyaW0oKSw2Mn19LHJ1bGVzOlsvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDgsNDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDUwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE1lfSgpO0Z0LmxleGVyPWtlO2Z1bmN0aW9uIHBuKCl7dGhpcy55eT17fX1yZXR1cm4gcG4ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1wbixuZXcgcG59KCk7bmd0LnBhcnNlcj1uZ3Q7Y29uc3QgVnFlPW5ndDtsZXQgcmd0PVtdLGRwPXt9LE1QPXt9LGZrPXt9LElQPXt9O2NvbnN0IFVxZT17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxnZXRDb25maWc6KCk9PkxlKCkucmVxLGFkZFJlcXVpcmVtZW50OihpLGEpPT4oTVBbaV09PT12b2lkIDAmJihNUFtpXT17bmFtZTppLHR5cGU6YSxpZDpkcC5pZCx0ZXh0OmRwLnRleHQscmlzazpkcC5yaXNrLHZlcmlmeU1ldGhvZDpkcC52ZXJpZnlNZXRob2R9KSxkcD17fSxNUFtpXSksZ2V0UmVxdWlyZW1lbnRzOigpPT5NUCxzZXROZXdSZXFJZDppPT57ZHAhPT12b2lkIDAmJihkcC5pZD1pKX0sc2V0TmV3UmVxVGV4dDppPT57ZHAhPT12b2lkIDAmJihkcC50ZXh0PWkpfSxzZXROZXdSZXFSaXNrOmk9PntkcCE9PXZvaWQgMCYmKGRwLnJpc2s9aSl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDppPT57ZHAhPT12b2lkIDAmJihkcC52ZXJpZnlNZXRob2Q9aSl9LHNldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLHNldEFjY0Rlc2NyaXB0aW9uOmNwLGdldEFjY0Rlc2NyaXB0aW9uOnVwLGFkZEVsZW1lbnQ6aT0+KElQW2ldPT09dm9pZCAwJiYoSVBbaV09e25hbWU6aSx0eXBlOmZrLnR5cGUsZG9jUmVmOmZrLmRvY1JlZn0sVXQuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLGkpKSxmaz17fSxJUFtpXSksZ2V0RWxlbWVudHM6KCk9PklQLHNldE5ld0VsZW1lbnRUeXBlOmk9PntmayE9PXZvaWQgMCYmKGZrLnR5cGU9aSl9LHNldE5ld0VsZW1lbnREb2NSZWY6aT0+e2ZrIT09dm9pZCAwJiYoZmsuZG9jUmVmPWkpfSxhZGRSZWxhdGlvbnNoaXA6KGksYSxmKT0+e3JndC5wdXNoKHt0eXBlOmksc3JjOmEsZHN0OmZ9KX0sZ2V0UmVsYXRpb25zaGlwczooKT0+cmd0LGNsZWFyOigpPT57cmd0PVtdLGRwPXt9LE1QPXt9LGZrPXt9LElQPXt9LGFwKCl9fSxXcWU9aT0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2kuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke2kucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke2kucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke2kucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke2kucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CgpgLGlndD17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxhUnQ9e1JlcU1hcmtlcnM6aWd0LGluc2VydExpbmVFbmRpbmdzOihpLGEpPT57bGV0IGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixpZ3QuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGEubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGEubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsYS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO2YuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksZi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGEubGluZV9oZWlnaHQpLmF0dHIoInkxIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksZi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGEubGluZV9oZWlnaHQpLmF0dHIoIngxIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixpZ3QuQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLGEubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KmEubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGEubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMJHthLmxpbmVfaGVpZ2h0fSwke2EubGluZV9oZWlnaHQvMn0KICAgICAgTSR7YS5saW5lX2hlaWdodH0sJHthLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIEwwLCR7YS5saW5lX2hlaWdodH1gKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfX07bGV0IHhoPXt9LG9SdD0wO2NvbnN0IGNSdD0oaSxhKT0+aS5pbnNlcnQoInJlY3QiLCIjIithKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIseGgucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0Iix4aC5yZWN0X21pbl9oZWlnaHQrInB4IiksdVJ0PShpLGEsZik9PntsZXQgcD14aC5yZWN0X21pbl93aWR0aC8yLHY9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixhKS5hdHRyKCJ4IixwKS5hdHRyKCJ5Iix4aC5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLG09MDtmLmZvckVhY2goTD0+e209PTA/di5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4Iix4aC5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dChMKTp2LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLHhoLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5Iix4aC5saW5lX2hlaWdodCouNzUpLnRleHQoTCksbSsrfSk7bGV0IGI9MS41KnhoLnJlY3RfcGFkZGluZyxFPW0qeGgubGluZV9oZWlnaHQqLjc1LF89YitFO3JldHVybiBpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIseGgucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixfKS5hdHRyKCJ5MiIsXykse3RpdGxlTm9kZTp2LHk6X319LGxSdD0oaSxhLGYscCk9PntsZXQgdj1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsIikuYXR0cigiaWQiLGEpLmF0dHIoIngiLHhoLnJlY3RfcGFkZGluZykuYXR0cigieSIscCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIiksbT0wO2NvbnN0IGI9MzA7bGV0IEU9W107cmV0dXJuIGYuZm9yRWFjaChfPT57bGV0IEw9Xy5sZW5ndGg7Zm9yKDtMPmImJm08Mzspe2xldCBOPV8uc3Vic3RyaW5nKDAsYik7Xz1fLnN1YnN0cmluZyhiLF8ubGVuZ3RoKSxMPV8ubGVuZ3RoLEVbRS5sZW5ndGhdPU4sbSsrfWlmKG09PTMpe2xldCBOPUVbRS5sZW5ndGgtMV07RVtFLmxlbmd0aC0xXT1OLnN1YnN0cmluZygwLE4ubGVuZ3RoLTQpKyIuLi4ifWVsc2UgRVtFLmxlbmd0aF09XzttPTB9KSxFLmZvckVhY2goXz0+e3YuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHhoLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLHhoLmxpbmVfaGVpZ2h0KS50ZXh0KF8pfSksdn0sS3FlPShpLGEsZixwKT0+e2NvbnN0IHY9YS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxtPWEubm9kZSgpLmdldFBvaW50QXRMZW5ndGgodiouNSksYj0icmVsIitvUnQ7b1J0Kys7Y29uc3QgXz1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGIpLmF0dHIoIngiLG0ueCkuYXR0cigieSIsbS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChwKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrYikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4IixtLngtXy53aWR0aC8yKS5hdHRyKCJ5IixtLnktXy5oZWlnaHQvMikuYXR0cigid2lkdGgiLF8ud2lkdGgpLmF0dHIoImhlaWdodCIsXy5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSxZcWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtjb25zdCBtPWYuZWRnZShvTChhLnNyYyksb0woYS5kc3QpKSxiPVo3KCkueChmdW5jdGlvbihfKXtyZXR1cm4gXy54fSkueShmdW5jdGlvbihfKXtyZXR1cm4gXy55fSksRT1pLmluc2VydCgicGF0aCIsIiMiK3ApLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGIobS5wb2ludHMpKS5hdHRyKCJmaWxsIiwibm9uZSIpO2EudHlwZT09di5kYi5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP0UuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWXIuZ2V0VXJsKHhoLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIithLnR5cGUrIl9saW5lX2VuZGluZykiKTooRS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLEUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1lyLmdldFVybCh4aC5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrYVJ0LlJlcU1hcmtlcnMuQVJST1crIl9saW5lX2VuZGluZykiKSksS3FlKGksRSx4aCxgPDwke2EudHlwZX0+PmApfSxYcWU9KGksYSxmKT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2gocD0+e2xldCB2PWlbcF07cD1vTChwKSxVdC5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIscCk7Y29uc3QgbT1mLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwKSxiPSJyZXEtIitwLEU9Y1J0KG0sYik7bGV0IF89dVJ0KG0scCsiX3RpdGxlIixbYDw8JHt2LnR5cGV9Pj5gLGAke3YubmFtZX1gXSk7bFJ0KG0scCsiX2JvZHkiLFtgSWQ6ICR7di5pZH1gLGBUZXh0OiAke3YudGV4dH1gLGBSaXNrOiAke3Yucmlza31gLGBWZXJpZmljYXRpb246ICR7di52ZXJpZnlNZXRob2R9YF0sXy55KTtjb25zdCBMPUUubm9kZSgpLmdldEJCb3goKTthLnNldE5vZGUocCx7d2lkdGg6TC53aWR0aCxoZWlnaHQ6TC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnB9KX0pfSxRcWU9KGksYSxmKT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2gocD0+e2xldCB2PWlbcF07Y29uc3QgbT1vTChwKSxiPWYuYXBwZW5kKCJnIikuYXR0cigiaWQiLG0pLEU9ImVsZW1lbnQtIittLF89Y1J0KGIsRSk7bGV0IEw9dVJ0KGIsRSsiX3RpdGxlIixbIjw8RWxlbWVudD4+IixgJHtwfWBdKTtsUnQoYixFKyJfYm9keSIsW2BUeXBlOiAke3YudHlwZXx8Ik5vdCBTcGVjaWZpZWQifWAsYERvYyBSZWY6ICR7di5kb2NSZWZ8fCJOb25lIn1gXSxMLnkpO2NvbnN0IE49Xy5ub2RlKCkuZ2V0QkJveCgpO2Euc2V0Tm9kZShtLHt3aWR0aDpOLndpZHRoLGhlaWdodDpOLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6bX0pfSl9LFpxZT0oaSxhKT0+KGkuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1vTChmLnNyYyksdj1vTChmLmRzdCk7YS5zZXRFZGdlKHAsdix7cmVsYXRpb25zaGlwOmZ9KX0pLGkpLEpxZT1mdW5jdGlvbihpLGEpe2Eubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YhPT12b2lkIDAmJmEubm9kZShmKSE9PXZvaWQgMCYmKGkuc2VsZWN0KCIjIitmKSxpLnNlbGVjdCgiIyIrZikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGEubm9kZShmKS54LWEubm9kZShmKS53aWR0aC8yKSsiLCIrKGEubm9kZShmKS55LWEubm9kZShmKS5oZWlnaHQvMikrIiApIikpfSl9LG9MPWk9PmkucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLHRIZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOlZxZSxkYjpVcWUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57eGg9TGUoKS5yZXF1aXJlbWVudDtjb25zdCB2PXhoLnNlY3VyaXR5TGV2ZWw7bGV0IG07dj09PSJzYW5kYm94IiYmKG09eXIoIiNpIithKSk7Y29uc3QgRT15cih2PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPScke2F9J11gKTthUnQuaW5zZXJ0TGluZUVuZGluZ3MoRSx4aCk7Y29uc3QgXz1uZXcgYTEoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp4aC5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IEw9cC5kYi5nZXRSZXF1aXJlbWVudHMoKSxOPXAuZGIuZ2V0RWxlbWVudHMoKSxCPXAuZGIuZ2V0UmVsYXRpb25zaGlwcygpO1hxZShMLF8sRSksUXFlKE4sXyxFKSxacWUoQixfKSxlTChfKSxKcWUoRSxfKSxCLmZvckVhY2goZnVuY3Rpb24oaXQpe1lxZShFLGl0LF8sYSxwKX0pO2NvbnN0IGo9eGgucmVjdF9wYWRkaW5nLFI9RS5ub2RlKCkuZ2V0QkJveCgpLHo9Ui53aWR0aCtqKjIsSz1SLmhlaWdodCtqKjI7b2coRSxLLHoseGgudXNlTWF4V2lkdGgpLEUuYXR0cigidmlld0JveCIsYCR7Ui54LWp9ICR7Ui55LWp9ICR7en0gJHtLfWApfX0sc3R5bGVzOldxZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHNndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKHdlLF9lLCR0LHJlKXtmb3IoJHQ9JHR8fHt9LHJlPXdlLmxlbmd0aDtyZS0tOyR0W3dlW3JlXV09X2UpO3JldHVybiAkdH0sYT1bMSwyXSxmPVsxLDNdLHA9WzEsNF0sdj1bMiw0XSxtPVsxLDldLGI9WzEsMTFdLEU9WzEsMTNdLF89WzEsMTRdLEw9WzEsMTZdLE49WzEsMTddLEI9WzEsMThdLGo9WzEsMjRdLFI9WzEsMjVdLHo9WzEsMjZdLEs9WzEsMjddLGl0PVsxLDI4XSxzdD1bMSwyOV0sdXQ9WzEsMzBdLGJ0PVsxLDMxXSxtdD1bMSwzMl0seXQ9WzEsMzNdLGR0PVsxLDM0XSxodD1bMSwzNV0sd3Q9WzEsMzZdLFg9WzEsMzddLHB0PVsxLDM4XSxVPVsxLDM5XSx4dD1bMSw0MV0sbnQ9WzEsNDJdLE90PVsxLDQzXSxOdD1bMSw0NF0scXQ9WzEsNDVdLEN0PVsxLDQ2XSxaPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sVHQ9WzQsNSwxNiw1MCw1Miw1M10sSHQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sSXQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sRnQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OCw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sa2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0scG49WzY4LDY5LDcwXSxNZT1bMSwxMjBdLHZlPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxET1RURURfQVJST1c6NzQsU09MSURfQ1JPU1M6NzUsRE9UVEVEX0NST1NTOjc2LFNPTElEX1BPSU5UOjc3LERPVFRFRF9QT0lOVDo3OCxUWFQ6NzksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw2OiJTRCIsMTM6ImNyZWF0ZSIsMTQ6ImJveCIsMTU6InJlc3RPZkxpbmUiLDE2OiJlbmQiLDE4OiJhdXRvbnVtYmVyIiwxOToiTlVNIiwyMDoib2ZmIiwyMToiYWN0aXZhdGUiLDIzOiJkZWFjdGl2YXRlIiwyOToidGl0bGUiLDMwOiJsZWdhY3lfdGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoibG9vcCIsMzc6InJlY3QiLDM4OiJvcHQiLDM5OiJhbHQiLDQxOiJwYXIiLDQzOiJwYXJfb3ZlciIsNDQ6ImNyaXRpY2FsIiw0NjoiYnJlYWsiLDQ3OiJvcHRpb24iLDQ4OiJhbmQiLDQ5OiJlbHNlIiw1MDoicGFydGljaXBhbnQiLDUxOiJBUyIsNTI6InBhcnRpY2lwYW50X2FjdG9yIiw1MzoiZGVzdHJveSIsNTQ6Im5vdGUiLDU3OiJvdmVyIiw1OToibGlua3MiLDYwOiJsaW5rIiw2MToicHJvcGVydGllcyIsNjI6ImRldGFpbHMiLDY0OiIsIiw2NToibGVmdF9vZiIsNjY6InJpZ2h0X29mIiw2ODoiKyIsNjk6Ii0iLDcwOiJBQ1RPUiIsNzE6IlNPTElEX09QRU5fQVJST1ciLDcyOiJET1RURURfT1BFTl9BUlJPVyIsNzM6IlNPTElEX0FSUk9XIiw3NDoiRE9UVEVEX0FSUk9XIiw3NToiU09MSURfQ1JPU1MiLDc2OiJET1RURURfQ1JPU1MiLDc3OiJTT0xJRF9QT0lOVCIsNzg6IkRPVFRFRF9QT0lOVCIsNzk6IlRYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbMTAsMF0sWzEwLDJdLFsxMSwyXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDJdLFs5LDRdLFs5LDJdLFs5LDRdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs0NSwxXSxbNDUsNF0sWzQyLDFdLFs0Miw0XSxbNDAsMV0sWzQwLDRdLFsxMiw1XSxbMTIsM10sWzEyLDVdLFsxMiwzXSxbMTIsM10sWzI0LDRdLFsyNCw0XSxbMjUsM10sWzI2LDNdLFsyNywzXSxbMjgsM10sWzYzLDJdLFs2MywxXSxbNTgsM10sWzU4LDFdLFs1NSwxXSxbNTUsMV0sWzE3LDVdLFsxNyw1XSxbMTcsNF0sWzIyLDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzU2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKF9lLCR0LHJlLGllLE9lLG9lLE5lKXt2YXIgbWU9b2UubGVuZ3RoLTE7c3dpdGNoKE9lKXtjYXNlIDM6cmV0dXJuIGllLmFwcGx5KG9lW21lXSksb2VbbWVdO2Nhc2UgNDpjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpjYXNlIDEwOm9lW21lLTFdLnB1c2gob2VbbWVdKSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjYXNlIDExOmNhc2UgMTI6dGhpcy4kPW9lW21lXTticmVhaztjYXNlIDg6Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNTpvZVttZV0udHlwZT0iY3JlYXRlUGFydGljaXBhbnQiLHRoaXMuJD1vZVttZV07YnJlYWs7Y2FzZSAxNjpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTppZS5wYXJzZUJveERhdGEob2VbbWUtMl0pfSksb2VbbWUtMV0ucHVzaCh7dHlwZToiYm94RW5kIixib3hUZXh0Om9lW21lLTJdfSksdGhpcy4kPW9lW21lLTFdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihvZVttZS0yXSksc2VxdWVuY2VJbmRleFN0ZXA6TnVtYmVyKG9lW21lLTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIob2VbbWUtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOm9lW21lLTFdfTticmVhaztjYXNlIDIzOnRoaXMuJD17dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6b2VbbWUtMV19O2JyZWFrO2Nhc2UgMjk6aWUuc2V0RGlhZ3JhbVRpdGxlKG9lW21lXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1vZVttZV0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMzA6aWUuc2V0RGlhZ3JhbVRpdGxlKG9lW21lXS5zdWJzdHJpbmcoNykpLHRoaXMuJD1vZVttZV0uc3Vic3RyaW5nKDcpO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPW9lW21lXS50cmltKCksaWUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPW9lW21lXS50cmltKCksaWUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM0Om9lW21lLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpvZVttZS0yXSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPW9lW21lLTFdO2JyZWFrO2Nhc2UgMzU6b2VbbWUtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUkVDVF9TVEFSVH0pLG9lW21lLTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOmllLnBhcnNlTWVzc2FnZShvZVttZS0yXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDM2Om9lW21lLTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OmllLnBhcnNlTWVzc2FnZShvZVttZS0yXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5PUFRfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSAzNzpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJhbHRTdGFydCIsYWx0VGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQUxUX1NUQVJUfSksb2VbbWUtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSAzODpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUEFSX1NUQVJUfSksb2VbbWUtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOmllLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSAzOTpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUEFSX09WRVJfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDQwOm9lW21lLTFdLnVuc2hpZnQoe3R5cGU6ImNyaXRpY2FsU3RhcnQiLGNyaXRpY2FsVGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQ1JJVElDQUxfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA0MTpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJicmVha1N0YXJ0IixicmVha1RleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksb2VbbWUtMV0ucHVzaCh7dHlwZToiYnJlYWtFbmQiLG9wdFRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkJSRUFLX0VORH0pLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDQzOnRoaXMuJD1vZVttZS0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTFdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTn0sb2VbbWVdXSk7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9b2VbbWUtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OmllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5QQVJfQU5EfSxvZVttZV1dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1vZVttZS0zXS5jb25jYXQoW3t0eXBlOiJlbHNlIixhbHRUZXh0OmllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5BTFRfRUxTRX0sb2VbbWVdXSk7YnJlYWs7Y2FzZSA0ODpvZVttZS0zXS5kcmF3PSJwYXJ0aWNpcGFudCIsb2VbbWUtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLG9lW21lLTNdLmRlc2NyaXB0aW9uPWllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksdGhpcy4kPW9lW21lLTNdO2JyZWFrO2Nhc2UgNDk6b2VbbWUtMV0uZHJhdz0icGFydGljaXBhbnQiLG9lW21lLTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA1MDpvZVttZS0zXS5kcmF3PSJhY3RvciIsb2VbbWUtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLG9lW21lLTNdLmRlc2NyaXB0aW9uPWllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksdGhpcy4kPW9lW21lLTNdO2JyZWFrO2Nhc2UgNTE6b2VbbWUtMV0uZHJhdz0iYWN0b3IiLG9lW21lLTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA1MjpvZVttZS0xXS50eXBlPSJkZXN0cm95UGFydGljaXBhbnQiLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDUzOnRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpvZVttZS0yXSxhY3RvcjpvZVttZS0xXS5hY3Rvcix0ZXh0Om9lW21lXX1dO2JyZWFrO2Nhc2UgNTQ6b2VbbWUtMl09W10uY29uY2F0KG9lW21lLTFdLG9lW21lLTFdKS5zbGljZSgwLDIpLG9lW21lLTJdWzBdPW9lW21lLTJdWzBdLmFjdG9yLG9lW21lLTJdWzFdPW9lW21lLTJdWzFdLmFjdG9yLHRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDppZS5QTEFDRU1FTlQuT1ZFUixhY3RvcjpvZVttZS0yXS5zbGljZSgwLDIpLHRleHQ6b2VbbWVdfV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9W29lW21lLTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6b2VbbWUtMV0uYWN0b3IsdGV4dDpvZVttZV19XTticmVhaztjYXNlIDU2OnRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpvZVttZS0xXS5hY3Rvcix0ZXh0Om9lW21lXX1dO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPVtvZVttZS0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6b2VbbWUtMV0uYWN0b3IsdGV4dDpvZVttZV19XTticmVhaztjYXNlIDU4OnRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOm9lW21lLTFdLmFjdG9yLHRleHQ6b2VbbWVdfV07YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9W29lW21lLTJdLG9lW21lXV07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9b2VbbWVdO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWllLlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9aWUuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W29lW21lLTRdLG9lW21lLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOm9lW21lLTRdLmFjdG9yLHRvOm9lW21lLTFdLmFjdG9yLHNpZ25hbFR5cGU6b2VbbWUtM10sbXNnOm9lW21lXSxhY3RpdmF0ZTohMH0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjpvZVttZS0xXX1dO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPVtvZVttZS00XSxvZVttZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpvZVttZS00XS5hY3Rvcix0bzpvZVttZS0xXS5hY3RvcixzaWduYWxUeXBlOm9lW21lLTNdLG1zZzpvZVttZV19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpvZVttZS00XX1dO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPVtvZVttZS0zXSxvZVttZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpvZVttZS0zXS5hY3Rvcix0bzpvZVttZS0xXS5hY3RvcixzaWduYWxUeXBlOm9lW21lLTJdLG1zZzpvZVttZV19XTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOm9lW21lXX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9aWUuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDcwOnRoaXMuJD1pZS5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDcxOnRoaXMuJD1pZS5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDcyOnRoaXMuJD1pZS5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9aWUuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9aWUuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWllLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPWllLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc3OnRoaXMuJD1pZS5wYXJzZU1lc3NhZ2Uob2VbbWVdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrfX0sdGFibGU6W3szOjEsNDphLDU6Ziw2OnB9LHsxOlszXX0sezM6NSw0OmEsNTpmLDY6cH0sezM6Niw0OmEsNTpmLDY6cH0saShbMSw0LDUsMTMsMTQsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLHYsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw1MDpYLDUyOnB0LDUzOlUsNTQ6eHQsNTk6bnQsNjA6T3QsNjE6TnQsNjI6cXQsNzA6Q3R9LGkoWixbMiw1XSksezk6NDcsMTI6MTIsMTM6RSwxNDpfLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNTA6WCw1MjpwdCw1MzpVLDU0Onh0LDU5Om50LDYwOk90LDYxOk50LDYyOnF0LDcwOkN0fSxpKFosWzIsN10pLGkoWixbMiw4XSksaShaLFsyLDE0XSksezEyOjQ4LDUwOlgsNTI6cHQsNTM6VX0sezE1OlsxLDQ5XX0sezU6WzEsNTBdfSx7NTpbMSw1M10sMTk6WzEsNTFdLDIwOlsxLDUyXX0sezIyOjU0LDcwOkN0fSx7MjI6NTUsNzA6Q3R9LHs1OlsxLDU2XX0sezU6WzEsNTddfSx7NTpbMSw1OF19LHs1OlsxLDU5XX0sezU6WzEsNjBdfSxpKFosWzIsMjldKSxpKFosWzIsMzBdKSx7MzI6WzEsNjFdfSx7MzQ6WzEsNjJdfSxpKFosWzIsMzNdKSx7MTU6WzEsNjNdfSx7MTU6WzEsNjRdfSx7MTU6WzEsNjVdfSx7MTU6WzEsNjZdfSx7MTU6WzEsNjddfSx7MTU6WzEsNjhdfSx7MTU6WzEsNjldfSx7MTU6WzEsNzBdfSx7MjI6NzEsNzA6Q3R9LHsyMjo3Miw3MDpDdH0sezIyOjczLDcwOkN0fSx7Njc6NzQsNzE6WzEsNzVdLDcyOlsxLDc2XSw3MzpbMSw3N10sNzQ6WzEsNzhdLDc1OlsxLDc5XSw3NjpbMSw4MF0sNzc6WzEsODFdLDc4OlsxLDgyXX0sezU1OjgzLDU3OlsxLDg0XSw2NTpbMSw4NV0sNjY6WzEsODZdfSx7MjI6ODcsNzA6Q3R9LHsyMjo4OCw3MDpDdH0sezIyOjg5LDcwOkN0fSx7MjI6OTAsNzA6Q3R9LGkoWzUsNTEsNjQsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzldLFsyLDY4XSksaShaLFsyLDZdKSxpKFosWzIsMTVdKSxpKFR0LFsyLDldLHsxMDo5MX0pLGkoWixbMiwxN10pLHs1OlsxLDkzXSwxOTpbMSw5Ml19LHs1OlsxLDk0XX0saShaLFsyLDIxXSksezU6WzEsOTVdfSx7NTpbMSw5Nl19LGkoWixbMiwyNF0pLGkoWixbMiwyNV0pLGkoWixbMiwyNl0pLGkoWixbMiwyN10pLGkoWixbMiwyOF0pLGkoWixbMiwzMV0pLGkoWixbMiwzMl0pLGkoSHQsdix7Nzo5N30pLGkoSHQsdix7Nzo5OH0pLGkoSHQsdix7Nzo5OX0pLGkoSXQsdix7NDA6MTAwLDc6MTAxfSksaShGdCx2LHs0MjoxMDIsNzoxMDN9KSxpKEZ0LHYsezc6MTAzLDQyOjEwNH0pLGkoa2Usdix7NDU6MTA1LDc6MTA2fSksaShIdCx2LHs3OjEwN30pLHs1OlsxLDEwOV0sNTE6WzEsMTA4XX0sezU6WzEsMTExXSw1MTpbMSwxMTBdfSx7NTpbMSwxMTJdfSx7MjI6MTE1LDY4OlsxLDExM10sNjk6WzEsMTE0XSw3MDpDdH0saShwbixbMiw2OV0pLGkocG4sWzIsNzBdKSxpKHBuLFsyLDcxXSksaShwbixbMiw3Ml0pLGkocG4sWzIsNzNdKSxpKHBuLFsyLDc0XSksaShwbixbMiw3NV0pLGkocG4sWzIsNzZdKSx7MjI6MTE2LDcwOkN0fSx7MjI6MTE4LDU4OjExNyw3MDpDdH0sezcwOlsyLDYzXX0sezcwOlsyLDY0XX0sezU2OjExOSw3OTpNZX0sezU2OjEyMSw3OTpNZX0sezU2OjEyMiw3OTpNZX0sezU2OjEyMyw3OTpNZX0sezQ6WzEsMTI2XSw1OlsxLDEyOF0sMTE6MTI1LDEyOjEyNywxNjpbMSwxMjRdLDUwOlgsNTI6cHQsNTM6VX0sezU6WzEsMTI5XX0saShaLFsyLDE5XSksaShaLFsyLDIwXSksaShaLFsyLDIyXSksaShaLFsyLDIzXSksezQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE2OlsxLDEzMF0sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw1MDpYLDUyOnB0LDUzOlUsNTQ6eHQsNTk6bnQsNjA6T3QsNjE6TnQsNjI6cXQsNzA6Q3R9LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMSwxMzFdLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNTA6WCw1MjpwdCw1MzpVLDU0Onh0LDU5Om50LDYwOk90LDYxOk50LDYyOnF0LDcwOkN0fSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzEsMTMyXSwxNzoxNSwxODpMLDIxOk4sMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpqLDMwOlIsMzE6eiwzMzpLLDM1Oml0LDM2OnN0LDM3OnV0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmR0LDQ0Omh0LDQ2Ond0LDUwOlgsNTI6cHQsNTM6VSw1NDp4dCw1OTpudCw2MDpPdCw2MTpOdCw2MjpxdCw3MDpDdH0sezE2OlsxLDEzM119LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMiw0Nl0sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw0OTpbMSwxMzRdLDUwOlgsNTI6cHQsNTM6VSw1NDp4dCw1OTpudCw2MDpPdCw2MTpOdCw2MjpxdCw3MDpDdH0sezE2OlsxLDEzNV19LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMiw0NF0sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw0ODpbMSwxMzZdLDUwOlgsNTI6cHQsNTM6VSw1NDp4dCw1OTpudCw2MDpPdCw2MTpOdCw2MjpxdCw3MDpDdH0sezE2OlsxLDEzN119LHsxNjpbMSwxMzhdfSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzIsNDJdLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNDc6WzEsMTM5XSw1MDpYLDUyOnB0LDUzOlUsNTQ6eHQsNTk6bnQsNjA6T3QsNjE6TnQsNjI6cXQsNzA6Q3R9LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMSwxNDBdLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNTA6WCw1MjpwdCw1MzpVLDU0Onh0LDU5Om50LDYwOk90LDYxOk50LDYyOnF0LDcwOkN0fSx7MTU6WzEsMTQxXX0saShaLFsyLDQ5XSksezE1OlsxLDE0Ml19LGkoWixbMiw1MV0pLGkoWixbMiw1Ml0pLHsyMjoxNDMsNzA6Q3R9LHsyMjoxNDQsNzA6Q3R9LHs1NjoxNDUsNzk6TWV9LHs1NjoxNDYsNzk6TWV9LHs1NjoxNDcsNzk6TWV9LHs2NDpbMSwxNDhdLDc5OlsyLDYyXX0sezU6WzIsNTVdfSx7NTpbMiw3N119LHs1OlsyLDU2XX0sezU6WzIsNTddfSx7NTpbMiw1OF19LGkoWixbMiwxNl0pLGkoVHQsWzIsMTBdKSx7MTI6MTQ5LDUwOlgsNTI6cHQsNTM6VX0saShUdCxbMiwxMl0pLGkoVHQsWzIsMTNdKSxpKFosWzIsMThdKSxpKFosWzIsMzRdKSxpKFosWzIsMzVdKSxpKFosWzIsMzZdKSxpKFosWzIsMzddKSx7MTU6WzEsMTUwXX0saShaLFsyLDM4XSksezE1OlsxLDE1MV19LGkoWixbMiwzOV0pLGkoWixbMiw0MF0pLHsxNTpbMSwxNTJdfSxpKFosWzIsNDFdKSx7NTpbMSwxNTNdfSx7NTpbMSwxNTRdfSx7NTY6MTU1LDc5Ok1lfSx7NTY6MTU2LDc5Ok1lfSx7NTpbMiw2N119LHs1OlsyLDUzXX0sezU6WzIsNTRdfSx7MjI6MTU3LDcwOkN0fSxpKFR0LFsyLDExXSksaShJdCx2LHs3OjEwMSw0MDoxNTh9KSxpKEZ0LHYsezc6MTAzLDQyOjE1OX0pLGkoa2Usdix7NzoxMDYsNDU6MTYwfSksaShaLFsyLDQ4XSksaShaLFsyLDUwXSksezU6WzIsNjVdfSx7NTpbMiw2Nl19LHs3OTpbMiw2MV19LHsxNjpbMiw0N119LHsxNjpbMiw0NV19LHsxNjpbMiw0M119XSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDg1OlsyLDYzXSw4NjpbMiw2NF0sMTE5OlsyLDU1XSwxMjA6WzIsNzddLDEyMTpbMiw1Nl0sMTIyOlsyLDU3XSwxMjM6WzIsNThdLDE0NTpbMiw2N10sMTQ2OlsyLDUzXSwxNDc6WzIsNTRdLDE1NTpbMiw2NV0sMTU2OlsyLDY2XSwxNTc6WzIsNjFdLDE1ODpbMiw0N10sMTU5OlsyLDQ1XSwxNjA6WzIsNDNdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKF9lLCR0KXtpZigkdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKF9lKTtlbHNle3ZhciByZT1uZXcgRXJyb3IoX2UpO3Rocm93IHJlLmhhc2g9JHQscmV9fSxwYXJzZTpmdW5jdGlvbihfZSl7dmFyICR0PXRoaXMscmU9WzBdLGllPVtdLE9lPVtudWxsXSxvZT1bXSxOZT10aGlzLnRhYmxlLG1lPSIiLGNuPTAsbGk9MCx5YT0yLGRhPTEsT289b2Uuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksZHM9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxEcj17eXk6e319O2Zvcih2YXIgbnIgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxucikmJihEci55eVtucl09dGhpcy55eVtucl0pO2RzLnNldElucHV0KF9lLERyLnl5KSxEci55eS5sZXhlcj1kcyxEci55eS5wYXJzZXI9dGhpcyx0eXBlb2YgZHMueXlsbG9jPiJ1IiYmKGRzLnl5bGxvYz17fSk7dmFyIGRpPWRzLnl5bGxvYztvZS5wdXNoKGRpKTt2YXIgRWU9ZHMub3B0aW9ucyYmZHMub3B0aW9ucy5yYW5nZXM7dHlwZW9mIERyLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPURyLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFluKCl7dmFyICRzO3JldHVybiAkcz1pZS5wb3AoKXx8ZHMubGV4KCl8fGRhLHR5cGVvZiAkcyE9Im51bWJlciImJigkcyBpbnN0YW5jZW9mIEFycmF5JiYoaWU9JHMsJHM9aWUucG9wKCkpLCRzPSR0LnN5bWJvbHNfWyRzXXx8JHMpLCRzfWZvcih2YXIgSGUsVGksZ24sa3MscWE9e30sTGEsR3MsTm8sdnM7Oyl7aWYoVGk9cmVbcmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVGldP2duPXRoaXMuZGVmYXVsdEFjdGlvbnNbVGldOigoSGU9PT1udWxsfHx0eXBlb2YgSGU+InUiKSYmKEhlPVluKCkpLGduPU5lW1RpXSYmTmVbVGldW0hlXSksdHlwZW9mIGduPiJ1Inx8IWduLmxlbmd0aHx8IWduWzBdKXt2YXIgbnU9IiI7dnM9W107Zm9yKExhIGluIE5lW1RpXSl0aGlzLnRlcm1pbmFsc19bTGFdJiZMYT55YSYmdnMucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0xhXSsiJyIpO2RzLnNob3dQb3NpdGlvbj9udT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjbisxKStgOgpgK2RzLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArdnMuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tIZV18fEhlKSsiJyI6bnU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoY24rMSkrIjogVW5leHBlY3RlZCAiKyhIZT09ZGE/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bSGVdfHxIZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IobnUse3RleHQ6ZHMubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0hlXXx8SGUsbGluZTpkcy55eWxpbmVubyxsb2M6ZGksZXhwZWN0ZWQ6dnN9KX1pZihnblswXWluc3RhbmNlb2YgQXJyYXkmJmduLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVGkrIiwgdG9rZW46ICIrSGUpO3N3aXRjaChnblswXSl7Y2FzZSAxOnJlLnB1c2goSGUpLE9lLnB1c2goZHMueXl0ZXh0KSxvZS5wdXNoKGRzLnl5bGxvYykscmUucHVzaChnblsxXSksSGU9bnVsbCxsaT1kcy55eWxlbmcsbWU9ZHMueXl0ZXh0LGNuPWRzLnl5bGluZW5vLGRpPWRzLnl5bGxvYzticmVhaztjYXNlIDI6aWYoR3M9dGhpcy5wcm9kdWN0aW9uc19bZ25bMV1dWzFdLHFhLiQ9T2VbT2UubGVuZ3RoLUdzXSxxYS5fJD17Zmlyc3RfbGluZTpvZVtvZS5sZW5ndGgtKEdzfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6b2Vbb2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46b2Vbb2UubGVuZ3RoLShHc3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpvZVtvZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEVlJiYocWEuXyQucmFuZ2U9W29lW29lLmxlbmd0aC0oR3N8fDEpXS5yYW5nZVswXSxvZVtvZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxrcz10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkocWEsW21lLGxpLGNuLERyLnl5LGduWzFdLE9lLG9lXS5jb25jYXQoT28pKSx0eXBlb2Yga3M8InUiKXJldHVybiBrcztHcyYmKHJlPXJlLnNsaWNlKDAsLTEqR3MqMiksT2U9T2Uuc2xpY2UoMCwtMSpHcyksb2U9b2Uuc2xpY2UoMCwtMSpHcykpLHJlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bZ25bMV1dWzBdKSxPZS5wdXNoKHFhLiQpLG9lLnB1c2gocWEuXyQpLE5vPU5lW3JlW3JlLmxlbmd0aC0yXV1bcmVbcmUubGVuZ3RoLTFdXSxyZS5wdXNoKE5vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sR2U9ZnVuY3Rpb24oKXt2YXIgd2U9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oJHQscmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoJHQscmUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCR0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oX2UsJHQpe3JldHVybiB0aGlzLnl5PSR0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1fZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgX2U9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPV9lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1fZSx0aGlzLm1hdGNoZWQrPV9lO3ZhciAkdD1fZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuICR0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxfZX0sdW5wdXQ6ZnVuY3Rpb24oX2Upe3ZhciAkdD1fZS5sZW5ndGgscmU9X2Uuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1fZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtJHQpLHRoaXMub2Zmc2V0LT0kdDt2YXIgaWU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkscmUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1yZS5sZW5ndGgtMSk7dmFyIE9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpyZT8ocmUubGVuZ3RoPT09aWUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStpZVtpZS5sZW5ndGgtcmUubGVuZ3RoXS5sZW5ndGgtcmVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi0kdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtPZVswXSxPZVswXSt0aGlzLnl5bGVuZy0kdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKF9lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoX2UpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIF9lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oX2UubGVuZ3RoPjIwPyIuLi4iOiIiKStfZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBfZT10aGlzLm1hdGNoO3JldHVybiBfZS5sZW5ndGg8MjAmJihfZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtX2UubGVuZ3RoKSksKF9lLnN1YnN0cigwLDIwKSsoX2UubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBfZT10aGlzLnBhc3RJbnB1dCgpLCR0PW5ldyBBcnJheShfZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBfZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArJHQrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKF9lLCR0KXt2YXIgcmUsaWUsT2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKE9lPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKE9lLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGllPV9lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxpZSYmKHRoaXMueXlsaW5lbm8rPWllLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmllP2llW2llLmxlbmd0aC0xXS5sZW5ndGgtaWVbaWUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rX2VbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9X2VbMF0sdGhpcy5tYXRjaCs9X2VbMF0sdGhpcy5tYXRjaGVzPV9lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKF9lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1fZVswXSxyZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcywkdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxyZSlyZXR1cm4gcmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG9lIGluIE9lKXRoaXNbb2VdPU9lW29lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBfZSwkdCxyZSxpZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBPZT10aGlzLl9jdXJyZW50UnVsZXMoKSxvZT0wO29lPE9lLmxlbmd0aDtvZSsrKWlmKHJlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbT2Vbb2VdXSkscmUmJighJHR8fHJlWzBdLmxlbmd0aD4kdFswXS5sZW5ndGgpKXtpZigkdD1yZSxpZT1vZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihfZT10aGlzLnRlc3RfbWF0Y2gocmUsT2Vbb2VdKSxfZSE9PSExKXJldHVybiBfZTtpZih0aGlzLl9iYWNrdHJhY2speyR0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuICR0PyhfZT10aGlzLnRlc3RfbWF0Y2goJHQsT2VbaWVdKSxfZSE9PSExP19lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgJHQ9dGhpcy5uZXh0KCk7cmV0dXJuICR0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbigkdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKCR0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgJHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gJHQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbigkdCl7cmV0dXJuICR0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoJHR8fDApLCR0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbJHRdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKCR0KXt0aGlzLmJlZ2luKCR0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbigkdCxyZSxpZSxPZSl7c3dpdGNoKGllKXtjYXNlIDA6cmV0dXJuIDU7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpicmVhaztjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIDE5O2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDE0O2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MDtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTI7Y2FzZSAxMDpyZXR1cm4gMTM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MztjYXNlIDEyOnJldHVybiByZS55eXRleHQ9cmUueXl0ZXh0LnRyaW0oKSx0aGlzLmJlZ2luKCJBTElBUyIpLDcwO2Nhc2UgMTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiTElORSIpLDUxO2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNTtjYXNlIDE1OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzY7Y2FzZSAxNjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM3O2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzODtjYXNlIDE4OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzk7Y2FzZSAxOTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ5O2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MTtjYXNlIDIxOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDM7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ4O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NDtjYXNlIDI0OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDc7Y2FzZSAyNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ2O2Nhc2UgMjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNTtjYXNlIDI3OnJldHVybiAxNjtjYXNlIDI4OnJldHVybiA2NTtjYXNlIDI5OnJldHVybiA2NjtjYXNlIDMwOnJldHVybiA1OTtjYXNlIDMxOnJldHVybiA2MDtjYXNlIDMyOnJldHVybiA2MTtjYXNlIDMzOnJldHVybiA2MjtjYXNlIDM0OnJldHVybiA1NztjYXNlIDM1OnJldHVybiA1NDtjYXNlIDM2OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIxO2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzODpyZXR1cm4gMjk7Y2FzZSAzOTpyZXR1cm4gMzA7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgNDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDQ1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDQ3OnJldHVybiA2O2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6cmV0dXJuIDIwO2Nhc2UgNTA6cmV0dXJuIDY0O2Nhc2UgNTE6cmV0dXJuIDU7Y2FzZSA1MjpyZXR1cm4gcmUueXl0ZXh0PXJlLnl5dGV4dC50cmltKCksNzA7Y2FzZSA1MzpyZXR1cm4gNzM7Y2FzZSA1NDpyZXR1cm4gNzQ7Y2FzZSA1NTpyZXR1cm4gNzE7Y2FzZSA1NjpyZXR1cm4gNzI7Y2FzZSA1NzpyZXR1cm4gNzU7Y2FzZSA1ODpyZXR1cm4gNzY7Y2FzZSA1OTpyZXR1cm4gNzc7Y2FzZSA2MDpyZXR1cm4gNzg7Y2FzZSA2MTpyZXR1cm4gNzk7Y2FzZSA2MjpyZXR1cm4gNjg7Y2FzZSA2MzpyZXR1cm4gNjk7Y2FzZSA2NDpyZXR1cm4gNTtjYXNlIDY1OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbMC05XSsoPz1bIFxuXSspKS9pLC9eKD86Ym94XGIpL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86YWN0b3JcYikvaSwvXig/OmNyZWF0ZVxiKS9pLC9eKD86ZGVzdHJveVxiKS9pLC9eKD86W15cLT46XG4sO10rPyhbXC1dKlteXC0+OlxuLDtdKz8pKj8oPz0oKD8hXG4pXHMpK2FzKD8hXG4pXHN8WyNcbjtdfCQpKS9pLC9eKD86YXNcYikvaSwvXig/Oig/OikpL2ksL14oPzpsb29wXGIpL2ksL14oPzpyZWN0XGIpL2ksL14oPzpvcHRcYikvaSwvXig/OmFsdFxiKS9pLC9eKD86ZWxzZVxiKS9pLC9eKD86cGFyXGIpL2ksL14oPzpwYXJfb3ZlclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzpjcml0aWNhbFxiKS9pLC9eKD86b3B0aW9uXGIpL2ksL14oPzpicmVha1xiKS9pLC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcbjtdKikvaSwvXig/OmVuZFxiKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OmxpbmtzXGIpL2ksL14oPzpsaW5rXGIpL2ksL14oPzpwcm9wZXJ0aWVzXGIpL2ksL14oPzpkZXRhaWxzXGIpL2ksL14oPzpvdmVyXGIpL2ksL14oPzpub3RlXGIpL2ksL14oPzphY3RpdmF0ZVxiKS9pLC9eKD86ZGVhY3RpdmF0ZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86dGl0bGU6XHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VxdWVuY2VEaWFncmFtXGIpL2ksL14oPzphdXRvbnVtYmVyXGIpL2ksL14oPzpvZmZcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls0NSw0Nl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0M10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls0MV0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzIsMywxMl0saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6WzIsMywxMywxNF0saW5jbHVzaXZlOiExfSxMSU5FOntydWxlczpbMiwzLDI2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0Miw0NCw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiB3ZX0oKTt2ZS5sZXhlcj1HZTtmdW5jdGlvbiBLZSgpe3RoaXMueXk9e319cmV0dXJuIEtlLnByb3RvdHlwZT12ZSx2ZS5QYXJzZXI9S2UsbmV3IEtlfSgpO3NndC5wYXJzZXI9c2d0O2NvbnN0IGVIZT1zZ3Q7bGV0IERQLEk1PXt9LGFndD17fSxvZ3Q9e30sY0w9W10sQmI9W10sU0s9ITEsY2d0LEQ1LE9QLHVMO2NvbnN0IG5IZT1mdW5jdGlvbihpKXtjTC5wdXNoKHtuYW1lOmkudGV4dCx3cmFwOmkud3JhcD09PXZvaWQgMCYma1QoKXx8ISFpLndyYXAsZmlsbDppLmNvbG9yLGFjdG9yS2V5czpbXX0pLEQ1PWNMLnNsaWNlKC0xKVswXX0sdWd0PWZ1bmN0aW9uKGksYSxmLHApe2xldCB2PUQ1O2NvbnN0IG09STVbaV07aWYobSl7aWYoRDUmJm0uYm94JiZENSE9PW0uYm94KXRocm93IG5ldyBFcnJvcigiQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogIittLm5hbWUrIiBjYW4ndCBiZSBpbiAnIittLmJveC5uYW1lKyInIGFuZCBpbiAnIitENS5uYW1lKyInIGF0IHRoZSBzYW1lIHRpbWUuIik7aWYodj1tLmJveD9tLmJveDpENSxtLmJveD12LG0mJmE9PT1tLm5hbWUmJmY9PW51bGwpcmV0dXJufShmPT1udWxsfHxmLnRleHQ9PW51bGwpJiYoZj17dGV4dDphLHdyYXA6bnVsbCx0eXBlOnB9KSwocD09bnVsbHx8Zi50ZXh0PT1udWxsKSYmKGY9e3RleHQ6YSx3cmFwOm51bGwsdHlwZTpwfSksSTVbaV09e2JveDp2LG5hbWU6YSxkZXNjcmlwdGlvbjpmLnRleHQsd3JhcDpmLndyYXA9PT12b2lkIDAmJmtUKCl8fCEhZi53cmFwLHByZXZBY3RvcjpEUCxsaW5rczp7fSxwcm9wZXJ0aWVzOnt9LGFjdG9yQ250Om51bGwscmVjdERhdGE6bnVsbCx0eXBlOnB8fCJwYXJ0aWNpcGFudCJ9LERQJiZJNVtEUF0mJihJNVtEUF0ubmV4dEFjdG9yPWkpLEQ1JiZENS5hY3RvcktleXMucHVzaChpKSxEUD1pfSxySGU9aT0+e2xldCBhLGY9MDtmb3IoYT0wO2E8QmIubGVuZ3RoO2ErKylCYlthXS50eXBlPT09UFAuQUNUSVZFX1NUQVJUJiZCYlthXS5mcm9tLmFjdG9yPT09aSYmZisrLEJiW2FdLnR5cGU9PT1QUC5BQ1RJVkVfRU5EJiZCYlthXS5mcm9tLmFjdG9yPT09aSYmZi0tO3JldHVybiBmfSxpSGU9ZnVuY3Rpb24oaSxhLGYscCl7QmIucHVzaCh7ZnJvbTppLHRvOmEsbWVzc2FnZTpmLnRleHQsd3JhcDpmLndyYXA9PT12b2lkIDAmJmtUKCl8fCEhZi53cmFwLGFuc3dlcjpwfSl9LFpoPWZ1bmN0aW9uKGksYSxmPXt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scCx2PSExKXtpZihwPT09UFAuQUNUSVZFX0VORCYmckhlKGkuYWN0b3IpPDEpe2xldCBiPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIraS5hY3RvcisiKSIpO3Rocm93IGIuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sYn1yZXR1cm4gQmIucHVzaCh7ZnJvbTppLHRvOmEsbWVzc2FnZTpmLnRleHQsd3JhcDpmLndyYXA9PT12b2lkIDAmJmtUKCl8fCEhZi53cmFwLHR5cGU6cCxhY3RpdmF0ZTp2fSksITB9LHNIZT1mdW5jdGlvbigpe3JldHVybiBjTC5sZW5ndGg+MH0sYUhlPWZ1bmN0aW9uKCl7cmV0dXJuIGNMLnNvbWUoaT0+aS5uYW1lKX0sb0hlPWZ1bmN0aW9uKCl7cmV0dXJuIEJifSxjSGU9ZnVuY3Rpb24oKXtyZXR1cm4gY0x9LHVIZT1mdW5jdGlvbigpe3JldHVybiBJNX0sbEhlPWZ1bmN0aW9uKCl7cmV0dXJuIGFndH0saEhlPWZ1bmN0aW9uKCl7cmV0dXJuIG9ndH0sTlA9ZnVuY3Rpb24oaSl7cmV0dXJuIEk1W2ldfSxmSGU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoSTUpfSxkSGU9ZnVuY3Rpb24oKXtTSz0hMH0sZ0hlPWZ1bmN0aW9uKCl7U0s9ITF9LHBIZT0oKT0+U0ssYkhlPWZ1bmN0aW9uKGkpe2NndD1pfSxrVD0oKT0+Y2d0IT09dm9pZCAwP2NndDpMZSgpLnNlcXVlbmNlLndyYXAsdkhlPWZ1bmN0aW9uKCl7STU9e30sYWd0PXt9LG9ndD17fSxjTD1bXSxCYj1bXSxTSz0hMSxhcCgpfSx3SGU9ZnVuY3Rpb24oaSl7Y29uc3QgYT1pLnRyaW0oKSxmPXt0ZXh0OmEucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6YS5tYXRjaCgvXjo/d3JhcDovKSE9PW51bGw/ITA6YS5tYXRjaCgvXjo/bm93cmFwOi8pIT09bnVsbD8hMTp2b2lkIDB9O3JldHVybiBVdC5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsZiksZn0sbUhlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9aS5tYXRjaCgvXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLyk7bGV0IGY9YSE9bnVsbCYmYVsxXT9hWzFdLnRyaW0oKToidHJhbnNwYXJlbnQiLHA9YSE9bnVsbCYmYVsyXT9hWzJdLnRyaW0oKTp2b2lkIDA7aWYod2luZG93JiZ3aW5kb3cuQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIixmKXx8KGY9InRyYW5zcGFyZW50IixwPWkudHJpbSgpKTtlbHNle2NvbnN0IG09bmV3IE9wdGlvbigpLnN0eWxlO20uY29sb3I9ZixtLmNvbG9yIT09ZiYmKGY9InRyYW5zcGFyZW50IixwPWkudHJpbSgpKX1yZXR1cm57Y29sb3I6Zix0ZXh0OnAhPT12b2lkIDA/RGQocC5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCIiKSxMZSgpKTp2b2lkIDAsd3JhcDpwIT09dm9pZCAwP3AubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOnAubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwOnZvaWQgMH19LFBQPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyfSx5SGU9e0ZJTExFRDowLE9QRU46MX0seEhlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxoUnQ9ZnVuY3Rpb24oaSxhLGYpe2YudGV4dCxmLndyYXA9PT12b2lkIDAmJmtUKCl8fGYud3JhcDtjb25zdCBwPVtdLmNvbmNhdChpLGkpO0JiLnB1c2goe2Zyb206cFswXSx0bzpwWzFdLG1lc3NhZ2U6Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZrVCgpfHwhIWYud3JhcCx0eXBlOlBQLk5PVEUscGxhY2VtZW50OmF9KX0sZlJ0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1OUChpKTt0cnl7bGV0IHA9RGQoYS50ZXh0LExlKCkpO3A9cC5yZXBsYWNlKC8mYW1wOy9nLCImIikscD1wLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtjb25zdCB2PUpTT04ucGFyc2UocCk7bGd0KGYsdil9Y2F0Y2gocCl7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixwKX19LGtIZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9TlAoaSk7dHJ5e2NvbnN0IGI9e307bGV0IEU9RGQoYS50ZXh0LExlKCkpO3ZhciBwPUUuaW5kZXhPZigiQCIpO0U9RS5yZXBsYWNlKC8mYW1wOy9nLCImIiksRT1FLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTt2YXIgdj1FLnNsaWNlKDAscC0xKS50cmltKCksbT1FLnNsaWNlKHArMSkudHJpbSgpO2Jbdl09bSxsZ3QoZixiKX1jYXRjaChiKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLGIpfX07ZnVuY3Rpb24gbGd0KGksYSl7aWYoaS5saW5rcz09bnVsbClpLmxpbmtzPWE7ZWxzZSBmb3IobGV0IGYgaW4gYSlpLmxpbmtzW2ZdPWFbZl19Y29uc3QgZFJ0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1OUChpKTt0cnl7bGV0IHA9RGQoYS50ZXh0LExlKCkpO2NvbnN0IHY9SlNPTi5wYXJzZShwKTtnUnQoZix2KX1jYXRjaChwKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLHApfX07ZnVuY3Rpb24gZ1J0KGksYSl7aWYoaS5wcm9wZXJ0aWVzPT1udWxsKWkucHJvcGVydGllcz1hO2Vsc2UgZm9yKGxldCBmIGluIGEpaS5wcm9wZXJ0aWVzW2ZdPWFbZl19ZnVuY3Rpb24gRUhlKCl7RDU9dm9pZCAwfWNvbnN0IHBSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9TlAoaSkscD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLnRleHQpO3RyeXtjb25zdCB2PXAuaW5uZXJIVE1MLG09SlNPTi5wYXJzZSh2KTttLnByb3BlcnRpZXMmJmdSdChmLG0ucHJvcGVydGllcyksbS5saW5rcyYmbGd0KGYsbS5saW5rcyl9Y2F0Y2godil7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0Iix2KX19LFRIZT1mdW5jdGlvbihpLGEpe2lmKGkhPT12b2lkIDAmJmkucHJvcGVydGllcyE9PXZvaWQgMClyZXR1cm4gaS5wcm9wZXJ0aWVzW2FdfSxiUnQ9ZnVuY3Rpb24oaSl7aWYoQXJyYXkuaXNBcnJheShpKSlpLmZvckVhY2goZnVuY3Rpb24oYSl7YlJ0KGEpfSk7ZWxzZSBzd2l0Y2goaS50eXBlKXtjYXNlInNlcXVlbmNlSW5kZXgiOkJiLnB1c2goe2Zyb206dm9pZCAwLHRvOnZvaWQgMCxtZXNzYWdlOntzdGFydDppLnNlcXVlbmNlSW5kZXgsc3RlcDppLnNlcXVlbmNlSW5kZXhTdGVwLHZpc2libGU6aS5zZXF1ZW5jZVZpc2libGV9LHdyYXA6ITEsdHlwZTppLnNpZ25hbFR5cGV9KTticmVhaztjYXNlImFkZFBhcnRpY2lwYW50Ijp1Z3QoaS5hY3RvcixpLmFjdG9yLGkuZGVzY3JpcHRpb24saS5kcmF3KTticmVhaztjYXNlImNyZWF0ZVBhcnRpY2lwYW50IjppZihJNVtpLmFjdG9yXSl0aHJvdyBuZXcgRXJyb3IoIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGFjdG9ycyB3aXRoIHRoZSBzYW1lIGlkLCBldmVuIGlmIG9uZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBuZXh0IGlzIGNyZWF0ZWQuIFVzZSAnQVMnIGFsaWFzZXMgdG8gc2ltdWxhdGUgdGhlIGJlaGF2aW9yIik7T1A9aS5hY3Rvcix1Z3QoaS5hY3RvcixpLmFjdG9yLGkuZGVzY3JpcHRpb24saS5kcmF3KSxhZ3RbaS5hY3Rvcl09QmIubGVuZ3RoO2JyZWFrO2Nhc2UiZGVzdHJveVBhcnRpY2lwYW50Ijp1TD1pLmFjdG9yLG9ndFtpLmFjdG9yXT1CYi5sZW5ndGg7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6WmgoaS5hY3Rvcix2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhY3RpdmVFbmQiOlpoKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6aFJ0KGkuYWN0b3IsaS5wbGFjZW1lbnQsaS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpmUnQoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOmtIZShpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpkUnQoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6cFJ0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKE9QKXtpZihpLnRvIT09T1ApdGhyb3cgbmV3IEVycm9yKCJUaGUgY3JlYXRlZCBwYXJ0aWNpcGFudCAiK09QKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGNyZWF0aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7T1A9dm9pZCAwfWVsc2UgaWYodUwpe2lmKGkudG8hPT11TCYmaS5mcm9tIT09dUwpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVzdHJveWVkIHBhcnRpY2lwYW50ICIrdUwrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO3VMPXZvaWQgMH1aaChpLmZyb20saS50byxpLm1zZyxpLnNpZ25hbFR5cGUsaS5hY3RpdmF0ZSk7YnJlYWs7Y2FzZSJib3hTdGFydCI6bkhlKGkuYm94RGF0YSk7YnJlYWs7Y2FzZSJib3hFbmQiOkVIZSgpO2JyZWFrO2Nhc2UibG9vcFN0YXJ0IjpaaCh2b2lkIDAsdm9pZCAwLGkubG9vcFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BFbmQiOlpoKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0U3RhcnQiOlpoKHZvaWQgMCx2b2lkIDAsaS5jb2xvcixpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdEVuZCI6Wmgodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdFN0YXJ0IjpaaCh2b2lkIDAsdm9pZCAwLGkub3B0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0RW5kIjpaaCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0U3RhcnQiOlpoKHZvaWQgMCx2b2lkIDAsaS5hbHRUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJlbHNlIjpaaCh2b2lkIDAsdm9pZCAwLGkuYWx0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0RW5kIjpaaCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uic2V0QWNjVGl0bGUiOmNnKGkudGV4dCk7YnJlYWs7Y2FzZSJwYXJTdGFydCI6Wmgodm9pZCAwLHZvaWQgMCxpLnBhclRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFuZCI6Wmgodm9pZCAwLHZvaWQgMCxpLnBhclRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6Wmgodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsU3RhcnQiOlpoKHZvaWQgMCx2b2lkIDAsaS5jcml0aWNhbFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdGlvbiI6Wmgodm9pZCAwLHZvaWQgMCxpLm9wdGlvblRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsRW5kIjpaaCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtTdGFydCI6Wmgodm9pZCAwLHZvaWQgMCxpLmJyZWFrVGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtFbmQiOlpoKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWt9fSx2UnQ9e2FkZEFjdG9yOnVndCxhZGRNZXNzYWdlOmlIZSxhZGRTaWduYWw6WmgsYWRkTGlua3M6ZlJ0LGFkZERldGFpbHM6cFJ0LGFkZFByb3BlcnRpZXM6ZFJ0LGF1dG9XcmFwOmtULHNldFdyYXA6YkhlLGVuYWJsZVNlcXVlbmNlTnVtYmVyczpkSGUsZGlzYWJsZVNlcXVlbmNlTnVtYmVyczpnSGUsc2hvd1NlcXVlbmNlTnVtYmVyczpwSGUsZ2V0TWVzc2FnZXM6b0hlLGdldEFjdG9yczp1SGUsZ2V0Q3JlYXRlZEFjdG9yczpsSGUsZ2V0RGVzdHJveWVkQWN0b3JzOmhIZSxnZXRBY3RvcjpOUCxnZXRBY3RvcktleXM6ZkhlLGdldEFjdG9yUHJvcGVydHk6VEhlLGdldEFjY1RpdGxlOm9wLGdldEJveGVzOmNIZSxnZXREaWFncmFtVGl0bGU6RGIsc2V0RGlhZ3JhbVRpdGxlOloyLGdldENvbmZpZzooKT0+TGUoKS5zZXF1ZW5jZSxjbGVhcjp2SGUscGFyc2VNZXNzYWdlOndIZSxwYXJzZUJveERhdGE6bUhlLExJTkVUWVBFOlBQLEFSUk9XVFlQRTp5SGUsUExBQ0VNRU5UOnhIZSxhZGROb3RlOmhSdCxzZXRBY2NUaXRsZTpjZyxhcHBseTpiUnQsc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsaGFzQXRMZWFzdE9uZUJveDpzSGUsaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZTphSGV9LENIZT1pPT5gLmFjdG9yIHsKICAgIHN0cm9rZTogJHtpLmFjdG9yQm9yZGVyfTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgfQoKICB0ZXh0LmFjdG9yID4gdHNwYW4gewogICAgZmlsbDogJHtpLmFjdG9yVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5hY3Rvci1saW5lIHsKICAgIHN0cm9rZTogJHtpLmFjdG9yTGluZUNvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTAgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VMaW5lMSB7CiAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjYXJyb3doZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5zZXF1ZW5jZU51bWJlciB7CiAgICBmaWxsOiAke2kuc2VxdWVuY2VOdW1iZXJDb2xvcn07CiAgfQoKICAjc2VxdWVuY2VudW1iZXIgewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogICNjcm9zc2hlYWQgcGF0aCB7CiAgICBmaWxsOiAke2kuc2lnbmFsQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VUZXh0IHsKICAgIGZpbGw6ICR7aS5zaWduYWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxhYmVsQm94IHsKICAgIHN0cm9rZTogJHtpLmxhYmVsQm94Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmxhYmVsQm94QmtnQ29sb3J9OwogIH0KCiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5sYWJlbFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcFRleHQsIC5sb29wVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5sb29wVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sb29wTGluZSB7CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICB9CgogIC5ub3RlIHsKICAgIC8vc3Ryb2tlOiAjZGVjYzkzOwogICAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwogIH0KCiAgLm5vdGVUZXh0LCAubm90ZVRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0aXZhdGlvbjAgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2YXRpb24xIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMiB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0b3JQb3B1cE1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogIH0KCiAgLmFjdG9yUG9wdXBNZW51UGFuZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjIpOwogICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTsKfQogIC5hY3Rvci1tYW4gbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQpgLEVUPTE4KjIsaGd0PWZ1bmN0aW9uKGksYSl7cmV0dXJuIEhXKGksYSl9LHdSdD0oaSxhKT0+e1dTZSgoKT0+e2NvbnN0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpKTtmLmxlbmd0aCE9PTAmJihmWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtMSGUoImFjdG9yIithKyJfcG9wdXAiKX0pLGZbMF0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7TUhlKCJhY3RvciIrYSsiX3BvcHVwIil9KSl9KX0sX0hlPWZ1bmN0aW9uKGksYSxmLHAsdil7aWYoYS5saW5rcz09PXZvaWQgMHx8YS5saW5rcz09PW51bGx8fE9iamVjdC5rZXlzKGEubGlua3MpLmxlbmd0aD09PTApcmV0dXJue2hlaWdodDowLHdpZHRoOjB9O2NvbnN0IG09YS5saW5rcyxiPWEuYWN0b3JDbnQsRT1hLnJlY3REYXRhO3ZhciBfPSJub25lIjt2JiYoXz0iYmxvY2sgIWltcG9ydGFudCIpO2NvbnN0IEw9aS5hcHBlbmQoImciKTtMLmF0dHIoImlkIiwiYWN0b3IiK2IrIl9wb3B1cCIpLEwuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLEwuYXR0cigiZGlzcGxheSIsXyksd1J0KCIjYWN0b3IiK2IrIl9wb3B1cCIsYik7dmFyIE49IiI7RS5jbGFzcyE9PXZvaWQgMCYmKE49IiAiK0UuY2xhc3MpO2xldCBCPUUud2lkdGg+Zj9FLndpZHRoOmY7Y29uc3Qgaj1MLmFwcGVuZCgicmVjdCIpO2lmKGouYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIitOKSxqLmF0dHIoIngiLEUueCksai5hdHRyKCJ5IixFLmhlaWdodCksai5hdHRyKCJmaWxsIixFLmZpbGwpLGouYXR0cigic3Ryb2tlIixFLnN0cm9rZSksai5hdHRyKCJ3aWR0aCIsQiksai5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KSxqLmF0dHIoInJ4IixFLnJ4KSxqLmF0dHIoInJ5IixFLnJ5KSxtIT1udWxsKXt2YXIgUj0yMDtmb3IobGV0IGl0IGluIG0pe3ZhciB6PUwuYXBwZW5kKCJhIiksSz1RNihtW2l0XSk7ei5hdHRyKCJ4bGluazpocmVmIixLKSx6LmF0dHIoInRhcmdldCIsIl9ibGFuayIpLFVIZShwKShpdCx6LEUueCsxMCxFLmhlaWdodCtSLEIsMjAse2NsYXNzOiJhY3RvciJ9LHApLFIrPTMwfX1yZXR1cm4gai5hdHRyKCJoZWlnaHQiLFIpLHtoZWlnaHQ6RS5oZWlnaHQrUix3aWR0aDpCfX0sU0hlPWZ1bmN0aW9uKGkpe3JldHVybiJ2YXIgcHUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIitpKyInKTsgaWYgKHB1ICE9IG51bGwpIHsgcHUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0ifSxBSGU9ZnVuY3Rpb24oaSl7cmV0dXJuInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK2krIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9In0sTEhlPWZ1bmN0aW9uKGkpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpO2EhPW51bGwmJihhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LE1IZT1mdW5jdGlvbihpKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTthIT1udWxsJiYoYS5zdHlsZS5kaXNwbGF5PSJub25lIil9LGxMPWZ1bmN0aW9uKGksYSl7bGV0IGY9MCxwPTA7Y29uc3Qgdj1hLnRleHQuc3BsaXQoWXIubGluZUJyZWFrUmVnZXgpLFttLGJdPSRBKGEuZm9udFNpemUpO2xldCBFPVtdLF89MCxMPSgpPT5hLnk7aWYoYS52YWxpZ24hPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luPjApc3dpdGNoKGEudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6TD0oKT0+TWF0aC5yb3VuZChhLnkrYS50ZXh0TWFyZ2luKTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOkw9KCk9Pk1hdGgucm91bmQoYS55KyhmK3ArYS50ZXh0TWFyZ2luKS8yKTticmVhaztjYXNlImJvdHRvbSI6Y2FzZSJlbmQiOkw9KCk9Pk1hdGgucm91bmQoYS55KyhmK3ArMiphLnRleHRNYXJnaW4pLWEudGV4dE1hcmdpbik7YnJlYWt9aWYoYS5hbmNob3IhPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS53aWR0aCE9PXZvaWQgMClzd2l0Y2goYS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6YS54PU1hdGgucm91bmQoYS54K2EudGV4dE1hcmdpbiksYS5hbmNob3I9InN0YXJ0IixhLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsYS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmEueD1NYXRoLnJvdW5kKGEueCthLndpZHRoLzIpLGEuYW5jaG9yPSJtaWRkbGUiLGEuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixhLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjphLng9TWF0aC5yb3VuZChhLngrYS53aWR0aC1hLnRleHRNYXJnaW4pLGEuYW5jaG9yPSJlbmQiLGEuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixhLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrfWZvcihsZXRbTixCXW9mIHYuZW50cmllcygpKXthLnRleHRNYXJnaW4hPT12b2lkIDAmJmEudGV4dE1hcmdpbj09PTAmJm0hPT12b2lkIDAmJihfPU4qbSk7Y29uc3Qgaj1pLmFwcGVuZCgidGV4dCIpO2ouYXR0cigieCIsYS54KSxqLmF0dHIoInkiLEwoKSksYS5hbmNob3IhPT12b2lkIDAmJmouYXR0cigidGV4dC1hbmNob3IiLGEuYW5jaG9yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsYS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLGEuYWxpZ25tZW50QmFzZWxpbmUpLGEuZm9udEZhbWlseSE9PXZvaWQgMCYmai5zdHlsZSgiZm9udC1mYW1pbHkiLGEuZm9udEZhbWlseSksYiE9PXZvaWQgMCYmai5zdHlsZSgiZm9udC1zaXplIixiKSxhLmZvbnRXZWlnaHQhPT12b2lkIDAmJmouc3R5bGUoImZvbnQtd2VpZ2h0IixhLmZvbnRXZWlnaHQpLGEuZmlsbCE9PXZvaWQgMCYmai5hdHRyKCJmaWxsIixhLmZpbGwpLGEuY2xhc3MhPT12b2lkIDAmJmouYXR0cigiY2xhc3MiLGEuY2xhc3MpLGEuZHkhPT12b2lkIDA/ai5hdHRyKCJkeSIsYS5keSk6XyE9PTAmJmouYXR0cigiZHkiLF8pO2NvbnN0IFI9Qnx8UkR0O2lmKGEudHNwYW4pe2NvbnN0IHo9ai5hcHBlbmQoInRzcGFuIik7ei5hdHRyKCJ4IixhLngpLGEuZmlsbCE9PXZvaWQgMCYmei5hdHRyKCJmaWxsIixhLmZpbGwpLHoudGV4dChSKX1lbHNlIGoudGV4dChSKTthLnZhbGlnbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luIT09dm9pZCAwJiZhLnRleHRNYXJnaW4+MCYmKHArPShqLl9ncm91cHN8fGopWzBdWzBdLmdldEJCb3goKS5oZWlnaHQsZj1wKSxFLnB1c2goail9cmV0dXJuIEV9LG1SdD1mdW5jdGlvbihpLGEpe2Z1bmN0aW9uIGYodixtLGIsRSxfKXtyZXR1cm4gdisiLCIrbSsiICIrKHYrYikrIiwiK20rIiAiKyh2K2IpKyIsIisobStFLV8pKyIgIisoditiLV8qMS4yKSsiLCIrKG0rRSkrIiAiK3YrIiwiKyhtK0UpfWNvbnN0IHA9aS5hcHBlbmQoInBvbHlnb24iKTtyZXR1cm4gcC5hdHRyKCJwb2ludHMiLGYoYS54LGEueSxhLndpZHRoLGEuaGVpZ2h0LDcpKSxwLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxhLnk9YS55K2EuaGVpZ2h0LzIsbEwoaSxhKSxwfTtsZXQgaG09LTE7Y29uc3QgeVJ0PShpLGEsZixwKT0+e2kuc2VsZWN0JiZmLmZvckVhY2godj0+e2NvbnN0IG09YVt2XSxiPWkuc2VsZWN0KCIjYWN0b3IiK20uYWN0b3JDbnQpOyFwLm1pcnJvckFjdG9ycyYmbS5zdG9weT9iLmF0dHIoInkyIixtLnN0b3B5K20uaGVpZ2h0LzIpOnAubWlycm9yQWN0b3JzJiZiLmF0dHIoInkyIixtLnN0b3B5KX0pfSxJSGU9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1wP2Euc3RvcHk6YS5zdGFydHksbT1hLngrYS53aWR0aC8yLGI9dis1LEU9aS5hcHBlbmQoImciKS5sb3dlcigpO3ZhciBfPUU7cHx8KGhtKyssXy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitobSkuYXR0cigieDEiLG0pLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsbSkuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxfPUUuYXBwZW5kKCJnIiksYS5hY3RvckNudD1obSxhLmxpbmtzIT1udWxsJiYoXy5hdHRyKCJpZCIsInJvb3QtIitobSksd1J0KCIjcm9vdC0iK2htLGhtKSkpO2NvbnN0IEw9ZlQoKTt2YXIgTj0iYWN0b3IiO2EucHJvcGVydGllcyE9bnVsbCYmYS5wcm9wZXJ0aWVzLmNsYXNzP049YS5wcm9wZXJ0aWVzLmNsYXNzOkwuZmlsbD0iI2VhZWFlYSIsTC54PWEueCxMLnk9dixMLndpZHRoPWEud2lkdGgsTC5oZWlnaHQ9YS5oZWlnaHQsTC5jbGFzcz1OLEwucng9MyxMLnJ5PTM7Y29uc3QgQj1oZ3QoXyxMKTtpZihhLnJlY3REYXRhPUwsYS5wcm9wZXJ0aWVzIT1udWxsJiZhLnByb3BlcnRpZXMuaWNvbil7Y29uc3QgUj1hLnByb3BlcnRpZXMuaWNvbi50cmltKCk7Ui5jaGFyQXQoMCk9PT0iQCI/cEllKF8sTC54K0wud2lkdGgtMjAsTC55KzEwLFIuc3Vic3RyKDEpKTpnSWUoXyxMLngrTC53aWR0aC0yMCxMLnkrMTAsUil9Zmd0KGYpKGEuZGVzY3JpcHRpb24sXyxMLngsTC55LEwud2lkdGgsTC5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LGYpO2xldCBqPWEuaGVpZ2h0O2lmKEIubm9kZSl7Y29uc3QgUj1CLm5vZGUoKS5nZXRCQm94KCk7YS5oZWlnaHQ9Ui5oZWlnaHQsaj1SLmhlaWdodH1yZXR1cm4gan0sREhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9cD9hLnN0b3B5OmEuc3RhcnR5LG09YS54K2Eud2lkdGgvMixiPXYrODA7aS5sb3dlcigpLHB8fChobSsrLGkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIraG0pLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsYikuYXR0cigieDIiLG0pLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoImNsYXNzIiwiMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IiksYS5hY3RvckNudD1obSk7Y29uc3QgRT1pLmFwcGVuZCgiZyIpO0UuYXR0cigiY2xhc3MiLCJhY3Rvci1tYW4iKTtjb25zdCBfPWZUKCk7Xy54PWEueCxfLnk9dixfLmZpbGw9IiNlYWVhZWEiLF8ud2lkdGg9YS53aWR0aCxfLmhlaWdodD1hLmhlaWdodCxfLmNsYXNzPSJhY3RvciIsXy5yeD0zLF8ucnk9MyxFLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIitobSkuYXR0cigieDEiLG0pLmF0dHIoInkxIix2KzI1KS5hdHRyKCJ4MiIsbSkuYXR0cigieTIiLHYrNDUpLEUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tYXJtcyIraG0pLmF0dHIoIngxIixtLUVULzIpLmF0dHIoInkxIix2KzMzKS5hdHRyKCJ4MiIsbStFVC8yKS5hdHRyKCJ5MiIsdiszMyksRS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbS1FVC8yKS5hdHRyKCJ5MSIsdis2MCkuYXR0cigieDIiLG0pLmF0dHIoInkyIix2KzQ1KSxFLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsdis0NSkuYXR0cigieDIiLG0rRVQvMi0yKS5hdHRyKCJ5MiIsdis2MCk7Y29uc3QgTD1FLmFwcGVuZCgiY2lyY2xlIik7TC5hdHRyKCJjeCIsYS54K2Eud2lkdGgvMiksTC5hdHRyKCJjeSIsdisxMCksTC5hdHRyKCJyIiwxNSksTC5hdHRyKCJ3aWR0aCIsYS53aWR0aCksTC5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtjb25zdCBOPUUubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS5oZWlnaHQ9Ti5oZWlnaHQsZmd0KGYpKGEuZGVzY3JpcHRpb24sRSxfLngsXy55KzM1LF8ud2lkdGgsXy5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LGYpLGEuaGVpZ2h0fSxPSGU9ZnVuY3Rpb24oaSxhLGYscCl7c3dpdGNoKGEudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIERIZShpLGEsZixwKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gSUhlKGksYSxmLHApfX0sTkhlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCB2PWkuYXBwZW5kKCJnIik7eFJ0KHYsYSksYS5uYW1lJiZmZ3QoZikoYS5uYW1lLHYsYS54LGEueSsoYS50ZXh0TWF4SGVpZ2h0fHwwKS8yLGEud2lkdGgsMCx7Y2xhc3M6InRleHQifSxmKSx2Lmxvd2VyKCl9LFBIZT1mdW5jdGlvbihpKXtyZXR1cm4gaS5hcHBlbmQoImciKX0sRkhlPWZ1bmN0aW9uKGksYSxmLHAsdil7Y29uc3QgbT1mVCgpLGI9YS5hbmNob3JlZDttLng9YS5zdGFydHgsbS55PWEuc3RhcnR5LG0uY2xhc3M9ImFjdGl2YXRpb24iK3YlMyxtLndpZHRoPWEuc3RvcHgtYS5zdGFydHgsbS5oZWlnaHQ9Zi1hLnN0YXJ0eSxoZ3QoYixtKX0sQkhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e2JveE1hcmdpbjp2LGJveFRleHRNYXJnaW46bSxsYWJlbEJveEhlaWdodDpiLGxhYmVsQm94V2lkdGg6RSxtZXNzYWdlRm9udEZhbWlseTpfLG1lc3NhZ2VGb250U2l6ZTpMLG1lc3NhZ2VGb250V2VpZ2h0Ok59PXAsQj1pLmFwcGVuZCgiZyIpLGo9ZnVuY3Rpb24oSyxpdCxzdCx1dCl7cmV0dXJuIEIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEspLmF0dHIoInkxIixpdCkuYXR0cigieDIiLHN0KS5hdHRyKCJ5MiIsdXQpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07aihhLnN0YXJ0eCxhLnN0YXJ0eSxhLnN0b3B4LGEuc3RhcnR5KSxqKGEuc3RvcHgsYS5zdGFydHksYS5zdG9weCxhLnN0b3B5KSxqKGEuc3RhcnR4LGEuc3RvcHksYS5zdG9weCxhLnN0b3B5KSxqKGEuc3RhcnR4LGEuc3RhcnR5LGEuc3RhcnR4LGEuc3RvcHkpLGEuc2VjdGlvbnMhPT12b2lkIDAmJmEuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihLKXtqKGEuc3RhcnR4LEsueSxhLnN0b3B4LEsueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgUj1QZHQoKTtSLnRleHQ9ZixSLng9YS5zdGFydHgsUi55PWEuc3RhcnR5LFIuZm9udEZhbWlseT1fLFIuZm9udFNpemU9TCxSLmZvbnRXZWlnaHQ9TixSLmFuY2hvcj0ibWlkZGxlIixSLnZhbGlnbj0ibWlkZGxlIixSLnRzcGFuPSExLFIud2lkdGg9RXx8NTAsUi5oZWlnaHQ9Ynx8MjAsUi50ZXh0TWFyZ2luPW0sUi5jbGFzcz0ibGFiZWxUZXh0IixtUnQoQixSKSxSPWtSdCgpLFIudGV4dD1hLnRpdGxlLFIueD1hLnN0YXJ0eCtFLzIrKGEuc3RvcHgtYS5zdGFydHgpLzIsUi55PWEuc3RhcnR5K3YrbSxSLmFuY2hvcj0ibWlkZGxlIixSLnZhbGlnbj0ibWlkZGxlIixSLnRleHRNYXJnaW49bSxSLmNsYXNzPSJsb29wVGV4dCIsUi5mb250RmFtaWx5PV8sUi5mb250U2l6ZT1MLFIuZm9udFdlaWdodD1OLFIud3JhcD0hMDtsZXQgej1sTChCLFIpO3JldHVybiBhLnNlY3Rpb25UaXRsZXMhPT12b2lkIDAmJmEuc2VjdGlvblRpdGxlcy5mb3JFYWNoKGZ1bmN0aW9uKEssaXQpe2lmKEsubWVzc2FnZSl7Ui50ZXh0PUsubWVzc2FnZSxSLng9YS5zdGFydHgrKGEuc3RvcHgtYS5zdGFydHgpLzIsUi55PWEuc2VjdGlvbnNbaXRdLnkrdittLFIuY2xhc3M9Imxvb3BUZXh0IixSLmFuY2hvcj0ibWlkZGxlIixSLnZhbGlnbj0ibWlkZGxlIixSLnRzcGFuPSExLFIuZm9udEZhbWlseT1fLFIuZm9udFNpemU9TCxSLmZvbnRXZWlnaHQ9TixSLndyYXA9YS53cmFwLHo9bEwoQixSKTtsZXQgc3Q9TWF0aC5yb3VuZCh6Lm1hcCh1dD0+KHV0Ll9ncm91cHN8fHV0KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKHV0LGJ0KT0+dXQrYnQpKTthLnNlY3Rpb25zW2l0XS5oZWlnaHQrPXN0LSh2K20pfX0pLGEuaGVpZ2h0PU1hdGgucm91bmQoYS5zdG9weS1hLnN0YXJ0eSksQn0seFJ0PWZ1bmN0aW9uKGksYSl7Yk50KGksYSl9LFJIZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0sakhlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LCRIZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSx6SGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNy45KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxxSGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZmlsbGVkLWhlYWQiKS5hdHRyKCJyZWZYIiwxNS41KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxISGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwic2VxdWVuY2VudW1iZXIiKS5hdHRyKCJyZWZYIiwxNSkuYXR0cigicmVmWSIsMTUpLmF0dHIoIm1hcmtlcldpZHRoIiw2MCkuYXR0cigibWFya2VySGVpZ2h0Iiw0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDE1KS5hdHRyKCJjeSIsMTUpLmF0dHIoInIiLDYpfSxHSGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiw0KS5hdHRyKCJyZWZZIiw0LjUpLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFwdCIpLmF0dHIoImQiLCJNIDEsMiBMIDYsNyBNIDYsMiBMIDEsNyIpfSxrUnQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSxWSGU9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LGZndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodixtLGIsRSxfLEwsTil7Y29uc3QgQj1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFK0wvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHYpO3AoQixOKX1mdW5jdGlvbiBhKHYsbSxiLEUsXyxMLE4sQil7Y29uc3R7YWN0b3JGb250U2l6ZTpqLGFjdG9yRm9udEZhbWlseTpSLGFjdG9yRm9udFdlaWdodDp6fT1CLFtLLGl0XT0kQShqKSxzdD12LnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IobGV0IHV0PTA7dXQ8c3QubGVuZ3RoO3V0Kyspe2NvbnN0IGJ0PXV0KkstSyooc3QubGVuZ3RoLTEpLzIsbXQ9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsaXQpLnN0eWxlKCJmb250LXdlaWdodCIseikuc3R5bGUoImZvbnQtZmFtaWx5IixSKTttdC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsYitfLzIpLmF0dHIoImR5IixidCkudGV4dChzdFt1dF0pLG10LmF0dHIoInkiLEUrTC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChtdCxOKX19ZnVuY3Rpb24gZih2LG0sYixFLF8sTCxOLEIpe2NvbnN0IGo9bS5hcHBlbmQoInN3aXRjaCIpLHo9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixMKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHYpLGEodixqLGIsRSxfLEwsTixCKSxwKHosTil9ZnVuY3Rpb24gcCh2LG0pe2Zvcihjb25zdCBiIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShiKSYmdi5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiB2LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6di50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxVSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsbSxiLEUsXyxMLE4pe2NvbnN0IEI9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnRleHQodik7cChCLE4pfWZ1bmN0aW9uIGEodixtLGIsRSxfLEwsTixCKXtjb25zdHthY3RvckZvbnRTaXplOmosYWN0b3JGb250RmFtaWx5OlIsYWN0b3JGb250V2VpZ2h0Onp9PUIsSz12LnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IobGV0IGl0PTA7aXQ8Sy5sZW5ndGg7aXQrKyl7Y29uc3Qgc3Q9aXQqai1qKihLLmxlbmd0aC0xKS8yLHV0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS5zdHlsZSgiZm9udC1zaXplIixqKS5zdHlsZSgiZm9udC13ZWlnaHQiLHopLnN0eWxlKCJmb250LWZhbWlseSIsUik7dXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGIpLmF0dHIoImR5IixzdCkudGV4dChLW2l0XSksdXQuYXR0cigieSIsRStMLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxwKHV0LE4pfX1mdW5jdGlvbiBmKHYsbSxiLEUsXyxMLE4sQil7Y29uc3Qgaj1tLmFwcGVuZCgic3dpdGNoIiksej1qLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEUpLmF0dHIoIndpZHRoIixfKS5hdHRyKCJoZWlnaHQiLEwpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3ouYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodiksYSh2LGosYixFLF8sTCxOLEIpLHAoeixOKX1mdW5jdGlvbiBwKHYsbSl7Zm9yKGNvbnN0IGIgaW4gbSltLmhhc093blByb3BlcnR5KGIpJiZ2LmF0dHIoYixtW2JdKX1yZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIHYudGV4dFBsYWNlbWVudD09PSJmbyI/Zjp2LnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOmF9fSgpLEpoPXtkcmF3UmVjdDpoZ3QsZHJhd1RleHQ6bEwsZHJhd0xhYmVsOm1SdCxkcmF3QWN0b3I6T0hlLGRyYXdCb3g6TkhlLGRyYXdQb3B1cDpfSGUsYW5jaG9yRWxlbWVudDpQSGUsZHJhd0FjdGl2YXRpb246RkhlLGRyYXdMb29wOkJIZSxkcmF3QmFja2dyb3VuZFJlY3Q6eFJ0LGluc2VydEFycm93SGVhZDp6SGUsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOnFIZSxpbnNlcnRTZXF1ZW5jZU51bWJlcjpISGUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6R0hlLGluc2VydERhdGFiYXNlSWNvbjpSSGUsaW5zZXJ0Q29tcHV0ZXJJY29uOmpIZSxpbnNlcnRDbG9ja0ljb246JEhlLGdldFRleHRPYmo6a1J0LGdldE5vdGVSZWN0OlZIZSxwb3B1cE1lbnU6U0hlLHBvcGRvd25NZW51OkFIZSxmaXhMaWZlTGluZUhlaWdodHM6eVJ0LHNhbml0aXplVXJsOlE2fTtsZXQgZm49e307Y29uc3QgUHI9e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10sYWN0aXZhdGlvbnM6W10sbW9kZWxzOntnZXRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0aGlzLmFjdG9ycy5sZW5ndGg9PT0wP1swXTp0aGlzLmFjdG9ycy5tYXAoaT0+aS5oZWlnaHR8fDApKSsodGhpcy5sb29wcy5sZW5ndGg9PT0wPzA6dGhpcy5sb29wcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxhKT0+aSthKSkrKHRoaXMubWVzc2FnZXMubGVuZ3RoPT09MD8wOnRoaXMubWVzc2FnZXMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGksYSk9PmkrYSkpKyh0aGlzLm5vdGVzLmxlbmd0aD09PTA/MDp0aGlzLm5vdGVzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLGEpPT5pK2EpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmJveGVzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSxhZGRCb3g6ZnVuY3Rpb24oaSl7dGhpcy5ib3hlcy5wdXNoKGkpfSxhZGRBY3RvcjpmdW5jdGlvbihpKXt0aGlzLmFjdG9ycy5wdXNoKGkpfSxhZGRMb29wOmZ1bmN0aW9uKGkpe3RoaXMubG9vcHMucHVzaChpKX0sYWRkTWVzc2FnZTpmdW5jdGlvbihpKXt0aGlzLm1lc3NhZ2VzLnB1c2goaSl9LGFkZE5vdGU6ZnVuY3Rpb24oaSl7dGhpcy5ub3Rlcy5wdXNoKGkpfSxsYXN0QWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSxsYXN0TG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSxsYXN0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSxsYXN0Tm90ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoLTFdfSxhY3RvcnM6W10sYm94ZXM6W10sbG9vcHM6W10sbWVzc2FnZXM6W10sbm90ZXM6W119LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCxUUnQoTGUoKSl9LHVwZGF0ZVZhbDpmdW5jdGlvbihpLGEsZixwKXtpW2FdPT09dm9pZCAwP2lbYV09ZjppW2FdPXAoZixpW2FdKX0sdXBkYXRlQm91bmRzOmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9dGhpcztsZXQgbT0wO2Z1bmN0aW9uIGIoRSl7cmV0dXJuIGZ1bmN0aW9uKEwpe20rKztjb25zdCBOPXYuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbSsxO3YudXBkYXRlVmFsKEwsInN0YXJ0eSIsYS1OKmZuLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoTCwic3RvcHkiLHArTipmbi5ib3hNYXJnaW4sTWF0aC5tYXgpLHYudXBkYXRlVmFsKFByLmRhdGEsInN0YXJ0eCIsaS1OKmZuLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoUHIuZGF0YSwic3RvcHgiLGYrTipmbi5ib3hNYXJnaW4sTWF0aC5tYXgpLEUhPT0iYWN0aXZhdGlvbiImJih2LnVwZGF0ZVZhbChMLCJzdGFydHgiLGktTipmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKEwsInN0b3B4IixmK04qZm4uYm94TWFyZ2luLE1hdGgubWF4KSx2LnVwZGF0ZVZhbChQci5kYXRhLCJzdGFydHkiLGEtTipmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKFByLmRhdGEsInN0b3B5IixwK04qZm4uYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKGIoKSksdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKGIoImFjdGl2YXRpb24iKSl9LGluc2VydDpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PVlyLmdldE1pbihpLGYpLG09WXIuZ2V0TWF4KGksZiksYj1Zci5nZXRNaW4oYSxwKSxFPVlyLmdldE1heChhLHApO3RoaXMudXBkYXRlVmFsKFByLmRhdGEsInN0YXJ0eCIsdixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoUHIuZGF0YSwic3RhcnR5IixiLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChQci5kYXRhLCJzdG9weCIsbSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoUHIuZGF0YSwic3RvcHkiLEUsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKHYsYixtLEUpfSxuZXdBY3RpdmF0aW9uOmZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWZbaS5mcm9tLmFjdG9yXSx2PUFLKGkuZnJvbS5hY3RvcikubGVuZ3RofHwwLG09cC54K3Aud2lkdGgvMisodi0xKSpmbi5hY3RpdmF0aW9uV2lkdGgvMjt0aGlzLmFjdGl2YXRpb25zLnB1c2goe3N0YXJ0eDptLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zKzIsc3RvcHg6bStmbi5hY3RpdmF0aW9uV2lkdGgsc3RvcHk6dm9pZCAwLGFjdG9yOmkuZnJvbS5hY3RvcixhbmNob3JlZDpKaC5hbmNob3JFbGVtZW50KGEpfSl9LGVuZEFjdGl2YXRpb246ZnVuY3Rpb24oaSl7Y29uc3QgYT10aGlzLmFjdGl2YXRpb25zLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5hY3Rvcn0pLmxhc3RJbmRleE9mKGkuZnJvbS5hY3Rvcik7cmV0dXJuIHRoaXMuYWN0aXZhdGlvbnMuc3BsaWNlKGEsMSlbMF19LGNyZWF0ZUxvb3A6ZnVuY3Rpb24oaT17bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LGEpe3JldHVybntzdGFydHg6dm9pZCAwLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zLHN0b3B4OnZvaWQgMCxzdG9weTp2b2lkIDAsdGl0bGU6aS5tZXNzYWdlLHdyYXA6aS53cmFwLHdpZHRoOmkud2lkdGgsaGVpZ2h0OjAsZmlsbDphfX0sbmV3TG9vcDpmdW5jdGlvbihpPXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sYSl7dGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMb29wKGksYSkpfSxlbmRMb29wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKX0saXNMb29wT3ZlcmxhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMubGVuZ3RoP3RoaXMuc2VxdWVuY2VJdGVtc1t0aGlzLnNlcXVlbmNlSXRlbXMubGVuZ3RoLTFdLm92ZXJsYXA6ITF9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24oaSl7Y29uc3QgYT10aGlzLnNlcXVlbmNlSXRlbXMucG9wKCk7YS5zZWN0aW9ucz1hLnNlY3Rpb25zfHxbXSxhLnNlY3Rpb25UaXRsZXM9YS5zZWN0aW9uVGl0bGVzfHxbXSxhLnNlY3Rpb25zLnB1c2goe3k6UHIuZ2V0VmVydGljYWxQb3MoKSxoZWlnaHQ6MH0pLGEuc2VjdGlvblRpdGxlcy5wdXNoKGkpLHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKGEpfSxzYXZlVmVydGljYWxQb3M6ZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMuc2F2ZWRWZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zKX0scmVzZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3RoaXMuaXNMb29wT3ZlcmxhcCgpJiYodGhpcy52ZXJ0aWNhbFBvcz10aGlzLnNhdmVkVmVydGljYWxQb3MpfSxidW1wVmVydGljYWxQb3M6ZnVuY3Rpb24oaSl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK2ksdGhpcy5kYXRhLnN0b3B5PVlyLmdldE1heCh0aGlzLmRhdGEuc3RvcHksdGhpcy52ZXJ0aWNhbFBvcyl9LGdldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybntib3VuZHM6dGhpcy5kYXRhLG1vZGVsczp0aGlzLm1vZGVsc319fSxXSGU9ZnVuY3Rpb24oaSxhKXtQci5idW1wVmVydGljYWxQb3MoZm4uYm94TWFyZ2luKSxhLmhlaWdodD1mbi5ib3hNYXJnaW4sYS5zdGFydHk9UHIuZ2V0VmVydGljYWxQb3MoKTtjb25zdCBmPWZUKCk7Zi54PWEuc3RhcnR4LGYueT1hLnN0YXJ0eSxmLndpZHRoPWEud2lkdGh8fGZuLndpZHRoLGYuY2xhc3M9Im5vdGUiO2NvbnN0IHA9aS5hcHBlbmQoImciKSx2PUpoLmRyYXdSZWN0KHAsZiksbT1QZHQoKTttLng9YS5zdGFydHgsbS55PWEuc3RhcnR5LG0ud2lkdGg9Zi53aWR0aCxtLmR5PSIxZW0iLG0udGV4dD1hLm1lc3NhZ2UsbS5jbGFzcz0ibm90ZVRleHQiLG0uZm9udEZhbWlseT1mbi5ub3RlRm9udEZhbWlseSxtLmZvbnRTaXplPWZuLm5vdGVGb250U2l6ZSxtLmZvbnRXZWlnaHQ9Zm4ubm90ZUZvbnRXZWlnaHQsbS5hbmNob3I9Zm4ubm90ZUFsaWduLG0udGV4dE1hcmdpbj1mbi5ub3RlTWFyZ2luLG0udmFsaWduPSJjZW50ZXIiO2NvbnN0IGI9bEwocCxtKSxFPU1hdGgucm91bmQoYi5tYXAoXz0+KF8uX2dyb3Vwc3x8XylbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChfLEwpPT5fK0wpKTt2LmF0dHIoImhlaWdodCIsRSsyKmZuLm5vdGVNYXJnaW4pLGEuaGVpZ2h0Kz1FKzIqZm4ubm90ZU1hcmdpbixQci5idW1wVmVydGljYWxQb3MoRSsyKmZuLm5vdGVNYXJnaW4pLGEuc3RvcHk9YS5zdGFydHkrRSsyKmZuLm5vdGVNYXJnaW4sYS5zdG9weD1hLnN0YXJ0eCtmLndpZHRoLFByLmluc2VydChhLnN0YXJ0eCxhLnN0YXJ0eSxhLnN0b3B4LGEuc3RvcHkpLFByLm1vZGVscy5hZGROb3RlKGEpfSxUVD1pPT4oe2ZvbnRGYW1pbHk6aS5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTppLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OmkubWVzc2FnZUZvbnRXZWlnaHR9KSxoTD1pPT4oe2ZvbnRGYW1pbHk6aS5ub3RlRm9udEZhbWlseSxmb250U2l6ZTppLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0Omkubm90ZUZvbnRXZWlnaHR9KSxkZ3Q9aT0+KHtmb250RmFtaWx5OmkuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOmkuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OmkuYWN0b3JGb250V2VpZ2h0fSk7ZnVuY3Rpb24gS0hlKGksYSl7UHIuYnVtcFZlcnRpY2FsUG9zKDEwKTtjb25zdHtzdGFydHg6ZixzdG9weDpwLG1lc3NhZ2U6dn09YSxtPVlyLnNwbGl0QnJlYWtzKHYpLmxlbmd0aCxiPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHYsVFQoZm4pKSxFPWIuaGVpZ2h0L207YS5oZWlnaHQrPUUsUHIuYnVtcFZlcnRpY2FsUG9zKEUpO2xldCBfLEw9Yi5oZWlnaHQtMTA7Y29uc3QgTj1iLndpZHRoO2lmKGY9PT1wKXtfPVByLmdldFZlcnRpY2FsUG9zKCkrTCxmbi5yaWdodEFuZ2xlc3x8KEwrPWZuLmJveE1hcmdpbixfPVByLmdldFZlcnRpY2FsUG9zKCkrTCksTCs9MzA7Y29uc3QgQj1Zci5nZXRNYXgoTi8yLGZuLndpZHRoLzIpO1ByLmluc2VydChmLUIsUHIuZ2V0VmVydGljYWxQb3MoKS0xMCtMLHArQixQci5nZXRWZXJ0aWNhbFBvcygpKzMwK0wpfWVsc2UgTCs9Zm4uYm94TWFyZ2luLF89UHIuZ2V0VmVydGljYWxQb3MoKStMLFByLmluc2VydChmLF8tMTAscCxfKTtyZXR1cm4gUHIuYnVtcFZlcnRpY2FsUG9zKEwpLGEuaGVpZ2h0Kz1MLGEuc3RvcHk9YS5zdGFydHkrYS5oZWlnaHQsUHIuaW5zZXJ0KGEuZnJvbUJvdW5kcyxhLnN0YXJ0eSxhLnRvQm91bmRzLGEuc3RvcHkpLF99Y29uc3QgWUhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e3N0YXJ0eDp2LHN0b3B4Om0sc3RhcnR5OmIsbWVzc2FnZTpFLHR5cGU6XyxzZXF1ZW5jZUluZGV4Okwsc2VxdWVuY2VWaXNpYmxlOk59PWEsQj0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhFLFRUKGZuKSksaj1QZHQoKTtqLng9dixqLnk9YisxMCxqLndpZHRoPW0tdixqLmNsYXNzPSJtZXNzYWdlVGV4dCIsai5keT0iMWVtIixqLnRleHQ9RSxqLmZvbnRGYW1pbHk9Zm4ubWVzc2FnZUZvbnRGYW1pbHksai5mb250U2l6ZT1mbi5tZXNzYWdlRm9udFNpemUsai5mb250V2VpZ2h0PWZuLm1lc3NhZ2VGb250V2VpZ2h0LGouYW5jaG9yPWZuLm1lc3NhZ2VBbGlnbixqLnZhbGlnbj0iY2VudGVyIixqLnRleHRNYXJnaW49Zm4ud3JhcFBhZGRpbmcsai50c3Bhbj0hMSxsTChpLGopO2NvbnN0IFI9Qi53aWR0aDtsZXQgejt2PT09bT9mbi5yaWdodEFuZ2xlcz96PWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gICR7dn0sJHtmfSBIICR7ditZci5nZXRNYXgoZm4ud2lkdGgvMixSLzIpfSBWICR7ZisyNX0gSCAke3Z9YCk6ej1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIrdisiLCIrZisiIEMgIisodis2MCkrIiwiKyhmLTEwKSsiICIrKHYrNjApKyIsIisoZiszMCkrIiAiK3YrIiwiKyhmKzIwKSk6KHo9aS5hcHBlbmQoImxpbmUiKSx6LmF0dHIoIngxIix2KSx6LmF0dHIoInkxIixmKSx6LmF0dHIoIngyIixtKSx6LmF0dHIoInkyIixmKSksXz09PXAuZGIuTElORVRZUEUuRE9UVEVEfHxfPT09cC5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX09QRU4/KHouc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIiksei5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMSIpKTp6LmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUwIik7bGV0IEs9IiI7Zm4uYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEs9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsSz1LLnJlcGxhY2UoL1woL2csIlxcKCIpLEs9Sy5yZXBsYWNlKC9cKS9nLCJcXCkiKSksei5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLHouYXR0cigic3Ryb2tlIiwibm9uZSIpLHouc3R5bGUoImZpbGwiLCJub25lIiksKF89PT1wLmRiLkxJTkVUWVBFLlNPTElEfHxfPT09cC5kYi5MSU5FVFlQRS5ET1RURUQpJiZ6LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjYXJyb3doZWFkKSIpLChfPT09cC5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UKSYmei5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrSysiI2ZpbGxlZC1oZWFkKSIpLChfPT09cC5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TU3x8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTKSYmei5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrSysiI2Nyb3NzaGVhZCkiKSwoTnx8Zm4uc2hvd1NlcXVlbmNlTnVtYmVycykmJih6LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0srIiNzZXF1ZW5jZW51bWJlcikiKSxpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHYpLmF0dHIoInkiLGYrNCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwiMTJweCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzZXF1ZW5jZU51bWJlciIpLnRleHQoTCkpfSxYSGU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYil7bGV0IEU9MCxfPTAsTCxOPTA7Zm9yKGNvbnN0IEIgb2YgcCl7Y29uc3Qgaj1hW0JdLFI9ai5ib3g7TCYmTCE9UiYmKGJ8fFByLm1vZGVscy5hZGRCb3goTCksXys9Zm4uYm94TWFyZ2luK0wubWFyZ2luKSxSJiZSIT1MJiYoYnx8KFIueD1FK18sUi55PXYpLF8rPVIubWFyZ2luKSxqLndpZHRoPWoud2lkdGh8fGZuLndpZHRoLGouaGVpZ2h0PVlyLmdldE1heChqLmhlaWdodHx8Zm4uaGVpZ2h0LGZuLmhlaWdodCksai5tYXJnaW49ai5tYXJnaW58fGZuLmFjdG9yTWFyZ2luLE49WXIuZ2V0TWF4KE4sai5oZWlnaHQpLGZbai5uYW1lXSYmKF8rPWoud2lkdGgvMiksai54PUUrXyxqLnN0YXJ0eT1Qci5nZXRWZXJ0aWNhbFBvcygpLFByLmluc2VydChqLngsdixqLngrai53aWR0aCxqLmhlaWdodCksRSs9ai53aWR0aCtfLGouYm94JiYoai5ib3gud2lkdGg9RStSLm1hcmdpbi1qLmJveC54KSxfPWoubWFyZ2luLEw9ai5ib3gsUHIubW9kZWxzLmFkZEFjdG9yKGopfUwmJiFiJiZQci5tb2RlbHMuYWRkQm94KEwpLFByLmJ1bXBWZXJ0aWNhbFBvcyhOKX0sZ2d0PWZ1bmN0aW9uKGksYSxmLHApe2lmKHApe2xldCB2PTA7UHIuYnVtcFZlcnRpY2FsUG9zKGZuLmJveE1hcmdpbioyKTtmb3IoY29uc3QgbSBvZiBmKXtjb25zdCBiPWFbbV07Yi5zdG9weXx8KGIuc3RvcHk9UHIuZ2V0VmVydGljYWxQb3MoKSk7Y29uc3QgRT1KaC5kcmF3QWN0b3IoaSxiLGZuLCEwKTt2PVlyLmdldE1heCh2LEUpfVByLmJ1bXBWZXJ0aWNhbFBvcyh2K2ZuLmJveE1hcmdpbil9ZWxzZSBmb3IoY29uc3QgdiBvZiBmKXtjb25zdCBtPWFbdl07SmguZHJhd0FjdG9yKGksbSxmbiwhMSl9fSxFUnQ9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9MCxtPTA7Zm9yKGNvbnN0IGIgb2YgZil7Y29uc3QgRT1hW2JdLF89dEdlKEUpLEw9SmguZHJhd1BvcHVwKGksRSxfLGZuLGZuLmZvcmNlTWVudXMscCk7TC5oZWlnaHQ+diYmKHY9TC5oZWlnaHQpLEwud2lkdGgrRS54Pm0mJihtPUwud2lkdGgrRS54KX1yZXR1cm57bWF4SGVpZ2h0OnYsbWF4V2lkdGg6bX19LFRSdD1mdW5jdGlvbihpKXtZMShmbixpKSxpLmZvbnRGYW1pbHkmJihmbi5hY3RvckZvbnRGYW1pbHk9Zm4ubm90ZUZvbnRGYW1pbHk9Zm4ubWVzc2FnZUZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxpLmZvbnRTaXplJiYoZm4uYWN0b3JGb250U2l6ZT1mbi5ub3RlRm9udFNpemU9Zm4ubWVzc2FnZUZvbnRTaXplPWkuZm9udFNpemUpLGkuZm9udFdlaWdodCYmKGZuLmFjdG9yRm9udFdlaWdodD1mbi5ub3RlRm9udFdlaWdodD1mbi5tZXNzYWdlRm9udFdlaWdodD1pLmZvbnRXZWlnaHQpfSxBSz1mdW5jdGlvbihpKXtyZXR1cm4gUHIuYWN0aXZhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFjdG9yPT09aX0pfSxDUnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWFbaV0scD1BSyhpKSx2PXAucmVkdWNlKGZ1bmN0aW9uKGIsRSl7cmV0dXJuIFlyLmdldE1pbihiLEUuc3RhcnR4KX0sZi54K2Yud2lkdGgvMi0xKSxtPXAucmVkdWNlKGZ1bmN0aW9uKGIsRSl7cmV0dXJuIFlyLmdldE1heChiLEUuc3RvcHgpfSxmLngrZi53aWR0aC8yKzEpO3JldHVyblt2LG1dfTtmdW5jdGlvbiB5MyhpLGEsZixwLHYpe1ByLmJ1bXBWZXJ0aWNhbFBvcyhmKTtsZXQgbT1wO2lmKGEuaWQmJmEubWVzc2FnZSYmaVthLmlkXSl7Y29uc3QgYj1pW2EuaWRdLndpZHRoLEU9VFQoZm4pO2EubWVzc2FnZT0kYS53cmFwTGFiZWwoYFske2EubWVzc2FnZX1dYCxiLTIqZm4ud3JhcFBhZGRpbmcsRSksYS53aWR0aD1iLGEud3JhcD0hMDtjb25zdCBfPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEubWVzc2FnZSxFKSxMPVlyLmdldE1heChfLmhlaWdodCxmbi5sYWJlbEJveEhlaWdodCk7bT1wK0wsVXQuZGVidWcoYCR7TH0gLSAke2EubWVzc2FnZX1gKX12KGEpLFByLmJ1bXBWZXJ0aWNhbFBvcyhtKX1mdW5jdGlvbiBRSGUoaSxhLGYscCx2LG0sYil7ZnVuY3Rpb24gRShMLE4pe0wueDx2W2kuZnJvbV0ueD8oUHIuaW5zZXJ0KGEuc3RvcHgtTixhLnN0YXJ0eSxhLnN0YXJ0eCxhLnN0b3B5K0wuaGVpZ2h0LzIrZm4ubm90ZU1hcmdpbiksYS5zdG9weD1hLnN0b3B4K04pOihQci5pbnNlcnQoYS5zdGFydHgsYS5zdGFydHksYS5zdG9weCtOLGEuc3RvcHkrTC5oZWlnaHQvMitmbi5ub3RlTWFyZ2luKSxhLnN0b3B4PWEuc3RvcHgtTil9ZnVuY3Rpb24gXyhMLE4pe0wueDx2W2kudG9dLng/KFByLmluc2VydChhLnN0YXJ0eC1OLGEuc3RhcnR5LGEuc3RvcHgsYS5zdG9weStMLmhlaWdodC8yK2ZuLm5vdGVNYXJnaW4pLGEuc3RhcnR4PWEuc3RhcnR4K04pOihQci5pbnNlcnQoYS5zdG9weCxhLnN0YXJ0eSxhLnN0YXJ0eCtOLGEuc3RvcHkrTC5oZWlnaHQvMitmbi5ub3RlTWFyZ2luKSxhLnN0YXJ0eD1hLnN0YXJ0eC1OKX1pZihtW2kudG9dPT1wKXtjb25zdCBMPXZbaS50b10sTj1MLnR5cGU9PSJhY3RvciI/RVQvMiszOkwud2lkdGgvMiszO0UoTCxOKSxMLnN0YXJ0eT1mLUwuaGVpZ2h0LzIsUHIuYnVtcFZlcnRpY2FsUG9zKEwuaGVpZ2h0LzIpfWVsc2UgaWYoYltpLmZyb21dPT1wKXtjb25zdCBMPXZbaS5mcm9tXTtpZihmbi5taXJyb3JBY3RvcnMpe2NvbnN0IE49TC50eXBlPT0iYWN0b3IiP0VULzI6TC53aWR0aC8yO18oTCxOKX1MLnN0b3B5PWYtTC5oZWlnaHQvMixQci5idW1wVmVydGljYWxQb3MoTC5oZWlnaHQvMil9ZWxzZSBpZihiW2kudG9dPT1wKXtjb25zdCBMPXZbaS50b107aWYoZm4ubWlycm9yQWN0b3JzKXtjb25zdCBOPUwudHlwZT09ImFjdG9yIj9FVC8yKzM6TC53aWR0aC8yKzM7RShMLE4pfUwuc3RvcHk9Zi1MLmhlaWdodC8yLFByLmJ1bXBWZXJ0aWNhbFBvcyhMLmhlaWdodC8yKX19Y29uc3QgWkhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e3NlY3VyaXR5TGV2ZWw6dixzZXF1ZW5jZTptfT1MZSgpO2ZuPW07bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgRT15cih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLF89dj09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1ByLmluaXQoKSxVdC5kZWJ1ZyhwLmRiKTtjb25zdCBMPXY9PT0ic2FuZGJveCI/RS5zZWxlY3QoYFtpZD0iJHthfSJdYCk6eXIoYFtpZD0iJHthfSJdYCksTj1wLmRiLmdldEFjdG9ycygpLEI9cC5kYi5nZXRDcmVhdGVkQWN0b3JzKCksaj1wLmRiLmdldERlc3Ryb3llZEFjdG9ycygpLFI9cC5kYi5nZXRCb3hlcygpO2xldCB6PXAuZGIuZ2V0QWN0b3JLZXlzKCk7Y29uc3QgSz1wLmRiLmdldE1lc3NhZ2VzKCksaXQ9cC5kYi5nZXREaWFncmFtVGl0bGUoKSxzdD1wLmRiLmhhc0F0TGVhc3RPbmVCb3goKSx1dD1wLmRiLmhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUoKSxidD1KSGUoTixLLHApO2lmKGZuLmhlaWdodD1lR2UoTixidCxSKSxKaC5pbnNlcnRDb21wdXRlckljb24oTCksSmguaW5zZXJ0RGF0YWJhc2VJY29uKEwpLEpoLmluc2VydENsb2NrSWNvbihMKSxzdCYmKFByLmJ1bXBWZXJ0aWNhbFBvcyhmbi5ib3hNYXJnaW4pLHV0JiZQci5idW1wVmVydGljYWxQb3MoUlswXS50ZXh0TWF4SGVpZ2h0KSksZm4uaGlkZVVudXNlZFBhcnRpY2lwYW50cz09PSEwKXtjb25zdCBDdD1uZXcgU2V0O0suZm9yRWFjaChaPT57Q3QuYWRkKFouZnJvbSksQ3QuYWRkKFoudG8pfSksej16LmZpbHRlcihaPT5DdC5oYXMoWikpfVhIZShMLE4sQix6LDAsSywhMSk7Y29uc3QgbXQ9aUdlKEssTixidCxwKTtKaC5pbnNlcnRBcnJvd0hlYWQoTCksSmguaW5zZXJ0QXJyb3dDcm9zc0hlYWQoTCksSmguaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKEwpLEpoLmluc2VydFNlcXVlbmNlTnVtYmVyKEwpO2Z1bmN0aW9uIHl0KEN0LFope2NvbnN0IFR0PVByLmVuZEFjdGl2YXRpb24oQ3QpO1R0LnN0YXJ0eSsxOD5aJiYoVHQuc3RhcnR5PVotNixaKz0xMiksSmguZHJhd0FjdGl2YXRpb24oTCxUdCxaLGZuLEFLKEN0LmZyb20uYWN0b3IpLmxlbmd0aCksUHIuaW5zZXJ0KFR0LnN0YXJ0eCxaLTEwLFR0LnN0b3B4LFopfWxldCBkdD0xLGh0PTE7Y29uc3Qgd3Q9W10sWD1bXTtLLmZvckVhY2goZnVuY3Rpb24oQ3QsWil7bGV0IFR0LEh0LEl0O3N3aXRjaChDdC50eXBlKXtjYXNlIHAuZGIuTElORVRZUEUuTk9URTpQci5yZXNldFZlcnRpY2FsUG9zKCksSHQ9Q3Qubm90ZU1vZGVsLFdIZShMLEh0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUNUSVZFX1NUQVJUOlByLm5ld0FjdGl2YXRpb24oQ3QsTCxOKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUNUSVZFX0VORDp5dChDdCxQci5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9TVEFSVDp5MyhtdCxDdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sRnQ9PlByLm5ld0xvb3AoRnQpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9FTkQ6VHQ9UHIuZW5kTG9vcCgpLEpoLmRyYXdMb29wKEwsVHQsImxvb3AiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5SRUNUX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4sRnQ9PlByLm5ld0xvb3Aodm9pZCAwLEZ0Lm1lc3NhZ2UpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUkVDVF9FTkQ6VHQ9UHIuZW5kTG9vcCgpLFgucHVzaChUdCksUHIubW9kZWxzLmFkZExvb3AoVHQpLFByLmJ1bXBWZXJ0aWNhbFBvcyhUdC5zdG9weS1Qci5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuT1BUX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixGdD0+UHIubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5PUFRfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJvcHQiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6eTMobXQsQ3QsZm4uYm94TWFyZ2luLGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLEZ0PT5Qci5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9FTFNFOnkzKG10LEN0LGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLGZuLmJveE1hcmdpbixGdD0+UHIuYWRkU2VjdGlvblRvTG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJhbHQiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixGdD0+UHIubmV3TG9vcChGdCkpLFByLnNhdmVWZXJ0aWNhbFBvcygpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5QQVJfQU5EOnkzKG10LEN0LGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLGZuLmJveE1hcmdpbixGdD0+UHIuYWRkU2VjdGlvblRvTG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5QQVJfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJwYXIiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BVVRPTlVNQkVSOmR0PUN0Lm1lc3NhZ2Uuc3RhcnR8fGR0LGh0PUN0Lm1lc3NhZ2Uuc3RlcHx8aHQsQ3QubWVzc2FnZS52aXNpYmxlP3AuZGIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk6cC5kYi5kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixGdD0+UHIubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046eTMobXQsQ3QsZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sZm4uYm94TWFyZ2luLEZ0PT5Qci5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpUdD1Qci5lbmRMb29wKCksSmguZHJhd0xvb3AoTCxUdCwiY3JpdGljYWwiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDp5MyhtdCxDdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sRnQ9PlByLm5ld0xvb3AoRnQpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJicmVhayIsZm4pLFByLmJ1bXBWZXJ0aWNhbFBvcyhUdC5zdG9weS1Qci5nZXRWZXJ0aWNhbFBvcygpKSxQci5tb2RlbHMuYWRkTG9vcChUdCk7YnJlYWs7ZGVmYXVsdDp0cnl7SXQ9Q3QubXNnTW9kZWwsSXQuc3RhcnR5PVByLmdldFZlcnRpY2FsUG9zKCksSXQuc2VxdWVuY2VJbmRleD1kdCxJdC5zZXF1ZW5jZVZpc2libGU9cC5kYi5zaG93U2VxdWVuY2VOdW1iZXJzKCk7Y29uc3QgRnQ9S0hlKEwsSXQpO1FIZShDdCxJdCxGdCxaLE4sQixqKSx3dC5wdXNoKHttZXNzYWdlTW9kZWw6SXQsbGluZVN0YXJ0WTpGdH0pLFByLm1vZGVscy5hZGRNZXNzYWdlKEl0KX1jYXRjaChGdCl7VXQuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsRnQpfX1bcC5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHAuZGIuTElORVRZUEUuRE9UVEVEX09QRU4scC5kYi5MSU5FVFlQRS5TT0xJRCxwLmRiLkxJTkVUWVBFLkRPVFRFRCxwLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLHAuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLHAuZGIuTElORVRZUEUuU09MSURfUE9JTlQscC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKEN0LnR5cGUpJiYoZHQ9ZHQraHQpfSksVXQuZGVidWcoImNyZWF0ZWRBY3RvcnMiLEIpLFV0LmRlYnVnKCJkZXN0cm95ZWRBY3RvcnMiLGopLGdndChMLE4seiwhMSksd3QuZm9yRWFjaChDdD0+WUhlKEwsQ3QubWVzc2FnZU1vZGVsLEN0LmxpbmVTdGFydFkscCkpLGZuLm1pcnJvckFjdG9ycyYmZ2d0KEwsTix6LCEwKSxYLmZvckVhY2goQ3Q9PkpoLmRyYXdCYWNrZ3JvdW5kUmVjdChMLEN0KSkseVJ0KEwsTix6LGZuKSxQci5tb2RlbHMuYm94ZXMuZm9yRWFjaChmdW5jdGlvbihDdCl7Q3QuaGVpZ2h0PVByLmdldFZlcnRpY2FsUG9zKCktQ3QueSxQci5pbnNlcnQoQ3QueCxDdC55LEN0LngrQ3Qud2lkdGgsQ3QuaGVpZ2h0KSxDdC5zdGFydHg9Q3QueCxDdC5zdGFydHk9Q3QueSxDdC5zdG9weD1DdC5zdGFydHgrQ3Qud2lkdGgsQ3Quc3RvcHk9Q3Quc3RhcnR5K0N0LmhlaWdodCxDdC5zdHJva2U9InJnYigwLDAsMCwgMC41KSIsSmguZHJhd0JveChMLEN0LGZuKX0pLHN0JiZQci5idW1wVmVydGljYWxQb3MoZm4uYm94TWFyZ2luKTtjb25zdCBwdD1FUnQoTCxOLHosXykse2JvdW5kczpVfT1Qci5nZXRCb3VuZHMoKTtsZXQgeHQ9VS5zdG9weS1VLnN0YXJ0eTt4dDxwdC5tYXhIZWlnaHQmJih4dD1wdC5tYXhIZWlnaHQpO2xldCBudD14dCsyKmZuLmRpYWdyYW1NYXJnaW5ZO2ZuLm1pcnJvckFjdG9ycyYmKG50PW50LWZuLmJveE1hcmdpbitmbi5ib3R0b21NYXJnaW5BZGopO2xldCBPdD1VLnN0b3B4LVUuc3RhcnR4O090PHB0Lm1heFdpZHRoJiYoT3Q9cHQubWF4V2lkdGgpO2NvbnN0IE50PU90KzIqZm4uZGlhZ3JhbU1hcmdpblg7aXQmJkwuYXBwZW5kKCJ0ZXh0IikudGV4dChpdCkuYXR0cigieCIsKFUuc3RvcHgtVS5zdGFydHgpLzItMipmbi5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSxvZyhMLG50LE50LGZuLnVzZU1heFdpZHRoKTtjb25zdCBxdD1pdD80MDowO0wuYXR0cigidmlld0JveCIsVS5zdGFydHgtZm4uZGlhZ3JhbU1hcmdpblgrIiAtIisoZm4uZGlhZ3JhbU1hcmdpblkrcXQpKyIgIitOdCsiICIrKG50K3F0KSksVXQuZGVidWcoIm1vZGVsczoiLFByLm1vZGVscyl9O2Z1bmN0aW9uIEpIZShpLGEsZil7Y29uc3QgcD17fTtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2lmKGlbdi50b10mJmlbdi5mcm9tXSl7Y29uc3QgbT1pW3YudG9dO2lmKHYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhbS5wcmV2QWN0b3J8fHYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIW0ubmV4dEFjdG9yKXJldHVybjtjb25zdCBiPXYucGxhY2VtZW50IT09dm9pZCAwLEU9IWIsXz1iP2hMKGZuKTpUVChmbiksTD12LndyYXA/JGEud3JhcExhYmVsKHYubWVzc2FnZSxmbi53aWR0aC0yKmZuLndyYXBQYWRkaW5nLF8pOnYubWVzc2FnZSxCPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKEwsXykud2lkdGgrMipmbi53cmFwUGFkZGluZztFJiZ2LmZyb209PT1tLm5leHRBY3Rvcj9wW3YudG9dPVlyLmdldE1heChwW3YudG9dfHwwLEIpOkUmJnYuZnJvbT09PW0ucHJldkFjdG9yP3Bbdi5mcm9tXT1Zci5nZXRNYXgocFt2LmZyb21dfHwwLEIpOkUmJnYuZnJvbT09PXYudG8/KHBbdi5mcm9tXT1Zci5nZXRNYXgocFt2LmZyb21dfHwwLEIvMikscFt2LnRvXT1Zci5nZXRNYXgocFt2LnRvXXx8MCxCLzIpKTp2LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/cFt2LmZyb21dPVlyLmdldE1heChwW3YuZnJvbV18fDAsQik6di5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5MRUZUT0Y/cFttLnByZXZBY3Rvcl09WXIuZ2V0TWF4KHBbbS5wcmV2QWN0b3JdfHwwLEIpOnYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuT1ZFUiYmKG0ucHJldkFjdG9yJiYocFttLnByZXZBY3Rvcl09WXIuZ2V0TWF4KHBbbS5wcmV2QWN0b3JdfHwwLEIvMikpLG0ubmV4dEFjdG9yJiYocFt2LmZyb21dPVlyLmdldE1heChwW3YuZnJvbV18fDAsQi8yKSkpfX0pLFV0LmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLHApLHB9Y29uc3QgdEdlPWZ1bmN0aW9uKGkpe2xldCBhPTA7Y29uc3QgZj1kZ3QoZm4pO2Zvcihjb25zdCBwIGluIGkubGlua3Mpe2NvbnN0IG09JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocCxmKS53aWR0aCsyKmZuLndyYXBQYWRkaW5nKzIqZm4uYm94TWFyZ2luO2E8bSYmKGE9bSl9cmV0dXJuIGF9O2Z1bmN0aW9uIGVHZShpLGEsZil7bGV0IHA9MDtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG09Pntjb25zdCBiPWlbbV07Yi53cmFwJiYoYi5kZXNjcmlwdGlvbj0kYS53cmFwTGFiZWwoYi5kZXNjcmlwdGlvbixmbi53aWR0aC0yKmZuLndyYXBQYWRkaW5nLGRndChmbikpKTtjb25zdCBFPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGIuZGVzY3JpcHRpb24sZGd0KGZuKSk7Yi53aWR0aD1iLndyYXA/Zm4ud2lkdGg6WXIuZ2V0TWF4KGZuLndpZHRoLEUud2lkdGgrMipmbi53cmFwUGFkZGluZyksYi5oZWlnaHQ9Yi53cmFwP1lyLmdldE1heChFLmhlaWdodCxmbi5oZWlnaHQpOmZuLmhlaWdodCxwPVlyLmdldE1heChwLGIuaGVpZ2h0KX0pO2Zvcihjb25zdCBtIGluIGEpe2NvbnN0IGI9aVttXTtpZighYiljb250aW51ZTtjb25zdCBFPWlbYi5uZXh0QWN0b3JdO2lmKCFFKXtjb25zdCBCPWFbbV0rZm4uYWN0b3JNYXJnaW4tYi53aWR0aC8yO2IubWFyZ2luPVlyLmdldE1heChCLGZuLmFjdG9yTWFyZ2luKTtjb250aW51ZX1jb25zdCBMPWFbbV0rZm4uYWN0b3JNYXJnaW4tYi53aWR0aC8yLUUud2lkdGgvMjtiLm1hcmdpbj1Zci5nZXRNYXgoTCxmbi5hY3Rvck1hcmdpbil9bGV0IHY9MDtyZXR1cm4gZi5mb3JFYWNoKG09Pntjb25zdCBiPVRUKGZuKTtsZXQgRT1tLmFjdG9yS2V5cy5yZWR1Y2UoKE4sQik9Pk4rPWlbQl0ud2lkdGgrKGlbQl0ubWFyZ2lufHwwKSwwKTtFLT0yKmZuLmJveFRleHRNYXJnaW4sbS53cmFwJiYobS5uYW1lPSRhLndyYXBMYWJlbChtLm5hbWUsRS0yKmZuLndyYXBQYWRkaW5nLGIpKTtjb25zdCBfPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG0ubmFtZSxiKTt2PVlyLmdldE1heChfLmhlaWdodCx2KTtjb25zdCBMPVlyLmdldE1heChFLF8ud2lkdGgrMipmbi53cmFwUGFkZGluZyk7aWYobS5tYXJnaW49Zm4uYm94VGV4dE1hcmdpbixFPEwpe2NvbnN0IE49KEwtRSkvMjttLm1hcmdpbis9Tn19KSxmLmZvckVhY2gobT0+bS50ZXh0TWF4SGVpZ2h0PXYpLFlyLmdldE1heChwLGZuLmhlaWdodCl9Y29uc3QgbkdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWFbaS5mcm9tXS54LHY9YVtpLnRvXS54LG09aS53cmFwJiZpLm1lc3NhZ2U7bGV0IGI9JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobT8kYS53cmFwTGFiZWwoaS5tZXNzYWdlLGZuLndpZHRoLGhMKGZuKSk6aS5tZXNzYWdlLGhMKGZuKSk7Y29uc3QgRT17d2lkdGg6bT9mbi53aWR0aDpZci5nZXRNYXgoZm4ud2lkdGgsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLGhlaWdodDowLHN0YXJ0eDphW2kuZnJvbV0ueCxzdG9weDowLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTppLm1lc3NhZ2V9O3JldHVybiBpLnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/KEUud2lkdGg9bT9Zci5nZXRNYXgoZm4ud2lkdGgsYi53aWR0aCk6WXIuZ2V0TWF4KGFbaS5mcm9tXS53aWR0aC8yK2FbaS50b10ud2lkdGgvMixiLndpZHRoKzIqZm4ubm90ZU1hcmdpbiksRS5zdGFydHg9cCsoYVtpLmZyb21dLndpZHRoK2ZuLmFjdG9yTWFyZ2luKS8yKTppLnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULkxFRlRPRj8oRS53aWR0aD1tP1lyLmdldE1heChmbi53aWR0aCxiLndpZHRoKzIqZm4ubm90ZU1hcmdpbik6WXIuZ2V0TWF4KGFbaS5mcm9tXS53aWR0aC8yK2FbaS50b10ud2lkdGgvMixiLndpZHRoKzIqZm4ubm90ZU1hcmdpbiksRS5zdGFydHg9cC1FLndpZHRoKyhhW2kuZnJvbV0ud2lkdGgtZm4uYWN0b3JNYXJnaW4pLzIpOmkudG89PT1pLmZyb20/KGI9JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobT8kYS53cmFwTGFiZWwoaS5tZXNzYWdlLFlyLmdldE1heChmbi53aWR0aCxhW2kuZnJvbV0ud2lkdGgpLGhMKGZuKSk6aS5tZXNzYWdlLGhMKGZuKSksRS53aWR0aD1tP1lyLmdldE1heChmbi53aWR0aCxhW2kuZnJvbV0ud2lkdGgpOllyLmdldE1heChhW2kuZnJvbV0ud2lkdGgsZm4ud2lkdGgsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLEUuc3RhcnR4PXArKGFbaS5mcm9tXS53aWR0aC1FLndpZHRoKS8yKTooRS53aWR0aD1NYXRoLmFicyhwK2FbaS5mcm9tXS53aWR0aC8yLSh2K2FbaS50b10ud2lkdGgvMikpK2ZuLmFjdG9yTWFyZ2luLEUuc3RhcnR4PXA8dj9wK2FbaS5mcm9tXS53aWR0aC8yLWZuLmFjdG9yTWFyZ2luLzI6dithW2kudG9dLndpZHRoLzItZm4uYWN0b3JNYXJnaW4vMiksbSYmKEUubWVzc2FnZT0kYS53cmFwTGFiZWwoaS5tZXNzYWdlLEUud2lkdGgtMipmbi53cmFwUGFkZGluZyxoTChmbikpKSxVdC5kZWJ1ZyhgTk06WyR7RS5zdGFydHh9LCR7RS5zdG9weH0sJHtFLnN0YXJ0eX0sJHtFLnN0b3B5fToke0Uud2lkdGh9LCR7RS5oZWlnaHR9PSR7aS5tZXNzYWdlfV1gKSxFfSxyR2U9ZnVuY3Rpb24oaSxhLGYpe2lmKCFbZi5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLGYuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sZi5kYi5MSU5FVFlQRS5TT0xJRCxmLmRiLkxJTkVUWVBFLkRPVFRFRCxmLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLGYuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLGYuZGIuTElORVRZUEUuU09MSURfUE9JTlQsZi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKGkudHlwZSkpcmV0dXJue307Y29uc3RbcCx2XT1DUnQoaS5mcm9tLGEpLFttLGJdPUNSdChpLnRvLGEpLEU9cDw9bSxfPUU/djpwO2xldCBMPUU/bTpiO2NvbnN0IE49TWF0aC5hYnMobS1iKT4yLEI9Sz0+RT8tSzpLO2kuZnJvbT09PWkudG8/TD1fOihpLmFjdGl2YXRlJiYhTiYmKEwrPUIoZm4uYWN0aXZhdGlvbldpZHRoLzItMSkpLFtmLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sZi5kYi5MSU5FVFlQRS5ET1RURURfT1BFTl0uaW5jbHVkZXMoaS50eXBlKXx8KEwrPUIoMykpKTtjb25zdCBqPVtwLHYsbSxiXSxSPU1hdGguYWJzKF8tTCk7aS53cmFwJiZpLm1lc3NhZ2UmJihpLm1lc3NhZ2U9JGEud3JhcExhYmVsKGkubWVzc2FnZSxZci5nZXRNYXgoUisyKmZuLndyYXBQYWRkaW5nLGZuLndpZHRoKSxUVChmbikpKTtjb25zdCB6PSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGkubWVzc2FnZSxUVChmbikpO3JldHVybnt3aWR0aDpZci5nZXRNYXgoaS53cmFwPzA6ei53aWR0aCsyKmZuLndyYXBQYWRkaW5nLFIrMipmbi53cmFwUGFkZGluZyxmbi53aWR0aCksaGVpZ2h0OjAsc3RhcnR4Ol8sc3RvcHg6TCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6aS5tZXNzYWdlLHR5cGU6aS50eXBlLHdyYXA6aS53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxqKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLGopfX0saUdlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9e30sbT1bXTtsZXQgYixFLF87cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihMKXtzd2l0Y2goTC5pZD0kYS5yYW5kb20oe2xlbmd0aDoxMH0pLEwudHlwZSl7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuT1BUX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6bS5wdXNoKHtpZDpMLmlkLG1zZzpMLm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfQU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046TC5tZXNzYWdlJiYoYj1tLnBvcCgpLHZbYi5pZF09Yix2W0wuaWRdPWIsbS5wdXNoKGIpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfRU5EOmI9bS5wb3AoKSx2W2IuaWRdPWI7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDp7Y29uc3QgQj1hW0wuZnJvbT9MLmZyb20uYWN0b3I6TC50by5hY3Rvcl0saj1BSyhMLmZyb20/TC5mcm9tLmFjdG9yOkwudG8uYWN0b3IpLmxlbmd0aCxSPUIueCtCLndpZHRoLzIrKGotMSkqZm4uYWN0aXZhdGlvbldpZHRoLzIsej17c3RhcnR4OlIsc3RvcHg6Uitmbi5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6TC5mcm9tLmFjdG9yLGVuYWJsZWQ6ITB9O1ByLmFjdGl2YXRpb25zLnB1c2goeil9YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2NvbnN0IEI9UHIuYWN0aXZhdGlvbnMubWFwKGo9PmouYWN0b3IpLmxhc3RJbmRleE9mKEwuZnJvbS5hY3Rvcik7ZGVsZXRlIFByLmFjdGl2YXRpb25zLnNwbGljZShCLDEpWzBdfWJyZWFrfUwucGxhY2VtZW50IT09dm9pZCAwPyhFPW5HZShMLGEscCksTC5ub3RlTW9kZWw9RSxtLmZvckVhY2goQj0+e2I9QixiLmZyb209WXIuZ2V0TWluKGIuZnJvbSxFLnN0YXJ0eCksYi50bz1Zci5nZXRNYXgoYi50byxFLnN0YXJ0eCtFLndpZHRoKSxiLndpZHRoPVlyLmdldE1heChiLndpZHRoLE1hdGguYWJzKGIuZnJvbS1iLnRvKSktZm4ubGFiZWxCb3hXaWR0aH0pKTooXz1yR2UoTCxhLHApLEwubXNnTW9kZWw9XyxfLnN0YXJ0eCYmXy5zdG9weCYmbS5sZW5ndGg+MCYmbS5mb3JFYWNoKEI9PntpZihiPUIsXy5zdGFydHg9PT1fLnN0b3B4KXtjb25zdCBqPWFbTC5mcm9tXSxSPWFbTC50b107Yi5mcm9tPVlyLmdldE1pbihqLngtXy53aWR0aC8yLGoueC1qLndpZHRoLzIsYi5mcm9tKSxiLnRvPVlyLmdldE1heChSLngrXy53aWR0aC8yLFIueCtqLndpZHRoLzIsYi50byksYi53aWR0aD1Zci5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLnRvLWIuZnJvbSkpLWZuLmxhYmVsQm94V2lkdGh9ZWxzZSBiLmZyb209WXIuZ2V0TWluKF8uc3RhcnR4LGIuZnJvbSksYi50bz1Zci5nZXRNYXgoXy5zdG9weCxiLnRvKSxiLndpZHRoPVlyLmdldE1heChiLndpZHRoLF8ud2lkdGgpLWZuLmxhYmVsQm94V2lkdGh9KSl9KSxQci5hY3RpdmF0aW9ucz1bXSxVdC5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLHYpLHZ9LHNHZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmVIZSxkYjp2UnQscmVuZGVyZXI6e2JvdW5kczpQcixkcmF3QWN0b3JzOmdndCxkcmF3QWN0b3JzUG9wdXA6RVJ0LHNldENvbmY6VFJ0LGRyYXc6WkhlfSxzdHlsZXM6Q0hlLGluaXQ6KHt3cmFwOml9KT0+e3ZSdC5zZXRXcmFwKGkpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHBndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKF9lLCR0LHJlLGllKXtmb3IocmU9cmV8fHt9LGllPV9lLmxlbmd0aDtpZS0tO3JlW19lW2llXV09JHQpO3JldHVybiByZX0sYT1bMSwxNl0sZj1bMSwxN10scD1bMSwxOF0sdj1bMSwzN10sbT1bMSwzOF0sYj1bMSwyNF0sRT1bMSwyMl0sXz1bMSwyM10sTD1bMSwyOV0sTj1bMSwzMF0sQj1bMSwzMV0saj1bMSwzMl0sUj1bMSwzM10sej1bMSwzNF0sSz1bMSwyNV0saXQ9WzEsMjZdLHN0PVsxLDI3XSx1dD1bMSwyOF0sYnQ9WzEsNDJdLG10PVsxLDM5XSx5dD1bMSw0MF0sZHQ9WzEsNDFdLGh0PVsxLDQzXSx3dD1bMSw5XSxYPVsxLDgsOV0scHQ9WzEsNTRdLFU9WzEsNTVdLHh0PVsxLDU2XSxudD1bMSw1N10sT3Q9WzEsNThdLE50PVsxLDU5XSxxdD1bMSw2MF0sQ3Q9WzEsOCw5LDM4XSxaPVsxLDcxXSxUdD1bMSw4LDksMTIsMTMsMjEsMzYsMzgsNDEsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjksNzFdLEh0PVsxLDgsOSwxMiwxMywxOSwyMSwzNiwzOCw0MSw0NSw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2OSw3MSw4NCw4Niw4Nyw4OCw4OV0sSXQ9WzEzLDg0LDg2LDg3LDg4LDg5XSxGdD1bMTMsNjMsNjQsODQsODYsODcsODgsODldLGtlPVsxMyw1OCw1OSw2MCw2MSw2Miw4NCw4Niw4Nyw4OCw4OV0scG49WzEsOTBdLE1lPVsxLDgsOSwzNiwzOCw0MV0sdmU9WzEsOCw5LDIxXSxHZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LHN0YXRlbWVudHM6NSxncmFwaENvbmZpZzo2LENMQVNTX0RJQUdSQU06NyxORVdMSU5FOjgsRU9GOjksc3RhdGVtZW50OjEwLGNsYXNzTGFiZWw6MTEsU1FTOjEyLFNUUjoxMyxTUUU6MTQsbmFtZXNwYWNlTmFtZToxNSxhbHBoYU51bVRva2VuOjE2LGNsYXNzTmFtZToxNyxjbGFzc0xpdGVyYWxOYW1lOjE4LEdFTkVSSUNUWVBFOjE5LHJlbGF0aW9uU3RhdGVtZW50OjIwLExBQkVMOjIxLG5hbWVzcGFjZVN0YXRlbWVudDoyMixjbGFzc1N0YXRlbWVudDoyMyxtZW1iZXJTdGF0ZW1lbnQ6MjQsYW5ub3RhdGlvblN0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixjc3NDbGFzc1N0YXRlbWVudDoyNyxub3RlU3RhdGVtZW50OjI4LGRpcmVjdGlvbjoyOSxhY2NfdGl0bGU6MzAsYWNjX3RpdGxlX3ZhbHVlOjMxLGFjY19kZXNjcjozMixhY2NfZGVzY3JfdmFsdWU6MzMsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNCxuYW1lc3BhY2VJZGVudGlmaWVyOjM1LFNUUlVDVF9TVEFSVDozNixjbGFzc1N0YXRlbWVudHM6MzcsU1RSVUNUX1NUT1A6MzgsTkFNRVNQQUNFOjM5LGNsYXNzSWRlbnRpZmllcjo0MCxTVFlMRV9TRVBBUkFUT1I6NDEsbWVtYmVyczo0MixDTEFTUzo0MyxBTk5PVEFUSU9OX1NUQVJUOjQ0LEFOTk9UQVRJT05fRU5EOjQ1LE1FTUJFUjo0NixTRVBBUkFUT1I6NDcscmVsYXRpb246NDgsTk9URV9GT1I6NDksbm90ZVRleHQ6NTAsTk9URTo1MSxkaXJlY3Rpb25fdGI6NTIsZGlyZWN0aW9uX2J0OjUzLGRpcmVjdGlvbl9ybDo1NCxkaXJlY3Rpb25fbHI6NTUscmVsYXRpb25UeXBlOjU2LGxpbmVUeXBlOjU3LEFHR1JFR0FUSU9OOjU4LEVYVEVOU0lPTjo1OSxDT01QT1NJVElPTjo2MCxERVBFTkRFTkNZOjYxLExPTExJUE9QOjYyLExJTkU6NjMsRE9UVEVEX0xJTkU6NjQsQ0FMTEJBQ0s6NjUsTElOSzo2NixMSU5LX1RBUkdFVDo2NyxDTElDSzo2OCxDQUxMQkFDS19OQU1FOjY5LENBTExCQUNLX0FSR1M6NzAsSFJFRjo3MSxDU1NDTEFTUzo3Mixjb21tZW50VG9rZW46NzMsdGV4dFRva2VuOjc0LGdyYXBoQ29kZVRva2Vuczo3NSx0ZXh0Tm9UYWdzVG9rZW46NzYsVEFHU1RBUlQ6NzcsVEFHRU5EOjc4LCI9PSI6NzksIi0tIjo4MCxQQ1Q6ODEsREVGQVVMVDo4MixTUEFDRTo4MyxNSU5VUzo4NCxrZXl3b3Jkczo4NSxVTklDT0RFX1RFWFQ6ODYsTlVNOjg3LEFMUEhBOjg4LEJRVU9URV9TVFI6ODksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDc6IkNMQVNTX0RJQUdSQU0iLDg6Ik5FV0xJTkUiLDk6IkVPRiIsMTI6IlNRUyIsMTM6IlNUUiIsMTQ6IlNRRSIsMTk6IkdFTkVSSUNUWVBFIiwyMToiTEFCRUwiLDMwOiJhY2NfdGl0bGUiLDMxOiJhY2NfdGl0bGVfdmFsdWUiLDMyOiJhY2NfZGVzY3IiLDMzOiJhY2NfZGVzY3JfdmFsdWUiLDM0OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoiU1RSVUNUX1NUQVJUIiwzODoiU1RSVUNUX1NUT1AiLDM5OiJOQU1FU1BBQ0UiLDQxOiJTVFlMRV9TRVBBUkFUT1IiLDQzOiJDTEFTUyIsNDQ6IkFOTk9UQVRJT05fU1RBUlQiLDQ1OiJBTk5PVEFUSU9OX0VORCIsNDY6Ik1FTUJFUiIsNDc6IlNFUEFSQVRPUiIsNDk6Ik5PVEVfRk9SIiw1MToiTk9URSIsNTI6ImRpcmVjdGlvbl90YiIsNTM6ImRpcmVjdGlvbl9idCIsNTQ6ImRpcmVjdGlvbl9ybCIsNTU6ImRpcmVjdGlvbl9sciIsNTg6IkFHR1JFR0FUSU9OIiw1OToiRVhURU5TSU9OIiw2MDoiQ09NUE9TSVRJT04iLDYxOiJERVBFTkRFTkNZIiw2MjoiTE9MTElQT1AiLDYzOiJMSU5FIiw2NDoiRE9UVEVEX0xJTkUiLDY1OiJDQUxMQkFDSyIsNjY6IkxJTksiLDY3OiJMSU5LX1RBUkdFVCIsNjg6IkNMSUNLIiw2OToiQ0FMTEJBQ0tfTkFNRSIsNzA6IkNBTExCQUNLX0FSR1MiLDcxOiJIUkVGIiw3MjoiQ1NTQ0xBU1MiLDc1OiJncmFwaENvZGVUb2tlbnMiLDc3OiJUQUdTVEFSVCIsNzg6IlRBR0VORCIsNzk6Ij09Iiw4MDoiLS0iLDgxOiJQQ1QiLDgyOiJERUZBVUxUIiw4MzoiU1BBQ0UiLDg0OiJNSU5VUyIsODU6ImtleXdvcmRzIiw4NjoiVU5JQ09ERV9URVhUIiw4NzoiTlVNIiw4ODoiQUxQSEEiLDg5OiJCUVVPVEVfU1RSIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs0LDFdLFs2LDRdLFs1LDFdLFs1LDJdLFs1LDNdLFsxMSwzXSxbMTUsMV0sWzE1LDJdLFsxNywxXSxbMTcsMV0sWzE3LDJdLFsxNywyXSxbMTcsMl0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsyMiw0XSxbMjIsNV0sWzM1LDJdLFszNywxXSxbMzcsMl0sWzM3LDNdLFsyMywxXSxbMjMsM10sWzIzLDRdLFsyMyw2XSxbNDAsMl0sWzQwLDNdLFsyNSw0XSxbNDIsMV0sWzQyLDJdLFsyNCwxXSxbMjQsMl0sWzI0LDFdLFsyNCwxXSxbMjAsM10sWzIwLDRdLFsyMCw0XSxbMjAsNV0sWzI4LDNdLFsyOCwyXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzQ4LDNdLFs0OCwyXSxbNDgsMl0sWzQ4LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU3LDFdLFs1NywxXSxbMjYsM10sWzI2LDRdLFsyNiwzXSxbMjYsNF0sWzI2LDRdLFsyNiw1XSxbMjYsM10sWzI2LDRdLFsyNiw0XSxbMjYsNV0sWzI2LDRdLFsyNiw1XSxbMjYsNV0sWzI2LDZdLFsyNywzXSxbNzMsMV0sWzczLDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzYsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxOCwxXSxbNTAsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oJHQscmUsaWUsT2Usb2UsTmUsbWUpe3ZhciBjbj1OZS5sZW5ndGgtMTtzd2l0Y2gob2Upe2Nhc2UgODp0aGlzLiQ9TmVbY24tMV07YnJlYWs7Y2FzZSA5OmNhc2UgMTE6Y2FzZSAxMjp0aGlzLiQ9TmVbY25dO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzp0aGlzLiQ9TmVbY24tMV0rTmVbY25dO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTp0aGlzLiQ9TmVbY24tMV0rIn4iK05lW2NuXSsifiI7YnJlYWs7Y2FzZSAxNjpPZS5hZGRSZWxhdGlvbihOZVtjbl0pO2JyZWFrO2Nhc2UgMTc6TmVbY24tMV0udGl0bGU9T2UuY2xlYW51cExhYmVsKE5lW2NuXSksT2UuYWRkUmVsYXRpb24oTmVbY24tMV0pO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPU5lW2NuXS50cmltKCksT2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI3OmNhc2UgMjg6dGhpcy4kPU5lW2NuXS50cmltKCksT2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI5Ok9lLmFkZENsYXNzZXNUb05hbWVzcGFjZShOZVtjbi0zXSxOZVtjbi0xXSk7YnJlYWs7Y2FzZSAzMDpPZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoTmVbY24tNF0sTmVbY24tMV0pO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPU5lW2NuXSxPZS5hZGROYW1lc3BhY2UoTmVbY25dKTticmVhaztjYXNlIDMyOnRoaXMuJD1bTmVbY25dXTticmVhaztjYXNlIDMzOnRoaXMuJD1bTmVbY24tMV1dO2JyZWFrO2Nhc2UgMzQ6TmVbY25dLnVuc2hpZnQoTmVbY24tMl0pLHRoaXMuJD1OZVtjbl07YnJlYWs7Y2FzZSAzNjpPZS5zZXRDc3NDbGFzcyhOZVtjbi0yXSxOZVtjbl0pO2JyZWFrO2Nhc2UgMzc6T2UuYWRkTWVtYmVycyhOZVtjbi0zXSxOZVtjbi0xXSk7YnJlYWs7Y2FzZSAzODpPZS5zZXRDc3NDbGFzcyhOZVtjbi01XSxOZVtjbi0zXSksT2UuYWRkTWVtYmVycyhOZVtjbi01XSxOZVtjbi0xXSk7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9TmVbY25dLE9lLmFkZENsYXNzKE5lW2NuXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9TmVbY24tMV0sT2UuYWRkQ2xhc3MoTmVbY24tMV0pLE9lLnNldENsYXNzTGFiZWwoTmVbY24tMV0sTmVbY25dKTticmVhaztjYXNlIDQxOk9lLmFkZEFubm90YXRpb24oTmVbY25dLE5lW2NuLTJdKTticmVhaztjYXNlIDQyOnRoaXMuJD1bTmVbY25dXTticmVhaztjYXNlIDQzOk5lW2NuXS5wdXNoKE5lW2NuLTFdKSx0aGlzLiQ9TmVbY25dO2JyZWFrO2Nhc2UgNDQ6YnJlYWs7Y2FzZSA0NTpPZS5hZGRNZW1iZXIoTmVbY24tMV0sT2UuY2xlYW51cExhYmVsKE5lW2NuXSkpO2JyZWFrO2Nhc2UgNDY6YnJlYWs7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OnRoaXMuJD17aWQxOk5lW2NuLTJdLGlkMjpOZVtjbl0scmVsYXRpb246TmVbY24tMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9e2lkMTpOZVtjbi0zXSxpZDI6TmVbY25dLHJlbGF0aW9uOk5lW2NuLTFdLHJlbGF0aW9uVGl0bGUxOk5lW2NuLTJdLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e2lkMTpOZVtjbi0zXSxpZDI6TmVbY25dLHJlbGF0aW9uOk5lW2NuLTJdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjpOZVtjbi0xXX07YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9e2lkMTpOZVtjbi00XSxpZDI6TmVbY25dLHJlbGF0aW9uOk5lW2NuLTJdLHJlbGF0aW9uVGl0bGUxOk5lW2NuLTNdLHJlbGF0aW9uVGl0bGUyOk5lW2NuLTFdfTticmVhaztjYXNlIDUyOk9lLmFkZE5vdGUoTmVbY25dLE5lW2NuLTFdKTticmVhaztjYXNlIDUzOk9lLmFkZE5vdGUoTmVbY25dKTticmVhaztjYXNlIDU0Ok9lLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDU1Ok9lLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDU2Ok9lLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDU3Ok9lLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDU4OnRoaXMuJD17dHlwZTE6TmVbY24tMl0sdHlwZTI6TmVbY25dLGxpbmVUeXBlOk5lW2NuLTFdfTticmVhaztjYXNlIDU5OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOk5lW2NuXSxsaW5lVHlwZTpOZVtjbi0xXX07YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9e3R5cGUxOk5lW2NuLTFdLHR5cGUyOiJub25lIixsaW5lVHlwZTpOZVtjbl19O2JyZWFrO2Nhc2UgNjE6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6Im5vbmUiLGxpbmVUeXBlOk5lW2NuXX07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9T2UucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPU9lLnJlbGF0aW9uVHlwZS5FWFRFTlNJT047YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9T2UucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPU9lLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPU9lLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDticmVhaztjYXNlIDY3OnRoaXMuJD1PZS5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPU9lLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNjk6Y2FzZSA3NTp0aGlzLiQ9TmVbY24tMl0sT2Uuc2V0Q2xpY2tFdmVudChOZVtjbi0xXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzA6Y2FzZSA3Njp0aGlzLiQ9TmVbY24tM10sT2Uuc2V0Q2xpY2tFdmVudChOZVtjbi0yXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0yXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPU5lW2NuLTJdLE9lLnNldExpbmsoTmVbY24tMV0sTmVbY25dKTticmVhaztjYXNlIDcyOnRoaXMuJD1OZVtjbi0zXSxPZS5zZXRMaW5rKE5lW2NuLTJdLE5lW2NuLTFdLE5lW2NuXSk7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9TmVbY24tM10sT2Uuc2V0TGluayhOZVtjbi0yXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0yXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPU5lW2NuLTRdLE9lLnNldExpbmsoTmVbY24tM10sTmVbY24tMl0sTmVbY25dKSxPZS5zZXRUb29sdGlwKE5lW2NuLTNdLE5lW2NuLTFdKTticmVhaztjYXNlIDc3OnRoaXMuJD1OZVtjbi0zXSxPZS5zZXRDbGlja0V2ZW50KE5lW2NuLTJdLE5lW2NuLTFdLE5lW2NuXSk7YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9TmVbY24tNF0sT2Uuc2V0Q2xpY2tFdmVudChOZVtjbi0zXSxOZVtjbi0yXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0zXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzk6dGhpcy4kPU5lW2NuLTNdLE9lLnNldExpbmsoTmVbY24tMl0sTmVbY25dKTticmVhaztjYXNlIDgwOnRoaXMuJD1OZVtjbi00XSxPZS5zZXRMaW5rKE5lW2NuLTNdLE5lW2NuLTFdLE5lW2NuXSk7YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9TmVbY24tNF0sT2Uuc2V0TGluayhOZVtjbi0zXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0zXSxOZVtjbl0pO2JyZWFrO2Nhc2UgODI6dGhpcy4kPU5lW2NuLTVdLE9lLnNldExpbmsoTmVbY24tNF0sTmVbY24tMl0sTmVbY25dKSxPZS5zZXRUb29sdGlwKE5lW2NuLTRdLE5lW2NuLTFdKTticmVhaztjYXNlIDgzOk9lLnNldENzc0NsYXNzKE5lW2NuLTFdLE5lW2NuXSk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OlsxLDZdLDEwOjUsMTY6MzUsMTc6MTksMTg6MzYsMjA6NywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjc6MTMsMjg6MTQsMjk6MTUsMzA6YSwzMjpmLDM0OnAsMzU6MjAsMzk6diw0MDoyMSw0MzptLDQ0OmIsNDY6RSw0NzpfLDQ5OkwsNTE6Tiw1MjpCLDUzOmosNTQ6Uiw1NTp6LDY1OkssNjY6aXQsNjg6c3QsNzI6dXQsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0saSh3dCxbMiw1XSx7ODpbMSw0NF19KSx7ODpbMSw0NV19LGkoWCxbMiwxNl0sezIxOlsxLDQ2XX0pLGkoWCxbMiwxOF0pLGkoWCxbMiwxOV0pLGkoWCxbMiwyMF0pLGkoWCxbMiwyMV0pLGkoWCxbMiwyMl0pLGkoWCxbMiwyM10pLGkoWCxbMiwyNF0pLGkoWCxbMiwyNV0pLHszMTpbMSw0N119LHszMzpbMSw0OF19LGkoWCxbMiwyOF0pLGkoWCxbMiw0NF0sezQ4OjQ5LDU2OjUyLDU3OjUzLDEzOlsxLDUwXSwyMTpbMSw1MV0sNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdCw2MzpOdCw2NDpxdH0pLHszNjpbMSw2MV19LGkoQ3QsWzIsMzVdLHszNjpbMSw2M10sNDE6WzEsNjJdfSksaShYLFsyLDQ2XSksaShYLFsyLDQ3XSksezE2OjY0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0fSx7MTY6MzUsMTc6NjUsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LHsxNjozNSwxNzo2NiwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpkdCw4OTpodH0sezE2OjM1LDE3OjY3LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSx7MTM6WzEsNjhdfSx7MTY6MzUsMTc6NjksMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LHsxMzpaLDUwOjcwfSxpKFgsWzIsNTRdKSxpKFgsWzIsNTVdKSxpKFgsWzIsNTZdKSxpKFgsWzIsNTddKSxpKFR0LFsyLDExXSx7MTY6MzUsMTg6MzYsMTc6NzIsMTk6WzEsNzNdLDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSksaShUdCxbMiwxMl0sezE5OlsxLDc0XX0pLHsxNTo3NSwxNjo3Niw4NDpidCw4NjptdCw4Nzp5dCw4ODpkdH0sezE2OjM1LDE3Ojc3LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSxpKEh0LFsyLDk3XSksaShIdCxbMiw5OF0pLGkoSHQsWzIsOTldKSxpKEh0LFsyLDEwMF0pLGkoWzEsOCw5LDEyLDEzLDE5LDIxLDM2LDM4LDQxLDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY5LDcxXSxbMiwxMDFdKSxpKHd0LFsyLDZdLHsxMDo1LDIwOjcsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI3OjEzLDI4OjE0LDI5OjE1LDE3OjE5LDM1OjIwLDQwOjIxLDE2OjM1LDE4OjM2LDU6NzgsMzA6YSwzMjpmLDM0OnAsMzk6diw0MzptLDQ0OmIsNDY6RSw0NzpfLDQ5OkwsNTE6Tiw1MjpCLDUzOmosNTQ6Uiw1NTp6LDY1OkssNjY6aXQsNjg6c3QsNzI6dXQsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9KSx7NTo3OSwxMDo1LDE2OjM1LDE3OjE5LDE4OjM2LDIwOjcsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI3OjEzLDI4OjE0LDI5OjE1LDMwOmEsMzI6ZiwzNDpwLDM1OjIwLDM5OnYsNDA6MjEsNDM6bSw0NDpiLDQ2OkUsNDc6Xyw0OTpMLDUxOk4sNTI6Qiw1MzpqLDU0OlIsNTU6eiw2NTpLLDY2Oml0LDY4OnN0LDcyOnV0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSxpKFgsWzIsMTddKSxpKFgsWzIsMjZdKSxpKFgsWzIsMjddKSx7MTM6WzEsODFdLDE2OjM1LDE3OjgwLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSx7NDg6ODIsNTY6NTIsNTc6NTMsNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdCw2MzpOdCw2NDpxdH0saShYLFsyLDQ1XSksezU3OjgzLDYzOk50LDY0OnF0fSxpKEl0LFsyLDYxXSx7NTY6ODQsNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdH0pLGkoRnQsWzIsNjJdKSxpKEZ0LFsyLDYzXSksaShGdCxbMiw2NF0pLGkoRnQsWzIsNjVdKSxpKEZ0LFsyLDY2XSksaShrZSxbMiw2N10pLGkoa2UsWzIsNjhdKSx7ODpbMSw4Nl0sMjM6ODcsMzc6ODUsNDA6MjEsNDM6bX0sezE2Ojg4LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0fSx7NDI6ODksNDY6cG59LHs0NTpbMSw5MV19LHsxMzpbMSw5Ml19LHsxMzpbMSw5M119LHs2OTpbMSw5NF0sNzE6WzEsOTVdfSx7MTY6OTYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHR9LHsxMzpaLDUwOjk3fSxpKFgsWzIsNTNdKSxpKFgsWzIsMTAyXSksaShUdCxbMiwxM10pLGkoVHQsWzIsMTRdKSxpKFR0LFsyLDE1XSksezM2OlsyLDMxXX0sezE1Ojk4LDE2Ojc2LDM2OlsyLDldLDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0fSxpKE1lLFsyLDM5XSx7MTE6OTksMTI6WzEsMTAwXX0pLGkod3QsWzIsN10pLHs5OlsxLDEwMV19LGkodmUsWzIsNDhdKSx7MTY6MzUsMTc6MTAyLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSx7MTM6WzEsMTA0XSwxNjozNSwxNzoxMDMsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LGkoSXQsWzIsNjBdLHs1NjoxMDUsNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdH0pLGkoSXQsWzIsNTldKSx7Mzg6WzEsMTA2XX0sezIzOjg3LDM3OjEwNyw0MDoyMSw0MzptfSx7ODpbMSwxMDhdLDM4OlsyLDMyXX0saShDdCxbMiwzNl0sezM2OlsxLDEwOV19KSx7Mzg6WzEsMTEwXX0sezM4OlsyLDQyXSw0MjoxMTEsNDY6cG59LHsxNjozNSwxNzoxMTIsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LGkoWCxbMiw2OV0sezEzOlsxLDExM119KSxpKFgsWzIsNzFdLHsxMzpbMSwxMTVdLDY3OlsxLDExNF19KSxpKFgsWzIsNzVdLHsxMzpbMSwxMTZdLDcwOlsxLDExN119KSx7MTM6WzEsMTE4XX0saShYLFsyLDgzXSksaShYLFsyLDUyXSksezM2OlsyLDEwXX0saShNZSxbMiw0MF0pLHsxMzpbMSwxMTldfSx7MTpbMiw0XX0saSh2ZSxbMiw1MF0pLGkodmUsWzIsNDldKSx7MTY6MzUsMTc6MTIwLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSxpKEl0LFsyLDU4XSksaShYLFsyLDI5XSksezM4OlsxLDEyMV19LHsyMzo4NywzNzoxMjIsMzg6WzIsMzNdLDQwOjIxLDQzOm19LHs0MjoxMjMsNDY6cG59LGkoQ3QsWzIsMzddKSx7Mzg6WzIsNDNdfSxpKFgsWzIsNDFdKSxpKFgsWzIsNzBdKSxpKFgsWzIsNzJdKSxpKFgsWzIsNzNdLHs2NzpbMSwxMjRdfSksaShYLFsyLDc2XSksaShYLFsyLDc3XSx7MTM6WzEsMTI1XX0pLGkoWCxbMiw3OV0sezEzOlsxLDEyN10sNjc6WzEsMTI2XX0pLHsxNDpbMSwxMjhdfSxpKHZlLFsyLDUxXSksaShYLFsyLDMwXSksezM4OlsyLDM0XX0sezM4OlsxLDEyOV19LGkoWCxbMiw3NF0pLGkoWCxbMiw3OF0pLGkoWCxbMiw4MF0pLGkoWCxbMiw4MV0sezY3OlsxLDEzMF19KSxpKE1lLFsyLDhdKSxpKEN0LFsyLDM4XSksaShYLFsyLDgyXSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiwzXSw3NTpbMiwzMV0sOTg6WzIsMTBdLDEwMTpbMiw0XSwxMTE6WzIsNDNdLDEyMjpbMiwzNF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oJHQscmUpe2lmKHJlLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoJHQpO2Vsc2V7dmFyIGllPW5ldyBFcnJvcigkdCk7dGhyb3cgaWUuaGFzaD1yZSxpZX19LHBhcnNlOmZ1bmN0aW9uKCR0KXt2YXIgcmU9dGhpcyxpZT1bMF0sT2U9W10sb2U9W251bGxdLE5lPVtdLG1lPXRoaXMudGFibGUsY249IiIsbGk9MCx5YT0wLGRhPTIsT289MSxkcz1OZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxEcj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLG5yPXt5eTp7fX07Zm9yKHZhciBkaSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGRpKSYmKG5yLnl5W2RpXT10aGlzLnl5W2RpXSk7RHIuc2V0SW5wdXQoJHQsbnIueXkpLG5yLnl5LmxleGVyPURyLG5yLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBEci55eWxsb2M+InUiJiYoRHIueXlsbG9jPXt9KTt2YXIgRWU9RHIueXlsbG9jO05lLnB1c2goRWUpO3ZhciBZbj1Eci5vcHRpb25zJiZEci5vcHRpb25zLnJhbmdlczt0eXBlb2YgbnIueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9bnIueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gSGUoKXt2YXIgTHU7cmV0dXJuIEx1PU9lLnBvcCgpfHxEci5sZXgoKXx8T28sdHlwZW9mIEx1IT0ibnVtYmVyIiYmKEx1IGluc3RhbmNlb2YgQXJyYXkmJihPZT1MdSxMdT1PZS5wb3AoKSksTHU9cmUuc3ltYm9sc19bTHVdfHxMdSksTHV9Zm9yKHZhciBUaSxnbixrcyxxYSxMYT17fSxHcyxObyx2cyxudTs7KXtpZihnbj1pZVtpZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tnbl0/a3M9dGhpcy5kZWZhdWx0QWN0aW9uc1tnbl06KChUaT09PW51bGx8fHR5cGVvZiBUaT4idSIpJiYoVGk9SGUoKSksa3M9bWVbZ25dJiZtZVtnbl1bVGldKSx0eXBlb2Yga3M+InUifHwha3MubGVuZ3RofHwha3NbMF0pe3ZhciAkcz0iIjtudT1bXTtmb3IoR3MgaW4gbWVbZ25dKXRoaXMudGVybWluYWxzX1tHc10mJkdzPmRhJiZudS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bR3NdKyInIik7RHIuc2hvd1Bvc2l0aW9uPyRzPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGxpKzEpK2A6CmArRHIuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtudS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1RpXXx8VGkpKyInIjokcz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhsaSsxKSsiOiBVbmV4cGVjdGVkICIrKFRpPT1Pbz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tUaV18fFRpKSsiJyIpLHRoaXMucGFyc2VFcnJvcigkcyx7dGV4dDpEci5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bVGldfHxUaSxsaW5lOkRyLnl5bGluZW5vLGxvYzpFZSxleHBlY3RlZDpudX0pfWlmKGtzWzBdaW5zdGFuY2VvZiBBcnJheSYma3MubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnbisiLCB0b2tlbjogIitUaSk7c3dpdGNoKGtzWzBdKXtjYXNlIDE6aWUucHVzaChUaSksb2UucHVzaChEci55eXRleHQpLE5lLnB1c2goRHIueXlsbG9jKSxpZS5wdXNoKGtzWzFdKSxUaT1udWxsLHlhPURyLnl5bGVuZyxjbj1Eci55eXRleHQsbGk9RHIueXlsaW5lbm8sRWU9RHIueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihObz10aGlzLnByb2R1Y3Rpb25zX1trc1sxXV1bMV0sTGEuJD1vZVtvZS5sZW5ndGgtTm9dLExhLl8kPXtmaXJzdF9saW5lOk5lW05lLmxlbmd0aC0oTm98fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpOZVtOZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpOZVtOZS5sZW5ndGgtKE5vfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOk5lW05lLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sWW4mJihMYS5fJC5yYW5nZT1bTmVbTmUubGVuZ3RoLShOb3x8MSldLnJhbmdlWzBdLE5lW05lLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHFhPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShMYSxbY24seWEsbGksbnIueXksa3NbMV0sb2UsTmVdLmNvbmNhdChkcykpLHR5cGVvZiBxYTwidSIpcmV0dXJuIHFhO05vJiYoaWU9aWUuc2xpY2UoMCwtMSpObyoyKSxvZT1vZS5zbGljZSgwLC0xKk5vKSxOZT1OZS5zbGljZSgwLC0xKk5vKSksaWUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trc1sxXV1bMF0pLG9lLnB1c2goTGEuJCksTmUucHVzaChMYS5fJCksdnM9bWVbaWVbaWUubGVuZ3RoLTJdXVtpZVtpZS5sZW5ndGgtMV1dLGllLnB1c2godnMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxLZT1mdW5jdGlvbigpe3ZhciBfZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihyZSxpZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihyZSxpZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocmUpfSxzZXRJbnB1dDpmdW5jdGlvbigkdCxyZSl7cmV0dXJuIHRoaXMueXk9cmV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PSR0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciAkdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9JHQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPSR0LHRoaXMubWF0Y2hlZCs9JHQ7dmFyIHJlPSR0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gcmU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLCR0fSx1bnB1dDpmdW5jdGlvbigkdCl7dmFyIHJlPSR0Lmxlbmd0aCxpZT0kdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PSR0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1yZSksdGhpcy5vZmZzZXQtPXJlO3ZhciBPZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxpZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWllLmxlbmd0aC0xKTt2YXIgb2U9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmllPyhpZS5sZW5ndGg9PT1PZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK09lW09lLmxlbmd0aC1pZS5sZW5ndGhdLmxlbmd0aC1pZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXJlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W29lWzBdLG9lWzBdK3RoaXMueXlsZW5nLXJlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oJHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSgkdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgJHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybigkdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKyR0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyICR0PXRoaXMubWF0Y2g7cmV0dXJuICR0Lmxlbmd0aDwyMCYmKCR0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC0kdC5sZW5ndGgpKSwoJHQuc3Vic3RyKDAsMjApKygkdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyICR0PXRoaXMucGFzdElucHV0KCkscmU9bmV3IEFycmF5KCR0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuICR0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtyZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oJHQscmUpe3ZhciBpZSxPZSxvZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYob2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYob2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksT2U9JHRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLE9lJiYodGhpcy55eWxpbmVubys9T2UubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46T2U/T2VbT2UubGVuZ3RoLTFdLmxlbmd0aC1PZVtPZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiskdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz0kdFswXSx0aGlzLm1hdGNoKz0kdFswXSx0aGlzLm1hdGNoZXM9JHQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoJHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPSR0WzBdLGllPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHJlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGllKXJldHVybiBpZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgTmUgaW4gb2UpdGhpc1tOZV09b2VbTmVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyICR0LHJlLGllLE9lO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIG9lPXRoaXMuX2N1cnJlbnRSdWxlcygpLE5lPTA7TmU8b2UubGVuZ3RoO05lKyspaWYoaWU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tvZVtOZV1dKSxpZSYmKCFyZXx8aWVbMF0ubGVuZ3RoPnJlWzBdLmxlbmd0aCkpe2lmKHJlPWllLE9lPU5lLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCR0PXRoaXMudGVzdF9tYXRjaChpZSxvZVtOZV0pLCR0IT09ITEpcmV0dXJuICR0O2lmKHRoaXMuX2JhY2t0cmFjayl7cmU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gcmU/KCR0PXRoaXMudGVzdF9tYXRjaChyZSxvZVtPZV0pLCR0IT09ITE/JHQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciByZT10aGlzLm5leHQoKTtyZXR1cm4gcmV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHJlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gocmUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciByZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiByZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHJlKXtyZXR1cm4gcmU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhyZXx8MCkscmU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tyZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24ocmUpe3RoaXMuYmVnaW4ocmUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHJlLGllLE9lLG9lKXtzd2l0Y2goT2Upe2Nhc2UgMDpyZXR1cm4gNTI7Y2FzZSAxOnJldHVybiA1MztjYXNlIDI6cmV0dXJuIDU0O2Nhc2UgMzpyZXR1cm4gNTU7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMwO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzI7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpyZXR1cm4gODtjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIDc7Y2FzZSAxNjpyZXR1cm4gNztjYXNlIDE3OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDE5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIwOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gNjk7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gNzA7Y2FzZSAyNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNTpyZXR1cm4iU1RSIjtjYXNlIDI2OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZSIpLDM5O2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2Nhc2UgMjk6YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigibmFtZXNwYWNlLWJvZHkiKSwzNjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzg7Y2FzZSAzMjpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSAzMzpyZXR1cm4gODtjYXNlIDM0OmJyZWFrO2Nhc2UgMzU6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzIiksNDM7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg7Y2FzZSAzODpicmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM4O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzLWJvZHkiKSwzNjtjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzg7Y2FzZSA0MjpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA0MzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSA0NDpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgNDU6YnJlYWs7Y2FzZSA0NjpyZXR1cm4iTUVNQkVSIjtjYXNlIDQ3OnJldHVybiA3MjtjYXNlIDQ4OnJldHVybiA2NTtjYXNlIDQ5OnJldHVybiA2NjtjYXNlIDUwOnJldHVybiA2ODtjYXNlIDUxOnJldHVybiA0OTtjYXNlIDUyOnJldHVybiA1MTtjYXNlIDUzOnJldHVybiA0NDtjYXNlIDU0OnJldHVybiA0NTtjYXNlIDU1OnJldHVybiA3MTtjYXNlIDU2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU3OnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSA1ODp0aGlzLmJlZ2luKCJnZW5lcmljIik7YnJlYWs7Y2FzZSA1OTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4iQlFVT1RFX1NUUiI7Y2FzZSA2MTp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgNjI6cmV0dXJuIDY3O2Nhc2UgNjM6cmV0dXJuIDY3O2Nhc2UgNjQ6cmV0dXJuIDY3O2Nhc2UgNjU6cmV0dXJuIDY3O2Nhc2UgNjY6cmV0dXJuIDU5O2Nhc2UgNjc6cmV0dXJuIDU5O2Nhc2UgNjg6cmV0dXJuIDYxO2Nhc2UgNjk6cmV0dXJuIDYxO2Nhc2UgNzA6cmV0dXJuIDYwO2Nhc2UgNzE6cmV0dXJuIDU4O2Nhc2UgNzI6cmV0dXJuIDYyO2Nhc2UgNzM6cmV0dXJuIDYzO2Nhc2UgNzQ6cmV0dXJuIDY0O2Nhc2UgNzU6cmV0dXJuIDIxO2Nhc2UgNzY6cmV0dXJuIDQxO2Nhc2UgNzc6cmV0dXJuIDg0O2Nhc2UgNzg6cmV0dXJuIkRPVCI7Y2FzZSA3OTpyZXR1cm4iUExVUyI7Y2FzZSA4MDpyZXR1cm4gODE7Y2FzZSA4MTpyZXR1cm4iRVFVQUxTIjtjYXNlIDgyOnJldHVybiJFUVVBTFMiO2Nhc2UgODM6cmV0dXJuIDg4O2Nhc2UgODQ6cmV0dXJuIDEyO2Nhc2UgODU6cmV0dXJuIDE0O2Nhc2UgODY6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDg3OnJldHVybiA4NztjYXNlIDg4OnJldHVybiA4NjtjYXNlIDg5OnJldHVybiA4MztjYXNlIDkwOnJldHVybiA5fX0scnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86JSUoPyFceykqW15cbl0qKFxyP1xuPykrKS8sL14oPzolJVteXG5dKihccj9cbikqKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpcW1wqXF0pLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86WyJdKS8sL14oPzpuYW1lc3BhY2VcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OlxbXCpcXSkvLC9eKD86Y2xhc3NcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W31dKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XFtcKlxdKS8sL14oPzpbe10pLywvXig/Oltcbl0pLywvXig/Oltee31cbl0qKS8sL14oPzpjc3NDbGFzc1xiKS8sL14oPzpjYWxsYmFja1xiKS8sL14oPzpsaW5rXGIpLywvXig/OmNsaWNrXGIpLywvXig/Om5vdGUgZm9yXGIpLywvXig/Om5vdGVcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpocmVmXGIpLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/On4pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OltgXSkvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzpccyo8XHwpLywvXig/OlxzKlx8PikvLC9eKD86XHMqPikvLC9eKD86XHMqPCkvLC9eKD86XHMqXCopLywvXig/OlxzKm9cYikvLC9eKD86XHMqXChcKSkvLC9eKD86LS0pLywvXig/OlwuXC4pLywvXig/Ojp7MX1bXjpcbjtdKykvLC9eKD86OnszfSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzpcdyspLywvXig/OlxbKS8sL14oPzpcXSkvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6eyJuYW1lc3BhY2UtYm9keSI6e3J1bGVzOlsyNiwzMSwzMiwzMywzNCwzNSwzNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxuYW1lc3BhY2U6e3J1bGVzOlsyNiwyNywyOCwyOSwzMCw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSwiY2xhc3MtYm9keSI6e3J1bGVzOlsyNiw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxjbGFzczp7cnVsZXM6WzI2LDM3LDM4LDM5LDQwLDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMiwyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5LDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzcsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfYXJnczp7cnVsZXM6WzIyLDIzLDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX25hbWU6e3J1bGVzOlsxOSwyMCwyMSwyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGJxc3RyaW5nOntydWxlczpbMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjQsMjUsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsOCwxMCwxMywxNCwxNSwxNiwxNywxOCwyNiwyNywzNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBfZX0oKTtHZS5sZXhlcj1LZTtmdW5jdGlvbiB3ZSgpe3RoaXMueXk9e319cmV0dXJuIHdlLnByb3RvdHlwZT1HZSxHZS5QYXJzZXI9d2UsbmV3IHdlfSgpO3BndC5wYXJzZXI9cGd0O2NvbnN0IF9SdD1wZ3QsU1J0PVsiIyIsIisiLCJ+IiwiLSIsIiJdO2NsYXNzIEFSdHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMubWVtYmVyVHlwZT1mLHRoaXMudmlzaWJpbGl0eT0iIix0aGlzLmNsYXNzaWZpZXI9IiI7Y29uc3QgcD1EZChhLExlKCkpO3RoaXMucGFyc2VNZW1iZXIocCl9Z2V0RGlzcGxheURldGFpbHMoKXtsZXQgYT10aGlzLnZpc2liaWxpdHkrek4odGhpcy5pZCk7dGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCImJihhKz1gKCR7ek4odGhpcy5wYXJhbWV0ZXJzLnRyaW0oKSl9KWAsdGhpcy5yZXR1cm5UeXBlJiYoYSs9IiA6ICIrek4odGhpcy5yZXR1cm5UeXBlKSkpLGE9YS50cmltKCk7Y29uc3QgZj10aGlzLnBhcnNlQ2xhc3NpZmllcigpO3JldHVybntkaXNwbGF5VGV4dDphLGNzc1N0eWxlOmZ9fXBhcnNlTWVtYmVyKGEpe2xldCBmPSIiO2lmKHRoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiKXtjb25zdCBwPS8oWyMrfi1dKT8oLispXCgoLiopXCkoW1xzJCpdKT8oLiopKFskKl0pPy8sdj1hLm1hdGNoKHApO2lmKHYpe2NvbnN0IG09dlsxXT92WzFdLnRyaW0oKToiIjtpZihTUnQuaW5jbHVkZXMobSkmJih0aGlzLnZpc2liaWxpdHk9bSksdGhpcy5pZD12WzJdLnRyaW0oKSx0aGlzLnBhcmFtZXRlcnM9dlszXT92WzNdLnRyaW0oKToiIixmPXZbNF0/dls0XS50cmltKCk6IiIsdGhpcy5yZXR1cm5UeXBlPXZbNV0/dls1XS50cmltKCk6IiIsZj09PSIiKXtjb25zdCBiPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcodGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKTtiLm1hdGNoKC9bJCpdLykmJihmPWIsdGhpcy5yZXR1cm5UeXBlPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcoMCx0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpKX19fWVsc2V7Y29uc3QgcD1hLmxlbmd0aCx2PWEuc3Vic3RyaW5nKDAsMSksbT1hLnN1YnN0cmluZyhwLTEpO1NSdC5pbmNsdWRlcyh2KSYmKHRoaXMudmlzaWJpbGl0eT12KSxtLm1hdGNoKC9bKj9dLykmJihmPW0pLHRoaXMuaWQ9YS5zdWJzdHJpbmcodGhpcy52aXNpYmlsaXR5PT09IiI/MDoxLGY9PT0iIj9wOnAtMSl9dGhpcy5jbGFzc2lmaWVyPWZ9cGFyc2VDbGFzc2lmaWVyKCl7c3dpdGNoKHRoaXMuY2xhc3NpZmllcil7Y2FzZSIqIjpyZXR1cm4iZm9udC1zdHlsZTppdGFsaWM7IjtjYXNlIiQiOnJldHVybiJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7ZGVmYXVsdDpyZXR1cm4iIn19fWNvbnN0IExLPSJjbGFzc0lkLSI7bGV0IGJndD1bXSxRbD17fSxNSz1bXSxMUnQ9MCxkaz17fSx2Z3Q9MCxGUD1bXTtjb25zdCBDVD1pPT5Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKSxmTD1mdW5jdGlvbihpKXtjb25zdCBhPVlyLnNhbml0aXplVGV4dChpLExlKCkpO2xldCBmPSIiLHA9YTtpZihhLmluZGV4T2YoIn4iKT4wKXtjb25zdCB2PWEuc3BsaXQoIn4iKTtwPUNUKHZbMF0pLGY9Q1QodlsxXSl9cmV0dXJue2NsYXNzTmFtZTpwLHR5cGU6Zn19LGFHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9WXIuc2FuaXRpemVUZXh0KGksTGUoKSk7YSYmKGE9Q1QoYSkpO2NvbnN0e2NsYXNzTmFtZTpwfT1mTChmKTtRbFtwXS5sYWJlbD1hfSxJSz1mdW5jdGlvbihpKXtjb25zdCBhPVlyLnNhbml0aXplVGV4dChpLExlKCkpLHtjbGFzc05hbWU6Zix0eXBlOnB9PWZMKGEpO2lmKE9iamVjdC5oYXNPd24oUWwsZikpcmV0dXJuO2NvbnN0IHY9WXIuc2FuaXRpemVUZXh0KGYsTGUoKSk7UWxbdl09e2lkOnYsdHlwZTpwLGxhYmVsOnYsY3NzQ2xhc3NlczpbXSxtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sZG9tSWQ6TEsrdisiLSIrTFJ0fSxMUnQrK30sTVJ0PWZ1bmN0aW9uKGkpe2NvbnN0IGE9WXIuc2FuaXRpemVUZXh0KGksTGUoKSk7aWYoYSBpbiBRbClyZXR1cm4gUWxbYV0uZG9tSWQ7dGhyb3cgbmV3IEVycm9yKCJDbGFzcyBub3QgZm91bmQ6ICIrYSl9LG9HZT1mdW5jdGlvbigpe2JndD1bXSxRbD17fSxNSz1bXSxGUD1bXSxGUC5wdXNoKERSdCksZGs9e30sdmd0PTAsYXAoKX0sY0dlPWZ1bmN0aW9uKGkpe3JldHVybiBRbFtpXX0sdUdlPWZ1bmN0aW9uKCl7cmV0dXJuIFFsfSxsR2U9ZnVuY3Rpb24oKXtyZXR1cm4gYmd0fSxoR2U9ZnVuY3Rpb24oKXtyZXR1cm4gTUt9LGZHZT1mdW5jdGlvbihpKXtVdC5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KGkpKSxJSyhpLmlkMSksSUsoaS5pZDIpLGkuaWQxPWZMKGkuaWQxKS5jbGFzc05hbWUsaS5pZDI9ZkwoaS5pZDIpLmNsYXNzTmFtZSxpLnJlbGF0aW9uVGl0bGUxPVlyLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxMZSgpKSxpLnJlbGF0aW9uVGl0bGUyPVlyLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxMZSgpKSxiZ3QucHVzaChpKX0sZEdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1mTChpKS5jbGFzc05hbWU7UWxbZl0uYW5ub3RhdGlvbnMucHVzaChhKX0sSVJ0PWZ1bmN0aW9uKGksYSl7SUsoaSk7Y29uc3QgZj1mTChpKS5jbGFzc05hbWUscD1RbFtmXTtpZih0eXBlb2YgYT09InN0cmluZyIpe2NvbnN0IHY9YS50cmltKCk7di5zdGFydHNXaXRoKCI8PCIpJiZ2LmVuZHNXaXRoKCI+PiIpP3AuYW5ub3RhdGlvbnMucHVzaChDVCh2LnN1YnN0cmluZygyLHYubGVuZ3RoLTIpKSk6di5pbmRleE9mKCIpIik+MD9wLm1ldGhvZHMucHVzaChuZXcgQVJ0KHYsIm1ldGhvZCIpKTp2JiZwLm1lbWJlcnMucHVzaChuZXcgQVJ0KHYsImF0dHJpYnV0ZSIpKX19LGdHZT1mdW5jdGlvbihpLGEpe0FycmF5LmlzQXJyYXkoYSkmJihhLnJldmVyc2UoKSxhLmZvckVhY2goZj0+SVJ0KGksZikpKX0scEdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj17aWQ6YG5vdGUke01LLmxlbmd0aH1gLGNsYXNzOmEsdGV4dDppfTtNSy5wdXNoKGYpfSxiR2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGkuc3RhcnRzV2l0aCgiOiIpJiYoaT1pLnN1YnN0cmluZygxKSksQ1QoaS50cmltKCkpfSx3Z3Q9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1mO2ZbMF0ubWF0Y2goL1xkLykmJihwPUxLK3ApLFFsW3BdIT09dm9pZCAwJiZRbFtwXS5jc3NDbGFzc2VzLnB1c2goYSl9KX0sdkdlPWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7YSE9PXZvaWQgMCYmKFFsW2ZdLnRvb2x0aXA9Q1QoYSkpfSl9LHdHZT1mdW5jdGlvbihpLGEpe3JldHVybiBhP2RrW2FdLmNsYXNzZXNbaV0udG9vbHRpcDpRbFtpXS50b29sdGlwfSxtR2U9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9TGUoKTtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih2KXtsZXQgbT12O3ZbMF0ubWF0Y2goL1xkLykmJihtPUxLK20pLFFsW21dIT09dm9pZCAwJiYoUWxbbV0ubGluaz0kYS5mb3JtYXRVcmwoYSxwKSxwLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/UWxbbV0ubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIGY9PSJzdHJpbmciP1FsW21dLmxpbmtUYXJnZXQ9Q1QoZik6UWxbbV0ubGlua1RhcmdldD0iX2JsYW5rIil9KSx3Z3QoaSwiY2xpY2thYmxlIil9LHlHZT1mdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7eEdlKHAsYSxmKSxRbFtwXS5oYXZlQ2FsbGJhY2s9ITB9KSx3Z3QoaSwiY2xpY2thYmxlIil9LHhHZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKTtpZihMZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxhPT09dm9pZCAwKXJldHVybjtjb25zdCBtPXA7aWYoUWxbbV0hPT12b2lkIDApe2NvbnN0IGI9TVJ0KG0pO2xldCBFPVtdO2lmKHR5cGVvZiBmPT0ic3RyaW5nIil7RT1mLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgXz0wO188RS5sZW5ndGg7XysrKXtsZXQgTD1FW19dLnRyaW0oKTtMLmNoYXJBdCgwKT09PSciJyYmTC5jaGFyQXQoTC5sZW5ndGgtMSk9PT0nIicmJihMPUwuc3Vic3RyKDEsTC5sZW5ndGgtMikpLEVbX109TH19RS5sZW5ndGg9PT0wJiZFLnB1c2goYiksRlAucHVzaChmdW5jdGlvbigpe2NvbnN0IF89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2J9Il1gKTtfIT09bnVsbCYmXy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXskYS5ydW5GdW5jKGEsLi4uRSl9LCExKX0pfX0sa0dlPWZ1bmN0aW9uKGkpe0ZQLmZvckVhY2goZnVuY3Rpb24oYSl7YShpKX0pfSxFR2U9e0xJTkU6MCxET1RURURfTElORToxfSxUR2U9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH0sRFJ0PWZ1bmN0aW9uKGkpe2xldCBhPXlyKCIubWVybWFpZFRvb2x0aXAiKTsoYS5fZ3JvdXBzfHxhKVswXVswXT09PW51bGwmJihhPXlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSx5cihpKS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtjb25zdCB2PXlyKHRoaXMpO2lmKHYuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2NvbnN0IGI9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxhLnRleHQodi5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrYi5sZWZ0KyhiLnJpZ2h0LWIubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStiLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxhLmh0bWwoYS5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLHYuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSx5cih0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9O0ZQLnB1c2goRFJ0KTtsZXQgT1J0PSJUQiI7Y29uc3QgREs9e3NldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLGdldEFjY0Rlc2NyaXB0aW9uOnVwLHNldEFjY0Rlc2NyaXB0aW9uOmNwLGdldENvbmZpZzooKT0+TGUoKS5jbGFzcyxhZGRDbGFzczpJSyxiaW5kRnVuY3Rpb25zOmtHZSxjbGVhcjpvR2UsZ2V0Q2xhc3M6Y0dlLGdldENsYXNzZXM6dUdlLGdldE5vdGVzOmhHZSxhZGRBbm5vdGF0aW9uOmRHZSxhZGROb3RlOnBHZSxnZXRSZWxhdGlvbnM6bEdlLGFkZFJlbGF0aW9uOmZHZSxnZXREaXJlY3Rpb246KCk9Pk9SdCxzZXREaXJlY3Rpb246aT0+e09SdD1pfSxhZGRNZW1iZXI6SVJ0LGFkZE1lbWJlcnM6Z0dlLGNsZWFudXBMYWJlbDpiR2UsbGluZVR5cGU6RUdlLHJlbGF0aW9uVHlwZTpUR2Usc2V0Q2xpY2tFdmVudDp5R2Usc2V0Q3NzQ2xhc3M6d2d0LHNldExpbms6bUdlLGdldFRvb2x0aXA6d0dlLHNldFRvb2x0aXA6dkdlLGxvb2tVcERvbUlkOk1SdCxzZXREaWFncmFtVGl0bGU6WjIsZ2V0RGlhZ3JhbVRpdGxlOkRiLHNldENsYXNzTGFiZWw6YUdlLGFkZE5hbWVzcGFjZTpmdW5jdGlvbihpKXtka1tpXT09PXZvaWQgMCYmKGRrW2ldPXtpZDppLGNsYXNzZXM6e30sY2hpbGRyZW46e30sZG9tSWQ6TEsraSsiLSIrdmd0fSx2Z3QrKyl9LGFkZENsYXNzZXNUb05hbWVzcGFjZTpmdW5jdGlvbihpLGEpe2RrW2ldIT09dm9pZCAwJiZhLm1hcChmPT57UWxbZl0ucGFyZW50PWksZGtbaV0uY2xhc3Nlc1tmXT1RbFtmXX0pfSxnZXROYW1lc3BhY2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGRrW2ldfSxnZXROYW1lc3BhY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGRrfX0sTlJ0PWk9PmBnLmNsYXNzR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLm5vZGVCb3JkZXJ9OwogIGZpbGw6ICR7aS5jbGFzc1RleHR9OwogIHN0cm9rZTogbm9uZTsKICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogIGZvbnQtc2l6ZTogMTBweDsKCiAgLnRpdGxlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgfQoKfQoKLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7aS5jbGFzc1RleHR9Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKfQoubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7CiAgYmFja2dyb3VuZDogJHtpLm1haW5Ca2d9Owp9CgouY2xhc3NUaXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKfQoubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCgouZGl2aWRlciB7CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgpnLmNsaWNrYWJsZSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgpnLmNsYXNzR3JvdXAgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9Owp9CgpnLmNsYXNzR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgouY2xhc3NMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBvcGFjaXR5OiAwLjU7Cn0KCi5jbGFzc0xhYmVsIC5sYWJlbCB7CiAgZmlsbDogJHtpLm5vZGVCb3JkZXJ9OwogIGZvbnQtc2l6ZTogMTBweDsKfQoKLnJlbGF0aW9uIHsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9CgouZGFzaGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMzsKfQoKLmRvdHRlZC1saW5lewogIHN0cm9rZS1kYXNoYXJyYXk6IDEgMjsKfQoKI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojYWdncmVnYXRpb25TdGFydCwgLmFnZ3JlZ2F0aW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNsb2xsaXBvcFN0YXJ0LCAubG9sbGlwb3AgewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNsb2xsaXBvcEVuZCwgLmxvbGxpcG9wIHsKICBmaWxsOiAke2kubWFpbkJrZ30gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgouZWRnZVRlcm1pbmFscyB7CiAgZm9udC1zaXplOiAxMXB4Owp9CgouY2xhc3NUaXRsZVRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgZm9udC1zaXplOiAxOHB4OwogIGZpbGw6ICR7aS50ZXh0Q29sb3J9Owp9CmA7bGV0IFBSdD0wO2NvbnN0IENHZT1mdW5jdGlvbihpLGEsZixwLHYpe2NvbnN0IG09ZnVuY3Rpb24odXQpe3N3aXRjaCh1dCl7Y2FzZSB2LmRiLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2Ugdi5kYi5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2Ugdi5kYi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIHYuZGIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kiO2Nhc2Ugdi5kYi5yZWxhdGlvblR5cGUuTE9MTElQT1A6cmV0dXJuImxvbGxpcG9wIn19O2EucG9pbnRzPWEucG9pbnRzLmZpbHRlcih1dD0+IU51bWJlci5pc05hTih1dC55KSk7Y29uc3QgYj1hLnBvaW50cyxFPVo3KCkueChmdW5jdGlvbih1dCl7cmV0dXJuIHV0Lnh9KS55KGZ1bmN0aW9uKHV0KXtyZXR1cm4gdXQueX0pLmN1cnZlKEZOKSxfPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsRShiKSkuYXR0cigiaWQiLCJlZGdlIitQUnQpLmF0dHIoImNsYXNzIiwicmVsYXRpb24iKTtsZXQgTD0iIjtwLmFycm93TWFya2VyQWJzb2x1dGUmJihMPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLEw9TC5yZXBsYWNlKC9cKC9nLCJcXCgiKSxMPUwucmVwbGFjZSgvXCkvZywiXFwpIikpLGYucmVsYXRpb24ubGluZVR5cGU9PTEmJl8uYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkYXNoZWQtbGluZSIpLGYucmVsYXRpb24ubGluZVR5cGU9PTEwJiZfLmF0dHIoImNsYXNzIiwicmVsYXRpb24gZG90dGVkLWxpbmUiKSxmLnJlbGF0aW9uLnR5cGUxIT09Im5vbmUiJiZfLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0wrIiMiK20oZi5yZWxhdGlvbi50eXBlMSkrIlN0YXJ0KSIpLGYucmVsYXRpb24udHlwZTIhPT0ibm9uZSImJl8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK0wrIiMiK20oZi5yZWxhdGlvbi50eXBlMikrIkVuZCkiKTtsZXQgTixCO2NvbnN0IGo9YS5wb2ludHMubGVuZ3RoO2xldCBSPSRhLmNhbGNMYWJlbFBvc2l0aW9uKGEucG9pbnRzKTtOPVIueCxCPVIueTtsZXQgeixLLGl0LHN0O2lmKGolMiE9PTAmJmo+MSl7bGV0IHV0PSRhLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKGYucmVsYXRpb24udHlwZTEhPT0ibm9uZSIsYS5wb2ludHMsYS5wb2ludHNbMF0pLGJ0PSRhLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKGYucmVsYXRpb24udHlwZTIhPT0ibm9uZSIsYS5wb2ludHMsYS5wb2ludHNbai0xXSk7VXQuZGVidWcoImNhcmRpbmFsaXR5XzFfcG9pbnQgIitKU09OLnN0cmluZ2lmeSh1dCkpLFV0LmRlYnVnKCJjYXJkaW5hbGl0eV8yX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkoYnQpKSx6PXV0LngsSz11dC55LGl0PWJ0Lngsc3Q9YnQueX1pZihmLnRpdGxlIT09dm9pZCAwKXtjb25zdCB1dD1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2xhc3NMYWJlbCIpLGJ0PXV0LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJ4IixOKS5hdHRyKCJ5IixCKS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGYudGl0bGUpO3dpbmRvdy5sYWJlbD1idDtjb25zdCBtdD1idC5ub2RlKCkuZ2V0QkJveCgpO3V0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsbXQueC1wLnBhZGRpbmcvMikuYXR0cigieSIsbXQueS1wLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLG10LndpZHRoK3AucGFkZGluZykuYXR0cigiaGVpZ2h0IixtdC5oZWlnaHQrcC5wYWRkaW5nKX1VdC5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShmKSksZi5yZWxhdGlvblRpdGxlMSE9PXZvaWQgMCYmZi5yZWxhdGlvblRpdGxlMSE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMSIpLmF0dHIoIngiLHopLmF0dHIoInkiLEspLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KGYucmVsYXRpb25UaXRsZTEpLGYucmVsYXRpb25UaXRsZTIhPT12b2lkIDAmJmYucmVsYXRpb25UaXRsZTIhPT0ibm9uZSImJmkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTIiKS5hdHRyKCJ4IixpdCkuYXR0cigieSIsc3QpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KGYucmVsYXRpb25UaXRsZTIpLFBSdCsrfSxfR2U9ZnVuY3Rpb24oaSxhLGYscCl7VXQuZGVidWcoIlJlbmRlcmluZyBjbGFzcyAiLGEsZik7Y29uc3Qgdj1hLmlkLG09e2lkOnYsbGFiZWw6YS5pZCx3aWR0aDowLGhlaWdodDowfSxiPWkuYXBwZW5kKCJnIikuYXR0cigiaWQiLHAuZGIubG9va1VwRG9tSWQodikpLmF0dHIoImNsYXNzIiwiY2xhc3NHcm91cCIpO2xldCBFO2EubGluaz9FPWIuYXBwZW5kKCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGEubGluaykuYXR0cigidGFyZ2V0IixhLmxpbmtUYXJnZXQpLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApOkU9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixmLnRleHRIZWlnaHQrZi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTtsZXQgXz0hMDthLmFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24oYnQpe2NvbnN0IG10PUUuYXBwZW5kKCJ0c3BhbiIpLnRleHQoIsKrIitidCsiwrsiKTtffHxtdC5hdHRyKCJkeSIsZi50ZXh0SGVpZ2h0KSxfPSExfSk7bGV0IEw9RlJ0KGEpO2NvbnN0IE49RS5hcHBlbmQoInRzcGFuIikudGV4dChMKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7X3x8Ti5hdHRyKCJkeSIsZi50ZXh0SGVpZ2h0KTtjb25zdCBCPUUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7bGV0IGosUix6O2lmKGEubWVtYmVycy5sZW5ndGg+MCl7aj1iLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZi5wYWRkaW5nK0IrZi5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4vMik7Y29uc3QgYnQ9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixmLnBhZGRpbmcpLmF0dHIoInkiLEIrZi5kaXZpZGVyTWFyZ2luK2YudGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtfPSEwLGEubWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uKG10KXtCUnQoYnQsbXQsXyxmKSxfPSExfSksUj1idC5ub2RlKCkuZ2V0QkJveCgpfWlmKGEubWV0aG9kcy5sZW5ndGg+MCl7ej1iLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZi5wYWRkaW5nK0IrZi5kaXZpZGVyTWFyZ2luK1IuaGVpZ2h0KS5hdHRyKCJ5MiIsZi5wYWRkaW5nK0IrZi5kaXZpZGVyTWFyZ2luK1IuaGVpZ2h0KTtjb25zdCBidD1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGYucGFkZGluZykuYXR0cigieSIsQisyKmYuZGl2aWRlck1hcmdpbitSLmhlaWdodCtmLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Xz0hMCxhLm1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtdCl7QlJ0KGJ0LG10LF8sZiksXz0hMX0pfWNvbnN0IEs9Yi5ub2RlKCkuZ2V0QkJveCgpO3ZhciBpdD0iICI7YS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaXQ9aXQrYS5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7Y29uc3QgdXQ9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsSy53aWR0aCsyKmYucGFkZGluZykuYXR0cigiaGVpZ2h0IixLLmhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luKS5hdHRyKCJjbGFzcyIsaXQpLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIEUubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihidCl7YnQuc2V0QXR0cmlidXRlKCJ4IiwodXQtYnQuZ2V0QkJveCgpLndpZHRoKS8yKX0pLGEudG9vbHRpcCYmRS5pbnNlcnQoInRpdGxlIikudGV4dChhLnRvb2x0aXApLGomJmouYXR0cigieDIiLHV0KSx6JiZ6LmF0dHIoIngyIix1dCksbS53aWR0aD11dCxtLmhlaWdodD1LLmhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luLG19LEZSdD1mdW5jdGlvbihpKXtsZXQgYT1pLmlkO3JldHVybiBpLnR5cGUmJihhKz0iPCIrek4oaS50eXBlKSsiPiIpLGF9LFNHZT1mdW5jdGlvbihpLGEsZixwKXtVdC5kZWJ1ZygiUmVuZGVyaW5nIG5vdGUgIixhLGYpO2NvbnN0IHY9YS5pZCxtPXtpZDp2LHRleHQ6YS50ZXh0LHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsdikuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IEU9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixmLnRleHRIZWlnaHQrZi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTtjb25zdCBfPUpTT04ucGFyc2UoYCIke2EudGV4dH0iYCkuc3BsaXQoYApgKTtfLmZvckVhY2goZnVuY3Rpb24oail7VXQuZGVidWcoYEFkZGluZyBsaW5lOiAke2p9YCksRS5hcHBlbmQoInRzcGFuIikudGV4dChqKS5hdHRyKCJjbGFzcyIsInRpdGxlIikuYXR0cigiZHkiLGYudGV4dEhlaWdodCl9KTtjb25zdCBMPWIubm9kZSgpLmdldEJCb3goKSxCPWIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEwud2lkdGgrMipmLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsTC5oZWlnaHQrXy5sZW5ndGgqZi50ZXh0SGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4pLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIEUubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihqKXtqLnNldEF0dHJpYnV0ZSgieCIsKEItai5nZXRCQm94KCkud2lkdGgpLzIpfSksbS53aWR0aD1CLG0uaGVpZ2h0PUwuaGVpZ2h0K18ubGVuZ3RoKmYudGV4dEhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luLG19LEJSdD1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtkaXNwbGF5VGV4dDp2LGNzc1N0eWxlOm19PWEuZ2V0RGlzcGxheURldGFpbHMoKSxiPWkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHAucGFkZGluZykudGV4dCh2KTttIT09IiImJmIuYXR0cigic3R5bGUiLGEuY3NzU3R5bGUpLGZ8fGIuYXR0cigiZHkiLHAudGV4dEhlaWdodCl9LG1ndD17Z2V0Q2xhc3NUaXRsZVN0cmluZzpGUnQsZHJhd0NsYXNzOl9HZSxkcmF3RWRnZTpDR2UsZHJhd05vdGU6U0dlfTtsZXQgT0s9e307Y29uc3QgTks9MjAsQlA9ZnVuY3Rpb24oaSl7Y29uc3QgYT1PYmplY3QuZW50cmllcyhPSykuZmluZChmPT5mWzFdLmxhYmVsPT09aSk7aWYoYSlyZXR1cm4gYVswXX0sQUdlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJleHRlbnNpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sTEdlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6X1J0LGRiOkRLLHJlbmRlcmVyOntkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9TGUoKS5jbGFzcztPSz17fSxVdC5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK2kpO2NvbnN0IG09TGUoKS5zZWN1cml0eUxldmVsO2xldCBiO209PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIobT09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxfPUUuc2VsZWN0KGBbaWQ9JyR7YX0nXWApO0FHZShfKTtjb25zdCBMPW5ldyBhMSh7bXVsdGlncmFwaDohMH0pO0wuc2V0R3JhcGgoe2lzTXVsdGlHcmFwaDohMH0pLEwuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgTj1wLmRiLmdldENsYXNzZXMoKSxCPU9iamVjdC5rZXlzKE4pO2Zvcihjb25zdCB1dCBvZiBCKXtjb25zdCBidD1OW3V0XSxtdD1tZ3QuZHJhd0NsYXNzKF8sYnQsdixwKTtPS1ttdC5pZF09bXQsTC5zZXROb2RlKG10LmlkLG10KSxVdC5pbmZvKCJPcmcgaGVpZ2h0OiAiK210LmhlaWdodCl9cC5kYi5nZXRSZWxhdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKHV0KXtVdC5pbmZvKCJ0am9obyIrQlAodXQuaWQxKStCUCh1dC5pZDIpK0pTT04uc3RyaW5naWZ5KHV0KSksTC5zZXRFZGdlKEJQKHV0LmlkMSksQlAodXQuaWQyKSx7cmVsYXRpb246dXR9LHV0LnRpdGxlfHwiREVGQVVMVCIpfSkscC5kYi5nZXROb3RlcygpLmZvckVhY2goZnVuY3Rpb24odXQpe1V0LmRlYnVnKGBBZGRpbmcgbm90ZTogJHtKU09OLnN0cmluZ2lmeSh1dCl9YCk7Y29uc3QgYnQ9bWd0LmRyYXdOb3RlKF8sdXQsdixwKTtPS1tidC5pZF09YnQsTC5zZXROb2RlKGJ0LmlkLGJ0KSx1dC5jbGFzcyYmdXQuY2xhc3MgaW4gTiYmTC5zZXRFZGdlKHV0LmlkLEJQKHV0LmNsYXNzKSx7cmVsYXRpb246e2lkMTp1dC5pZCxpZDI6dXQuY2xhc3MscmVsYXRpb246e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6MTB9fX0sIkRFRkFVTFQiKX0pLGVMKEwpLEwubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHV0KXt1dCE9PXZvaWQgMCYmTC5ub2RlKHV0KSE9PXZvaWQgMCYmKFV0LmRlYnVnKCJOb2RlICIrdXQrIjogIitKU09OLnN0cmluZ2lmeShMLm5vZGUodXQpKSksRS5zZWxlY3QoIiMiKyhwLmRiLmxvb2tVcERvbUlkKHV0KXx8dXQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoTC5ub2RlKHV0KS54LUwubm9kZSh1dCkud2lkdGgvMikrIiwiKyhMLm5vZGUodXQpLnktTC5ub2RlKHV0KS5oZWlnaHQvMikrIiApIikpfSksTC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24odXQpe3V0IT09dm9pZCAwJiZMLmVkZ2UodXQpIT09dm9pZCAwJiYoVXQuZGVidWcoIkVkZ2UgIit1dC52KyIgLT4gIit1dC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoTC5lZGdlKHV0KSkpLG1ndC5kcmF3RWRnZShfLEwuZWRnZSh1dCksTC5lZGdlKHV0KS5yZWxhdGlvbix2LHApKX0pO2NvbnN0IHo9Xy5ub2RlKCkuZ2V0QkJveCgpLEs9ei53aWR0aCtOSyoyLGl0PXouaGVpZ2h0K05LKjI7b2coXyxpdCxLLHYudXNlTWF4V2lkdGgpO2NvbnN0IHN0PWAke3oueC1OS30gJHt6LnktTkt9ICR7S30gJHtpdH1gO1V0LmRlYnVnKGB2aWV3Qm94ICR7c3R9YCksXy5hdHRyKCJ2aWV3Qm94IixzdCl9fSxzdHlsZXM6TlJ0LGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLERLLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx5Z3Q9aT0+WXIuc2FuaXRpemVUZXh0KGksTGUoKSk7bGV0IHhndD17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxjdXJ2ZTp2b2lkIDB9O2NvbnN0IE1HZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PU9iamVjdC5rZXlzKGkpO1V0LmluZm8oImtleXM6Iix2KSxVdC5pbmZvKGkpLHYuZm9yRWFjaChmdW5jdGlvbihtKXt2YXIgTCxOO2NvbnN0IGI9aVttXSxfPXtzaGFwZToicmVjdCIsaWQ6Yi5pZCxkb21JZDpiLmRvbUlkLGxhYmVsVGV4dDp5Z3QoYi5pZCksbGFiZWxTdHlsZToiIixzdHlsZToiZmlsbDogbm9uZTsgc3Ryb2tlOiBibGFjayIscGFkZGluZzooKEw9TGUoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpMLnBhZGRpbmcpPz8oKE49TGUoKS5jbGFzcyk9PW51bGw/dm9pZCAwOk4ucGFkZGluZyl9O2Euc2V0Tm9kZShiLmlkLF8pLFJSdChiLmNsYXNzZXMsYSxmLHAsYi5pZCksVXQuaW5mbygic2V0Tm9kZSIsXyl9KX0sUlJ0PWZ1bmN0aW9uKGksYSxmLHAsdil7Y29uc3QgbT1PYmplY3Qua2V5cyhpKTtVdC5pbmZvKCJrZXlzOiIsbSksVXQuaW5mbyhpKSxtLmZpbHRlcihiPT5pW2JdLnBhcmVudD09dikuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgeixLO2NvbnN0IEU9aVtiXSxfPUUuY3NzQ2xhc3Nlcy5qb2luKCIgIiksTD17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sTj1FLmxhYmVsPz9FLmlkLEI9MCxqPSJjbGFzc19ib3giLFI9e2xhYmVsU3R5bGU6TC5sYWJlbFN0eWxlLHNoYXBlOmosbGFiZWxUZXh0OnlndChOKSxjbGFzc0RhdGE6RSxyeDpCLHJ5OkIsY2xhc3M6XyxzdHlsZTpMLnN0eWxlLGlkOkUuaWQsZG9tSWQ6RS5kb21JZCx0b29sdGlwOnAuZGIuZ2V0VG9vbHRpcChFLmlkLHYpfHwiIixoYXZlQ2FsbGJhY2s6RS5oYXZlQ2FsbGJhY2ssbGluazpFLmxpbmssd2lkdGg6RS50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6RS50eXBlLHBhZGRpbmc6KCh6PUxlKCkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6ei5wYWRkaW5nKT8/KChLPUxlKCkuY2xhc3MpPT1udWxsP3ZvaWQgMDpLLnBhZGRpbmcpfTthLnNldE5vZGUoRS5pZCxSKSx2JiZhLnNldFBhcmVudChFLmlkLHYpLFV0LmluZm8oInNldE5vZGUiLFIpfSl9LElHZT1mdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKGkpLGkuZm9yRWFjaChmdW5jdGlvbih2LG0pe3ZhciBLLGl0O2NvbnN0IGI9dixFPSIiLF89e2xhYmVsU3R5bGU6IiIsc3R5bGU6IiJ9LEw9Yi50ZXh0LE49MCxCPSJub3RlIixqPXtsYWJlbFN0eWxlOl8ubGFiZWxTdHlsZSxzaGFwZTpCLGxhYmVsVGV4dDp5Z3QoTCksbm90ZURhdGE6YixyeDpOLHJ5Ok4sY2xhc3M6RSxzdHlsZTpfLnN0eWxlLGlkOmIuaWQsZG9tSWQ6Yi5pZCx0b29sdGlwOiIiLHR5cGU6Im5vdGUiLHBhZGRpbmc6KChLPUxlKCkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Sy5wYWRkaW5nKT8/KChpdD1MZSgpLmNsYXNzKT09bnVsbD92b2lkIDA6aXQucGFkZGluZyl9O2lmKGEuc2V0Tm9kZShiLmlkLGopLFV0LmluZm8oInNldE5vZGUiLGopLCFiLmNsYXNzfHwhKGIuY2xhc3MgaW4gcCkpcmV0dXJuO2NvbnN0IFI9ZittLHo9e2lkOmBlZGdlTm90ZSR7Un1gLGNsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOiJkb3R0ZWQiLGFycm93aGVhZDoibm9uZSIsc3RhcnRMYWJlbFJpZ2h0OiIiLGVuZExhYmVsTGVmdDoiIixhcnJvd1R5cGVTdGFydDoibm9uZSIsYXJyb3dUeXBlRW5kOiJub25lIixzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGN1cnZlOlgyKHhndC5jdXJ2ZSxpZyl9O2Euc2V0RWRnZShiLmlkLGIuY2xhc3MseixSKX0pfSxER2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUxlKCkuZmxvd2NoYXJ0O2xldCBwPTA7aS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBiO3ArKztjb25zdCBtPXtjbGFzc2VzOiJyZWxhdGlvbiIscGF0dGVybjp2LnJlbGF0aW9uLmxpbmVUeXBlPT0xPyJkYXNoZWQiOiJzb2xpZCIsaWQ6ImlkIitwLGFycm93aGVhZDp2LnR5cGU9PT0iYXJyb3dfb3BlbiI/Im5vbmUiOiJub3JtYWwiLHN0YXJ0TGFiZWxSaWdodDp2LnJlbGF0aW9uVGl0bGUxPT09Im5vbmUiPyIiOnYucmVsYXRpb25UaXRsZTEsZW5kTGFiZWxMZWZ0OnYucmVsYXRpb25UaXRsZTI9PT0ibm9uZSI/IiI6di5yZWxhdGlvblRpdGxlMixhcnJvd1R5cGVTdGFydDpqUnQodi5yZWxhdGlvbi50eXBlMSksYXJyb3dUeXBlRW5kOmpSdCh2LnJlbGF0aW9uLnR5cGUyKSxzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGN1cnZlOlgyKGY9PW51bGw/dm9pZCAwOmYuY3VydmUsaWcpfTtpZihVdC5pbmZvKG0sdiksdi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgRT1lbSh2LnN0eWxlKTttLnN0eWxlPUUuc3R5bGUsbS5sYWJlbFN0eWxlPUUubGFiZWxTdHlsZX12LnRleHQ9di50aXRsZSx2LnRleHQ9PT12b2lkIDA/di5zdHlsZSE9PXZvaWQgMCYmKG0uYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToobS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsbS5sYWJlbHBvcz0iYyIsKChiPUxlKCkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Yi5odG1sTGFiZWxzKT8/TGUoKS5odG1sTGFiZWxzPyhtLmxhYmVsVHlwZT0iaHRtbCIsbS5sYWJlbD0nPHNwYW4gY2xhc3M9ImVkZ2VMYWJlbCI+Jyt2LnRleHQrIjwvc3Bhbj4iKToobS5sYWJlbFR5cGU9InRleHQiLG0ubGFiZWw9di50ZXh0LnJlcGxhY2UoWXIubGluZUJyZWFrUmVnZXgsYApgKSx2LnN0eWxlPT09dm9pZCAwJiYobS5zdHlsZT1tLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLG0ubGFiZWxTdHlsZT1tLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLGEuc2V0RWRnZSh2LmlkMSx2LmlkMixtLHApfSl9LE9HZT1mdW5jdGlvbihpKXt4Z3Q9ey4uLnhndCwuLi5pfX0sTkdlPWFzeW5jIGZ1bmN0aW9uKGksYSxmLHApe1V0LmluZm8oIkRyYXdpbmcgY2xhc3MgLSAiLGEpO2NvbnN0IHY9TGUoKS5mbG93Y2hhcnQ/P0xlKCkuY2xhc3MsbT1MZSgpLnNlY3VyaXR5TGV2ZWw7VXQuaW5mbygiY29uZmlnOiIsdik7Y29uc3QgYj0odj09bnVsbD92b2lkIDA6di5ub2RlU3BhY2luZyk/PzUwLEU9KHY9PW51bGw/dm9pZCAwOnYucmFua1NwYWNpbmcpPz81MCxfPW5ldyBhMSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnAuZGIuZ2V0RGlyZWN0aW9uKCksbm9kZXNlcDpiLHJhbmtzZXA6RSxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSksTD1wLmRiLmdldE5hbWVzcGFjZXMoKSxOPXAuZGIuZ2V0Q2xhc3NlcygpLEI9cC5kYi5nZXRSZWxhdGlvbnMoKSxqPXAuZGIuZ2V0Tm90ZXMoKTtVdC5pbmZvKEIpLE1HZShMLF8sYSxwKSxSUnQoTixfLGEscCksREdlKEIsXyksSUdlKGosXyxCLmxlbmd0aCsxLE4pO2xldCBSO209PT0ic2FuZGJveCImJihSPXlyKCIjaSIrYSkpO2NvbnN0IHo9eXIobT09PSJzYW5kYm94Ij9SLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxLPXouc2VsZWN0KGBbaWQ9IiR7YX0iXWApLGl0PXouc2VsZWN0KCIjIithKyIgZyIpO2lmKGF3YWl0IEkwdChpdCxfLFsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiLCJsb2xsaXBvcCJdLCJjbGFzc0RpYWdyYW0iLGEpLCRhLmluc2VydFRpdGxlKEssImNsYXNzVGl0bGVUZXh0Iiwodj09bnVsbD92b2lkIDA6di50aXRsZVRvcE1hcmdpbik/PzUscC5kYi5nZXREaWFncmFtVGl0bGUoKSksY1QoXyxLLHY9PW51bGw/dm9pZCAwOnYuZGlhZ3JhbVBhZGRpbmcsdj09bnVsbD92b2lkIDA6di51c2VNYXhXaWR0aCksISh2IT1udWxsJiZ2Lmh0bWxMYWJlbHMpKXtjb25zdCBzdD1tPT09InNhbmRib3giP1Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsdXQ9c3QucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IGJ0IG9mIHV0KXtjb25zdCBtdD1idC5nZXRCQm94KCkseXQ9c3QuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt5dC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSx5dC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSx5dC5zZXRBdHRyaWJ1dGUoIndpZHRoIixtdC53aWR0aCkseXQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLG10LmhlaWdodCksYnQuaW5zZXJ0QmVmb3JlKHl0LGJ0LmZpcnN0Q2hpbGQpfX19O2Z1bmN0aW9uIGpSdChpKXtsZXQgYTtzd2l0Y2goaSl7Y2FzZSAwOmE9ImFnZ3JlZ2F0aW9uIjticmVhaztjYXNlIDE6YT0iZXh0ZW5zaW9uIjticmVhaztjYXNlIDI6YT0iY29tcG9zaXRpb24iO2JyZWFrO2Nhc2UgMzphPSJkZXBlbmRlbmN5IjticmVhaztjYXNlIDQ6YT0ibG9sbGlwb3AiO2JyZWFrO2RlZmF1bHQ6YT0ibm9uZSJ9cmV0dXJuIGF9Y29uc3QgUEdlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6X1J0LGRiOkRLLHJlbmRlcmVyOntzZXRDb25mOk9HZSxkcmF3Ok5HZX0sc3R5bGVzOk5SdCxpbml0Omk9PntpLmNsYXNzfHwoaS5jbGFzcz17fSksaS5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPWkuYXJyb3dNYXJrZXJBYnNvbHV0ZSxESy5jbGVhcigpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGtndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEN0LFosVHQsSHQpe2ZvcihUdD1UdHx8e30sSHQ9Q3QubGVuZ3RoO0h0LS07VHRbQ3RbSHRdXT1aKTtyZXR1cm4gVHR9LGE9WzEsMl0sZj1bMSwzXSxwPVsxLDRdLHY9WzIsNF0sbT1bMSw5XSxiPVsxLDExXSxFPVsxLDE1XSxfPVsxLDE2XSxMPVsxLDE3XSxOPVsxLDE4XSxCPVsxLDMwXSxqPVsxLDE5XSxSPVsxLDIwXSx6PVsxLDIxXSxLPVsxLDIyXSxpdD1bMSwyM10sc3Q9WzEsMjVdLHV0PVsxLDI2XSxidD1bMSwyN10sbXQ9WzEsMjhdLHl0PVsxLDI5XSxkdD1bMSwzMl0saHQ9WzEsMzNdLHd0PVsxLDM0XSxYPVsxLDM1XSxwdD1bMSwzMV0sVT1bMSw0LDUsMTUsMTYsMTgsMjAsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLHh0PVsxLDQsNSwxMywxNCwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sbnQ9WzQsNSwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sT3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGNsYXNzRGVmU3RhdGVtZW50OjEwLGNzc0NsYXNzU3RhdGVtZW50OjExLGlkU3RhdGVtZW50OjEyLERFU0NSOjEzLCItLT4iOjE0LEhJREVfRU1QVFk6MTUsc2NhbGU6MTYsV0lEVEg6MTcsQ09NUE9TSVRfU1RBVEU6MTgsU1RSVUNUX1NUQVJUOjE5LFNUUlVDVF9TVE9QOjIwLFNUQVRFX0RFU0NSOjIxLEFTOjIyLElEOjIzLEZPUks6MjQsSk9JTjoyNSxDSE9JQ0U6MjYsQ09OQ1VSUkVOVDoyNyxub3RlOjI4LG5vdGVQb3NpdGlvbjoyOSxOT1RFX1RFWFQ6MzAsZGlyZWN0aW9uOjMxLGFjY190aXRsZTozMixhY2NfdGl0bGVfdmFsdWU6MzMsYWNjX2Rlc2NyOjM0LGFjY19kZXNjcl92YWx1ZTozNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM2LGNsYXNzRGVmOjM3LENMQVNTREVGX0lEOjM4LENMQVNTREVGX1NUWUxFT1BUUzozOSxERUZBVUxUOjQwLGNsYXNzOjQxLENMQVNTRU5USVRZX0lEUzo0MixTVFlMRUNMQVNTOjQzLGRpcmVjdGlvbl90Yjo0NCxkaXJlY3Rpb25fYnQ6NDUsZGlyZWN0aW9uX3JsOjQ2LGRpcmVjdGlvbl9scjo0Nyxlb2w6NDgsIjsiOjQ5LEVER0VfU1RBVEU6NTAsU1RZTEVfU0VQQVJBVE9SOjUxLGxlZnRfb2Y6NTIscmlnaHRfb2Y6NTMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNjoiU0QiLDEzOiJERVNDUiIsMTQ6Ii0tPiIsMTU6IkhJREVfRU1QVFkiLDE2OiJzY2FsZSIsMTc6IldJRFRIIiwxODoiQ09NUE9TSVRfU1RBVEUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIwOiJTVFJVQ1RfU1RPUCIsMjE6IlNUQVRFX0RFU0NSIiwyMjoiQVMiLDIzOiJJRCIsMjQ6IkZPUksiLDI1OiJKT0lOIiwyNjoiQ0hPSUNFIiwyNzoiQ09OQ1VSUkVOVCIsMjg6Im5vdGUiLDMwOiJOT1RFX1RFWFQiLDMyOiJhY2NfdGl0bGUiLDMzOiJhY2NfdGl0bGVfdmFsdWUiLDM0OiJhY2NfZGVzY3IiLDM1OiJhY2NfZGVzY3JfdmFsdWUiLDM2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiY2xhc3NEZWYiLDM4OiJDTEFTU0RFRl9JRCIsMzk6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDA6IkRFRkFVTFQiLDQxOiJjbGFzcyIsNDI6IkNMQVNTRU5USVRZX0lEUyIsNDM6IlNUWUxFQ0xBU1MiLDQ0OiJkaXJlY3Rpb25fdGIiLDQ1OiJkaXJlY3Rpb25fYnQiLDQ2OiJkaXJlY3Rpb25fcmwiLDQ3OiJkaXJlY3Rpb25fbHIiLDQ5OiI7Iiw1MDoiRURHRV9TVEFURSIsNTE6IlNUWUxFX1NFUEFSQVRPUiIsNTI6ImxlZnRfb2YiLDUzOiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzQ4LDFdLFs0OCwxXSxbMTIsMV0sWzEyLDFdLFsxMiwzXSxbMTIsM10sWzI5LDFdLFsyOSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihaLFR0LEh0LEl0LEZ0LGtlLHBuKXt2YXIgTWU9a2UubGVuZ3RoLTE7c3dpdGNoKEZ0KXtjYXNlIDM6cmV0dXJuIEl0LnNldFJvb3REb2Moa2VbTWVdKSxrZVtNZV07Y2FzZSA0OnRoaXMuJD1bXTticmVhaztjYXNlIDU6a2VbTWVdIT0ibmwiJiYoa2VbTWUtMV0ucHVzaChrZVtNZV0pLHRoaXMuJD1rZVtNZS0xXSk7YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9a2VbTWVdO2JyZWFrO2Nhc2UgODp0aGlzLiQ9Im5sIjticmVhaztjYXNlIDExOnRoaXMuJD1rZVtNZV07YnJlYWs7Y2FzZSAxMjpjb25zdCB3ZT1rZVtNZS0xXTt3ZS5kZXNjcmlwdGlvbj1JdC50cmltQ29sb24oa2VbTWVdKSx0aGlzLiQ9d2U7YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6a2VbTWUtMl0sc3RhdGUyOmtlW01lXX07YnJlYWs7Y2FzZSAxNDpjb25zdCBfZT1JdC50cmltQ29sb24oa2VbTWVdKTt0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6a2VbTWUtM10sc3RhdGUyOmtlW01lLTFdLGRlc2NyaXB0aW9uOl9lfTticmVhaztjYXNlIDE4OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzprZVtNZS0xXX07YnJlYWs7Y2FzZSAxOTp2YXIgdmU9a2VbTWVdLEdlPWtlW01lLTJdLnRyaW0oKTtpZihrZVtNZV0ubWF0Y2goIjoiKSl7dmFyIEtlPWtlW01lXS5zcGxpdCgiOiIpO3ZlPUtlWzBdLEdlPVtHZSxLZVsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6dmUsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246R2V9O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWUtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246a2VbTWUtNV0sZG9jOmtlW01lLTFdfTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDprZVtNZV0sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWVdLHR5cGU6ImNob2ljZSJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6SXQuZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWUtMV0udHJpbSgpLG5vdGU6e3Bvc2l0aW9uOmtlW01lLTJdLnRyaW0oKSx0ZXh0OmtlW01lXS50cmltKCl9fTticmVhaztjYXNlIDI4OnRoaXMuJD1rZVtNZV0udHJpbSgpLEl0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1rZVtNZV0udHJpbSgpLEl0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD17c3RtdDoiY2xhc3NEZWYiLGlkOmtlW01lLTFdLnRyaW0oKSxjbGFzc2VzOmtlW01lXS50cmltKCl9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtzdG10OiJhcHBseUNsYXNzIixpZDprZVtNZS0xXS50cmltKCksc3R5bGVDbGFzczprZVtNZV0udHJpbSgpfTticmVhaztjYXNlIDM0Okl0LnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzNTpJdC5zZXREaXJlY3Rpb24oIkJUIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMzY6SXQuc2V0RGlyZWN0aW9uKCJSTCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDM3Okl0LnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSA0MDpjYXNlIDQxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lXS50cmltKCksdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWUtMl0udHJpbSgpLGNsYXNzZXM6W2tlW01lXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lLTJdLnRyaW0oKSxjbGFzc2VzOltrZVtNZV0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWt9fSx0YWJsZTpbezM6MSw0OmEsNTpmLDY6cH0sezE6WzNdfSx7Mzo1LDQ6YSw1OmYsNjpwfSx7Mzo2LDQ6YSw1OmYsNjpwfSxpKFsxLDQsNSwxNSwxNiwxOCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sdix7Nzo3fSksezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXSw0Om0sNTpiLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDE1OkUsMTY6XywxODpMLDIxOk4sMjM6QiwyNDpqLDI1OlIsMjY6eiwyNzpLLDI4Oml0LDMxOjI0LDMyOnN0LDM0OnV0LDM2OmJ0LDM3Om10LDQxOnl0LDQ0OmR0LDQ1Omh0LDQ2Ond0LDQ3OlgsNTA6cHR9LGkoVSxbMiw1XSksezk6MzYsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkwsMjE6TiwyMzpCLDI0OmosMjU6UiwyNjp6LDI3OkssMjg6aXQsMzE6MjQsMzI6c3QsMzQ6dXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZHQsNDU6aHQsNDY6d3QsNDc6WCw1MDpwdH0saShVLFsyLDddKSxpKFUsWzIsOF0pLGkoVSxbMiw5XSksaShVLFsyLDEwXSksaShVLFsyLDExXSx7MTM6WzEsMzddLDE0OlsxLDM4XX0pLGkoVSxbMiwxNV0pLHsxNzpbMSwzOV19LGkoVSxbMiwxN10sezE5OlsxLDQwXX0pLHsyMjpbMSw0MV19LGkoVSxbMiwyMV0pLGkoVSxbMiwyMl0pLGkoVSxbMiwyM10pLGkoVSxbMiwyNF0pLHsyOTo0MiwzMDpbMSw0M10sNTI6WzEsNDRdLDUzOlsxLDQ1XX0saShVLFsyLDI3XSksezMzOlsxLDQ2XX0sezM1OlsxLDQ3XX0saShVLFsyLDMwXSksezM4OlsxLDQ4XSw0MDpbMSw0OV19LHs0MjpbMSw1MF19LGkoeHQsWzIsNDBdLHs1MTpbMSw1MV19KSxpKHh0LFsyLDQxXSx7NTE6WzEsNTJdfSksaShVLFsyLDM0XSksaShVLFsyLDM1XSksaShVLFsyLDM2XSksaShVLFsyLDM3XSksaShVLFsyLDZdKSxpKFUsWzIsMTJdKSx7MTI6NTMsMjM6Qiw1MDpwdH0saShVLFsyLDE2XSksaShudCx2LHs3OjU0fSksezIzOlsxLDU1XX0sezIzOlsxLDU2XX0sezIyOlsxLDU3XX0sezIzOlsyLDQ0XX0sezIzOlsyLDQ1XX0saShVLFsyLDI4XSksaShVLFsyLDI5XSksezM5OlsxLDU4XX0sezM5OlsxLDU5XX0sezQzOlsxLDYwXX0sezIzOlsxLDYxXX0sezIzOlsxLDYyXX0saShVLFsyLDEzXSx7MTM6WzEsNjNdfSksezQ6bSw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkwsMjA6WzEsNjRdLDIxOk4sMjM6QiwyNDpqLDI1OlIsMjY6eiwyNzpLLDI4Oml0LDMxOjI0LDMyOnN0LDM0OnV0LDM2OmJ0LDM3Om10LDQxOnl0LDQ0OmR0LDQ1Omh0LDQ2Ond0LDQ3OlgsNTA6cHR9LGkoVSxbMiwxOV0sezE5OlsxLDY1XX0pLHszMDpbMSw2Nl19LHsyMzpbMSw2N119LGkoVSxbMiwzMV0pLGkoVSxbMiwzMl0pLGkoVSxbMiwzM10pLGkoeHQsWzIsNDJdKSxpKHh0LFsyLDQzXSksaShVLFsyLDE0XSksaShVLFsyLDE4XSksaShudCx2LHs3OjY4fSksaShVLFsyLDI1XSksaShVLFsyLDI2XSksezQ6bSw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkwsMjA6WzEsNjldLDIxOk4sMjM6QiwyNDpqLDI1OlIsMjY6eiwyNzpLLDI4Oml0LDMxOjI0LDMyOnN0LDM0OnV0LDM2OmJ0LDM3Om10LDQxOnl0LDQ0OmR0LDQ1Omh0LDQ2Ond0LDQ3OlgsNTA6cHR9LGkoVSxbMiwyMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDQ0OlsyLDQ0XSw0NTpbMiw0NV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oWixUdCl7aWYoVHQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShaKTtlbHNle3ZhciBIdD1uZXcgRXJyb3IoWik7dGhyb3cgSHQuaGFzaD1UdCxIdH19LHBhcnNlOmZ1bmN0aW9uKFope3ZhciBUdD10aGlzLEh0PVswXSxJdD1bXSxGdD1bbnVsbF0sa2U9W10scG49dGhpcy50YWJsZSxNZT0iIix2ZT0wLEdlPTAsS2U9Mix3ZT0xLF9lPWtlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLCR0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikscmU9e3l5Ont9fTtmb3IodmFyIGllIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaWUpJiYocmUueXlbaWVdPXRoaXMueXlbaWVdKTskdC5zZXRJbnB1dChaLHJlLnl5KSxyZS55eS5sZXhlcj0kdCxyZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgJHQueXlsbG9jPiJ1IiYmKCR0Lnl5bGxvYz17fSk7dmFyIE9lPSR0Lnl5bGxvYztrZS5wdXNoKE9lKTt2YXIgb2U9JHQub3B0aW9ucyYmJHQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHJlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXJlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE5lKCl7dmFyIEVlO3JldHVybiBFZT1JdC5wb3AoKXx8JHQubGV4KCl8fHdlLHR5cGVvZiBFZSE9Im51bWJlciImJihFZSBpbnN0YW5jZW9mIEFycmF5JiYoSXQ9RWUsRWU9SXQucG9wKCkpLEVlPVR0LnN5bWJvbHNfW0VlXXx8RWUpLEVlfWZvcih2YXIgbWUsY24sbGkseWEsZGE9e30sT28sZHMsRHIsbnI7Oyl7aWYoY249SHRbSHQubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbY25dP2xpPXRoaXMuZGVmYXVsdEFjdGlvbnNbY25dOigobWU9PT1udWxsfHx0eXBlb2YgbWU+InUiKSYmKG1lPU5lKCkpLGxpPXBuW2NuXSYmcG5bY25dW21lXSksdHlwZW9mIGxpPiJ1Inx8IWxpLmxlbmd0aHx8IWxpWzBdKXt2YXIgZGk9IiI7bnI9W107Zm9yKE9vIGluIHBuW2NuXSl0aGlzLnRlcm1pbmFsc19bT29dJiZPbz5LZSYmbnIucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW09vXSsiJyIpOyR0LnNob3dQb3NpdGlvbj9kaT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2ZSsxKStgOgpgKyR0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArbnIuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1ttZV18fG1lKSsiJyI6ZGk9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodmUrMSkrIjogVW5leHBlY3RlZCAiKyhtZT09d2U/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bbWVdfHxtZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoZGkse3RleHQ6JHQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW21lXXx8bWUsbGluZTokdC55eWxpbmVubyxsb2M6T2UsZXhwZWN0ZWQ6bnJ9KX1pZihsaVswXWluc3RhbmNlb2YgQXJyYXkmJmxpLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrY24rIiwgdG9rZW46ICIrbWUpO3N3aXRjaChsaVswXSl7Y2FzZSAxOkh0LnB1c2gobWUpLEZ0LnB1c2goJHQueXl0ZXh0KSxrZS5wdXNoKCR0Lnl5bGxvYyksSHQucHVzaChsaVsxXSksbWU9bnVsbCxHZT0kdC55eWxlbmcsTWU9JHQueXl0ZXh0LHZlPSR0Lnl5bGluZW5vLE9lPSR0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoZHM9dGhpcy5wcm9kdWN0aW9uc19bbGlbMV1dWzFdLGRhLiQ9RnRbRnQubGVuZ3RoLWRzXSxkYS5fJD17Zmlyc3RfbGluZTprZVtrZS5sZW5ndGgtKGRzfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6a2Vba2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46a2Vba2UubGVuZ3RoLShkc3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjprZVtrZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG9lJiYoZGEuXyQucmFuZ2U9W2tlW2tlLmxlbmd0aC0oZHN8fDEpXS5yYW5nZVswXSxrZVtrZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx5YT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoZGEsW01lLEdlLHZlLHJlLnl5LGxpWzFdLEZ0LGtlXS5jb25jYXQoX2UpKSx0eXBlb2YgeWE8InUiKXJldHVybiB5YTtkcyYmKEh0PUh0LnNsaWNlKDAsLTEqZHMqMiksRnQ9RnQuc2xpY2UoMCwtMSpkcyksa2U9a2Uuc2xpY2UoMCwtMSpkcykpLEh0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bbGlbMV1dWzBdKSxGdC5wdXNoKGRhLiQpLGtlLnB1c2goZGEuXyQpLERyPXBuW0h0W0h0Lmxlbmd0aC0yXV1bSHRbSHQubGVuZ3RoLTFdXSxIdC5wdXNoKERyKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTnQ9ZnVuY3Rpb24oKXt2YXIgQ3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oVHQsSHQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVHQsSHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFR0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oWixUdCl7cmV0dXJuIHRoaXMueXk9VHR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVosdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVosdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVosdGhpcy5tYXRjaGVkKz1aO3ZhciBUdD1aLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVHQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFp9LHVucHV0OmZ1bmN0aW9uKFope3ZhciBUdD1aLmxlbmd0aCxIdD1aLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Wit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtVHQpLHRoaXMub2Zmc2V0LT1UdDt2YXIgSXQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksSHQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1IdC5sZW5ndGgtMSk7dmFyIEZ0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpIdD8oSHQubGVuZ3RoPT09SXQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStJdFtJdC5sZW5ndGgtSHQubGVuZ3RoXS5sZW5ndGgtSHRbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1UdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtGdFswXSxGdFswXSt0aGlzLnl5bGVuZy1UdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFope3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShaKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBaPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oWi5sZW5ndGg+MjA/Ii4uLiI6IiIpK1ouc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLm1hdGNoO3JldHVybiBaLmxlbmd0aDwyMCYmKForPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVoubGVuZ3RoKSksKFouc3Vic3RyKDAsMjApKyhaLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgWj10aGlzLnBhc3RJbnB1dCgpLFR0PW5ldyBBcnJheShaLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFordGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1R0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihaLFR0KXt2YXIgSHQsSXQsRnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEZ0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEZ0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEl0PVpbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEl0JiYodGhpcy55eWxpbmVubys9SXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46SXQ/SXRbSXQubGVuZ3RoLTFdLmxlbmd0aC1JdFtJdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitaWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVpbMF0sdGhpcy5tYXRjaCs9WlswXSx0aGlzLm1hdGNoZXM9Wix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShaWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1aWzBdLEh0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFR0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEh0KXJldHVybiBIdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIga2UgaW4gRnQpdGhpc1trZV09RnRba2VdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFosVHQsSHQsSXQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksa2U9MDtrZTxGdC5sZW5ndGg7a2UrKylpZihIdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0Z0W2tlXV0pLEh0JiYoIVR0fHxIdFswXS5sZW5ndGg+VHRbMF0ubGVuZ3RoKSl7aWYoVHQ9SHQsSXQ9a2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoWj10aGlzLnRlc3RfbWF0Y2goSHQsRnRba2VdKSxaIT09ITEpcmV0dXJuIFo7aWYodGhpcy5fYmFja3RyYWNrKXtUdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBUdD8oWj10aGlzLnRlc3RfbWF0Y2goVHQsRnRbSXRdKSxaIT09ITE/WjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFR0PXRoaXMubmV4dCgpO3JldHVybiBUdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oVHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChUdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFR0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFR0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oVHQpe3JldHVybiBUdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFR0fHwwKSxUdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW1R0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihUdCl7dGhpcy5iZWdpbihUdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVHQsSHQsSXQsRnQpe3N3aXRjaChJdCl7Y2FzZSAwOnJldHVybiA0MDtjYXNlIDE6cmV0dXJuIDQ0O2Nhc2UgMjpyZXR1cm4gNDU7Y2FzZSAzOnJldHVybiA0NjtjYXNlIDQ6cmV0dXJuIDQ3O2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiA1O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMTM6cmV0dXJuIDE3O2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMyO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNDtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzc7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM4O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDI2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0MTtjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDI7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQzO2Nhc2UgMjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMzA6cmV0dXJuIDE3O2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEh0Lnl5dGV4dD1IdC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxIdC55eXRleHQ9SHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksSHQueXl0ZXh0PUh0Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI2O2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxIdC55eXRleHQ9SHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksSHQueXl0ZXh0PUh0Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEh0Lnl5dGV4dD1IdC55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNjtjYXNlIDM5OnJldHVybiA0NDtjYXNlIDQwOnJldHVybiA0NTtjYXNlIDQxOnJldHVybiA0NjtjYXNlIDQyOnJldHVybiA0NztjYXNlIDQzOnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE5O2Nhc2UgNTE6YnJlYWs7Y2FzZSA1MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIwO2Nhc2UgNTM6YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI4O2Nhc2UgNTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUyO2Nhc2UgNTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUzO2Nhc2UgNTc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDU5OmJyZWFrO2Nhc2UgNjA6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA2MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMztjYXNlIDYzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksSHQueXl0ZXh0PUh0Lnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDMwO2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxIdC55eXRleHQ9SHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwzMDtjYXNlIDY1OnJldHVybiA2O2Nhc2UgNjY6cmV0dXJuIDY7Y2FzZSA2NzpyZXR1cm4gMTU7Y2FzZSA2ODpyZXR1cm4gNTA7Y2FzZSA2OTpyZXR1cm4gMjM7Y2FzZSA3MDpyZXR1cm4gSHQueXl0ZXh0PUh0Lnl5dGV4dC50cmltKCksMTM7Y2FzZSA3MTpyZXR1cm4gMTQ7Y2FzZSA3MjpyZXR1cm4gMjc7Y2FzZSA3MzpyZXR1cm4gNTE7Y2FzZSA3NDpyZXR1cm4gNTtjYXNlIDc1OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/Ojo6OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDIyLDI2LDMyLDM5LDQwLDQxLDQyLDUxLDUyLDUzLDU0LDY4LDY5LDcwLDcxLDcyXSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls2MV0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNTgsNTksNjBdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNjMsNjRdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzYyXSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls1NSw1Niw1N10saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjddLGluY2x1c2l2ZTohMX0sQ0xBU1NERUZJRDp7cnVsZXM6WzI1XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzIwLDIxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE4XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzE2XSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTMsMTQsMzAsMzFdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOls0NV0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOls0Niw0N10saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbOSwxMCwzMywzNCwzNSwzNiwzNywzOCw0Myw0NCw0OCw0OSw1MF0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDExLDEyLDE1LDE3LDE5LDIyLDI2LDI5LDMyLDUwLDU0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDczLDc0LDc1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEN0fSgpO090LmxleGVyPU50O2Z1bmN0aW9uIHF0KCl7dGhpcy55eT17fX1yZXR1cm4gcXQucHJvdG90eXBlPU90LE90LlBhcnNlcj1xdCxuZXcgcXR9KCk7a2d0LnBhcnNlcj1rZ3Q7Y29uc3QgJFJ0PWtndCxGR2U9IkxSIixCR2U9IlRCIixQSz0ic3RhdGUiLEVndD0icmVsYXRpb24iLFJHZT0iY2xhc3NEZWYiLGpHZT0iYXBwbHlDbGFzcyIsUlA9ImRlZmF1bHQiLHpSdD0iZGl2aWRlciIsVGd0PSJbKl0iLHFSdD0ic3RhcnQiLEhSdD1UZ3QsR1J0PSJlbmQiLFZSdD0iY29sb3IiLFVSdD0iZmlsbCIsJEdlPSJiZ0ZpbGwiLHpHZT0iLCI7ZnVuY3Rpb24gV1J0KCl7cmV0dXJue319bGV0IEtSdD1GR2UsRks9W10salA9V1J0KCk7Y29uc3QgWVJ0PSgpPT4oe3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fSk7bGV0IEJLPXtyb290OllSdCgpfSxrMD1CSy5yb290LCRQPTAsWFJ0PTA7Y29uc3QgcUdlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sSEdlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxSSz1pPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkpKSxHR2U9aT0+e1V0LmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLGkpLEZLPWl9LFZHZT0oKT0+Rkssaks9KGksYSxmKT0+e2lmKGEuc3RtdD09PUVndClqSyhpLGEuc3RhdGUxLCEwKSxqSyhpLGEuc3RhdGUyLCExKTtlbHNlIGlmKGEuc3RtdD09PVBLJiYoYS5pZD09PSJbKl0iPyhhLmlkPWY/aS5pZCsiX3N0YXJ0IjppLmlkKyJfZW5kIixhLnN0YXJ0PWYpOmEuaWQ9YS5pZC50cmltKCkpLGEuZG9jKXtjb25zdCBwPVtdO2xldCB2PVtdLG07Zm9yKG09MDttPGEuZG9jLmxlbmd0aDttKyspaWYoYS5kb2NbbV0udHlwZT09PXpSdCl7Y29uc3QgYj1SSyhhLmRvY1ttXSk7Yi5kb2M9UksodikscC5wdXNoKGIpLHY9W119ZWxzZSB2LnB1c2goYS5kb2NbbV0pO2lmKHAubGVuZ3RoPjAmJnYubGVuZ3RoPjApe2NvbnN0IGI9e3N0bXQ6UEssaWQ6SER0KCksdHlwZToiZGl2aWRlciIsZG9jOlJLKHYpfTtwLnB1c2goUksoYikpLGEuZG9jPXB9YS5kb2MuZm9yRWFjaChiPT5qSyhhLGIsITApKX19LFVHZT0oKT0+KGpLKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOkZLfSwhMCkse2lkOiJyb290Iixkb2M6Rkt9KSxXR2U9aT0+e2xldCBhO2kuZG9jP2E9aS5kb2M6YT1pLFV0LmluZm8oYSksUVJ0KCEwKSxVdC5pbmZvKCJFeHRyYWN0IixhKSxhLmZvckVhY2goZj0+e3N3aXRjaChmLnN0bXQpe2Nhc2UgUEs6X1QoZi5pZC50cmltKCksZi50eXBlLGYuZG9jLGYuZGVzY3JpcHRpb24sZi5ub3RlLGYuY2xhc3NlcyxmLnN0eWxlcyxmLnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgRWd0OlpSdChmLnN0YXRlMSxmLnN0YXRlMixmLmRlc2NyaXB0aW9uKTticmVhaztjYXNlIFJHZTpKUnQoZi5pZC50cmltKCksZi5jbGFzc2VzKTticmVhaztjYXNlIGpHZTpBZ3QoZi5pZC50cmltKCksZi5zdHlsZUNsYXNzKTticmVha319KX0sX1Q9ZnVuY3Rpb24oaSxhPVJQLGY9bnVsbCxwPW51bGwsdj1udWxsLG09bnVsbCxiPW51bGwsRT1udWxsKXtjb25zdCBfPWk9PW51bGw/dm9pZCAwOmkudHJpbSgpO2swLnN0YXRlc1tfXT09PXZvaWQgMD8oVXQuaW5mbygiQWRkaW5nIHN0YXRlICIsXyxwKSxrMC5zdGF0ZXNbX109e2lkOl8sZGVzY3JpcHRpb25zOltdLHR5cGU6YSxkb2M6Zixub3RlOnYsY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pOihrMC5zdGF0ZXNbX10uZG9jfHwoazAuc3RhdGVzW19dLmRvYz1mKSxrMC5zdGF0ZXNbX10udHlwZXx8KGswLnN0YXRlc1tfXS50eXBlPWEpKSxwJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBkZXNjcmlwdGlvbiIsXyxwKSx0eXBlb2YgcD09InN0cmluZyImJlNndChfLHAudHJpbSgpKSx0eXBlb2YgcD09Im9iamVjdCImJnAuZm9yRWFjaChMPT5TZ3QoXyxMLnRyaW0oKSkpKSx2JiYoazAuc3RhdGVzW19dLm5vdGU9dixrMC5zdGF0ZXNbX10ubm90ZS50ZXh0PVlyLnNhbml0aXplVGV4dChrMC5zdGF0ZXNbX10ubm90ZS50ZXh0LExlKCkpKSxtJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBjbGFzc2VzIixfLG0pLCh0eXBlb2YgbT09InN0cmluZyI/W21dOm0pLmZvckVhY2goTj0+QWd0KF8sTi50cmltKCkpKSksYiYmKFV0LmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixfLGIpLCh0eXBlb2YgYj09InN0cmluZyI/W2JdOmIpLmZvckVhY2goTj0+clZlKF8sTi50cmltKCkpKSksRSYmKFV0LmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixfLGIpLCh0eXBlb2YgRT09InN0cmluZyI/W0VdOkUpLmZvckVhY2goTj0+aVZlKF8sTi50cmltKCkpKSl9LFFSdD1mdW5jdGlvbihpKXtCSz17cm9vdDpZUnQoKX0sazA9Qksucm9vdCwkUD0wLGpQPVdSdCgpLGl8fGFwKCl9LHpQPWZ1bmN0aW9uKGkpe3JldHVybiBrMC5zdGF0ZXNbaV19LEtHZT1mdW5jdGlvbigpe3JldHVybiBrMC5zdGF0ZXN9LFlHZT1mdW5jdGlvbigpe1V0LmluZm8oIkRvY3VtZW50cyA9ICIsQkspfSxYR2U9ZnVuY3Rpb24oKXtyZXR1cm4gazAucmVsYXRpb25zfTtmdW5jdGlvbiBDZ3QoaT0iIil7bGV0IGE9aTtyZXR1cm4gaT09PVRndCYmKCRQKyssYT1gJHtxUnR9JHskUH1gKSxhfWZ1bmN0aW9uIF9ndChpPSIiLGE9UlApe3JldHVybiBpPT09VGd0P3FSdDphfWZ1bmN0aW9uIFFHZShpPSIiKXtsZXQgYT1pO3JldHVybiBpPT09SFJ0JiYoJFArKyxhPWAke0dSdH0keyRQfWApLGF9ZnVuY3Rpb24gWkdlKGk9IiIsYT1SUCl7cmV0dXJuIGk9PT1IUnQ/R1J0OmF9ZnVuY3Rpb24gSkdlKGksYSxmKXtsZXQgcD1DZ3QoaS5pZC50cmltKCkpLHY9X2d0KGkuaWQudHJpbSgpLGkudHlwZSksbT1DZ3QoYS5pZC50cmltKCkpLGI9X2d0KGEuaWQudHJpbSgpLGEudHlwZSk7X1QocCx2LGkuZG9jLGkuZGVzY3JpcHRpb24saS5ub3RlLGkuY2xhc3NlcyxpLnN0eWxlcyxpLnRleHRTdHlsZXMpLF9UKG0sYixhLmRvYyxhLmRlc2NyaXB0aW9uLGEubm90ZSxhLmNsYXNzZXMsYS5zdHlsZXMsYS50ZXh0U3R5bGVzKSxrMC5yZWxhdGlvbnMucHVzaCh7aWQxOnAsaWQyOm0scmVsYXRpb25UaXRsZTpZci5zYW5pdGl6ZVRleHQoZixMZSgpKX0pfWNvbnN0IFpSdD1mdW5jdGlvbihpLGEsZil7aWYodHlwZW9mIGk9PSJvYmplY3QiKUpHZShpLGEsZik7ZWxzZXtjb25zdCBwPUNndChpLnRyaW0oKSksdj1fZ3QoaSksbT1RR2UoYS50cmltKCkpLGI9WkdlKGEpO19UKHAsdiksX1QobSxiKSxrMC5yZWxhdGlvbnMucHVzaCh7aWQxOnAsaWQyOm0sdGl0bGU6WXIuc2FuaXRpemVUZXh0KGYsTGUoKSl9KX19LFNndD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9azAuc3RhdGVzW2ldLHA9YS5zdGFydHNXaXRoKCI6Iik/YS5yZXBsYWNlKCI6IiwiIikudHJpbSgpOmE7Zi5kZXNjcmlwdGlvbnMucHVzaChZci5zYW5pdGl6ZVRleHQocCxMZSgpKSl9LHRWZT1mdW5jdGlvbihpKXtyZXR1cm4gaS5zdWJzdHJpbmcoMCwxKT09PSI6Ij9pLnN1YnN0cigyKS50cmltKCk6aS50cmltKCl9LGVWZT0oKT0+KFhSdCsrLCJkaXZpZGVyLWlkLSIrWFJ0KSxKUnQ9ZnVuY3Rpb24oaSxhPSIiKXtqUFtpXT09PXZvaWQgMCYmKGpQW2ldPXtpZDppLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7Y29uc3QgZj1qUFtpXTthIT1udWxsJiZhLnNwbGl0KHpHZSkuZm9yRWFjaChwPT57Y29uc3Qgdj1wLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYocC5tYXRjaChWUnQpKXtjb25zdCBiPXYucmVwbGFjZShVUnQsJEdlKS5yZXBsYWNlKFZSdCxVUnQpO2YudGV4dFN0eWxlcy5wdXNoKGIpfWYuc3R5bGVzLnB1c2godil9KX0sblZlPWZ1bmN0aW9uKCl7cmV0dXJuIGpQfSxBZ3Q9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD16UChmKTtpZihwPT09dm9pZCAwKXtjb25zdCB2PWYudHJpbSgpO19UKHYpLHA9elAodil9cC5jbGFzc2VzLnB1c2goYSl9KX0sclZlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj16UChpKTtmIT09dm9pZCAwJiZmLnRleHRTdHlsZXMucHVzaChhKX0saVZlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj16UChpKTtmIT09dm9pZCAwJiZmLnRleHRTdHlsZXMucHVzaChhKX0sTzU9e2dldENvbmZpZzooKT0+TGUoKS5zdGF0ZSxhZGRTdGF0ZTpfVCxjbGVhcjpRUnQsZ2V0U3RhdGU6elAsZ2V0U3RhdGVzOktHZSxnZXRSZWxhdGlvbnM6WEdlLGdldENsYXNzZXM6blZlLGdldERpcmVjdGlvbjooKT0+S1J0LGFkZFJlbGF0aW9uOlpSdCxnZXREaXZpZGVySWQ6ZVZlLHNldERpcmVjdGlvbjppPT57S1J0PWl9LGNsZWFudXBMYWJlbDp0VmUsbGluZVR5cGU6cUdlLHJlbGF0aW9uVHlwZTpIR2UsbG9nRG9jdW1lbnRzOllHZSxnZXRSb290RG9jOlZHZSxzZXRSb290RG9jOkdHZSxnZXRSb290RG9jVjI6VUdlLGV4dHJhY3Q6V0dlLHRyaW1Db2xvbjppPT5pJiZpWzBdPT09IjoiP2kuc3Vic3RyKDEpLnRyaW0oKTppLnRyaW0oKSxnZXRBY2NUaXRsZTpvcCxzZXRBY2NUaXRsZTpjZyxnZXRBY2NEZXNjcmlwdGlvbjp1cCxzZXRBY2NEZXNjcmlwdGlvbjpjcCxhZGRTdHlsZUNsYXNzOkpSdCxzZXRDc3NDbGFzczpBZ3QsYWRkRGVzY3JpcHRpb246U2d0LHNldERpYWdyYW1UaXRsZTpaMixnZXREaWFncmFtVGl0bGU6RGJ9LHRqdD1pPT5gCmRlZnMgI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICAgIGZpbGw6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICB9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKCn0KZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKZy5zdGF0ZUdyb3VwIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKfQoKZy5zdGF0ZUdyb3VwIGxpbmUgewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgoudHJhbnNpdGlvbiB7CiAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHsKICBmaWxsOiAke2kuYmFja2dyb3VuZH07CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQgewogIGZpbGw6ICNlMGUwZTA7CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZS1ub3RlIHsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwoKICB0ZXh0IHsKICAgIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICB9Cn0KCi5zdGF0ZUxhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLmxhYmVsQmFja2dyb3VuZENvbG9yfTsKICBvcGFjaXR5OiAwLjU7Cn0KLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLnRyYW5zaXRpb25MYWJlbENvbG9yfHxpLnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoubGFiZWwgZGl2IC5lZGdlTGFiZWwgewogIGNvbG9yOiAke2kudHJhbnNpdGlvbkxhYmVsQ29sb3J8fGkudGVydGlhcnlUZXh0Q29sb3J9Owp9Cgouc3RhdGVMYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7CiAgZmlsbDogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIC5mb3JrLWpvaW4gewogIGZpbGw6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHsKICBmaWxsOiAke2kuaW5uZXJFbmRCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Ci5lbmQtc3RhdGUtaW5uZXIgewogIGZpbGw6ICR7aS5jb21wb3NpdGVCYWNrZ3JvdW5kfHxpLmJhY2tncm91bmR9OwogIC8vIHN0cm9rZTogJHtpLmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KCi5ub2RlIHJlY3QgewogIGZpbGw6ICR7aS5zdGF0ZUJrZ3x8aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoubm9kZSBwb2x5Z29uIHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CiNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHsKICBmaWxsOiAke2kuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIC5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICBmaWxsOiAke2kuY29tcG9zaXRlQmFja2dyb3VuZHx8aS5iYWNrZ3JvdW5kfTsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7CiAgZmlsbDogJHtpLmFsdEJhY2tncm91bmQ/aS5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIHJ4OjA7CiAgcnk6MDsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmRpdmlkZXIgewogIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwOwogIGZpbGw6ICR7aS5hbHRCYWNrZ3JvdW5kP2kuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgoubm90ZS1lZGdlIHsKICBzdHJva2UtZGFzaGFycmF5OiA1Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHRleHQgewogIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kubm90ZVRleHRDb2xvcn07Cn0KLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHsKICBjb2xvcjogcmVkOyAvLyAke2kubm90ZVRleHRDb2xvcn07Cn0KCiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHsKICBmaWxsOiAke2kubGluZUNvbG9yfTsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnN0YXRlZGlhZ3JhbVRpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYCxMZ3Q9e30sc1ZlPShpLGEpPT57TGd0W2ldPWF9LGFWZT1pPT5MZ3RbaV0sZWp0PSgpPT5PYmplY3Qua2V5cyhMZ3QpLG9WZT17Z2V0OmFWZSxzZXQ6c1ZlLGtleXM6ZWp0LHNpemU6KCk9PmVqdCgpLmxlbmd0aH0sY1ZlPWk9PmkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIsTGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLExlKCkuc3RhdGUucGFkZGluZytMZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIsTGUoKS5zdGF0ZS5wYWRkaW5nK0xlKCkuc3RhdGUuc2l6ZVVuaXQpLHVWZT1pPT5pLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLExlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLExlKCkuc3RhdGUudGV4dEhlaWdodCoyKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLGxWZT0oaSxhKT0+e2NvbnN0IGY9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLExlKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGEuaWQpLHA9Zi5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLExlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIscC53aWR0aCsyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixwLmhlaWdodCsyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLExlKCkuc3RhdGUucmFkaXVzKSxmfSxoVmU9KGksYSk9Pntjb25zdCBmPWZ1bmN0aW9uKGosUix6KXtjb25zdCBLPWouYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqTGUoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KFIpO3p8fEsuYXR0cigiZHkiLExlKCkuc3RhdGUudGV4dEhlaWdodCl9LHY9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsTGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoYS5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCksbT12LmhlaWdodCxiPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixtK0xlKCkuc3RhdGUucGFkZGluZyouNCtMZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4rTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIik7bGV0IEU9ITAsXz0hMDthLmRlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGope0V8fChmKGIsaixfKSxfPSExKSxFPSExfSk7Y29uc3QgTD1pLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixMZSgpLnN0YXRlLnBhZGRpbmcrbStMZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLExlKCkuc3RhdGUucGFkZGluZyttK0xlKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxOPWIubm9kZSgpLmdldEJCb3goKSxCPU1hdGgubWF4KE4ud2lkdGgsdi53aWR0aCk7cmV0dXJuIEwuYXR0cigieDIiLEIrMypMZSgpLnN0YXRlLnBhZGRpbmcpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixCKzIqTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLE4uaGVpZ2h0K20rMipMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixMZSgpLnN0YXRlLnJhZGl1cyksaX0sZlZlPShpLGEsZik9Pntjb25zdCBwPUxlKCkuc3RhdGUucGFkZGluZyx2PTIqTGUoKS5zdGF0ZS5wYWRkaW5nLG09aS5ub2RlKCkuZ2V0QkJveCgpLGI9bS53aWR0aCxFPW0ueCxfPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsTGUoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLExlKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGEuaWQpLE49Xy5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK3Y7bGV0IEI9TWF0aC5tYXgoTixiKTtCPT09YiYmKEI9Qit2KTtsZXQgajtjb25zdCBSPWkubm9kZSgpLmdldEJCb3goKTthLmRvYyxqPUUtcCxOPmImJihqPShiLUIpLzIrcCksTWF0aC5hYnMoRS1SLngpPHAmJk4+YiYmKGo9RS0oTi1iKS8yKTtjb25zdCB6PTEtTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGopLmF0dHIoInkiLHopLmF0dHIoImNsYXNzIixmPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixCKS5hdHRyKCJoZWlnaHQiLFIuaGVpZ2h0K0xlKCkuc3RhdGUudGV4dEhlaWdodCtMZSgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksXy5hdHRyKCJ4IixqK3ApLE48PWImJl8uYXR0cigieCIsRSsoQi12KS8yLU4vMitwKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGopLmF0dHIoInkiLExlKCkuc3RhdGUudGl0bGVTaGlmdC1MZSgpLnN0YXRlLnRleHRIZWlnaHQtTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsQikuYXR0cigiaGVpZ2h0IixMZSgpLnN0YXRlLnRleHRIZWlnaHQqMykuYXR0cigicngiLExlKCkuc3RhdGUucmFkaXVzKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGopLmF0dHIoInkiLExlKCkuc3RhdGUudGl0bGVTaGlmdC1MZSgpLnN0YXRlLnRleHRIZWlnaHQtTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsQikuYXR0cigiaGVpZ2h0IixSLmhlaWdodCszKzIqTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsTGUoKS5zdGF0ZS5yYWRpdXMpLGl9LGRWZT1pPT4oaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsTGUoKS5zdGF0ZS5zaXplVW5pdCtMZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsTGUoKS5zdGF0ZS5wYWRkaW5nK0xlKCkuc3RhdGUuc2l6ZVVuaXQrTGUoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLExlKCkuc3RhdGUucGFkZGluZytMZSgpLnN0YXRlLnNpemVVbml0K0xlKCkuc3RhdGUubWluaVBhZGRpbmcpLGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLExlKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixMZSgpLnN0YXRlLnBhZGRpbmcrTGUoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsTGUoKS5zdGF0ZS5wYWRkaW5nK0xlKCkuc3RhdGUuc2l6ZVVuaXQrMikpLGdWZT0oaSxhKT0+e2xldCBmPUxlKCkuc3RhdGUuZm9ya1dpZHRoLHA9TGUoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGEucGFyZW50SWQpe2xldCB2PWY7Zj1wLHA9dn1yZXR1cm4gaS5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIscCkuYXR0cigieCIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixMZSgpLnN0YXRlLnBhZGRpbmcpfSxwVmU9KGksYSxmLHApPT57bGV0IHY9MDtjb25zdCBtPXAuYXBwZW5kKCJ0ZXh0Iik7bS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLG0uYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO2xldCBiPWkucmVwbGFjZSgvXHJcbi9nLCI8YnIvPiIpO2I9Yi5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpO2NvbnN0IEU9Yi5zcGxpdChZci5saW5lQnJlYWtSZWdleCk7bGV0IF89MS4yNSpMZSgpLnN0YXRlLm5vdGVNYXJnaW47Zm9yKGNvbnN0IEwgb2YgRSl7Y29uc3QgTj1MLnRyaW0oKTtpZihOLmxlbmd0aD4wKXtjb25zdCBCPW0uYXBwZW5kKCJ0c3BhbiIpO2lmKEIudGV4dChOKSxfPT09MCl7Y29uc3Qgaj1CLm5vZGUoKS5nZXRCQm94KCk7Xys9ai5oZWlnaHR9dis9XyxCLmF0dHIoIngiLGErTGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxCLmF0dHIoInkiLGYrdisxLjI1KkxlKCkuc3RhdGUubm90ZU1hcmdpbil9fXJldHVybnt0ZXh0V2lkdGg6bS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6dn19LGJWZT0oaSxhKT0+e2EuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7Y29uc3QgZj1hLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLExlKCkuc3RhdGUucGFkZGluZykscD1hLmFwcGVuZCgiZyIpLHt0ZXh0V2lkdGg6dix0ZXh0SGVpZ2h0Om19PXBWZShpLDAsMCxwKTtyZXR1cm4gZi5hdHRyKCJoZWlnaHQiLG0rMipMZSgpLnN0YXRlLm5vdGVNYXJnaW4pLGYuYXR0cigid2lkdGgiLHYrTGUoKS5zdGF0ZS5ub3RlTWFyZ2luKjIpLGZ9LG5qdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS5pZCxwPXtpZDpmLGxhYmVsOmEuaWQsd2lkdGg6MCxoZWlnaHQ6MH0sdj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIixmKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTthLnR5cGU9PT0ic3RhcnQiJiZjVmUodiksYS50eXBlPT09ImVuZCImJmRWZSh2KSwoYS50eXBlPT09ImZvcmsifHxhLnR5cGU9PT0iam9pbiIpJiZnVmUodixhKSxhLnR5cGU9PT0ibm90ZSImJmJWZShhLm5vdGUudGV4dCx2KSxhLnR5cGU9PT0iZGl2aWRlciImJnVWZSh2KSxhLnR5cGU9PT0iZGVmYXVsdCImJmEuZGVzY3JpcHRpb25zLmxlbmd0aD09PTAmJmxWZSh2LGEpLGEudHlwZT09PSJkZWZhdWx0IiYmYS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJmhWZSh2LGEpO2NvbnN0IG09di5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBwLndpZHRoPW0ud2lkdGgrMipMZSgpLnN0YXRlLnBhZGRpbmcscC5oZWlnaHQ9bS5oZWlnaHQrMipMZSgpLnN0YXRlLnBhZGRpbmcsb1ZlLnNldChmLHApLHB9O2xldCByanQ9MDtjb25zdCB2VmU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9ZnVuY3Rpb24oXyl7c3dpdGNoKF8pe2Nhc2UgTzUucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBPNS5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgTzUucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBPNS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTthLnBvaW50cz1hLnBvaW50cy5maWx0ZXIoXz0+IU51bWJlci5pc05hTihfLnkpKTtjb25zdCB2PWEucG9pbnRzLG09WjcoKS54KGZ1bmN0aW9uKF8pe3JldHVybiBfLnh9KS55KGZ1bmN0aW9uKF8pe3JldHVybiBfLnl9KS5jdXJ2ZShGTiksYj1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLG0odikpLmF0dHIoImlkIiwiZWRnZSIrcmp0KS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKTtsZXQgRT0iIjtpZihMZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihFPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLEU9RS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxFPUUucmVwbGFjZSgvXCkvZywiXFwpIikpLGIuYXR0cigibWFya2VyLWVuZCIsInVybCgiK0UrIiMiK3AoTzUucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksZi50aXRsZSE9PXZvaWQgMCl7Y29uc3QgXz1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhdGVMYWJlbCIpLHt4OkwseTpOfT0kYS5jYWxjTGFiZWxQb3NpdGlvbihhLnBvaW50cyksQj1Zci5nZXRSb3dzKGYudGl0bGUpO2xldCBqPTA7Y29uc3QgUj1bXTtsZXQgej0wLEs9MDtmb3IobGV0IHV0PTA7dXQ8PUIubGVuZ3RoO3V0Kyspe2NvbnN0IGJ0PV8uYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KEJbdXRdKS5hdHRyKCJ4IixMKS5hdHRyKCJ5IixOK2opLG10PWJ0Lm5vZGUoKS5nZXRCQm94KCk7ej1NYXRoLm1heCh6LG10LndpZHRoKSxLPU1hdGgubWluKEssbXQueCksVXQuaW5mbyhtdC54LEwsTitqKSxqPT09MCYmKGo9YnQubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsVXQuaW5mbygiVGl0bGUgaGVpZ2h0IixqLE4pKSxSLnB1c2goYnQpfWxldCBpdD1qKkIubGVuZ3RoO2lmKEIubGVuZ3RoPjEpe2NvbnN0IHV0PShCLmxlbmd0aC0xKSpqKi41O1IuZm9yRWFjaCgoYnQsbXQpPT5idC5hdHRyKCJ5IixOK210KmotdXQpKSxpdD1qKkIubGVuZ3RofWNvbnN0IHN0PV8ubm9kZSgpLmdldEJCb3goKTtfLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsTC16LzItTGUoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLE4taXQvMi1MZSgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIix6K0xlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixpdCtMZSgpLnN0YXRlLnBhZGRpbmcpLFV0LmluZm8oc3QpfXJqdCsrfTtsZXQgUmI7Y29uc3QgTWd0PXt9LHdWZT1mdW5jdGlvbigpe30sbVZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0seVZlPWZ1bmN0aW9uKGksYSxmLHApe1JiPUxlKCkuc3RhdGU7Y29uc3Qgdj1MZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IG07dj09PSJzYW5kYm94IiYmKG09eXIoIiNpIithKSk7Y29uc3QgYj15cih2PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEU9dj09PSJzYW5kYm94Ij9tLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1V0LmRlYnVnKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK2kpO2NvbnN0IF89Yi5zZWxlY3QoYFtpZD0nJHthfSddYCk7bVZlKF8pO2NvbnN0IEw9cC5kYi5nZXRSb290RG9jKCk7aWp0KEwsXyx2b2lkIDAsITEsYixFLHApO2NvbnN0IE49UmIucGFkZGluZyxCPV8ubm9kZSgpLmdldEJCb3goKSxqPUIud2lkdGgrTioyLFI9Qi5oZWlnaHQrTioyLHo9aioxLjc1O29nKF8sUix6LFJiLnVzZU1heFdpZHRoKSxfLmF0dHIoInZpZXdCb3giLGAke0IueC1SYi5wYWRkaW5nfSAgJHtCLnktUmIucGFkZGluZ30gYCtqKyIgIitSKX0seFZlPWk9Pmk/aS5sZW5ndGgqUmIuZm9udFNpemVGYWN0b3I6MSxpanQ9KGksYSxmLHAsdixtLGIpPT57Y29uc3QgRT1uZXcgYTEoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KTtsZXQgXyxMPSEwO2ZvcihfPTA7XzxpLmxlbmd0aDtfKyspaWYoaVtfXS5zdG10PT09InJlbGF0aW9uIil7TD0hMTticmVha31mP0Uuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpMPzE6UmIuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOkw/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpFLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOkw/MTpSYi5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6TD8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksRS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxiLmRiLmV4dHJhY3QoaSk7Y29uc3QgTj1iLmRiLmdldFN0YXRlcygpLEI9Yi5kYi5nZXRSZWxhdGlvbnMoKSxqPU9iamVjdC5rZXlzKE4pO2Zvcihjb25zdCBzdCBvZiBqKXtjb25zdCB1dD1OW3N0XTtmJiYodXQucGFyZW50SWQ9Zik7bGV0IGJ0O2lmKHV0LmRvYyl7bGV0IG10PWEuYXBwZW5kKCJnIikuYXR0cigiaWQiLHV0LmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtidD1panQodXQuZG9jLG10LHV0LmlkLCFwLHYsbSxiKTt7bXQ9ZlZlKG10LHV0LHApO2xldCB5dD1tdC5ub2RlKCkuZ2V0QkJveCgpO2J0LndpZHRoPXl0LndpZHRoLGJ0LmhlaWdodD15dC5oZWlnaHQrUmIucGFkZGluZy8yLE1ndFt1dC5pZF09e3k6UmIuY29tcG9zaXRUaXRsZVNpemV9fX1lbHNlIGJ0PW5qdChhLHV0KTtpZih1dC5ub3RlKXtjb25zdCBtdD17ZGVzY3JpcHRpb25zOltdLGlkOnV0LmlkKyItbm90ZSIsbm90ZTp1dC5ub3RlLHR5cGU6Im5vdGUifSx5dD1uanQoYSxtdCk7dXQubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIj8oRS5zZXROb2RlKGJ0LmlkKyItbm90ZSIseXQpLEUuc2V0Tm9kZShidC5pZCxidCkpOihFLnNldE5vZGUoYnQuaWQsYnQpLEUuc2V0Tm9kZShidC5pZCsiLW5vdGUiLHl0KSksRS5zZXRQYXJlbnQoYnQuaWQsYnQuaWQrIi1ncm91cCIpLEUuc2V0UGFyZW50KGJ0LmlkKyItbm90ZSIsYnQuaWQrIi1ncm91cCIpfWVsc2UgRS5zZXROb2RlKGJ0LmlkLGJ0KX1VdC5kZWJ1ZygiQ291bnQ9IixFLm5vZGVDb3VudCgpLEUpO2xldCBSPTA7Qi5mb3JFYWNoKGZ1bmN0aW9uKHN0KXtSKyssVXQuZGVidWcoIlNldHRpbmcgZWRnZSIsc3QpLEUuc2V0RWRnZShzdC5pZDEsc3QuaWQyLHtyZWxhdGlvbjpzdCx3aWR0aDp4VmUoc3QudGl0bGUpLGhlaWdodDpSYi5sYWJlbEhlaWdodCpZci5nZXRSb3dzKHN0LnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK1IpfSksZUwoRSksVXQuZGVidWcoIkdyYXBoIGFmdGVyIGxheW91dCIsRS5ub2RlcygpKTtjb25zdCB6PWEubm9kZSgpO0Uubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHN0KXtzdCE9PXZvaWQgMCYmRS5ub2RlKHN0KSE9PXZvaWQgMD8oVXQud2FybigiTm9kZSAiK3N0KyI6ICIrSlNPTi5zdHJpbmdpZnkoRS5ub2RlKHN0KSkpLHYuc2VsZWN0KCIjIit6LmlkKyIgIyIrc3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFLm5vZGUoc3QpLngtRS5ub2RlKHN0KS53aWR0aC8yKSsiLCIrKEUubm9kZShzdCkueSsoTWd0W3N0XT9NZ3Rbc3RdLnk6MCktRS5ub2RlKHN0KS5oZWlnaHQvMikrIiApIiksdi5zZWxlY3QoIiMiK3ouaWQrIiAjIitzdCkuYXR0cigiZGF0YS14LXNoaWZ0IixFLm5vZGUoc3QpLngtRS5ub2RlKHN0KS53aWR0aC8yKSxtLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK3ouaWQrIiAjIitzdCsiIC5kaXZpZGVyIikuZm9yRWFjaChidD0+e2NvbnN0IG10PWJ0LnBhcmVudEVsZW1lbnQ7bGV0IHl0PTAsZHQ9MDttdCYmKG10LnBhcmVudEVsZW1lbnQmJih5dD1tdC5wYXJlbnRFbGVtZW50LmdldEJCb3goKS53aWR0aCksZHQ9cGFyc2VJbnQobXQuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKGR0KSYmKGR0PTApKSxidC5zZXRBdHRyaWJ1dGUoIngxIiwwLWR0KzgpLGJ0LnNldEF0dHJpYnV0ZSgieDIiLHl0LWR0LTgpfSkpOlV0LmRlYnVnKCJObyBOb2RlICIrc3QrIjogIitKU09OLnN0cmluZ2lmeShFLm5vZGUoc3QpKSl9KTtsZXQgSz16LmdldEJCb3goKTtFLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihzdCl7c3QhPT12b2lkIDAmJkUuZWRnZShzdCkhPT12b2lkIDAmJihVdC5kZWJ1ZygiRWRnZSAiK3N0LnYrIiAtPiAiK3N0LncrIjogIitKU09OLnN0cmluZ2lmeShFLmVkZ2Uoc3QpKSksdlZlKGEsRS5lZGdlKHN0KSxFLmVkZ2Uoc3QpLnJlbGF0aW9uKSl9KSxLPXouZ2V0QkJveCgpO2NvbnN0IGl0PXtpZDpmfHwicm9vdCIsbGFiZWw6Znx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBpdC53aWR0aD1LLndpZHRoKzIqUmIucGFkZGluZyxpdC5oZWlnaHQ9Sy5oZWlnaHQrMipSYi5wYWRkaW5nLFV0LmRlYnVnKCJEb2MgcmVuZGVyZWQiLGl0LEUpLGl0fSxrVmU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokUnQsZGI6TzUscmVuZGVyZXI6e3NldENvbmY6d1ZlLGRyYXc6eVZlfSxzdHlsZXM6dGp0LGluaXQ6aT0+e2kuc3RhdGV8fChpLnN0YXRlPXt9KSxpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLE81LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSwkSz0icmVjdCIsSWd0PSJyZWN0V2l0aFRpdGxlIixFVmU9InN0YXJ0IixUVmU9ImVuZCIsQ1ZlPSJkaXZpZGVyIixfVmU9InJvdW5kZWRXaXRoVGl0bGUiLFNWZT0ibm90ZSIsQVZlPSJub3RlR3JvdXAiLGRMPSJzdGF0ZWRpYWdyYW0iLExWZT1gJHtkTH0tc3RhdGVgLHNqdD0idHJhbnNpdGlvbiIsTVZlPSJub3RlIixJVmU9YCR7c2p0fSBub3RlLWVkZ2VgLERWZT1gJHtkTH0tJHtNVmV9YCxPVmU9YCR7ZEx9LWNsdXN0ZXJgLE5WZT1gJHtkTH0tY2x1c3Rlci1hbHRgLGFqdD0icGFyZW50IixvanQ9Im5vdGUiLFBWZT0ic3RhdGUiLERndD0iLS0tLSIsRlZlPWAke0RndH0ke29qdH1gLGNqdD1gJHtEZ3R9JHthanR9YCx1anQ9ImZpbGw6bm9uZSIsbGp0PSJmaWxsOiAjMzMzIixoanQ9ImMiLGZqdD0idGV4dCIsZGp0PSJub3JtYWwiO2xldCB6Sz17fSxnaz0wO2NvbnN0IEJWZT1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCBmIG9mIGEpaVtmXX0sUlZlPWZ1bmN0aW9uKGksYSl7cmV0dXJuIGEuZGIuZXh0cmFjdChhLmRiLmdldFJvb3REb2NWMigpKSxhLmRiLmdldENsYXNzZXMoKX07ZnVuY3Rpb24galZlKGkpe3JldHVybiBpPT1udWxsPyIiOmkuY2xhc3Nlcz9pLmNsYXNzZXMuam9pbigiICIpOiIifWZ1bmN0aW9uIE9ndChpPSIiLGE9MCxmPSIiLHA9RGd0KXtjb25zdCB2PWYhPT1udWxsJiZmLmxlbmd0aD4wP2Ake3B9JHtmfWA6IiI7cmV0dXJuYCR7UFZlfS0ke2l9JHt2fS0ke2F9YH1jb25zdCBxUD0oaSxhLGYscCx2LG0pPT57Y29uc3QgYj1mLmlkLEU9alZlKHBbYl0pO2lmKGIhPT0icm9vdCIpe2xldCBfPSRLO2Yuc3RhcnQ9PT0hMCYmKF89RVZlKSxmLnN0YXJ0PT09ITEmJihfPVRWZSksZi50eXBlIT09UlAmJihfPWYudHlwZSksektbYl18fCh6S1tiXT17aWQ6YixzaGFwZTpfLGRlc2NyaXB0aW9uOllyLnNhbml0aXplVGV4dChiLExlKCkpLGNsYXNzZXM6YCR7RX0gJHtMVmV9YH0pO2NvbnN0IEw9ektbYl07Zi5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkoTC5kZXNjcmlwdGlvbik/KEwuc2hhcGU9SWd0LEwuZGVzY3JpcHRpb24ucHVzaChmLmRlc2NyaXB0aW9uKSk6TC5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oTC5zaGFwZT1JZ3QsTC5kZXNjcmlwdGlvbj09PWI/TC5kZXNjcmlwdGlvbj1bZi5kZXNjcmlwdGlvbl06TC5kZXNjcmlwdGlvbj1bTC5kZXNjcmlwdGlvbixmLmRlc2NyaXB0aW9uXSk6KEwuc2hhcGU9JEssTC5kZXNjcmlwdGlvbj1mLmRlc2NyaXB0aW9uKSxMLmRlc2NyaXB0aW9uPVlyLnNhbml0aXplVGV4dE9yQXJyYXkoTC5kZXNjcmlwdGlvbixMZSgpKSksTC5kZXNjcmlwdGlvbi5sZW5ndGg9PT0xJiZMLnNoYXBlPT09SWd0JiYoTC5zaGFwZT0kSyksIUwudHlwZSYmZi5kb2MmJihVdC5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsYixOZ3QoZikpLEwudHlwZT0iZ3JvdXAiLEwuZGlyPU5ndChmKSxMLnNoYXBlPWYudHlwZT09PXpSdD9DVmU6X1ZlLEwuY2xhc3Nlcz1MLmNsYXNzZXMrIiAiK09WZSsiICIrKG0/TlZlOiIiKSk7Y29uc3QgTj17bGFiZWxTdHlsZToiIixzaGFwZTpMLnNoYXBlLGxhYmVsVGV4dDpMLmRlc2NyaXB0aW9uLGNsYXNzZXM6TC5jbGFzc2VzLHN0eWxlOiIiLGlkOmIsZGlyOkwuZGlyLGRvbUlkOk9ndChiLGdrKSx0eXBlOkwudHlwZSxwYWRkaW5nOjE1fTtpZihOLmNlbnRlckxhYmVsPSEwLGYubm90ZSl7Y29uc3QgQj17bGFiZWxTdHlsZToiIixzaGFwZTpTVmUsbGFiZWxUZXh0OmYubm90ZS50ZXh0LGNsYXNzZXM6RFZlLHN0eWxlOiIiLGlkOmIrRlZlKyItIitnayxkb21JZDpPZ3QoYixnayxvanQpLHR5cGU6TC50eXBlLHBhZGRpbmc6MTV9LGo9e2xhYmVsU3R5bGU6IiIsc2hhcGU6QVZlLGxhYmVsVGV4dDpmLm5vdGUudGV4dCxjbGFzc2VzOkwuY2xhc3NlcyxzdHlsZToiIixpZDpiK2NqdCxkb21JZDpPZ3QoYixnayxhanQpLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2drKys7Y29uc3QgUj1iK2NqdDtpLnNldE5vZGUoUixqKSxpLnNldE5vZGUoQi5pZCxCKSxpLnNldE5vZGUoYixOKSxpLnNldFBhcmVudChiLFIpLGkuc2V0UGFyZW50KEIuaWQsUik7bGV0IHo9YixLPUIuaWQ7Zi5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoej1CLmlkLEs9YiksaS5zZXRFZGdlKHosSyx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6dWp0LGxhYmVsU3R5bGU6IiIsY2xhc3NlczpJVmUsYXJyb3doZWFkU3R5bGU6bGp0LGxhYmVscG9zOmhqdCxsYWJlbFR5cGU6Zmp0LHRoaWNrbmVzczpkanR9KX1lbHNlIGkuc2V0Tm9kZShiLE4pfWEmJmEuaWQhPT0icm9vdCImJihVdC50cmFjZSgiU2V0dGluZyBub2RlICIsYiwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixhLmlkKSxpLnNldFBhcmVudChiLGEuaWQpKSxmLmRvYyYmKFV0LnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIiksJFZlKGksZixmLmRvYyxwLHYsIW0pKX0sJFZlPShpLGEsZixwLHYsbSk9PntVdC50cmFjZSgiaXRlbXMiLGYpLGYuZm9yRWFjaChiPT57c3dpdGNoKGIuc3RtdCl7Y2FzZSBQSzpxUChpLGEsYixwLHYsbSk7YnJlYWs7Y2FzZSBSUDpxUChpLGEsYixwLHYsbSk7YnJlYWs7Y2FzZSBFZ3Q6e3FQKGksYSxiLnN0YXRlMSxwLHYsbSkscVAoaSxhLGIuc3RhdGUyLHAsdixtKTtjb25zdCBFPXtpZDoiZWRnZSIrZ2ssYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6dWp0LGxhYmVsU3R5bGU6IiIsbGFiZWw6WXIuc2FuaXRpemVUZXh0KGIuZGVzY3JpcHRpb24sTGUoKSksYXJyb3doZWFkU3R5bGU6bGp0LGxhYmVscG9zOmhqdCxsYWJlbFR5cGU6Zmp0LHRoaWNrbmVzczpkanQsY2xhc3NlczpzanR9O2kuc2V0RWRnZShiLnN0YXRlMS5pZCxiLnN0YXRlMi5pZCxFLGdrKSxnaysrfWJyZWFrfX0pfSxOZ3Q9KGksYT1CR2UpPT57bGV0IGY9YTtpZihpLmRvYylmb3IobGV0IHA9MDtwPGkuZG9jLmxlbmd0aDtwKyspe2NvbnN0IHY9aS5kb2NbcF07di5zdG10PT09ImRpciImJihmPXYudmFsdWUpfXJldHVybiBmfSx6VmU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokUnQsZGI6TzUscmVuZGVyZXI6e3NldENvbmY6QlZlLGdldENsYXNzZXM6UlZlLGRyYXc6YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7VXQuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGEpLHpLPXt9LHAuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3R7c2VjdXJpdHlMZXZlbDp2LHN0YXRlOm19PUxlKCksYj1tLm5vZGVTcGFjaW5nfHw1MCxFPW0ucmFua1NwYWNpbmd8fDUwO1V0LmluZm8ocC5kYi5nZXRSb290RG9jVjIoKSkscC5kYi5leHRyYWN0KHAuZGIuZ2V0Um9vdERvY1YyKCkpLFV0LmluZm8ocC5kYi5nZXRSb290RG9jVjIoKSk7Y29uc3QgXz1wLmRiLmdldFN0YXRlcygpLEw9bmV3IGExKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6Tmd0KHAuZGIuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YixyYW5rc2VwOkUsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO3FQKEwsdm9pZCAwLHAuZGIuZ2V0Um9vdERvY1YyKCksXyxwLmRiLCEwKTtsZXQgTjt2PT09InNhbmRib3giJiYoTj15cigiI2kiK2EpKTtjb25zdCBCPXlyKHY9PT0ic2FuZGJveCI/Ti5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iiksaj1CLnNlbGVjdChgW2lkPSIke2F9Il1gKSxSPUIuc2VsZWN0KCIjIithKyIgZyIpO2F3YWl0IEkwdChSLEwsWyJiYXJiIl0sZEwsYSk7Y29uc3Qgej04OyRhLmluc2VydFRpdGxlKGosInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKTtjb25zdCBLPWoubm9kZSgpLmdldEJCb3goKSxpdD1LLndpZHRoK3oqMixzdD1LLmhlaWdodCt6KjI7ai5hdHRyKCJjbGFzcyIsZEwpO2NvbnN0IHV0PWoubm9kZSgpLmdldEJCb3goKTtvZyhqLHN0LGl0LG0udXNlTWF4V2lkdGgpO2NvbnN0IGJ0PWAke3V0Lngten0gJHt1dC55LXp9ICR7aXR9ICR7c3R9YDtVdC5kZWJ1Zyhgdmlld0JveCAke2J0fWApLGouYXR0cigidmlld0JveCIsYnQpO2NvbnN0IG10PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJythKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCB5dCBvZiBtdCl7Y29uc3QgZHQ9eXQuZ2V0QkJveCgpLGh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCRLKTtodC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxodC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxodC5zZXRBdHRyaWJ1dGUoIndpZHRoIixkdC53aWR0aCksaHQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGR0LmhlaWdodCkseXQuaW5zZXJ0QmVmb3JlKGh0LHl0LmZpcnN0Q2hpbGQpfX19LHN0eWxlczp0anQsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsTzUuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBQZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihCLGosUix6KXtmb3IoUj1SfHx7fSx6PUIubGVuZ3RoO3otLTtSW0Jbel1dPWopO3JldHVybiBSfSxhPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLGY9WzEsOV0scD1bMSwxMF0sdj1bMSwxMV0sbT1bMSwxMl0sYj1bMSwxM10sRT1bMSwxNF0sXz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCx0aXRsZToxMSxhY2NfdGl0bGU6MTIsYWNjX3RpdGxlX3ZhbHVlOjEzLGFjY19kZXNjcjoxNCxhY2NfZGVzY3JfdmFsdWU6MTUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxNixzZWN0aW9uOjE3LHRhc2tOYW1lOjE4LHRhc2tEYXRhOjE5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJqb3VybmV5Iiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDE4OiJ0YXNrTmFtZSIsMTk6InRhc2tEYXRhIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGosUix6LEssaXQsc3QsdXQpe3ZhciBidD1zdC5sZW5ndGgtMTtzd2l0Y2goaXQpe2Nhc2UgMTpyZXR1cm4gc3RbYnQtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6c3RbYnQtMV0ucHVzaChzdFtidF0pLHRoaXMuJD1zdFtidC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1zdFtidF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Oksuc2V0RGlhZ3JhbVRpdGxlKHN0W2J0XS5zdWJzdHIoNikpLHRoaXMuJD1zdFtidF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9c3RbYnRdLnRyaW0oKSxLLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1zdFtidF0udHJpbSgpLEsuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOksuYWRkU2VjdGlvbihzdFtidF0uc3Vic3RyKDgpKSx0aGlzLiQ9c3RbYnRdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOksuYWRkVGFzayhzdFtidC0xXSxzdFtidF0pLHRoaXMuJD0idGFzayI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkoYSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOmYsMTI6cCwxNDp2LDE2Om0sMTc6YiwxODpFfSxpKGEsWzIsN10sezE6WzIsMV19KSxpKGEsWzIsM10pLHs5OjE1LDExOmYsMTI6cCwxNDp2LDE2Om0sMTc6YiwxODpFfSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSx7MTk6WzEsMThdfSxpKGEsWzIsNF0pLGkoYSxbMiw5XSksaShhLFsyLDEwXSksaShhLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oaixSKXtpZihSLnJlY292ZXJhYmxlKXRoaXMudHJhY2Uoaik7ZWxzZXt2YXIgej1uZXcgRXJyb3Ioaik7dGhyb3cgei5oYXNoPVIsen19LHBhcnNlOmZ1bmN0aW9uKGope3ZhciBSPXRoaXMsej1bMF0sSz1bXSxpdD1bbnVsbF0sc3Q9W10sdXQ9dGhpcy50YWJsZSxidD0iIixtdD0wLHl0PTAsZHQ9MixodD0xLHd0PXN0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFg9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxwdD17eXk6e319O2Zvcih2YXIgVSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFUpJiYocHQueXlbVV09dGhpcy55eVtVXSk7WC5zZXRJbnB1dChqLHB0Lnl5KSxwdC55eS5sZXhlcj1YLHB0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBYLnl5bGxvYz4idSImJihYLnl5bGxvYz17fSk7dmFyIHh0PVgueXlsbG9jO3N0LnB1c2goeHQpO3ZhciBudD1YLm9wdGlvbnMmJlgub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHB0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXB0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE90KCl7dmFyIE1lO3JldHVybiBNZT1LLnBvcCgpfHxYLmxleCgpfHxodCx0eXBlb2YgTWUhPSJudW1iZXIiJiYoTWUgaW5zdGFuY2VvZiBBcnJheSYmKEs9TWUsTWU9Sy5wb3AoKSksTWU9Ui5zeW1ib2xzX1tNZV18fE1lKSxNZX1mb3IodmFyIE50LHF0LEN0LFosVHQ9e30sSHQsSXQsRnQsa2U7Oyl7aWYocXQ9elt6Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3F0XT9DdD10aGlzLmRlZmF1bHRBY3Rpb25zW3F0XTooKE50PT09bnVsbHx8dHlwZW9mIE50PiJ1IikmJihOdD1PdCgpKSxDdD11dFtxdF0mJnV0W3F0XVtOdF0pLHR5cGVvZiBDdD4idSJ8fCFDdC5sZW5ndGh8fCFDdFswXSl7dmFyIHBuPSIiO2tlPVtdO2ZvcihIdCBpbiB1dFtxdF0pdGhpcy50ZXJtaW5hbHNfW0h0XSYmSHQ+ZHQmJmtlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tIdF0rIiciKTtYLnNob3dQb3NpdGlvbj9wbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhtdCsxKStgOgpgK1guc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtrZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW050XXx8TnQpKyInIjpwbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhtdCsxKSsiOiBVbmV4cGVjdGVkICIrKE50PT1odD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tOdF18fE50KSsiJyIpLHRoaXMucGFyc2VFcnJvcihwbix7dGV4dDpYLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tOdF18fE50LGxpbmU6WC55eWxpbmVubyxsb2M6eHQsZXhwZWN0ZWQ6a2V9KX1pZihDdFswXWluc3RhbmNlb2YgQXJyYXkmJkN0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrcXQrIiwgdG9rZW46ICIrTnQpO3N3aXRjaChDdFswXSl7Y2FzZSAxOnoucHVzaChOdCksaXQucHVzaChYLnl5dGV4dCksc3QucHVzaChYLnl5bGxvYyksei5wdXNoKEN0WzFdKSxOdD1udWxsLHl0PVgueXlsZW5nLGJ0PVgueXl0ZXh0LG10PVgueXlsaW5lbm8seHQ9WC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEl0PXRoaXMucHJvZHVjdGlvbnNfW0N0WzFdXVsxXSxUdC4kPWl0W2l0Lmxlbmd0aC1JdF0sVHQuXyQ9e2ZpcnN0X2xpbmU6c3Rbc3QubGVuZ3RoLShJdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnN0W3N0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnN0W3N0Lmxlbmd0aC0oSXR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46c3Rbc3QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxudCYmKFR0Ll8kLnJhbmdlPVtzdFtzdC5sZW5ndGgtKEl0fHwxKV0ucmFuZ2VbMF0sc3Rbc3QubGVuZ3RoLTFdLnJhbmdlWzFdXSksWj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoVHQsW2J0LHl0LG10LHB0Lnl5LEN0WzFdLGl0LHN0XS5jb25jYXQod3QpKSx0eXBlb2YgWjwidSIpcmV0dXJuIFo7SXQmJih6PXouc2xpY2UoMCwtMSpJdCoyKSxpdD1pdC5zbGljZSgwLC0xKkl0KSxzdD1zdC5zbGljZSgwLC0xKkl0KSksei5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0N0WzFdXVswXSksaXQucHVzaChUdC4kKSxzdC5wdXNoKFR0Ll8kKSxGdD11dFt6W3oubGVuZ3RoLTJdXVt6W3oubGVuZ3RoLTFdXSx6LnB1c2goRnQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxMPWZ1bmN0aW9uKCl7dmFyIEI9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oUix6KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFIseik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoUil9LHNldElucHV0OmZ1bmN0aW9uKGosUil7cmV0dXJuIHRoaXMueXk9Unx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9aix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgaj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9aix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9aix0aGlzLm1hdGNoZWQrPWo7dmFyIFI9ai5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIFI/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGp9LHVucHV0OmZ1bmN0aW9uKGope3ZhciBSPWoubGVuZ3RoLHo9ai5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWordGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVIpLHRoaXMub2Zmc2V0LT1SO3ZhciBLPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHoubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT16Lmxlbmd0aC0xKTt2YXIgaXQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOno/KHoubGVuZ3RoPT09Sy5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0tbSy5sZW5ndGgtei5sZW5ndGhdLmxlbmd0aC16WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpdFswXSxpdFswXSt0aGlzLnl5bGVuZy1SXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oail7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGopKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihqLmxlbmd0aD4yMD8iLi4uIjoiIikrai5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBqPXRoaXMubWF0Y2g7cmV0dXJuIGoubGVuZ3RoPDIwJiYoais9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtai5sZW5ndGgpKSwoai5zdWJzdHIoMCwyMCkrKGoubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBqPXRoaXMucGFzdElucHV0KCksUj1uZXcgQXJyYXkoai5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBqK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtSKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihqLFIpe3ZhciB6LEssaXQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGl0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGl0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEs9alswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksSyYmKHRoaXMueXlsaW5lbm8rPUsubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Sz9LW0subGVuZ3RoLTFdLmxlbmd0aC1LW0subGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4ralswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1qWzBdLHRoaXMubWF0Y2grPWpbMF0sdGhpcy5tYXRjaGVzPWosdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoalswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9alswXSx6PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFIsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseilyZXR1cm4gejtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgc3QgaW4gaXQpdGhpc1tzdF09aXRbc3RdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGosUix6LEs7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaXQ9dGhpcy5fY3VycmVudFJ1bGVzKCksc3Q9MDtzdDxpdC5sZW5ndGg7c3QrKylpZih6PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaXRbc3RdXSkseiYmKCFSfHx6WzBdLmxlbmd0aD5SWzBdLmxlbmd0aCkpe2lmKFI9eixLPXN0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGo9dGhpcy50ZXN0X21hdGNoKHosaXRbc3RdKSxqIT09ITEpcmV0dXJuIGo7aWYodGhpcy5fYmFja3RyYWNrKXtSPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFI/KGo9dGhpcy50ZXN0X21hdGNoKFIsaXRbS10pLGohPT0hMT9qOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLm5leHQoKTtyZXR1cm4gUnx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oUil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFIpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBSPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFI+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihSKXtyZXR1cm4gUj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFJ8fDApLFI+PTA/dGhpcy5jb25kaXRpb25TdGFja1tSXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihSKXt0aGlzLmJlZ2luKFIpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFIseixLLGl0KXtzd2l0Y2goSyl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAxODtjYXNlIDE2OnJldHVybiAxOTtjYXNlIDE3OnJldHVybiI6IjtjYXNlIDE4OnJldHVybiA2O2Nhc2UgMTk6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEJ9KCk7Xy5sZXhlcj1MO2Z1bmN0aW9uIE4oKXt0aGlzLnl5PXt9fXJldHVybiBOLnByb3RvdHlwZT1fLF8uUGFyc2VyPU4sbmV3IE59KCk7UGd0LnBhcnNlcj1QZ3Q7Y29uc3QgcVZlPVBndDtsZXQgZ0w9IiI7Y29uc3QgRmd0PVtdLEhQPVtdLEdQPVtdLEhWZT1mdW5jdGlvbigpe0ZndC5sZW5ndGg9MCxIUC5sZW5ndGg9MCxnTD0iIixHUC5sZW5ndGg9MCxhcCgpfSxHVmU9ZnVuY3Rpb24oaSl7Z0w9aSxGZ3QucHVzaChpKX0sVlZlPWZ1bmN0aW9uKCl7cmV0dXJuIEZndH0sVVZlPWZ1bmN0aW9uKCl7bGV0IGk9Z2p0KCk7Y29uc3QgYT0xMDA7bGV0IGY9MDtmb3IoOyFpJiZmPGE7KWk9Z2p0KCksZisrO3JldHVybiBIUC5wdXNoKC4uLkdQKSxIUH0sV1ZlPWZ1bmN0aW9uKCl7Y29uc3QgaT1bXTtyZXR1cm4gSFAuZm9yRWFjaChmPT57Zi5wZW9wbGUmJmkucHVzaCguLi5mLnBlb3BsZSl9KSxbLi4ubmV3IFNldChpKV0uc29ydCgpfSxLVmU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEuc3Vic3RyKDEpLnNwbGl0KCI6Iik7bGV0IHA9MCx2PVtdO2YubGVuZ3RoPT09MT8ocD1OdW1iZXIoZlswXSksdj1bXSk6KHA9TnVtYmVyKGZbMF0pLHY9ZlsxXS5zcGxpdCgiLCIpKTtjb25zdCBtPXYubWFwKEU9PkUudHJpbSgpKSxiPXtzZWN0aW9uOmdMLHR5cGU6Z0wscGVvcGxlOm0sdGFzazppLHNjb3JlOnB9O0dQLnB1c2goYil9LFlWZT1mdW5jdGlvbihpKXtjb25zdCBhPXtzZWN0aW9uOmdMLHR5cGU6Z0wsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX07SFAucHVzaChhKX0sZ2p0PWZ1bmN0aW9uKCl7Y29uc3QgaT1mdW5jdGlvbihmKXtyZXR1cm4gR1BbZl0ucHJvY2Vzc2VkfTtsZXQgYT0hMDtmb3IoY29uc3RbZixwXW9mIEdQLmVudHJpZXMoKSlpKGYpLGE9YSYmcC5wcm9jZXNzZWQ7cmV0dXJuIGF9LHBqdD17Z2V0Q29uZmlnOigpPT5MZSgpLmpvdXJuZXksY2xlYXI6SFZlLHNldERpYWdyYW1UaXRsZTpaMixnZXREaWFncmFtVGl0bGU6RGIsc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3Asc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsYWRkU2VjdGlvbjpHVmUsZ2V0U2VjdGlvbnM6VlZlLGdldFRhc2tzOlVWZSxhZGRUYXNrOktWZSxhZGRUYXNrT3JnOllWZSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gV1ZlKCl9fSxYVmU9aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9OwogIH0KICAubW91dGggewogICAgc3Ryb2tlOiAjNjY2OwogIH0KCiAgbGluZSB7CiAgICBzdHJva2U6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAubGVnZW5kIHsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KCiAgLmxhYmVsIHRleHQgewogICAgZmlsbDogIzMzMzsKICB9CiAgLmxhYmVsIHsKICAgIGNvbG9yOiAke2kudGV4dENvbG9yfQogIH0KCiAgLmZhY2UgewogICAgJHtpLmZhY2VDb2xvcj9gZmlsbDogJHtpLmZhY2VDb2xvcn1gOiJmaWxsOiAjRkZGOERDIn07CiAgICBzdHJva2U6ICM5OTk7CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7aS5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTF9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUyfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlM31gOiIifTsKICB9CiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTR9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU1fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTd9YDoiIn07CiAgfQoKICAuYWN0b3ItMCB7CiAgICAke2kuYWN0b3IwP2BmaWxsOiAke2kuYWN0b3IwfWA6IiJ9OwogIH0KICAuYWN0b3ItMSB7CiAgICAke2kuYWN0b3IxP2BmaWxsOiAke2kuYWN0b3IxfWA6IiJ9OwogIH0KICAuYWN0b3ItMiB7CiAgICAke2kuYWN0b3IyP2BmaWxsOiAke2kuYWN0b3IyfWA6IiJ9OwogIH0KICAuYWN0b3ItMyB7CiAgICAke2kuYWN0b3IzP2BmaWxsOiAke2kuYWN0b3IzfWA6IiJ9OwogIH0KICAuYWN0b3ItNCB7CiAgICAke2kuYWN0b3I0P2BmaWxsOiAke2kuYWN0b3I0fWA6IiJ9OwogIH0KICAuYWN0b3ItNSB7CiAgICAke2kuYWN0b3I1P2BmaWxsOiAke2kuYWN0b3I1fWA6IiJ9OwogIH0KYCxCZ3Q9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gSFcoaSxhKX0sUVZlPWZ1bmN0aW9uKGksYSl7Y29uc3QgcD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gpLmF0dHIoImN5IixhLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSx2PWkuYXBwZW5kKCJnIik7di5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixhLmN4LTE1LzMpLmF0dHIoImN5IixhLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3grMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIG0oXyl7Y29uc3QgTD1MQSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krMikrIikiKX1mdW5jdGlvbiBiKF8pe2NvbnN0IEw9TEEoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krNykrIikiKX1mdW5jdGlvbiBFKF8pe18uYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGEuY3gtNSkuYXR0cigieTEiLGEuY3krNykuYXR0cigieDIiLGEuY3grNSkuYXR0cigieTIiLGEuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gYS5zY29yZT4zP20odik6YS5zY29yZTwzP2Iodik6RSh2KSxwfSxianQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gZi5hdHRyKCJjeCIsYS5jeCksZi5hdHRyKCJjeSIsYS5jeSksZi5hdHRyKCJjbGFzcyIsImFjdG9yLSIrYS5wb3MpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigiciIsYS5yKSxmLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixmLmNsYXNzKSxhLnRpdGxlIT09dm9pZCAwJiZmLmFwcGVuZCgidGl0bGUiKS50ZXh0KGEudGl0bGUpLGZ9LHZqdD1mdW5jdGlvbihpLGEpe3JldHVybiBkSWUoaSxhKX0sWlZlPWZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gZih2LG0sYixFLF8pe3JldHVybiB2KyIsIittKyIgIisoditiKSsiLCIrbSsiICIrKHYrYikrIiwiKyhtK0UtXykrIiAiKyh2K2ItXyoxLjIpKyIsIisobStFKSsiICIrdisiLCIrKG0rRSl9Y29uc3QgcD1pLmFwcGVuZCgicG9seWdvbiIpO3AuYXR0cigicG9pbnRzIixmKGEueCxhLnksNTAsMjAsNykpLHAuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGEueT1hLnkrYS5sYWJlbE1hcmdpbixhLng9YS54Ky41KmEubGFiZWxNYXJnaW4sdmp0KGksYSl9LEpWZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLHY9ZlQoKTt2Lng9YS54LHYueT1hLnksdi5maWxsPWEuZmlsbCx2LndpZHRoPWYud2lkdGgqYS50YXNrQ291bnQrZi5kaWFncmFtTWFyZ2luWCooYS50YXNrQ291bnQtMSksdi5oZWlnaHQ9Zi5oZWlnaHQsdi5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2EubnVtLHYucng9Myx2LnJ5PTMsQmd0KHAsdiksbWp0KGYpKGEudGV4dCxwLHYueCx2Lnksdi53aWR0aCx2LmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIithLm51bX0sZixhLmNvbG91cil9O2xldCB3anQ9LTE7Y29uc3QgdFVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWEueCtmLndpZHRoLzIsdj1pLmFwcGVuZCgiZyIpO3dqdCsrO2NvbnN0IG09MzAwKzUqMzA7di5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK3dqdCkuYXR0cigieDEiLHApLmF0dHIoInkxIixhLnkpLmF0dHIoIngyIixwKS5hdHRyKCJ5MiIsbSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLFFWZSh2LHtjeDpwLGN5OjMwMCsoNS1hLnNjb3JlKSozMCxzY29yZTphLnNjb3JlfSk7Y29uc3QgYj1mVCgpO2IueD1hLngsYi55PWEueSxiLmZpbGw9YS5maWxsLGIud2lkdGg9Zi53aWR0aCxiLmhlaWdodD1mLmhlaWdodCxiLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2EubnVtLGIucng9MyxiLnJ5PTMsQmd0KHYsYik7bGV0IEU9YS54KzE0O2EucGVvcGxlLmZvckVhY2goXz0+e2NvbnN0IEw9YS5hY3RvcnNbX10uY29sb3IsTj17Y3g6RSxjeTphLnkscjo3LGZpbGw6TCxzdHJva2U6IiMwMDAiLHRpdGxlOl8scG9zOmEuYWN0b3JzW19dLnBvc2l0aW9ufTtianQodixOKSxFKz0xMH0pLG1qdChmKShhLnRhc2ssdixiLngsYi55LGIud2lkdGgsYi5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sZixhLmNvbG91cil9LGVVZT1mdW5jdGlvbihpLGEpe2JOdChpLGEpfSxtanQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsbSxiLEUsXyxMLE4sQil7Y29uc3Qgaj1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFK0wvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsQikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh2KTtwKGosTil9ZnVuY3Rpb24gYSh2LG0sYixFLF8sTCxOLEIsail7Y29uc3R7dGFza0ZvbnRTaXplOlIsdGFza0ZvbnRGYW1pbHk6en09QixLPXYuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgaXQ9MDtpdDxLLmxlbmd0aDtpdCsrKXtjb25zdCBzdD1pdCpSLVIqKEsubGVuZ3RoLTEpLzIsdXQ9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRSkuYXR0cigiZmlsbCIsaikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsUikuc3R5bGUoImZvbnQtZmFtaWx5Iix6KTt1dC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsYitfLzIpLmF0dHIoImR5IixzdCkudGV4dChLW2l0XSksdXQuYXR0cigieSIsRStMLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxwKHV0LE4pfX1mdW5jdGlvbiBmKHYsbSxiLEUsXyxMLE4sQil7Y29uc3Qgaj1tLmFwcGVuZCgic3dpdGNoIiksej1qLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEUpLmF0dHIoIndpZHRoIixfKS5hdHRyKCJoZWlnaHQiLEwpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxhKHYsaixiLEUsXyxMLE4sQikscCh6LE4pfWZ1bmN0aW9uIHAodixtKXtmb3IoY29uc3QgYiBpbiBtKWIgaW4gbSYmdi5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiB2LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6di50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxWUD17ZHJhd1JlY3Q6Qmd0LGRyYXdDaXJjbGU6Ymp0LGRyYXdTZWN0aW9uOkpWZSxkcmF3VGV4dDp2anQsZHJhd0xhYmVsOlpWZSxkcmF3VGFzazp0VWUsZHJhd0JhY2tncm91bmRSZWN0OmVVZSxpbml0R3JhcGhpY3M6ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9fSxuVWU9ZnVuY3Rpb24oaSl7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihmKXtxS1tmXT1pW2ZdfSl9LE41PXt9O2Z1bmN0aW9uIHJVZShpKXtjb25zdCBhPUxlKCkuam91cm5leTtsZXQgZj02MDtPYmplY3Qua2V5cyhONSkuZm9yRWFjaChwPT57Y29uc3Qgdj1ONVtwXS5jb2xvcixtPXtjeDoyMCxjeTpmLHI6NyxmaWxsOnYsc3Ryb2tlOiIjMDAwIixwb3M6TjVbcF0ucG9zaXRpb259O1ZQLmRyYXdDaXJjbGUoaSxtKTtjb25zdCBiPXt4OjQwLHk6Zis3LGZpbGw6IiM2NjYiLHRleHQ6cCx0ZXh0TWFyZ2luOmEuYm94VGV4dE1hcmdpbnw1fTtWUC5kcmF3VGV4dChpLGIpLGYrPTIwfSl9Y29uc3QgcUs9TGUoKS5qb3VybmV5LFNUPXFLLmxlZnRNYXJnaW4saVVlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9TGUoKS5qb3VybmV5LG09TGUoKS5zZWN1cml0eUxldmVsO2xldCBiO209PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIobT09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKTtydi5pbml0KCk7Y29uc3QgXz1FLnNlbGVjdCgiIyIrYSk7VlAuaW5pdEdyYXBoaWNzKF8pO2NvbnN0IEw9cC5kYi5nZXRUYXNrcygpLE49cC5kYi5nZXREaWFncmFtVGl0bGUoKSxCPXAuZGIuZ2V0QWN0b3JzKCk7Zm9yKGNvbnN0IHN0IGluIE41KWRlbGV0ZSBONVtzdF07bGV0IGo9MDtCLmZvckVhY2goc3Q9PntONVtzdF09e2NvbG9yOnYuYWN0b3JDb2xvdXJzW2oldi5hY3RvckNvbG91cnMubGVuZ3RoXSxwb3NpdGlvbjpqfSxqKyt9KSxyVWUoXykscnYuaW5zZXJ0KDAsMCxTVCxPYmplY3Qua2V5cyhONSkubGVuZ3RoKjUwKSxzVWUoXyxMLDApO2NvbnN0IFI9cnYuZ2V0Qm91bmRzKCk7TiYmXy5hcHBlbmQoInRleHQiKS50ZXh0KE4pLmF0dHIoIngiLFNUKS5hdHRyKCJmb250LXNpemUiLCI0ZXgiKS5hdHRyKCJmb250LXdlaWdodCIsImJvbGQiKS5hdHRyKCJ5IiwyNSk7Y29uc3Qgej1SLnN0b3B5LVIuc3RhcnR5KzIqdi5kaWFncmFtTWFyZ2luWSxLPVNUK1Iuc3RvcHgrMip2LmRpYWdyYW1NYXJnaW5YO29nKF8seixLLHYudXNlTWF4V2lkdGgpLF8uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFNUKS5hdHRyKCJ5MSIsdi5oZWlnaHQqNCkuYXR0cigieDIiLEstU1QtNCkuYXR0cigieTIiLHYuaGVpZ2h0KjQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7Y29uc3QgaXQ9Tj83MDowO18uYXR0cigidmlld0JveCIsYCR7Ui5zdGFydHh9IC0yNSAke0t9ICR7eitpdH1gKSxfLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0IiksXy5hdHRyKCJoZWlnaHQiLHoraXQrMjUpfSxydj17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MH0sdXBkYXRlVmFsOmZ1bmN0aW9uKGksYSxmLHApe2lbYV09PT12b2lkIDA/aVthXT1mOmlbYV09cChmLGlbYV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1MZSgpLmpvdXJuZXksbT10aGlzO2xldCBiPTA7ZnVuY3Rpb24gRShfKXtyZXR1cm4gZnVuY3Rpb24oTil7YisrO2NvbnN0IEI9bS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1iKzE7bS51cGRhdGVWYWwoTiwic3RhcnR5IixhLUIqdi5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKE4sInN0b3B5IixwK0Iqdi5ib3hNYXJnaW4sTWF0aC5tYXgpLG0udXBkYXRlVmFsKHJ2LmRhdGEsInN0YXJ0eCIsaS1CKnYuYm94TWFyZ2luLE1hdGgubWluKSxtLnVwZGF0ZVZhbChydi5kYXRhLCJzdG9weCIsZitCKnYuYm94TWFyZ2luLE1hdGgubWF4KSxfIT09ImFjdGl2YXRpb24iJiYobS51cGRhdGVWYWwoTiwic3RhcnR4IixpLUIqdi5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKE4sInN0b3B4IixmK0Iqdi5ib3hNYXJnaW4sTWF0aC5tYXgpLG0udXBkYXRlVmFsKHJ2LmRhdGEsInN0YXJ0eSIsYS1CKnYuYm94TWFyZ2luLE1hdGgubWluKSxtLnVwZGF0ZVZhbChydi5kYXRhLCJzdG9weSIscCtCKnYuYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKEUoKSl9LGluc2VydDpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PU1hdGgubWluKGksZiksbT1NYXRoLm1heChpLGYpLGI9TWF0aC5taW4oYSxwKSxFPU1hdGgubWF4KGEscCk7dGhpcy51cGRhdGVWYWwocnYuZGF0YSwic3RhcnR4Iix2LE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChydi5kYXRhLCJzdGFydHkiLGIsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHJ2LmRhdGEsInN0b3B4IixtLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChydi5kYXRhLCJzdG9weSIsRSxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHModixiLG0sRSl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbihpKXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MraSx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFJndD1xSy5zZWN0aW9uRmlsbHMseWp0PXFLLnNlY3Rpb25Db2xvdXJzLHNVZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1MZSgpLmpvdXJuZXk7bGV0IHY9IiI7Y29uc3QgbT1wLmhlaWdodCoyK3AuZGlhZ3JhbU1hcmdpblksYj1mK207bGV0IEU9MCxfPSIjQ0NDIixMPSJibGFjayIsTj0wO2Zvcihjb25zdFtCLGpdb2YgYS5lbnRyaWVzKCkpe2lmKHYhPT1qLnNlY3Rpb24pe189Umd0W0UlUmd0Lmxlbmd0aF0sTj1FJVJndC5sZW5ndGgsTD15anRbRSV5anQubGVuZ3RoXTtsZXQgej0wO2NvbnN0IEs9ai5zZWN0aW9uO2ZvcihsZXQgc3Q9QjtzdDxhLmxlbmd0aCYmYVtzdF0uc2VjdGlvbj09SztzdCsrKXo9eisxO2NvbnN0IGl0PXt4OkIqcC50YXNrTWFyZ2luK0IqcC53aWR0aCtTVCx5OjUwLHRleHQ6ai5zZWN0aW9uLGZpbGw6XyxudW06Tixjb2xvdXI6TCx0YXNrQ291bnQ6en07VlAuZHJhd1NlY3Rpb24oaSxpdCxwKSx2PWouc2VjdGlvbixFKyt9Y29uc3QgUj1qLnBlb3BsZS5yZWR1Y2UoKHosSyk9PihONVtLXSYmKHpbS109TjVbS10pLHopLHt9KTtqLng9QipwLnRhc2tNYXJnaW4rQipwLndpZHRoK1NULGoueT1iLGoud2lkdGg9cC5kaWFncmFtTWFyZ2luWCxqLmhlaWdodD1wLmRpYWdyYW1NYXJnaW5ZLGouY29sb3VyPUwsai5maWxsPV8sai5udW09TixqLmFjdG9ycz1SLFZQLmRyYXdUYXNrKGksaixwKSxydi5pbnNlcnQoai54LGoueSxqLngrai53aWR0aCtwLnRhc2tNYXJnaW4sMzAwKzUqMzApfX0seGp0PXtzZXRDb25mOm5VZSxkcmF3OmlVZX0sYVVlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6cVZlLGRiOnBqdCxyZW5kZXJlcjp4anQsc3R5bGVzOlhWZSxpbml0Omk9Pnt4anQuc2V0Q29uZihpLmpvdXJuZXkpLHBqdC5jbGVhcigpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksb1VlPShpLGEsZik9Pntjb25zdHtwYXJlbnRCeUlkOnB9PWYsdj1uZXcgU2V0O2xldCBtPWk7Zm9yKDttOyl7aWYodi5hZGQobSksbT09PWEpcmV0dXJuIG07bT1wW21dfWZvcihtPWE7bTspe2lmKHYuaGFzKG0pKXJldHVybiBtO209cFttXX1yZXR1cm4icm9vdCJ9O2Z1bmN0aW9uIEhLKGkpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgIicraSsnIi4gUGxlYXNlIGNvbmZpZ3VyZSB0aGUgZHluYW1pY1JlcXVpcmVUYXJnZXRzIG9yL2FuZCBpZ25vcmVEeW5hbWljUmVxdWlyZXMgb3B0aW9uIG9mIEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIGFwcHJvcHJpYXRlbHkgZm9yIHRoaXMgcmVxdWlyZSBjYWxsIHRvIHdvcmsuJyl9dmFyIGtqdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYpe2kuZXhwb3J0cz1mKCl9KShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGYocCx2LG0pe2Z1bmN0aW9uIGIoTCxOKXtpZighdltMXSl7aWYoIXBbTF0pe3ZhciBCPXR5cGVvZiBISz09ImZ1bmN0aW9uIiYmSEs7aWYoIU4mJkIpcmV0dXJuIEIoTCwhMCk7aWYoRSlyZXR1cm4gRShMLCEwKTt2YXIgaj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitMKyInIik7dGhyb3cgai5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixqfXZhciBSPXZbTF09e2V4cG9ydHM6e319O3BbTF1bMF0uY2FsbChSLmV4cG9ydHMsZnVuY3Rpb24oeil7dmFyIEs9cFtMXVsxXVt6XTtyZXR1cm4gYihLfHx6KX0sUixSLmV4cG9ydHMsZixwLHYsbSl9cmV0dXJuIHZbTF0uZXhwb3J0c31mb3IodmFyIEU9dHlwZW9mIEhLPT0iZnVuY3Rpb24iJiZISyxfPTA7XzxtLmxlbmd0aDtfKyspYihtW19dKTtyZXR1cm4gYn1yZXR1cm4gZn0oKSh7MTpbZnVuY3Rpb24oZixwLHYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIEwoTixCKXtmb3IodmFyIGo9MDtqPEIubGVuZ3RoO2orKyl7dmFyIFI9QltqXTtSLmVudW1lcmFibGU9Ui5lbnVtZXJhYmxlfHwhMSxSLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUiYmKFIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFIua2V5LFIpfX1yZXR1cm4gZnVuY3Rpb24oTixCLGope3JldHVybiBCJiZMKE4ucHJvdG90eXBlLEIpLGomJkwoTixqKSxOfX0oKTtmdW5jdGlvbiBiKEwsTil7aWYoIShMIGluc3RhbmNlb2YgTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBMKCl7dmFyIE49dGhpcyxCPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxqPUIuZGVmYXVsdExheW91dE9wdGlvbnMsUj1qPT09dm9pZCAwP3t9Omosej1CLmFsZ29yaXRobXMsSz16PT09dm9pZCAwP1sibGF5ZXJlZCIsInN0cmVzcyIsIm1ydHJlZSIsInJhZGlhbCIsImZvcmNlIiwiZGlzY28iLCJzcG9yZU92ZXJsYXAiLCJzcG9yZUNvbXBhY3Rpb24iLCJyZWN0cGFja2luZyJdOnosaXQ9Qi53b3JrZXJGYWN0b3J5LHN0PUIud29ya2VyVXJsO2lmKGIodGhpcyxMKSx0aGlzLmRlZmF1bHRMYXlvdXRPcHRpb25zPVIsdGhpcy5pbml0aWFsaXplZD0hMSx0eXBlb2Ygc3Q+InUiJiZ0eXBlb2YgaXQ+InUiKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCBhbiBFTEsgd2l0aG91dCBib3RoICd3b3JrZXJVcmwnIGFuZCAnd29ya2VyRmFjdG9yeScuIik7dmFyIHV0PWl0O3R5cGVvZiBzdDwidSImJnR5cGVvZiBpdD4idSImJih1dD1mdW5jdGlvbih5dCl7cmV0dXJuIG5ldyBXb3JrZXIoeXQpfSk7dmFyIGJ0PXV0KHN0KTtpZih0eXBlb2YgYnQucG9zdE1lc3NhZ2UhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JlYXRlZCB3b3JrZXIgZG9lcyBub3QgcHJvdmlkZSB0aGUgcmVxdWlyZWQgJ3Bvc3RNZXNzYWdlJyBmdW5jdGlvbi4iKTt0aGlzLndvcmtlcj1uZXcgXyhidCksdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoicmVnaXN0ZXIiLGFsZ29yaXRobXM6S30pLnRoZW4oZnVuY3Rpb24obXQpe3JldHVybiBOLmluaXRpYWxpemVkPSEwfSkuY2F0Y2goY29uc29sZS5lcnIpfXJldHVybiBtKEwsW3trZXk6ImxheW91dCIsdmFsdWU6ZnVuY3Rpb24oQil7dmFyIGo9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LFI9ai5sYXlvdXRPcHRpb25zLHo9Uj09PXZvaWQgMD90aGlzLmRlZmF1bHRMYXlvdXRPcHRpb25zOlIsSz1qLmxvZ2dpbmcsaXQ9Sz09PXZvaWQgMD8hMTpLLHN0PWoubWVhc3VyZUV4ZWN1dGlvblRpbWUsdXQ9c3Q9PT12b2lkIDA/ITE6c3Q7cmV0dXJuIEI/dGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoibGF5b3V0IixncmFwaDpCLGxheW91dE9wdGlvbnM6eixvcHRpb25zOntsb2dnaW5nOml0LG1lYXN1cmVFeGVjdXRpb25UaW1lOnV0fX0pOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyBtYW5kYXRvcnkgcGFyYW1ldGVyICdncmFwaCcuIikpfX0se2tleToia25vd25MYXlvdXRBbGdvcml0aG1zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJhbGdvcml0aG1zIn0pfX0se2tleToia25vd25MYXlvdXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJvcHRpb25zIn0pfX0se2tleToia25vd25MYXlvdXRDYXRlZ29yaWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJjYXRlZ29yaWVzIn0pfX0se2tleToidGVybWluYXRlV29ya2VyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX1dKSxMfSgpO3YuZGVmYXVsdD1FO3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTChOKXt2YXIgQj10aGlzO2lmKGIodGhpcyxMKSxOPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBtYW5kYXRvcnkgcGFyYW1ldGVyICd3b3JrZXInLiIpO3RoaXMucmVzb2x2ZXJzPXt9LHRoaXMud29ya2VyPU4sdGhpcy53b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGope3NldFRpbWVvdXQoZnVuY3Rpb24oKXtCLnJlY2VpdmUoQixqKX0sMCl9fXJldHVybiBtKEwsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihCKXt2YXIgaj10aGlzLmlkfHwwO3RoaXMuaWQ9aisxLEIuaWQ9ajt2YXIgUj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih6LEspe1IucmVzb2x2ZXJzW2pdPWZ1bmN0aW9uKGl0LHN0KXtpdD8oUi5jb252ZXJ0R3d0U3R5bGVFcnJvcihpdCksSyhpdCkpOnooc3QpfSxSLndvcmtlci5wb3N0TWVzc2FnZShCKX0pfX0se2tleToicmVjZWl2ZSIsdmFsdWU6ZnVuY3Rpb24oQixqKXt2YXIgUj1qLmRhdGEsej1CLnJlc29sdmVyc1tSLmlkXTt6JiYoZGVsZXRlIEIucmVzb2x2ZXJzW1IuaWRdLFIuZXJyb3I/eihSLmVycm9yKTp6KG51bGwsUi5kYXRhKSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53b3JrZXIudGVybWluYXRlJiZ0aGlzLndvcmtlci50ZXJtaW5hdGUoKX19LHtrZXk6ImNvbnZlcnRHd3RTdHlsZUVycm9yIix2YWx1ZTpmdW5jdGlvbihCKXtpZihCKXt2YXIgaj1CLl9famF2YSRleGNlcHRpb247aiYmKGouY2F1c2UmJmouY2F1c2UuYmFja2luZ0pzT2JqZWN0JiYoQi5jYXVzZT1qLmNhdXNlLmJhY2tpbmdKc09iamVjdCx0aGlzLmNvbnZlcnRHd3RTdHlsZUVycm9yKEIuY2F1c2UpKSxkZWxldGUgQi5fX2phdmEkZXhjZXB0aW9uKX19fV0pLEx9KCl9LHt9XSwyOltmdW5jdGlvbihmLHAsdil7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe3ZhciBiO3R5cGVvZiB3aW5kb3c8InUiP2I9d2luZG93OnR5cGVvZiBtPCJ1Ij9iPW06dHlwZW9mIHNlbGY8InUiJiYoYj1zZWxmKTt2YXIgRTtmdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIEwoKXt9ZnVuY3Rpb24gTigpe31mdW5jdGlvbiBCKCl7fWZ1bmN0aW9uIGooKXt9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiB6KCl7fWZ1bmN0aW9uIEsoKXt9ZnVuY3Rpb24gaXQoKXt9ZnVuY3Rpb24gc3QoKXt9ZnVuY3Rpb24gdXQoKXt9ZnVuY3Rpb24gYnQoKXt9ZnVuY3Rpb24gbXQoKXt9ZnVuY3Rpb24geXQoKXt9ZnVuY3Rpb24gZHQoKXt9ZnVuY3Rpb24gaHQoKXt9ZnVuY3Rpb24gd3QoKXt9ZnVuY3Rpb24gWCgpe31mdW5jdGlvbiBwdCgpe31mdW5jdGlvbiBVKCl7fWZ1bmN0aW9uIHh0KCl7fWZ1bmN0aW9uIG50KCl7fWZ1bmN0aW9uIE90KCl7fWZ1bmN0aW9uIE50KCl7fWZ1bmN0aW9uIHF0KCl7fWZ1bmN0aW9uIEN0KCl7fWZ1bmN0aW9uIFooKXt9ZnVuY3Rpb24gVHQoKXt9ZnVuY3Rpb24gSHQoKXt9ZnVuY3Rpb24gSXQoKXt9ZnVuY3Rpb24gRnQoKXt9ZnVuY3Rpb24ga2UoKXt9ZnVuY3Rpb24gcG4oKXt9ZnVuY3Rpb24gTWUoKXt9ZnVuY3Rpb24gdmUoKXt9ZnVuY3Rpb24gR2UoKXt9ZnVuY3Rpb24gS2UoKXt9ZnVuY3Rpb24gd2UoKXt9ZnVuY3Rpb24gX2UoKXt9ZnVuY3Rpb24gJHQoKXt9ZnVuY3Rpb24gcmUoKXt9ZnVuY3Rpb24gaWUoKXt9ZnVuY3Rpb24gT2UoKXt9ZnVuY3Rpb24gb2UoKXt9ZnVuY3Rpb24gTmUoKXt9ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24gY24oKXt9ZnVuY3Rpb24gbGkoKXt9ZnVuY3Rpb24geWEoKXt9ZnVuY3Rpb24gZGEoKXt9ZnVuY3Rpb24gT28oKXt9ZnVuY3Rpb24gZHMoKXt9ZnVuY3Rpb24gRHIoKXt9ZnVuY3Rpb24gbnIoKXt9ZnVuY3Rpb24gZGkoKXt9ZnVuY3Rpb24gRWUoKXt9ZnVuY3Rpb24gWW4oKXt9ZnVuY3Rpb24gSGUoKXt9ZnVuY3Rpb24gVGkoKXt9ZnVuY3Rpb24gZ24oKXt9ZnVuY3Rpb24ga3MoKXt9ZnVuY3Rpb24gcWEoKXt9ZnVuY3Rpb24gTGEoKXt9ZnVuY3Rpb24gR3MoKXt9ZnVuY3Rpb24gTm8oKXt9ZnVuY3Rpb24gdnMoKXt9ZnVuY3Rpb24gbnUoKXt9ZnVuY3Rpb24gJHMoKXt9ZnVuY3Rpb24gTHUoKXt9ZnVuY3Rpb24gZm0oKXt9ZnVuY3Rpb24gYXYoKXt9ZnVuY3Rpb24gVXUoKXt9ZnVuY3Rpb24gWmwoKXt9ZnVuY3Rpb24gUGEoKXt9ZnVuY3Rpb24gQWwoKXt9ZnVuY3Rpb24gdWEoKXt9ZnVuY3Rpb24gYmMoKXt9ZnVuY3Rpb24gQ2MoKXt9ZnVuY3Rpb24gZ2EoKXt9ZnVuY3Rpb24gTWEoKXt9ZnVuY3Rpb24gSGEoKXt9ZnVuY3Rpb24gTGwoKXt9ZnVuY3Rpb24gX2MoKXt9ZnVuY3Rpb24gb3YoKXt9ZnVuY3Rpb24gSmwoKXt9ZnVuY3Rpb24gWjEoKXt9ZnVuY3Rpb24gRmQoKXt9ZnVuY3Rpb24gSjEoKXt9ZnVuY3Rpb24gQmQoKXt9ZnVuY3Rpb24gRTAoKXt9ZnVuY3Rpb24gQmkoKXt9ZnVuY3Rpb24gb24oKXt9ZnVuY3Rpb24ga3IoKXt9ZnVuY3Rpb24gRWkoKXt9ZnVuY3Rpb24gSm8oKXt9ZnVuY3Rpb24gdmMoKXt9ZnVuY3Rpb24gdGYoKXt9ZnVuY3Rpb24gT2MoKXt9ZnVuY3Rpb24gZWYoKXt9ZnVuY3Rpb24gbmYoKXt9ZnVuY3Rpb24gWGkoKXt9ZnVuY3Rpb24gRXMoKXt9ZnVuY3Rpb24geGEoKXt9ZnVuY3Rpb24geGkoKXt9ZnVuY3Rpb24gV2MoKXt9ZnVuY3Rpb24gQ2UoKXt9ZnVuY3Rpb24gZ3AoKXt9ZnVuY3Rpb24gQmUoKXt9ZnVuY3Rpb24gRmYoKXt9ZnVuY3Rpb24gZGcoKXt9ZnVuY3Rpb24gZG0oKXt9ZnVuY3Rpb24gcGsoKXt9ZnVuY3Rpb24geDMoKXt9ZnVuY3Rpb24gTWwoKXt9ZnVuY3Rpb24gVDAoKXt9ZnVuY3Rpb24gY3YoKXt9ZnVuY3Rpb24gRjUoKXt9ZnVuY3Rpb24gamIoKXt9ZnVuY3Rpb24gQjUoKXt9ZnVuY3Rpb24gbDEoKXt9ZnVuY3Rpb24gdGQoKXt9ZnVuY3Rpb24gZWQoKXt9ZnVuY3Rpb24gUjUoKXt9ZnVuY3Rpb24gdXYoKXt9ZnVuY3Rpb24gajUoKXt9ZnVuY3Rpb24gcHAoKXt9ZnVuY3Rpb24gJDUoKXt9ZnVuY3Rpb24gazMoKXt9ZnVuY3Rpb24gZ20oKXt9ZnVuY3Rpb24gZ2coKXt9ZnVuY3Rpb24gd0woKXt9ZnVuY3Rpb24gYmwoKXt9ZnVuY3Rpb24gV1AoKXt9ZnVuY3Rpb24gU2MoKXt9ZnVuY3Rpb24gUUsoKXt9ZnVuY3Rpb24gJGIoKXt9ZnVuY3Rpb24gWksoKXt9ZnVuY3Rpb24gSVQoKXt9ZnVuY3Rpb24gSksoKXt9ZnVuY3Rpb24gS1AoKXt9ZnVuY3Rpb24gQmYoKXt9ZnVuY3Rpb24gcG0oKXt9ZnVuY3Rpb24gbUwoKXt9ZnVuY3Rpb24gWVAoKXt9ZnVuY3Rpb24gYnAoKXt9ZnVuY3Rpb24gYm0oKXt9ZnVuY3Rpb24gdFkoKXt9ZnVuY3Rpb24gemIoKXt9ZnVuY3Rpb24gZVkoKXt9ZnVuY3Rpb24gblkoKXt9ZnVuY3Rpb24gejUoKXt9ZnVuY3Rpb24gRFQoKXt9ZnVuY3Rpb24gWFAoKXt9ZnVuY3Rpb24gYmsoKXt9ZnVuY3Rpb24gclkoKXt9ZnVuY3Rpb24gdmsoKXt9ZnVuY3Rpb24gaVkoKXt9ZnVuY3Rpb24gc1koKXt9ZnVuY3Rpb24gYVkoKXt9ZnVuY3Rpb24gb1koKXt9ZnVuY3Rpb24gY1koKXt9ZnVuY3Rpb24gdVkoKXt9ZnVuY3Rpb24gbFkoKXt9ZnVuY3Rpb24gaFkoKXt9ZnVuY3Rpb24gZlkoKXt9ZnVuY3Rpb24gZFkoKXt9ZnVuY3Rpb24gZ1koKXt9ZnVuY3Rpb24geUwoKXt9ZnVuY3Rpb24gcFkoKXt9ZnVuY3Rpb24gYlkoKXt9ZnVuY3Rpb24gT1QoKXt9ZnVuY3Rpb24gUVAoKXt9ZnVuY3Rpb24gcTUoKXt9ZnVuY3Rpb24gdlkoKXt9ZnVuY3Rpb24gd1koKXt9ZnVuY3Rpb24gbVkoKXt9ZnVuY3Rpb24geVkoKXt9ZnVuY3Rpb24geFkoKXt9ZnVuY3Rpb24gTlQoKXt9ZnVuY3Rpb24geEwoKXt9ZnVuY3Rpb24gWlAoKXt9ZnVuY3Rpb24gRTMoKXt9ZnVuY3Rpb24gVDMoKXt9ZnVuY3Rpb24ga1koKXt9ZnVuY3Rpb24gcmYoKXt9ZnVuY3Rpb24gSDUoKXt9ZnVuY3Rpb24gRVkoKXt9ZnVuY3Rpb24gd2soKXt9ZnVuY3Rpb24gUmQoKXt9ZnVuY3Rpb24gVFkoKXt9ZnVuY3Rpb24gQ1koKXt9ZnVuY3Rpb24gX1koKXt9ZnVuY3Rpb24gU1koKXt9ZnVuY3Rpb24gUFQoKXt9ZnVuY3Rpb24ga0woKXt9ZnVuY3Rpb24gSlAoKXt9ZnVuY3Rpb24gRUwoKXt9ZnVuY3Rpb24gRzUoKXt9ZnVuY3Rpb24gQVkoKXt9ZnVuY3Rpb24gdEYoKXt9ZnVuY3Rpb24gZUYoKXt9ZnVuY3Rpb24gTFkoKXt9ZnVuY3Rpb24gTVkoKXt9ZnVuY3Rpb24gSVkoKXt9ZnVuY3Rpb24gRFkoKXt9ZnVuY3Rpb24gT1koKXt9ZnVuY3Rpb24gTlkoKXt9ZnVuY3Rpb24gamQoKXt9ZnVuY3Rpb24gbHYoKXt9ZnVuY3Rpb24gUFkoKXt9ZnVuY3Rpb24gbkYoKXt9ZnVuY3Rpb24gckYoKXt9ZnVuY3Rpb24gRlkoKXt9ZnVuY3Rpb24gQzMoKXt9ZnVuY3Rpb24gbWsoKXt9ZnVuY3Rpb24gVEwoKXt9ZnVuY3Rpb24gdm0oKXt9ZnVuY3Rpb24geWsoKXt9ZnVuY3Rpb24gQlkoKXt9ZnVuY3Rpb24gRlQoKXt9ZnVuY3Rpb24gbmQoKXt9ZnVuY3Rpb24gaUYoKXt9ZnVuY3Rpb24gQ0woKXt9ZnVuY3Rpb24geGsoKXt9ZnVuY3Rpb24gX0woKXt9ZnVuY3Rpb24gc0YoKXt9ZnVuY3Rpb24gUlkoKXt9ZnVuY3Rpb24gU0woKXt9ZnVuY3Rpb24galkoKXt9ZnVuY3Rpb24gJFkoKXt9ZnVuY3Rpb24gYUYoKXt9ZnVuY3Rpb24gVjUoKXt9ZnVuY3Rpb24gb0YoKXt9ZnVuY3Rpb24gVTUoKXt9ZnVuY3Rpb24gelkoKXt9ZnVuY3Rpb24gQUwoKXt9ZnVuY3Rpb24gcVkoKXt9ZnVuY3Rpb24gSFkoKXt9ZnVuY3Rpb24gR1koKXt9ZnVuY3Rpb24gVlkoKXt9ZnVuY3Rpb24gY0YoKXt9ZnVuY3Rpb24gVVkoKXt9ZnVuY3Rpb24gV1koKXt9ZnVuY3Rpb24gS1koKXt9ZnVuY3Rpb24gdUYoKXt9ZnVuY3Rpb24gWVkoKXt9ZnVuY3Rpb24gWFkoKXt9ZnVuY3Rpb24gUVkoKXt9ZnVuY3Rpb24gbEYoKXt9ZnVuY3Rpb24gWlkoKXt9ZnVuY3Rpb24gSlkoKXt9ZnVuY3Rpb24gaEYoKXt9ZnVuY3Rpb24gZkYoKXt9ZnVuY3Rpb24gZEYoKXt9ZnVuY3Rpb24gdFgoKXt9ZnVuY3Rpb24gZVgoKXt9ZnVuY3Rpb24ga2soKXt9ZnVuY3Rpb24gVzUoKXt9ZnVuY3Rpb24gQlQoKXt9ZnVuY3Rpb24gblgoKXt9ZnVuY3Rpb24gTEwoKXt9ZnVuY3Rpb24gUlQoKXt9ZnVuY3Rpb24gTUwoKXt9ZnVuY3Rpb24gZ0YoKXt9ZnVuY3Rpb24gcEYoKXt9ZnVuY3Rpb24gclgoKXt9ZnVuY3Rpb24gaVgoKXt9ZnVuY3Rpb24gc1goKXt9ZnVuY3Rpb24gYkYoKXt9ZnVuY3Rpb24gdkYoKXt9ZnVuY3Rpb24gYVgoKXt9ZnVuY3Rpb24gb1goKXt9ZnVuY3Rpb24gY1goKXt9ZnVuY3Rpb24gdVgoKXt9ZnVuY3Rpb24gbFgoKXt9ZnVuY3Rpb24gd0YoKXt9ZnVuY3Rpb24gaFgoKXt9ZnVuY3Rpb24gZlgoKXt9ZnVuY3Rpb24gZFgoKXt9ZnVuY3Rpb24gZ1goKXt9ZnVuY3Rpb24gbUYoKXt9ZnVuY3Rpb24galQoKXt9ZnVuY3Rpb24gcFgoKXt9ZnVuY3Rpb24gYlgoKXt9ZnVuY3Rpb24geUYoKXt9ZnVuY3Rpb24gdlgoKXt9ZnVuY3Rpb24gd1goKXt9ZnVuY3Rpb24gbVgoKXt9ZnVuY3Rpb24geVgoKXt9ZnVuY3Rpb24geFgoKXt9ZnVuY3Rpb24ga1goKXt9ZnVuY3Rpb24geEYoKXt9ZnVuY3Rpb24gRVgoKXt9ZnVuY3Rpb24ga0YoKXt9ZnVuY3Rpb24gVFgoKXt9ZnVuY3Rpb24gQ1goKXt9ZnVuY3Rpb24gX1goKXt9ZnVuY3Rpb24gJFQoKXt9ZnVuY3Rpb24gU1goKXt9ZnVuY3Rpb24gelQoKXt9ZnVuY3Rpb24gQVgoKXt9ZnVuY3Rpb24gRUYoKXt9ZnVuY3Rpb24gVEYoKXt9ZnVuY3Rpb24gQ0YoKXt9ZnVuY3Rpb24gX0YoKXt9ZnVuY3Rpb24gaHYoKXt9ZnVuY3Rpb24gU0YoKXt9ZnVuY3Rpb24gQUYoKXt9ZnVuY3Rpb24gTEYoKXt9ZnVuY3Rpb24gTUYoKXt9ZnVuY3Rpb24gTFgoKXt9ZnVuY3Rpb24gSzUoKXt9ZnVuY3Rpb24gcVQoKXt9ZnVuY3Rpb24gXzMoKXt9ZnVuY3Rpb24gTVgoKXt9ZnVuY3Rpb24gSVgoKXt9ZnVuY3Rpb24gSFQoKXt9ZnVuY3Rpb24gRFgoKXt9ZnVuY3Rpb24gT1goKXt9ZnVuY3Rpb24gTlgoKXt9ZnVuY3Rpb24gUFgoKXt9ZnVuY3Rpb24gRlgoKXt9ZnVuY3Rpb24gQlgoKXt9ZnVuY3Rpb24gUlgoKXt9ZnVuY3Rpb24galgoKXt9ZnVuY3Rpb24gJFgoKXt9ZnVuY3Rpb24gelgoKXt9ZnVuY3Rpb24gcVgoKXt9ZnVuY3Rpb24gSUwoKXt9ZnVuY3Rpb24gSUYoKXt9ZnVuY3Rpb24gSFgoKXt9ZnVuY3Rpb24gR1goKXt9ZnVuY3Rpb24gVlgoKXt9ZnVuY3Rpb24gREYoKXt9ZnVuY3Rpb24gVVgoKXt9ZnVuY3Rpb24gV1goKXt9ZnVuY3Rpb24gS1goKXt9ZnVuY3Rpb24gWVgoKXt9ZnVuY3Rpb24gWFgoKXt9ZnVuY3Rpb24gUVgoKXt9ZnVuY3Rpb24gT0YoKXt9ZnVuY3Rpb24gTkYoKXt9ZnVuY3Rpb24gWlgoKXt9ZnVuY3Rpb24gUEYoKXt9ZnVuY3Rpb24gRkYoKXt9ZnVuY3Rpb24gSlgoKXt9ZnVuY3Rpb24gdFEoKXt9ZnVuY3Rpb24gZVEoKXt9ZnVuY3Rpb24gREwoKXt9ZnVuY3Rpb24gblEoKXt9ZnVuY3Rpb24gRWsoKXt9ZnVuY3Rpb24gclEoKXt9ZnVuY3Rpb24gaVEoKXt9ZnVuY3Rpb24gc1EoKXt9ZnVuY3Rpb24gQkYoKXt9ZnVuY3Rpb24gYVEoKXt9ZnVuY3Rpb24gb1EoKXt9ZnVuY3Rpb24gY1EoKXt9ZnVuY3Rpb24gdVEoKXt9ZnVuY3Rpb24gbFEoKXt9ZnVuY3Rpb24gaFEoKXt9ZnVuY3Rpb24gZlEoKXt9ZnVuY3Rpb24gZFEoKXt9ZnVuY3Rpb24gZ1EoKXt9ZnVuY3Rpb24gcFEoKXt9ZnVuY3Rpb24gYlEoKXt9ZnVuY3Rpb24gdlEoKXt9ZnVuY3Rpb24gWTUoKXt9ZnVuY3Rpb24gUkYoKXt9ZnVuY3Rpb24gd1EoKXt9ZnVuY3Rpb24gbVEoKXt9ZnVuY3Rpb24geVEoKXt9ZnVuY3Rpb24gakYoKXt9ZnVuY3Rpb24geFEoKXt9ZnVuY3Rpb24gR1QoKXt9ZnVuY3Rpb24ga1EoKXt9ZnVuY3Rpb24gRVEoKXt9ZnVuY3Rpb24gVFEoKXt9ZnVuY3Rpb24gQ1EoKXt9ZnVuY3Rpb24gX1EoKXt9ZnVuY3Rpb24gU1EoKXt9ZnVuY3Rpb24gQVEoKXt9ZnVuY3Rpb24gTFEoKXt9ZnVuY3Rpb24gTVEoKXt9ZnVuY3Rpb24gSVEoKXt9ZnVuY3Rpb24gWDUoKXt9ZnVuY3Rpb24gRFEoKXt9ZnVuY3Rpb24gT1EoKXt9ZnVuY3Rpb24gTlEoKXt9ZnVuY3Rpb24gUFEoKXt9ZnVuY3Rpb24gRlEoKXt9ZnVuY3Rpb24gQlEoKXt9ZnVuY3Rpb24gUlEoKXt9ZnVuY3Rpb24galEoKXt9ZnVuY3Rpb24gVlQoKXt9ZnVuY3Rpb24gJFEoKXt9ZnVuY3Rpb24gelEoKXt9ZnVuY3Rpb24gcVEoKXt9ZnVuY3Rpb24gSFEoKXt9ZnVuY3Rpb24gR1EoKXt9ZnVuY3Rpb24gVlEoKXt9ZnVuY3Rpb24gVVEoKXt9ZnVuY3Rpb24gV1EoKXt9ZnVuY3Rpb24gUTUoKXt9ZnVuY3Rpb24gJEYoKXt9ZnVuY3Rpb24gS1EoKXt9ZnVuY3Rpb24gT0woKXt9ZnVuY3Rpb24gWVEoKXt9ZnVuY3Rpb24gWFEoKXt9ZnVuY3Rpb24gUVEoKXt9ZnVuY3Rpb24gWlEoKXt9ZnVuY3Rpb24gSlEoKXt9ZnVuY3Rpb24gdFooKXt9ZnVuY3Rpb24gZVooKXt9ZnVuY3Rpb24gekYoKXt9ZnVuY3Rpb24gblooKXt9ZnVuY3Rpb24gcUYoKXt9ZnVuY3Rpb24gclooKXt9ZnVuY3Rpb24gSEYoKXt9ZnVuY3Rpb24gR0YoKXt9ZnVuY3Rpb24gVkYoKXt9ZnVuY3Rpb24gaVooKXt9ZnVuY3Rpb24gc1ooKXt9ZnVuY3Rpb24gVVQoKXt9ZnVuY3Rpb24gTkwoKXt9ZnVuY3Rpb24gV1QoKXt9ZnVuY3Rpb24gYVooKXt9ZnVuY3Rpb24gb1ooKXt9ZnVuY3Rpb24gUEwoKXt9ZnVuY3Rpb24gY1ooKXt9ZnVuY3Rpb24gdVooKXt9ZnVuY3Rpb24gVUYoKXt9ZnVuY3Rpb24gbFooKXt9ZnVuY3Rpb24gaFooKXt9ZnVuY3Rpb24gZlooKXt9ZnVuY3Rpb24gZFooKXt9ZnVuY3Rpb24gZ1ooKXt9ZnVuY3Rpb24gcFooKXt9ZnVuY3Rpb24gYlooKXt9ZnVuY3Rpb24gdlooKXt9ZnVuY3Rpb24gd1ooKXt9ZnVuY3Rpb24gbVooKXt9ZnVuY3Rpb24gcGcoKXt9ZnVuY3Rpb24geVooKXt9ZnVuY3Rpb24gd20oKXt9ZnVuY3Rpb24gV0YoKXt9ZnVuY3Rpb24geFooKXt9ZnVuY3Rpb24ga1ooKXt9ZnVuY3Rpb24gRVooKXt9ZnVuY3Rpb24gVFooKXt9ZnVuY3Rpb24gQ1ooKXt9ZnVuY3Rpb24gX1ooKXt9ZnVuY3Rpb24gU1ooKXt9ZnVuY3Rpb24gQVooKXt9ZnVuY3Rpb24gTFooKXt9ZnVuY3Rpb24gQWMoKXt9ZnVuY3Rpb24gTVooKXt9ZnVuY3Rpb24gS1QoKXt9ZnVuY3Rpb24gdGMoKXt9ZnVuY3Rpb24gS2MoKXt9ZnVuY3Rpb24gemkoKXt9ZnVuY3Rpb24gRkwoKXt9ZnVuY3Rpb24gSVooKXt9ZnVuY3Rpb24gRFooKXt9ZnVuY3Rpb24gT1ooKXt9ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gbW0oKXt9ZnVuY3Rpb24gVWUoKXt9ZnVuY3Rpb24gTlooKXt9ZnVuY3Rpb24gUFooKXt9ZnVuY3Rpb24gRlooKXt9ZnVuY3Rpb24gQlooKXt9ZnVuY3Rpb24gUlooKXt9ZnVuY3Rpb24gS0YoKXt9ZnVuY3Rpb24galooKXt9ZnVuY3Rpb24gJFooKXt9ZnVuY3Rpb24gQkwoKXt9ZnVuY3Rpb24gelooKXt9ZnVuY3Rpb24gV3UoKXt9ZnVuY3Rpb24gTXUoKXt9ZnVuY3Rpb24gcVooKXt9ZnVuY3Rpb24gSFooKXt9ZnVuY3Rpb24gR1ooKXt9ZnVuY3Rpb24geW0oKXt9ZnVuY3Rpb24gZnYoKXt9ZnVuY3Rpb24gdnAoKXt9ZnVuY3Rpb24gcmQoKXt9ZnVuY3Rpb24gSjUoKXt9ZnVuY3Rpb24gWVQoKXt9ZnVuY3Rpb24gVGsoKXt9ZnVuY3Rpb24gWUYoKXt9ZnVuY3Rpb24gVlooKXt9ZnVuY3Rpb24gQ2soKXt9ZnVuY3Rpb24gWEYoKXt9ZnVuY3Rpb24gVVooKXt9ZnVuY3Rpb24gWFQoKXt9ZnVuY3Rpb24gdHgoKXt9ZnVuY3Rpb24gZXgoKXt9ZnVuY3Rpb24gd3AoKXt9ZnVuY3Rpb24gUUYoKXt9ZnVuY3Rpb24gX2soKXt9ZnVuY3Rpb24gWkYoKXt9ZnVuY3Rpb24gSkYoKXt9ZnVuY3Rpb24gbngoKXt9ZnVuY3Rpb24gcWIoKXt9ZnVuY3Rpb24gQzAoKXt9ZnVuY3Rpb24gbXAoKXt9ZnVuY3Rpb24gUzMoKXt9ZnVuY3Rpb24gU2soKXt9ZnVuY3Rpb24gUVQoKXt9ZnVuY3Rpb24gdEIoKXt9ZnVuY3Rpb24gV1ooKXt9ZnVuY3Rpb24gZUIoKXt9ZnVuY3Rpb24gbkIoKXt9ZnVuY3Rpb24gckIoKXt9ZnVuY3Rpb24gQWsoKXt9ZnVuY3Rpb24gaUIoKXt9ZnVuY3Rpb24gc0IoKXt9ZnVuY3Rpb24gS1ooKXt9ZnVuY3Rpb24gTGsoKXt9ZnVuY3Rpb24gTWsoKXt9ZnVuY3Rpb24geG0oKXt9ZnVuY3Rpb24gUkwoKXt9ZnVuY3Rpb24gWVooKXt9ZnVuY3Rpb24gWFooKXt9ZnVuY3Rpb24gUVooKXt9ZnVuY3Rpb24gWlooKXt9ZnVuY3Rpb24gSlooKXt9ZnVuY3Rpb24gdEooKXt9ZnVuY3Rpb24gZUooKXt9ZnVuY3Rpb24gbkooKXt9ZnVuY3Rpb24gYUIoKXt9ZnVuY3Rpb24gckooKXt9ZnVuY3Rpb24gaUooKXt9ZnVuY3Rpb24gc0ooKXt9ZnVuY3Rpb24gb0IoKXt9ZnVuY3Rpb24gSWsoKXt9ZnVuY3Rpb24gWlQoKXt9ZnVuY3Rpb24gY0IoKXt9ZnVuY3Rpb24gYUooKXt9ZnVuY3Rpb24gdUIoKXt9ZnVuY3Rpb24gbEIoKXt9ZnVuY3Rpb24gb0ooKXt9ZnVuY3Rpb24gSlQoKXt9ZnVuY3Rpb24ga20oKXt9ZnVuY3Rpb24gaEIoKXt9ZnVuY3Rpb24gZkIoKXt9ZnVuY3Rpb24gY0ooKXt9ZnVuY3Rpb24gdUooKXt9ZnVuY3Rpb24gdDkoKXt9ZnVuY3Rpb24gZEIoKXt9ZnVuY3Rpb24gZ0IoKXt9ZnVuY3Rpb24gdWMoKXt9ZnVuY3Rpb24gbEooKXt9ZnVuY3Rpb24gcEIoKXt9ZnVuY3Rpb24gZTkoKXt9ZnVuY3Rpb24gaEooKXt9ZnVuY3Rpb24gZkooKXt9ZnVuY3Rpb24gbjkoKXt9ZnVuY3Rpb24gYkIoKXt9ZnVuY3Rpb24gcjkoKXt9ZnVuY3Rpb24gaTkoKXt9ZnVuY3Rpb24gUmYoKXt9ZnVuY3Rpb24gakwoKXt9ZnVuY3Rpb24gJEwoKXt9ZnVuY3Rpb24gcngoKXt9ZnVuY3Rpb24gZEooKXt9ZnVuY3Rpb24gZ0ooKXt9ZnVuY3Rpb24gcEooKXt9ZnVuY3Rpb24gYkooKXt9ZnVuY3Rpb24gRW0oKXt9ZnVuY3Rpb24gdkIoKXt9ZnVuY3Rpb24gaXgoKXt9ZnVuY3Rpb24gaDEoKXt9ZnVuY3Rpb24gd0IoKXt9ZnVuY3Rpb24gbUIoKXt9ZnVuY3Rpb24geUIoKXt9ZnVuY3Rpb24geEIoKXt9ZnVuY3Rpb24ga0IoKXt9ZnVuY3Rpb24gRUIoKXt9ZnVuY3Rpb24gamYoKXt9ZnVuY3Rpb24gaHUoKXt9ZnVuY3Rpb24gdkooKXt9ZnVuY3Rpb24gd0ooKXt9ZnVuY3Rpb24gbUooKXt9ZnVuY3Rpb24gZnUoKXt9ZnVuY3Rpb24gczkoKXt9ZnVuY3Rpb24gVEIoKXt9ZnVuY3Rpb24gQ0IoKXt9ZnVuY3Rpb24gc3goKXt9ZnVuY3Rpb24geUooKXt9ZnVuY3Rpb24gRGsoKXt9ZnVuY3Rpb24geEooKXt9ZnVuY3Rpb24gX0IoKXt9ZnVuY3Rpb24ga0ooKXt9ZnVuY3Rpb24gRUooKXt9ZnVuY3Rpb24gYTkoKXt9ZnVuY3Rpb24gU0IoKXt9ZnVuY3Rpb24gekwoKXt9ZnVuY3Rpb24gbzkoKXt9ZnVuY3Rpb24gVEooKXt9ZnVuY3Rpb24gQ0ooKXt9ZnVuY3Rpb24gcUwoKXt9ZnVuY3Rpb24gYzkoKXt9ZnVuY3Rpb24gZjEoKXt9ZnVuY3Rpb24gT2soKXt9ZnVuY3Rpb24gX0ooKXt9ZnVuY3Rpb24gTmsoKXt9ZnVuY3Rpb24gSEwoKXt9ZnVuY3Rpb24gSGIoKXt9ZnVuY3Rpb24gdTkoKXt9ZnVuY3Rpb24gR0woKXt9ZnVuY3Rpb24gJGYoKXt9ZnVuY3Rpb24gbDkoKXt9ZnVuY3Rpb24gZDEoKXt9ZnVuY3Rpb24gZzEoKXt9ZnVuY3Rpb24gU0ooKXt9ZnVuY3Rpb24gQUooKXt9ZnVuY3Rpb24gQTMoKXt9ZnVuY3Rpb24gUGsoKXt9ZnVuY3Rpb24gRmsoKXt9ZnVuY3Rpb24gaDkoKXt9ZnVuY3Rpb24gTEooKXt9ZnVuY3Rpb24gYXgoKXt9ZnVuY3Rpb24gVkwoKXt9ZnVuY3Rpb24gQUIoKXt9ZnVuY3Rpb24gTUooKXt9ZnVuY3Rpb24gZjkoKXtJOSgpfWZ1bmN0aW9uIElKKCl7U2l0KCl9ZnVuY3Rpb24gTEIoKXtpXygpfWZ1bmN0aW9uIFVMKCl7S3ooKX1mdW5jdGlvbiBESigpe1A0dCgpfWZ1bmN0aW9uIGQ5KCl7WmYoKX1mdW5jdGlvbiBPSigpe1UzdCgpfWZ1bmN0aW9uIE5KKCl7SkkoKX1mdW5jdGlvbiBQSigpe3dNKCl9ZnVuY3Rpb24gRkooKXt2TSgpfWZ1bmN0aW9uIEJKKCl7R00oKX1mdW5jdGlvbiBNQigpe3lHdCgpfWZ1bmN0aW9uIFJKKCl7WHgoKX1mdW5jdGlvbiBqSigpe0xSKCl9ZnVuY3Rpb24gJEooKXtJSnQoKX1mdW5jdGlvbiBJQigpe0dlZSgpfWZ1bmN0aW9uIHpKKCl7dXRlKCl9ZnVuY3Rpb24gcUooKXtfUXQoKX1mdW5jdGlvbiBnOSgpe0o4KCl9ZnVuY3Rpb24gSEooKXtacCgpfWZ1bmN0aW9uIEdKKCl7VmVlKCl9ZnVuY3Rpb24gVkooKXttWnQoKX1mdW5jdGlvbiBVSigpe0F4dCgpfWZ1bmN0aW9uIFdKKCl7RHNlKCl9ZnVuY3Rpb24gS0ooKXtTUXQoKX1mdW5jdGlvbiBEQigpe1RlKCl9ZnVuY3Rpb24gWUooKXtDUXQoKX1mdW5jdGlvbiBPQigpe1VlZSgpfWZ1bmN0aW9uIFhKKCl7WW5lKCl9ZnVuY3Rpb24gV0woKXtMUXQoKX1mdW5jdGlvbiBRSigpe2d0ZSgpfWZ1bmN0aW9uIE5CKCl7eEd0KCl9ZnVuY3Rpb24gWkooKXtiNXQoKX1mdW5jdGlvbiBQQigpe2F5KCl9ZnVuY3Rpb24gSkooKXttbmUoKX1mdW5jdGlvbiBGQigpe3JEKCl9ZnVuY3Rpb24gQkIoKXtuYXQoKX1mdW5jdGlvbiBSQigpe3VzdCgpfWZ1bmN0aW9uIEtMKCl7aHcoKX1mdW5jdGlvbiBMMygpe2Z5dCgpfWZ1bmN0aW9uIHA5KCl7QVF0KCl9ZnVuY3Rpb24gaWQoKXskdWUoKX1mdW5jdGlvbiBqQigpe2Q1dCgpfWZ1bmN0aW9uIEJrKCl7S3N0KCl9ZnVuY3Rpb24gWUwoKXtPJCgpfWZ1bmN0aW9uIHR0dCgpe2VxKCl9ZnVuY3Rpb24geXAoKXtjaSgpfWZ1bmN0aW9uICRCKCl7YnooKX1mdW5jdGlvbiB6Qigpe3kzdCgpfWZ1bmN0aW9uIHFCKCl7eXEoKX1mdW5jdGlvbiB0aCgpe3BLdCgpfWZ1bmN0aW9uIFhMKCl7aGl0KCl9ZnVuY3Rpb24gSEIoKXt0eHQoKX1mdW5jdGlvbiBSayh0KXtPbih0KX1mdW5jdGlvbiBiOSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBqayh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHQih0KXt0aGlzLmE9dH1mdW5jdGlvbiBveCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkdih0KXt0aGlzLmE9dH1mdW5jdGlvbiAkayh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWQih0KXt0aGlzLmE9dH1mdW5jdGlvbiBldHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUUwodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTTModCl7dGhpcy5hPXR9ZnVuY3Rpb24gWkwodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdjkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHc5KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG05KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGN4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEpMKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHRNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFVCKHQpe3RoaXMuYj10fWZ1bmN0aW9uIGF0dCh0KXt0aGlzLmM9dH1mdW5jdGlvbiBvdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gY3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHV0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGZ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHV4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHB0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6ayh0KXt0aGlzLmE9dH1mdW5jdGlvbiBraCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBidHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbHgodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcWsodCl7dGhpcy5hPXR9ZnVuY3Rpb24geTkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSGsodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYmcoKXt0aGlzLmE9W119ZnVuY3Rpb24gdnR0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gZXB0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gbnB0KHQsZSl7dC5iPWV9ZnVuY3Rpb24gcnB0KHQsZSl7dC5iPWV9ZnVuY3Rpb24gaXB0KHQsZSl7dC5iPWV9ZnVuY3Rpb24gZU0odCxlKXt0Lmo9ZX1mdW5jdGlvbiBzcHQodCxlKXt0Lmc9ZX1mdW5jdGlvbiBhcHQodCxlKXt0Lmk9ZX1mdW5jdGlvbiB3dHQodCxlKXt0LmM9ZX1mdW5jdGlvbiBwMSh0LGUpe3QuZD1lfWZ1bmN0aW9uIG10dCh0LGUpe3QuZD1lfWZ1bmN0aW9uIG9wdCh0LGUpe3QuYz1lfWZ1bmN0aW9uIF8wKHQsZSl7dC5rPWV9ZnVuY3Rpb24geXR0KHQsZSl7dC5jPWV9ZnVuY3Rpb24gV0IodCxlKXt0LmM9ZX1mdW5jdGlvbiBLQih0LGUpe3QuYT1lfWZ1bmN0aW9uIHh0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIGNwdCh0LGUpe3QuZj1lfWZ1bmN0aW9uIHVwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIGd2KHQsZSl7dC5iPWV9ZnVuY3Rpb24gbk0odCxlKXt0LmQ9ZX1mdW5jdGlvbiB4OSh0LGUpe3QuaT1lfWZ1bmN0aW9uIFlCKHQsZSl7dC5vPWV9ZnVuY3Rpb24gbHB0KHQsZSl7dC5yPWV9ZnVuY3Rpb24gaHB0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gWEIodCxlKXt0LmI9ZX1mdW5jdGlvbiBwdih0LGUpe3QuZT1lfWZ1bmN0aW9uIGt0dCh0LGUpe3QuZj1lfWZ1bmN0aW9uIGs5KHQsZSl7dC5nPWV9ZnVuY3Rpb24gaHgodCxlKXt0LmU9ZX1mdW5jdGlvbiBmcHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBHayh0LGUpe3QuZj1lfWZ1bmN0aW9uIEV0dCh0LGUpe3Qubj1lfWZ1bmN0aW9uIHZnKHQsZSl7dC5hPWV9ZnVuY3Rpb24gZHB0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gSTModCxlKXt0LmM9ZX1mdW5jdGlvbiBUdHQodCxlKXt0LmM9ZX1mdW5jdGlvbiBDdHQodCxlKXt0LmQ9ZX1mdW5jdGlvbiBRQih0LGUpe3QuZT1lfWZ1bmN0aW9uIFpCKHQsZSl7dC5nPWV9ZnVuY3Rpb24gX3R0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gVmsodCxlKXt0LmM9ZX1mdW5jdGlvbiBFOSh0LGUpe3QuZD1lfWZ1bmN0aW9uIGdwdCh0LGUpe3QuZT1lfWZ1bmN0aW9uIFN0dCh0LGUpe3QuZj1lfWZ1bmN0aW9uIEF0dCh0LGUpe3Quaj1lfWZ1bmN0aW9uIEx0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIHBwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIHdjKHQsZSl7dC5hPWV9ZnVuY3Rpb24gSkIodCl7dC5iPXQuYX1mdW5jdGlvbiBNdHQodCl7dC5jPXQuZC5kfWZ1bmN0aW9uIGZ4KHQpe3RoaXMuZD10fWZ1bmN0aW9uIHdnKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFRtKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGIxKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGR4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEl0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB0Uih0KXt0aGlzLmE9dH1mdW5jdGlvbiBEMyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDbSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBlUih0KXt0aGlzLmE9dH1mdW5jdGlvbiB2MSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGcodCl7dGhpcy5hPXR9ZnVuY3Rpb24geCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBUKHQpe3RoaXMuYj10fWZ1bmN0aW9uIEEodCl7dGhpcy5iPXR9ZnVuY3Rpb24gRCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBPKHQpe3RoaXMuYT10fWZ1bmN0aW9uICQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcSh0KXt0aGlzLmM9dH1mdW5jdGlvbiBTKHQpe3RoaXMuYz10fWZ1bmN0aW9uIEcodCl7dGhpcy5jPXR9ZnVuY3Rpb24gVyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBldCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBhdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBBdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBNdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBEdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBqdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBadCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBLdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBlZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBmZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBnZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBuZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBQZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBwZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBibih0KXt0aGlzLmE9dH1mdW5jdGlvbiB6ZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBEbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBLbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBTbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBXbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBycih0KXt0aGlzLmE9dH1mdW5jdGlvbiB2cih0KXt0aGlzLmE9dH1mdW5jdGlvbiB1cih0KXt0aGlzLmE9dH1mdW5jdGlvbiB0cih0KXt0aGlzLmE9dH1mdW5jdGlvbiB3bih0KXt0aGlzLmE9dH1mdW5jdGlvbiBncih0KXt0aGlzLmE9dH1mdW5jdGlvbiBmcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBKcih0KXt0aGlzLmE9dH1mdW5jdGlvbiB3aSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBLcyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBoaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBncyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBVaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHYSh0KXt0aGlzLmU9dH1mdW5jdGlvbiBZcyh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6cyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBRdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBqbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBfcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBpcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBzcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBJYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBLaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBQbyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBOYyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBaYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBtYyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBKYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB2bCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6Zih0KXt0aGlzLmE9dH1mdW5jdGlvbiB4cCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrcCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxZih0KXt0aGlzLmE9dH1mdW5jdGlvbiBtZyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBzZCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBidih0KXt0aGlzLmE9dH1mdW5jdGlvbiBfbSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBneCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBPMyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBweCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBUOSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBOMyh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkZCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB3MSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6ZCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDOSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHYih0KXt0aGlzLmE9dH1mdW5jdGlvbiBuUih0KXt0aGlzLmE9dH1mdW5jdGlvbiBEdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE50dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBQdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBSdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVWsodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc00odCl7dGhpcy5hPXR9ZnVuY3Rpb24gXzkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gclIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaVIodCl7dGhpcy5hPXR9ZnVuY3Rpb24ganR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVwKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGFNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHNSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFdrKHQpe3RoaXMuYz10fWZ1bmN0aW9uIFRwKHQpe3RoaXMuYj10fWZ1bmN0aW9uICR0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHAkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBiJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHckdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBtJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHgkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFQkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gXyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFMkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBBJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE0kdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBJJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIENwKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJ4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE8kdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBOJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBCJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGokdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHEkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBIJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBVJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEskdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBhUih0KXt0aGlzLmE9dH1mdW5jdGlvbiBZJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFEkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBaJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHR6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBlenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGF6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBvenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gY3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHV6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGZ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBienQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHd6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBtenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHh6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYnB0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEdpKHQpe3RoaXMuYj10fWZ1bmN0aW9uIEV6dCh0KXt0aGlzLmY9dH1mdW5jdGlvbiB2cHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEN6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBfenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEF6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEl6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBvTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBEenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3p0KHQpe3RoaXMuYj10fWZ1bmN0aW9uIHdwdCh0KXt0aGlzLmM9dH1mdW5jdGlvbiBvUih0KXt0aGlzLmU9dH1mdW5jdGlvbiBOenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gY1IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdVIodCl7dGhpcy5hPXR9ZnVuY3Rpb24genR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBGenQodCl7dGhpcy5kPXR9ZnVuY3Rpb24gbXB0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHlwdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB2dih0KXt0aGlzLmU9dH1mdW5jdGlvbiBLV2UoKXt0aGlzLmE9MH1mdW5jdGlvbiBQMygpe3BVdCh0aGlzKX1mdW5jdGlvbiBsZSgpe1lldCh0aGlzKX1mdW5jdGlvbiBDcigpe1l1KHRoaXMpfWZ1bmN0aW9uIHF0dCgpe21YdCh0aGlzKX1mdW5jdGlvbiBCenQoKXt9ZnVuY3Rpb24gd3YoKXt0aGlzLmM9dEx0fWZ1bmN0aW9uIFlXZSh0LGUpe2UuV2IodCl9ZnVuY3Rpb24gUnp0KHQsZSl7dC5iKz1lfWZ1bmN0aW9uIGp6dCh0KXt0LmI9bmV3IHNldH1mdW5jdGlvbiBydCh0KXtyZXR1cm4gdC5lfWZ1bmN0aW9uIFhXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIFFXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIFpXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIEpXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIHRLZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIGVLZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIG5LZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHJLZSgpe2FidCgpLGc1bigpfWZ1bmN0aW9uIGlLZSh0KXt0LmIudGYodC5lKX1mdW5jdGlvbiBTOSh0LGUpe3QuYj1lLXQuYn1mdW5jdGlvbiBBOSh0LGUpe3QuYT1lLXQuYX1mdW5jdGlvbiAkenQodCxlKXtlLmFkKHQuYSl9ZnVuY3Rpb24gc0tlKHQsZSl7RnMoZSx0KX1mdW5jdGlvbiBhS2UodCxlLG4pe3QuT2QobixlKX1mdW5jdGlvbiBjTSh0LGUpe3QuZT1lLGUuYj10fWZ1bmN0aW9uIHhwdCh0KXtoZCgpLHRoaXMuYT10fWZ1bmN0aW9uIHp6dCh0KXtoZCgpLHRoaXMuYT10fWZ1bmN0aW9uIHF6dCh0KXtoZCgpLHRoaXMuYT10fWZ1bmN0aW9uIGtwdCh0KXtHbSgpLHRoaXMuYT10fWZ1bmN0aW9uIEh6dCh0KXtUOCgpLGt1dC5iZSh0KX1mdW5jdGlvbiBWYigpe1pVdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEVwdCgpe1pVdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRwdCgpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gSHR0KCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBHenQoKXtWYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHVNKCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBJdSgpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gTDkoKXtWYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIE9yKCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBlaCgpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gVnp0KCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBsYygpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gVXp0KCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBXenQoKXt0aGlzLmE9dGhpc31mdW5jdGlvbiBsUigpe3RoaXMuQmJ8PTI1Nn1mdW5jdGlvbiBLenQoKXt0aGlzLmI9bmV3IFhWdH1mdW5jdGlvbiBDcHQoKXtDcHQ9WixuZXcgQ3J9ZnVuY3Rpb24gX3B0KCl7VHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gWXp0KHQsZSl7dC5sZW5ndGg9ZX1mdW5jdGlvbiBoUih0LGUpe3VlKHQuYSxlKX1mdW5jdGlvbiBvS2UodCxlKXtCNHQodC5jLGUpfWZ1bmN0aW9uIGNLZSh0LGUpe05zKHQuYixlKX1mdW5jdGlvbiB1S2UodCxlKXtxeih0LmEsZSl9ZnVuY3Rpb24gbEtlKHQsZSl7Rml0KHQuYSxlKX1mdW5jdGlvbiBLayh0LGUpe21pKHQuZSxlKX1mdW5jdGlvbiB2eCh0KXtpcSh0LmMsdC5iKX1mdW5jdGlvbiBoS2UodCxlKXt0LmtjKCkuTmIoZSl9ZnVuY3Rpb24gU3B0KHQpe3RoaXMuYT11bG4odCl9ZnVuY3Rpb24gcXMoKXt0aGlzLmE9bmV3IENyfWZ1bmN0aW9uIFh6dCgpe3RoaXMuYT1uZXcgQ3J9ZnVuY3Rpb24gZlIoKXt0aGlzLmE9bmV3IGxlfWZ1bmN0aW9uIEd0dCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gQXB0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBFaCgpe3RoaXMuYT1uZXcgYXZ9ZnVuY3Rpb24gVWIoKXt0aGlzLmE9bmV3IFNKdH1mdW5jdGlvbiBMcHQoKXt0aGlzLmE9bmV3IEY1fWZ1bmN0aW9uIE1wdCgpe3RoaXMuYT1uZXcgZkd0fWZ1bmN0aW9uIFF6dCgpe3RoaXMuYT1uZXcgdFp0fWZ1bmN0aW9uIElwdCgpe3RoaXMuYT1uZXcgYlF0fWZ1bmN0aW9uIERwdCgpe3RoaXMuYT1uZXcgJFd0fWZ1bmN0aW9uIFp6dCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gT3B0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBKenQoKXt0aGlzLmE9bmV3IGxlfWZ1bmN0aW9uIHRxdCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gZXF0KCl7dGhpcy5kPW5ldyBsZX1mdW5jdGlvbiBucXQoKXt0aGlzLmE9bmV3IHFzfWZ1bmN0aW9uIHJxdCgpe3RoaXMuYT1uZXcgQ3J9ZnVuY3Rpb24gaXF0KCl7dGhpcy5iPW5ldyBDcn1mdW5jdGlvbiBzcXQoKXt0aGlzLmI9bmV3IGxlfWZ1bmN0aW9uIE5wdCgpe3RoaXMuZT1uZXcgbGV9ZnVuY3Rpb24gYXF0KCl7dGhpcy5kPW5ldyBsZX1mdW5jdGlvbiBvcXQoKXt0aGlzLmE9bmV3IEhKfWZ1bmN0aW9uIGNxdCgpe2xlLmNhbGwodGhpcyl9ZnVuY3Rpb24gUHB0KCl7ZlIuY2FsbCh0aGlzKX1mdW5jdGlvbiB1cXQoKXt4ai5jYWxsKHRoaXMpfWZ1bmN0aW9uIGxxdCgpe09wdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFZ0dCgpe005LmNhbGwodGhpcyl9ZnVuY3Rpb24gTTkoKXtCenQuY2FsbCh0aGlzKX1mdW5jdGlvbiB3eCgpe0J6dC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEZwdCgpe3d4LmNhbGwodGhpcyl9ZnVuY3Rpb24gaHF0KCl7V1h0LmNhbGwodGhpcyl9ZnVuY3Rpb24gZnF0KCl7V1h0LmNhbGwodGhpcyl9ZnVuY3Rpb24gZHF0KCl7SHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gZ3F0KCl7SHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gcHF0KCl7SHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gYnF0KCl7R3B0LmNhbGwodGhpcyl9ZnVuY3Rpb24gRHUoKXtRaS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEJwdCgpe3ltLmNhbGwodGhpcyl9ZnVuY3Rpb24gUnB0KCl7eW0uY2FsbCh0aGlzKX1mdW5jdGlvbiB2cXQoKXtPcXQuY2FsbCh0aGlzKX1mdW5jdGlvbiB3cXQoKXtPcXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBtcXQoKXtDci5jYWxsKHRoaXMpfWZ1bmN0aW9uIHlxdCgpe0NyLmNhbGwodGhpcyl9ZnVuY3Rpb24geHF0KCl7Q3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBrcXQoKXtxcy5jYWxsKHRoaXMpfWZ1bmN0aW9uIFV0dCgpe3plZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEVxdCgpe2xSLmNhbGwodGhpcyl9ZnVuY3Rpb24gV3R0KCl7ZzJ0LmNhbGwodGhpcyl9ZnVuY3Rpb24gS3R0KCl7ZzJ0LmNhbGwodGhpcyl9ZnVuY3Rpb24ganB0KCl7Q3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBZdHQoKXtDci5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRxdCgpe0NyLmNhbGwodGhpcyl9ZnVuY3Rpb24gJHB0KCl7X2suY2FsbCh0aGlzKX1mdW5jdGlvbiBDcXQoKXtfay5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9xdCgpeyRwdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFNxdCgpe1ZMLmNhbGwodGhpcyl9ZnVuY3Rpb24gQXF0KHQpe2ZlZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTHF0KHQpe2ZlZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24genB0KHQpe1FMLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBxcHQodCl7bkd0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBmS2UodCl7cXB0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBkS2UodCl7bkd0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZaygpe3RoaXMuYT1uZXcgUWl9ZnVuY3Rpb24gSHB0KCl7dGhpcy5hPW5ldyBxc31mdW5jdGlvbiBHcHQoKXt0aGlzLmE9bmV3IENyfWZ1bmN0aW9uIE1xdCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gSXF0KCl7dGhpcy5qPW5ldyBsZX1mdW5jdGlvbiBWcHQoKXt0aGlzLmE9bmV3IFZGfWZ1bmN0aW9uIERxdCgpe3RoaXMuYT1uZXcgU0h0fWZ1bmN0aW9uIE9xdCgpe3RoaXMuYT1uZXcgUUZ9ZnVuY3Rpb24gWHR0KCl7WHR0PVosYnV0PW5ldyBRcXR9ZnVuY3Rpb24gUXR0KCl7UXR0PVoscHV0PW5ldyBYcXR9ZnVuY3Rpb24gSTkoKXtJOT1aLGd1dD1uZXcgTH1mdW5jdGlvbiBkUigpe2RSPVosbXV0PW5ldyBYVXR9ZnVuY3Rpb24gZ0tlKHQpe3FwdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gcEtlKHQpe3FwdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTnF0KHQpe0xydC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUHF0KHQpe0xydC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRnF0KHQpe2NLdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gWnR0KHQpe1Awbi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gbXYodCl7TW0uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEQ5KHQpe0NSLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBVcHQodCl7Q1IuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEJxdCh0KXtDUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gR28odCl7a1l0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBScXQodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG14KCl7SGsuY2FsbCh0aGlzLHt9KX1mdW5jdGlvbiBnUih0KXt1OCgpLHRoaXMuYT10fWZ1bmN0aW9uIE85KHQpe3QuYj1udWxsLHQuYz0wfWZ1bmN0aW9uIGJLZSh0LGUpe3QuZT1lLGpjZSh0LGUpfWZ1bmN0aW9uIHZLZSh0LGUpe3QuYT1lLHhnbih0KX1mdW5jdGlvbiBKdHQodCxlLG4pe3QuYVtlLmddPW59ZnVuY3Rpb24gd0tlKHQsZSxuKXtCMW4obix0LGUpfWZ1bmN0aW9uIG1LZSh0LGUpe0dRZShlLmksdC5uKX1mdW5jdGlvbiBqcXQodCxlKXtWY24odCkudGQoZSl9ZnVuY3Rpb24geUtlKHQsZSl7cmV0dXJuIHQqdC9lfWZ1bmN0aW9uICRxdCh0LGUpe3JldHVybiB0LmctZS5nfWZ1bmN0aW9uIHhLZSh0KXtyZXR1cm4gbmV3IHk5KHQpfWZ1bmN0aW9uIGtLZSh0KXtyZXR1cm4gbmV3IEhtKHQpfWZ1bmN0aW9uIHBSKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBtbyh0KXtHby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24genF0KHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiB0ZXQodCl7a1l0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBlZXQodCl7bHl0KCksdGhpcy5hPXR9ZnVuY3Rpb24gcXF0KHQpe2dLdCgpLHRoaXMuYT10fWZ1bmN0aW9uIFNtKHQpe09udCgpLHRoaXMuZj10fWZ1bmN0aW9uIG5ldCh0KXtPbnQoKSx0aGlzLmY9dH1mdW5jdGlvbiBYayh0KXtHby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUG4odCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEZvKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBIcXQodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHl4KHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBqZSh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBYdCh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBsTSh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBXcHQodCl7cmV0dXJuIE9uKHQpLHR9ZnVuY3Rpb24gRUtlKHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIE45KHQpe3JldHVybiB0LmI9PXQuY31mdW5jdGlvbiBBbSh0KXtyZXR1cm4hIXQmJnQuYn1mdW5jdGlvbiBUS2UodCl7cmV0dXJuISF0JiZ0Lmt9ZnVuY3Rpb24gQ0tlKHQpe3JldHVybiEhdCYmdC5qfWZ1bmN0aW9uIHdsKHQpe09uKHQpLHRoaXMuYT10fWZ1bmN0aW9uIEtwdCh0KXtyZXR1cm4gbDIodCksdH1mdW5jdGlvbiBQOSh0KXthd3QodCx0Lmxlbmd0aCl9ZnVuY3Rpb24geWcodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFkKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiByZXQodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEYzKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBGOSh0KXtHby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRnIodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGlldCh0KXtEMnQuY2FsbCh0aGlzLHQsMCl9ZnVuY3Rpb24gc2V0KCl7JHd0LmNhbGwodGhpcywxMiwzKX1mdW5jdGlvbiBZcHQoKXtZcHQ9WixYOHQ9bmV3IHB0fWZ1bmN0aW9uIEdxdCgpe0dxdD1aLFk4dD1uZXcgX31mdW5jdGlvbiBiUigpe2JSPVosc1M9bmV3IG10fWZ1bmN0aW9uIFZxdCgpe1ZxdD1aLHlnZT1uZXcgZHR9ZnVuY3Rpb24gVXF0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBYcHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIFdxdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gX0tlKCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBTS2UoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIEFLZSgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gYWV0KCl7dGhpcy5hPUJyKEFyKEthKSl9ZnVuY3Rpb24geHgodCl7aGQoKSx0aGlzLmE9QXIodCl9ZnVuY3Rpb24gS3F0KHQsZSl7dC5UZChlKSxlLlNkKHQpfWZ1bmN0aW9uIExLZSh0LGUpe3QuYS5lYygpLk1jKGUpfWZ1bmN0aW9uIE1LZSh0LGUsbil7dC5jLmxmKGUsbil9ZnVuY3Rpb24gUXB0KHQpe21vLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBvZCh0KXtQbi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geGcoKXtkeC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIEI5KCl7ZHguY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBfcCgpe2R4LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gTG0oKXtkeC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIFpwdCh0KXttby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUWsodCl7VC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gb2V0KHQpe2ZqLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZcXQodCl7UWsuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFhxdCgpe3c5LmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBRcXQoKXt3OS5jYWxsKHRoaXMsbnVsbCl9ZnVuY3Rpb24gdlIoKXt2Uj1aLFQ4KCl9ZnVuY3Rpb24gWnF0KCl7WnF0PVosTWdlPWxkbigpfWZ1bmN0aW9uIEpxdCh0KXtyZXR1cm4gdC5hP3QuYjowfWZ1bmN0aW9uIElLZSh0KXtyZXR1cm4gdC5hP3QuYjowfWZ1bmN0aW9uIERLZSh0LGUpe3JldHVybiB0LmEtZS5hfWZ1bmN0aW9uIE9LZSh0LGUpe3JldHVybiB0LmEtZS5hfWZ1bmN0aW9uIE5LZSh0LGUpe3JldHVybiB0LmEtZS5hfWZ1bmN0aW9uIHdSKHQsZSl7cmV0dXJuIE1tdCh0LGUpfWZ1bmN0aW9uIG90KHQsZSl7cmV0dXJuIG1RdCh0LGUpfWZ1bmN0aW9uIFBLZSh0LGUpe3JldHVybiBlIGluIHQuYX1mdW5jdGlvbiB0SHQodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiBGS2UodCxlKXtyZXR1cm4gdC5iPWUsdH1mdW5jdGlvbiBlSHQodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBCS2UodCxlKXtyZXR1cm4gdC5nPWUsdH1mdW5jdGlvbiBKcHQodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiB0YnQodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiBSS2UodCxlKXtyZXR1cm4gdC5rPWUsdH1mdW5jdGlvbiBlYnQodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBqS2UodCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiBuYnQodCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiAkS2UodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiB6S2UodCxlKXt0LmI9ITAsdC5kPWV9ZnVuY3Rpb24gcUtlKHQsZSl7dC5iPW5ldyB5byhlKX1mdW5jdGlvbiBIS2UodCxlLG4pe2UudGQodC5hW25dKX1mdW5jdGlvbiBHS2UodCxlLG4pe2Uud2UodC5hW25dKX1mdW5jdGlvbiBWS2UodCxlKXtyZXR1cm4gdC5iLWUuYn1mdW5jdGlvbiBVS2UodCxlKXtyZXR1cm4gdC5nLWUuZ31mdW5jdGlvbiBXS2UodCxlKXtyZXR1cm4gdC5zLWUuc31mdW5jdGlvbiBLS2UodCxlKXtyZXR1cm4gdD8wOmUtMX1mdW5jdGlvbiBuSHQodCxlKXtyZXR1cm4gdD8wOmUtMX1mdW5jdGlvbiBZS2UodCxlKXtyZXR1cm4gdD9lLTE6MH1mdW5jdGlvbiBYS2UodCxlKXtyZXR1cm4gZS5ZZih0KX1mdW5jdGlvbiB5dih0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIG1SKHQsZSl7cmV0dXJuIHQuYT1lLHR9ZnVuY3Rpb24geHYodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBrdih0LGUpe3JldHVybiB0LmQ9ZSx0fWZ1bmN0aW9uIEV2KHQsZSl7cmV0dXJuIHQuZT1lLHR9ZnVuY3Rpb24gcmJ0KHQsZSl7cmV0dXJuIHQuZj1lLHR9ZnVuY3Rpb24gUjkodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBaayh0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIEprKHQsZSl7cmV0dXJuIHQuYz1lLHR9ZnVuY3Rpb24gWmUodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBrbih0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIEplKHQsZSl7cmV0dXJuIHQuZD1lLHR9ZnVuY3Rpb24gdG4odCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiBRS2UodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiBlbih0LGUpe3JldHVybiB0Lmc9ZSx0fWZ1bmN0aW9uIG5uKHQsZSl7cmV0dXJuIHQuYT1lLHR9ZnVuY3Rpb24gcm4odCxlKXtyZXR1cm4gdC5pPWUsdH1mdW5jdGlvbiBzbih0LGUpe3JldHVybiB0Lmo9ZSx0fWZ1bmN0aW9uIHJIdCh0LGUpe3JldHVybiB0Lms9ZSx0fWZ1bmN0aW9uIFpLZSh0LGUpe3JldHVybiB0Lmo9ZSx0fWZ1bmN0aW9uIEpLZSh0LGUpe1pwKCksVW8oZSx0KX1mdW5jdGlvbiB0WWUodCxlLG4pe0t0bih0LmEsZSxuKX1mdW5jdGlvbiBpSHQodCl7eFh0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBpYnQodCl7eFh0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiB5Uih0KXtibnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHNIdCh0KXt2bG4uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFNwKHQpe0t2LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBhSHQodCl7aXJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBvSHQodCl7aXJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBjSHQoKXt1MnQuY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBUYSgpe3RoaXMuYT0wLHRoaXMuYj0wfWZ1bmN0aW9uIHVIdCgpe3RoaXMuYj0wLHRoaXMuYT0wfWZ1bmN0aW9uIGxIdCh0LGUpe3QuYj0wLHR5KHQsZSl9ZnVuY3Rpb24gZVllKHQsZSl7dC5jPWUsdC5iPSEwfWZ1bmN0aW9uIGhIdCh0LGUpe3JldHVybiB0LmMuX2IoZSl9ZnVuY3Rpb24gSGYodCl7cmV0dXJuIHQuZSYmdC5lKCl9ZnVuY3Rpb24gY2V0KHQpe3JldHVybiB0P3QuZDpudWxsfWZ1bmN0aW9uIGZIdCh0LGUpe3JldHVybiBScmUodC5iLGUpfWZ1bmN0aW9uIG5ZZSh0KXtyZXR1cm4gdD90Lmc6bnVsbH1mdW5jdGlvbiByWWUodCl7cmV0dXJuIHQ/dC5pOm51bGx9ZnVuY3Rpb24gQXAodCl7cmV0dXJuIEwwKHQpLHQub31mdW5jdGlvbiBUdigpe1R2PVosQTRlPXgxbigpfWZ1bmN0aW9uIGRIdCgpe2RIdD1aLHRhPU9kbigpfWZ1bmN0aW9uIHQ4KCl7dDg9WixKQXQ9RTFuKCl9ZnVuY3Rpb24gZ0h0KCl7Z0h0PVosZjVlPWsxbigpfWZ1bmN0aW9uIHNidCgpe3NidD1aLHBjPXdnbigpfWZ1bmN0aW9uIGFidCgpe2FidD1aLFRiPXo4KCl9ZnVuY3Rpb24gcEh0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBiSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIHZIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gd0h0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBtSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIHlIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24geFIodCl7dGhpcy5hPW5ldyBreCh0KX1mdW5jdGlvbiBvYnQodCl7cGhlKCksUzVuKHRoaXMsdCl9ZnVuY3Rpb24gTHAodCl7dGhpcy5hPW5ldyBCbnQodCl9ZnVuY3Rpb24gQjModCxlKXtmb3IoO3QueWUoZSk7KTt9ZnVuY3Rpb24gY2J0KHQsZSl7Zm9yKDt0LnNkKGUpOyk7fWZ1bmN0aW9uIFIzKHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIHVldCh0LGUpe3JldHVybiB0LmErPWUsdH1mdW5jdGlvbiBrZyh0LGUpe3JldHVybiB0LmErPWUsdH1mdW5jdGlvbiBDdih0LGUpe3JldHVybiB0LmErPWUsdH1mdW5jdGlvbiBqOSh0KXtyZXR1cm4gJHAodCksdC5hfWZ1bmN0aW9uIGtSKHQpe3JldHVybiB0LmIhPXQuZC5jfWZ1bmN0aW9uIHhIdCh0KXtyZXR1cm4gdC5sfHQubTw8MjJ9ZnVuY3Rpb24gdWJ0KHQsZSl7cmV0dXJuIHQuZFtlLnBdfWZ1bmN0aW9uIGtIdCh0LGUpe3JldHVybiBvdm4odCxlKX1mdW5jdGlvbiBsYnQodCxlLG4pe3Quc3BsaWNlKGUsbil9ZnVuY3Rpb24gRUh0KHQpe3QuYz9hdWUodCk6b3VlKHQpfWZ1bmN0aW9uIEVSKHQpe3RoaXMuYT0wLHRoaXMuYj10fWZ1bmN0aW9uIFRIdCgpe3RoaXMuYT1uZXcgZEQoZl90KX1mdW5jdGlvbiBDSHQoKXt0aGlzLmI9bmV3IGREKFpDdCl9ZnVuY3Rpb24gX0h0KCl7dGhpcy5iPW5ldyBkRCh6aHQpfWZ1bmN0aW9uIFNIdCgpe3RoaXMuYj1uZXcgZEQoemh0KX1mdW5jdGlvbiBBSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIExIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gTUh0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBJSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIERIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gT0h0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBOSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIFBIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gRkh0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBCSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIGlZZSgpe3Rocm93IHJ0KG5ldyBsYyl9ZnVuY3Rpb24gc1llKCl7dGhyb3cgcnQobmV3IGxjKX1mdW5jdGlvbiBoTSh0KXt0aGlzLmE9bmV3IFJIdCh0KX1mdW5jdGlvbiBSSHQodCl7Ym9uKHRoaXMsdCxiZG4oKSl9ZnVuY3Rpb24gZk0odCl7cmV0dXJuIXR8fHNYdCh0KX1mdW5jdGlvbiBkTSh0KXtyZXR1cm4gVTFbdF0hPS0xfWZ1bmN0aW9uIGFZZSgpe3pIIT0wJiYoekg9MCkscUg9LTF9ZnVuY3Rpb24gakh0KCl7ZHV0PT1udWxsJiYoZHV0PVtdKX1mdW5jdGlvbiBvWWUodCxlKXtIc3QoV3QodC5hKSxlKX1mdW5jdGlvbiBjWWUodCxlKXtIc3QoV3QodC5hKSxlKX1mdW5jdGlvbiBnTSh0LGUpe1czLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGU4KHQsZSl7Z00uY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gaGJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gJEh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gekh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcUh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSEh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gR0h0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gVkh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gVUh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gV0h0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gS0h0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gWUh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gWEh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gUUh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gWkh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gR3IodCxlKXt0aGlzLmY9dCx0aGlzLmc9ZX1mdW5jdGlvbiBuOCh0LGUpe3RoaXMuZT10LHRoaXMuZD1lfWZ1bmN0aW9uIF92KHQsZSl7dGhpcy5nPXQsdGhpcy5pPWV9ZnVuY3Rpb24gaGV0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSkh0KHQsZSl7dGhpcy5hPXQsdGhpcy5mPWV9ZnVuY3Rpb24gdEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gdVllKHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZmV0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbkd0KHQpe3gydCh0LmRjKCkpLHRoaXMuYz10fWZ1bmN0aW9uIFRSKHQpe3RoaXMuYj11KEFyKHQpLDgzKX1mdW5jdGlvbiByR3QodCl7dGhpcy5hPXUoQXIodCksODMpfWZ1bmN0aW9uIE1tKHQpe3RoaXMuYT11KEFyKHQpLDE1KX1mdW5jdGlvbiBpR3QodCl7dGhpcy5hPXUoQXIodCksMTUpfWZ1bmN0aW9uIENSKHQpe3RoaXMuYj11KEFyKHQpLDQ3KX1mdW5jdGlvbiBfUigpe3RoaXMucT1uZXcgYi5EYXRlfWZ1bmN0aW9uIHFkKCl7cWQ9WixoRXQ9bmV3IFR0fWZ1bmN0aW9uIHI4KCl7cjg9WixaRT1uZXcgTnR9ZnVuY3Rpb24gJDkodCl7cmV0dXJuIHQuZi5jK3QuZy5jfWZ1bmN0aW9uIHBNKHQsZSl7cmV0dXJuIHQuYi5IYyhlKX1mdW5jdGlvbiBzR3QodCxlKXtyZXR1cm4gdC5iLkljKGUpfWZ1bmN0aW9uIGFHdCh0LGUpe3JldHVybiB0LmIuUWMoZSl9ZnVuY3Rpb24gb0d0KHQsZSl7cmV0dXJuIHQuYi5IYyhlKX1mdW5jdGlvbiBjR3QodCxlKXtyZXR1cm4gdC5jLnVjKGUpfWZ1bmN0aW9uIFMwKHQsZSl7cmV0dXJuIHQuYS5fYihlKX1mdW5jdGlvbiB1R3QodCxlKXtyZXR1cm4geWkodC5jLGUpfWZ1bmN0aW9uIGxHdCh0LGUpe3JldHVybiBrbCh0LmIsZSl9ZnVuY3Rpb24gaEd0KHQsZSl7cmV0dXJuIHQ+ZSYmZTxBX31mdW5jdGlvbiBsWWUodCxlKXtyZXR1cm4gdC5HYyhlKSx0fWZ1bmN0aW9uIGhZZSh0LGUpe3JldHVybiBVYSh0LGUpLHR9ZnVuY3Rpb24gZlllKHQpe3JldHVybiB0WHQoKSx0P21nZTp3Z2V9ZnVuY3Rpb24ga3godCl7WG5lLmNhbGwodGhpcyx0LDApfWZ1bmN0aW9uIGZHdCgpe0JudC5jYWxsKHRoaXMsbnVsbCl9ZnVuY3Rpb24gZmJ0KCl7anJ0LmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBFeCh0KXt0aGlzLmM9dCxWdGUodGhpcyl9ZnVuY3Rpb24gUWkoKXtFVXQodGhpcyksX2godGhpcyl9ZnVuY3Rpb24gdXModCxlKXskcCh0KSx0LmEuTmIoZSl9ZnVuY3Rpb24gZEd0KHQsZSl7cmV0dXJuIHQuR2MoZSksdH1mdW5jdGlvbiBkWWUodCxlKXtyZXR1cm4gdC5hLmY9ZSx0fWZ1bmN0aW9uIGdHdCh0LGUpe3JldHVybiB0LmEuZD1lLHR9ZnVuY3Rpb24gcEd0KHQsZSl7cmV0dXJuIHQuYS5nPWUsdH1mdW5jdGlvbiBiR3QodCxlKXtyZXR1cm4gdC5hLmo9ZSx0fWZ1bmN0aW9uIHNmKHQsZSl7cmV0dXJuIHQuYS5hPWUsdH1mdW5jdGlvbiBhZih0LGUpe3JldHVybiB0LmEuZD1lLHR9ZnVuY3Rpb24gb2YodCxlKXtyZXR1cm4gdC5hLmU9ZSx0fWZ1bmN0aW9uIGNmKHQsZSl7cmV0dXJuIHQuYS5nPWUsdH1mdW5jdGlvbiBiTSh0LGUpe3JldHVybiB0LmEuZj1lLHR9ZnVuY3Rpb24gZ1llKHQpe3JldHVybiB0LmI9ITEsdH1mdW5jdGlvbiBpOCgpe2k4PVosRUV0PW5ldyBRVnR9ZnVuY3Rpb24gU1IoKXtTUj1aLERnZT1uZXcgWlZ0fWZ1bmN0aW9uIHM4KCl7czg9WixMRXQ9bmV3IE9lfWZ1bmN0aW9uIHZHdCgpe3ZHdD1aLERiZT1uZXcgcG19ZnVuY3Rpb24gQVIoKXtBUj1aLFJ1dD1uZXcgdVd0fWZ1bmN0aW9uIFdiKCl7V2I9WixKRT1uZXcgZ259ZnVuY3Rpb24gejkoKXt6OT1aLE5iZT1uZXcgbUx9ZnVuY3Rpb24gd0d0KCl7d0d0PVoscWdlPW5ldyBOb31mdW5jdGlvbiBkYnQoKXtkYnQ9Wix4YmU9bmV3IHV2fWZ1bmN0aW9uIHZNKCl7dk09WixCYmU9bmV3IFRhfWZ1bmN0aW9uIG1HdCgpe21HdD1aLGtiZT1uZXcgd0x9ZnVuY3Rpb24gZ2J0KCl7Z2J0PVosRWJlPW5ldyBnWXR9ZnVuY3Rpb24gcGJ0KCl7cGJ0PVosXzd0PW5ldyBnbX1mdW5jdGlvbiB3TSgpe3dNPVosUmJlPW5ldyBPVH1mdW5jdGlvbiB5R3QoKXt5R3Q9WixxYmU9bmV3IGx2fWZ1bmN0aW9uIHE5KCl7cTk9WixLYmU9bmV3IFNYfWZ1bmN0aW9uIExSKCl7TFI9Wix6ND1uZXcgUlh9ZnVuY3Rpb24geEd0KCl7eEd0PVosYnllPW5ldyBIc31mdW5jdGlvbiBNUigpe01SPVoscWh0PW5ldyBFR3R9ZnVuY3Rpb24gSVIoKXtJUj1aLEhodD1uZXcgRVd0fWZ1bmN0aW9uIEg5KCl7SDk9WixqTz1uZXcgZFh0fWZ1bmN0aW9uIERSKCl7RFI9WixSd2U9bmV3ICRafWZ1bmN0aW9uIGtHdCgpe0hlZSgpLHRoaXMuYz1uZXcgc2V0fWZ1bmN0aW9uIEVHdCgpe0dyLmNhbGwodGhpcyxoMWUsMCl9ZnVuY3Rpb24gU3YodCxlKXtwMih0LmMuYixlLmMsZSl9ZnVuY3Rpb24gRzkodCxlKXtwMih0LmMuYyxlLmIsZSl9ZnVuY3Rpb24gcFllKHQsZSxuKXt4byh0LmQsZS5mLG4pfWZ1bmN0aW9uIGJZZSh0LGUsbixyKXtVaG4odCxyLGUsbil9ZnVuY3Rpb24gdlllKHQsZSxuLHIpe2cybihyLHQsZSxuKX1mdW5jdGlvbiB3WWUodCxlLG4scil7STRuKHIsdCxlLG4pfWZ1bmN0aW9uIE9SKHQsZSl7cmV0dXJuIHQuYT1lLmcsdH1mdW5jdGlvbiBUR3QodCxlKXtyZXR1cm4gZTFuKHQuYSxlKX1mdW5jdGlvbiBtWWUodCl7cmV0dXJuIHQuYj90LmI6dC5hfWZ1bmN0aW9uIHlZZSh0KXtyZXR1cm4odC5jK3QuYSkvMn1mdW5jdGlvbiBJbSgpe0ltPVosXzRlPW5ldyBHWn1mdW5jdGlvbiBDR3QoKXtDR3Q9WixONGU9bmV3IFZafWZ1bmN0aW9uIF9HdCgpe19HdD1aLFc0ZT1uZXcgeXF0fWZ1bmN0aW9uIFNHdCgpe1NHdD1aLEs0ZT1uZXcgeHF0fWZ1bmN0aW9uIE1wKCl7TXA9WixVaD1uZXcganB0fWZ1bmN0aW9uIGJidCgpe2JidD1aLFpBdD1uZXcgVHF0fWZ1bmN0aW9uIFY5KCl7Vjk9WixTZnQ9bmV3IExVdH1mdW5jdGlvbiBFZygpe0VnPVosaE49bmV3IE1VdH1mdW5jdGlvbiBkZXQoKXtkZXQ9WixjNWU9bmV3IHBKfWZ1bmN0aW9uIHRvKCl7dG89WixsNWU9bmV3IGJKfWZ1bmN0aW9uIE5SKCl7TlI9WixuVT1uZXcgQ3J9ZnVuY3Rpb24gdmJ0KCl7dmJ0PVosdUx0PW5ldyBsZX1mdW5jdGlvbiBJcCgpe0lwPVosQWI9bmV3IE1KfWZ1bmN0aW9uIHhZZSh0KXtiLmNsZWFyVGltZW91dCh0KX1mdW5jdGlvbiB3YnQodCl7dGhpcy5hPXUoQXIodCksMjI0KX1mdW5jdGlvbiBQUih0KXtyZXR1cm4gdSh0LDQyKS5jZCgpfWZ1bmN0aW9uIG1NKHQpe3JldHVybiB0LmI8dC5kLmdjKCl9ZnVuY3Rpb24gQUd0KHQsZSl7cmV0dXJuIE1udCh0LmEsZSl9ZnVuY3Rpb24gTEd0KHQsZSl7cmV0dXJuIHljKHQsZSk+MH1mdW5jdGlvbiBnZXQodCxlKXtyZXR1cm4geWModCxlKTwwfWZ1bmN0aW9uIFU5KHQsZSl7cmV0dXJuIHQuYS5nZXQoZSl9ZnVuY3Rpb24ga1llKHQsZSl7cmV0dXJuIGUuc3BsaXQodCl9ZnVuY3Rpb24gTUd0KHQsZSl7cmV0dXJuIGtsKHQuZSxlKX1mdW5jdGlvbiBtYnQodCl7cmV0dXJuIE9uKHQpLCExfWZ1bmN0aW9uIEZSKHQpe19uLmNhbGwodGhpcyx0LDIxKX1mdW5jdGlvbiBFWWUodCxlKXtvUXQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQlIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBwZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB5YnQodCl7WG50KCksY0t0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiB4YnQodCxlKXtoWXQodCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiB5TSh0LGUpeyRZdCh0LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIFRZZSh0LGUsbil7ZS51ZCh0LmEuR2UobikpfWZ1bmN0aW9uIENZZSh0LGUsbil7ZS53ZSh0LmEuRmUobikpfWZ1bmN0aW9uIF9ZZSh0LGUsbil7ZS50ZCh0LmEuS2IobikpfWZ1bmN0aW9uIFNZZSh0LGUsbil7dC5NYihuKSYmZS50ZChuKX1mdW5jdGlvbiBXOSh0LGUsbil7dC5zcGxpY2UoZSwwLG4pfWZ1bmN0aW9uIEFZZSh0LGUpe3JldHVybiBOdSh0LmUsZSl9ZnVuY3Rpb24gUlIodCxlKXt0aGlzLmQ9dCx0aGlzLmU9ZX1mdW5jdGlvbiBJR3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBER3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBrYnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBPR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBOR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBQR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBGR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBUeCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEVidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFRidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGpSKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gJFIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBDYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqMyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGJldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHZldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHdldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHpSKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gU2J0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gbWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geE0odCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBxUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHlldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEs5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gd3ModCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBIUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEJHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFJHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGpHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uICRHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHpHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHFHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEhHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEdHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFZHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIExidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFVHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFdHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIEtHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGE4KHQsZSl7dGhpcy5jPXQsdGhpcy5kPWV9ZnVuY3Rpb24gWUd0KHQsZSl7dGhpcy5lPXQsdGhpcy5kPWV9ZnVuY3Rpb24gWEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUUd0KHQsZSl7dGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gR1IodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBrTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHhldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFk5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24ga2V0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRU0odCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBJYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBUZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBYOSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERidCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFE5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWjkodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBEbSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIENldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIF9ldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE9idCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEo5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gVlIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBUTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIENNKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQ3godCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBMZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBOYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBNZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBJZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBEZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBPZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBOZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBGYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBaR3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBKR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB0VnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBlVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBuVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBCYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiByVnQodCxlKXt0aGlzLmI9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBqYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiAkYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBpVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBzVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBVUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHRDKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gemJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSGJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRmV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gR2J0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQmV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gV1IodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uICRldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFZidCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFNNKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gVWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTFllKHQsZSl7cmV0dXJuIE51KHQuYyxlKX1mdW5jdGlvbiBNWWUodCxlKXtyZXR1cm4gTnUoZS5iLHQpfWZ1bmN0aW9uIElZZSh0LGUpe3JldHVybi10LmIuSmUoZSl9ZnVuY3Rpb24gV2J0KHQsZSl7cmV0dXJuIE51KHQuZyxlKX1mdW5jdGlvbiBBTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIF94KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gYVZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gb1Z0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gJGUodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBlQyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG5DKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTE0odCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB6ZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBLUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHJDKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWVIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiAkMyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE1NKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gaUModCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBzQyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIElNKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWFIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB6Myh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFFSKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gY1Z0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gdVZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gaFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZlZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbGEodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBaUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGdWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHBWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGJWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHZWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHdWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIG1WdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHlWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIHhWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGtWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIEVWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFRWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIENWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIERZZSh0LGUpe2Mybih0LmEsdShlLDU2KSl9ZnVuY3Rpb24gX1Z0KHQsZSl7eWFuKHQuYSx1KGUsMTEpKX1mdW5jdGlvbiBPWWUodCxlKXtyZXR1cm4gZzgoKSxlIT10fWZ1bmN0aW9uIFNWdCgpe3JldHVybiBacXQoKSxuZXcgTWdlfWZ1bmN0aW9uIEFWdCgpe3BydCgpLHRoaXMuYj1uZXcgcXN9ZnVuY3Rpb24gTFZ0KCl7aHEoKSx0aGlzLmE9bmV3IHFzfWZ1bmN0aW9uIE1WdCgpe2p3dCgpLEt2dC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFN4KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSVZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSlIodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBPVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBOVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBQVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBGVnQodCxlKXt0aGlzLmQ9dCx0aGlzLmI9ZX1mdW5jdGlvbiBLYnQodCxlKXt0aGlzLmQ9dCx0aGlzLmU9ZX1mdW5jdGlvbiBCVnQodCxlKXt0aGlzLmY9dCx0aGlzLmM9ZX1mdW5jdGlvbiBETSh0LGUpe3RoaXMuYj10LHRoaXMuYz1lfWZ1bmN0aW9uIFlidCh0LGUpe3RoaXMuaT10LHRoaXMuZz1lfWZ1bmN0aW9uIFJWdCh0LGUpe3RoaXMuZT10LHRoaXMuYT1lfWZ1bmN0aW9uIGpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFhidCh0LGUpe3QuaT1udWxsLGV6KHQsZSl9ZnVuY3Rpb24gTlllKHQsZSl7dCYma2koY04sdCxlKX1mdW5jdGlvbiAkVnQodCxlKXtyZXR1cm4gV2l0KHQuYSxlKX1mdW5jdGlvbiB0aih0KXtyZXR1cm4gVkkodC5jLHQuYil9ZnVuY3Rpb24gZWModCl7cmV0dXJuIHQ/dC5kZCgpOm51bGx9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIHQ/P251bGx9ZnVuY3Rpb24gT20odCl7cmV0dXJuIHR5cGVvZiB0PT09dTZ9ZnVuY3Rpb24gTm0odCl7cmV0dXJuIHR5cGVvZiB0PT09THh0fWZ1bmN0aW9uIGVhKHQpe3JldHVybiB0eXBlb2YgdD09PU9hdH1mdW5jdGlvbiBEcCh0LGUpe3JldHVybiB0LkhkKCkuWGIoZSl9ZnVuY3Rpb24gZWoodCxlKXtyZXR1cm4gWG9uKHQuS2MoKSxlKX1mdW5jdGlvbiBBdih0LGUpe3JldHVybiB5Yyh0LGUpPT0wfWZ1bmN0aW9uIFBZZSh0LGUpe3JldHVybiB5Yyh0LGUpPj0wfWZ1bmN0aW9uIGFDKHQsZSl7cmV0dXJuIHljKHQsZSkhPTB9ZnVuY3Rpb24gRlllKHQpe3JldHVybiIiKyhPbih0KSx0KX1mdW5jdGlvbiBPTSh0LGUpe3JldHVybiB0LnN1YnN0cihlKX1mdW5jdGlvbiB6VnQodCl7cmV0dXJuIGFsKHQpLHQuZC5nYygpfWZ1bmN0aW9uIEhldCh0KXtyZXR1cm4gRHBuKHQsdC5jKSx0fWZ1bmN0aW9uIG5qKHQpe3JldHVybiBtQyh0PT1udWxsKSx0fWZ1bmN0aW9uIG9DKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIGZvKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIGNDKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIGhjKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIFZyKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIFFidCh0LGUpe3JldHVybiB0LmErPSIiK2UsdH1mdW5jdGlvbiBxVnQodCxlKXtocyh0LGUsdC5hLHQuYS5hKX1mdW5jdGlvbiBLYih0LGUpe2hzKHQsZSx0LmMuYix0LmMpfWZ1bmN0aW9uIEJZZSh0LGUsbil7UXNlKGUsRnN0KHQsbikpfWZ1bmN0aW9uIFJZZSh0LGUsbil7UXNlKGUsRnN0KHQsbikpfWZ1bmN0aW9uIGpZZSh0LGUpe0lhbihuZXcgZXIodCksZSl9ZnVuY3Rpb24gSFZ0KHQsZSl7dC5xLnNldFRpbWUoVnYoZSkpfWZ1bmN0aW9uIEdWdCh0LGUpe3J3dC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBWVnQodCxlKXtyd3QuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gR2V0KHQsZSl7cnd0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFVWdCh0KXtZdSh0aGlzKSxWQyh0aGlzLHQpfWZ1bmN0aW9uIFpidCh0KXtyZXR1cm4gQW4odCwwKSxudWxsfWZ1bmN0aW9uIEdmKHQpe3JldHVybiB0LmE9MCx0LmI9MCx0fWZ1bmN0aW9uIFdWdCh0LGUpe3JldHVybiB0LmE9ZS5nKzEsdH1mdW5jdGlvbiAkWWUodCxlKXtyZXR1cm4gdC5qW2UucF09PTJ9ZnVuY3Rpb24gSmJ0KHQpe3JldHVybiBrZW4odSh0LDc5KSl9ZnVuY3Rpb24gS1Z0KCl7S1Z0PVosVHBlPVdyKEppdCgpKX1mdW5jdGlvbiBZVnQoKXtZVnQ9Wix6YmU9V3IoSWNlKCkpfWZ1bmN0aW9uIFhWdCgpe3RoaXMuYj1uZXcga3goUW0oMTIpKX1mdW5jdGlvbiBRVnQoKXt0aGlzLmI9MCx0aGlzLmE9ITF9ZnVuY3Rpb24gWlZ0KCl7dGhpcy5iPTAsdGhpcy5hPSExfWZ1bmN0aW9uIHVDKHQpe3RoaXMuYT10LGY5LmNhbGwodGhpcyl9ZnVuY3Rpb24gSlZ0KHQpe3RoaXMuYT10LGY5LmNhbGwodGhpcyl9ZnVuY3Rpb24gbW4odCxlKXtPcy5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBWZXQodCxlKXtqbS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBxMyh0LGUpe1lidC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBVZXQodCxlKXtVOC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB0VXQodCxlKXtOTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiByaSh0LGUpe05SKCksa2koblUsdCxlKX1mdW5jdGlvbiBXZXQodCxlKXtyZXR1cm4gRGwodC5hLDAsZSl9ZnVuY3Rpb24gZVV0KHQsZSl7cmV0dXJuIHQuYS5hLmEuY2MoZSl9ZnVuY3Rpb24gblV0KHQsZSl7cmV0dXJuIEd0KHQpPT09R3QoZSl9ZnVuY3Rpb24gelllKHQsZSl7cmV0dXJuIExzKHQuYSxlLmEpfWZ1bmN0aW9uIHFZZSh0LGUpe3JldHVybiBkdSh0LmEsZS5hKX1mdW5jdGlvbiBIWWUodCxlKXtyZXR1cm4gQll0KHQuYSxlLmEpfWZ1bmN0aW9uIGNkKHQsZSl7cmV0dXJuIHQuaW5kZXhPZihlKX1mdW5jdGlvbiBMdih0LGUpe3JldHVybiB0PT1lPzA6dD8xOi0xfWZ1bmN0aW9uIHJqKHQpe3JldHVybiB0PDEwPyIwIit0OiIiK3R9ZnVuY3Rpb24gR1llKHQpe3JldHVybiBBcih0KSxuZXcgdUModCl9ZnVuY3Rpb24gclV0KHQpe3JldHVybiBydSh0LmwsdC5tLHQuaCl9ZnVuY3Rpb24gbzgodCl7cmV0dXJuIHBzKChPbih0KSx0KSl9ZnVuY3Rpb24gVlllKHQpe3JldHVybiBwcygoT24odCksdCkpfWZ1bmN0aW9uIGlVdCh0LGUpe3JldHVybiBkdSh0LmcsZS5nKX1mdW5jdGlvbiBCbyh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1MeHR9ZnVuY3Rpb24gVVllKHQpe3JldHVybiB0PT1fd3x8dD09RHl9ZnVuY3Rpb24gV1llKHQpe3JldHVybiB0PT1fd3x8dD09SXl9ZnVuY3Rpb24gdDJ0KHQpe3JldHVybiBSbyh0LmIuYix0LDApfWZ1bmN0aW9uIHNVdCh0KXt0aGlzLmE9U1Z0KCksdGhpcy5iPXR9ZnVuY3Rpb24gYVV0KHQpe3RoaXMuYT1TVnQoKSx0aGlzLmI9dH1mdW5jdGlvbiBLWWUodCxlKXtyZXR1cm4gdWUodC5hLGUpLGV9ZnVuY3Rpb24gWVllKHQsZSl7cmV0dXJuIHVlKHQuYyxlKSx0fWZ1bmN0aW9uIG9VdCh0LGUpe3JldHVybiBSbCh0LmEsZSksdH1mdW5jdGlvbiBYWWUodCxlKXtyZXR1cm4gbGYoKSxlLmErPXR9ZnVuY3Rpb24gUVllKHQsZSl7cmV0dXJuIGxmKCksZS5hKz10fWZ1bmN0aW9uIFpZZSh0LGUpe3JldHVybiBsZigpLGUuYys9dH1mdW5jdGlvbiBlMnQodCxlKXtEOCh0LDAsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gQTAoKXtrdC5jYWxsKHRoaXMsbmV3IG4yKX1mdW5jdGlvbiBjVXQoKXtGai5jYWxsKHRoaXMsMCwwLDAsMCl9ZnVuY3Rpb24gQXgoKXtpaC5jYWxsKHRoaXMsMCwwLDAsMCl9ZnVuY3Rpb24geW8odCl7dGhpcy5hPXQuYSx0aGlzLmI9dC5ifWZ1bmN0aW9uIE9wKHQpe3JldHVybiB0PT1qaHx8dD09a2Z9ZnVuY3Rpb24gYzgodCl7cmV0dXJuIHQ9PVowfHx0PT1RMH1mdW5jdGlvbiB1VXQodCl7cmV0dXJuIHQ9PXQ1fHx0PT1KNH1mdW5jdGlvbiBIMyh0KXtyZXR1cm4gdCE9SDEmJnQhPXlifWZ1bmN0aW9uIG1sKHQpe3JldHVybiB0LkxnKCkmJnQuTWcoKX1mdW5jdGlvbiBsVXQodCl7cmV0dXJuIFpqKHUodCwxMTgpKX1mdW5jdGlvbiBpaih0KXtyZXR1cm4gUmwobmV3IEhzLHQpfWZ1bmN0aW9uIGhVdCh0LGUpe3JldHVybiBuZXcgVTgoZSx0KX1mdW5jdGlvbiBKWWUodCxlKXtyZXR1cm4gbmV3IFU4KGUsdCl9ZnVuY3Rpb24gbjJ0KHQsZSxuKXtXJCh0LGUpLEskKHQsbil9ZnVuY3Rpb24gc2oodCxlLG4pe1F2KHQsZSksWHYodCxuKX1mdW5jdGlvbiBtMSh0LGUsbil7eXUodCxlKSx4dSh0LG4pfWZ1bmN0aW9uIGFqKHQsZSxuKXtGOCh0LGUpLFI4KHQsbil9ZnVuY3Rpb24gb2oodCxlLG4pe0I4KHQsZSksajgodCxuKX1mdW5jdGlvbiBLZXQodCxlKXtaOCh0LGUpLCQ4KHQsdC5EKX1mdW5jdGlvbiByMnQodCl7QlZ0LmNhbGwodGhpcyx0LCEwKX1mdW5jdGlvbiBmVXQodCxlLG4pe1UydC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIE5wKHQpe0pwKCksdGNuLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBkVXQoKXtCUi5jYWxsKHRoaXMsIkhlYWQiLDEpfWZ1bmN0aW9uIGdVdCgpe0JSLmNhbGwodGhpcywiVGFpbCIsMyl9ZnVuY3Rpb24gWWV0KHQpe3QuYz1QdChYbixJZSwxLDAsNSwxKX1mdW5jdGlvbiBwVXQodCl7dC5hPVB0KFhuLEllLDEsOCw1LDEpfWZ1bmN0aW9uIGJVdCh0KXttdSh0LnhmKCksbmV3IHVyKHQpKX1mdW5jdGlvbiBHMyh0KXtyZXR1cm4gdCE9bnVsbD9IaSh0KTowfWZ1bmN0aW9uIHRYZSh0LGUpe3JldHVybiBabShlLGsxKHQpKX1mdW5jdGlvbiBlWGUodCxlKXtyZXR1cm4gWm0oZSxrMSh0KSl9ZnVuY3Rpb24gblhlKHQsZSl7cmV0dXJuIHRbdC5sZW5ndGhdPWV9ZnVuY3Rpb24gclhlKHQsZSl7cmV0dXJuIHRbdC5sZW5ndGhdPWV9ZnVuY3Rpb24gaTJ0KHQpe3JldHVybiBudG4odC5iLktjKCksdC5hKX1mdW5jdGlvbiBpWGUodCxlKXtyZXR1cm4gdHooS250KHQuZCksZSl9ZnVuY3Rpb24gc1hlKHQsZSl7cmV0dXJuIHR6KEtudCh0LmcpLGUpfWZ1bmN0aW9uIGFYZSh0LGUpe3JldHVybiB0eihLbnQodC5qKSxlKX1mdW5jdGlvbiBlbyh0LGUpe09zLmNhbGwodGhpcyx0LmIsZSl9ZnVuY3Rpb24gTXYodCl7RmouY2FsbCh0aGlzLHQsdCx0LHQpfWZ1bmN0aW9uIHMydCh0KXtyZXR1cm4gdC5iJiZiYXQodCksdC5hfWZ1bmN0aW9uIGEydCh0KXtyZXR1cm4gdC5iJiZiYXQodCksdC5jfWZ1bmN0aW9uIG9YZSh0LGUpe1IxfHwodC5iPWUpfWZ1bmN0aW9uIFhldCh0LGUsbil7cmV0dXJuIEppKHQsZSxuKSxufWZ1bmN0aW9uIHZVdCh0LGUsbil7SmkodC5jW2UuZ10sZS5nLG4pfWZ1bmN0aW9uIGNYZSh0LGUsbil7dSh0LmMsNjkpLlhoKGUsbil9ZnVuY3Rpb24gdVhlKHQsZSxuKXttMShuLG4uaSt0LG4uaitlKX1mdW5jdGlvbiBsWGUodCxlKXtNcihMYyh0LmEpLElRdChlKSl9ZnVuY3Rpb24gaFhlKHQsZSl7TXIoaWwodC5hKSxEUXQoZSkpfWZ1bmN0aW9uIGxDKHQpe2dpKCksdnYuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZYZSh0KXtyZXR1cm4gdD09bnVsbD8wOkhpKHQpfWZ1bmN0aW9uIHdVdCgpe3dVdD1aLHlodD1uZXcgZV8ocGZ0KX1mdW5jdGlvbiBOcigpe05yPVosbmV3IG1VdCxuZXcgbGV9ZnVuY3Rpb24gbVV0KCl7bmV3IENyLG5ldyBDcixuZXcgQ3J9ZnVuY3Rpb24gbzJ0KCl7bzJ0PVosQ3B0KCksUTh0PW5ldyBDcn1mdW5jdGlvbiB5MSgpe3kxPVosYi5NYXRoLmxvZygyKX1mdW5jdGlvbiBuaCgpe25oPVosZjA9KENHdCgpLE40ZSl9ZnVuY3Rpb24gZFhlKCl7dGhyb3cgcnQobmV3IHlnKHNnZSkpfWZ1bmN0aW9uIGdYZSgpe3Rocm93IHJ0KG5ldyB5ZyhzZ2UpKX1mdW5jdGlvbiBwWGUoKXt0aHJvdyBydChuZXcgeWcoYWdlKSl9ZnVuY3Rpb24gYlhlKCl7dGhyb3cgcnQobmV3IHlnKGFnZSkpfWZ1bmN0aW9uIHlVdCh0KXt0aGlzLmE9dCxDdnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFFldCh0KXt0aGlzLmE9dCxUUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gWmV0KHQpe3RoaXMuYT10LFRSLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBYcyh0LGUpe0xudCh0LmMsdC5jLmxlbmd0aCxlKX1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gdC5hPHQuYy5jLmxlbmd0aH1mdW5jdGlvbiBjMnQodCl7cmV0dXJuIHQuYTx0LmMuYS5sZW5ndGh9ZnVuY3Rpb24geFV0KHQsZSl7cmV0dXJuIHQuYT90LmI6ZS5EZSgpfWZ1bmN0aW9uIGR1KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGtVdCh0LGUpe3JldHVybiB5Yyh0LGUpPjA/dDplfWZ1bmN0aW9uIHJ1KHQsZSxuKXtyZXR1cm57bDp0LG06ZSxoOm59fWZ1bmN0aW9uIHZYZSh0LGUpe3QuYSE9bnVsbCYmX1Z0KGUsdC5hKX1mdW5jdGlvbiBFVXQodCl7dC5hPW5ldyBIdCx0LmM9bmV3IEh0fWZ1bmN0aW9uIGNqKHQpe3RoaXMuYj10LHRoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gVFV0KHQpe3RoaXMuYj1uZXcgQ2UsdGhpcy5hPXR9ZnVuY3Rpb24gdTJ0KHQpe2V2dC5jYWxsKHRoaXMpLHRoaXMuYT10fWZ1bmN0aW9uIENVdCgpe0JSLmNhbGwodGhpcywiUmFuZ2UiLDIpfWZ1bmN0aW9uIF9VdCgpe3I0dCgpLHRoaXMuYT1uZXcgZEQoQzd0KX1mdW5jdGlvbiB3WGUodCxlKXtBcihlKSxZMyh0KS5KYyhuZXcgc3QpfWZ1bmN0aW9uIG1YZSh0LGUpe3JldHVybiBPbCgpLGUubi5iKz10fWZ1bmN0aW9uIHlYZSh0LGUsbil7cmV0dXJuIGtpKHQuZyxuLGUpfWZ1bmN0aW9uIHhYZSh0LGUsbil7cmV0dXJuIGtpKHQuayxuLGUpfWZ1bmN0aW9uIGtYZSh0LGUpe3JldHVybiBraSh0LmEsZS5hLGUpfWZ1bmN0aW9uIFYzKHQsZSxuKXtyZXR1cm4gRTN0KGUsbix0LmMpfWZ1bmN0aW9uIGwydCh0KXtyZXR1cm4gbmV3ICRlKHQuYyx0LmQpfWZ1bmN0aW9uIEVYZSh0KXtyZXR1cm4gbmV3ICRlKHQuYyx0LmQpfWZ1bmN0aW9uIG5jKHQpe3JldHVybiBuZXcgJGUodC5hLHQuYil9ZnVuY3Rpb24gU1V0KHQsZSl7cmV0dXJuIFUzbih0LmEsZSxudWxsKX1mdW5jdGlvbiBUWGUodCl7RGEodCxudWxsKSxzYSh0LG51bGwpfWZ1bmN0aW9uIEFVdCh0KXt2cnQodCxudWxsKSx3cnQodCxudWxsKX1mdW5jdGlvbiBMVXQoKXtOTS5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBNVXQoKXtiai5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBoMnQodCl7dGhpcy5hPXQsQ3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBDWGUodCl7dGhpcy5iPSh2bigpLG5ldyBxKHQpKX1mdW5jdGlvbiB1aih0KXt0Lmo9UHQobEV0LHRlLDMxMCwwLDAsMSl9ZnVuY3Rpb24gX1hlKHQsZSxuKXt0LmMuVmMoZSx1KG4sMTMzKSl9ZnVuY3Rpb24gU1hlKHQsZSxuKXt0LmMuamkoZSx1KG4sMTMzKSl9ZnVuY3Rpb24gSVV0KHQsZSl7eHIodCksdC5HYyh1KGUsMTUpKX1mdW5jdGlvbiBoQyh0LGUpe3JldHVybiBjM24odC5jLHQuYixlKX1mdW5jdGlvbiBBWGUodCxlKXtyZXR1cm4gbmV3IEpVdCh0LktjKCksZSl9ZnVuY3Rpb24gSmV0KHQsZSl7cmV0dXJuIFNjbih0LktjKCksZSkhPS0xfWZ1bmN0aW9uIGYydCh0LGUpe3JldHVybiB0LmEuQmMoZSkhPW51bGx9ZnVuY3Rpb24gbGoodCl7cmV0dXJuIHQuT2IoKT90LlBiKCk6bnVsbH1mdW5jdGlvbiBEVXQodCl7cmV0dXJuIEFoKHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gRXQodCxlKXtyZXR1cm4gdCE9bnVsbCYmcnN0KHQsZSl9ZnVuY3Rpb24gTFhlKHQsZSl7dC5xLnNldEhvdXJzKGUpLHlfKHQsZSl9ZnVuY3Rpb24gT1V0KHQsZSl7dC5jJiYoRnZ0KGUpLHNRdChlKSl9ZnVuY3Rpb24gTVhlKHQsZSxuKXt1KHQuS2IobiksMTY0KS5OYihlKX1mdW5jdGlvbiBJWGUodCxlLG4pe3JldHVybiBqM24odCxlLG4pLG59ZnVuY3Rpb24gTlV0KHQsZSxuKXt0LmE9ZV4xNTAyLHQuYj1uXmZvdH1mdW5jdGlvbiB0bnQodCxlLG4pe3JldHVybiB0LmFbZS5nXVtuLmddfWZ1bmN0aW9uIHgxKHQsZSl7cmV0dXJuIHQuYVtlLmMucF1bZS5wXX1mdW5jdGlvbiBEWGUodCxlKXtyZXR1cm4gdC5lW2UuYy5wXVtlLnBdfWZ1bmN0aW9uIE9YZSh0LGUpe3JldHVybiB0LmNbZS5jLnBdW2UucF19ZnVuY3Rpb24gTlhlKHQsZSl7cmV0dXJuIHQualtlLnBdPUhibihlKX1mdW5jdGlvbiBQWGUodCxlKXtyZXR1cm4gcG10KHQuZixlLnRnKCkpfWZ1bmN0aW9uIEZYZSh0LGUpe3JldHVybiBwbXQodC5iLGUudGcoKSl9ZnVuY3Rpb24gQlhlKHQsZSl7cmV0dXJuIHQuYTxmdnQoZSk/LTE6MX1mdW5jdGlvbiBSWGUodCxlLG4pe3JldHVybiBuP2UhPTA6ZSE9dC0xfWZ1bmN0aW9uIGpYZSh0LGUsbil7cmV0dXJuIHQuYT1lLHQuYj1uLHR9ZnVuY3Rpb24gdWQodCxlKXtyZXR1cm4gdC5hKj1lLHQuYio9ZSx0fWZ1bmN0aW9uIGZDKHQsZSxuKXtyZXR1cm4gSmkodC5nLGUsbiksbn1mdW5jdGlvbiAkWGUodCxlLG4scil7SmkodC5hW2UuZ10sbi5nLHIpfWZ1bmN0aW9uIHpYZSh0LGUpe0ZtKGUsdC5hLmEuYSx0LmEuYS5iKX1mdW5jdGlvbiBQVXQodCl7dC5hPXUoSW4odC5iLmEsNCksMTI2KX1mdW5jdGlvbiBGVXQodCl7dC5hPXUoSW4odC5iLmEsNCksMTI2KX1mdW5jdGlvbiBxWGUodCl7dEkodCxPZGUpLFhzdCh0LEg0bih0KSl9ZnVuY3Rpb24gdTgoKXt1OD1aLFdIPW5ldyBnUihudWxsKX1mdW5jdGlvbiBkMnQoKXtkMnQ9WixkMnQoKSxPZ2U9bmV3IGllfWZ1bmN0aW9uIGcydCgpe3RoaXMuQmJ8PTI1Nix0aGlzLkJifD01MTJ9ZnVuY3Rpb24gZXIodCl7dGhpcy5pPXQsdGhpcy5mPXRoaXMuaS5qfWZ1bmN0aW9uIFNzKHQsZSxuKXtXTS5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIGhqKHQsZSxuKXtTcy5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIE91KHQsZSxuKXtTcy5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIEJVdCh0LGUsbil7aGouY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBwMnQodCxlLG4pe1dNLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gVTModCxlLG4pe1dNLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gYjJ0KHQsZSxuKXtTai5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFJVdCh0LGUsbil7U2ouY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBqVXQodCxlLG4pe2IydC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uICRVdCh0LGUsbil7cDJ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gVzModCxlKXt0aGlzLmE9dCxUUi5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gelV0KHQsZSl7dGhpcy5hPXQsaWV0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBxVXQodCxlKXt0aGlzLmE9dCxpZXQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEhVdCh0LGUpe3RoaXMuYT10LGlldC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gdjJ0KHQpe3RoaXMuYT10LGF0dC5jYWxsKHRoaXMsdC5kKX1mdW5jdGlvbiBQcCh0KXt0aGlzLmM9dCx0aGlzLmE9dGhpcy5jLmF9ZnVuY3Rpb24gdzJ0KHQsZSl7dGhpcy5hPWUsaWV0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBHVXQodCxlKXt0aGlzLmE9ZSxMcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFZVdCh0LGUpe3RoaXMuYT10LExydC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSFhlKHQsZSl7cmV0dXJuIGV3dChObnQodC5jKSkuWGIoZSl9ZnVuY3Rpb24gbTJ0KHQsZSl7cmV0dXJuIGlsbih0LG5ldyBfcCxlKS5hfWZ1bmN0aW9uIGxyKHQsZSl7cmV0dXJuIEFyKGUpLG5ldyBVVXQodCxlKX1mdW5jdGlvbiBVVXQodCxlKXt0aGlzLmE9ZSxDUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geTJ0KHQpe3RoaXMuYj10LHRoaXMuYT10aGlzLmIuYS5lfWZ1bmN0aW9uIFdVdCh0KXt0LmIuUWIoKSwtLXQuZC5mLmQsUmoodC5kKX1mdW5jdGlvbiBLVXQodCl7dzkuY2FsbCh0aGlzLHUoQXIodCksMzUpKX1mdW5jdGlvbiBZVXQodCl7dzkuY2FsbCh0aGlzLHUoQXIodCksMzUpKX1mdW5jdGlvbiBYVXQoKXtHci5jYWxsKHRoaXMsIklOU1RBTkNFIiwwKX1mdW5jdGlvbiB4MnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IHVNKX1mdW5jdGlvbiBrMnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IEl1KX1mdW5jdGlvbiBFMnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IGxjKX1mdW5jdGlvbiBRVXQoKXtRVXQ9WixkZXQoKSx1NWU9bmV3IEhCfWZ1bmN0aW9uIEZuKCl7Rm49WixJMj0hMSxZRT0hMH1mdW5jdGlvbiBUaCh0KXtkeC5jYWxsKHRoaXMsKE9uKHQpLHQpKX1mdW5jdGlvbiBJbCh0KXtkeC5jYWxsKHRoaXMsKE9uKHQpLHQpKX1mdW5jdGlvbiBmaih0KXtULmNhbGwodGhpcyx0KSx0aGlzLmE9dH1mdW5jdGlvbiBUMnQodCl7QS5jYWxsKHRoaXMsdCksdGhpcy5hPXR9ZnVuY3Rpb24gQzJ0KHQpe1FrLmNhbGwodGhpcyx0KSx0aGlzLmE9dH1mdW5jdGlvbiBaVXQoKXt1aih0aGlzKSxuJCh0aGlzKSx0aGlzLl9kKCl9ZnVuY3Rpb24gSlV0KHQsZSl7dGhpcy5hPWUsQ1IuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHRXdCh0LGUpe3JldHVybiBuZXcgS2FlKHQuYSx0LmIsZSl9ZnVuY3Rpb24gZGoodCxlKXtyZXR1cm4gdC5sYXN0SW5kZXhPZihlKX1mdW5jdGlvbiBfMnQodCxlLG4pe3JldHVybiB0LmluZGV4T2YoZSxuKX1mdW5jdGlvbiBkQyh0KXtyZXR1cm4gdD09bnVsbD9UdTokbyh0KX1mdW5jdGlvbiBHWGUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDp0Lm5hbWV9ZnVuY3Rpb24gUzJ0KHQpe3JldHVybiB0LmEhPW51bGw/dC5hOm51bGx9ZnVuY3Rpb24gVlhlKHQpe3JldHVybiBrUih0LmEpP0ZRdCh0KTpudWxsfWZ1bmN0aW9uIGVudCh0LGUpe3JldHVybiBJQyh0LmEsZSkhPW51bGx9ZnVuY3Rpb24gTnUodCxlKXtyZXR1cm4hIWUmJnQuYltlLmddPT1lfWZ1bmN0aW9uIEl2KHQpe3JldHVybiB0LiRIfHwodC4kSD0rK2l4bil9ZnVuY3Rpb24gVVhlKHQpe3JldHVybiB0LmwrdC5tKmY2K3QuaCp4Mn1mdW5jdGlvbiBlV3QodCxlKXtyZXR1cm4gdWUoZS5hLHQuYSksdC5hfWZ1bmN0aW9uIG5XdCh0LGUpe3JldHVybiB1ZShlLmIsdC5hKSx0LmF9ZnVuY3Rpb24gRHYodCxlKXtyZXR1cm4gdWUoZS5hLHQuYSksdC5hfWZ1bmN0aW9uIE92KHQpe3JldHVybiBRbih0LmEhPW51bGwpLHQuYX1mdW5jdGlvbiBubnQodCl7a3QuY2FsbCh0aGlzLG5ldyBFbXQodCkpfWZ1bmN0aW9uIEEydCh0LGUpe0wzdC5jYWxsKHRoaXMsdCxlLG51bGwpfWZ1bmN0aW9uIGdDKHQpe3RoaXMuYT10LHguY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGdqKCl7Z2o9WixaSD1uZXcgT3MoT2ZlLDApfWZ1bmN0aW9uIHBqKHQsZSl7cmV0dXJuKyt0LmIsdWUodC5hLGUpfWZ1bmN0aW9uIEwydCh0LGUpe3JldHVybisrdC5iLHZ1KHQuYSxlKX1mdW5jdGlvbiBXWGUodCxlKXtyZXR1cm4gTHModC5uLmEsZS5uLmEpfWZ1bmN0aW9uIEtYZSh0LGUpe3JldHVybiBMcyh0LmMuZCxlLmMuZCl9ZnVuY3Rpb24gWVhlKHQsZSl7cmV0dXJuIExzKHQuYy5jLGUuYy5jKX1mdW5jdGlvbiBndSh0LGUpe3JldHVybiB1KEFpKHQuYixlKSwxNSl9ZnVuY3Rpb24gWFhlKHQsZSl7cmV0dXJuIHQubi5iPShPbihlKSxlKX1mdW5jdGlvbiBRWGUodCxlKXtyZXR1cm4gdC5uLmI9KE9uKGUpLGUpfWZ1bmN0aW9uIHBDKHQpe3JldHVybiBWbyh0LmEpfHxWbyh0LmIpfWZ1bmN0aW9uIFpYZSh0LGUsbil7cmV0dXJuIExadCh0LGUsbix0LmIpfWZ1bmN0aW9uIE0ydCh0LGUsbil7cmV0dXJuIExadCh0LGUsbix0LmMpfWZ1bmN0aW9uIEkydCh0LGUsbil7dSh3SSh0LGUpLDIxKS5GYyhuKX1mdW5jdGlvbiBKWGUodCxlLG4pe0ZpdCh0LmEsbikscXoodC5hLGUpfWZ1bmN0aW9uIE5NKHQsZSl7VjkoKSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBiaih0LGUpe0VnKCksdGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gcm50KHQsZSl7T250KCksdGhpcy5mPWUsdGhpcy5kPXR9ZnVuY3Rpb24gRDJ0KHQsZSl7Ym10KGUsdCksdGhpcy5kPXQsdGhpcy5jPWV9ZnVuY3Rpb24gVGcodCl7dmFyIGU7ZT10LmEsdC5hPXQuYix0LmI9ZX1mdW5jdGlvbiB0UWUodCl7cmV0dXJuIGxmKCksISF0JiYhdC5kYygpfWZ1bmN0aW9uIGVRZSh0KXtyZXR1cm4gbmV3IFdtKDMsdCl9ZnVuY3Rpb24gTzJ0KHQsZSl7cmV0dXJuIG5ldyBKV3QodCx0LmdjKCksZSl9ZnVuY3Rpb24gblFlKHQpe3JldHVybiBkUigpLFVyKChUUXQoKSxnZ2UpLHQpfWZ1bmN0aW9uIEx4KHQpe3RoaXMuZD10LGVyLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBNeCh0KXt0aGlzLmM9dCxlci5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUE0odCl7dGhpcy5jPXQsTHguY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHJXdCgpe3E5KCksdGhpcy5iPW5ldyB3MSh0aGlzKX1mdW5jdGlvbiBIZCh0KXtyZXR1cm4gQmwodCxteSksbmV3IFljKHQpfWZ1bmN0aW9uIGlXdCh0KXtyZXR1cm4gVDgoKSxwYXJzZUludCh0KXx8LTF9ZnVuY3Rpb24gRGwodCxlLG4pe3JldHVybiB0LnN1YnN0cihlLG4tZSl9ZnVuY3Rpb24gbDgodCxlLG4pe3JldHVybiBfMnQodCxFdShlKSxuKX1mdW5jdGlvbiBpbnQodCl7cmV0dXJuIGR3dCh0LmMsdC5jLmxlbmd0aCl9ZnVuY3Rpb24gclFlKHQpe3JldHVybiB0LmYhPW51bGw/dC5mOiIiK3QuZ31mdW5jdGlvbiBzbnQodCl7cmV0dXJuIHQuZiE9bnVsbD90LmY6IiIrdC5nfWZ1bmN0aW9uIGFudCh0KXtyZXR1cm4gUW4odC5iIT0wKSx0LmEuYS5jfWZ1bmN0aW9uIHZqKHQpe3JldHVybiBRbih0LmIhPTApLHQuYy5iLmN9ZnVuY3Rpb24gRk0odCl7RXQodCwxNTApJiZ1KHQsMTUwKS5HaCgpfWZ1bmN0aW9uIHdqKHQpe3JldHVybiB0LmI9dShQWHQodC5hKSw0Mil9ZnVuY3Rpb24gTjJ0KHQpe2k4KCksdGhpcy5iPXQsdGhpcy5hPSEwfWZ1bmN0aW9uIHNXdCh0KXtTUigpLHRoaXMuYj10LHRoaXMuYT0hMH1mdW5jdGlvbiBhV3QodCl7dC5kPW5ldyBjV3QodCksdC5lPW5ldyBDcn1mdW5jdGlvbiBvV3QodCl7aWYoIXQpdGhyb3cgcnQobmV3IGVoKX1mdW5jdGlvbiBQMnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IHVNKX1mdW5jdGlvbiBQbSh0KXtpZighdCl0aHJvdyBydChuZXcgSXUpfWZ1bmN0aW9uIGlRZSh0KXtpZighdCl0aHJvdyBydChuZXcgSHR0KX1mdW5jdGlvbiBRbih0KXtpZighdCl0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIGNXdCh0KXtfdnQuY2FsbCh0aGlzLHQsbnVsbCxudWxsKX1mdW5jdGlvbiB1V3QoKXtHci5jYWxsKHRoaXMsIlBPTFlPTUlOTyIsMCl9ZnVuY3Rpb24gbFd0KHQsZSxuLHIpe3R3dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gc1FlKHQsZSl7cmV0dXJuIFpwKCksbG4odCxlLmUsZSl9ZnVuY3Rpb24gYVFlKHQsZSxuKXtyZXR1cm4gRFIoKSxuLnFnKHQsZSl9ZnVuY3Rpb24gVnModCxlKXtyZXR1cm4hIXQucSYma2wodC5xLGUpfWZ1bmN0aW9uIG9RZSh0LGUpe3JldHVybiB0PjA/ZSplL3Q6ZSplKjEwMH1mdW5jdGlvbiBjUWUodCxlKXtyZXR1cm4gdD4wP2UvKHQqdCk6ZSoxMDB9ZnVuY3Rpb24gdVFlKHQsZSxuKXtyZXR1cm4gdWUoZSxyaWUodCxuKSl9ZnVuY3Rpb24gbFFlKHQsZSxuKXtPJCgpLHQuWGUoZSkmJm4udGQodCl9ZnVuY3Rpb24gaDgodCxlLG4pe3ZhciByO3I9dC5aYyhlKSxyLlJiKG4pfWZ1bmN0aW9uIEZtKHQsZSxuKXtyZXR1cm4gdC5hKz1lLHQuYis9bix0fWZ1bmN0aW9uIGhRZSh0LGUsbil7cmV0dXJuIHQuYSo9ZSx0LmIqPW4sdH1mdW5jdGlvbiBCTSh0LGUsbil7cmV0dXJuIHQuYS09ZSx0LmItPW4sdH1mdW5jdGlvbiBGMnQodCxlKXtyZXR1cm4gdC5hPWUuYSx0LmI9ZS5iLHR9ZnVuY3Rpb24gbWoodCl7cmV0dXJuIHQuYT0tdC5hLHQuYj0tdC5iLHR9ZnVuY3Rpb24gaFd0KHQpe3RoaXMuYz10LHRoaXMuYT0xLHRoaXMuYj0xfWZ1bmN0aW9uIGZXdCh0KXt0aGlzLmM9dCx5dSh0LDApLHh1KHQsMCl9ZnVuY3Rpb24gZFd0KHQpe1FpLmNhbGwodGhpcyksekModGhpcyx0KX1mdW5jdGlvbiBnV3QodCl7SWF0KCksanp0KHRoaXMpLHRoaXMubWYodCl9ZnVuY3Rpb24gcFd0KHQsZSl7VjkoKSxOTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBCMnQodCxlKXtFZygpLGJqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGJXdCh0LGUpe0VnKCksYmouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdld0KHQsZSl7RWcoKSxCMnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geWwodCxlLG4pe1RsLmNhbGwodGhpcyx0LGUsbiwyKX1mdW5jdGlvbiBvbnQodCxlKXtuaCgpLFBqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHdXdCh0LGUpe25oKCksb250LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFIydCh0LGUpe25oKCksb250LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG1XdCh0LGUpe25oKCksUjJ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGoydCh0LGUpe25oKCksUGouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geVd0KHQsZSl7bmgoKSxqMnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geFd0KHQsZSl7bmgoKSxQai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBmUWUodCxlKXtyZXR1cm4gdC5jLkZjKHUoZSwxMzMpKX1mdW5jdGlvbiAkMnQodCxlLG4pe3JldHVybiBFcShtSSh0LGUpLG4pfWZ1bmN0aW9uIGRRZSh0LGUsbil7cmV0dXJuIGUuUWsodC5lLHQuYyxuKX1mdW5jdGlvbiBnUWUodCxlLG4pe3JldHVybiBlLlJrKHQuZSx0LmMsbil9ZnVuY3Rpb24gY250KHQsZSl7cmV0dXJuIEtwKHQuZSx1KGUsNDkpKX1mdW5jdGlvbiBwUWUodCxlLG4pe0pDKGlsKHQuYSksZSxEUXQobikpfWZ1bmN0aW9uIGJRZSh0LGUsbil7SkMoTGModC5hKSxlLElRdChuKSl9ZnVuY3Rpb24gejJ0KHQsZSl7ZS4kbW9kQ291bnQ9dC4kbW9kQ291bnR9ZnVuY3Rpb24gYkMoKXtiQz1aLCRTPW5ldyBHaSgicm9vdCIpfWZ1bmN0aW9uIGY4KCl7Zjg9WixsTj1uZXcgdnF0LG5ldyB3cXR9ZnVuY3Rpb24ga1d0KCl7dGhpcy5hPW5ldyBIdix0aGlzLmI9bmV3IEh2fWZ1bmN0aW9uIHEydCgpe3plZS5jYWxsKHRoaXMpLHRoaXMuQmJ8PVlhfWZ1bmN0aW9uIEVXdCgpe0dyLmNhbGwodGhpcywiR1JPV19UUkVFIiwwKX1mdW5jdGlvbiB2UWUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDpQNG4odCl9ZnVuY3Rpb24gd1FlKHQpe3JldHVybiB0PT1udWxsP251bGw6SDBuKHQpfWZ1bmN0aW9uIG1RZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIHlRZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIEwwKHQpe3Qubz09bnVsbCYmdmJuKHQpfWZ1bmN0aW9uIFJlKHQpe3JldHVybiBtQyh0PT1udWxsfHxPbSh0KSksdH1mdW5jdGlvbiB5ZSh0KXtyZXR1cm4gbUModD09bnVsbHx8Tm0odCkpLHR9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIG1DKHQ9PW51bGx8fGVhKHQpKSx0fWZ1bmN0aW9uIEgydCh0KXt0aGlzLnE9bmV3IGIuRGF0ZShWdih0KSl9ZnVuY3Rpb24gUk0odCxlKXt0aGlzLmM9dCxuOC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB5aih0LGUpe3RoaXMuYT10LFJNLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHhRZSh0LGUpe3RoaXMuZD10LE10dCh0aGlzKSx0aGlzLmI9ZX1mdW5jdGlvbiBHMnQodCxlKXtqcnQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIFYydCh0LGUpe2pydC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24ga1FlKHQpe3czdC5jYWxsKHRoaXMsMCwwKSx0aGlzLmY9dH1mdW5jdGlvbiBVMnQodCxlLG4pe0kkLmNhbGwodGhpcyx0LGUsbixudWxsKX1mdW5jdGlvbiBUV3QodCxlLG4pe0kkLmNhbGwodGhpcyx0LGUsbixudWxsKX1mdW5jdGlvbiBFUWUodCxlLG4pe3JldHVybiB0LnVlKGUsbik8PTA/bjplfWZ1bmN0aW9uIFRRZSh0LGUsbil7cmV0dXJuIHQudWUoZSxuKTw9MD9lOm59ZnVuY3Rpb24gQ1FlKHQsZSl7cmV0dXJuIHUoV3YodC5iLGUpLDE0OSl9ZnVuY3Rpb24gX1FlKHQsZSl7cmV0dXJuIHUoV3YodC5jLGUpLDIyOSl9ZnVuY3Rpb24gdW50KHQpe3JldHVybiB1KEZlKHQuYSx0LmIpLDI4Nyl9ZnVuY3Rpb24gQ1d0KHQpe3JldHVybiBuZXcgJGUodC5jLHQuZCt0LmEpfWZ1bmN0aW9uIF9XdCh0KXtyZXR1cm4gT2woKSx1VXQodSh0LDE5NykpfWZ1bmN0aW9uIEJtKCl7Qm09Wix0N3Q9dW4oKF9sKCksVjIpKX1mdW5jdGlvbiBTUWUodCxlKXtlLmE/ZnZuKHQsZSk6ZW50KHQuYSxlLmIpfWZ1bmN0aW9uIFNXdCh0LGUpe1IxfHx1ZSh0LmEsZSl9ZnVuY3Rpb24gQVFlKHQsZSl7cmV0dXJuIHZNKCksVjgoZS5kLmksdCl9ZnVuY3Rpb24gTFFlKHQsZSl7cmV0dXJuIFh4KCksbmV3IEx1ZShlLHQpfWZ1bmN0aW9uIGxkKHQsZSl7cmV0dXJuIHRJKGUsWXh0KSx0LmY9ZSx0fWZ1bmN0aW9uIFcydCh0LGUsbil7cmV0dXJuIG49emwodCxlLDMsbiksbn1mdW5jdGlvbiBLMnQodCxlLG4pe3JldHVybiBuPXpsKHQsZSw2LG4pLG59ZnVuY3Rpb24gWTJ0KHQsZSxuKXtyZXR1cm4gbj16bCh0LGUsOSxuKSxufWZ1bmN0aW9uIGpNKHQsZSxuKXsrK3Quaix0LktpKCksQnJ0KHQsZSxuKX1mdW5jdGlvbiBBV3QodCxlLG4peysrdC5qLHQuSGkoZSx0Lm9pKGUsbikpfWZ1bmN0aW9uIExXdCh0LGUsbil7dmFyIHI7cj10LlpjKGUpLHIuUmIobil9ZnVuY3Rpb24gTVd0KHQsZSxuKXtyZXR1cm4gdXh0KHQuYyx0LmIsZSxuKX1mdW5jdGlvbiBYMnQodCxlKXtyZXR1cm4oZSZ2aSkldC5kLmxlbmd0aH1mdW5jdGlvbiBPcyh0LGUpe0dpLmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBRMnQodCxlKXt3cHQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIGxudCh0LGUpe3dwdC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24gSVd0KHQsZSl7dGhpcy5jPXQsS3YuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIERXdCh0LGUpe3RoaXMuYT10LE96dC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gJE0odCxlKXt0aGlzLmE9dCxPenQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIE9XdCh0KXt0aGlzLmE9KEJsKHQsbXkpLG5ldyBZYyh0KSl9ZnVuY3Rpb24gTld0KHQpe3RoaXMuYT0oQmwodCxteSksbmV3IFljKHQpKX1mdW5jdGlvbiB6TSh0KXtyZXR1cm4hdC5hJiYodC5hPW5ldyB1dCksdC5hfWZ1bmN0aW9uIFBXdCh0KXtyZXR1cm4gdD44PzA6dCsxfWZ1bmN0aW9uIE1RZSh0LGUpe3JldHVybiBGbigpLHQ9PWU/MDp0PzE6LTF9ZnVuY3Rpb24gWjJ0KHQsZSxuKXtyZXR1cm4gTngodCx1KGUsMjIpLG4pfWZ1bmN0aW9uIElRZSh0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX1mdW5jdGlvbiBGV3QodCxlLG4pe3JldHVybiB0LmErPUFoKGUsMCxuKSx0fWZ1bmN0aW9uIEoydCh0LGUpe3ZhciBuO3JldHVybiBuPXQuZSx0LmU9ZSxufWZ1bmN0aW9uIERRZSh0LGUpe3ZhciBuO249dFtob3RdLG4uY2FsbCh0LGUpfWZ1bmN0aW9uIE9RZSh0LGUpe3ZhciBuO249dFtob3RdLG4uY2FsbCh0LGUpfWZ1bmN0aW9uIFJtKHQsZSl7dC5hLlZjKHQuYixlKSwrK3QuYix0LmM9LTF9ZnVuY3Rpb24gQld0KHQpe1l1KHQuZSksdC5kLmI9dC5kLHQuZC5hPXQuZH1mdW5jdGlvbiBxTSh0KXt0LmI/cU0odC5iKTp0LmYuYy56Yyh0LmUsdC5kKX1mdW5jdGlvbiBOUWUodCxlLG4pe1diKCksdnR0KHQsZS5DZSh0LmEsbikpfWZ1bmN0aW9uIFBRZSh0LGUpe3JldHVybiBjZXQobWllKHQuYSxlLCEwKSl9ZnVuY3Rpb24gRlFlKHQsZSl7cmV0dXJuIGNldCh5aWUodC5hLGUsITApKX1mdW5jdGlvbiB1Zih0LGUpe3JldHVybiB3UihuZXcgQXJyYXkoZSksdCl9ZnVuY3Rpb24gaG50KHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfWZ1bmN0aW9uIEJRZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOnQubWVzc2FnZX1mdW5jdGlvbiBSV3QoKXt0aGlzLmE9bmV3IGxlLHRoaXMuYj1uZXcgbGV9ZnVuY3Rpb24gald0KCl7dGhpcy5hPW5ldyBGNSx0aGlzLmI9bmV3IEt6dH1mdW5jdGlvbiAkV3QoKXt0aGlzLmI9bmV3IFRhLHRoaXMuYz1uZXcgbGV9ZnVuY3Rpb24gdHZ0KCl7dGhpcy5kPW5ldyBUYSx0aGlzLmU9bmV3IFRhfWZ1bmN0aW9uIGV2dCgpe3RoaXMubj1uZXcgVGEsdGhpcy5vPW5ldyBUYX1mdW5jdGlvbiB4aigpe3RoaXMubj1uZXcgd3gsdGhpcy5pPW5ldyBBeH1mdW5jdGlvbiB6V3QoKXt0aGlzLmE9bmV3IGpKLHRoaXMuYj1uZXcgelh9ZnVuY3Rpb24gcVd0KCl7dGhpcy5hPW5ldyBsZSx0aGlzLmQ9bmV3IGxlfWZ1bmN0aW9uIEhXdCgpe3RoaXMuYj1uZXcgcXMsdGhpcy5hPW5ldyBxc31mdW5jdGlvbiBHV3QoKXt0aGlzLmI9bmV3IENyLHRoaXMuYT1uZXcgQ3J9ZnVuY3Rpb24gVld0KCl7dGhpcy5iPW5ldyBDSHQsdGhpcy5hPW5ldyBOUX1mdW5jdGlvbiBVV3QoKXt4ai5jYWxsKHRoaXMpLHRoaXMuYT1uZXcgVGF9ZnVuY3Rpb24gdkModCl7Y2NuLmNhbGwodGhpcyx0LChQJCgpLEF1dCkpfWZ1bmN0aW9uIG52dCh0LGUsbixyKXtGai5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gUlFlKHQsZSxuKXtuIT1udWxsJiZaJChlLGdzdCh0LG4pKX1mdW5jdGlvbiBqUWUodCxlLG4pe24hPW51bGwmJkokKGUsZ3N0KHQsbikpfWZ1bmN0aW9uIHJ2dCh0LGUsbil7cmV0dXJuIG49emwodCxlLDExLG4pLG59ZnVuY3Rpb24gTGkodCxlKXtyZXR1cm4gdC5hKz1lLmEsdC5iKz1lLmIsdH1mdW5jdGlvbiBuYSh0LGUpe3JldHVybiB0LmEtPWUuYSx0LmItPWUuYix0fWZ1bmN0aW9uICRRZSh0LGUpe3JldHVybiB0Lm4uYT0oT24oZSksZSsxMCl9ZnVuY3Rpb24gelFlKHQsZSl7cmV0dXJuIHQubi5hPShPbihlKSxlKzEwKX1mdW5jdGlvbiBxUWUodCxlKXtyZXR1cm4gZT09dHx8ZkUoY3EoZSksdCl9ZnVuY3Rpb24gV1d0KHQsZSl7cmV0dXJuIGtpKHQuYSxlLCIiKT09bnVsbH1mdW5jdGlvbiBIUWUodCxlKXtyZXR1cm4gdk0oKSwhVjgoZS5kLmksdCl9ZnVuY3Rpb24gR1FlKHQsZSl7T3AodC5mKT9vYm4odCxlKTpWZG4odCxlKX1mdW5jdGlvbiBWUWUodCxlKXt2YXIgbjtyZXR1cm4gbj1lLkhoKHQuYSksbn1mdW5jdGlvbiBqbSh0LGUpe21vLmNhbGwodGhpcyxYXyt0K1MyK2UpfWZ1bmN0aW9uIEl4KHQsZSxuLHIpe2hlLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBpdnQodCxlLG4scil7aGUuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIEtXdCh0LGUsbixyKXtpdnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFlXdCh0LGUsbixyKXtVai5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZm50KHQsZSxuLHIpe1VqLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBzdnQodCxlLG4scil7VWouY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFhXdCh0LGUsbixyKXtmbnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGF2dCh0LGUsbixyKXtmbnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIENuKHQsZSxuLHIpe3N2dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gUVd0KHQsZSxuLHIpe2F2dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gWld0KHQsZSxuLHIpe2l3dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gSld0KHQsZSxuKXt0aGlzLmE9dCxEMnQuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gdEt0KHQsZSxuKXt0aGlzLmM9ZSx0aGlzLmI9bix0aGlzLmE9dH1mdW5jdGlvbiBVUWUodCxlLG4pe3JldHVybiB0LmQ9dShlLktiKG4pLDE2NCl9ZnVuY3Rpb24gb3Z0KHQsZSl7cmV0dXJuIHQuQWooKS5OaCgpLktoKHQsZSl9ZnVuY3Rpb24gY3Z0KHQsZSl7cmV0dXJuIHQuQWooKS5OaCgpLkloKHQsZSl9ZnVuY3Rpb24gZUt0KHQsZSl7cmV0dXJuIE9uKHQpLEd0KHQpPT09R3QoZSl9ZnVuY3Rpb24gaG4odCxlKXtyZXR1cm4gT24odCksR3QodCk9PT1HdChlKX1mdW5jdGlvbiBkbnQodCxlKXtyZXR1cm4gY2V0KG1pZSh0LmEsZSwhMSkpfWZ1bmN0aW9uIGdudCh0LGUpe3JldHVybiBjZXQoeWllKHQuYSxlLCExKSl9ZnVuY3Rpb24gV1FlKHQsZSl7cmV0dXJuIHQuYi5zZChuZXcgTkd0KHQsZSkpfWZ1bmN0aW9uIEtRZSh0LGUpe3JldHVybiB0LmIuc2QobmV3IFBHdCh0LGUpKX1mdW5jdGlvbiBuS3QodCxlKXtyZXR1cm4gdC5iLnNkKG5ldyBGR3QodCxlKSl9ZnVuY3Rpb24gdXZ0KHQsZSxuKXtyZXR1cm4gdC5sYXN0SW5kZXhPZihlLG4pfWZ1bmN0aW9uIFlRZSh0LGUsbil7cmV0dXJuIExzKHRbZS5iXSx0W24uYl0pfWZ1bmN0aW9uIFhRZSh0LGUpe3JldHVybiBKdChlLChUZSgpLF9PKSx0KX1mdW5jdGlvbiBRUWUodCxlKXtyZXR1cm4gZHUoZS5hLmQucCx0LmEuZC5wKX1mdW5jdGlvbiBaUWUodCxlKXtyZXR1cm4gZHUodC5hLmQucCxlLmEuZC5wKX1mdW5jdGlvbiBKUWUodCxlKXtyZXR1cm4gTHModC5jLXQucyxlLmMtZS5zKX1mdW5jdGlvbiByS3QodCl7cmV0dXJuIHQuYz9Sbyh0LmMuYSx0LDApOi0xfWZ1bmN0aW9uIHRaZSh0KXtyZXR1cm4gdDwxMDA/bnVsbDpuZXcgU3AodCl9ZnVuY3Rpb24gRHgodCl7cmV0dXJuIHQ9PUcyfHx0PT1oMHx8dD09VmN9ZnVuY3Rpb24gaUt0KHQsZSl7cmV0dXJuIEV0KGUsMTUpJiZsdWUodC5jLGUpfWZ1bmN0aW9uIGVaZSh0LGUpe1IxfHxlJiYodC5kPWUpfWZ1bmN0aW9uIHBudCh0LGUpe3ZhciBuO3JldHVybiBuPWUsISFEeXQodCxuKX1mdW5jdGlvbiBsdnQodCxlKXt0aGlzLmM9dCxxbnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gc0t0KHQpe3RoaXMuYz10LEdldC5jYWxsKHRoaXMsSXEsMCl9ZnVuY3Rpb24gYUt0KHQsZSl7YXRuLmNhbGwodGhpcyx0LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIG5aZSh0LGUsbil7cmV0dXJuIHUodC5jLDY5KS5sayhlLG4pfWZ1bmN0aW9uIGtqKHQsZSxuKXtyZXR1cm4gdSh0LmMsNjkpLm1rKGUsbil9ZnVuY3Rpb24gclplKHQsZSxuKXtyZXR1cm4gZFFlKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gaHZ0KHQsZSxuKXtyZXR1cm4gZ1FlKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gaVplKHQsZSxuKXtyZXR1cm4gaWFlKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gb0t0KHQsZSxuKXtyZXR1cm4gbjBuKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gd0ModCxlKXtyZXR1cm4gZT09bnVsbD9udWxsOm55KHQuYixlKX1mdW5jdGlvbiBmdnQodCl7cmV0dXJuIE5tKHQpPyhPbih0KSx0KTp0LmtlKCl9ZnVuY3Rpb24gRWoodCl7cmV0dXJuIWlzTmFOKHQpJiYhaXNGaW5pdGUodCl9ZnVuY3Rpb24gY0t0KHQpe2hkKCksdGhpcy5hPSh2bigpLG5ldyBRayh0KSl9ZnVuY3Rpb24gSE0odCl7ZzgoKSx0aGlzLmQ9dCx0aGlzLmE9bmV3IFAzfWZ1bmN0aW9uIHJoKHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB1S3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIGxLdCh0LGUsbil7dGhpcy5kPXQsdGhpcy5iPW4sdGhpcy5hPWV9ZnVuY3Rpb24gYm50KHQpe0VVdCh0aGlzKSxfaCh0aGlzKSxVYSh0aGlzLHQpfWZ1bmN0aW9uIFB1KHQpe1lldCh0aGlzKSxTdnQodGhpcy5jLDAsdC5QYygpKX1mdW5jdGlvbiBoS3QodCl7RWwodC5hKSxjdGUodC5jLHQuYiksdC5iPW51bGx9ZnVuY3Rpb24gZkt0KHQpe3RoaXMuYT10LHFkKCksa3UoRGF0ZS5ub3coKSl9ZnVuY3Rpb24gZEt0KCl7ZEt0PVosSUV0PW5ldyBfLFlIPW5ldyBffWZ1bmN0aW9uIHZudCgpe3ZudD1aLGtFdD1uZXcgSXQsSWdlPW5ldyBGdH1mdW5jdGlvbiBnS3QoKXtnS3Q9WixqNGU9UHQoWG4sSWUsMSwwLDUsMSl9ZnVuY3Rpb24gcEt0KCl7cEt0PVoscjVlPVB0KFhuLEllLDEsMCw1LDEpfWZ1bmN0aW9uIGR2dCgpe2R2dD1aLGk1ZT1QdChYbixJZSwxLDAsNSwxKX1mdW5jdGlvbiBoZCgpe2hkPVosbmV3IHhwdCgodm4oKSx2bigpLGlvKSl9ZnVuY3Rpb24gc1plKHQpe3JldHVybiBQJCgpLFVyKChtdGUoKSxOZ2UpLHQpfWZ1bmN0aW9uIGFaZSh0KXtyZXR1cm4gSTEoKSxVcigoUkp0KCksJGdlKSx0KX1mdW5jdGlvbiBvWmUodCl7cmV0dXJuIE56KCksVXIoKFZadCgpLFVnZSksdCl9ZnVuY3Rpb24gY1plKHQpe3JldHVybiAkJCgpLFVyKChVWnQoKSxXZ2UpLHQpfWZ1bmN0aW9uIHVaZSh0KXtyZXR1cm4gZ3EoKSxVcigoRG5lKCksS2dlKSx0KX1mdW5jdGlvbiBsWmUodCl7cmV0dXJuIEtmKCksVXIoKFBKdCgpLFFnZSksdCl9ZnVuY3Rpb24gaFplKHQpe3JldHVybiBYdSgpLFVyKChGSnQoKSxKZ2UpLHQpfWZ1bmN0aW9uIGZaZSh0KXtyZXR1cm4gd3UoKSxVcigoQkp0KCksZXBlKSx0KX1mdW5jdGlvbiBkWmUodCl7cmV0dXJuIExxKCksVXIoKEtWdCgpLFRwZSksdCl9ZnVuY3Rpb24gZ1plKHQpe3JldHVybiB0dygpLFVyKCh4dGUoKSxfcGUpLHQpfWZ1bmN0aW9uIHBaZSh0KXtyZXR1cm4gbjYoKSxVcigoa3RlKCksQXBlKSx0KX1mdW5jdGlvbiBiWmUodCl7cmV0dXJuIHNfKCksVXIoKEV0ZSgpLElwZSksdCl9ZnVuY3Rpb24gdlplKHQpe3JldHVybiBBUigpLFVyKChFWnQoKSxEcGUpLHQpfWZ1bmN0aW9uIHdaZSh0KXtyZXR1cm4geiQoKSxVcigoV1p0KCksWXBlKSx0KX1mdW5jdGlvbiBtWmUodCl7cmV0dXJuIGpDKCksVXIoKGpKdCgpLGJiZSksdCl9ZnVuY3Rpb24geVplKHQpe3JldHVybiBXYSgpLFVyKChKdGUoKSx5YmUpLHQpfWZ1bmN0aW9uIHhaZSh0KXtyZXR1cm4gSzgoKSxVcigoeXRlKCksQ2JlKSx0KX1mdW5jdGlvbiBrWmUodCl7cmV0dXJuIGV3KCksVXIoKCRKdCgpLEliZSksdCl9ZnVuY3Rpb24gZ3Z0KHQsZSl7aWYoIXQpdGhyb3cgcnQobmV3IFBuKGUpKX1mdW5jdGlvbiBFWmUodCl7cmV0dXJuIEduKCksVXIoKHllZSgpLFBiZSksdCl9ZnVuY3Rpb24gcHZ0KHQpe0ZqLmNhbGwodGhpcyx0LmQsdC5jLHQuYSx0LmIpfWZ1bmN0aW9uIHdudCh0KXtGai5jYWxsKHRoaXMsdC5kLHQuYyx0LmEsdC5iKX1mdW5jdGlvbiBidnQodCxlLG4pe3RoaXMuYj10LHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIFRqKHQsZSxuKXt0aGlzLmI9dCx0aGlzLmE9ZSx0aGlzLmM9bn1mdW5jdGlvbiBiS3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHZ2dCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gdkt0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB3dnQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHdLdCh0LGUsbil7dGhpcy5iPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gQ2oodCxlLG4pe3RoaXMuZT1lLHRoaXMuYj10LHRoaXMuZD1ufWZ1bmN0aW9uIFRaZSh0LGUsbil7cmV0dXJuIFdiKCksdC5hLk9kKGUsbiksZX1mdW5jdGlvbiBtbnQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IFV1LGUuZT10LGV9ZnVuY3Rpb24gbXZ0KHQpe3ZhciBlO3JldHVybiBlPW5ldyBlcXQsZS5iPXQsZX1mdW5jdGlvbiBHTSgpe0dNPVosY0c9bmV3IF9ZLHVHPW5ldyBTWX1mdW5jdGlvbiBsZigpe2xmPVosWWJlPW5ldyBiWCxYYmU9bmV3IHlGfWZ1bmN0aW9uIENaZSh0KXtyZXR1cm4gZHooKSxVcigoQ3RlKCksR2JlKSx0KX1mdW5jdGlvbiBfWmUodCl7cmV0dXJuIE0xKCksVXIoKFN0ZSgpLEpiZSksdCl9ZnVuY3Rpb24gU1plKHQpe3JldHVybiBmcSgpLFVyKCh4bmUoKSxvMmUpLHQpfWZ1bmN0aW9uIEFaZSh0KXtyZXR1cm4gaTYoKSxVcigoRWVlKCksYzJlKSx0KX1mdW5jdGlvbiBMWmUodCl7cmV0dXJuIEQkKCksVXIoKEpadCgpLHUyZSksdCl9ZnVuY3Rpb24gTVplKHQpe3JldHVybiBZeCgpLFVyKCh6SnQoKSxsMmUpLHQpfWZ1bmN0aW9uIElaZSh0KXtyZXR1cm4gZzQoKSxVcigoS3RlKCksZTJlKSx0KX1mdW5jdGlvbiBEWmUodCl7cmV0dXJuIEp2KCksVXIoKEdKdCgpLGEyZSksdCl9ZnVuY3Rpb24gT1plKHQpe3JldHVybiBYJCgpLFVyKChxSnQoKSxoMmUpLHQpfWZ1bmN0aW9uIE5aZSh0KXtyZXR1cm4gdjIoKSxVcigoVXRlKCksZjJlKSx0KX1mdW5jdGlvbiBQWmUodCl7cmV0dXJuIFRJKCksVXIoKFladCgpLGQyZSksdCl9ZnVuY3Rpb24gRlplKHQpe3JldHVybiB1MigpLFVyKChISnQoKSxwMmUpLHQpfWZ1bmN0aW9uIEJaZSh0KXtyZXR1cm4gbnEoKSxVcigoU2VlKCksYjJlKSx0KX1mdW5jdGlvbiBSWmUodCl7cmV0dXJuIGJJKCksVXIoKFhadCgpLHYyZSksdCl9ZnVuY3Rpb24galplKHQpe3JldHVybiBuRCgpLFVyKChDZWUoKSx3MmUpLHQpfWZ1bmN0aW9uICRaZSh0KXtyZXR1cm4gZ0UoKSxVcigoVGVlKCksbTJlKSx0KX1mdW5jdGlvbiB6WmUodCl7cmV0dXJuIG9vKCksVXIoKFduZSgpLHkyZSksdCl9ZnVuY3Rpb24gcVplKHQpe3JldHVybiBXOCgpLFVyKChVSnQoKSx4MmUpLHQpfWZ1bmN0aW9uIEhaZSh0KXtyZXR1cm4gQjAoKSxVcigoVkp0KCksRTJlKSx0KX1mdW5jdGlvbiBHWmUodCl7cmV0dXJuIHgkKCksVXIoKHRKdCgpLFQyZSksdCl9ZnVuY3Rpb24gVlplKHQpe3JldHVybiBoaCgpLFVyKChZdGUoKSxDMmUpLHQpfWZ1bmN0aW9uIFVaZSh0KXtyZXR1cm4gWnooKSxVcigoX2VlKCksJHdlKSx0KX1mdW5jdGlvbiBXWmUodCl7cmV0dXJuIFlDKCksVXIoKFdKdCgpLHp3ZSksdCl9ZnVuY3Rpb24gS1plKHQpe3JldHVybiBzeSgpLFVyKChBdGUoKSxxd2UpLHQpfWZ1bmN0aW9uIFlaZSh0KXtyZXR1cm4gc28oKSxVcigoWEp0KCksS3dlKSx0KX1mdW5jdGlvbiBYWmUodCl7cmV0dXJuIHc0KCksVXIoKHluZSgpLEd3ZSksdCl9ZnVuY3Rpb24gUVplKHQpe3JldHVybiBqMCgpLFVyKChZSnQoKSxWd2UpLHQpfWZ1bmN0aW9uIFpaZSh0KXtyZXR1cm4geUkoKSxVcigoWlp0KCksVXdlKSx0KX1mdW5jdGlvbiBKWmUodCl7cmV0dXJuIHV6KCksVXIoKEtKdCgpLFl3ZSksdCl9ZnVuY3Rpb24gdEplKHQpe3JldHVybiBhXygpLFVyKChXdGUoKSxId2UpLHQpfWZ1bmN0aW9uIGVKZSh0KXtyZXR1cm4gbEkoKSxVcigoUVp0KCksWHdlKSx0KX1mdW5jdGlvbiBuSmUodCl7cmV0dXJuIHRFKCksVXIoKFpKdCgpLFF3ZSksdCl9ZnVuY3Rpb24gckplKHQpe3JldHVybiBveigpLFVyKChKSnQoKSxad2UpLHQpfWZ1bmN0aW9uIGlKZSh0KXtyZXR1cm4gZ3ooKSxVcigoUUp0KCksSndlKSx0KX1mdW5jdGlvbiBzSmUodCl7cmV0dXJuIFp2KCksVXIoKHR0ZSgpLGZtZSksdCl9ZnVuY3Rpb24gYUplKHQpe3JldHVybiBCQygpLFVyKChuSnQoKSx2bWUpLHQpfWZ1bmN0aW9uIG9KZSh0KXtyZXR1cm4gZGQoKSxVcigockp0KCksVG1lKSx0KX1mdW5jdGlvbiBjSmUodCl7cmV0dXJuIEUxKCksVXIoKGlKdCgpLF9tZSksdCl9ZnVuY3Rpb24gdUplKHQpe3JldHVybiBWZigpLFVyKChlSnQoKSx6bWUpLHQpfWZ1bmN0aW9uIGxKZSh0KXtyZXR1cm4gcXYoKSxVcigoc0p0KCksS21lKSx0KX1mdW5jdGlvbiBoSmUodCl7cmV0dXJuIHVFKCksVXIoKFR0ZSgpLFltZSksdCl9ZnVuY3Rpb24gZkplKHQpe3JldHVybiBmXygpLFVyKChBZWUoKSxRbWUpLHQpfWZ1bmN0aW9uIGRKZSh0KXtyZXR1cm4gZCQoKSxVcigoY0p0KCksaHllKSx0KX1mdW5jdGlvbiBnSmUodCl7cmV0dXJuIGl6KCksVXIoKG9KdCgpLHZ5ZSksdCl9ZnVuY3Rpb24gcEplKHQpe3JldHVybiB2JCgpLFVyKChhSnQoKSxmeWUpLHQpfWZ1bmN0aW9uIGJKZSh0KXtyZXR1cm4gQ3ooKSxVcigoZXRlKCksbXllKSx0KX1mdW5jdGlvbiB2SmUodCl7cmV0dXJuIE4kKCksVXIoKHVKdCgpLHl5ZSksdCl9ZnVuY3Rpb24gd0plKHQpe3JldHVybiBSSSgpLFVyKChudGUoKSx4eWUpLHQpfWZ1bmN0aW9uIG1KZSh0KXtyZXR1cm4gR3ooKSxVcigoX3RlKCksRnllKSx0KX1mdW5jdGlvbiB5SmUodCl7cmV0dXJuIGN6KCksVXIoKGl0ZSgpLEJ5ZSksdCl9ZnVuY3Rpb24geEplKHQpe3JldHVybiBUeigpLFVyKChydGUoKSxSeWUpLHQpfWZ1bmN0aW9uIGtKZSh0KXtyZXR1cm4geUUoKSxVcigoWnRlKCksaTNlKSx0KX1mdW5jdGlvbiBFSmUodCl7cmV0dXJuIEdJKCksVXIoKHN0ZSgpLHMzZSksdCl9ZnVuY3Rpb24gVEplKHQpe3JldHVybiBNUigpLFVyKCh4WnQoKSxhM2UpLHQpfWZ1bmN0aW9uIENKZSh0KXtyZXR1cm4gSVIoKSxVcigoeVp0KCksYzNlKSx0KX1mdW5jdGlvbiBfSmUodCl7cmV0dXJuIGhJKCksVXIoKGhKdCgpLHUzZSksdCl9ZnVuY3Rpb24gU0plKHQpe3JldHVybiBpRCgpLFVyKChYdGUoKSxsM2UpLHQpfWZ1bmN0aW9uIEFKZSh0KXtyZXR1cm4gSDkoKSxVcigoa1p0KCksXzNlKSx0KX1mdW5jdGlvbiBMSmUodCl7cmV0dXJuIE5JKCksVXIoKGxKdCgpLFMzZSksdCl9ZnVuY3Rpb24gTUplKHQpe3JldHVybiBYZigpLFVyKChRdGUoKSxPM2UpLHQpfWZ1bmN0aW9uIElKZSh0KXtyZXR1cm4gamcoKSxVcigoa25lKCksUDNlKSx0KX1mdW5jdGlvbiBESmUodCl7cmV0dXJuIFFkKCksVXIoKGtlZSgpLEYzZSksdCl9ZnVuY3Rpb24gT0plKHQpe3JldHVybiBjeSgpLFVyKCh4ZWUoKSxxM2UpLHQpfWZ1bmN0aW9uIE5KZSh0KXtyZXR1cm4gcm8oKSxVcigoWVZ0KCksemJlKSx0KX1mdW5jdGlvbiBQSmUodCl7cmV0dXJuIHE4KCksVXIoKEtadCgpLCRiZSksdCl9ZnVuY3Rpb24gRkplKHQpe3JldHVybiBhbygpLFVyKCh0ZWUoKSxyNGUpLHQpfWZ1bmN0aW9uIEJKZSh0KXtyZXR1cm4gQTEoKSxVcigob3RlKCksaTRlKSx0KX1mdW5jdGlvbiBSSmUodCl7cmV0dXJuIHEwKCksVXIoKEl0ZSgpLHM0ZSksdCl9ZnVuY3Rpb24gakplKHQpe3JldHVybiB0cSgpLFVyKChNZWUoKSxhNGUpLHQpfWZ1bmN0aW9uICRKZSh0KXtyZXR1cm4gJDAoKSxVcigoYXRlKCksYzRlKSx0KX1mdW5jdGlvbiB6SmUodCl7cmV0dXJuIGpsKCksVXIoKE10ZSgpLGw0ZSksdCl9ZnVuY3Rpb24gcUplKHQpe3JldHVybiBmeSgpLFVyKChJbmUoKSxoNGUpLHQpfWZ1bmN0aW9uIEhKZSh0KXtyZXR1cm4gYzQoKSxVcigoZWVlKCksZjRlKSx0KX1mdW5jdGlvbiBHSmUodCl7cmV0dXJuIG9hKCksVXIoKGJlZSgpLGQ0ZSksdCl9ZnVuY3Rpb24gVkplKHQpe3JldHVybiBRdSgpLFVyKChMZWUoKSxnNGUpLHQpfWZ1bmN0aW9uIFVKZSh0KXtyZXR1cm4gX2woKSxVcigoT3RlKCkseTRlKSx0KX1mdW5jdGlvbiBXSmUodCl7cmV0dXJuIGNsKCksVXIoKEtuZSgpLHg0ZSksdCl9ZnVuY3Rpb24gS0plKHQpe3JldHVybiBiZSgpLFVyKChuZWUoKSxwNGUpLHQpfWZ1bmN0aW9uIFlKZSh0KXtyZXR1cm4gQXooKSxVcigoRHRlKCksazRlKSx0KX1mdW5jdGlvbiBYSmUodCl7cmV0dXJuIENsKCksVXIoKEx0ZSgpLEM0ZSksdCl9ZnVuY3Rpb24gUUplKHQpe3JldHVybiB2RSgpLFVyKChFbmUoKSxSNGUpLHQpfWZ1bmN0aW9uIFpKZSh0LGUpe3JldHVybiBPbih0KSx0KyhPbihlKSxlKX1mdW5jdGlvbiBKSmUodCxlKXtyZXR1cm4gcWQoKSxNcihXdCh0LmEpLGUpfWZ1bmN0aW9uIHR0bih0LGUpe3JldHVybiBxZCgpLE1yKFd0KHQuYSksZSl9ZnVuY3Rpb24geW50KHQsZSl7dGhpcy5jPXQsdGhpcy5hPWUsdGhpcy5iPWUtdH1mdW5jdGlvbiBtS3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHl2dCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24geHZ0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB5S3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHhLdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gQ2codCxlLG4pe3RoaXMuZT10LHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIGtLdCh0LGUsbil7bmgoKSxPd3QuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiB4bnQodCxlLG4pe25oKCksdnd0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24ga3Z0KHQsZSxuKXtuaCgpLHZ3dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIEV2dCh0LGUsbil7bmgoKSx2d3QuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBFS3QodCxlLG4pe25oKCkseG50LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gVHZ0KHQsZSxuKXtuaCgpLHhudC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFRLdCh0LGUsbil7bmgoKSxUdnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBDS3QodCxlLG4pe25oKCksa3Z0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gX0t0KHQsZSxuKXtuaCgpLEV2dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFZNKHQsZSl7cmV0dXJuIEFyKHQpLEFyKGUpLG5ldyBXSHQodCxlKX1mdW5jdGlvbiBPeCh0LGUpe3JldHVybiBBcih0KSxBcihlKSxuZXcgakt0KHQsZSl9ZnVuY3Rpb24gZXRuKHQsZSl7cmV0dXJuIEFyKHQpLEFyKGUpLG5ldyAkS3QodCxlKX1mdW5jdGlvbiBudG4odCxlKXtyZXR1cm4gQXIodCksQXIoZSksbmV3IFlIdCh0LGUpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gbUModD09bnVsbHx8cnN0KHQsZSkpLHR9ZnVuY3Rpb24gZDgodCl7dmFyIGU7cmV0dXJuIGU9bmV3IGxlLFhydChlLHQpLGV9ZnVuY3Rpb24gcnRuKHQpe3ZhciBlO3JldHVybiBlPW5ldyBxcyxYcnQoZSx0KSxlfWZ1bmN0aW9uIFNLdCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgTXB0LGxpdChlLHQpLGV9ZnVuY3Rpb24gVU0odCl7dmFyIGU7cmV0dXJuIGU9bmV3IFFpLGxpdChlLHQpLGV9ZnVuY3Rpb24gaXRuKHQpe3JldHVybiF0LmUmJih0LmU9bmV3IGxlKSx0LmV9ZnVuY3Rpb24gc3RuKHQpe3JldHVybiF0LmMmJih0LmM9bmV3IHhtKSx0LmN9ZnVuY3Rpb24gdWUodCxlKXtyZXR1cm4gdC5jW3QuYy5sZW5ndGhdPWUsITB9ZnVuY3Rpb24gQUt0KHQsZSl7dGhpcy5jPXQsdGhpcy5iPWUsdGhpcy5hPSExfWZ1bmN0aW9uIEN2dCh0KXt0aGlzLmQ9dCxNdHQodGhpcyksdGhpcy5iPVF0bih0LmQpfWZ1bmN0aW9uIExLdCgpe3RoaXMuYT0iOyw7Iix0aGlzLmI9IiIsdGhpcy5jPSIifWZ1bmN0aW9uIGF0bih0LGUsbil7TVl0LmNhbGwodGhpcyxlLG4pLHRoaXMuYT10fWZ1bmN0aW9uIE1LdCh0LGUsbil7dGhpcy5iPXQsR1Z0LmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIF92dCh0LGUsbil7dGhpcy5jPXQsUlIuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gU3Z0KHQsZSxuKXtZNHQobiwwLHQsZSxuLmxlbmd0aCwhMSl9ZnVuY3Rpb24gR2QodCxlLG4scixzKXt0LmI9ZSx0LmM9bix0LmQ9cix0LmE9c31mdW5jdGlvbiBvdG4odCxlKXtlJiYodC5iPWUsdC5hPSgkcChlKSxlLmEpKX1mdW5jdGlvbiBBdnQodCxlLG4scixzKXt0LmQ9ZSx0LmM9bix0LmE9cix0LmI9c31mdW5jdGlvbiBMdnQodCl7dmFyIGUsbjtlPXQuYixuPXQuYyx0LmI9bix0LmM9ZX1mdW5jdGlvbiBNdnQodCl7dmFyIGUsbjtuPXQuZCxlPXQuYSx0LmQ9ZSx0LmE9bn1mdW5jdGlvbiBJdnQodCl7cmV0dXJuIFZwKGRlbihCbyh0KT9TaCh0KTp0KSl9ZnVuY3Rpb24gY3RuKHQsZSl7cmV0dXJuIGR1KFVLdCh0LmQpLFVLdChlLmQpKX1mdW5jdGlvbiB1dG4odCxlKXtyZXR1cm4gZT09KGJlKCksQm4pP3QuYzp0LmR9ZnVuY3Rpb24gZzgoKXtnOD1aLFhDdD0oYmUoKSxCbiksZ1Y9SG59ZnVuY3Rpb24gSUt0KCl7dGhpcy5iPVh0KHllKERlKChaZigpLFZ1dCkpKSl9ZnVuY3Rpb24gREt0KHQpe3JldHVybiBXYigpLFB0KFhuLEllLDEsdCw1LDEpfWZ1bmN0aW9uIGx0bih0KXtyZXR1cm4gbmV3ICRlKHQuYyt0LmIsdC5kK3QuYSl9ZnVuY3Rpb24gaHRuKHQsZSl7cmV0dXJuIExSKCksZHUodC5kLnAsZS5kLnApfWZ1bmN0aW9uIGtudCh0KXtyZXR1cm4gUW4odC5iIT0wKSxjaCh0LHQuYS5hKX1mdW5jdGlvbiBmdG4odCl7cmV0dXJuIFFuKHQuYiE9MCksY2godCx0LmMuYil9ZnVuY3Rpb24gRHZ0KHQsZSl7aWYoIXQpdGhyb3cgcnQobmV3IHpxdChlKSl9ZnVuY3Rpb24gX2oodCxlKXtpZighdCl0aHJvdyBydChuZXcgUG4oZSkpfWZ1bmN0aW9uIE92dCh0LGUsbil7YTguY2FsbCh0aGlzLHQsZSksdGhpcy5iPW59ZnVuY3Rpb24gV00odCxlLG4pe0tidC5jYWxsKHRoaXMsdCxlKSx0aGlzLmM9bn1mdW5jdGlvbiBPS3QodCxlLG4pe2xlZS5jYWxsKHRoaXMsZSxuKSx0aGlzLmQ9dH1mdW5jdGlvbiBOdnQodCl7ZHZ0KCksX2suY2FsbCh0aGlzKSx0aGlzLnRoKHQpfWZ1bmN0aW9uIE5LdCh0LGUsbil7dGhpcy5hPXQscTMuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gUEt0KHQsZSxuKXt0aGlzLmE9dCxxMy5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBTaih0LGUsbil7S2J0LmNhbGwodGhpcyx0LGUpLHRoaXMuYz1ufWZ1bmN0aW9uIEZLdCgpe0w4KCksSWVuLmNhbGwodGhpcywoTXAoKSxVaCkpfWZ1bmN0aW9uIEJLdCh0KXtyZXR1cm4gdCE9bnVsbCYmIUhpdCh0LGlBLHNBKX1mdW5jdGlvbiBkdG4odCxlKXtyZXR1cm4oVXJlKHQpPDw0fFVyZShlKSkmbXN9ZnVuY3Rpb24gZ3RuKHQsZSl7cmV0dXJuIFFqKCksaHN0KHQsZSksbmV3IGxYdCh0LGUpfWZ1bmN0aW9uIFliKHQsZSl7dmFyIG47dC5uJiYobj1lLHVlKHQuZixuKSl9ZnVuY3Rpb24gcDgodCxlLG4pe3ZhciByO3I9bmV3IEhtKG4pLFdmKHQsZSxyKX1mdW5jdGlvbiBwdG4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmMsWm10KHQsZSksbn1mdW5jdGlvbiBQdnQodCxlKXtyZXR1cm4gZTwwP3QuZz0tMTp0Lmc9ZSx0fWZ1bmN0aW9uIEFqKHQsZSl7cmV0dXJuIEphbih0KSx0LmEqPWUsdC5iKj1lLHR9ZnVuY3Rpb24gUkt0KHQsZSxuLHIscyl7dC5jPWUsdC5kPW4sdC5iPXIsdC5hPXN9ZnVuY3Rpb24gbmkodCxlKXtyZXR1cm4gaHModCxlLHQuYy5iLHQuYyksITB9ZnVuY3Rpb24gRnZ0KHQpe3QuYS5iPXQuYix0LmIuYT10LmEsdC5hPXQuYj1udWxsfWZ1bmN0aW9uIEVudCh0KXt0aGlzLmI9dCx0aGlzLmE9UHYodGhpcy5iLmEpLkVkKCl9ZnVuY3Rpb24gakt0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWUsZjkuY2FsbCh0aGlzKX1mdW5jdGlvbiAkS3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZSxmOS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHpLdCh0LGUpe01ZdC5jYWxsKHRoaXMsZSwxMDQwKSx0aGlzLmE9dH1mdW5jdGlvbiBLTSh0KXtyZXR1cm4gdD09MHx8aXNOYU4odCk/dDp0PDA/LTE6MX1mdW5jdGlvbiBidG4odCl7cmV0dXJuIGp4KCksWmQodCk9PXRzKFhwKHQpKX1mdW5jdGlvbiB2dG4odCl7cmV0dXJuIGp4KCksWHAodCk9PXRzKFpkKHQpKX1mdW5jdGlvbiBOdih0LGUpe3JldHVybiBsXyh0LG5ldyBhOChlLmEsZS5iKSl9ZnVuY3Rpb24gd3RuKHQpe3JldHVybiFWYSh0KSYmdC5jLmkuYz09dC5kLmkuY31mdW5jdGlvbiBMaih0KXt2YXIgZTtyZXR1cm4gZT10Lm4sdC5hLmIrZS5kK2UuYX1mdW5jdGlvbiBxS3QodCl7dmFyIGU7cmV0dXJuIGU9dC5uLHQuZS5iK2UuZCtlLmF9ZnVuY3Rpb24gQnZ0KHQpe3ZhciBlO3JldHVybiBlPXQubix0LmUuYStlLmIrZS5jfWZ1bmN0aW9uIEhLdCh0KXtyZXR1cm4gZ2koKSxuZXcgVmQoMCx0KX1mdW5jdGlvbiBtdG4odCl7cmV0dXJuIHQuYT90LmE6cnJ0KHQpfWZ1bmN0aW9uIG1DKHQpe2lmKCF0KXRocm93IHJ0KG5ldyBYayhudWxsKSl9ZnVuY3Rpb24gR0t0KCl7R0t0PVosTGZ0PSh2bigpLG5ldyBEKGl1dCkpfWZ1bmN0aW9uIE1qKCl7TWo9WixuZXcgTjN0KChYdHQoKSxidXQpLChRdHQoKSxwdXQpKX1mdW5jdGlvbiBWS3QoKXtWS3Q9WixzRXQ9UHQoamEsdGUsMTksMjU2LDAsMSl9ZnVuY3Rpb24gVG50KHQsZSxuLHIpe3UzdC5jYWxsKHRoaXMsdCxlLG4sciwwLDApfWZ1bmN0aW9uIHl0bih0LGUsbil7cmV0dXJuIGtpKHQuYix1KG4uYiwxNyksZSl9ZnVuY3Rpb24geHRuKHQsZSxuKXtyZXR1cm4ga2kodC5iLHUobi5iLDE3KSxlKX1mdW5jdGlvbiBrdG4odCxlKXtyZXR1cm4gdWUodCxuZXcgJGUoZS5hLGUuYikpfWZ1bmN0aW9uIEV0bih0LGUpe3JldHVybiB0LmM8ZS5jPy0xOnQuYz09ZS5jPzA6MX1mdW5jdGlvbiBDbnQodCl7cmV0dXJuIHQuZS5jLmxlbmd0aCt0LmcuYy5sZW5ndGh9ZnVuY3Rpb24gVUt0KHQpe3JldHVybiB0LmUuYy5sZW5ndGgtdC5nLmMubGVuZ3RofWZ1bmN0aW9uIFdLdCh0KXtyZXR1cm4gdC5iLmMubGVuZ3RoLXQuZS5jLmxlbmd0aH1mdW5jdGlvbiBUdG4odCl7cmV0dXJuIE9sKCksKGJlKCksdXUpLkhjKHQuail9ZnVuY3Rpb24gS0t0KHQpe2R2dCgpLE52dC5jYWxsKHRoaXMsdCksdGhpcy5hPS0xfWZ1bmN0aW9uIElqKHQsZSl7RE0uY2FsbCh0aGlzLHQsZSksdGhpcy5hPXRoaXN9ZnVuY3Rpb24gWWkodCxlKXt2YXIgbjtyZXR1cm4gbj1VbnQodCxlKSxuLmk9MixufWZ1bmN0aW9uIERqKHQsZSl7dmFyIG47cmV0dXJuKyt0Lmosbj10LlRpKGUpLG59ZnVuY3Rpb24gYmkodCxlLG4pe3JldHVybiB0LmE9LTEsSTJ0KHQsZS5nLG4pLHR9ZnVuY3Rpb24gQ3RuKHQsZSxuKXtiNG4odC5hLHQuYix0LmMsdShlLDIwMiksbil9ZnVuY3Rpb24gX3RuKHQsZSl7dHl0KHQsZT09bnVsbD9udWxsOihPbihlKSxlKSl9ZnVuY3Rpb24gU3RuKHQsZSl7UW10KHQsZT09bnVsbD9udWxsOihPbihlKSxlKSl9ZnVuY3Rpb24gQXRuKHQsZSl7UW10KHQsZT09bnVsbD9udWxsOihPbihlKSxlKSl9ZnVuY3Rpb24gX250KHQsZSxuKXtyZXR1cm4gbmV3IHRLdChEZW4odCkuSWUoKSxuLGUpfWZ1bmN0aW9uIFhiKHQsZSxuLHIscyxvKXtyZXR1cm4gWnNlKHQsZSxuLHIscywwLG8pfWZ1bmN0aW9uIFlLdCgpe1lLdD1aLG5FdD1QdChFNix0ZSwyMTcsMjU2LDAsMSl9ZnVuY3Rpb24gWEt0KCl7WEt0PVosYUV0PVB0KFR3LHRlLDE2MiwyNTYsMCwxKX1mdW5jdGlvbiBRS3QoKXtRS3Q9Wix1RXQ9UHQoQ3csdGUsMTg0LDI1NiwwLDEpfWZ1bmN0aW9uIFpLdCgpe1pLdD1aLGlFdD1QdChhUyx0ZSwxNzIsMTI4LDAsMSl9ZnVuY3Rpb24gUnZ0KCl7R2QodGhpcywhMSwhMSwhMSwhMSl9ZnVuY3Rpb24gU250KHQpe0dtKCksdGhpcy5hPSh2bigpLG5ldyBEKEFyKHQpKSl9ZnVuY3Rpb24gT2oodCl7Zm9yKEFyKHQpO3QuT2IoKTspdC5QYigpLHQuUWIoKX1mdW5jdGlvbiBMdG4odCl7dC5hLmNkKCksdSh0LmEuZGQoKSwxNCkuZ2MoKSxYcHQoKX1mdW5jdGlvbiBqdnQodCl7dGhpcy5jPXQsdGhpcy5iPXRoaXMuYy5kLnZjKCkuS2MoKX1mdW5jdGlvbiBKS3QodCl7dGhpcy5jPXQsdGhpcy5hPW5ldyBFeCh0aGlzLmMuYSl9ZnVuY3Rpb24geUModCl7dGhpcy5hPW5ldyBreCh0LmdjKCkpLFVhKHRoaXMsdCl9ZnVuY3Rpb24gJHZ0KHQpe2t0LmNhbGwodGhpcyxuZXcgbjIpLFVhKHRoaXMsdCl9ZnVuY3Rpb24gdFl0KHQsZSl7cmV0dXJuIHQuYSs9QWgoZSwwLGUubGVuZ3RoKSx0fWZ1bmN0aW9uIEZlKHQsZSl7cmV0dXJuIEFuKGUsdC5jLmxlbmd0aCksdC5jW2VdfWZ1bmN0aW9uIGVZdCh0LGUpe3JldHVybiBBbihlLHQuYS5sZW5ndGgpLHQuYVtlXX1mdW5jdGlvbiBUbih0LGUpe1diKCksanJ0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBNdG4odCxlKXtyZXR1cm4gZzIoT2EoZzIodC5hKS5hLGUuYSkpfWZ1bmN0aW9uIEl0bih0LGUpe3JldHVybiBPbih0KSxTSSh0LChPbihlKSxlKSl9ZnVuY3Rpb24gRHRuKHQsZSl7cmV0dXJuIE9uKGUpLFNJKGUsKE9uKHQpLHQpKX1mdW5jdGlvbiBPdG4odCxlKXtyZXR1cm4gSmkoZSwwLHp2dChlWzBdLGcyKDEpKSl9ZnVuY3Rpb24genZ0KHQsZSl7cmV0dXJuIE10bih1KHQsMTYyKSx1KGUsMTYyKSl9ZnVuY3Rpb24gbll0KHQpe3JldHVybiB0LmMtdShGZSh0LmEsdC5iKSwyODcpLmJ9ZnVuY3Rpb24gcll0KHQpe3JldHVybiB0LnE/dC5xOih2bigpLHZuKCksYTApfWZ1bmN0aW9uIGlZdCh0KXtyZXR1cm4gdC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpfWZ1bmN0aW9uIE50bih0LGUsbil7cmV0dXJuIGR1KGUuZFt0LmddLG4uZFt0LmddKX1mdW5jdGlvbiBQdG4odCxlLG4pe3JldHVybiBkdSh0LmRbZS5wXSx0LmRbbi5wXSl9ZnVuY3Rpb24gRnRuKHQsZSxuKXtyZXR1cm4gZHUodC5kW2UucF0sdC5kW24ucF0pfWZ1bmN0aW9uIEJ0bih0LGUsbil7cmV0dXJuIGR1KHQuZFtlLnBdLHQuZFtuLnBdKX1mdW5jdGlvbiBSdG4odCxlLG4pe3JldHVybiBkdSh0LmRbZS5wXSx0LmRbbi5wXSl9ZnVuY3Rpb24gcXZ0KHQsZSxuKXtyZXR1cm4gYi5NYXRoLm1pbihuL3QsMS9lKX1mdW5jdGlvbiBzWXQodCxlKXtyZXR1cm4gdD8wOmIuTWF0aC5tYXgoMCxlLTEpfWZ1bmN0aW9uIGp0bih0LGUpe3ZhciBuO2ZvcihuPTA7bjxlOysrbil0W25dPS0xfWZ1bmN0aW9uIGFZdCh0KXt2YXIgZTtyZXR1cm4gZT10YWUodCksZT9hWXQoZSk6dH1mdW5jdGlvbiAkdG4odCxlKXtyZXR1cm4gdC5hPT1udWxsJiZwdWUodCksdC5hW2VdfWZ1bmN0aW9uIHhsKHQpe3JldHVybiB0LmM/dC5jLmY6dC5lLmJ9ZnVuY3Rpb24gRnUodCl7cmV0dXJuIHQuYz90LmMuZzp0LmUuYX1mdW5jdGlvbiBOaih0KXtLdi5jYWxsKHRoaXMsdC5nYygpKSxycyh0aGlzLHQpfWZ1bmN0aW9uIFBqKHQsZSl7bmgoKSxvUi5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24geEModCxlLG4pe3RoaXMuYT10LFNzLmNhbGwodGhpcyxlLG4sMil9ZnVuY3Rpb24gRmoodCxlLG4scil7QXZ0KHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gVmQodCxlKXtnaSgpLHZ2LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBvWXQodCl7dGhpcy5iPW5ldyBRaSx0aGlzLmE9dCx0aGlzLmM9LTF9ZnVuY3Rpb24gY1l0KCl7dGhpcy5kPW5ldyAkZSgwLDApLHRoaXMuZT1uZXcgcXN9ZnVuY3Rpb24gdVl0KHQpe0QydC5jYWxsKHRoaXMsMCwwKSx0aGlzLmE9dCx0aGlzLmI9MH1mdW5jdGlvbiBsWXQodCl7dGhpcy5hPXQsdGhpcy5jPW5ldyBDcixJY24odGhpcyl9ZnVuY3Rpb24gSHZ0KHQpe2lmKHQuZS5jIT10LmIpdGhyb3cgcnQobmV3IGVoKX1mdW5jdGlvbiBHdnQodCl7aWYodC5jLmUhPXQuYSl0aHJvdyBydChuZXcgZWgpfWZ1bmN0aW9uIFNyKHQpe3JldHVybiBCbyh0KT90fDA6eEh0KHQpfWZ1bmN0aW9uIEJqKHQsZSl7cmV0dXJuIGdpKCksbmV3IGZ3dCh0LGUpfWZ1bmN0aW9uIEFudCh0LGUpe3JldHVybiB0PT1udWxsP2U9PW51bGw6aG4odCxlKX1mdW5jdGlvbiB6dG4odCxlKXtyZXR1cm4gdD09bnVsbD9lPT1udWxsOk96KHQsZSl9ZnVuY3Rpb24gTngodCxlLG4pe3JldHVybiBwZih0LmEsZSksY3d0KHQsZS5nLG4pfWZ1bmN0aW9uIExudCh0LGUsbil7eXJlKDAsZSx0Lmxlbmd0aCksRDgodCwwLGUsbil9ZnVuY3Rpb24gJG0odCxlLG4pe1VtKGUsdC5jLmxlbmd0aCksVzkodC5jLGUsbil9ZnVuY3Rpb24gaFl0KHQsZSxuKXt2YXIgcjtmb3Iocj0wO3I8ZTsrK3IpdFtyXT1ufWZ1bmN0aW9uIGppKHQsZSl7dmFyIG47cmV0dXJuIG49dW4odCksX3l0KG4sZSksbn1mdW5jdGlvbiBxdG4odCxlKXtyZXR1cm4hdCYmKHQ9W10pLHRbdC5sZW5ndGhdPWUsdH1mdW5jdGlvbiBIdG4odCxlKXtyZXR1cm4gdC5hLmdldChlKSE9PXZvaWQgMH1mdW5jdGlvbiBmWXQodCxlKXtyZXR1cm4gdm9uKG5ldyBPbyxuZXcgS3QodCksZSl9ZnVuY3Rpb24gR3RuKHQpe3JldHVybiB0PT1udWxsP1dIOm5ldyBnUihPbih0KSl9ZnVuY3Rpb24gTW50KHQsZSl7cmV0dXJuIEV0KGUsMjIpJiZOdSh0LHUoZSwyMikpfWZ1bmN0aW9uIGRZdCh0LGUpe3JldHVybiBFdChlLDIyKSYmV2FuKHQsdShlLDIyKSl9ZnVuY3Rpb24gVnZ0KHQpe3JldHVybiBvbCh0LDI2KSpMXytvbCh0LDI3KSpNX31mdW5jdGlvbiBVdnQodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQuaW09PT1DdH1mdW5jdGlvbiBSaih0KXt0LmI/UmoodC5iKTp0LmQuZGMoKSYmdC5mLmMuQmModC5lKX1mdW5jdGlvbiBJbnQodCxlKXtMaSh0LmMsZSksdC5iLmMrPWUuYSx0LmIuZCs9ZS5ifWZ1bmN0aW9uIFZ0bih0LGUpe0ludCh0LG5hKG5ldyAkZShlLmEsZS5iKSx0LmMpKX1mdW5jdGlvbiBEbnQodCxlKXt0aGlzLmI9bmV3IFFpLHRoaXMuYT10LHRoaXMuYz1lfWZ1bmN0aW9uIGdZdCgpe3RoaXMuYj1uZXcgU2MsdGhpcy5jPW5ldyBWWHQodGhpcyl9ZnVuY3Rpb24gV3Z0KCl7dGhpcy5kPW5ldyBMdSx0aGlzLmU9bmV3IEdYdCh0aGlzKX1mdW5jdGlvbiBLdnQoKXtqd3QoKSx0aGlzLmY9bmV3IFFpLHRoaXMuZT1uZXcgUWl9ZnVuY3Rpb24gcFl0KCl7T2woKSx0aGlzLms9bmV3IENyLHRoaXMuZD1uZXcgcXN9ZnVuY3Rpb24gT250KCl7T250PVosUzRlPW5ldyBlbygoY2koKSxobCksMCl9ZnVuY3Rpb24gYll0KCl7Yll0PVosZmdlPW5ldyB1WXQoUHQoWG4sSWUsMSwwLDUsMSkpfWZ1bmN0aW9uIFV0bih0LGUsbil7Y2NlKG4sdCwxKSx1ZShlLG5ldyAkR3Qobix0KSl9ZnVuY3Rpb24gV3RuKHQsZSxuKXtjXyhuLHQsMSksdWUoZSxuZXcgV0d0KG4sdCkpfWZ1bmN0aW9uIEt0bih0LGUsbil7cmV0dXJuIE5zKHQsbmV3IFR4KGUuYSxuLmEpKX1mdW5jdGlvbiBZdG4odCxlLG4pe3JldHVybi1kdSh0LmZbZS5wXSx0LmZbbi5wXSl9ZnVuY3Rpb24gamoodCxlLG4pe3ZhciByO3QmJihyPXQuaSxyLmM9ZSxyLmI9bil9ZnVuY3Rpb24gJGoodCxlLG4pe3ZhciByO3QmJihyPXQuaSxyLmQ9ZSxyLmE9bil9ZnVuY3Rpb24gS3UodCxlLG4pe3JldHVybiB0LmE9LTEsSTJ0KHQsZS5nKzEsbiksdH1mdW5jdGlvbiBZdnQodCxlLG4pe3JldHVybiBuPXpsKHQsdShlLDQ5KSw3LG4pLG59ZnVuY3Rpb24gWHZ0KHQsZSxuKXtyZXR1cm4gbj16bCh0LHUoZSw0OSksMyxuKSxufWZ1bmN0aW9uIHZZdCh0LGUsbil7dGhpcy5hPXQsaGouY2FsbCh0aGlzLGUsbiwyMil9ZnVuY3Rpb24gd1l0KHQsZSxuKXt0aGlzLmE9dCxoai5jYWxsKHRoaXMsZSxuLDE0KX1mdW5jdGlvbiBtWXQodCxlLG4scil7bmgoKSxKUXQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIHlZdCh0LGUsbixyKXtuaCgpLEpRdC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gWHRuKHQsZSl7ZS5CYiZkYyYmIXQuYS5vJiYodC5hLm89ZSl9ZnVuY3Rpb24geFl0KHQpe3JldHVybiB0IT1udWxsJiZ6bnQodCkmJnQuaW0hPT1DdH1mdW5jdGlvbiBRdnQodCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJnQuaW09PT1DdH1mdW5jdGlvbiBRdG4odCl7cmV0dXJuIEV0KHQsMTUpP3UodCwxNSkuWWMoKTp0LktjKCl9ZnVuY3Rpb24gWnZ0KHQpe3JldHVybiB0LlFjKFB0KFhuLEllLDEsdC5nYygpLDUsMSkpfWZ1bmN0aW9uIGtDKHQsZSl7cmV0dXJuIGhobihtSSh0LGUpKT9lLlFoKCk6bnVsbH1mdW5jdGlvbiBKdnQodCl7dD9IM3QodCwocWQoKSxoRXQpKTpxZCgpfWZ1bmN0aW9uIGFyKHQpe3RoaXMuYT0oYll0KCksZmdlKSx0aGlzLmQ9dShBcih0KSw0Nyl9ZnVuY3Rpb24gdHd0KHQsZSxuLHIpe3RoaXMuYT10LEkkLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBRYih0KXtJcCgpLHRoaXMuYT0wLHRoaXMuYj10LTEsdGhpcy5jPTF9ZnVuY3Rpb24ga1l0KHQpe3VqKHRoaXMpLHRoaXMuZz10LG4kKHRoaXMpLHRoaXMuX2QoKX1mdW5jdGlvbiBQdih0KXtyZXR1cm4gdC5jP3QuYzp0LmM9dC5JZCgpfWZ1bmN0aW9uIE5udCh0KXtyZXR1cm4gdC5kP3QuZDp0LmQ9dC5KZCgpfWZ1bmN0aW9uIGV3dCh0KXt2YXIgZTtyZXR1cm4gZT10LmMsZXx8KHQuYz10LkRkKCkpfWZ1bmN0aW9uIEVZdCh0KXt2YXIgZTtyZXR1cm4gZT10LmYsZXx8KHQuZj10LkRjKCkpfWZ1bmN0aW9uIFB4KHQpe3ZhciBlO3JldHVybiBlPXQuaSxlfHwodC5pPXQuYmMoKSl9ZnVuY3Rpb24gVFl0KHQpe3JldHVybiBnaSgpLG5ldyBocnQoMTAsdCwwKX1mdW5jdGlvbiBFQyh0KXtyZXR1cm4gQm8odCk/IiIrdDp1dWUodCl9ZnVuY3Rpb24gemoodCl7aWYodC5lLmohPXQuZCl0aHJvdyBydChuZXcgZWgpfWZ1bmN0aW9uIE0wKHQsZSl7cmV0dXJuIFZwKE1hZShCbyh0KT9TaCh0KTp0LGUpKX1mdW5jdGlvbiBGcCh0LGUpe3JldHVybiBWcChoNXQoQm8odCk/U2godCk6dCxlKSl9ZnVuY3Rpb24gem0odCxlKXtyZXR1cm4gVnAoSjBuKEJvKHQpP1NoKHQpOnQsZSkpfWZ1bmN0aW9uIFp0bih0LGUpe3JldHVybiBNUWUoKE9uKHQpLHQpLChPbihlKSxlKSl9ZnVuY3Rpb24gUG50KHQsZSl7cmV0dXJuIExzKChPbih0KSx0KSwoT24oZSksZSkpfWZ1bmN0aW9uIENZdCh0LGUpe3JldHVybiBBcihlKSx0LmEuQWQoZSkmJiF0LmIuQWQoZSl9ZnVuY3Rpb24gSnRuKHQsZSl7cmV0dXJuIHJ1KHQubCZlLmwsdC5tJmUubSx0LmgmZS5oKX1mdW5jdGlvbiB0ZW4odCxlKXtyZXR1cm4gcnUodC5sfGUubCx0Lm18ZS5tLHQuaHxlLmgpfWZ1bmN0aW9uIGVlbih0LGUpe3JldHVybiBydSh0LmxeZS5sLHQubV5lLm0sdC5oXmUuaCl9ZnVuY3Rpb24gcWoodCxlKXtyZXR1cm4gcUkodCwoT24oZSksbmV3IER0KGUpKSl9ZnVuY3Rpb24gSGoodCxlKXtyZXR1cm4gcUkodCwoT24oZSksbmV3IGp0KGUpKSl9ZnVuY3Rpb24gX1l0KHQpe3JldHVybiBCdSgpLHUodCwxMSkuZS5jLmxlbmd0aCE9MH1mdW5jdGlvbiBTWXQodCl7cmV0dXJuIEJ1KCksdSh0LDExKS5nLmMubGVuZ3RoIT0wfWZ1bmN0aW9uIG5lbih0LGUpe3JldHVybiBYeCgpLExzKGUuYS5vLmEsdC5hLm8uYSl9ZnVuY3Rpb24gQVl0KHQsZSxuKXtyZXR1cm4gajRuKHQsdShlLDExKSx1KG4sMTEpKX1mdW5jdGlvbiByZW4odCl7cmV0dXJuIHQuZT93bXQodC5lKTpudWxsfWZ1bmN0aW9uIG53dCh0KXt0LmR8fCh0LmQ9dC5iLktjKCksdC5jPXQuYi5nYygpKX1mdW5jdGlvbiBpZW4odCxlLG4pe3QuYS5NYihuKSYmKHQuYj0hMCxlLnRkKG4pKX1mdW5jdGlvbiBiOCh0LGUpe2lmKHQ8MHx8dD49ZSl0aHJvdyBydChuZXcgX3B0KX1mdW5jdGlvbiBzZW4odCxlLG4pe3JldHVybiBKaShlLDAsenZ0KGVbMF0sblswXSkpLGV9ZnVuY3Rpb24gYWVuKHQsZSxuKXtlLlllKG4sWHQoeWUoSm4odC5iLG4pKSkqdC5hKX1mdW5jdGlvbiBMWXQodCxlLG4pe3JldHVybiB5NCgpLEg4KHQsZSkmJkg4KHQsbil9ZnVuY3Rpb24gVEModCl7cmV0dXJuIFF1KCksIXQuSGModGcpJiYhdC5IYyh4Yil9ZnVuY3Rpb24gR2oodCl7cmV0dXJuIG5ldyAkZSh0LmMrdC5iLzIsdC5kK3QuYS8yKX1mdW5jdGlvbiBGbnQodCxlKXtyZXR1cm4gZS5raCgpP0twKHQuYix1KGUsNDkpKTplfWZ1bmN0aW9uIHJ3dCh0LGUpe3RoaXMuZT10LHRoaXMuZD1lJjY0P2V8YmQ6ZX1mdW5jdGlvbiBNWXQodCxlKXt0aGlzLmM9MCx0aGlzLmQ9dCx0aGlzLmI9ZXw2NHxiZH1mdW5jdGlvbiBWaih0KXt0aGlzLmI9bmV3IFljKDExKSx0aGlzLmE9KFgzKCksdCl9ZnVuY3Rpb24gQm50KHQpe3RoaXMuYj1udWxsLHRoaXMuYT0oWDMoKSx0fHxtRXQpfWZ1bmN0aW9uIElZdCh0KXt0aGlzLmE9dHNlKHQuYSksdGhpcy5iPW5ldyBQdSh0LmIpfWZ1bmN0aW9uIERZdCh0KXt0aGlzLmI9dCxMeC5jYWxsKHRoaXMsdCksUFV0KHRoaXMpfWZ1bmN0aW9uIE9ZdCh0KXt0aGlzLmI9dCxQTS5jYWxsKHRoaXMsdCksRlV0KHRoaXMpfWZ1bmN0aW9uIHFtKHQsZSxuKXt0aGlzLmE9dCxJeC5jYWxsKHRoaXMsZSxuLDUsNil9ZnVuY3Rpb24gaXd0KHQsZSxuLHIpe3RoaXMuYj10LFNzLmNhbGwodGhpcyxlLG4scil9ZnVuY3Rpb24gUXModCxlLG4scixzKXtxcnQuY2FsbCh0aGlzLHQsZSxuLHIscywtMSl9ZnVuY3Rpb24gQ0ModCxlLG4scixzKXtnSS5jYWxsKHRoaXMsdCxlLG4scixzLC0xKX1mdW5jdGlvbiBoZSh0LGUsbixyKXtTcy5jYWxsKHRoaXMsdCxlLG4pLHRoaXMuYj1yfWZ1bmN0aW9uIFVqKHQsZSxuLHIpe1dNLmNhbGwodGhpcyx0LGUsbiksdGhpcy5iPXJ9ZnVuY3Rpb24gTll0KHQpe0JWdC5jYWxsKHRoaXMsdCwhMSksdGhpcy5hPSExfWZ1bmN0aW9uIFBZdCh0LGUpe3RoaXMuYj10LGF0dC5jYWxsKHRoaXMsdC5iKSx0aGlzLmE9ZX1mdW5jdGlvbiBGWXQodCxlKXtHbSgpLHVZZS5jYWxsKHRoaXMsdCx5eihuZXcgd2woZSkpKX1mdW5jdGlvbiBXaih0LGUpe3JldHVybiBnaSgpLG5ldyB3d3QodCxlLDApfWZ1bmN0aW9uIFJudCh0LGUpe3JldHVybiBnaSgpLG5ldyB3d3QoNix0LGUpfWZ1bmN0aW9uIG9lbih0LGUpe3JldHVybiBobih0LnN1YnN0cigwLGUubGVuZ3RoKSxlKX1mdW5jdGlvbiBrbCh0LGUpe3JldHVybiBlYShlKT9hcnQodCxlKTohIUFvKHQuZixlKX1mdW5jdGlvbiBwYSh0LGUpe2ZvcihPbihlKTt0Lk9iKCk7KWUudGQodC5QYigpKX1mdW5jdGlvbiBLMyh0LGUsbil7SnAoKSx0aGlzLmU9dCx0aGlzLmQ9ZSx0aGlzLmE9bn1mdW5jdGlvbiBfZyh0LGUsbixyKXt2YXIgcztzPXQuaSxzLmk9ZSxzLmE9bixzLmI9cn1mdW5jdGlvbiBzd3QodCl7dmFyIGU7Zm9yKGU9dDtlLmY7KWU9ZS5mO3JldHVybiBlfWZ1bmN0aW9uIEZ4KHQpe3ZhciBlO3JldHVybiBlPUtDKHQpLFFuKGUhPW51bGwpLGV9ZnVuY3Rpb24gY2VuKHQpe3ZhciBlO3JldHVybiBlPVd1bih0KSxRbihlIT1udWxsKSxlfWZ1bmN0aW9uIHY4KHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdjKCksYm10KGUsbiksbi1lfWZ1bmN0aW9uIGF3dCh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlOysrbil0W25dPSExfWZ1bmN0aW9uIHVlbih0LGUsbixyKXt2YXIgcztmb3Iocz1lO3M8bjsrK3MpdFtzXT1yfWZ1bmN0aW9uIFJ0KHQsZSxuLHIpe3lyZShlLG4sdC5sZW5ndGgpLHVlbih0LGUsbixyKX1mdW5jdGlvbiBsZW4odCxlLG4pe2I4KG4sdC5hLmMubGVuZ3RoKSxhaCh0LmEsbixlKX1mdW5jdGlvbiBvd3QodCxlLG4pe3RoaXMuYz10LHRoaXMuYT1lLHZuKCksdGhpcy5iPW59ZnVuY3Rpb24gY3d0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmJbZV0sdC5iW2VdPW4scn1mdW5jdGlvbiBOcyh0LGUpe3ZhciBuO3JldHVybiBuPXQuYS56YyhlLHQpLG49PW51bGx9ZnVuY3Rpb24gaGVuKHQpe2lmKCF0KXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIHQuZH1mdW5jdGlvbiB1d3QodCxlKXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyB5eChlKSl9ZnVuY3Rpb24gbHd0KHQsZSl7cmV0dXJuIGU/VWEodCxlKTohMX1mdW5jdGlvbiBVZCh0LGUsbil7cmV0dXJuIHN1bih0LGUuZyxuKSxwZih0LmMsZSksdH1mdW5jdGlvbiBmZW4odCl7cmV0dXJuIFQ0KHQsKGFvKCksamgpKSx0LmQ9ITAsdH1mdW5jdGlvbiBqbnQodCl7cmV0dXJuIXQuaiYmQXR0KHQsSXduKHQuZyx0LmIpKSx0Lmp9ZnVuY3Rpb24gX0ModCl7UG0odC5iIT0tMSksQWcodC5jLHQuYT10LmIpLHQuYj0tMX1mdW5jdGlvbiBZdSh0KXt0LmY9bmV3IHNVdCh0KSx0Lmc9bmV3IGFVdCh0KSxhJCh0KX1mdW5jdGlvbiAkbnQodCl7cmV0dXJuIG5ldyBUbihudWxsLHZlbih0LHQubGVuZ3RoKSl9ZnVuY3Rpb24gQnAodCl7cmV0dXJuIG5ldyBhcihuZXcgdzJ0KHQuYS5sZW5ndGgsdC5hKSl9ZnVuY3Rpb24gZGVuKHQpe3JldHVybiBydSh+dC5sJnVsLH50Lm0mdWwsfnQuaCZXMCl9ZnVuY3Rpb24gem50KHQpe3JldHVybiB0eXBlb2YgdD09PUNEfHx0eXBlb2YgdD09PU5hdH1mdW5jdGlvbiBnZW4odCl7cmV0dXJuIHQ9PXNzP25POnQ9PVRzPyItSU5GIjoiIit0fWZ1bmN0aW9uIHBlbih0KXtyZXR1cm4gdD09c3M/bk86dD09VHM/Ii1JTkYiOiIiK3R9ZnVuY3Rpb24gYmVuKHQsZSl7cmV0dXJuIHQ+MD9iLk1hdGgubG9nKHQvZSk6LTEwMH1mdW5jdGlvbiBCWXQodCxlKXtyZXR1cm4geWModCxlKTwwPy0xOnljKHQsZSk+MD8xOjB9ZnVuY3Rpb24gaHd0KHQsZSxuKXtyZXR1cm4gQWxlKHQsdShlLDQ2KSx1KG4sMTY3KSl9ZnVuY3Rpb24gUll0KHQsZSl7cmV0dXJuIHUoZXd0KFB2KHQuYSkpLlhiKGUpLDQyKS5jZCgpfWZ1bmN0aW9uIHZlbih0LGUpe3JldHVybiAkYW4oZSx0Lmxlbmd0aCksbmV3IHpLdCh0LGUpfWZ1bmN0aW9uIHFudCh0LGUpe3RoaXMuZD10LGVyLmNhbGwodGhpcyx0KSx0aGlzLmU9ZX1mdW5jdGlvbiBGdih0KXt0aGlzLmQ9KE9uKHQpLHQpLHRoaXMuYT0wLHRoaXMuYz1JcX1mdW5jdGlvbiBmd3QodCxlKXt2di5jYWxsKHRoaXMsMSksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gall0KHQsZSl7cmV0dXJuIHQuYz9qWXQodC5jLGUpOnVlKHQuYixlKSx0fWZ1bmN0aW9uIHdlbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9WG0odCxlKSxfcnQodCxlLG4pLHJ9ZnVuY3Rpb24gZHd0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5zbGljZSgwLGUpLE1tdChuLHQpfWZ1bmN0aW9uICRZdCh0LGUsbil7dmFyIHI7Zm9yKHI9MDtyPGU7KytyKUppKHQscixuKX1mdW5jdGlvbiB6WXQodCxlLG4scixzKXtmb3IoO2U8bjspcltzKytdPWJhKHQsZSsrKX1mdW5jdGlvbiBtZW4odCxlKXtyZXR1cm4gTHModC5jLmMrdC5jLmIsZS5jLmMrZS5jLmIpfWZ1bmN0aW9uIFlNKHQsZSl7cmV0dXJuIHB6KHQuYSxlLChGbigpLEkyKSk9PW51bGx9ZnVuY3Rpb24gWE0odCxlKXtocyh0LmQsZSx0LmIuYix0LmIpLCsrdC5hLHQuYz1udWxsfWZ1bmN0aW9uIFFNKHQsZSl7SVV0KHQsRXQoZSwxNTMpP2U6dShlLDE5MzcpLmdsKCkpfWZ1bmN0aW9uIEJ2KHQsZSl7dXMocHUodC5PYygpLG5ldyBIVCksbmV3IEZ0dChlKSl9ZnVuY3Rpb24gdzgodCxlLG4scixzKXtDc3QodCx1KEFpKGUuayxuKSwxNSksbixyLHMpfWZ1bmN0aW9uIEtqKHQpe3Qucz1OYU4sdC5jPU5hTixLb2UodCx0LmUpLEtvZSh0LHQuail9ZnVuY3Rpb24gcVl0KHQpe3QuYT1udWxsLHQuZT1udWxsLFl1KHQuYiksdC5kPTAsKyt0LmN9ZnVuY3Rpb24gSG50KHQpe3JldHVybiBiLk1hdGguYWJzKHQuZC5lLXQuZS5lKS10LmF9ZnVuY3Rpb24geWVuKHQsZSxuKXtyZXR1cm4gdSh0LmMuX2MoZSx1KG4sMTMzKSksNDIpfWZ1bmN0aW9uIHhlbigpe3JldHVybiBkUigpLGN0KG90KGRnZSwxKSxhZSw1MzgsMCxbbXV0XSl9ZnVuY3Rpb24ga2VuKHQpe3JldHVybiBqeCgpLHRzKFpkKHQpKT09dHMoWHAodCkpfWZ1bmN0aW9uIEhZdCh0KXt0dnQuY2FsbCh0aGlzKSx0aGlzLmE9dCx1ZSh0LmEsdGhpcyl9ZnVuY3Rpb24gR250KHQsZSl7dGhpcy5kPUt1bih0KSx0aGlzLmM9ZSx0aGlzLmE9LjUqZX1mdW5jdGlvbiBHWXQoKXtuMi5jYWxsKHRoaXMpLHRoaXMuYT0hMCx0aGlzLmI9ITB9ZnVuY3Rpb24gWm4odCl7cmV0dXJuKHQuaT09bnVsbCYmcGQodCksdC5pKS5sZW5ndGh9ZnVuY3Rpb24gVll0KHQpe3JldHVybiBFdCh0LDk5KSYmKHUodCwxOCkuQmImZGMpIT0wfWZ1bmN0aW9uIEVlbih0LGUpeysrdC5qLFNzdCh0LHQuaSxlKSxocG4odCx1KGUsMzMyKSl9ZnVuY3Rpb24gVm50KHQsZSl7cmV0dXJuIGU9dC5uayhudWxsLGUpLGZhZSh0LG51bGwsZSl9ZnVuY3Rpb24gcnModCxlKXtyZXR1cm4gdC5oaSgpJiYoZT1nUXQodCxlKSksdC5XaChlKX1mdW5jdGlvbiBQKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1VbnQodCxlKSxOZWUobixyKSxyfWZ1bmN0aW9uIFVudCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBreXQsbi5qPXQsbi5kPWUsbn1mdW5jdGlvbiBBcih0KXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyBMOSk7cmV0dXJuIHR9ZnVuY3Rpb24gV250KHQpe3ZhciBlO3JldHVybiBlPXQuaixlfHwodC5qPW5ldyBsdHQodCkpfWZ1bmN0aW9uIFVZdCh0KXt2YXIgZTtyZXR1cm4gZT10LmYsZXx8KHQuZj1uZXcgdjJ0KHQpKX1mdW5jdGlvbiBnd3QodCl7dmFyIGU7cmV0dXJuIGU9dC5rLGV8fCh0Lms9bmV3IE0zKHQpKX1mdW5jdGlvbiBZaih0KXt2YXIgZTtyZXR1cm4gZT10LmssZXx8KHQuaz1uZXcgTTModCkpfWZ1bmN0aW9uIFNDKHQpe3ZhciBlO3JldHVybiBlPXQuZyxlfHwodC5nPW5ldyBRTCh0KSl9ZnVuY3Rpb24gVGVuKHQpe3ZhciBlO3JldHVybiBlPXQuaSxlfHwodC5pPW5ldyBudHQodCkpfWZ1bmN0aW9uIEtudCh0KXt2YXIgZTtyZXR1cm4gZT10LmQsZXx8KHQuZD1uZXcgY3godCkpfWZ1bmN0aW9uIFdZdCh0KXtyZXR1cm4gQXIodCksRXQodCw0NzUpP3UodCw0NzUpOiRvKHQpfWZ1bmN0aW9uIHB3dCh0KXtyZXR1cm4gRXQodCw2MDcpP3Q6bmV3IG5RdCh0KX1mdW5jdGlvbiBLWXQodCxlKXtyZXR1cm4gb0koZSx0LmMuYi5jLmdjKCkpLG5ldyBVSHQodCxlKX1mdW5jdGlvbiBZWXQodCxlLG4pe3JldHVybiBnaSgpLG5ldyBHUXQodCxlLG4pfWZ1bmN0aW9uIEppKHQsZSxuKXtyZXR1cm4gaVFlKG49PW51bGx8fGRtbih0LG4pKSx0W2VdPW59ZnVuY3Rpb24gYnd0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdjKCksb0koZSxuKSxuLTEtZX1mdW5jdGlvbiBtOCh0LGUpe3JldHVybiB0LmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksdH1mdW5jdGlvbiBScCh0LGUpe3JldHVybiB0LmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksdH1mdW5jdGlvbiBZbnQodCxlKXtmb3IoT24oZSk7dC5jPHQuZDspdC56ZShlLHQuYysrKX1mdW5jdGlvbiBKbih0LGUpe3JldHVybiBlYShlKT9GYyh0LGUpOmVjKEFvKHQuZixlKSl9ZnVuY3Rpb24gQ2VuKHQsZSl7cmV0dXJuIGp4KCksdD09WmQoZSk/WHAoZSk6WmQoZSl9ZnVuY3Rpb24gX2VuKHQsZSl7QngodCxuZXcgSG0oZS5mIT1udWxsP2UuZjoiIitlLmcpKX1mdW5jdGlvbiBTZW4odCxlKXtCeCh0LG5ldyBIbShlLmYhPW51bGw/ZS5mOiIiK2UuZykpfWZ1bmN0aW9uIFhZdCh0KXt0aGlzLmI9bmV3IGxlLHRoaXMuYT1uZXcgbGUsdGhpcy5jPXR9ZnVuY3Rpb24gQ2godCl7dGhpcy5jPW5ldyBUYSx0aGlzLmE9bmV3IGxlLHRoaXMuYj10fWZ1bmN0aW9uIFFZdCh0KXt0dnQuY2FsbCh0aGlzKSx0aGlzLmE9bmV3IFRhLHRoaXMuYz10fWZ1bmN0aW9uIEhtKHQpe2lmKHQ9PW51bGwpdGhyb3cgcnQobmV3IEw5KTt0aGlzLmE9dH1mdW5jdGlvbiBaWXQodCl7Q3B0KCksdGhpcy5iPW5ldyBsZSx0aGlzLmE9dCxUM24odGhpcyx0KX1mdW5jdGlvbiBKWXQodCl7dGhpcy5jPXQsdGhpcy5hPW5ldyBRaSx0aGlzLmI9bmV3IFFpfWZ1bmN0aW9uIHRYdCgpe3RYdD1aLHdnZT1uZXcgcWsoITEpLG1nZT1uZXcgcWsoITApfWZ1bmN0aW9uIEdtKCl7R209WixoZCgpLHZ1dD1uZXcgb3J0KCh2bigpLHZuKCksaW8pKX1mdW5jdGlvbiBYbnQoKXtYbnQ9WixoZCgpLEs4dD1uZXcgeWJ0KCh2bigpLHZuKCksVUgpKX1mdW5jdGlvbiBqcCgpe2pwPVosTG49bHBuKCksZG4oKSx0MyYmdjFuKCl9ZnVuY3Rpb24gQWVuKHQsZSl7cmV0dXJuIFh4KCksdShnbyh0LGUuZCksMTUpLkZjKGUpfWZ1bmN0aW9uIExlbih0LGUsbixyKXtyZXR1cm4gbj09MHx8KG4tcikvbjx0LmV8fGU+PXQuZ31mdW5jdGlvbiBRbnQodCxlLG4pe3ZhciByO3JldHVybiByPWNpdCh0LGUsbiksejV0KHQscil9ZnVuY3Rpb24gQngodCxlKXt2YXIgbjtuPXQuYS5sZW5ndGgsWG0odCxuKSxfcnQodCxuLGUpfWZ1bmN0aW9uIGVYdCh0LGUpe3ZhciBuO249Y29uc29sZVt0XSxuLmNhbGwoY29uc29sZSxlKX1mdW5jdGlvbiBuWHQodCxlKXt2YXIgbjsrK3QuaixuPXQuVmkoKSx0LklpKHQub2kobixlKSl9ZnVuY3Rpb24gTWVuKHQsZSxuKXt1KGUuYiw2NSksbXUoZS5hLG5ldyB5dnQodCxuLGUpKX1mdW5jdGlvbiB2d3QodCxlLG4pe29SLmNhbGwodGhpcyxlKSx0aGlzLmE9dCx0aGlzLmI9bn1mdW5jdGlvbiB3d3QodCxlLG4pe3Z2LmNhbGwodGhpcyx0KSx0aGlzLmE9ZSx0aGlzLmI9bn1mdW5jdGlvbiBtd3QodCxlLG4pe3RoaXMuYT10LHdwdC5jYWxsKHRoaXMsZSksdGhpcy5iPW59ZnVuY3Rpb24gclh0KHQsZSxuKXt0aGlzLmE9dCxZd3QuY2FsbCh0aGlzLDgsZSxudWxsLG4pfWZ1bmN0aW9uIEllbih0KXt0aGlzLmE9KE9uKEtyKSxLciksdGhpcy5iPXQsbmV3IGpwdH1mdW5jdGlvbiBpWHQodCl7dGhpcy5jPXQsdGhpcy5iPXRoaXMuYy5hLHRoaXMuYT10aGlzLmMuZX1mdW5jdGlvbiB5d3QodCl7dGhpcy5jPXQsdGhpcy5iPXQuYS5kLmEsejJ0KHQuYS5lLHRoaXMpfWZ1bmN0aW9uIEVsKHQpe1BtKHQuYyE9LTEpLHQuZC4kYyh0LmMpLHQuYj10LmMsdC5jPS0xfWZ1bmN0aW9uIEFDKHQpe3JldHVybiBiLk1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpfWZ1bmN0aW9uIFJ2KHQsZSl7cmV0dXJuIGI4KGUsdC5hLmMubGVuZ3RoKSxGZSh0LmEsZSl9ZnVuY3Rpb24gZmQodCxlKXtyZXR1cm4gR3QodCk9PT1HdChlKXx8dCE9bnVsbCYmeWkodCxlKX1mdW5jdGlvbiBEZW4odCl7cmV0dXJuIDA+PXQ/bmV3IGZidDp3b24odC0xKX1mdW5jdGlvbiBPZW4odCl7cmV0dXJuIG4zP2FydChuMyx0KTohMX1mdW5jdGlvbiBzWHQodCl7cmV0dXJuIHQ/dC5kYygpOiF0LktjKCkuT2IoKX1mdW5jdGlvbiBGYSh0KXtyZXR1cm4hdC5hJiZ0LmM/dC5jLmI6dC5hfWZ1bmN0aW9uIE5lbih0KXtyZXR1cm4hdC5hJiYodC5hPW5ldyBTcyhrYix0LDQpKSx0LmF9ZnVuY3Rpb24ganYodCl7cmV0dXJuIXQuZCYmKHQuZD1uZXcgU3MoaG8sdCwxKSksdC5kfWZ1bmN0aW9uIE9uKHQpe2lmKHQ9PW51bGwpdGhyb3cgcnQobmV3IEw5KTtyZXR1cm4gdH1mdW5jdGlvbiBMQyh0KXt0LmM/dC5jLkhlKCk6KHQuZD0hMCxqMm4odCkpfWZ1bmN0aW9uICRwKHQpe3QuYz8kcCh0LmMpOihkMih0KSx0LmQ9ITApfWZ1bmN0aW9uIGFYdCh0KXtUd3QodC5hKSx0LmI9UHQoWG4sSWUsMSx0LmIubGVuZ3RoLDUsMSl9ZnVuY3Rpb24gUGVuKHQsZSl7cmV0dXJuIGR1KGUuai5jLmxlbmd0aCx0LmouYy5sZW5ndGgpfWZ1bmN0aW9uIEZlbih0LGUpe3QuYzwwfHx0LmIuYjx0LmM/S2IodC5iLGUpOnQuYS5fZShlKX1mdW5jdGlvbiBCZW4odCxlKXt2YXIgbjtuPXQuWWcoZSksbj49MD90LkJoKG4pOlE0dCh0LGUpfWZ1bmN0aW9uIG9YdCh0KXt2YXIgZSxuO3JldHVybiBlPXQuYy5pLmMsbj10LmQuaS5jLGU9PW59ZnVuY3Rpb24gUmVuKHQpe2lmKHQucCE9NCl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0LmV9ZnVuY3Rpb24gamVuKHQpe2lmKHQucCE9Myl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0LmV9ZnVuY3Rpb24gJGVuKHQpe2lmKHQucCE9Nil0aHJvdyBydChuZXcgSXUpO3JldHVybiB0LmZ9ZnVuY3Rpb24gemVuKHQpe2lmKHQucCE9Nil0aHJvdyBydChuZXcgSXUpO3JldHVybiB0Lmt9ZnVuY3Rpb24gcWVuKHQpe2lmKHQucCE9Myl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0Lmp9ZnVuY3Rpb24gSGVuKHQpe2lmKHQucCE9NCl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0Lmp9ZnVuY3Rpb24geHd0KHQpe3JldHVybiF0LmImJih0LmI9bmV3IGNSKG5ldyBZdHQpKSx0LmJ9ZnVuY3Rpb24gJHYodCl7cmV0dXJuIHQuYz09LTImJlZrKHQsbzBuKHQuZyx0LmIpKSx0LmN9ZnVuY3Rpb24geTgodCxlKXt2YXIgbjtyZXR1cm4gbj1VbnQoIiIsdCksbi5uPWUsbi5pPTEsbn1mdW5jdGlvbiBHZW4odCxlKXtJbnQodShlLmIsNjUpLHQpLG11KGUuYSxuZXcgSnIodCkpfWZ1bmN0aW9uIFZlbih0LGUpe01yKCghdC5hJiYodC5hPW5ldyAkTSh0LHQpKSx0LmEpLGUpfWZ1bmN0aW9uIGNYdCh0LGUpe3RoaXMuYj10LHFudC5jYWxsKHRoaXMsdCxlKSxQVXQodGhpcyl9ZnVuY3Rpb24gdVh0KHQsZSl7dGhpcy5iPXQsbHZ0LmNhbGwodGhpcyx0LGUpLEZVdCh0aGlzKX1mdW5jdGlvbiBrd3QodCxlLG4scil7X3YuY2FsbCh0aGlzLHQsZSksdGhpcy5kPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gWGoodCxlLG4scil7X3YuY2FsbCh0aGlzLHQsbiksdGhpcy5hPWUsdGhpcy5mPXJ9ZnVuY3Rpb24gbFh0KHQsZSl7Q1hlLmNhbGwodGhpcyxtb24oQXIodCksQXIoZSkpKSx0aGlzLmE9ZX1mdW5jdGlvbiBoWHQoKXtMNHQuY2FsbCh0aGlzLEwyLChnSHQoKSxmNWUpKSxkM24odGhpcyl9ZnVuY3Rpb24gZlh0KCl7TDR0LmNhbGwodGhpcyxQaCwodDgoKSxKQXQpKSxreW4odGhpcyl9ZnVuY3Rpb24gZFh0KCl7R3IuY2FsbCh0aGlzLCJERUxBVU5BWV9UUklBTkdVTEFUSU9OIiwwKX1mdW5jdGlvbiBVZW4odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0KX1mdW5jdGlvbiBraSh0LGUsbil7cmV0dXJuIGVhKGUpP3hvKHQsZSxuKTpzdSh0LmYsZSxuKX1mdW5jdGlvbiBFd3QodCl7cmV0dXJuIHZuKCksdD90LnZlKCk6KFgzKCksWDMoKSx4RXQpfWZ1bmN0aW9uIFdlbih0LGUsbil7cmV0dXJuIFF4KCksbi5wZyh0LHUoZS5jZCgpLDE0NikpfWZ1bmN0aW9uIGdYdCh0LGUpe3JldHVybiBNaigpLG5ldyBOM3QobmV3IFlVdCh0KSxuZXcgS1V0KGUpKX1mdW5jdGlvbiBLZW4odCl7cmV0dXJuIEJsKHQsQmF0KSxxJChPYShPYSg1LHQpLHQvMTB8MCkpfWZ1bmN0aW9uIFFqKCl7UWo9WixoZ2U9bmV3IFp0dChjdChvdChNMiwxKSxEcSw0MiwwLFtdKSl9ZnVuY3Rpb24gcFh0KHQpe3JldHVybiF0LmQmJih0LmQ9bmV3IFQodC5jLkNjKCkpKSx0LmR9ZnVuY3Rpb24geDgodCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgWXF0KHQuYy52YygpKSksdC5hfWZ1bmN0aW9uIGJYdCh0KXtyZXR1cm4hdC5iJiYodC5iPW5ldyBRayh0LmMuZWMoKSkpLHQuYn1mdW5jdGlvbiBXZCh0LGUpe2Zvcig7ZS0tID4wOyl0PXQ8PDF8KHQ8MD8xOjApO3JldHVybiB0fWZ1bmN0aW9uIFBjKHQsZSl7cmV0dXJuIEd0KHQpPT09R3QoZSl8fHQhPW51bGwmJnlpKHQsZSl9ZnVuY3Rpb24gWWVuKHQsZSl7cmV0dXJuIEZuKCksdShlLmIsMTkpLmE8dH1mdW5jdGlvbiBYZW4odCxlKXtyZXR1cm4gRm4oKSx1KGUuYSwxOSkuYTx0fWZ1bmN0aW9uIGdvKHQsZSl7cmV0dXJuIE1udCh0LmEsZSk/dC5iW3UoZSwyMikuZ106bnVsbH1mdW5jdGlvbiBRZW4odCxlLG4scil7dC5hPURsKHQuYSwwLGUpKygiIityKStPTSh0LmEsbil9ZnVuY3Rpb24gdlh0KHQsZSl7dC51LkhjKChRdSgpLHRnKSkmJmVwbih0LGUpLEJzbih0LGUpfWZ1bmN0aW9uIGJhKHQsZSl7cmV0dXJuIFJyKGUsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlKX1mdW5jdGlvbiB3WHQoKXtHby5jYWxsKHRoaXMsIlRoZXJlIGlzIG5vIG1vcmUgZWxlbWVudC4iKX1mdW5jdGlvbiBNQyh0KXt0aGlzLmQ9dCx0aGlzLmE9dGhpcy5kLmIsdGhpcy5iPXRoaXMuZC5jfWZ1bmN0aW9uIG1YdCh0KXt0LmI9ITEsdC5jPSExLHQuZD0hMSx0LmE9ITF9ZnVuY3Rpb24gc2kodCxlLG4scil7cmV0dXJuIHduZSh0LGUsbiwhMSkseHoodCxyKSx0fWZ1bmN0aW9uIFplbih0KXtyZXR1cm4gdC5qLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5hPS0xLHR9ZnVuY3Rpb24gSmVuKHQpe3JldHVybiF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jfWZ1bmN0aW9uIHRubih0KXtyZXR1cm4hdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYn1mdW5jdGlvbiBaaih0KXtyZXR1cm4hdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHQubn1mdW5jdGlvbiBabnQodCl7cmV0dXJuIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmN9ZnVuY3Rpb24gazgodCl7cmV0dXJuIHQuZT09VUUmJmdwdCh0LHdobih0LmcsdC5iKSksdC5lfWZ1bmN0aW9uIFpNKHQpe3JldHVybiB0LmY9PVVFJiZTdHQodCxzMW4odC5nLHQuYikpLHQuZn1mdW5jdGlvbiBZMyh0KXt2YXIgZTtyZXR1cm4gZT10LmIsIWUmJih0LmI9ZT1uZXcgWkwodCkpLGV9ZnVuY3Rpb24gVHd0KHQpe3ZhciBlO2ZvcihlPXQuS2MoKTtlLk9iKCk7KWUuUGIoKSxlLlFiKCl9ZnVuY3Rpb24gRTgodCl7aWYoYWwodC5kKSx0LmQuZCE9dC5jKXRocm93IHJ0KG5ldyBlaCl9ZnVuY3Rpb24gQ3d0KHQsZSl7dGhpcy5iPXQsdGhpcy5jPWUsdGhpcy5hPW5ldyBFeCh0aGlzLmIpfWZ1bmN0aW9uIEpudCh0LGUsbil7dGhpcy5hPU54dCx0aGlzLmQ9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB5WHQodCxlKXt0aGlzLmQ9KE9uKHQpLHQpLHRoaXMuYT0xNjQ0OSx0aGlzLmM9ZX1mdW5jdGlvbiBlbm4odCxlKXtacmUodCxYdChSMChlLCJ4IikpLFh0KFIwKGUsInkiKSkpfWZ1bmN0aW9uIG5ubih0LGUpe1pyZSh0LFh0KFIwKGUsIngiKSksWHQoUjAoZSwieSIpKSl9ZnVuY3Rpb24gUmkodCxlKXtyZXR1cm4gZDIodCksbmV3IFRuKHQsbmV3IExtdChlLHQuYSkpfWZ1bmN0aW9uIHB1KHQsZSl7cmV0dXJuIGQyKHQpLG5ldyBUbih0LG5ldyB2bXQoZSx0LmEpKX1mdW5jdGlvbiBKaih0LGUpe3JldHVybiBkMih0KSxuZXcgRzJ0KHQsbmV3IExKdChlLHQuYSkpfWZ1bmN0aW9uIHQkKHQsZSl7cmV0dXJuIGQyKHQpLG5ldyBWMnQodCxuZXcgTUp0KGUsdC5hKSl9ZnVuY3Rpb24gcm5uKHQsZSl7cmV0dXJuIG5ldyBLWHQodShBcih0KSw2MiksdShBcihlKSw2MikpfWZ1bmN0aW9uIGlubih0LGUpe3JldHVybiBwYnQoKSxMcygoT24odCksdCksKE9uKGUpLGUpKX1mdW5jdGlvbiBzbm4oKXtyZXR1cm4gQVIoKSxjdChvdChyN3QsMSksYWUsNDgxLDAsW1J1dF0pfWZ1bmN0aW9uIGFubigpe3JldHVybiBNUigpLGN0KG90KEtfdCwxKSxhZSw0ODIsMCxbcWh0XSl9ZnVuY3Rpb24gb25uKCl7cmV0dXJuIElSKCksY3Qob3QobzNlLDEpLGFlLDU1MSwwLFtIaHRdKX1mdW5jdGlvbiBjbm4oKXtyZXR1cm4gSDkoKSxjdChvdChwU3QsMSksYWUsNTMwLDAsW2pPXSl9ZnVuY3Rpb24geFh0KHQpe3RoaXMuYT1uZXcgbGUsdGhpcy5lPVB0KFRyLHRlLDQ4LHQsMCwyKX1mdW5jdGlvbiB0cnQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5lPWUsdGhpcy5kPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gZSQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5iPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gX3d0KHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuYj1lLHRoaXMuYT1uLHRoaXMuZD1yfWZ1bmN0aW9uIGtYdCh0LGUsbixyKXt0aGlzLmM9dCx0aGlzLmI9ZSx0aGlzLmQ9bix0aGlzLmE9cn1mdW5jdGlvbiBpaCh0LGUsbixyKXt0aGlzLmM9dCx0aGlzLmQ9ZSx0aGlzLmI9bix0aGlzLmE9cn1mdW5jdGlvbiBFWHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5kPWUsdGhpcy5jPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gUngodCxlLG4scil7R3IuY2FsbCh0aGlzLHQsZSksdGhpcy5hPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gVFh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuZD1uLHRoaXMuYj1yfWZ1bmN0aW9uIHVubih0LGUsbil7bXluKHQuYSxuKSxiY24obiksVXBuKHQuYixuKSxCeW4oZSxuKX1mdW5jdGlvbiBlcnQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9RXh0KHQpLHM9ZS5LaChuLHIpLHN9ZnVuY3Rpb24gQ1h0KHQsZSl7dmFyIG4scjtyZXR1cm4gbj10L2Uscj1wcyhuKSxuPnImJisrcixyfWZ1bmN0aW9uIEkwKHQpe3ZhciBlLG47cmV0dXJuIG49KGU9bmV3IHd2LGUpLFA4KG4sdCksbn1mdW5jdGlvbiBucnQodCl7dmFyIGUsbjtyZXR1cm4gbj0oZT1uZXcgd3YsZSksRDR0KG4sdCksbn1mdW5jdGlvbiBsbm4odCxlKXt2YXIgbjtyZXR1cm4gbj1Kbih0LmYsZSksdXl0KGUsbiksbnVsbH1mdW5jdGlvbiBycnQodCl7dmFyIGU7cmV0dXJuIGU9eG9uKHQpLGV8fG51bGx9ZnVuY3Rpb24gX1h0KHQpe3JldHVybiF0LmImJih0LmI9bmV3IGhlKFdzLHQsMTIsMykpLHQuYn1mdW5jdGlvbiBobm4odCl7cmV0dXJuIHQhPW51bGwmJnBNKHJVLHQudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gZm5uKHQsZSl7cmV0dXJuIExzKEZ1KHQpKnhsKHQpLEZ1KGUpKnhsKGUpKX1mdW5jdGlvbiBkbm4odCxlKXtyZXR1cm4gTHMoRnUodCkqeGwodCksRnUoZSkqeGwoZSkpfWZ1bmN0aW9uIGdubih0LGUpe3JldHVybiBMcyh0LmQuYyt0LmQuYi8yLGUuZC5jK2UuZC5iLzIpfWZ1bmN0aW9uIHBubih0LGUpe3JldHVybiBMcyh0LmcuYyt0LmcuYi8yLGUuZy5jK2UuZy5iLzIpfWZ1bmN0aW9uIFNYdCh0LGUsbil7bi5hP3h1KHQsZS5iLXQuZi8yKTp5dSh0LGUuYS10LmcvMil9ZnVuY3Rpb24gQVh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLHRoaXMuZD1yfWZ1bmN0aW9uIExYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBaYih0LGUsbixyKXt0aGlzLmU9dCx0aGlzLmE9ZSx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBNWHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gSVh0KHQsZSxuLHIpe25oKCksRUp0LmNhbGwodGhpcyxlLG4sciksdGhpcy5hPXR9ZnVuY3Rpb24gRFh0KHQsZSxuLHIpe25oKCksRUp0LmNhbGwodGhpcyxlLG4sciksdGhpcy5hPXR9ZnVuY3Rpb24gT1h0KHQsZSl7dGhpcy5hPXQseFFlLmNhbGwodGhpcyx0LHUodC5kLDE1KS5aYyhlKSl9ZnVuY3Rpb24gaXJ0KHQpe3RoaXMuZj10LHRoaXMuYz10aGlzLmYuZSx0LmY+MCYmVnNlKHRoaXMpfWZ1bmN0aW9uIE5YdCh0LGUsbixyKXt0aGlzLmI9dCx0aGlzLmM9cixHZXQuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gUFh0KHQpe3JldHVybiBRbih0LmI8dC5kLmdjKCkpLHQuZC5YYih0LmM9dC5iKyspfWZ1bmN0aW9uIF9oKHQpe3QuYS5hPXQuYyx0LmMuYj10LmEsdC5hLmI9dC5jLmE9bnVsbCx0LmI9MH1mdW5jdGlvbiBTd3QodCxlKXtyZXR1cm4gdC5iPWUuYix0LmM9ZS5jLHQuZD1lLmQsdC5hPWUuYSx0fWZ1bmN0aW9uIG4kKHQpe3JldHVybiB0Lm4mJih0LmUhPT1lZmUmJnQuX2QoKSx0Lmo9bnVsbCksdH1mdW5jdGlvbiBGWHQodCl7cmV0dXJuIG1DKHQ9PW51bGx8fHpudCh0KSYmdC5pbSE9PUN0KSx0fWZ1bmN0aW9uIEJYdCh0KXt0aGlzLmI9bmV3IGxlLEFzKHRoaXMuYix0aGlzLmIpLHRoaXMuYT10fWZ1bmN0aW9uIGp4KCl7ang9WixuRz1uZXcgbGUscXV0PW5ldyBDcix6dXQ9bmV3IGxlfWZ1bmN0aW9uIHZuKCl7dm49Wixpbz1uZXcgT3QsYTA9bmV3IHF0LFVIPW5ldyBudH1mdW5jdGlvbiBYMygpe1gzPVosbUV0PW5ldyBNZSx5RXQ9bmV3IE1lLHhFdD1uZXcgdmV9ZnVuY3Rpb24gQXd0KCl7QXd0PVosSGdlPW5ldyB2cyxWZ2U9bmV3IFd2dCxHZ2U9bmV3IG51fWZ1bmN0aW9uIGJubigpe0RFdD09MjU2JiYoSUV0PVlILFlIPW5ldyBfLERFdD0wKSwrK0RFdH1mdW5jdGlvbiAkeCh0KXt2YXIgZTtyZXR1cm4gZT10LmYsZXx8KHQuZj1uZXcgbjgodCx0LmMpKX1mdW5jdGlvbiB2bm4odCl7cmV0dXJuIHV3KHQpJiZqZShSZShxZSh0LChUZSgpLFAyKSkpKX1mdW5jdGlvbiB3bm4odCxlKXtyZXR1cm4gbG4odCx1KFEoZSwoVGUoKSxiNykpLDE5KSxlKX1mdW5jdGlvbiBSWHQodCxlKXtyZXR1cm4gYTQodC5qLGUucyxlLmMpK2E0KGUuZSx0LnMsdC5jKX1mdW5jdGlvbiBqWHQodCxlKXt0LmUmJiF0LmUuYSYmKFJ6dCh0LmUsZSksalh0KHQuZSxlKSl9ZnVuY3Rpb24gJFh0KHQsZSl7dC5kJiYhdC5kLmEmJihSenQodC5kLGUpLCRYdCh0LmQsZSkpfWZ1bmN0aW9uIG1ubih0LGUpe3JldHVybi1McyhGdSh0KSp4bCh0KSxGdShlKSp4bChlKSl9ZnVuY3Rpb24geW5uKHQpe3JldHVybiB1KHQuY2QoKSwxNDYpLnRnKCkrIjoiKyRvKHQuZGQoKSl9ZnVuY3Rpb24geG5uKHQpe2xmKCk7dmFyIGU7ZT11KHQuZywxMCksZS5uLmE9dC5kLmMrZS5kLmJ9ZnVuY3Rpb24ga25uKHQsZSxuKXtyZXR1cm4gcTkoKSxkbG4odShKbih0LmUsZSksNTIyKSxuKX1mdW5jdGlvbiBFbm4odCxlKXtyZXR1cm4gc2wodCksc2woZSksJHF0KHUodCwyMiksdShlLDIyKSl9ZnVuY3Rpb24gVG5uKHQsZSxuKXt0Lmk9MCx0LmU9MCxlIT1uJiZvcmUodCxlLG4pfWZ1bmN0aW9uIENubih0LGUsbil7dC5pPTAsdC5lPTAsZSE9biYmY3JlKHQsZSxuKX1mdW5jdGlvbiBKYih0LGUsbil7dmFyIHIscztyPWZ2dChuKSxzPW5ldyB5OShyKSxXZih0LGUscyl9ZnVuY3Rpb24gc3J0KHQsZSxuLHIscyxvKXtnSS5jYWxsKHRoaXMsdCxlLG4scixzLG8/LTI6LTEpfWZ1bmN0aW9uIHpYdCh0LGUsbixyKXtLYnQuY2FsbCh0aGlzLGUsbiksdGhpcy5iPXQsdGhpcy5hPXJ9ZnVuY3Rpb24gTHd0KHQsZSl7bmV3IFFpLHRoaXMuYT1uZXcgRHUsdGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gX25uKHQsZSl7cmV0dXJuIHUoUSh0LChzZSgpLEk2KSksMTUpLkZjKGUpLGV9ZnVuY3Rpb24gciQodCxlKXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyB5eChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gTWkodCl7cmV0dXJuIXQucSYmKHQucT1uZXcgaGUoVmgsdCwxMSwxMCkpLHQucX1mdW5jdGlvbiBXdCh0KXtyZXR1cm4hdC5zJiYodC5zPW5ldyBoZShBdSx0LDIxLDE3KSksdC5zfWZ1bmN0aW9uIGkkKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmF9ZnVuY3Rpb24gcyQodCl7cmV0dXJuIEV0KHQsMTQpP25ldyB5Qyh1KHQsMTQpKTpydG4odC5LYygpKX1mdW5jdGlvbiBTbm4odCl7cmV0dXJuIG5ldyB6VXQodCx0LmUuSGQoKS5nYygpKnQuYy5IZCgpLmdjKCkpfWZ1bmN0aW9uIEFubih0KXtyZXR1cm4gbmV3IHFVdCh0LHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSl9ZnVuY3Rpb24gTXd0KHQpe3JldHVybiB0JiZ0Lmhhc2hDb2RlP3QuaGFzaENvZGUoKTpJdih0KX1mdW5jdGlvbiBhcnQodCxlKXtyZXR1cm4gZT09bnVsbD8hIUFvKHQuZixudWxsKTpIdG4odC5nLGUpfWZ1bmN0aW9uIExubih0KXtyZXR1cm4gQXIodCksdXNlKG5ldyBhcihscih0LmEuS2MoKSxuZXcgeikpKX1mdW5jdGlvbiBKTSh0KXtyZXR1cm4gdm4oKSxFdCh0LDU0KT9uZXcgb2V0KHQpOm5ldyBmaih0KX1mdW5jdGlvbiBxWHQodCxlLG4pe3JldHVybiB0LmY/dC5mLk5lKGUsbik6ITF9ZnVuY3Rpb24gTW5uKHQsZSl7cmV0dXJuIHQuYT1EbCh0LmEsMCxlKSsiIitPTSh0LmEsZSsxKSx0fWZ1bmN0aW9uIElubih0LGUpe3ZhciBuO3JldHVybiBuPWYydCh0LmEsZSksbiYmKGUuZD1udWxsKSxufWZ1bmN0aW9uIGEkKHQpe3ZhciBlLG47bj10LGU9bi4kbW9kQ291bnR8MCxuLiRtb2RDb3VudD1lKzF9ZnVuY3Rpb24gSXd0KHQpe3RoaXMuYj10LHRoaXMuYz10LHQuZT1udWxsLHQuYz1udWxsLHRoaXMuYT0xfWZ1bmN0aW9uIEhYdCh0KXt0aGlzLmI9dCx0aGlzLmE9bmV3IExwKHUoQXIobmV3IFdjKSw2MikpfWZ1bmN0aW9uIEdYdCh0KXt0aGlzLmM9dCx0aGlzLmI9bmV3IExwKHUoQXIobmV3ICRzKSw2MikpfWZ1bmN0aW9uIFZYdCh0KXt0aGlzLmM9dCx0aGlzLmI9bmV3IExwKHUoQXIobmV3IFdQKSw2MikpfWZ1bmN0aW9uIFVYdCgpe3RoaXMuYT1uZXcgT3B0LHRoaXMuYj1uZXcgbHF0LHRoaXMuZD1uZXcgS1B9ZnVuY3Rpb24genYoKXt0aGlzLmE9bmV3IER1LHRoaXMuYj0oQmwoMyxteSksbmV3IFljKDMpKX1mdW5jdGlvbiBXWHQoKXt0aGlzLmI9bmV3IHFzLHRoaXMuZD1uZXcgUWksdGhpcy5lPW5ldyBQcHR9ZnVuY3Rpb24gbyQodCl7dGhpcy5jPXQuYyx0aGlzLmQ9dC5kLHRoaXMuYj10LmIsdGhpcy5hPXQuYX1mdW5jdGlvbiBLWHQodCxlKXtmS2UuY2FsbCh0aGlzLG5ldyBCbnQodCkpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFlYdCgpe0RzdCh0aGlzLG5ldyBxQiksdGhpcy53Yj0oanAoKSxMbiksdDgoKX1mdW5jdGlvbiBEbm4odCl7d3IodCwiTm8gY3Jvc3NpbmcgbWluaW1pemF0aW9uIiwxKSxvcih0KX1mdW5jdGlvbiBPbm4odCl7dlIoKSxiLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSwwKX1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gdC51fHwocmwodCksdC51PW5ldyBEV3QodCx0KSksdC51fWZ1bmN0aW9uIGJ1KHQpe3ZhciBlO3JldHVybiBlPXUoSW4odCwxNiksMjYpLGV8fHQuemgoKX1mdW5jdGlvbiBYWHQodCxlKXtyZXR1cm4gRXQoZSwxNDYpJiZobih0LmIsdShlLDE0NikudGcoKSl9ZnVuY3Rpb24gTm5uKHQsZSl7cmV0dXJuIHQuYT9lLldnKCkuS2MoKTp1KGUuV2coKSw2OSkuWmgoKX1mdW5jdGlvbiBQbm4odCl7cmV0dXJuIHQuaz09KEduKCksRHMpJiZWcyh0LChzZSgpLG1TKSl9ZnVuY3Rpb24gb3J0KHQpe3RoaXMuYT0odm4oKSxFdCh0LDU0KT9uZXcgb2V0KHQpOm5ldyBmaih0KSl9ZnVuY3Rpb24gVDgoKXtUOD1aO3ZhciB0LGU7ZT0hbmhuKCksdD1uZXcgYnQsa3V0PWU/bmV3IFU6dH1mdW5jdGlvbiBjcnQodCxlKXt2YXIgbjtyZXR1cm4gbj1BcCh0LmdtKSxlPT1udWxsP246bisiOiAiK2V9ZnVuY3Rpb24gUVh0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5iLlFjKGUpLHFadChuLHQuYi5nYygpKSxufWZ1bmN0aW9uIHRJKHQsZSl7aWYodD09bnVsbCl0aHJvdyBydChuZXcgeXgoZSkpO3JldHVybiB0fWZ1bmN0aW9uIEFvKHQsZSl7cmV0dXJuIGtyZSh0LGUsdnJuKHQsZT09bnVsbD8wOnQuYi5zZShlKSkpfWZ1bmN0aW9uIEZubih0LGUsbil7cmV0dXJuIG4+PTAmJmhuKHQuc3Vic3RyKG4sZS5sZW5ndGgpLGUpfWZ1bmN0aW9uIHpwKHQsZSxuLHIscyxvLGgpe3JldHVybiBuZXcgQXJ0KHQuZSxlLG4scixzLG8saCl9ZnVuY3Rpb24gWlh0KHQsZSxuLHIscyxvKXt0aGlzLmE9dCxlaXQuY2FsbCh0aGlzLGUsbixyLHMsbyl9ZnVuY3Rpb24gSlh0KHQsZSxuLHIscyxvKXt0aGlzLmE9dCxlaXQuY2FsbCh0aGlzLGUsbixyLHMsbyl9ZnVuY3Rpb24gdFF0KHQsZSl7dGhpcy5nPXQsdGhpcy5kPWN0KG90KG8wLDEpLHpnLDEwLDAsW2VdKX1mdW5jdGlvbiBTZyh0LGUpe3RoaXMuZT10LHRoaXMuYT1Ybix0aGlzLmI9RXVlKGUpLHRoaXMuYz1lfWZ1bmN0aW9uIGVRdCh0LGUpe3hqLmNhbGwodGhpcyksUm10KHRoaXMpLHRoaXMuYT10LHRoaXMuYz1lfWZ1bmN0aW9uIGVJKHQsZSxuLHIpe0ppKHQuY1tlLmddLG4uZyxyKSxKaSh0LmNbbi5nXSxlLmcscil9ZnVuY3Rpb24gdXJ0KHQsZSxuLHIpe0ppKHQuY1tlLmddLGUuZyxuKSxKaSh0LmJbZS5nXSxlLmcscil9ZnVuY3Rpb24gQm5uKCl7cmV0dXJuIGxJKCksY3Qob3QoekN0LDEpLGFlLDM3NiwwLFtiaHQsRE9dKX1mdW5jdGlvbiBSbm4oKXtyZXR1cm4gYkkoKSxjdChvdChPVHQsMSksYWUsNDc5LDAsW0RUdCxGR10pfWZ1bmN0aW9uIGpubigpe3JldHVybiBUSSgpLGN0KG90KE1UdCwxKSxhZSw0MTksMCxbTkcsTFR0XSl9ZnVuY3Rpb24gJG5uKCl7cmV0dXJuIEQkKCksY3Qob3Qoa1R0LDEpLGFlLDQyMiwwLFt4VHQsdmx0XSl9ZnVuY3Rpb24gem5uKCl7cmV0dXJuIHgkKCksY3Qob3QoVVR0LDEpLGFlLDQyMCwwLFtEbHQsVlR0XSl9ZnVuY3Rpb24gcW5uKCl7cmV0dXJuIHlJKCksY3Qob3QoQkN0LDEpLGFlLDQyMSwwLFtkaHQsZ2h0XSl9ZnVuY3Rpb24gSG5uKCl7cmV0dXJuIEJDKCksY3Qob3QoYm1lLDEpLGFlLDUyMywwLFtOUyxPU10pfWZ1bmN0aW9uIEdubigpe3JldHVybiBWZigpLGN0KG90KCRtZSwxKSxhZSw1MjAsMCxbVXkscGJdKX1mdW5jdGlvbiBWbm4oKXtyZXR1cm4gZGQoKSxjdChvdChFbWUsMSksYWUsNTE2LDAsW1J3LEtnXSl9ZnVuY3Rpb24gVW5uKCl7cmV0dXJuIEUxKCksY3Qob3QoQ21lLDEpLGFlLDUxNSwwLFtqMix6MV0pfWZ1bmN0aW9uIFdubigpe3JldHVybiBxdigpLGN0KG90KFdtZSwxKSxhZSw0NTUsMCxbYmIsZTVdKX1mdW5jdGlvbiBLbm4oKXtyZXR1cm4gdiQoKSxjdChvdChoX3QsMSksYWUsNDI1LDAsW0lodCxsX3RdKX1mdW5jdGlvbiBZbm4oKXtyZXR1cm4gZCQoKSxjdChvdCh1X3QsMSksYWUsNDgwLDAsW01odCxjX3RdKX1mdW5jdGlvbiBYbm4oKXtyZXR1cm4gaXooKSxjdChvdChmX3QsMSksYWUsNDk1LDAsW1RWLEU3XSl9ZnVuY3Rpb24gUW5uKCl7cmV0dXJuIE4kKCksY3Qob3QoZ190LDEpLGFlLDQyNiwwLFtkX3QsUGh0XSl9ZnVuY3Rpb24gWm5uKCl7cmV0dXJuIE5JKCksY3Qob3QodlN0LDEpLGFlLDQyOSwwLFtPVixiU3RdKX1mdW5jdGlvbiBKbm4oKXtyZXR1cm4gaEkoKSxjdChvdChZX3QsMSksYWUsNDMwLDAsW0dodCxJVl0pfWZ1bmN0aW9uIHRybigpe3JldHVybiBOeigpLGN0KG90KE5FdCwxKSxhZSw0MjgsMCxbSXV0LE9FdF0pfWZ1bmN0aW9uIGVybigpe3JldHVybiAkJCgpLGN0KG90KEZFdCwxKSxhZSw0MjcsMCxbUEV0LER1dF0pfWZ1bmN0aW9uIG5ybigpe3JldHVybiB6JCgpLGN0KG90KGw3dCwxKSxhZSw0MjQsMCxbSHV0LHJHXSl9ZnVuY3Rpb24gcnJuKCl7cmV0dXJuIHE4KCksY3Qob3QoamJlLDEpLGFlLDUxMSwwLFtwTyxubHRdKX1mdW5jdGlvbiBjJCh0LGUsbixyKXtyZXR1cm4gbj49MD90LmpoKGUsbixyKTp0LlNnKG51bGwsbixyKX1mdW5jdGlvbiBscnQodCl7cmV0dXJuIHQuYi5iPT0wP3QuYS4kZSgpOmtudCh0LmIpfWZ1bmN0aW9uIGlybih0KXtpZih0LnAhPTUpdGhyb3cgcnQobmV3IEl1KTtyZXR1cm4gU3IodC5mKX1mdW5jdGlvbiBzcm4odCl7aWYodC5wIT01KXRocm93IHJ0KG5ldyBJdSk7cmV0dXJuIFNyKHQuayl9ZnVuY3Rpb24gRHd0KHQpe3JldHVybiBHdCh0LmEpPT09R3QoKGhpdCgpLF9mdCkpJiZhM24odCksdC5hfWZ1bmN0aW9uIG5RdCh0KXt0aGlzLmE9dShBcih0KSwyNzEpLHRoaXMuYj0odm4oKSxuZXcgQzJ0KHQpKX1mdW5jdGlvbiByUXQodCxlKXtocHQodGhpcyxuZXcgJGUodC5hLHQuYikpLFhCKHRoaXMsVU0oZSkpfWZ1bmN0aW9uIHF2KCl7cXY9WixiYj1uZXcgJGJ0KGQ2LDApLGU1PW5ldyAkYnQoZzYsMSl9ZnVuY3Rpb24gZGQoKXtkZD1aLFJ3PW5ldyBSYnQoZzYsMCksS2c9bmV3IFJidChkNiwxKX1mdW5jdGlvbiBIdigpe3BLZS5jYWxsKHRoaXMsbmV3IGt4KFFtKDEyKSkpLHgydCghMCksdGhpcy5hPTJ9ZnVuY3Rpb24gaHJ0KHQsZSxuKXtnaSgpLHZ2LmNhbGwodGhpcyx0KSx0aGlzLmI9ZSx0aGlzLmE9bn1mdW5jdGlvbiBPd3QodCxlLG4pe25oKCksb1IuY2FsbCh0aGlzLGUpLHRoaXMuYT10LHRoaXMuYj1ufWZ1bmN0aW9uIGlRdCh0KXt4ai5jYWxsKHRoaXMpLFJtdCh0aGlzKSx0aGlzLmE9dCx0aGlzLmM9ITB9ZnVuY3Rpb24gc1F0KHQpe3ZhciBlO2U9dC5jLmQuYix0LmI9ZSx0LmE9dC5jLmQsZS5hPXQuYy5kLmI9dH1mdW5jdGlvbiB1JCh0KXt2YXIgZTtmb24odC5hKSxiVXQodC5hKSxlPW5ldyB0cih0LmEpLGMzdChlKX1mdW5jdGlvbiBhcm4odCxlKXtndWUodCwhMCksbXUodC5lLndmKCksbmV3IGJ2dCh0LCEwLGUpKX1mdW5jdGlvbiBsJCh0LGUpe3JldHVybiBSWnQoZSksdW9uKHQsUHQoVHIsWHIsMjUsZSwxNSwxKSxlKX1mdW5jdGlvbiBvcm4odCxlKXtyZXR1cm4gangoKSx0PT10cyhaZChlKSl8fHQ9PXRzKFhwKGUpKX1mdW5jdGlvbiBGYyh0LGUpe3JldHVybiBlPT1udWxsP2VjKEFvKHQuZixudWxsKSk6VTkodC5nLGUpfWZ1bmN0aW9uIGNybih0KXtyZXR1cm4gdC5iPT0wP251bGw6KFFuKHQuYiE9MCksY2godCx0LmEuYSkpfWZ1bmN0aW9uIHBzKHQpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbih0LHZpKSwtMjE0NzQ4MzY0OCl8MH1mdW5jdGlvbiB1cm4odCxlKXt2YXIgbj14dXRbdC5jaGFyQ29kZUF0KDApXTtyZXR1cm4gbj8/dH1mdW5jdGlvbiBoJCh0LGUpe3JldHVybiByJCh0LCJzZXQxIiksciQoZSwic2V0MiIpLG5ldyBlR3QodCxlKX1mdW5jdGlvbiBscm4odCxlKXt2YXIgbjtyZXR1cm4gbj1pb24odC5mLGUpLExpKG1qKG4pLHQuZi5kKX1mdW5jdGlvbiBJQyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZSxyPW5ldyAkdCxuaGUodCxuLHIpLHIuZH1mdW5jdGlvbiBmcnQodCxlLG4scil7dmFyIHM7cz1uZXcgVVd0LGUuYVtuLmddPXMsTngodC5iLHIscyl9ZnVuY3Rpb24gTnd0KHQsZSxuKXt2YXIgcjtyPXQuWWcoZSkscj49MD90LnNoKHIsbik6RTV0KHQsZSxuKX1mdW5jdGlvbiBRMyh0LGUsbil7ZyQoKSx0JiZraShFZnQsdCxlKSx0JiZraShjTix0LG4pfWZ1bmN0aW9uIGFRdCh0LGUsbil7dGhpcy5pPW5ldyBsZSx0aGlzLmI9dCx0aGlzLmc9ZSx0aGlzLmE9bn1mdW5jdGlvbiBmJCh0LGUsbil7dGhpcy5jPW5ldyBsZSx0aGlzLmU9dCx0aGlzLmY9ZSx0aGlzLmI9bn1mdW5jdGlvbiBQd3QodCxlLG4pe3RoaXMuYT1uZXcgbGUsdGhpcy5lPXQsdGhpcy5mPWUsdGhpcy5jPW59ZnVuY3Rpb24gb1F0KHQsZSl7dWoodGhpcyksdGhpcy5mPWUsdGhpcy5nPXQsbiQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIG5JKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSx0LnEuc2V0RGF0ZShlKSx5Xyh0LG4pfWZ1bmN0aW9uIGNRdCh0LGUpe3ZhciBuO2ZvcihBcihlKSxuPXQuYTtuO249bi5jKWUuT2Qobi5nLG4uaSl9ZnVuY3Rpb24gdVF0KHQpe3ZhciBlO3JldHVybiBlPW5ldyB4UihRbSh0Lmxlbmd0aCkpLF95dChlLHQpLGV9ZnVuY3Rpb24gaHJuKHQpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlPXR8fHt9LG5ldyBlfWZ1bmN0aW9uIGZybih0LGUpe3JldHVybiBSbmUodCxlKT8oRmVlKHQpLCEwKTohMX1mdW5jdGlvbiBEMCh0LGUpe2lmKGU9PW51bGwpdGhyb3cgcnQobmV3IEw5KTtyZXR1cm4gdWhuKHQsZSl9ZnVuY3Rpb24gZHJuKHQpe2lmKHQucWUoKSlyZXR1cm4gbnVsbDt2YXIgZT10Lm47cmV0dXJuICRIW2VdfWZ1bmN0aW9uIHJJKHQpe3JldHVybiB0LkRiPj4xNiE9Mz9udWxsOnUodC5DYiwzMyl9ZnVuY3Rpb24gazEodCl7cmV0dXJuIHQuRGI+PjE2IT05P251bGw6dSh0LkNiLDMzKX1mdW5jdGlvbiBsUXQodCl7cmV0dXJuIHQuRGI+PjE2IT02P251bGw6dSh0LkNiLDc5KX1mdW5jdGlvbiBoUXQodCl7cmV0dXJuIHQuRGI+PjE2IT03P251bGw6dSh0LkNiLDIzNSl9ZnVuY3Rpb24gZlF0KHQpe3JldHVybiB0LkRiPj4xNiE9Nz9udWxsOnUodC5DYiwxNjApfWZ1bmN0aW9uIHRzKHQpe3JldHVybiB0LkRiPj4xNiE9MTE/bnVsbDp1KHQuQ2IsMzMpfWZ1bmN0aW9uIGRRdCh0LGUpe3ZhciBuO3JldHVybiBuPXQuWWcoZSksbj49MD90LmxoKG4pOnpzdCh0LGUpfWZ1bmN0aW9uIGdRdCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyAkdnQoZSkscGFlKG4sdCksbmV3IFB1KG4pfWZ1bmN0aW9uIEZ3dCh0KXt2YXIgZTtyZXR1cm4gZT10LmQsZT10LnNpKHQuZiksTXIodCxlKSxlLk9iKCl9ZnVuY3Rpb24gcFF0KHQsZSl7cmV0dXJuIHQuYis9ZS5iLHQuYys9ZS5jLHQuZCs9ZS5kLHQuYSs9ZS5hLHR9ZnVuY3Rpb24gZHJ0KHQsZSl7cmV0dXJuIGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyhlKT90OmV9ZnVuY3Rpb24gZ3JuKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEuaT4wfWZ1bmN0aW9uIGJRdCgpe3RoaXMuYT1uZXcgQTAsdGhpcy5lPW5ldyBxcyx0aGlzLmc9MCx0aGlzLmk9MH1mdW5jdGlvbiB2UXQodCl7dGhpcy5hPXQsdGhpcy5iPVB0KGRtZSx0ZSwxOTQ0LHQuZS5sZW5ndGgsMCwyKX1mdW5jdGlvbiBncnQodCxlLG4pe3ZhciByO3I9aXJlKHQsZSxuKSx0LmI9bmV3IHJ6KHIuYy5sZW5ndGgpfWZ1bmN0aW9uIEUxKCl7RTE9WixqMj1uZXcgQmJ0KHlvdCwwKSx6MT1uZXcgQmJ0KCJVUCIsMSl9ZnVuY3Rpb24gZCQoKXtkJD1aLE1odD1uZXcgemJ0KEkxZSwwKSxjX3Q9bmV3IHpidCgiRkFOIiwxKX1mdW5jdGlvbiBnJCgpe2ckPVosRWZ0PW5ldyBDcixjTj1uZXcgQ3IsTlllKExnZSxuZXcgWFQpfWZ1bmN0aW9uIHBybih0KXtpZih0LnAhPTApdGhyb3cgcnQobmV3IEl1KTtyZXR1cm4gYUModC5mLDApfWZ1bmN0aW9uIGJybih0KXtpZih0LnAhPTApdGhyb3cgcnQobmV3IEl1KTtyZXR1cm4gYUModC5rLDApfWZ1bmN0aW9uIHdRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTM/bnVsbDp1KHQuQ2IsMTQ3KX1mdW5jdGlvbiBDOCh0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KHQuQ2IsMjM1KX1mdW5jdGlvbiBWbSh0KXtyZXR1cm4gdC5EYj4+MTYhPTE3P251bGw6dSh0LkNiLDI2KX1mdW5jdGlvbiBtUXQodCxlKXt2YXIgbj10LmE9dC5hfHxbXTtyZXR1cm4gbltlXXx8KG5bZV09dC5sZShlKSl9ZnVuY3Rpb24gdnJuKHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdldChlKSxuPz9uZXcgQXJyYXl9ZnVuY3Rpb24gd3JuKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSx0LnEuc2V0TW9udGgoZSkseV8odCxuKX1mdW5jdGlvbiB4byh0LGUsbil7cmV0dXJuIGU9PW51bGw/c3UodC5mLG51bGwsbik6bncodC5nLGUsbil9ZnVuY3Rpb24gREModCxlLG4scixzLG8pe3JldHVybiBuZXcgRjAodC5lLGUsdC5haigpLG4scixzLG8pfWZ1bmN0aW9uIGlJKHQsZSxuKXtyZXR1cm4gdC5hPURsKHQuYSwwLGUpKygiIituKStPTSh0LmEsZSksdH1mdW5jdGlvbiBtcm4odCxlLG4pe3JldHVybiB1ZSh0LmEsKFFqKCksaHN0KGUsbiksbmV3IF92KGUsbikpKSx0fWZ1bmN0aW9uIEJ3dCh0KXtyZXR1cm4gRTJ0KHQuYyksdC5lPXQuYT10LmMsdC5jPXQuYy5jLCsrdC5kLHQuYS5mfWZ1bmN0aW9uIHlRdCh0KXtyZXR1cm4gRTJ0KHQuZSksdC5jPXQuYT10LmUsdC5lPXQuZS5lLC0tdC5kLHQuYS5mfWZ1bmN0aW9uIHNhKHQsZSl7dC5kJiZ2dSh0LmQuZSx0KSx0LmQ9ZSx0LmQmJnVlKHQuZC5lLHQpfWZ1bmN0aW9uIERhKHQsZSl7dC5jJiZ2dSh0LmMuZyx0KSx0LmM9ZSx0LmMmJnVlKHQuYy5nLHQpfWZ1bmN0aW9uIGtvKHQsZSl7dC5jJiZ2dSh0LmMuYSx0KSx0LmM9ZSx0LmMmJnVlKHQuYy5hLHQpfWZ1bmN0aW9uIFVvKHQsZSl7dC5pJiZ2dSh0Lmkuaix0KSx0Lmk9ZSx0LmkmJnVlKHQuaS5qLHQpfWZ1bmN0aW9uIHhRdCh0LGUsbil7dGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5iPShBcihuKSxuZXcgUHUobikpfWZ1bmN0aW9uIGtRdCh0LGUsbil7dGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5iPShBcihuKSxuZXcgUHUobikpfWZ1bmN0aW9uIEVRdCh0LGUpe3RoaXMuYT10LHRoaXMuYz1uYyh0aGlzLmEpLHRoaXMuYj1uZXcgbyQoZSl9ZnVuY3Rpb24geXJuKHQpe3ZhciBlO3JldHVybiBkMih0KSxlPW5ldyBxcyxSaSh0LG5ldyBWZShlKSl9ZnVuY3Rpb24gVW0odCxlKXtpZih0PDB8fHQ+ZSl0aHJvdyBydChuZXcgbW8ocXh0K3QrSHh0K2UpKX1mdW5jdGlvbiBSd3QodCxlKXtyZXR1cm4gZFl0KHQuYSxlKT9jd3QodCx1KGUsMjIpLmcsbnVsbCk6bnVsbH1mdW5jdGlvbiB4cm4odCl7cmV0dXJuIElpdCgpLEZuKCksdSh0LmEsODEpLmQuZSE9MH1mdW5jdGlvbiBUUXQoKXtUUXQ9WixnZ2U9V3IoKGRSKCksY3Qob3QoZGdlLDEpLGFlLDUzOCwwLFttdXRdKSkpfWZ1bmN0aW9uIENRdCgpe0NRdD1aLHRtZT1LdShuZXcgSHMsKFdhKCksSW8pLChybygpLGJPKSl9ZnVuY3Rpb24gand0KCl7and0PVosZW1lPUt1KG5ldyBIcywoV2EoKSxJbyksKHJvKCksYk8pKX1mdW5jdGlvbiBfUXQoKXtfUXQ9WixybWU9S3UobmV3IEhzLChXYSgpLElvKSwocm8oKSxiTykpfWZ1bmN0aW9uIFNRdCgpe1NRdD1aLHdtZT1iaShuZXcgSHMsKFdhKCksSW8pLChybygpLGZTKSl9ZnVuY3Rpb24gT2woKXtPbD1aLHhtZT1iaShuZXcgSHMsKFdhKCksSW8pLChybygpLGZTKSl9ZnVuY3Rpb24gQVF0KCl7QVF0PVosa21lPWJpKG5ldyBIcywoV2EoKSxJbyksKHJvKCksZlMpKX1mdW5jdGlvbiBwcnQoKXtwcnQ9WixTbWU9YmkobmV3IEhzLChXYSgpLElvKSwocm8oKSxmUykpfWZ1bmN0aW9uIExRdCgpe0xRdD1aLGR5ZT1LdShuZXcgSHMsKHVFKCksRlMpLChmXygpLHhodCkpfWZ1bmN0aW9uIHQyKHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuZD1yLHZydCh0aGlzLGUpLHdydCh0aGlzLG4pfWZ1bmN0aW9uIHp4KHQpe3RoaXMuYz1uZXcgUWksdGhpcy5iPXQuYix0aGlzLmQ9dC5jLHRoaXMuYT10LmF9ZnVuY3Rpb24gYnJ0KHQpe3RoaXMuYT1iLk1hdGguY29zKHQpLHRoaXMuYj1iLk1hdGguc2luKHQpfWZ1bmN0aW9uIHZydCh0LGUpe3QuYSYmdnUodC5hLmssdCksdC5hPWUsdC5hJiZ1ZSh0LmEuayx0KX1mdW5jdGlvbiB3cnQodCxlKXt0LmImJnZ1KHQuYi5mLHQpLHQuYj1lLHQuYiYmdWUodC5iLmYsdCl9ZnVuY3Rpb24gTVF0KHQsZSl7TWVuKHQsdC5iLHQuYyksdSh0LmIuYiw2NSksZSYmdShlLmIsNjUpLmJ9ZnVuY3Rpb24ga3JuKHQsZSl7ZTN0KHQsZSksRXQodC5DYiw4OCkmJmh5KHJsKHUodC5DYiw4OCkpLDIpfWZ1bmN0aW9uIG1ydCh0LGUpe0V0KHQuQ2IsODgpJiZoeShybCh1KHQuQ2IsODgpKSw0KSxYYyh0LGUpfWZ1bmN0aW9uIHAkKHQsZSl7RXQodC5DYiwxNzkpJiYodSh0LkNiLDE3OSkudGI9bnVsbCksWGModCxlKX1mdW5jdGlvbiBCYyh0LGUpe3JldHVybiB0bygpLFlydChlKT9uZXcgSWooZSx0KTpuZXcgRE0oZSx0KX1mdW5jdGlvbiBFcm4odCxlKXt2YXIgbixyO249ZS5jLHI9biE9bnVsbCxyJiZCeCh0LG5ldyBIbShlLmMpKX1mdW5jdGlvbiBJUXQodCl7dmFyIGUsbjtyZXR1cm4gbj0odDgoKSxlPW5ldyB3dixlKSxQOChuLHQpLG59ZnVuY3Rpb24gRFF0KHQpe3ZhciBlLG47cmV0dXJuIG49KHQ4KCksZT1uZXcgd3YsZSksUDgobix0KSxufWZ1bmN0aW9uIE9RdCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBDaCh0KSxlLmNbZS5jLmxlbmd0aF09bixufWZ1bmN0aW9uIE5RdCh0LGUpe3ZhciBuO3JldHVybiBuPXUobnkoJHgodC5hKSxlKSwxNCksbj9uLmdjKCk6MH1mdW5jdGlvbiBQUXQodCl7dmFyIGU7cmV0dXJuIGQyKHQpLGU9KFgzKCksWDMoKSx5RXQpLEckKHQsZSl9ZnVuY3Rpb24gRlF0KHQpe2Zvcih2YXIgZTs7KWlmKGU9dC5QYigpLCF0Lk9iKCkpcmV0dXJuIGV9ZnVuY3Rpb24gJHd0KHQsZSl7ZEtlLmNhbGwodGhpcyxuZXcga3goUW0odCkpKSxCbChlLFloZSksdGhpcy5hPWV9ZnVuY3Rpb24gS2QodCxlLG4pe0hyZShlLG4sdC5nYygpKSx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmI9bi1lfWZ1bmN0aW9uIEJRdCh0LGUsbil7dmFyIHI7SHJlKGUsbix0LmMubGVuZ3RoKSxyPW4tZSxsYnQodC5jLGUscil9ZnVuY3Rpb24gVHJuKHQsZSl7TlV0KHQsU3IoUHMoRnAoZSwyNCksUHEpKSxTcihQcyhlLFBxKSkpfWZ1bmN0aW9uIEFuKHQsZSl7aWYodDwwfHx0Pj1lKXRocm93IHJ0KG5ldyBtbyhxeHQrdCtIeHQrZSkpfWZ1bmN0aW9uIFJyKHQsZSl7aWYodDwwfHx0Pj1lKXRocm93IHJ0KG5ldyBacHQocXh0K3QrSHh0K2UpKX1mdW5jdGlvbiBfbih0LGUpe3RoaXMuYj0oT24odCksdCksdGhpcy5hPWUmeXk/ZTplfDY0fGJkfWZ1bmN0aW9uIFJRdCh0KXtwVXQodGhpcyksWXp0KHRoaXMuYSxUeXQoYi5NYXRoLm1heCg4LHQpKTw8MSl9ZnVuY3Rpb24gVDEodCl7cmV0dXJuIEtvKGN0KG90KFVzLDEpLHRlLDgsMCxbdC5pLm4sdC5uLHQuYV0pKX1mdW5jdGlvbiBDcm4oKXtyZXR1cm4gSTEoKSxjdChvdChsbCwxKSxhZSwxMzIsMCxbTUV0LEdsLEx5XSl9ZnVuY3Rpb24gX3JuKCl7cmV0dXJuIEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSl9ZnVuY3Rpb24gU3JuKCl7cmV0dXJuIFh1KCksY3Qob3QoWmdlLDEpLGFlLDQ2MSwwLFtTZCxjYixtZl0pfWZ1bmN0aW9uIEFybigpe3JldHVybiB3dSgpLGN0KG90KHRwZSwxKSxhZSw0NjIsMCxbZTEsdWIseWZdKX1mdW5jdGlvbiBMcm4oKXtyZXR1cm4gZXcoKSxjdChvdChBN3QsMSksYWUsNDIzLDAsWyQ0LFM3dCxKdXRdKX1mdW5jdGlvbiBNcm4oKXtyZXR1cm4gakMoKSxjdChvdChUN3QsMSksYWUsMzc5LDAsW1d1dCxVdXQsS3V0XSl9ZnVuY3Rpb24gSXJuKCl7cmV0dXJuIFlDKCksY3Qob3QoU0N0LDEpLGFlLDM3OCwwLFtvaHQsX0N0LHVWXSl9ZnVuY3Rpb24gRHJuKCl7cmV0dXJuIFl4KCksY3Qob3QoVFR0LDEpLGFlLDMxNCwwLFtTNix3TyxFVHRdKX1mdW5jdGlvbiBPcm4oKXtyZXR1cm4gWCQoKSxjdChvdChfVHQsMSksYWUsMzM3LDAsW0NUdCxPRyx3bHRdKX1mdW5jdGlvbiBOcm4oKXtyZXR1cm4gdTIoKSxjdChvdChnMmUsMSksYWUsNDUwLDAsW3hsdCx1NyxHNF0pfWZ1bmN0aW9uIFBybigpe3JldHVybiBKdigpLGN0KG90KGNsdCwxKSxhZSwzNjEsMCxbQXcsaGIsU3ddKX1mdW5jdGlvbiBGcm4oKXtyZXR1cm4gQjAoKSxjdChvdChrMmUsMSksYWUsMzAzLDAsW3lPLFU0LEE2XSl9ZnVuY3Rpb24gQnJuKCl7cmV0dXJuIFc4KCksY3Qob3QoSWx0LDEpLGFlLDI5MiwwLFtMbHQsTWx0LG1PXSl9ZnVuY3Rpb24gUnJuKCl7cmV0dXJuIHNvKCksY3Qob3QoV3dlLDEpLGFlLDQ1MiwwLFtNUyxKdSxldV0pfWZ1bmN0aW9uIGpybigpe3JldHVybiBqMCgpLGN0KG90KEZDdCwxKSxhZSwzMzksMCxbZ2IsUEN0LGZodF0pfWZ1bmN0aW9uICRybigpe3JldHVybiB1eigpLGN0KG90KCRDdCwxKSxhZSwzNzUsMCxbUkN0LHBodCxqQ3RdKX1mdW5jdGlvbiB6cm4oKXtyZXR1cm4gZ3ooKSxjdChvdChXQ3QsMSksYWUsMzc3LDAsW21odCx4NyxWeV0pfWZ1bmN0aW9uIHFybigpe3JldHVybiB0RSgpLGN0KG90KEhDdCwxKSxhZSwzMzYsMCxbdmh0LHFDdCxJU10pfWZ1bmN0aW9uIEhybigpe3JldHVybiBveigpLGN0KG90KFVDdCwxKSxhZSwzMzgsMCxbVkN0LHdodCxHQ3RdKX1mdW5jdGlvbiBHcm4oKXtyZXR1cm4gWnYoKSxjdChvdChobWUsMSksYWUsNDU0LDAsW09PLERTLGRWXSl9ZnVuY3Rpb24gVnJuKCl7cmV0dXJuIEN6KCksY3Qob3Qod3llLDEpLGFlLDQ0MiwwLFtOaHQsRGh0LE9odF0pfWZ1bmN0aW9uIFVybigpe3JldHVybiBSSSgpLGN0KG90KHZfdCwxKSxhZSwzODAsMCxbQ1YscF90LGJfdF0pfWZ1bmN0aW9uIFdybigpe3JldHVybiBUeigpLGN0KG90KFBfdCwxKSxhZSwzODEsMCxbTl90LCRodCxPX3RdKX1mdW5jdGlvbiBLcm4oKXtyZXR1cm4gY3ooKSxjdChvdChJX3QsMSksYWUsMjkzLDAsW2podCxNX3QsTF90XSl9ZnVuY3Rpb24gWXJuKCl7cmV0dXJuIEdJKCksY3Qob3Qoemh0LDEpLGFlLDQzNywwLFtBVixMVixNVl0pfWZ1bmN0aW9uIFhybigpe3JldHVybiAkMCgpLGN0KG90KFRBdCwxKSxhZSwzMzQsMCxbSFYsWmcsWVNdKX1mdW5jdGlvbiBRcm4oKXtyZXR1cm4gQTEoKSxjdChvdChmQXQsMSksYWUsMjcyLDAsW183LFl5LFM3XSl9ZnVuY3Rpb24gWnJuKHQsZSl7cmV0dXJuIG1ibih0LGUsRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl9ZnVuY3Rpb24gSnJuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1FXyh0LGUsITEpLHIuYjw9ZSYmci5hPD1ufWZ1bmN0aW9uIGpRdCh0LGUsbil7dmFyIHI7cj1uZXcgQ1Esci5iPWUsci5hPW4sKytlLmIsdWUodC5kLHIpfWZ1bmN0aW9uIHRpbih0LGUpe3ZhciBuO3JldHVybiBuPShPbih0KSx0KS5nLFAydCghIW4pLE9uKGUpLG4oZSl9ZnVuY3Rpb24gend0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj12OCh0LGUpLG49dC5hLlpjKHIpLG5ldyB0R3QodCxuKX1mdW5jdGlvbiBlaW4odCl7cmV0dXJuIHQuRGI+PjE2IT02P251bGw6dShHc3QodCksMjM1KX1mdW5jdGlvbiBuaW4odCl7aWYodC5wIT0yKXRocm93IHJ0KG5ldyBJdSk7cmV0dXJuIFNyKHQuZikmbXN9ZnVuY3Rpb24gcmluKHQpe2lmKHQucCE9Mil0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmspJm1zfWZ1bmN0aW9uIGlpbih0KXtyZXR1cm4gdC5hPT0oTDgoKSxvVSkmJl90dCh0LFBibih0LmcsdC5iKSksdC5hfWZ1bmN0aW9uIHF4KHQpe3JldHVybiB0LmQ9PShMOCgpLG9VKSYmRTkodCxBd24odC5nLHQuYikpLHQuZH1mdW5jdGlvbiBKKHQpe3JldHVybiBRbih0LmE8dC5jLmMubGVuZ3RoKSx0LmI9dC5hKyssdC5jLmNbdC5iXX1mdW5jdGlvbiBzaW4odCxlKXt0LmI9dC5ifGUuYix0LmM9dC5jfGUuYyx0LmQ9dC5kfGUuZCx0LmE9dC5hfGUuYX1mdW5jdGlvbiBQcyh0LGUpe3JldHVybiBWcChKdG4oQm8odCk/U2godCk6dCxCbyhlKT9TaChlKTplKSl9ZnVuY3Rpb24gQzEodCxlKXtyZXR1cm4gVnAodGVuKEJvKHQpP1NoKHQpOnQsQm8oZSk/U2goZSk6ZSkpfWZ1bmN0aW9uIHlydCh0LGUpe3JldHVybiBWcChlZW4oQm8odCk/U2godCk6dCxCbyhlKT9TaChlKTplKSl9ZnVuY3Rpb24gYWluKHQpe3JldHVybiBPYShNMChrdShvbCh0LDMyKSksMzIpLGt1KG9sKHQsMzIpKSl9ZnVuY3Rpb24gR3YodCl7cmV0dXJuIEFyKHQpLEV0KHQsMTQpP25ldyBQdSh1KHQsMTQpKTpkOCh0LktjKCkpfWZ1bmN0aW9uIG9pbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKGUuZCx0LmQpOkxzKHQuYyxlLmMpfWZ1bmN0aW9uIGNpbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKHQuZCxlLmQpOkxzKHQuYyxlLmMpfWZ1bmN0aW9uIHVpbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKHQuZCxlLmQpOkxzKGUuYyx0LmMpfWZ1bmN0aW9uIGxpbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKGUuZCx0LmQpOkxzKGUuYyx0LmMpfWZ1bmN0aW9uIGhpbih0LGUpe3ZhciBuO249WHQoeWUodC5hLldlKChjaSgpLHFWKSkpKSxTaGUodCxlLG4pfWZ1bmN0aW9uIGZpbih0LGUpe3ZhciBuO249dShKbih0LmcsZSksNTcpLG11KGUuZCxuZXcgSEd0KHQsbikpfWZ1bmN0aW9uIGRpbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49Q3NlKHQpLHI9Q3NlKGUpLG48cj8tMTpuPnI/MTowfWZ1bmN0aW9uICRRdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49R3J0KGUpLHI9bix1KEpuKHQuYyxyKSwxOSkuYX1mdW5jdGlvbiB6UXQodCxlKXt2YXIgbjtmb3Iobj10KyIiO24ubGVuZ3RoPGU7KW49IjAiK247cmV0dXJuIG59ZnVuY3Rpb24gYiQodCl7cmV0dXJuIHQuYz09bnVsbHx8dC5jLmxlbmd0aD09MD8ibl8iK3QuZzoibl8iK3QuY31mdW5jdGlvbiBxd3QodCl7cmV0dXJuIHQuYz09bnVsbHx8dC5jLmxlbmd0aD09MD8ibl8iK3QuYjoibl8iK3QuY31mdW5jdGlvbiBId3QodCxlKXtyZXR1cm4gdCYmdC5lcXVhbHM/dC5lcXVhbHMoZSk6R3QodCk9PT1HdChlKX1mdW5jdGlvbiBHd3QodCxlKXtyZXR1cm4gZT09MD8hIXQubyYmdC5vLmYhPTA6ZXN0KHQsZSl9ZnVuY3Rpb24gaGYodCxlLG4pe3ZhciByO3QubiYmZSYmbiYmKHI9bmV3IHFaLHVlKHQuZSxyKSl9ZnVuY3Rpb24geHJ0KHQsZSxuKXt2YXIgcjtyPXQuZFtlLnBdLHQuZFtlLnBdPXQuZFtuLnBdLHQuZFtuLnBdPXJ9ZnVuY3Rpb24gcVF0KHQsZSxuKXt0aGlzLmQ9dCx0aGlzLmo9ZSx0aGlzLmU9bix0aGlzLm89LTEsdGhpcy5wPTN9ZnVuY3Rpb24gSFF0KHQsZSxuKXt0aGlzLmQ9dCx0aGlzLms9ZSx0aGlzLmY9bix0aGlzLm89LTEsdGhpcy5wPTV9ZnVuY3Rpb24gR1F0KHQsZSxuKXt2di5jYWxsKHRoaXMsMjUpLHRoaXMuYj10LHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIE5sKHQpe2dpKCksdnYuY2FsbCh0aGlzLHQpLHRoaXMuYz0hMSx0aGlzLmE9ITF9ZnVuY3Rpb24gVlF0KHQsZSxuLHIscyxvKXt6bXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gVVF0KHQsZSxuLHIscyxvKXtxbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gV1F0KHQsZSxuLHIscyxvKXtmbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gS1F0KHQsZSxuLHIscyxvKXtWbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gWVF0KHQsZSxuLHIscyxvKXtkbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gWFF0KHQsZSxuLHIscyxvKXtIbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gUVF0KHQsZSxuLHIscyxvKXtHbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gWlF0KHQsZSxuLHIscyxvKXtnbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gSlF0KHQsZSxuLHIpe29SLmNhbGwodGhpcyxuKSx0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmQ9cn1mdW5jdGlvbiBWd3QodCxlKXt0aGlzLmE9bmV3IGxlLHRoaXMuZD1uZXcgbGUsdGhpcy5mPXQsdGhpcy5jPWV9ZnVuY3Rpb24gdFp0KCl7dGhpcy5jPW5ldyBfVXQsdGhpcy5hPW5ldyBVWHQsdGhpcy5iPW5ldyBpcXQsdkd0KCl9ZnVuY3Rpb24gZVp0KCl7UXgoKSx0aGlzLmI9bmV3IENyLHRoaXMuYT1uZXcgQ3IsdGhpcy5jPW5ldyBsZX1mdW5jdGlvbiBuWnQodCxlKXt0aGlzLmc9dCx0aGlzLmQ9KEw4KCksb1UpLHRoaXMuYT1vVSx0aGlzLmI9ZX1mdW5jdGlvbiByWnQodCxlKXt0aGlzLmY9dCx0aGlzLmE9KEw4KCksYVUpLHRoaXMuYz1hVSx0aGlzLmI9ZX1mdW5jdGlvbiBVd3QodCxlKXshdC5jJiYodC5jPW5ldyBpcyh0LDApKSxrcSh0LmMsKERpKCksb0EpLGUpfWZ1bmN0aW9uIHYkKCl7diQ9WixJaHQ9bmV3IHFidCgiREZTIiwwKSxsX3Q9bmV3IHFidCgiQkZTIiwxKX1mdW5jdGlvbiBnaW4odCxlLG4pe3ZhciByO3JldHVybiByPXUodC5aYigpLnhjKGUpLDE0KSwhIXImJnIuSGMobil9ZnVuY3Rpb24gaVp0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj11KHQuWmIoKS54YyhlKSwxNCksISFyJiZyLk1jKG4pfWZ1bmN0aW9uIHNadCh0LGUsbixyKXtyZXR1cm4gdC5hKz0iIitEbChlPT1udWxsP1R1OiRvKGUpLG4sciksdH1mdW5jdGlvbiByYyh0LGUsbixyLHMsbyl7cmV0dXJuIHduZSh0LGUsbixvKSxYeXQodCxyKSxReXQodCxzKSx0fWZ1bmN0aW9uIGtydCh0KXtyZXR1cm4gUW4odC5iLmIhPXQuZC5hKSx0LmM9dC5iPXQuYi5iLC0tdC5hLHQuYy5jfWZ1bmN0aW9uIE9DKHQpe2Zvcig7dC5kPjAmJnQuYVstLXQuZF09PTA7KTt0LmFbdC5kKytdPT0wJiYodC5lPTApfWZ1bmN0aW9uIGFadCh0KXtyZXR1cm4gdC5hP3QuZS5sZW5ndGg9PTA/dC5hLmE6dC5hLmErKCIiK3QuZSk6dC5jfWZ1bmN0aW9uIHBpbih0KXtyZXR1cm4hIXQuYSYmaWwodC5hLmEpLmkhPTAmJiEodC5iJiZjc3QodC5iKSl9ZnVuY3Rpb24gYmluKHQpe3JldHVybiEhdC51JiZMYyh0LnUuYSkuaSE9MCYmISh0Lm4mJm9zdCh0Lm4pKX1mdW5jdGlvbiBvWnQodCl7cmV0dXJuIF9udCh0LmUuSGQoKS5nYygpKnQuYy5IZCgpLmdjKCksMTYsbmV3IG94KHQpKX1mdW5jdGlvbiB2aW4odCxlKXtyZXR1cm4gQll0KGt1KHQucS5nZXRUaW1lKCkpLGt1KGUucS5nZXRUaW1lKCkpKX1mdW5jdGlvbiBnZCh0KXtyZXR1cm4gdShEMSh0LFB0KHRsdCxGb3QsMTcsdC5jLmxlbmd0aCwwLDEpKSw0NzQpfWZ1bmN0aW9uIHNJKHQpe3JldHVybiB1KEQxKHQsUHQobzAsemcsMTAsdC5jLmxlbmd0aCwwLDEpKSwxOTMpfWZ1bmN0aW9uIHdpbih0KXtyZXR1cm4gT2woKSwhVmEodCkmJiEoIVZhKHQpJiZ0LmMuaS5jPT10LmQuaS5jKX1mdW5jdGlvbiBjWnQodCxlLG4pe3ZhciByO3I9KEFyKHQpLG5ldyBQdSh0KSksS2ZuKG5ldyB4UXQocixlLG4pKX1mdW5jdGlvbiBhSSh0LGUsbil7dmFyIHI7cj0oQXIodCksbmV3IFB1KHQpKSxZZm4obmV3IGtRdChyLGUsbikpfWZ1bmN0aW9uIHVadCh0LGUpe3ZhciBuO3JldHVybiBuPTEtZSx0LmFbbl09bnoodC5hW25dLG4pLG56KHQsZSl9ZnVuY3Rpb24gbFp0KHQsZSl7dmFyIG47dC5lPW5ldyBWcHQsbj1neShlKSxYcyhuLHQuYykscnVlKHQsbiwwKX1mdW5jdGlvbiBhYSh0LGUsbixyKXt2YXIgcztzPW5ldyBXRixzLmE9ZSxzLmI9bixzLmM9cixuaSh0LmEscyl9ZnVuY3Rpb24geGUodCxlLG4scil7dmFyIHM7cz1uZXcgV0Yscy5hPWUscy5iPW4scy5jPXIsbmkodC5iLHMpfWZ1bmN0aW9uIGZmKHQpe3ZhciBlLG4scjtyZXR1cm4gZT1uZXcgR1l0LG49dWF0KGUsdCkscjRuKGUpLHI9bixyfWZ1bmN0aW9uIFd3dCgpe3ZhciB0LGUsbjtyZXR1cm4gZT0obj0odD1uZXcgd3YsdCksbiksdWUodUx0LGUpLGV9ZnVuY3Rpb24gdyQodCl7cmV0dXJuIHQuai5jPVB0KFhuLEllLDEsMCw1LDEpLFR3dCh0LmMpLFplbih0LmEpLHR9ZnVuY3Rpb24gWjModCl7cmV0dXJuIHE5KCksRXQodC5nLDEwKT91KHQuZywxMCk6bnVsbH1mdW5jdGlvbiBtaW4odCl7cmV0dXJuIFkzKHQpLmRjKCk/ITE6KHdYZSh0LG5ldyBodCksITApfWZ1bmN0aW9uIHlpbih0KXtpZighKCJzdGFjayJpbiB0KSl0cnl7dGhyb3cgdH1jYXRjaHt9cmV0dXJuIHR9ZnVuY3Rpb24gb0kodCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgcnQobmV3IG1vKE9nbih0LGUpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaFp0KHQsZSxuKXtpZih0PDB8fGU8dHx8ZT5uKXRocm93IHJ0KG5ldyBtbyhpZ24odCxlLG4pKSl9ZnVuY3Rpb24gRXJ0KHQsZSl7aWYoTnModC5hLGUpLGUuZCl0aHJvdyBydChuZXcgR28odmZlKSk7ZS5kPXR9ZnVuY3Rpb24gVHJ0KHQsZSl7aWYoZS4kbW9kQ291bnQhPXQuJG1vZENvdW50KXRocm93IHJ0KG5ldyBlaCl9ZnVuY3Rpb24gZlp0KHQsZSl7cmV0dXJuIEV0KGUsNDIpP2RzdCh0LmEsdShlLDQyKSk6ITF9ZnVuY3Rpb24gZFp0KHQsZSl7cmV0dXJuIEV0KGUsNDIpP2RzdCh0LmEsdShlLDQyKSk6ITF9ZnVuY3Rpb24gZ1p0KHQsZSl7cmV0dXJuIEV0KGUsNDIpP2RzdCh0LmEsdShlLDQyKSk6ITF9ZnVuY3Rpb24geGluKHQsZSl7cmV0dXJuIHQuYTw9dC5iPyhlLnVkKHQuYSsrKSwhMCk6ITF9ZnVuY3Rpb24gVnYodCl7dmFyIGU7cmV0dXJuIEJvKHQpPyhlPXQsZT09LTA/MDplKTpNYW4odCl9ZnVuY3Rpb24gbSQodCl7dmFyIGU7cmV0dXJuICRwKHQpLGU9bmV3IEtlLEIzKHQuYSxuZXcgYm4oZSkpLGV9ZnVuY3Rpb24gcFp0KHQpe3ZhciBlO3JldHVybiAkcCh0KSxlPW5ldyBHZSxCMyh0LmEsbmV3IHBlKGUpKSxlfWZ1bmN0aW9uIGhhKHQsZSl7dGhpcy5hPXQsZnguY2FsbCh0aGlzLHQpLFVtKGUsdC5nYygpKSx0aGlzLmI9ZX1mdW5jdGlvbiBLd3QodCl7dGhpcy5lPXQsdGhpcy5iPXRoaXMuZS5hLmVudHJpZXMoKSx0aGlzLmE9bmV3IEFycmF5fWZ1bmN0aW9uIGtpbih0KXtyZXR1cm4gX250KHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSwyNzMsbmV3IEdCKHQpKX1mdW5jdGlvbiB5JCh0KXtyZXR1cm4gbmV3IFljKChCbCh0LEJhdCkscSQoT2EoT2EoNSx0KSx0LzEwfDApKSkpfWZ1bmN0aW9uIGJadCh0KXtyZXR1cm4gdShEMSh0LFB0KEZiZSxLZmUsMTEsdC5jLmxlbmd0aCwwLDEpKSwxOTQzKX1mdW5jdGlvbiBFaW4odCxlLG4pe3JldHVybiBuLmYuYy5sZW5ndGg+MD9od3QodC5hLGUsbik6aHd0KHQuYixlLG4pfWZ1bmN0aW9uIFRpbih0LGUsbil7dC5kJiZ2dSh0LmQuZSx0KSx0LmQ9ZSx0LmQmJiRtKHQuZC5lLG4sdCl9ZnVuY3Rpb24gQ3J0KHQsZSl7djVuKGUsdCksTXZ0KHQuZCksTXZ0KHUoUSh0LChUZSgpLG5WKSksMjA3KSl9ZnVuY3Rpb24gTkModCxlKXtiNW4oZSx0KSxMdnQodC5kKSxMdnQodShRKHQsKFRlKCksblYpKSwyMDcpKX1mdW5jdGlvbiBVdih0LGUpe3ZhciBuLHI7cmV0dXJuIG49RDAodCxlKSxyPW51bGwsbiYmKHI9bi5mZSgpKSxyfWZ1bmN0aW9uIF84KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1YbSh0LGUpLHI9bnVsbCxuJiYocj1uLmllKCkpLHJ9ZnVuY3Rpb24gUEModCxlKXt2YXIgbixyO3JldHVybiBuPUQwKHQsZSkscj1udWxsLG4mJihyPW4uaWUoKSkscn1mdW5jdGlvbiBPMCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49RDAodCxlKSxyPW51bGwsbiYmKHI9ajR0KG4pKSxyfWZ1bmN0aW9uIENpbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9b0UobiksdnEodC5nLHIsZSksdnEodC5pLGUsbiksZX1mdW5jdGlvbiBfaW4odCxlLG4pe3ZhciByO3I9dGhuKCk7dHJ5e3JldHVybiBJUWUodCxlLG4pfWZpbmFsbHl7QmluKHIpfX1mdW5jdGlvbiB2WnQodCl7dmFyIGU7ZT10LldnKCksdGhpcy5hPUV0KGUsNjkpP3UoZSw2OSkuWmgoKTplLktjKCl9ZnVuY3Rpb24gSHMoKXtJcXQuY2FsbCh0aGlzKSx0aGlzLmouYz1QdChYbixJZSwxLDAsNSwxKSx0aGlzLmE9LTF9ZnVuY3Rpb24gWXd0KHQsZSxuLHIpe3RoaXMuZD10LHRoaXMubj1lLHRoaXMuZz1uLHRoaXMubz1yLHRoaXMucD0tMX1mdW5jdGlvbiB3WnQodCxlLG4scil7dGhpcy5lPXIsdGhpcy5kPW51bGwsdGhpcy5jPXQsdGhpcy5hPWUsdGhpcy5iPW59ZnVuY3Rpb24gWHd0KHQsZSxuKXt0aGlzLmQ9bmV3IHNSKHRoaXMpLHRoaXMuZT10LHRoaXMuaT1lLHRoaXMuZj1ufWZ1bmN0aW9uIHgkKCl7eCQ9WixEbHQ9bmV3IE9idChORSwwKSxWVHQ9bmV3IE9idCgiVE9QX0xFRlQiLDEpfWZ1bmN0aW9uIG1adCgpe21adD1aLFlDdD1nWHQoZGUoMSksZGUoNCkpLEtDdD1nWHQoZGUoMSksZGUoMikpfWZ1bmN0aW9uIHladCgpe3ladD1aLGMzZT1XcigoSVIoKSxjdChvdChvM2UsMSksYWUsNTUxLDAsW0hodF0pKSl9ZnVuY3Rpb24geFp0KCl7eFp0PVosYTNlPVdyKChNUigpLGN0KG90KEtfdCwxKSxhZSw0ODIsMCxbcWh0XSkpKX1mdW5jdGlvbiBrWnQoKXtrWnQ9WixfM2U9V3IoKEg5KCksY3Qob3QocFN0LDEpLGFlLDUzMCwwLFtqT10pKSl9ZnVuY3Rpb24gRVp0KCl7RVp0PVosRHBlPVdyKChBUigpLGN0KG90KHI3dCwxKSxhZSw0ODEsMCxbUnV0XSkpKX1mdW5jdGlvbiBTaW4oKXtyZXR1cm4gdHcoKSxjdChvdChDcGUsMSksYWUsNDA2LDAsW2FPLHNPLEZ1dCxCdXRdKX1mdW5jdGlvbiBBaW4oKXtyZXR1cm4gUCQoKSxjdChvdChLSCwxKSxhZSwyOTcsMCxbQXV0LF9FdCxTRXQsQUV0XSl9ZnVuY3Rpb24gTGluKCl7cmV0dXJuIHNfKCksY3Qob3QoTXBlLDEpLGFlLDM5NCwwLFtoTyxKSCx0RyxmT10pfWZ1bmN0aW9uIE1pbigpe3JldHVybiBuNigpLGN0KG90KFNwZSwxKSxhZSwzMjMsMCxbY08sb08sdU8sbE9dKX1mdW5jdGlvbiBJaW4oKXtyZXR1cm4gSzgoKSxjdChvdChUYmUsMSksYWUsNDA1LDAsW193LER5LEl5LGo0XSl9ZnVuY3Rpb24gRGluKCl7cmV0dXJuIGR6KCksY3Qob3QoSGJlLDEpLGFlLDM2MCwwLFthbHQsX0csU0csdk9dKX1mdW5jdGlvbiBUWnQodCxlLG4scil7cmV0dXJuIEV0KG4sNTQpP25ldyBsV3QodCxlLG4scik6bmV3IHR3dCh0LGUsbixyKX1mdW5jdGlvbiBPaW4oKXtyZXR1cm4gTTEoKSxjdChvdChaYmUsMSksYWUsNDExLDAsW182LGk3LHM3LG9sdF0pfWZ1bmN0aW9uIE5pbih0KXt2YXIgZTtyZXR1cm4gdC5qPT0oYmUoKSxtcikmJihlPVVvZSh0KSxOdShlLEhuKSl9ZnVuY3Rpb24gUGluKHQsZSl7dmFyIG47bj1lLmEsRGEobixlLmMuZCksc2EobixlLmQuZCksSm0obi5hLHQubil9ZnVuY3Rpb24gQ1p0KHQsZSl7cmV0dXJuIHUoT3YocWoodShBaSh0LmssZSksMTUpLk9jKCksejQpKSwxMTMpfWZ1bmN0aW9uIF9adCh0LGUpe3JldHVybiB1KE92KEhqKHUoQWkodC5rLGUpLDE1KS5PYygpLHo0KSksMTEzKX1mdW5jdGlvbiBGaW4odCl7cmV0dXJuIG5ldyBfbihPb24odSh0LmEuZGQoKSwxNCkuZ2MoKSx0LmEuY2QoKSksMTYpfWZ1bmN0aW9uIFM4KHQpe3JldHVybiBFdCh0LDE0KT91KHQsMTQpLmRjKCk6IXQuS2MoKS5PYigpfWZ1bmN0aW9uIEh4KHQpe3JldHVybiBxOSgpLEV0KHQuZywxNDUpP3UodC5nLDE0NSk6bnVsbH1mdW5jdGlvbiBTWnQodCl7aWYodC5lLmchPXQuYil0aHJvdyBydChuZXcgZWgpO3JldHVybiEhdC5jJiZ0LmQ+MH1mdW5jdGlvbiB0aSh0KXtyZXR1cm4gUW4odC5iIT10LmQuYyksdC5jPXQuYix0LmI9dC5iLmEsKyt0LmEsdC5jLmN9ZnVuY3Rpb24gUXd0KHQsZSl7T24oZSksSmkodC5hLHQuYyxlKSx0LmM9dC5jKzEmdC5hLmxlbmd0aC0xLEFzZSh0KX1mdW5jdGlvbiBxcCh0LGUpe09uKGUpLHQuYj10LmItMSZ0LmEubGVuZ3RoLTEsSmkodC5hLHQuYixlKSxBc2UodCl9ZnVuY3Rpb24gQVp0KHQsZSl7dmFyIG47Zm9yKG49dC5qLmMubGVuZ3RoO248ZTtuKyspdWUodC5qLHQucmcoKSl9ZnVuY3Rpb24gTFp0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPXJbZS5nXVtuLmddLFh0KHllKFEodC5hLHMpKSl9ZnVuY3Rpb24gWnd0KHQsZSxuLHIscyl7dGhpcy5pPXQsdGhpcy5hPWUsdGhpcy5lPW4sdGhpcy5qPXIsdGhpcy5mPXN9ZnVuY3Rpb24gTVp0KHQsZSxuLHIscyl7dGhpcy5hPXQsdGhpcy5lPWUsdGhpcy5mPW4sdGhpcy5iPXIsdGhpcy5nPXN9ZnVuY3Rpb24gQmluKHQpe3QmJk9hbigoWXB0KCksWDh0KSksLS16SCx0JiZxSCE9LTEmJih4WWUocUgpLHFIPS0xKX1mdW5jdGlvbiBSaW4oKXtyZXR1cm4gc3koKSxjdChvdCh1aHQsMSksYWUsMTk3LDAsW2xWLGNodCx0NSxKNF0pfWZ1bmN0aW9uIGppbigpe3JldHVybiB1RSgpLGN0KG90KFpDdCwxKSxhZSwzOTMsMCxbdlYsUFMsUE8sRlNdKX1mdW5jdGlvbiAkaW4oKXtyZXR1cm4gR3ooKSxjdChvdChBX3QsMSksYWUsMzQwLDAsW1JodCxfX3QsU190LENfdF0pfWZ1bmN0aW9uIHppbigpe3JldHVybiBfbCgpLGN0KG90KHRBLDEpLGFlLDM3NCwwLFtuTixWMixlTixYeV0pfWZ1bmN0aW9uIHFpbigpe3JldHVybiBqbCgpLGN0KG90KHU0ZSwxKSxhZSwyODUsMCxbWk8sdTAsd2IsUU9dKX1mdW5jdGlvbiBIaW4oKXtyZXR1cm4gcTAoKSxjdChvdChwZnQsMSksYWUsMjE4LDAsW2dmdCxYTyxBNyxINl0pfWZ1bmN0aW9uIEdpbigpe3JldHVybiBBeigpLGN0KG90KE9BdCwxKSxhZSwzMTEsMCxbd2Z0LE1BdCxEQXQsSUF0XSl9ZnVuY3Rpb24gVmluKCl7cmV0dXJuIENsKCksY3Qob3QoVDRlLDEpLGFlLDM5NiwwLFtZbCxQQXQsTkF0LEZBdF0pfWZ1bmN0aW9uIFVpbih0KXtyZXR1cm4gZyQoKSxrbChFZnQsdCk/dShKbihFZnQsdCksMzMxKS51ZygpOm51bGx9ZnVuY3Rpb24gc2godCxlLG4pe3JldHVybiBlPDA/enN0KHQsbik6dShuLDY2KS5OaigpLlNqKHQsdC55aCgpLGUpfWZ1bmN0aW9uIFdpbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9b0UobiksdnEodC5kLHIsZSksa2kodC5lLGUsbiksZX1mdW5jdGlvbiBLaW4odCxlLG4pe3ZhciByO3JldHVybiByPW9FKG4pLHZxKHQuaixyLGUpLGtpKHQuayxlLG4pLGV9ZnVuY3Rpb24gSVp0KHQpe3ZhciBlLG47cmV0dXJuIGU9KFR2KCksbj1uZXcgZnYsbiksdCYmWHN0KGUsdCksZX1mdW5jdGlvbiBKd3QodCl7dmFyIGU7cmV0dXJuIGU9dC5yaSh0LmkpLHQuaT4wJiZJYyh0LmcsMCxlLDAsdC5pKSxlfWZ1bmN0aW9uIERadCh0LGUpe05SKCk7dmFyIG47cmV0dXJuIG49dShKbihuVSx0KSw1NSksIW58fG4ud2ooZSl9ZnVuY3Rpb24gWWluKHQpe2lmKHQucCE9MSl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmYpPDwyND4+MjR9ZnVuY3Rpb24gWGluKHQpe2lmKHQucCE9MSl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmspPDwyND4+MjR9ZnVuY3Rpb24gUWluKHQpe2lmKHQucCE9Nyl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmspPDwxNj4+MTZ9ZnVuY3Rpb24gWmluKHQpe2lmKHQucCE9Nyl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmYpPDwxNj4+MTZ9ZnVuY3Rpb24gTjAodCl7dmFyIGU7Zm9yKGU9MDt0Lk9iKCk7KXQuUGIoKSxlPU9hKGUsMSk7cmV0dXJuIHEkKGUpfWZ1bmN0aW9uIE9adCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBMbSx0LnhkKG4pLG4uYSs9Ii4uIixlLnlkKG4pLG4uYX1mdW5jdGlvbiBKaW4odCxlLG4pe3ZhciByO3I9dShKbih0LmcsbiksNTcpLHVlKHQuYS5jLG5ldyBsYShlLHIpKX1mdW5jdGlvbiB0c24odCxlLG4pe3JldHVybiBQbnQoeWUoZWMoQW8odC5mLGUpKSkseWUoZWMoQW8odC5mLG4pKSkpfWZ1bmN0aW9uIGskKHQsZSxuKXtyZXR1cm4gbXEodCxlLG4sRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl9ZnVuY3Rpb24gZXNuKHQsZSxuKXtyZXR1cm4gRUUodCxlLG4sRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl9ZnVuY3Rpb24gbnNuKHQsZSxuKXtyZXR1cm4gQ2JuKHQsZSxuLEV0KGUsOTkpJiYodShlLDE4KS5CYiZZYSkhPTApfWZ1bmN0aW9uIHRtdCh0LGUpe3JldHVybiB0PT0oR24oKSxEcykmJmU9PURzPzQ6dD09RHN8fGU9PURzPzg6MzJ9ZnVuY3Rpb24gTlp0KHQsZSl7cmV0dXJuIEd0KGUpPT09R3QodCk/Iih0aGlzIE1hcCkiOmU9PW51bGw/VHU6JG8oZSl9ZnVuY3Rpb24gcnNuKHQsZSl7cmV0dXJuIHUoZT09bnVsbD9lYyhBbyh0LmYsbnVsbCkpOlU5KHQuZyxlKSwyODEpfWZ1bmN0aW9uIFBadCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9b0Uobiksa2kodC5iLHIsZSksa2kodC5jLGUsbiksZX1mdW5jdGlvbiBGWnQodCxlKXt2YXIgbjtmb3Iobj1lO247KUZtKHQsbi5pLG4uaiksbj10cyhuKTtyZXR1cm4gdH1mdW5jdGlvbiBlbXQodCxlKXt2YXIgbjtyZXR1cm4gbj1KTShkOChuZXcgVnJ0KHQsZSkpKSxPaihuZXcgVnJ0KHQsZSkpLG59ZnVuY3Rpb24gWWQodCxlKXt0bygpO3ZhciBuO3JldHVybiBuPXUodCw2NikuTWooKSxCMG4obixlKSxuLk9rKGUpfWZ1bmN0aW9uIGlzbih0LGUsbixyLHMpe3ZhciBvO289TWJuKHMsbixyKSx1ZShlLEFnbihzLG8pKSxtMG4odCxzLGUpfWZ1bmN0aW9uIEJadCh0LGUsbil7dC5pPTAsdC5lPTAsZSE9biYmKGNyZSh0LGUsbiksb3JlKHQsZSxuKSl9ZnVuY3Rpb24gbm10KHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSx0LnEuc2V0RnVsbFllYXIoZStuYikseV8odCxuKX1mdW5jdGlvbiBzc24odCxlLG4pe2lmKG4pe3ZhciByPW4uZWUoKTt0LmFbZV09cihuKX1lbHNlIGRlbGV0ZSB0LmFbZV19ZnVuY3Rpb24gX3J0KHQsZSxuKXtpZihuKXt2YXIgcj1uLmVlKCk7bj1yKG4pfWVsc2Ugbj12b2lkIDA7dC5hW2VdPW59ZnVuY3Rpb24gUlp0KHQpe2lmKHQ8MCl0aHJvdyBydChuZXcgSHF0KCJOZWdhdGl2ZSBhcnJheSBzaXplOiAiK3QpKX1mdW5jdGlvbiBMYyh0KXtyZXR1cm4gdC5ufHwocmwodCksdC5uPW5ldyB2WXQodCxobyx0KSxTbyh0KSksdC5ufWZ1bmN0aW9uIEZDKHQpe3JldHVybiBRbih0LmE8dC5jLmEubGVuZ3RoKSx0LmI9dC5hLFZ0ZSh0KSx0LmMuYlt0LmJdfWZ1bmN0aW9uIHJtdCh0KXt0LmIhPXQuYyYmKHQuYT1QdChYbixJZSwxLDgsNSwxKSx0LmI9MCx0LmM9MCl9ZnVuY3Rpb24galp0KHQpe3RoaXMuYj1uZXcgQ3IsdGhpcy5jPW5ldyBDcix0aGlzLmQ9bmV3IENyLHRoaXMuYT10fWZ1bmN0aW9uIFdtKHQsZSl7Z2koKSx2di5jYWxsKHRoaXMsdCksdGhpcy5hPWUsdGhpcy5jPS0xLHRoaXMuYj0tMX1mdW5jdGlvbiBLbSh0LGUsbixyKXtxUXQuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiBTcnQodCxlLG4scil7SFF0LmNhbGwodGhpcywxLG4sciksdGhpcy5jPXQsdGhpcy5iPWV9ZnVuY3Rpb24gQXJ0KHQsZSxuLHIscyxvLGgpe2VpdC5jYWxsKHRoaXMsZSxyLHMsbyxoKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBlMih0LGUsbil7dGhpcy5lPXQsdGhpcy5hPVhuLHRoaXMuYj1FdWUoZSksdGhpcy5jPWUsdGhpcy5kPW59ZnVuY3Rpb24gTHJ0KHQpe3RoaXMuZT10LHRoaXMuYz10aGlzLmUuYSx0aGlzLmI9dGhpcy5lLmcsdGhpcy5kPXRoaXMuZS5pfWZ1bmN0aW9uICRadCh0KXt0aGlzLmM9dCx0aGlzLmE9dShMaCh0KSwxNDgpLHRoaXMuYj10aGlzLmEuQWooKS5OaCgpfWZ1bmN0aW9uIGltdCh0KXt0aGlzLmQ9dCx0aGlzLmI9dGhpcy5kLmEuZW50cmllcygpLHRoaXMuYT10aGlzLmIubmV4dCgpfWZ1bmN0aW9uIG4yKCl7Q3IuY2FsbCh0aGlzKSxhV3QodGhpcyksdGhpcy5kLmI9dGhpcy5kLHRoaXMuZC5hPXRoaXMuZH1mdW5jdGlvbiB6WnQodCxlKXt0dnQuY2FsbCh0aGlzKSx0aGlzLmE9dCx0aGlzLmI9ZSx1ZSh0aGlzLmEuYix0aGlzKX1mdW5jdGlvbiBhc24odCxlKXt2YXIgbjtyZXR1cm4gbj1lIT1udWxsP0ZjKHQsZSk6ZWMoQW8odC5mLGUpKSxuaihuKX1mdW5jdGlvbiBvc24odCxlKXt2YXIgbjtyZXR1cm4gbj1lIT1udWxsP0ZjKHQsZSk6ZWMoQW8odC5mLGUpKSxuaihuKX1mdW5jdGlvbiBxWnQodCxlKXt2YXIgbjtmb3Iobj0wO248ZTsrK24pSmkodCxuLG5ldyAkKHUodFtuXSw0MikpKX1mdW5jdGlvbiBjc24odCxlKXt2YXIgbjtmb3Iobj10LmQtMTtuPj0wJiZ0LmFbbl09PT1lW25dO24tLSk7cmV0dXJuIG48MH1mdW5jdGlvbiBIWnQodCxlKXtKOCgpO3ZhciBuO3JldHVybiBuPXQuai5nLWUuai5nLG4hPTA/bjowfWZ1bmN0aW9uIEdadCh0LGUpe3JldHVybiBPbihlKSx0LmEhPW51bGw/R3RuKGUuS2IodC5hKSk6V0h9ZnVuY3Rpb24gRSQodCl7dmFyIGU7cmV0dXJuIHQ/bmV3ICR2dCh0KTooZT1uZXcgQTAsbGl0KGUsdCksZSl9ZnVuY3Rpb24gUGwodCxlKXt2YXIgbjtyZXR1cm4gZS5iLktiKEZ0ZSh0LGUuYy5FZSgpLChuPW5ldyBEbihlKSxuKSkpfWZ1bmN0aW9uIFQkKHQpe0U0dCgpLE5VdCh0aGlzLFNyKFBzKEZwKHQsMjQpLFBxKSksU3IoUHModCxQcSkpKX1mdW5jdGlvbiBWWnQoKXtWWnQ9WixVZ2U9V3IoKE56KCksY3Qob3QoTkV0LDEpLGFlLDQyOCwwLFtJdXQsT0V0XSkpKX1mdW5jdGlvbiBVWnQoKXtVWnQ9WixXZ2U9V3IoKCQkKCksY3Qob3QoRkV0LDEpLGFlLDQyNywwLFtQRXQsRHV0XSkpKX1mdW5jdGlvbiBXWnQoKXtXWnQ9WixZcGU9V3IoKHokKCksY3Qob3QobDd0LDEpLGFlLDQyNCwwLFtIdXQsckddKSkpfWZ1bmN0aW9uIEtadCgpe0tadD1aLCRiZT1XcigocTgoKSxjdChvdChqYmUsMSksYWUsNTExLDAsW3BPLG5sdF0pKSl9ZnVuY3Rpb24gWVp0KCl7WVp0PVosZDJlPVdyKChUSSgpLGN0KG90KE1UdCwxKSxhZSw0MTksMCxbTkcsTFR0XSkpKX1mdW5jdGlvbiBYWnQoKXtYWnQ9Wix2MmU9V3IoKGJJKCksY3Qob3QoT1R0LDEpLGFlLDQ3OSwwLFtEVHQsRkddKSkpfWZ1bmN0aW9uIFFadCgpe1FadD1aLFh3ZT1XcigobEkoKSxjdChvdCh6Q3QsMSksYWUsMzc2LDAsW2JodCxET10pKSl9ZnVuY3Rpb24gWlp0KCl7Wlp0PVosVXdlPVdyKCh5SSgpLGN0KG90KEJDdCwxKSxhZSw0MjEsMCxbZGh0LGdodF0pKSl9ZnVuY3Rpb24gSlp0KCl7Slp0PVosdTJlPVdyKChEJCgpLGN0KG90KGtUdCwxKSxhZSw0MjIsMCxbeFR0LHZsdF0pKSl9ZnVuY3Rpb24gdEp0KCl7dEp0PVosVDJlPVdyKCh4JCgpLGN0KG90KFVUdCwxKSxhZSw0MjAsMCxbRGx0LFZUdF0pKSl9ZnVuY3Rpb24gZUp0KCl7ZUp0PVosem1lPVdyKChWZigpLGN0KG90KCRtZSwxKSxhZSw1MjAsMCxbVXkscGJdKSkpfWZ1bmN0aW9uIG5KdCgpe25KdD1aLHZtZT1XcigoQkMoKSxjdChvdChibWUsMSksYWUsNTIzLDAsW05TLE9TXSkpKX1mdW5jdGlvbiBySnQoKXtySnQ9WixUbWU9V3IoKGRkKCksY3Qob3QoRW1lLDEpLGFlLDUxNiwwLFtSdyxLZ10pKSl9ZnVuY3Rpb24gaUp0KCl7aUp0PVosX21lPVdyKChFMSgpLGN0KG90KENtZSwxKSxhZSw1MTUsMCxbajIsejFdKSkpfWZ1bmN0aW9uIHNKdCgpe3NKdD1aLEttZT1XcigocXYoKSxjdChvdChXbWUsMSksYWUsNDU1LDAsW2JiLGU1XSkpKX1mdW5jdGlvbiBhSnQoKXthSnQ9WixmeWU9V3IoKHYkKCksY3Qob3QoaF90LDEpLGFlLDQyNSwwLFtJaHQsbF90XSkpKX1mdW5jdGlvbiBvSnQoKXtvSnQ9Wix2eWU9V3IoKGl6KCksY3Qob3QoZl90LDEpLGFlLDQ5NSwwLFtUVixFN10pKSl9ZnVuY3Rpb24gY0p0KCl7Y0p0PVosaHllPVdyKChkJCgpLGN0KG90KHVfdCwxKSxhZSw0ODAsMCxbTWh0LGNfdF0pKSl9ZnVuY3Rpb24gdUp0KCl7dUp0PVoseXllPVdyKChOJCgpLGN0KG90KGdfdCwxKSxhZSw0MjYsMCxbZF90LFBodF0pKSl9ZnVuY3Rpb24gbEp0KCl7bEp0PVosUzNlPVdyKChOSSgpLGN0KG90KHZTdCwxKSxhZSw0MjksMCxbT1YsYlN0XSkpKX1mdW5jdGlvbiBoSnQoKXtoSnQ9Wix1M2U9V3IoKGhJKCksY3Qob3QoWV90LDEpLGFlLDQzMCwwLFtHaHQsSVZdKSkpfWZ1bmN0aW9uIEJDKCl7QkM9WixOUz1uZXcgRmJ0KCJVUFBFUiIsMCksT1M9bmV3IEZidCgiTE9XRVIiLDEpfWZ1bmN0aW9uIHVzbih0LGUpe3ZhciBuO249bmV3IG14LEpiKG4sIngiLGUuYSksSmIobiwieSIsZS5iKSxCeCh0LG4pfWZ1bmN0aW9uIGxzbih0LGUpe3ZhciBuO249bmV3IG14LEpiKG4sIngiLGUuYSksSmIobiwieSIsZS5iKSxCeCh0LG4pfWZ1bmN0aW9uIGhzbih0LGUpe3ZhciBuLHI7cj0hMTtkbyBuPUpuZSh0LGUpLHI9cnxuO3doaWxlKG4pO3JldHVybiByfWZ1bmN0aW9uIHNtdCh0LGUpe3ZhciBuLHI7Zm9yKG49ZSxyPTA7bj4wOylyKz10LmFbbl0sbi09biYtbjtyZXR1cm4gcn1mdW5jdGlvbiBmSnQodCxlKXt2YXIgbjtmb3Iobj1lO247KUZtKHQsLW4uaSwtbi5qKSxuPXRzKG4pO3JldHVybiB0fWZ1bmN0aW9uIHZhKHQsZSl7dmFyIG4scjtmb3IoT24oZSkscj10LktjKCk7ci5PYigpOyluPXIuUGIoKSxlLnRkKG4pfWZ1bmN0aW9uIGRKdCh0LGUpe3ZhciBuO3JldHVybiBuPWUuY2QoKSxuZXcgX3Yobix0LmUucGMobix1KGUuZGQoKSwxNCkpKX1mdW5jdGlvbiBocyh0LGUsbixyKXt2YXIgcztzPW5ldyBIdCxzLmM9ZSxzLmI9bixzLmE9cixyLmI9bi5hPXMsKyt0LmJ9ZnVuY3Rpb24gYWgodCxlLG4pe3ZhciByO3JldHVybiByPShBbihlLHQuYy5sZW5ndGgpLHQuY1tlXSksdC5jW2VdPW4scn1mdW5jdGlvbiBmc24odCxlLG4pe3JldHVybiB1KGU9PW51bGw/c3UodC5mLG51bGwsbik6bncodC5nLGUsbiksMjgxKX1mdW5jdGlvbiBNcnQodCl7cmV0dXJuIHQuYyYmdC5kP3F3dCh0LmMpKyItPiIrcXd0KHQuZCk6ImVfIitJdih0KX1mdW5jdGlvbiBBOCh0LGUpe3JldHVybihkMih0KSxqOShuZXcgVG4odCxuZXcgTG10KGUsdC5hKSkpKS5zZChKRSl9ZnVuY3Rpb24gZHNuKCl7cmV0dXJuIFdhKCksY3Qob3QoQzd0LDEpLGFlLDM1NiwwLFtBZCxsYixvdSxxYyxJb10pfWZ1bmN0aW9uIGdzbigpe3JldHVybiBiZSgpLGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSl9ZnVuY3Rpb24gcHNuKHQpe3JldHVybiB2UigpLGZ1bmN0aW9uKCl7cmV0dXJuIF9pbih0LHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gYnNuKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6bmV3IERhdGUoKS5nZXRUaW1lKCl9ZnVuY3Rpb24gVmEodCl7cmV0dXJuIXQuY3x8IXQuZD8hMTohIXQuYy5pJiZ0LmMuaT09dC5kLml9ZnVuY3Rpb24gZ0p0KHQpe2lmKCF0LmMuU2IoKSl0aHJvdyBydChuZXcgbGMpO3JldHVybiB0LmE9ITAsdC5jLlViKCl9ZnVuY3Rpb24gY0kodCl7dC5pPTAseU0odC5iLG51bGwpLHlNKHQuYyxudWxsKSx0LmE9bnVsbCx0LmU9bnVsbCwrK3QuZ31mdW5jdGlvbiBhbXQodCl7RVllLmNhbGwodGhpcyx0PT1udWxsP1R1OiRvKHQpLEV0KHQsNzgpP3UodCw3OCk6bnVsbCl9ZnVuY3Rpb24gcEp0KHQpeyRoZSgpLGp6dCh0aGlzKSx0aGlzLmE9bmV3IFFpLE95dCh0aGlzLHQpLG5pKHRoaXMuYSx0KX1mdW5jdGlvbiBiSnQoKXtZZXQodGhpcyksdGhpcy5iPW5ldyAkZShzcyxzcyksdGhpcy5hPW5ldyAkZShUcyxUcyl9ZnVuY3Rpb24gdkp0KHQsZSl7dGhpcy5jPTAsdGhpcy5iPWUsVlZ0LmNhbGwodGhpcyx0LDE3NDkzKSx0aGlzLmE9dGhpcy5jfWZ1bmN0aW9uIElydCh0KXtDJCgpLCFSMSYmKHRoaXMuYz10LHRoaXMuZT0hMCx0aGlzLmE9bmV3IGxlKX1mdW5jdGlvbiBDJCgpe0MkPVosUjE9ITAsRmdlPSExLEJnZT0hMSxqZ2U9ITEsUmdlPSExfWZ1bmN0aW9uIG9tdCh0LGUpe3JldHVybiBFdChlLDE0OSk/aG4odC5jLHUoZSwxNDkpLmMpOiExfWZ1bmN0aW9uIGNtdCh0LGUpe3ZhciBuO3JldHVybiBuPTAsdCYmKG4rPXQuZi5hLzIpLGUmJihuKz1lLmYuYS8yKSxufWZ1bmN0aW9uIERydCh0LGUpe3ZhciBuO3JldHVybiBuPXUoV3YodC5kLGUpLDIzKSxufHx1KFd2KHQuZSxlKSwyMyl9ZnVuY3Rpb24gd0p0KHQpe3RoaXMuYj10LGVyLmNhbGwodGhpcyx0KSx0aGlzLmE9dShJbih0aGlzLmIuYSw0KSwxMjYpfWZ1bmN0aW9uIG1KdCh0KXt0aGlzLmI9dCxNeC5jYWxsKHRoaXMsdCksdGhpcy5hPXUoSW4odGhpcy5iLmEsNCksMTI2KX1mdW5jdGlvbiBybCh0KXtyZXR1cm4gdC50fHwodC50PW5ldyBMenQodCksSkMobmV3IHFxdCh0KSwwLHQudCkpLHQudH1mdW5jdGlvbiB2c24oKXtyZXR1cm4gYW8oKSxjdChvdChXUywxKSxhZSwxMDMsMCxbYzAsa2YsamgsUTAsWjBdKX1mdW5jdGlvbiB3c24oKXtyZXR1cm4gYzQoKSxjdChvdChRUywxKSxhZSwyNDksMCxbbWIsSk8sQ0F0LFhTLF9BdF0pfWZ1bmN0aW9uIG1zbigpe3JldHVybiBYZigpLGN0KG90KFFnLDEpLGFlLDE3NSwwLFtxbixKcyxJZCwkMixYZ10pfWZ1bmN0aW9uIHlzbigpe3JldHVybiBpRCgpLGN0KG90KEpfdCwxKSxhZSwzMTYsMCxbWF90LFZodCxaX3QsVWh0LFFfdF0pfWZ1bmN0aW9uIHhzbigpe3JldHVybiBhXygpLGN0KG90KExDdCwxKSxhZSwzMTUsMCxbQUN0LGxodCxoaHQsQVMsTFNdKX1mdW5jdGlvbiBrc24oKXtyZXR1cm4gdjIoKSxjdChvdChBVHQsMSksYWUsMzM1LDAsW21sdCxTVHQseWx0LHBTLGdTXSl9ZnVuY3Rpb24gRXNuKCl7cmV0dXJuIHlFKCksY3Qob3QocjNlLDEpLGFlLDM1NSwwLFtuNSxSNixxUyx6UyxIU10pfWZ1bmN0aW9uIFRzbigpe3JldHVybiBnNCgpLGN0KG90KHQyZSwxKSxhZSwzNjMsMCxbTEcsSUcsREcsTUcsQUddKX1mdW5jdGlvbiBDc24oKXtyZXR1cm4gaGgoKSxjdChvdChzOXQsMSksYWUsMTYzLDAsW0NPLHlTLGZiLHhTLEZ5XSl9ZnVuY3Rpb24gTDgoKXtMOD1aO3ZhciB0LGU7YVU9KHQ4KCksZT1uZXcgbFIsZSksb1U9KHQ9bmV3IFV0dCx0KX1mdW5jdGlvbiB5SnQodCl7dmFyIGU7cmV0dXJuIHQuY3x8KGU9dC5yLEV0KGUsODgpJiYodC5jPXUoZSwyNikpKSx0LmN9ZnVuY3Rpb24gX3NuKHQpe3JldHVybiB0LmU9Myx0LmQ9dC5ZYigpLHQuZSE9Mj8odC5lPTAsITApOiExfWZ1bmN0aW9uIE9ydCh0KXt2YXIgZSxuLHI7cmV0dXJuIGU9dCZ1bCxuPXQ+PjIyJnVsLHI9dDwwP1cwOjAscnUoZSxuLHIpfWZ1bmN0aW9uIFNzbih0KXt2YXIgZSxuLHIscztmb3Iobj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLExDKGUpfWZ1bmN0aW9uIEFzbih0LGUpe3ZhciBuLHI7bj11KFR1bih0LmMsZSksMTQpLG4mJihyPW4uZ2MoKSxuLiRiKCksdC5kLT1yKX1mdW5jdGlvbiB4SnQodCxlKXt2YXIgbixyO3JldHVybiBuPWUuY2QoKSxyPUR5dCh0LG4pLCEhciYmUGMoci5lLGUuZGQoKSl9ZnVuY3Rpb24gR3godCxlKXtyZXR1cm4gZT09MHx8dC5lPT0wP3Q6ZT4wP3dpZSh0LGUpOiRjZSh0LC1lKX1mdW5jdGlvbiB1bXQodCxlKXtyZXR1cm4gZT09MHx8dC5lPT0wP3Q6ZT4wPyRjZSh0LGUpOndpZSh0LC1lKX1mdW5jdGlvbiBMcih0KXtpZih6cih0KSlyZXR1cm4gdC5jPXQuYSx0LmEuUGIoKTt0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIGtKdCh0KXt2YXIgZSxuO3JldHVybiBlPXQuYy5pLG49dC5kLmksZS5rPT0oR24oKSx4cykmJm4uaz09eHN9ZnVuY3Rpb24gTnJ0KHQpe3ZhciBlO3JldHVybiBlPW5ldyB6dixMbyhlLHQpLEp0KGUsKFRlKCksX28pLG51bGwpLGV9ZnVuY3Rpb24gUHJ0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LllnKGUpLHI+PTA/dC5fZyhyLG4sITApOmx3KHQsZSxuKX1mdW5jdGlvbiBsbXQodCxlLG4scil7dmFyIHM7Zm9yKHM9MDtzPE51dDtzKyspJGoodC5hW2UuZ11bc10sbixyW2UuZ10pfWZ1bmN0aW9uIGhtdCh0LGUsbixyKXt2YXIgcztmb3Iocz0wO3M8UUg7cysrKWpqKHQuYVtzXVtlLmddLG4scltlLmddKX1mdW5jdGlvbiBmbXQodCxlLG4scixzKXtxUXQuY2FsbCh0aGlzLGUscixzKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBkbXQodCxlLG4scixzKXtIUXQuY2FsbCh0aGlzLGUscixzKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBnbXQodCxlLG4scixzKXtUSnQuY2FsbCh0aGlzLGUscixzKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBkZih0LGUsbixyLHMpe1RKdC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYj1ufWZ1bmN0aW9uIEVKdCh0LGUsbil7b1IuY2FsbCh0aGlzLG4pLHRoaXMuYj10LHRoaXMuYz1lLHRoaXMuZD0oVWl0KCksQWZ0KX1mdW5jdGlvbiBUSnQodCxlLG4pe3RoaXMuZD10LHRoaXMuaz1lPzE6MCx0aGlzLmY9bj8xOjAsdGhpcy5vPS0xLHRoaXMucD0wfWZ1bmN0aW9uIENKdCh0LGUsbil7dmFyIHI7cj1uZXcgaDJ0KHQuYSksVkMocix0LmEuYSksc3Uoci5mLGUsbiksdC5hLmE9cn1mdW5jdGlvbiB1SSh0LGUpe3QucWkodC5pKzEpLGZDKHQsdC5pLHQub2kodC5pLGUpKSx0LmJpKHQuaSsrLGUpLHQuY2koKX1mdW5jdGlvbiBSQyh0KXt2YXIgZSxuOysrdC5qLGU9dC5nLG49dC5pLHQuZz1udWxsLHQuaT0wLHQuZGkobixlKSx0LmNpKCl9ZnVuY3Rpb24gXzEodCl7dmFyIGUsbjtyZXR1cm4gQXIodCksZT1LZW4odC5sZW5ndGgpLG49bmV3IFljKGUpLF95dChuLHQpLG59ZnVuY3Rpb24gVngodCl7dmFyIGU7cmV0dXJuIGU9KEFyKHQpLHQ/bmV3IFB1KHQpOmQ4KHQuS2MoKSkpLEJzdChlKSx5eihlKX1mdW5jdGlvbiBBZyh0LGUpe3ZhciBuO3JldHVybiBuPShBbihlLHQuYy5sZW5ndGgpLHQuY1tlXSksbGJ0KHQuYyxlLDEpLG59ZnVuY3Rpb24gQWkodCxlKXt2YXIgbjtyZXR1cm4gbj11KHQuYy54YyhlKSwxNCksIW4mJihuPXQuaWMoZSkpLHQucGMoZSxuKX1mdW5jdGlvbiBwbXQodCxlKXt2YXIgbixyO3JldHVybiBuPShPbih0KSx0KSxyPShPbihlKSxlKSxuPT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gX0p0KHQpe3ZhciBlO3JldHVybiBlPXQuZSt0LmYsaXNOYU4oZSkmJkVqKHQuZCk/dC5kOmV9ZnVuY3Rpb24gUDAodCxlKXtyZXR1cm4gdC5hP1ZyKHQuYSx0LmIpOnQuYT1uZXcgSWwodC5kKSxjQyh0LmEsZSksdH1mdW5jdGlvbiBibXQodCxlKXtpZih0PDB8fHQ+ZSl0aHJvdyBydChuZXcgbW8oVTR0KHQsZSwiaW5kZXgiKSkpO3JldHVybiB0fWZ1bmN0aW9uIEZydCh0LGUsbixyKXt2YXIgcztyZXR1cm4gcz1QdChUcixYciwyNSxlLDE1LDEpLCRkbihzLHQsZSxuLHIpLHN9ZnVuY3Rpb24gTHNuKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSsoZS82MHwwKSx0LnEuc2V0TWludXRlcyhlKSx5Xyh0LG4pfWZ1bmN0aW9uIE1zbih0LGUpe3JldHVybiBiLk1hdGgubWluKEhwKGUuYSx0LmQuZC5jKSxIcChlLmIsdC5kLmQuYykpfWZ1bmN0aW9uIFV4KHQsZSl7cmV0dXJuIGVhKGUpP2U9PW51bGw/dTV0KHQuZixudWxsKTpQbmUodC5nLGUpOnU1dCh0LmYsZSl9ZnVuY3Rpb24gUzEodCl7dGhpcy5jPXQsdGhpcy5hPW5ldyBTKHRoaXMuYy5hKSx0aGlzLmI9bmV3IFModGhpcy5jLmIpfWZ1bmN0aW9uIF8kKCl7dGhpcy5lPW5ldyBsZSx0aGlzLmM9bmV3IGxlLHRoaXMuZD1uZXcgbGUsdGhpcy5iPW5ldyBsZX1mdW5jdGlvbiBTSnQoKXt0aGlzLmc9bmV3IEFwdCx0aGlzLmI9bmV3IEFwdCx0aGlzLmE9bmV3IGxlLHRoaXMuaz1uZXcgbGV9ZnVuY3Rpb24gQUp0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmQ9bix1ZShlLmUsdGhpcyksdWUobi5iLHRoaXMpfWZ1bmN0aW9uIExKdCh0LGUpe0dWdC5jYWxsKHRoaXMsZS5yZCgpLGUucWQoKSYtNiksT24odCksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTUp0KHQsZSl7VlZ0LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi02KSxPbih0KSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB2bXQodCxlKXtHZXQuY2FsbCh0aGlzLGUucmQoKSxlLnFkKCkmLTYpLE9uKHQpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFMkKHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix1ZSh0LnQsdGhpcyksdWUoZS5pLHRoaXMpfWZ1bmN0aW9uIEEkKCl7dGhpcy5iPW5ldyBRaSx0aGlzLmE9bmV3IFFpLHRoaXMuYj1uZXcgUWksdGhpcy5hPW5ldyBRaX1mdW5jdGlvbiBMJCgpe0wkPVosR1M9bmV3IEdpKCJvcmcuZWNsaXBzZS5lbGsubGFiZWxzLmxhYmVsTWFuYWdlciIpfWZ1bmN0aW9uIElKdCgpe0lKdD1aLGJUdD1uZXcgT3MoInNlcGFyYXRlTGF5ZXJDb25uZWN0aW9ucyIsKGR6KCksYWx0KSl9ZnVuY3Rpb24gVmYoKXtWZj1aLFV5PW5ldyBqYnQoIlJFR1VMQVIiLDApLHBiPW5ldyBqYnQoIkNSSVRJQ0FMIiwxKX1mdW5jdGlvbiBsSSgpe2xJPVosYmh0PW5ldyBQYnQoIlNUQUNLRUQiLDApLERPPW5ldyBQYnQoIlNFUVVFTkNFRCIsMSl9ZnVuY3Rpb24gaEkoKXtoST1aLEdodD1uZXcgVmJ0KCJGSVhFRCIsMCksSVY9bmV3IFZidCgiQ0VOVEVSX05PREUiLDEpfWZ1bmN0aW9uIElzbih0LGUpe3ZhciBuO3JldHVybiBuPVAzbih0LGUpLHQuYj1uZXcgcnoobi5jLmxlbmd0aCksV3luKHQsbil9ZnVuY3Rpb24gRHNuKHQsZSxuKXt2YXIgcjtyZXR1cm4rK3QuZSwtLXQuZixyPXUodC5kW2VdLiRjKG4pLDEzMyksci5kZCgpfWZ1bmN0aW9uIERKdCh0KXt2YXIgZTtyZXR1cm4gdC5hfHwoZT10LnIsRXQoZSwxNDgpJiYodC5hPXUoZSwxNDgpKSksdC5hfWZ1bmN0aW9uIHdtdCh0KXtpZih0LmEpe2lmKHQuZSlyZXR1cm4gd210KHQuZSl9ZWxzZSByZXR1cm4gdDtyZXR1cm4gbnVsbH1mdW5jdGlvbiBPc24odCxlKXtyZXR1cm4gdC5wPGUucD8xOnQucD5lLnA/LTE6MH1mdW5jdGlvbiBNJCh0LGUpe3JldHVybiBPbihlKSx0LmM8dC5kPyh0LnplKGUsdC5jKyspLCEwKTohMX1mdW5jdGlvbiBPSnQodCxlKXtyZXR1cm4ga2wodC5hLGUpPyhVeCh0LmEsZSksITApOiExfWZ1bmN0aW9uIE5zbih0KXt2YXIgZSxuO3JldHVybiBlPXQuY2QoKSxuPXUodC5kZCgpLDE0KSxWTShuLk5jKCksbmV3IGV0dChlKSl9ZnVuY3Rpb24gUHNuKHQpe3ZhciBlO3JldHVybiBlPXUoZHd0KHQuYix0LmIubGVuZ3RoKSw5KSxuZXcgcmgodC5hLGUsdC5jKX1mdW5jdGlvbiBGc24odCl7dmFyIGU7cmV0dXJuIGQyKHQpLGU9bmV3IE1LdCh0LHQuYS5lLHQuYS5kfDQpLG5ldyBHMnQodCxlKX1mdW5jdGlvbiBOSnQodCl7dmFyIGU7Zm9yKCRwKHQpLGU9MDt0LmEuc2QobmV3IGtzKTspZT1PYShlLDEpO3JldHVybiBlfWZ1bmN0aW9uIG1tdCh0LGUsbil7dmFyIHIscztmb3Iocj0wLHM9MDtzPGUubGVuZ3RoO3MrKylyKz10LiRmKGVbc10scixuKX1mdW5jdGlvbiBCc24odCxlKXt2YXIgbjt0LkMmJihuPXUoZ28odC5iLGUpLDEyNCkubixuLmQ9dC5DLmQsbi5hPXQuQy5hKX1mdW5jdGlvbiBXeCh0LGUsbil7cmV0dXJuIG9JKGUsdC5lLkhkKCkuZ2MoKSksb0kobix0LmMuSGQoKS5nYygpKSx0LmFbZV1bbl19ZnVuY3Rpb24gTGcodCxlKXtKcCgpLHRoaXMuZT10LHRoaXMuZD0xLHRoaXMuYT1jdChvdChUciwxKSxYciwyNSwxNSxbZV0pfWZ1bmN0aW9uIEkkKHQsZSxuLHIpe3RoaXMuZj10LHRoaXMuZT1lLHRoaXMuZD1uLHRoaXMuYj1yLHRoaXMuYz1yP3IuZDpudWxsfWZ1bmN0aW9uIHltdCh0KXt2YXIgZSxuLHIscztzPXQuZCxlPXQuYSxuPXQuYixyPXQuYyx0LmQ9bix0LmE9cix0LmI9cyx0LmM9ZX1mdW5jdGlvbiBSc24odCxlLG4scil7YWxlKHQsZSxuLEVFKHQsZSxyLEV0KGUsOTkpJiYodShlLDE4KS5CYiZZYSkhPTApKX1mdW5jdGlvbiBqc24odCxlKXt3cihlLCJMYWJlbCBtYW5hZ2VtZW50IiwxKSxuaihRKHQsKEwkKCksR1MpKSksb3IoZSl9ZnVuY3Rpb24gWWModCl7WWV0KHRoaXMpLF9qKHQ+PTAsIkluaXRpYWwgY2FwYWNpdHkgbXVzdCBub3QgYmUgbmVnYXRpdmUiKX1mdW5jdGlvbiBQSnQoKXtQSnQ9WixRZ2U9V3IoKEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpKX1mdW5jdGlvbiBGSnQoKXtGSnQ9WixKZ2U9V3IoKFh1KCksY3Qob3QoWmdlLDEpLGFlLDQ2MSwwLFtTZCxjYixtZl0pKSl9ZnVuY3Rpb24gQkp0KCl7Qkp0PVosZXBlPVdyKCh3dSgpLGN0KG90KHRwZSwxKSxhZSw0NjIsMCxbZTEsdWIseWZdKSkpfWZ1bmN0aW9uIFJKdCgpe1JKdD1aLCRnZT1XcigoSTEoKSxjdChvdChsbCwxKSxhZSwxMzIsMCxbTUV0LEdsLEx5XSkpKX1mdW5jdGlvbiBqSnQoKXtqSnQ9WixiYmU9V3IoKGpDKCksY3Qob3QoVDd0LDEpLGFlLDM3OSwwLFtXdXQsVXV0LEt1dF0pKSl9ZnVuY3Rpb24gJEp0KCl7JEp0PVosSWJlPVdyKChldygpLGN0KG90KEE3dCwxKSxhZSw0MjMsMCxbJDQsUzd0LEp1dF0pKSl9ZnVuY3Rpb24gekp0KCl7ekp0PVosbDJlPVdyKChZeCgpLGN0KG90KFRUdCwxKSxhZSwzMTQsMCxbUzYsd08sRVR0XSkpKX1mdW5jdGlvbiBxSnQoKXtxSnQ9WixoMmU9V3IoKFgkKCksY3Qob3QoX1R0LDEpLGFlLDMzNywwLFtDVHQsT0csd2x0XSkpKX1mdW5jdGlvbiBISnQoKXtISnQ9WixwMmU9V3IoKHUyKCksY3Qob3QoZzJlLDEpLGFlLDQ1MCwwLFt4bHQsdTcsRzRdKSkpfWZ1bmN0aW9uIEdKdCgpe0dKdD1aLGEyZT1XcigoSnYoKSxjdChvdChjbHQsMSksYWUsMzYxLDAsW0F3LGhiLFN3XSkpKX1mdW5jdGlvbiBWSnQoKXtWSnQ9WixFMmU9V3IoKEIwKCksY3Qob3QoazJlLDEpLGFlLDMwMywwLFt5TyxVNCxBNl0pKSl9ZnVuY3Rpb24gVUp0KCl7VUp0PVoseDJlPVdyKChXOCgpLGN0KG90KElsdCwxKSxhZSwyOTIsMCxbTGx0LE1sdCxtT10pKSl9ZnVuY3Rpb24gV0p0KCl7V0p0PVosendlPVdyKChZQygpLGN0KG90KFNDdCwxKSxhZSwzNzgsMCxbb2h0LF9DdCx1Vl0pKSl9ZnVuY3Rpb24gS0p0KCl7S0p0PVosWXdlPVdyKCh1eigpLGN0KG90KCRDdCwxKSxhZSwzNzUsMCxbUkN0LHBodCxqQ3RdKSkpfWZ1bmN0aW9uIFlKdCgpe1lKdD1aLFZ3ZT1XcigoajAoKSxjdChvdChGQ3QsMSksYWUsMzM5LDAsW2diLFBDdCxmaHRdKSkpfWZ1bmN0aW9uIFhKdCgpe1hKdD1aLEt3ZT1Xcigoc28oKSxjdChvdChXd2UsMSksYWUsNDUyLDAsW01TLEp1LGV1XSkpKX1mdW5jdGlvbiBRSnQoKXtRSnQ9WixKd2U9V3IoKGd6KCksY3Qob3QoV0N0LDEpLGFlLDM3NywwLFttaHQseDcsVnldKSkpfWZ1bmN0aW9uIFpKdCgpe1pKdD1aLFF3ZT1XcigodEUoKSxjdChvdChIQ3QsMSksYWUsMzM2LDAsW3ZodCxxQ3QsSVNdKSkpfWZ1bmN0aW9uIEpKdCgpe0pKdD1aLFp3ZT1Xcigob3ooKSxjdChvdChVQ3QsMSksYWUsMzM4LDAsW1ZDdCx3aHQsR0N0XSkpKX1mdW5jdGlvbiB0dGUoKXt0dGU9WixmbWU9V3IoKFp2KCksY3Qob3QoaG1lLDEpLGFlLDQ1NCwwLFtPTyxEUyxkVl0pKSl9ZnVuY3Rpb24gZXRlKCl7ZXRlPVosbXllPVdyKChDeigpLGN0KG90KHd5ZSwxKSxhZSw0NDIsMCxbTmh0LERodCxPaHRdKSkpfWZ1bmN0aW9uIG50ZSgpe250ZT1aLHh5ZT1XcigoUkkoKSxjdChvdCh2X3QsMSksYWUsMzgwLDAsW0NWLHBfdCxiX3RdKSkpfWZ1bmN0aW9uIHJ0ZSgpe3J0ZT1aLFJ5ZT1XcigoVHooKSxjdChvdChQX3QsMSksYWUsMzgxLDAsW05fdCwkaHQsT190XSkpKX1mdW5jdGlvbiBpdGUoKXtpdGU9WixCeWU9V3IoKGN6KCksY3Qob3QoSV90LDEpLGFlLDI5MywwLFtqaHQsTV90LExfdF0pKSl9ZnVuY3Rpb24gc3RlKCl7c3RlPVosczNlPVdyKChHSSgpLGN0KG90KHpodCwxKSxhZSw0MzcsMCxbQVYsTFYsTVZdKSkpfWZ1bmN0aW9uIGF0ZSgpe2F0ZT1aLGM0ZT1XcigoJDAoKSxjdChvdChUQXQsMSksYWUsMzM0LDAsW0hWLFpnLFlTXSkpKX1mdW5jdGlvbiBvdGUoKXtvdGU9WixpNGU9V3IoKEExKCksY3Qob3QoZkF0LDEpLGFlLDI3MiwwLFtfNyxZeSxTN10pKSl9ZnVuY3Rpb24gJHNuKCl7cmV0dXJuIG9hKCksY3Qob3QoU0F0LDEpLGFlLDk4LDAsW3liLEgxLEw3LEcyLGgwLFZjXSl9ZnVuY3Rpb24gcjIodCxlKXtyZXR1cm4hdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksV2l0KHQubyxlKX1mdW5jdGlvbiB6c24odCl7cmV0dXJuIXQuZyYmKHQuZz1uZXcgVGspLCF0LmcuZCYmKHQuZy5kPW5ldyBfenQodCkpLHQuZy5kfWZ1bmN0aW9uIHFzbih0KXtyZXR1cm4hdC5nJiYodC5nPW5ldyBUayksIXQuZy5hJiYodC5nLmE9bmV3IFN6dCh0KSksdC5nLmF9ZnVuY3Rpb24gSHNuKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IFRrKSwhdC5nLmImJih0LmcuYj1uZXcgQ3p0KHQpKSx0LmcuYn1mdW5jdGlvbiBmSSh0KXtyZXR1cm4hdC5nJiYodC5nPW5ldyBUayksIXQuZy5jJiYodC5nLmM9bmV3IEF6dCh0KSksdC5nLmN9ZnVuY3Rpb24gR3NuKHQsZSxuKXt2YXIgcixzO2ZvcihzPW5ldyBVOChlLHQpLHI9MDtyPG47KytyKSR6KHMpO3JldHVybiBzfWZ1bmN0aW9uIEJydCh0LGUsbil7dmFyIHIscztpZihuIT1udWxsKWZvcihyPTA7cjxlOysrcilzPW5bcl0sdC5maShyLHMpfWZ1bmN0aW9uIFJydCh0LGUsbixyKXt2YXIgcztyZXR1cm4gcz1QdChUcixYciwyNSxlKzEsMTUsMSksX21uKHMsdCxlLG4sciksc31mdW5jdGlvbiBQdCh0LGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9bXNlKHMscikscyE9MTAmJmN0KG90KHQsbyksZSxuLHMsaCksaH1mdW5jdGlvbiBWc24odCxlLG4scil7cmV0dXJuIG4mJihyPW4uZ2goZSxWaShuLlRnKCksdC5jLkxqKCkpLG51bGwscikpLHJ9ZnVuY3Rpb24gVXNuKHQsZSxuLHIpe3JldHVybiBuJiYocj1uLmloKGUsVmkobi5UZygpLHQuYy5MaigpKSxudWxsLHIpKSxyfWZ1bmN0aW9uIHhtdCh0LGUsbil7dSh0LmIsNjUpLHUodC5iLDY1KSx1KHQuYiw2NSksbXUodC5hLG5ldyBiS3QobixlLHQpKX1mdW5jdGlvbiBrbXQodCxlLG4pe2lmKHQ8MHx8ZT5ufHxlPHQpdGhyb3cgcnQobmV3IFpwdChGcSt0K3p4dCtlK2p4dCtuKSl9ZnVuY3Rpb24gTTgodCl7aWYoIXQpdGhyb3cgcnQobmV3IEZvKCJVbmFibGUgdG8gYWRkIGVsZW1lbnQgdG8gcXVldWUiKSl9ZnVuY3Rpb24ganJ0KHQpe3Q/KHRoaXMuYz10LHRoaXMuYj1udWxsKToodGhpcy5jPW51bGwsdGhpcy5iPW5ldyBsZSl9ZnVuY3Rpb24gJHJ0KHQsZSl7UlIuY2FsbCh0aGlzLHQsZSksdGhpcy5hPVB0KGV4bixEcSw0MzYsMiwwLDEpLHRoaXMuYj0hMH1mdW5jdGlvbiBFbXQodCl7WG5lLmNhbGwodGhpcyx0LDApLGFXdCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIHpydCh0KXt2YXIgZTtyZXR1cm4gZT10LmIsZS5iPT0wP251bGw6dShRZihlLDApLDE4OCkuYn1mdW5jdGlvbiBjdGUodCxlKXt2YXIgbjtyZXR1cm4gbj1uZXcgJHQsbi5jPSEwLG4uZD1lLmRkKCksbmhlKHQsZS5jZCgpLG4pfWZ1bmN0aW9uIFdzbih0LGUpe3ZhciBuO249dC5xLmdldEhvdXJzKCkrKGUvMzYwMHwwKSx0LnEuc2V0U2Vjb25kcyhlKSx5Xyh0LG4pfWZ1bmN0aW9uIFRtdCh0LGUsbil7dmFyIHI7cj10LmJbbi5jLnBdW24ucF0sci5iKz1lLmIsci5jKz1lLmMsci5hKz1lLmEsKytyLmF9ZnVuY3Rpb24gSHAodCxlKXt2YXIgbixyO3JldHVybiBuPXQuYS1lLmEscj10LmItZS5iLGIuTWF0aC5zcXJ0KG4qbityKnIpfWZ1bmN0aW9uIEQkKCl7RCQ9Wix4VHQ9bmV3IE1idCgiUVVBRFJBVElDIiwwKSx2bHQ9bmV3IE1idCgiU0NBTkxJTkUiLDEpfWZ1bmN0aW9uIHV0ZSgpe3V0ZT1aLG5tZT1LdShiaShuZXcgSHMsKFdhKCksQWQpLChybygpLHJsdCkpLElvLGJPKX1mdW5jdGlvbiBLc24oKXtyZXR1cm4gY3koKSxjdChvdChuZnQsMSksYWUsMjkxLDAsW2VmdCxWTyxHTyx0ZnQscU8sSE9dKX1mdW5jdGlvbiBZc24oKXtyZXR1cm4gUWQoKSxjdChvdChrU3QsMSksYWUsMjQ4LDAsW1podCwkTyx6TyxGVixOVixQVl0pfWZ1bmN0aW9uIFhzbigpe3JldHVybiBpNigpLGN0KG90KGM3LDEpLGFlLDIyNywwLFtvNyxkUyxhNyxPeSxINCxxNF0pfWZ1bmN0aW9uIFFzbigpe3JldHVybiBnRSgpLGN0KG90KEdUdCwxKSxhZSwyNzUsMCxbYlMsJFR0LEhUdCxxVHQselR0LGpUdF0pfWZ1bmN0aW9uIFpzbigpe3JldHVybiBuRCgpLGN0KG90KFJUdCwxKSxhZSwyNzQsMCxbQkcsUFR0LEJUdCxOVHQsRlR0LFNsdF0pfWZ1bmN0aW9uIEpzbigpe3JldHVybiBaeigpLGN0KG90KENDdCwxKSxhZSwzMTMsMCxbYWh0LEVDdCxzaHQsa0N0LFRDdCxjVl0pfWZ1bmN0aW9uIHRhbigpe3JldHVybiBucSgpLGN0KG90KElUdCwxKSxhZSwyNzYsMCxbRWx0LGtsdCxDbHQsVGx0LF9sdCxQR10pfWZ1bmN0aW9uIGVhbigpe3JldHVybiBmXygpLGN0KG90KFhtZSwxKSxhZSwzMjcsMCxbd1Ysa2h0LFRodCxFaHQsQ2h0LHhodF0pfWZ1bmN0aW9uIG5hbigpe3JldHVybiBRdSgpLGN0KG90KEdWLDEpLGFlLDI3MywwLFt4Yix0Zyx0TixKUyxaUyxHNl0pfWZ1bmN0aW9uIHJhbigpe3JldHVybiB0cSgpLGN0KG90KHdBdCwxKSxhZSwzMTIsMCxbYmZ0LHBBdCx2QXQsZEF0LGJBdCxnQXRdKX1mdW5jdGlvbiBpYW4oKXtyZXR1cm4gR24oKSxjdChvdChlbHQsMSksYWUsMjY3LDAsW0RzLFpzLHhzLEhjLFNsLGoxXSl9ZnVuY3Rpb24gbHRlKHQpe1BtKCEhdC5jKSxUcnQodC5lLHQpLHQuYy5RYigpLHQuYz1udWxsLHQuYj1neXQodCksejJ0KHQuZSx0KX1mdW5jdGlvbiBodGUodCl7cmV0dXJuIFRydCh0LmMuYS5lLHQpLFFuKHQuYiE9dC5jLmEuZCksdC5hPXQuYix0LmI9dC5iLmEsdC5hfWZ1bmN0aW9uIENtdCh0KXt2YXIgZTtyZXR1cm4hdC5hJiZ0LmIhPS0xJiYoZT10LmMuVGcoKSx0LmE9eW4oZSx0LmIpKSx0LmF9ZnVuY3Rpb24gTXIodCxlKXtyZXR1cm4gdC5oaSgpJiZ0LkhjKGUpPyExOih0LlloKGUpLCEwKX1mdW5jdGlvbiBVZih0LGUpe3JldHVybiB0SShlLCJIb3Jpem9udGFsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCIpLHQuYj1lLHR9ZnVuY3Rpb24gZnRlKHQsZSxuKXtnaSgpO3ZhciByO3JldHVybiByPXRiKHQsZSksbiYmciYmT2VuKHQpJiYocj1udWxsKSxyfWZ1bmN0aW9uIE1nKHQsZSxuKXt2YXIgcixzO2ZvcihzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMzcpLHdfKHIsZSxuKX1mdW5jdGlvbiBfbXQodCxlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMzcpLE51ZSh0LG4sMCwwKX1mdW5jdGlvbiBTbXQodCxlLG4pe3ZhciByO3QuZFtlLmddPW4scj10LmcuYyxyW2UuZ109Yi5NYXRoLm1heChyW2UuZ10sbisxKX1mdW5jdGlvbiBkSSh0LGUpe3ZhciBuLHIscztyZXR1cm4gcz10LnIscj10LmQsbj1FXyh0LGUsITApLG4uYiE9c3x8bi5hIT1yfWZ1bmN0aW9uIGR0ZSh0LGUpe3JldHVybiBNR3QodC5lLGUpfHxwMih0LmUsZSxuZXcgR2llKGUpKSx1KFd2KHQuZSxlKSwxMTMpfWZ1bmN0aW9uIGkyKHQsZSxuLHIpe3JldHVybiBPbih0KSxPbihlKSxPbihuKSxPbihyKSxuZXcgb3d0KHQsZSxuZXcgcmUpfWZ1bmN0aW9uIFRsKHQsZSxuLHIpe3RoaXMucmooKSx0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bmV3IGl3dCh0aGlzLGUsbixyKX1mdW5jdGlvbiBxcnQodCxlLG4scixzLG8pe1l3dC5jYWxsKHRoaXMsZSxyLHMsbyksdGhpcy5jPXQsdGhpcy5iPW59ZnVuY3Rpb24gZ0kodCxlLG4scixzLG8pe1l3dC5jYWxsKHRoaXMsZSxyLHMsbyksdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gc2FuKHQsZSxuKXt2YXIgcixzLG87cj1EMCh0LG4pLHM9bnVsbCxyJiYocz1qNHQocikpLG89cyx6aWUoZSxuLG8pfWZ1bmN0aW9uIGFhbih0LGUsbil7dmFyIHIscyxvO3I9RDAodCxuKSxzPW51bGwsciYmKHM9ajR0KHIpKSxvPXMsemllKGUsbixvKX1mdW5jdGlvbiBwSSh0LGUsbil7dmFyIHIscztyZXR1cm4gcz0ocj13RSh0LmIsZSkscikscz9FcShtSSh0LHMpLG4pOm51bGx9ZnVuY3Rpb24gSTgodCxlKXt2YXIgbjtyZXR1cm4gbj10LllnKGUpLG4+PTA/dC5fZyhuLCEwLCEwKTpsdyh0LGUsITApfWZ1bmN0aW9uIG9hbih0LGUpe3JldHVybiBMcyhYdCh5ZShRKHQsKHNlKCksRHcpKSkpLFh0KHllKFEoZSxEdykpKSl9ZnVuY3Rpb24gZ3RlKCl7Z3RlPVosZ3llPWF3KGF3KE9SKG5ldyBIcywodUUoKSxQUykpLChmXygpLHdWKSksa2h0KX1mdW5jdGlvbiBjYW4odCxlLG4pe3ZhciByO3JldHVybiByPWlyZSh0LGUsbiksdC5iPW5ldyByeihyLmMubGVuZ3RoKSxONXQodCxyKX1mdW5jdGlvbiB1YW4odCl7aWYodC5iPD0wKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuLS10LmIsdC5hLT10LmMuYyxkZSh0LmEpfWZ1bmN0aW9uIGxhbih0KXt2YXIgZTtpZighdC5hKXRocm93IHJ0KG5ldyB3WHQpO3JldHVybiBlPXQuYSx0LmE9dHModC5hKSxlfWZ1bmN0aW9uIGhhbih0KXtmb3IoOyF0LmE7KWlmKCFuS3QodC5jLG5ldyB6ZSh0KSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gS3godCl7dmFyIGU7cmV0dXJuIEFyKHQpLEV0KHQsMTk4KT8oZT11KHQsMTk4KSxlKTpuZXcgc3R0KHQpfWZ1bmN0aW9uIGZhbih0KXtPJCgpLHUodC5XZSgoY2koKSxLeSkpLDE3NCkuRmMoKFF1KCksdE4pKSx0LlllKGhmdCxudWxsKX1mdW5jdGlvbiBPJCgpe08kPVosTTNlPW5ldyB3WixEM2U9bmV3IG1aLEkzZT1YY24oKGNpKCksaGZ0KSxNM2UsdmIsRDNlKX1mdW5jdGlvbiBOJCgpe04kPVosZF90PW5ldyBHYnQoIkxFQUZfTlVNQkVSIiwwKSxQaHQ9bmV3IEdidCgiTk9ERV9TSVpFIiwxKX1mdW5jdGlvbiBkYW4odCxlLG4pe3QuYT1lLHQuYz1uLHQuYi5hLiRiKCksX2godC5kKSx0LmUuYS5jPVB0KFhuLEllLDEsMCw1LDEpfWZ1bmN0aW9uIEhydCh0KXt0LmE9UHQoVHIsWHIsMjUsdC5iKzEsMTUsMSksdC5jPVB0KFRyLFhyLDI1LHQuYiwxNSwxKSx0LmQ9MH1mdW5jdGlvbiBnYW4odCxlKXt0LmEudWUoZS5kLHQuYik+MCYmKHVlKHQuYyxuZXcgT3Z0KGUuYyxlLmQsdC5kKSksdC5iPWUuZCl9ZnVuY3Rpb24gQW10KHQsZSl7aWYodC5nPT1udWxsfHxlPj10LmkpdGhyb3cgcnQobmV3IFZldChlLHQuaSkpO3JldHVybiB0LmdbZV19ZnVuY3Rpb24gcHRlKHQsZSxuKXtpZihROCh0LG4pLG4hPW51bGwmJiF0LndqKG4pKXRocm93IHJ0KG5ldyBIdHQpO3JldHVybiBufWZ1bmN0aW9uIGJ0ZSh0KXt2YXIgZTtpZih0LkVrKCkpZm9yKGU9dC5pLTE7ZT49MDstLWUpU3QodCxlKTtyZXR1cm4gSnd0KHQpfWZ1bmN0aW9uIHBhbih0KXt2YXIgZSxuO2lmKCF0LmIpcmV0dXJuIG51bGw7Zm9yKG49dC5iO2U9bi5hWzBdOyluPWU7cmV0dXJuIG59ZnVuY3Rpb24gYmFuKHQsZSl7dmFyIG4scjtyZXR1cm4gUlp0KGUpLG49KHI9dC5zbGljZSgwLGUpLE1tdChyLHQpKSxuLmxlbmd0aD1lLG59ZnVuY3Rpb24gRDgodCxlLG4scil7dmFyIHM7cj0oWDMoKSxyfHxtRXQpLHM9dC5zbGljZShlLG4pLFc0dChzLHQsZSxuLC1lLHIpfWZ1bmN0aW9uIG9oKHQsZSxuLHIscyl7cmV0dXJuIGU8MD9sdyh0LG4scik6dShuLDY2KS5OaigpLlBqKHQsdC55aCgpLGUscixzKX1mdW5jdGlvbiB2YW4odCl7cmV0dXJuIEV0KHQsMTcyKT8iIit1KHQsMTcyKS5hOnQ9PW51bGw/bnVsbDokbyh0KX1mdW5jdGlvbiB3YW4odCl7cmV0dXJuIEV0KHQsMTcyKT8iIit1KHQsMTcyKS5hOnQ9PW51bGw/bnVsbDokbyh0KX1mdW5jdGlvbiB2dGUodCxlKXtpZihlLmEpdGhyb3cgcnQobmV3IEdvKHZmZSkpO05zKHQuYSxlKSxlLmE9dCwhdC5qJiYodC5qPWUpfWZ1bmN0aW9uIExtdCh0LGUpe0dldC5jYWxsKHRoaXMsZS5yZCgpLGUucWQoKSYtMTY0NDkpLE9uKHQpLHRoaXMuYT10LHRoaXMuYz1lfWZ1bmN0aW9uIHd0ZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9ZS90LmMuSGQoKS5nYygpfDAsbj1lJXQuYy5IZCgpLmdjKCksV3godCxyLG4pfWZ1bmN0aW9uIFh1KCl7WHU9WixTZD1uZXcgdmV0KGQ2LDApLGNiPW5ldyB2ZXQoTkUsMSksbWY9bmV3IHZldChnNiwyKX1mdW5jdGlvbiBQJCgpe1AkPVosQXV0PW5ldyBCUigiQWxsIiwwKSxfRXQ9bmV3IGRVdCxTRXQ9bmV3IENVdCxBRXQ9bmV3IGdVdH1mdW5jdGlvbiBtdGUoKXttdGU9WixOZ2U9V3IoKFAkKCksY3Qob3QoS0gsMSksYWUsMjk3LDAsW0F1dCxfRXQsU0V0LEFFdF0pKSl9ZnVuY3Rpb24geXRlKCl7eXRlPVosQ2JlPVdyKChLOCgpLGN0KG90KFRiZSwxKSxhZSw0MDUsMCxbX3csRHksSXksajRdKSkpfWZ1bmN0aW9uIHh0ZSgpe3h0ZT1aLF9wZT1XcigodHcoKSxjdChvdChDcGUsMSksYWUsNDA2LDAsW2FPLHNPLEZ1dCxCdXRdKSkpfWZ1bmN0aW9uIGt0ZSgpe2t0ZT1aLEFwZT1XcigobjYoKSxjdChvdChTcGUsMSksYWUsMzIzLDAsW2NPLG9PLHVPLGxPXSkpKX1mdW5jdGlvbiBFdGUoKXtFdGU9WixJcGU9V3IoKHNfKCksY3Qob3QoTXBlLDEpLGFlLDM5NCwwLFtoTyxKSCx0RyxmT10pKSl9ZnVuY3Rpb24gVHRlKCl7VHRlPVosWW1lPVdyKCh1RSgpLGN0KG90KFpDdCwxKSxhZSwzOTMsMCxbdlYsUFMsUE8sRlNdKSkpfWZ1bmN0aW9uIEN0ZSgpe0N0ZT1aLEdiZT1XcigoZHooKSxjdChvdChIYmUsMSksYWUsMzYwLDAsW2FsdCxfRyxTRyx2T10pKSl9ZnVuY3Rpb24gX3RlKCl7X3RlPVosRnllPVdyKChHeigpLGN0KG90KEFfdCwxKSxhZSwzNDAsMCxbUmh0LF9fdCxTX3QsQ190XSkpKX1mdW5jdGlvbiBTdGUoKXtTdGU9WixKYmU9V3IoKE0xKCksY3Qob3QoWmJlLDEpLGFlLDQxMSwwLFtfNixpNyxzNyxvbHRdKSkpfWZ1bmN0aW9uIEF0ZSgpe0F0ZT1aLHF3ZT1Xcigoc3koKSxjdChvdCh1aHQsMSksYWUsMTk3LDAsW2xWLGNodCx0NSxKNF0pKSl9ZnVuY3Rpb24gTHRlKCl7THRlPVosQzRlPVdyKChDbCgpLGN0KG90KFQ0ZSwxKSxhZSwzOTYsMCxbWWwsUEF0LE5BdCxGQXRdKSkpfWZ1bmN0aW9uIE10ZSgpe010ZT1aLGw0ZT1XcigoamwoKSxjdChvdCh1NGUsMSksYWUsMjg1LDAsW1pPLHUwLHdiLFFPXSkpKX1mdW5jdGlvbiBJdGUoKXtJdGU9WixzNGU9V3IoKHEwKCksY3Qob3QocGZ0LDEpLGFlLDIxOCwwLFtnZnQsWE8sQTcsSDZdKSkpfWZ1bmN0aW9uIER0ZSgpe0R0ZT1aLGs0ZT1XcigoQXooKSxjdChvdChPQXQsMSksYWUsMzExLDAsW3dmdCxNQXQsREF0LElBdF0pKSl9ZnVuY3Rpb24gT3RlKCl7T3RlPVoseTRlPVdyKChfbCgpLGN0KG90KHRBLDEpLGFlLDM3NCwwLFtuTixWMixlTixYeV0pKSl9ZnVuY3Rpb24gTnRlKCl7TnRlPVoseXEoKSx2THQ9c3MsUzVlPVRzLHdMdD1uZXcgRDMoc3MpLEE1ZT1uZXcgRDMoVHMpfWZ1bmN0aW9uIGJJKCl7Ykk9WixEVHQ9bmV3IERidChLMCwwKSxGRz1uZXcgRGJ0KCJJTVBST1ZFX1NUUkFJR0hUTkVTUyIsMSl9ZnVuY3Rpb24gbWFuKHQsZSl7cmV0dXJuIGc4KCksdWUodCxuZXcgbGEoZSxkZShlLmUuYy5sZW5ndGgrZS5nLmMubGVuZ3RoKSkpfWZ1bmN0aW9uIHlhbih0LGUpe3JldHVybiBnOCgpLHVlKHQsbmV3IGxhKGUsZGUoZS5lLmMubGVuZ3RoK2UuZy5jLmxlbmd0aCkpKX1mdW5jdGlvbiBNbXQodCxlKXtyZXR1cm4geEkoZSkhPTEwJiZjdChzbChlKSxlLmhtLGUuX19lbGVtZW50VHlwZUlkJCx4SShlKSx0KSx0fWZ1bmN0aW9uIHZ1KHQsZSl7dmFyIG47cmV0dXJuIG49Um8odCxlLDApLG49PS0xPyExOihBZyh0LG4pLCEwKX1mdW5jdGlvbiBQdGUodCxlKXt2YXIgbjtyZXR1cm4gbj11KFV4KHQuZSxlKSwzODcpLG4/KEZ2dChuKSxuLmUpOm51bGx9ZnVuY3Rpb24gTzgodCl7dmFyIGU7cmV0dXJuIEJvKHQpJiYoZT0wLXQsIWlzTmFOKGUpKT9lOlZwKFk4KHQpKX1mdW5jdGlvbiBSbyh0LGUsbil7Zm9yKDtuPHQuYy5sZW5ndGg7KytuKWlmKFBjKGUsdC5jW25dKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBGdGUodCxlLG4pe3ZhciByO3JldHVybiAkcCh0KSxyPW5ldyBUaSxyLmE9ZSx0LmEuTmIobmV3IERHdChyLG4pKSxyLmF9ZnVuY3Rpb24geGFuKHQpe3ZhciBlO3JldHVybiAkcCh0KSxlPVB0KGlhLHZvLDI1LDAsMTUsMSksQjModC5hLG5ldyBQZShlKSksZX1mdW5jdGlvbiBHcnQodCl7dmFyIGUsbjtyZXR1cm4gbj11KEZlKHQuaiwwKSwxMSksZT11KFEobiwoc2UoKSxfaSkpLDExKSxlfWZ1bmN0aW9uIEltdCh0KXt2YXIgZTtpZighc2l0KHQpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIHQuZT0xLGU9dC5kLHQuZD1udWxsLGV9ZnVuY3Rpb24gVnJ0KHQsZSl7dmFyIG47dGhpcy5mPXQsdGhpcy5iPWUsbj11KEpuKHQuYixlKSwyODMpLHRoaXMuYz1uP24uYjpudWxsfWZ1bmN0aW9uIEJ0ZSgpe2xmKCksdGhpcy5iPW5ldyBDcix0aGlzLmY9bmV3IENyLHRoaXMuZz1uZXcgQ3IsdGhpcy5lPW5ldyBDcn1mdW5jdGlvbiBSdGUodCxlKXt0aGlzLmE9UHQobzAsemcsMTAsdC5hLmMubGVuZ3RoLDAsMSksRDEodC5hLHRoaXMuYSksdGhpcy5iPWV9ZnVuY3Rpb24gdkkodCl7dmFyIGU7Zm9yKGU9dC5wKzE7ZTx0LmMuYS5jLmxlbmd0aDsrK2UpLS11KEZlKHQuYy5hLGUpLDEwKS5wfWZ1bmN0aW9uIFVydCh0KXt2YXIgZTtlPXQuQWkoKSxlIT1udWxsJiZ0LmQhPS0xJiZ1KGUsOTIpLk5nKHQpLHQuaSYmdC5pLkZpKCl9ZnVuY3Rpb24gRiQodCl7dWoodGhpcyksdGhpcy5nPXQ/Y3J0KHQsdC4kZCgpKTpudWxsLHRoaXMuZj10LG4kKHRoaXMpLHRoaXMuX2QoKX1mdW5jdGlvbiBGMCh0LGUsbixyLHMsbyxoKXtlaXQuY2FsbCh0aGlzLGUscixzLG8saCksdGhpcy5jPXQsdGhpcy5iPW59ZnVuY3Rpb24gWW0odCxlLG4scixzKXtyZXR1cm4gT24odCksT24oZSksT24obiksT24ociksT24ocyksbmV3IG93dCh0LGUscil9ZnVuY3Rpb24gd0kodCxlKXtpZihlPDApdGhyb3cgcnQobmV3IG1vKHExZStlKSk7cmV0dXJuIEFadCh0LGUrMSksRmUodC5qLGUpfWZ1bmN0aW9uIGp0ZSh0LGUsbixyKXtpZighdCl0aHJvdyBydChuZXcgUG4odl8oZSxjdChvdChYbiwxKSxJZSwxLDUsW24scl0pKSkpfWZ1bmN0aW9uIEIkKHQsZSl7cmV0dXJuIFBjKGUsRmUodC5mLDApKXx8UGMoZSxGZSh0LmYsMSkpfHxQYyhlLEZlKHQuZiwyKSl9ZnVuY3Rpb24ga2FuKHQsZSl7RHgodSh1KHQuZiwzMykuV2UoKGNpKCksVVMpKSw5OCkpJiZrbG4oWm50KHUodC5mLDMzKSksZSl9ZnVuY3Rpb24gbUkodCxlKXt2YXIgbixyO3JldHVybiBuPXUoZSw2NzUpLHI9bi5PaCgpLCFyJiZuLlJoKHI9bmV3IFJWdCh0LGUpKSxyfWZ1bmN0aW9uIEVvKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KGUsNjc3KSxyPW4ucGsoKSwhciYmbi50ayhyPW5ldyBuWnQodCxlKSkscn1mdW5jdGlvbiBpbCh0KXtyZXR1cm4gdC5ifHwodC5iPW5ldyB3WXQodCxobyx0KSwhdC5hJiYodC5hPW5ldyAkTSh0LHQpKSksdC5ifWZ1bmN0aW9uIGpDKCl7akM9WixXdXQ9bmV3IG1ldCgiWFkiLDApLFV1dD1uZXcgbWV0KCJYIiwxKSxLdXQ9bmV3IG1ldCgiWSIsMil9ZnVuY3Rpb24gd3UoKXt3dT1aLGUxPW5ldyB3ZXQoIlRPUCIsMCksdWI9bmV3IHdldChORSwxKSx5Zj1uZXcgd2V0KFh4dCwyKX1mdW5jdGlvbiBCMCgpe0IwPVoseU89bmV3IF9ldChLMCwwKSxVND1uZXcgX2V0KCJUT1AiLDEpLEE2PW5ldyBfZXQoWHh0LDIpfWZ1bmN0aW9uIHlJKCl7eUk9WixkaHQ9bmV3IE5idCgiSU5QVVRfT1JERVIiLDApLGdodD1uZXcgTmJ0KCJQT1JUX0RFR1JFRSIsMSl9ZnVuY3Rpb24gTjgoKXtOOD1aLFo4dD1ydSh1bCx1bCw1MjQyODcpLHhnZT1ydSgwLDAsSUQpLEo4dD1PcnQoMSksT3J0KDIpLHRFdD1PcnQoMCl9ZnVuY3Rpb24gRG10KHQsZSxuKXt0LmEuYz1QdChYbixJZSwxLDAsNSwxKSxmM24odCxlLG4pLHQuYS5jLmxlbmd0aD09MHx8R3duKHQsZSl9ZnVuY3Rpb24gUiQodCl7dmFyIGUsbjtyZXR1cm4gbj10Lmxlbmd0aCxlPVB0KG1oLHZkLDI1LG4sMTUsMSksell0KHQsMCxuLGUsMCksZX1mdW5jdGlvbiBPbXQodCl7dmFyIGU7cmV0dXJuIHQuZGgoKXx8KGU9Wm4odC5UZygpKS10LkFoKCksdC5waCgpLmJrKGUpKSx0LlBnKCl9ZnVuY3Rpb24gTm10KHQpe3ZhciBlO3JldHVybiBlPXMyKEluKHQsMzIpKSxlPT1udWxsJiYoaXUodCksZT1zMihJbih0LDMyKSkpLGV9ZnVuY3Rpb24gV3J0KHQsZSl7dmFyIG47cmV0dXJuIG49VmkodC5kLGUpLG4+PTA/anoodCxuLCEwLCEwKTpsdyh0LGUsITApfWZ1bmN0aW9uIFBtdCh0LGUpe3E5KCk7dmFyIG4scjtyZXR1cm4gbj1IeCh0KSxyPUh4KGUpLCEhbiYmISFyJiYhUWllKG4uayxyLmspfWZ1bmN0aW9uIEVhbih0LGUpe3l1KHQsZT09bnVsbHx8RWooKE9uKGUpLGUpKXx8aXNOYU4oKE9uKGUpLGUpKT8wOihPbihlKSxlKSl9ZnVuY3Rpb24gVGFuKHQsZSl7eHUodCxlPT1udWxsfHxFaigoT24oZSksZSkpfHxpc05hTigoT24oZSksZSkpPzA6KE9uKGUpLGUpKX1mdW5jdGlvbiBDYW4odCxlKXtRdih0LGU9PW51bGx8fEVqKChPbihlKSxlKSl8fGlzTmFOKChPbihlKSxlKSk/MDooT24oZSksZSkpfWZ1bmN0aW9uIF9hbih0LGUpe1h2KHQsZT09bnVsbHx8RWooKE9uKGUpLGUpKXx8aXNOYU4oKE9uKGUpLGUpKT8wOihPbihlKSxlKSl9ZnVuY3Rpb24gJHRlKHQpeyh0aGlzLnE/dGhpcy5xOih2bigpLHZuKCksYTApKS5BYyh0LnE/dC5xOih2bigpLHZuKCksYTApKX1mdW5jdGlvbiBTYW4odCxlKXtyZXR1cm4gRXQoZSw5OSkmJnUoZSwxOCkuQmImWWE/bmV3IFVldChlLHQpOm5ldyBVOChlLHQpfWZ1bmN0aW9uIEFhbih0LGUpe3JldHVybiBFdChlLDk5KSYmdShlLDE4KS5CYiZZYT9uZXcgVWV0KGUsdCk6bmV3IFU4KGUsdCl9ZnVuY3Rpb24genRlKHQsZSl7ZTd0PW5ldyBncCxMcGU9ZSxjUz10LHUoY1MuYiw2NSkseG10KGNTLGU3dCxudWxsKSxObGUoY1MpfWZ1bmN0aW9uIEtydCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9dC5nW2VdLGZDKHQsZSx0Lm9pKGUsbikpLHQuZ2koZSxuLHIpLHQuY2koKSxyfWZ1bmN0aW9uIGokKHQsZSl7dmFyIG47cmV0dXJuIG49dC5YYyhlKSxuPj0wPyh0LiRjKG4pLCEwKTohMX1mdW5jdGlvbiBZcnQodCl7dmFyIGU7cmV0dXJuIHQuZCE9dC5yJiYoZT1MaCh0KSx0LmU9ISFlJiZlLkNqKCk9PWswZSx0LmQ9ZSksdC5lfWZ1bmN0aW9uIFhydCh0LGUpe3ZhciBuO2ZvcihBcih0KSxBcihlKSxuPSExO2UuT2IoKTspbj1ufHQuRmMoZS5QYigpKTtyZXR1cm4gbn1mdW5jdGlvbiBXdih0LGUpe3ZhciBuO3JldHVybiBuPXUoSm4odC5lLGUpLDM4Nyksbj8oT1V0KHQsbiksbi5lKTpudWxsfWZ1bmN0aW9uIHF0ZSh0KXt2YXIgZSxuO3JldHVybiBlPXQvNjB8MCxuPXQlNjAsbj09MD8iIitlOiIiK2UrIjoiKygiIituKX1mdW5jdGlvbiBXbyh0LGUpe3ZhciBuLHI7cmV0dXJuIGQyKHQpLHI9bmV3IHZtdChlLHQuYSksbj1uZXcgc0t0KHIpLG5ldyBUbih0LG4pfWZ1bmN0aW9uIFhtKHQsZSl7dmFyIG49dC5hW2VdLHI9KHBpdCgpLEV1dClbdHlwZW9mIG5dO3JldHVybiByP3Iobik6anl0KHR5cGVvZiBuKX1mdW5jdGlvbiBMYW4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiB2aTtjYXNlIDE6cmV0dXJuLTE7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gTWFuKHQpe3JldHVybiBuNHQodCwoTjgoKSx0RXQpKTwwPy1VWGUoWTgodCkpOnQubCt0Lm0qZjYrdC5oKngyfWZ1bmN0aW9uIHhJKHQpe3JldHVybiB0Ll9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9PW51bGw/MTA6dC5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkfWZ1bmN0aW9uIFFydCh0KXt2YXIgZTtyZXR1cm4gZT10LmIuYy5sZW5ndGg9PTA/bnVsbDpGZSh0LmIsMCksZSE9bnVsbCYmb2l0KHQsMCksZX1mdW5jdGlvbiBIdGUodCxlKXtmb3IoO2VbMF08dC5sZW5ndGgmJmNkKGAgCVxyCmAsRXUoYmEodCxlWzBdKSkpPj0wOykrK2VbMF19ZnVuY3Rpb24ga0kodCxlKXt0aGlzLmU9ZSx0aGlzLmE9Rm5lKHQpLHRoaXMuYTw1ND90aGlzLmY9VnYodCk6dGhpcy5jPUtJKHQpfWZ1bmN0aW9uIEd0ZSh0LGUsbixyKXtnaSgpLHZ2LmNhbGwodGhpcywyNiksdGhpcy5jPXQsdGhpcy5hPWUsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gWGQodCxlLG4pe3ZhciByLHM7Zm9yKHI9MTAscz0wO3M8bi0xO3MrKyllPHImJih0LmErPSIwIikscio9MTA7dC5hKz1lfWZ1bmN0aW9uIElhbih0LGUpe3ZhciBuO2ZvcihuPTA7dC5lIT10LmkuZ2MoKTspQ3RuKGUsZHIodCksZGUobikpLG4hPXZpJiYrK259ZnVuY3Rpb24gRm10KHQsZSl7dmFyIG47Zm9yKCsrdC5kLCsrdC5jW2VdLG49ZSsxO248dC5hLmxlbmd0aDspKyt0LmFbbl0sbis9biYtbn1mdW5jdGlvbiBEYW4odCxlKXt2YXIgbixyLHM7cz1lLmMuaSxuPXUoSm4odC5mLHMpLDU3KSxyPW4uZC5jLW4uZS5jLGF5dChlLmEsciwwKX1mdW5jdGlvbiBFSSh0KXt2YXIgZSxuO3JldHVybiBlPXQrMTI4LG49KFlLdCgpLG5FdClbZV0sIW4mJihuPW5FdFtlXT1uZXcgSXR0KHQpKSxufWZ1bmN0aW9uIFVyKHQsZSl7dmFyIG47cmV0dXJuIE9uKGUpLG49dFsiOiIrZV0sQmFuKCEhbixjdChvdChYbiwxKSxJZSwxLDUsW2VdKSksbn1mdW5jdGlvbiBPYW4odCl7dmFyIGUsbjtpZih0LmIpe249bnVsbDtkbyBlPXQuYix0LmI9bnVsbCxuPXphZShlLG4pO3doaWxlKHQuYik7dC5iPW59fWZ1bmN0aW9uIE5hbih0KXt2YXIgZSxuO2lmKHQuYSl7bj1udWxsO2RvIGU9dC5hLHQuYT1udWxsLG49emFlKGUsbik7d2hpbGUodC5hKTt0LmE9bn19ZnVuY3Rpb24gVnRlKHQpe3ZhciBlO2ZvcigrK3QuYSxlPXQuYy5hLmxlbmd0aDt0LmE8ZTsrK3QuYSlpZih0LmMuYlt0LmFdKXJldHVybn1mdW5jdGlvbiBQYW4odCxlKXt2YXIgbixyO2ZvcihyPWUuYyxuPXIrMTtuPD1lLmY7bisrKXQuYVtuXT50LmFbcl0mJihyPW4pO3JldHVybiByfWZ1bmN0aW9uIEZhbih0LGUpe3ZhciBuO3JldHVybiBuPXJ3KHQuZS5jLGUuZS5jKSxuPT0wP0xzKHQuZS5kLGUuZS5kKTpufWZ1bmN0aW9uIEozKHQsZSl7cmV0dXJuIGUuZT09MHx8dC5lPT0wP1FFOihiRSgpLFpzdCh0LGUpKX1mdW5jdGlvbiBCYW4odCxlKXtpZighdCl0aHJvdyBydChuZXcgUG4oJDJuKCJFbnVtIGNvbnN0YW50IHVuZGVmaW5lZDogJXMiLGUpKSl9ZnVuY3Rpb24gJEMoKXskQz1aLEFiZT1uZXcgZ2csTGJlPW5ldyBrMyxfYmU9bmV3IFFLLFNiZT1uZXcgJGIsTWJlPW5ldyBaS31mdW5jdGlvbiAkJCgpeyQkPVosUEV0PW5ldyBfYnQoIkJZX1NJWkUiLDApLER1dD1uZXcgX2J0KCJCWV9TSVpFX0FORF9TSEFQRSIsMSl9ZnVuY3Rpb24geiQoKXt6JD1aLEh1dD1uZXcgU2J0KCJFQURFUyIsMCksckc9bmV3IFNidCgiRlJVQ0hURVJNQU5fUkVJTkdPTEQiLDEpfWZ1bmN0aW9uIFRJKCl7VEk9WixORz1uZXcgSWJ0KCJSRUFESU5HX0RJUkVDVElPTiIsMCksTFR0PW5ldyBJYnQoIlJPVEFUSU9OIiwxKX1mdW5jdGlvbiBVdGUoKXtVdGU9WixmMmU9V3IoKHYyKCksY3Qob3QoQVR0LDEpLGFlLDMzNSwwLFttbHQsU1R0LHlsdCxwUyxnU10pKSl9ZnVuY3Rpb24gV3RlKCl7V3RlPVosSHdlPVdyKChhXygpLGN0KG90KExDdCwxKSxhZSwzMTUsMCxbQUN0LGxodCxoaHQsQVMsTFNdKSkpfWZ1bmN0aW9uIEt0ZSgpe0t0ZT1aLGUyZT1XcigoZzQoKSxjdChvdCh0MmUsMSksYWUsMzYzLDAsW0xHLElHLERHLE1HLEFHXSkpKX1mdW5jdGlvbiBZdGUoKXtZdGU9WixDMmU9V3IoKGhoKCksY3Qob3Qoczl0LDEpLGFlLDE2MywwLFtDTyx5UyxmYix4UyxGeV0pKSl9ZnVuY3Rpb24gWHRlKCl7WHRlPVosbDNlPVdyKChpRCgpLGN0KG90KEpfdCwxKSxhZSwzMTYsMCxbWF90LFZodCxaX3QsVWh0LFFfdF0pKSl9ZnVuY3Rpb24gUXRlKCl7UXRlPVosTzNlPVdyKChYZigpLGN0KG90KFFnLDEpLGFlLDE3NSwwLFtxbixKcyxJZCwkMixYZ10pKSl9ZnVuY3Rpb24gWnRlKCl7WnRlPVosaTNlPVdyKCh5RSgpLGN0KG90KHIzZSwxKSxhZSwzNTUsMCxbbjUsUjYscVMselMsSFNdKSkpfWZ1bmN0aW9uIEp0ZSgpe0p0ZT1aLHliZT1XcigoV2EoKSxjdChvdChDN3QsMSksYWUsMzU2LDAsW0FkLGxiLG91LHFjLElvXSkpKX1mdW5jdGlvbiB0ZWUoKXt0ZWU9WixyNGU9V3IoKGFvKCksY3Qob3QoV1MsMSksYWUsMTAzLDAsW2MwLGtmLGpoLFEwLFowXSkpKX1mdW5jdGlvbiBlZWUoKXtlZWU9WixmNGU9V3IoKGM0KCksY3Qob3QoUVMsMSksYWUsMjQ5LDAsW21iLEpPLENBdCxYUyxfQXRdKSkpfWZ1bmN0aW9uIG5lZSgpe25lZT1aLHA0ZT1XcigoYmUoKSxjdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pKSl9ZnVuY3Rpb24gWnJ0KHQsZSl7dmFyIG47cmV0dXJuIG49dShKbih0LmEsZSksMTM0KSxufHwobj1uZXcgeGEsa2kodC5hLGUsbikpLG59ZnVuY3Rpb24gcmVlKHQpe3ZhciBlO3JldHVybiBlPXUoUSh0LChzZSgpLEx3KSksMzA1KSxlP2UuYT09dDohMX1mdW5jdGlvbiBpZWUodCl7dmFyIGU7cmV0dXJuIGU9dShRKHQsKHNlKCksTHcpKSwzMDUpLGU/ZS5pPT10OiExfWZ1bmN0aW9uIHNlZSh0LGUpe3JldHVybiBPbihlKSxud3QodCksdC5kLk9iKCk/KGUudGQodC5kLlBiKCkpLCEwKTohMX1mdW5jdGlvbiBxJCh0KXtyZXR1cm4geWModCx2aSk+MD92aTp5Yyh0LF9hKTwwP19hOlNyKHQpfWZ1bmN0aW9uIFFtKHQpe3JldHVybiB0PDM/KEJsKHQsSmhlKSx0KzEpOnQ8QV8/cHModC8uNzUrMSk6dml9ZnVuY3Rpb24geW4odCxlKXt2YXIgbjtyZXR1cm4gbj0odC5pPT1udWxsJiZwZCh0KSx0LmkpLGU+PTAmJmU8bi5sZW5ndGg/bltlXTpudWxsfWZ1bmN0aW9uIFdmKHQsZSxuKXt2YXIgcjtpZihlPT1udWxsKXRocm93IHJ0KG5ldyBMOSk7cmV0dXJuIHI9RDAodCxlKSxzc24odCxlLG4pLHJ9ZnVuY3Rpb24gYWVlKHQpe3JldHVybiB0LmE+PS0uMDEmJnQuYTw9UDEmJih0LmE9MCksdC5iPj0tLjAxJiZ0LmI8PVAxJiYodC5iPTApLHR9ZnVuY3Rpb24gb2VlKHQsZSl7cmV0dXJuIGU9PSh2bnQoKSx2bnQoKSxJZ2UpP3QudG9Mb2NhbGVMb3dlckNhc2UoKTp0LnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gQm10KHQpe3JldHVybih0LmkmMj8iaW50ZXJmYWNlICI6dC5pJjE/IiI6ImNsYXNzICIpKyhMMCh0KSx0Lm8pfWZ1bmN0aW9uIFRvKHQpe3ZhciBlLG47bj0oZT1uZXcgV3R0LGUpLE1yKCghdC5xJiYodC5xPW5ldyBoZShWaCx0LDExLDEwKSksdC5xKSxuKX1mdW5jdGlvbiBSYW4odCxlKXt2YXIgbjtyZXR1cm4gbj1lPjA/ZS0xOmUsckh0KFpLZShEZWUoUHZ0KG5ldyBZayxuKSx0Lm4pLHQuaiksdC5rKX1mdW5jdGlvbiBqYW4odCxlLG4scil7dmFyIHM7dC5qPS0xLGE1dCh0LCQ0dCh0LGUsbiksKHRvKCkscz11KGUsNjYpLk1qKCkscy5PayhyKSkpfWZ1bmN0aW9uIGNlZSh0KXt0aGlzLmc9dCx0aGlzLmY9bmV3IGxlLHRoaXMuYT1iLk1hdGgubWluKHRoaXMuZy5jLmMsdGhpcy5nLmQuYyl9ZnVuY3Rpb24gdWVlKHQpe3RoaXMuYj1uZXcgbGUsdGhpcy5hPW5ldyBsZSx0aGlzLmM9bmV3IGxlLHRoaXMuZD1uZXcgbGUsdGhpcy5lPXR9ZnVuY3Rpb24gbGVlKHQsZSl7dGhpcy5hPW5ldyBDcix0aGlzLmU9bmV3IENyLHRoaXMuYj0oWUMoKSx1ViksdGhpcy5jPXQsdGhpcy5iPWV9ZnVuY3Rpb24gaGVlKHQsZSxuKXt4ai5jYWxsKHRoaXMpLFJtdCh0aGlzKSx0aGlzLmE9dCx0aGlzLmM9bix0aGlzLmI9ZS5kLHRoaXMuZj1lLmV9ZnVuY3Rpb24gZmVlKHQpe3RoaXMuZD10LHRoaXMuYz10LmMudmMoKS5LYygpLHRoaXMuYj1udWxsLHRoaXMuYT1udWxsLHRoaXMuZT0oZFIoKSxtdXQpfWZ1bmN0aW9uIEt2KHQpe2lmKHQ8MCl0aHJvdyBydChuZXcgUG4oIklsbGVnYWwgQ2FwYWNpdHk6ICIrdCkpO3RoaXMuZz10aGlzLnJpKHQpfWZ1bmN0aW9uICRhbih0LGUpe2lmKDA+dHx8dD5lKXRocm93IHJ0KG5ldyBRcHQoImZyb21JbmRleDogMCwgdG9JbmRleDogIit0K2p4dCtlKSl9ZnVuY3Rpb24gemFuKHQpe3ZhciBlO2lmKHQuYT09dC5iLmEpdGhyb3cgcnQobmV3IGxjKTtyZXR1cm4gZT10LmEsdC5jPWUsdC5hPXQuYS5lLGV9ZnVuY3Rpb24gSCQodCl7dmFyIGU7UG0oISF0LmMpLGU9dC5jLmEsY2godC5kLHQuYyksdC5iPT10LmM/dC5iPWU6LS10LmEsdC5jPW51bGx9ZnVuY3Rpb24gRyQodCxlKXt2YXIgbjtyZXR1cm4gZDIodCksbj1uZXcgTlh0KHQsdC5hLnJkKCksdC5hLnFkKCl8NCxlKSxuZXcgVG4odCxuKX1mdW5jdGlvbiBxYW4odCxlKXt2YXIgbixyO3JldHVybiBuPXUobnkodC5kLGUpLDE0KSxuPyhyPWUsdC5lLnBjKHIsbikpOm51bGx9ZnVuY3Rpb24gViQodCxlKXt2YXIgbixyO2ZvcihyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksNzApLEp0KG4sKHNlKCksRDYpLGUpfWZ1bmN0aW9uIEhhbih0KXt2YXIgZTtyZXR1cm4gZT1YdCh5ZShRKHQsKFRlKCksVWcpKSkpLGU8MCYmKGU9MCxKdCh0LFVnLGUpKSxlfWZ1bmN0aW9uIEdhbih0LGUsbil7dmFyIHI7cj1iLk1hdGgubWF4KDAsdC5iLzItLjUpLGNfKG4sciwxKSx1ZShlLG5ldyBSR3QobixyKSl9ZnVuY3Rpb24gVmFuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmEuZVt1KGUuYSwxMCkucF0tdC5hLmVbdShuLmEsMTApLnBdLHBzKEtNKHIpKX1mdW5jdGlvbiBkZWUodCxlLG4scixzLG8pe3ZhciBoO2g9TnJ0KHIpLERhKGgscyksc2EoaCxvKSxsbih0LmEscixuZXcgVGooaCxlLG4uZikpfWZ1bmN0aW9uIGdlZSh0LGUpe3ZhciBuO2lmKG49Z0QodC5UZygpLGUpLCFuKXRocm93IHJ0KG5ldyBQbihhYitlK0ZjdCkpO3JldHVybiBufWZ1bmN0aW9uIFptKHQsZSl7dmFyIG47Zm9yKG49dDt0cyhuKTspaWYobj10cyhuKSxuPT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFVhbih0LGUpe3ZhciBuLHIscztmb3Iocj1lLmEuY2QoKSxuPXUoZS5hLmRkKCksMTQpLmdjKCkscz0wO3M8bjtzKyspdC50ZChyKX1mdW5jdGlvbiBtdSh0LGUpe3ZhciBuLHIscyxvO2ZvcihPbihlKSxyPXQuYyxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlLnRkKG4pfWZ1bmN0aW9uIGNoKHQsZSl7dmFyIG47cmV0dXJuIG49ZS5jLGUuYS5iPWUuYixlLmIuYT1lLmEsZS5hPWUuYj1udWxsLGUuYz1udWxsLC0tdC5iLG59ZnVuY3Rpb24gV2FuKHQsZSl7cmV0dXJuIGUmJnQuYltlLmddPT1lPyhKaSh0LmIsZS5nLG51bGwpLC0tdC5jLCEwKTohMX1mdW5jdGlvbiBwZWUodCxlKXtyZXR1cm4hIUdDKHQsZSxTcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSl9ZnVuY3Rpb24gS2FuKHQsZSl7RHgodShRKHUodC5lLDEwKSwoVGUoKSxvcykpLDk4KSkmJih2bigpLFhzKHUodC5lLDEwKS5qLGUpKX1mdW5jdGlvbiBSbXQodCl7dC5iPShYdSgpLGNiKSx0LmY9KHd1KCksdWIpLHQuZD0oQmwoMixteSksbmV3IFljKDIpKSx0LmU9bmV3IFRhfWZ1bmN0aW9uIEtmKCl7S2Y9WixzYz1uZXcgYmV0KCJCRUdJTiIsMCksdHU9bmV3IGJldChORSwxKSxhYz1uZXcgYmV0KCJFTkQiLDIpfWZ1bmN0aW9uIEExKCl7QTE9WixfNz1uZXcgemV0KE5FLDApLFl5PW5ldyB6ZXQoIkhFQUQiLDEpLFM3PW5ldyB6ZXQoIlRBSUwiLDIpfWZ1bmN0aW9uIFlhbigpe3JldHVybiB2RSgpLGN0KG90KGVVLDEpLGFlLDIzNywwLFtrZnQsSlYsdFUsWlYseGZ0LFFWLFhWLHlmdF0pfWZ1bmN0aW9uIFhhbigpe3JldHVybiBqZygpLGN0KG90KE4zZSwxKSxhZSwyNzcsMCxbbVN0LEFhLGdjLFQ3LERvLGNzLGo2LHExXSl9ZnVuY3Rpb24gUWFuKCl7cmV0dXJuIGZxKCksY3Qob3QoeVR0LDEpLGFlLDI3MCwwLFtsbHQsZGx0LHVsdCxibHQsZmx0LGhsdCxwbHQsZ2x0XSl9ZnVuY3Rpb24gWmFuKCl7cmV0dXJuIHc0KCksY3Qob3QoTkN0LDEpLGFlLDI2MCwwLFtoVixNTyxJTyxJQ3QsREN0LE1DdCxPQ3QsZlZdKX1mdW5jdGlvbiBiZWUoKXtiZWU9WixkNGU9V3IoKG9hKCksY3Qob3QoU0F0LDEpLGFlLDk4LDAsW3liLEgxLEw3LEcyLGgwLFZjXSkpKX1mdW5jdGlvbiB2ZWUoKXt2ZWU9WixRSD0oS2YoKSxjdChvdChNeSwxKSxhZSwyMzIsMCxbc2MsdHUsYWNdKSkubGVuZ3RoLE51dD1RSH1mdW5jdGlvbiBVJCh0KXt0aGlzLmI9KEFyKHQpLG5ldyBQdSh0KSksdGhpcy5hPW5ldyBsZSx0aGlzLmQ9bmV3IGxlLHRoaXMuZT1uZXcgVGF9ZnVuY3Rpb24gSmFuKHQpe3ZhciBlO3JldHVybiBlPWIuTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksZT4wJiYodC5hLz1lLHQuYi89ZSksdH1mdW5jdGlvbiBGbCh0KXt2YXIgZTtyZXR1cm4gdC53P3QudzooZT1laW4odCksZSYmIWUua2goKSYmKHQudz1lKSxlKX1mdW5jdGlvbiB0b24odCl7dmFyIGU7cmV0dXJuIHQ9PW51bGw/bnVsbDooZT11KHQsMTkwKSxlMG4oZSxlLmxlbmd0aCkpfWZ1bmN0aW9uIFN0KHQsZSl7aWYodC5nPT1udWxsfHxlPj10LmkpdGhyb3cgcnQobmV3IFZldChlLHQuaSkpO3JldHVybiB0LmxpKGUsdC5nW2VdKX1mdW5jdGlvbiBlb24odCl7dmFyIGUsbjtmb3IoZT10LmEuZC5qLG49dC5jLmQuajtlIT1uOylwZih0LmIsZSksZT1reihlKTtwZih0LmIsZSl9ZnVuY3Rpb24gbm9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0LmMubGVuZ3RoO2UrKykoQW4oZSx0LmMubGVuZ3RoKSx1KHQuY1tlXSwxMSkpLnA9ZX1mdW5jdGlvbiByb24odCxlLG4pe3ZhciByLHMsbztmb3Iocz1lW25dLHI9MDtyPHMubGVuZ3RoO3IrKylvPXNbcl0sdC5lW28uYy5wXVtvLnBdPXJ9ZnVuY3Rpb24gSnJ0KHQsZSl7dmFyIG4scixzLG87Zm9yKHI9dC5kLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLHgxKHQuZyxuKS5hPWV9ZnVuY3Rpb24gSm0odCxlKXt2YXIgbixyO2ZvcihyPWVpKHQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLExpKG4sZSk7cmV0dXJuIHR9ZnVuY3Rpb24gaW9uKHQsZSl7dmFyIG47cmV0dXJuIG49bmEobmModShKbih0LmcsZSksOCkpLGwydCh1KEpuKHQuZixlKSw0NjApLmIpKSxufWZ1bmN0aW9uIFl2KHQpe3ZhciBlO3JldHVybiBUcnQodC5lLHQpLFFuKHQuYiksdC5jPXQuYSxlPXUodC5hLlBiKCksNDIpLHQuYj1neXQodCksZX1mdW5jdGlvbiBzMih0KXt2YXIgZTtyZXR1cm4gbUModD09bnVsbHx8QXJyYXkuaXNBcnJheSh0KSYmKGU9eEkodCksIShlPj0xNCYmZTw9MTYpKSksdH1mdW5jdGlvbiB3ZWUodCxlLG4pe3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkocixhcmd1bWVudHMpfTtyZXR1cm4gZS5hcHBseShyLG4pLHJ9ZnVuY3Rpb24gbWVlKHQsZSxuKXt2YXIgcixzO3I9ZTtkbyBzPVh0KHQucFtyLnBdKStuLHQucFtyLnBdPXMscj10LmFbci5wXTt3aGlsZShyIT1lKX1mdW5jdGlvbiBQOCh0LGUpe3ZhciBuLHI7cj10LmEsbj1GdW4odCxlLG51bGwpLHIhPWUmJiF0LmUmJihuPV9FKHQsZSxuKSksbiYmbi5GaSgpfWZ1bmN0aW9uIGptdCh0LGUpe3JldHVybiB5MSgpLGdmKGViKSxiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSl9ZnVuY3Rpb24gJG10KHQsZSl7cmV0dXJuIHkxKCksZ2YoZWIpLGIuTWF0aC5hYnModC1lKTw9ZWJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBzb24odCxlKXtyZXR1cm4gWnAoKSxkdSh0LmIuYy5sZW5ndGgtdC5lLmMubGVuZ3RoLGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGgpfWZ1bmN0aW9uIHQ0KHQsZSl7cmV0dXJuIHJZZShIQyh0LGUsU3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSkpKX1mdW5jdGlvbiB5ZWUoKXt5ZWU9WixQYmU9V3IoKEduKCksY3Qob3QoZWx0LDEpLGFlLDI2NywwLFtEcyxacyx4cyxIYyxTbCxqMV0pKSl9ZnVuY3Rpb24geGVlKCl7eGVlPVoscTNlPVdyKChjeSgpLGN0KG90KG5mdCwxKSxhZSwyOTEsMCxbZWZ0LFZPLEdPLHRmdCxxTyxIT10pKSl9ZnVuY3Rpb24ga2VlKCl7a2VlPVosRjNlPVdyKChRZCgpLGN0KG90KGtTdCwxKSxhZSwyNDgsMCxbWmh0LCRPLHpPLEZWLE5WLFBWXSkpKX1mdW5jdGlvbiBFZWUoKXtFZWU9WixjMmU9V3IoKGk2KCksY3Qob3QoYzcsMSksYWUsMjI3LDAsW283LGRTLGE3LE95LEg0LHE0XSkpKX1mdW5jdGlvbiBUZWUoKXtUZWU9WixtMmU9V3IoKGdFKCksY3Qob3QoR1R0LDEpLGFlLDI3NSwwLFtiUywkVHQsSFR0LHFUdCx6VHQsalR0XSkpKX1mdW5jdGlvbiBDZWUoKXtDZWU9Wix3MmU9V3IoKG5EKCksY3Qob3QoUlR0LDEpLGFlLDI3NCwwLFtCRyxQVHQsQlR0LE5UdCxGVHQsU2x0XSkpKX1mdW5jdGlvbiBfZWUoKXtfZWU9Wiwkd2U9V3IoKFp6KCksY3Qob3QoQ0N0LDEpLGFlLDMxMywwLFthaHQsRUN0LHNodCxrQ3QsVEN0LGNWXSkpKX1mdW5jdGlvbiBTZWUoKXtTZWU9WixiMmU9V3IoKG5xKCksY3Qob3QoSVR0LDEpLGFlLDI3NiwwLFtFbHQsa2x0LENsdCxUbHQsX2x0LFBHXSkpKX1mdW5jdGlvbiBBZWUoKXtBZWU9WixRbWU9V3IoKGZfKCksY3Qob3QoWG1lLDEpLGFlLDMyNywwLFt3VixraHQsVGh0LEVodCxDaHQseGh0XSkpKX1mdW5jdGlvbiBMZWUoKXtMZWU9WixnNGU9V3IoKFF1KCksY3Qob3QoR1YsMSksYWUsMjczLDAsW3hiLHRnLHROLEpTLFpTLEc2XSkpKX1mdW5jdGlvbiBNZWUoKXtNZWU9WixhNGU9V3IoKHRxKCksY3Qob3Qod0F0LDEpLGFlLDMxMiwwLFtiZnQscEF0LHZBdCxkQXQsYkF0LGdBdF0pKSl9ZnVuY3Rpb24gYW9uKCl7cmV0dXJuIGZ5KCksY3Qob3QobG8sMSksYWUsOTMsMCxbRWYsSjAsVGYsX2YsbDAsemgsVWwsQ2YsJGhdKX1mdW5jdGlvbiBXJCh0LGUpe3ZhciBuO249dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDAsbix0LmEpKX1mdW5jdGlvbiBLJCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDEsbix0LmIpKX1mdW5jdGlvbiBGOCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDMsbix0LmIpKX1mdW5jdGlvbiBYdih0LGUpe3ZhciBuO249dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDMsbix0LmYpKX1mdW5jdGlvbiBRdih0LGUpe3ZhciBuO249dC5nLHQuZz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDQsbix0LmcpKX1mdW5jdGlvbiB5dSh0LGUpe3ZhciBuO249dC5pLHQuaT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDUsbix0LmkpKX1mdW5jdGlvbiB4dSh0LGUpe3ZhciBuO249dC5qLHQuaj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDYsbix0LmopKX1mdW5jdGlvbiBCOCh0LGUpe3ZhciBuO249dC5qLHQuaj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDEsbix0LmopKX1mdW5jdGlvbiBSOCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDQsbix0LmMpKX1mdW5jdGlvbiBqOCh0LGUpe3ZhciBuO249dC5rLHQuaz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDIsbix0LmspKX1mdW5jdGlvbiB0aXQodCxlKXt2YXIgbjtuPXQuZCx0LmQ9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgU3J0KHQsMixuLHQuZCkpfWZ1bmN0aW9uIElnKHQsZSl7dmFyIG47bj10LnMsdC5zPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFNydCh0LDQsbix0LnMpKX1mdW5jdGlvbiB0eSh0LGUpe3ZhciBuO249dC50LHQudD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBTcnQodCw1LG4sdC50KSl9ZnVuY3Rpb24gJDgodCxlKXt2YXIgbjtuPXQuRix0LkY9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDUsbixlKSl9ZnVuY3Rpb24gQ0kodCxlKXt2YXIgbjtyZXR1cm4gbj11KEpuKChOUigpLG5VKSx0KSw1NSksbj9uLnhqKGUpOlB0KFhuLEllLDEsZSw1LDEpfWZ1bmN0aW9uIFIwKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lIGluIHQuYSxuJiYocj1EMCh0LGUpLmhlKCkscik/ci5hOm51bGx9ZnVuY3Rpb24gb29uKHQsZSl7dmFyIG4scixzO3JldHVybiBuPShyPShUdigpLHM9bmV3IFlULHMpLGUmJkE1dChyLGUpLHIpLFltdChuLHQpLG59ZnVuY3Rpb24gSWVlKHQsZSxuKXtpZihROCh0LG4pLCF0LkJrKCkmJm4hPW51bGwmJiF0LndqKG4pKXRocm93IHJ0KG5ldyBIdHQpO3JldHVybiBufWZ1bmN0aW9uIERlZSh0LGUpe3JldHVybiB0Lm49ZSx0Lm4/KHQuZj1uZXcgbGUsdC5lPW5ldyBsZSk6KHQuZj1udWxsLHQuZT1udWxsKSx0fWZ1bmN0aW9uIGpyKHQsZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1VbnQodCxlKSxOZWUobixoKSxoLmk9cz84OjAsaC5mPXIsaC5lPXMsaC5nPW8saH1mdW5jdGlvbiB6bXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLms9cix0aGlzLmY9cyx0aGlzLm89LTEsdGhpcy5wPTEsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gcW10KHQsZSxuLHIscyl7dGhpcy5kPWUsdGhpcy5rPXIsdGhpcy5mPXMsdGhpcy5vPS0xLHRoaXMucD0yLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIEhtdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9Nix0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBHbXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLms9cix0aGlzLmY9cyx0aGlzLm89LTEsdGhpcy5wPTcsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gVm10KHQsZSxuLHIscyl7dGhpcy5kPWUsdGhpcy5qPXIsdGhpcy5lPXMsdGhpcy5vPS0xLHRoaXMucD00LHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIE9lZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sdnRlKHQuYSxuKTtyZXR1cm4gdH1mdW5jdGlvbiBMMSh0KXt2YXIgZSxuLHIscztmb3Iobj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLEFyKGUpO3JldHVybiBuZXcgSlZ0KHQpfWZ1bmN0aW9uIGNvbih0KXt2YXIgZT0vZnVuY3Rpb24oPzpccysoW1x3JF0rKSk/XHMqXCgvLG49ZS5leGVjKHQpO3JldHVybiBuJiZuWzFdfHxSYXR9ZnVuY3Rpb24gTmVlKHQsZSl7aWYodCl7ZS5uPXQ7dmFyIG49ZHJuKGUpO2lmKCFuKXskSFt0XT1bZV07cmV0dXJufW4uZ209ZX19ZnVuY3Rpb24gdW9uKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQubGVuZ3RoLHI9Yi5NYXRoLm1pbihuLHMpLFk0dCh0LDAsZSwwLHIsITApLGV9ZnVuY3Rpb24gUGVlKHQsZSxuKXt2YXIgcixzO2ZvcihzPWUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksNzkpLE5zKHQsdShuLktiKHIpLDMzKSl9ZnVuY3Rpb24gbG9uKCl7akh0KCk7Zm9yKHZhciB0PWR1dCxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKX1mdW5jdGlvbiB6Qyh0LGUpe3ZhciBuLHIscyxvO2ZvcihyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10saHModCxuLHQuYy5iLHQuYyl9ZnVuY3Rpb24gWSQodCxlKXt0LmI9Yi5NYXRoLm1heCh0LmIsZS5kKSx0LmUrPWUucisodC5hLmMubGVuZ3RoPT0wPzA6dC5jKSx1ZSh0LmEsZSl9ZnVuY3Rpb24gRmVlKHQpe1BtKHQuYz49MCksb2huKHQuZCx0LmMpPDAmJih0LmE9dC5hLTEmdC5kLmEubGVuZ3RoLTEsdC5iPXQuZC5jKSx0LmM9LTF9ZnVuY3Rpb24gVW10KHQpe3JldHVybiB0LmE8NTQ/dC5mPDA/LTE6dC5mPjA/MTowOighdC5jJiYodC5jPWpJKHQuZikpLHQuYykuZX1mdW5jdGlvbiBnZih0KXtpZighKHQ+PTApKXRocm93IHJ0KG5ldyBQbigidG9sZXJhbmNlICgiK3QrIikgbXVzdCBiZSA+PSAwIikpO3JldHVybiB0fWZ1bmN0aW9uIHo4KCl7cmV0dXJuIFhodHx8KFhodD1uZXcga3VlLHM0KFhodCxjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IHlwXSkpKSxYaHR9ZnVuY3Rpb24gc28oKXtzbz1aLE1TPW5ldyBNZXQoT18sMCksSnU9bmV3IE1ldCgiSU5QVVQiLDEpLGV1PW5ldyBNZXQoIk9VVFBVVCIsMil9ZnVuY3Rpb24gWCQoKXtYJD1aLENUdD1uZXcgRWV0KCJBUkQiLDApLE9HPW5ldyBFZXQoIk1TRCIsMSksd2x0PW5ldyBFZXQoIk1BTlVBTCIsMil9ZnVuY3Rpb24gWnYoKXtadj1aLE9PPW5ldyBQZXQoIkJBUllDRU5URVIiLDApLERTPW5ldyBQZXQoYTFlLDEpLGRWPW5ldyBQZXQobzFlLDIpfWZ1bmN0aW9uIF9JKHQsZSl7dmFyIG47aWYobj10LmdjKCksZTwwfHxlPm4pdGhyb3cgcnQobmV3IGptKGUsbikpO3JldHVybiBuZXcgbHZ0KHQsZSl9ZnVuY3Rpb24gQmVlKHQsZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpP3QuYy5NYyhlKToobj1XaXQodCxlKSxJeih0LGUpLG4pfWZ1bmN0aW9uIHBvKHQsZSxuKXtyZXR1cm4gZjIodCxlKSxYYyh0LG4pLElnKHQsMCksdHkodCwxKSxQZyh0LCEwKSxOZyh0LCEwKSx0fWZ1bmN0aW9uIEJsKHQsZSl7aWYodDwwKXRocm93IHJ0KG5ldyBQbihlKyIgY2Fubm90IGJlIG5lZ2F0aXZlIGJ1dCB3YXM6ICIrdCkpO3JldHVybiB0fWZ1bmN0aW9uIFJlZSh0LGUpe3ZhciBuLHI7Zm9yKG49MCxyPXQuZ2MoKTtuPHI7KytuKWlmKFBjKGUsdC5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gUSQodCl7dmFyIGUsbjtmb3Iobj10LmMuQ2MoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSwxNCksZS4kYigpO3QuYy4kYigpLHQuZD0wfWZ1bmN0aW9uIGhvbih0KXt2YXIgZSxuLHIscztmb3Iobj10LmEscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sJFl0KGUsZS5sZW5ndGgsbnVsbCl9ZnVuY3Rpb24gV210KHQpe3ZhciBlLG47aWYodD09MClyZXR1cm4gMzI7Zm9yKG49MCxlPTE7IShlJnQpO2U8PD0xKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBmb24odCl7dmFyIGUsbjtmb3Iobj1uZXcgUyhUc2UodCkpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDY4MCksZS5HZigpfWZ1bmN0aW9uIGplZSh0KXtkYnQoKSx0aGlzLmc9bmV3IENyLHRoaXMuZj1uZXcgQ3IsdGhpcy5iPW5ldyBDcix0aGlzLmM9bmV3IEh2LHRoaXMuaT10fWZ1bmN0aW9uIEttdCgpe3RoaXMuZj1uZXcgVGEsdGhpcy5kPW5ldyBGcHQsdGhpcy5jPW5ldyBUYSx0aGlzLmE9bmV3IGxlLHRoaXMuYj1uZXcgbGV9ZnVuY3Rpb24gJGVlKHQsZSxuLHIpe3RoaXMucmooKSx0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bnVsbCx0aGlzLmM9bmV3IFpXdCh0aGlzLGUsbixyKX1mdW5jdGlvbiBlaXQodCxlLG4scixzKXt0aGlzLmQ9dCx0aGlzLm49ZSx0aGlzLmc9bix0aGlzLm89cix0aGlzLnA9LTEsc3x8KHRoaXMubz0tMi1yLTEpfWZ1bmN0aW9uIHplZSgpe2cydC5jYWxsKHRoaXMpLHRoaXMubj0tMSx0aGlzLmc9bnVsbCx0aGlzLmk9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLkJifD13Zn1mdW5jdGlvbiBkb24oKXtyZXR1cm4gY2woKSxjdChvdChMQXQsMSksYWUsMjU5LDAsW003LGlOLFZWLGVBLFVWLEtWLFdWLHZmdCxyTl0pfWZ1bmN0aW9uIGdvbigpe3JldHVybiBncSgpLGN0KG90KFpFdCwxKSxhZSwyNTAsMCxbUUV0LFdFdCxLRXQsVUV0LE91dCxYRXQsWUV0LFZFdCxHRXRdKX1mdW5jdGlvbiBxZWUoKXtxZWU9WixrZ2U9Y3Qob3QoVHIsMSksWHIsMjUsMTUsWzAsOCw0LDEyLDIsMTAsNiwxNCwxLDksNSwxMywzLDExLDcsMTVdKX1mdW5jdGlvbiBIZWUoKXtIZWU9WixpbWU9YmkoYmkoYmkobmV3IEhzLChXYSgpLEFkKSwocm8oKSxoUykpLGxiLHI3KSxvdSxuNyl9ZnVuY3Rpb24gR2VlKCl7R2VlPVosc21lPWJpKGJpKGJpKG5ldyBIcywoV2EoKSxBZCksKHJvKCksaFMpKSxsYixyNyksb3UsbjcpfWZ1bmN0aW9uIFZlZSgpe1ZlZT1aLGFtZT1iaShiaShiaShuZXcgSHMsKFdhKCksQWQpLChybygpLGhTKSksbGIscjcpLG91LG43KX1mdW5jdGlvbiBVZWUoKXtVZWU9Wix1bWU9S3UoYmkoYmkobmV3IEhzLChXYSgpLG91KSwocm8oKSx3RykpLHFjLGRHKSxJbyx2Ryl9ZnVuY3Rpb24gWXgoKXtZeD1aLFM2PW5ldyBrZXQoIkxBWUVSX1NXRUVQIiwwKSx3Tz1uZXcga2V0KGpvdCwxKSxFVHQ9bmV3IGtldChLMCwyKX1mdW5jdGlvbiBwb24odCxlKXt2YXIgbixyO3JldHVybiBuPXQuYyxyPWUuZVt0LnBdLHI+MD91KEZlKG4uYSxyLTEpLDEwKTpudWxsfWZ1bmN0aW9uIHFDKHQsZSl7dmFyIG47bj10LmssdC5rPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwyLG4sdC5rKSl9ZnVuY3Rpb24gWiQodCxlKXt2YXIgbjtuPXQuZix0LmY9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDgsbix0LmYpKX1mdW5jdGlvbiBKJCh0LGUpe3ZhciBuO249dC5pLHQuaT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNyxuLHQuaSkpfWZ1bmN0aW9uIFltdCh0LGUpe3ZhciBuO249dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsOCxuLHQuYSkpfWZ1bmN0aW9uIFhtdCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMCxuLHQuYikpfWZ1bmN0aW9uIFFtdCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMCxuLHQuYikpfWZ1bmN0aW9uIFptdCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuYykpfWZ1bmN0aW9uIEptdCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuYykpfWZ1bmN0aW9uIG5pdCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNCxuLHQuYykpfWZ1bmN0aW9uIHR5dCh0LGUpe3ZhciBuO249dC5kLHQuZD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuZCkpfWZ1bmN0aW9uIHJpdCh0LGUpe3ZhciBuO249dC5ELHQuRD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMixuLHQuRCkpfWZ1bmN0aW9uIGlpdCh0LGUpe3Qucj4wJiZ0LmM8dC5yJiYodC5jKz1lLHQuaSYmdC5pLmQ+MCYmdC5nIT0wJiZpaXQodC5pLGUvdC5yKnQuaS5kKSl9ZnVuY3Rpb24gYm9uKHQsZSxuKXt2YXIgcjt0LmI9ZSx0LmE9bixyPSh0LmEmNTEyKT09NTEyP25ldyBTcXQ6bmV3IFZMLHQuYz1Edm4ocix0LmIsdC5hKX1mdW5jdGlvbiBXZWUodCxlKXtyZXR1cm4gVjAodC5lLGUpPyh0bygpLFlydChlKT9uZXcgSWooZSx0KTpuZXcgRE0oZSx0KSk6bmV3IGpWdChlLHQpfWZ1bmN0aW9uIHR6KHQsZSl7cmV0dXJuIG5ZZShHQyh0LmEsZSxTcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSkpfWZ1bmN0aW9uIHZvbih0LGUsbil7cmV0dXJuIFltKHQsbmV3IGZlKGUpLG5ldyBZbixuZXcgZ2UobiksY3Qob3QobGwsMSksYWUsMTMyLDAsW10pKX1mdW5jdGlvbiB3b24odCl7dmFyIGUsbjtyZXR1cm4gMD50P25ldyBmYnQ6KGU9dCsxLG49bmV3IHZKdChlLHQpLG5ldyBWMnQobnVsbCxuKSl9ZnVuY3Rpb24gbW9uKHQsZSl7dm4oKTt2YXIgbjtyZXR1cm4gbj1uZXcga3goMSksZWEodCk/eG8obix0LGUpOnN1KG4uZix0LGUpLG5ldyBxKG4pfWZ1bmN0aW9uIHlvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5vK3QucCxyPWUubytlLnAsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIHhvbih0KXt2YXIgZTtyZXR1cm4gZT1RKHQsKHNlKCksX2kpKSxFdChlLDE2MCk/YWllKHUoZSwxNjApKTpudWxsfWZ1bmN0aW9uIEtlZSh0KXt2YXIgZTtyZXR1cm4gdD1iLk1hdGgubWF4KHQsMiksZT1UeXQodCksdD5lPyhlPDw9MSxlPjA/ZTpBXyk6ZX1mdW5jdGlvbiBzaXQodCl7c3dpdGNoKGsydCh0LmUhPTMpLHQuZSl7Y2FzZSAyOnJldHVybiExO2Nhc2UgMDpyZXR1cm4hMH1yZXR1cm4gX3NuKHQpfWZ1bmN0aW9uIFllZSh0LGUpe3ZhciBuO3JldHVybiBFdChlLDgpPyhuPXUoZSw4KSx0LmE9PW4uYSYmdC5iPT1uLmIpOiExfWZ1bmN0aW9uIGFpdCh0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPWU+PjUscz1lJjMxLHI9UHMoem0odC5uW25dW29dLFNyKE0wKHMsMSkpKSwzKSxyfWZ1bmN0aW9uIGtvbih0LGUpe3ZhciBuLHI7Zm9yKHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxZeih0LG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIEVvbih0LGUpe3ZhciBuO249bmV3IGdwLHUoZS5iLDY1KSx1KGUuYiw2NSksdShlLmIsNjUpLG11KGUuYSxuZXcgeHZ0KHQsbixlKSl9ZnVuY3Rpb24gZXl0KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwyMSxuLHQuYikpfWZ1bmN0aW9uIG55dCh0LGUpe3ZhciBuO249dC5kLHQuZD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMTEsbix0LmQpKX1mdW5jdGlvbiBleih0LGUpe3ZhciBuO249dC5qLHQuaj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMTMsbix0LmopKX1mdW5jdGlvbiBYZWUodCxlLG4pe3ZhciByLHMsbztmb3Iobz10LmEubGVuZ3RoLTEscz10LmIscj0wO3I8bjtzPXMrMSZvLCsrcilKaShlLHIsdC5hW3NdKX1mdW5jdGlvbiBwZih0LGUpe3ZhciBuO3JldHVybiBPbihlKSxuPWUuZyx0LmJbbl0/ITE6KEppKHQuYixuLGUpLCsrdC5jLCEwKX1mdW5jdGlvbiBRZWUodCxlKXt2YXIgbjtyZXR1cm4gbj1lPT1udWxsPy0xOlJvKHQuYixlLDApLG48MD8hMToob2l0KHQsbiksITApfWZ1bmN0aW9uIG9pdCh0LGUpe3ZhciBuO249QWcodC5iLHQuYi5jLmxlbmd0aC0xKSxlPHQuYi5jLmxlbmd0aCYmKGFoKHQuYixlLG4pLGhvZSh0LGUpKX1mdW5jdGlvbiBUb24odCxlKXsoQyQoKSxSMT9udWxsOmUuYykubGVuZ3RoPT0wJiZTV3QoZSxuZXcgb2UpLHhvKHQuYSxSMT9udWxsOmUuYyxlKX1mdW5jdGlvbiBDb24odCxlKXt3cihlLCJIaWVyYXJjaGljYWwgcG9ydCBjb25zdHJhaW50IHByb2Nlc3NpbmciLDEpLE9obih0KSxONW4odCksb3IoZSl9ZnVuY3Rpb24gX29uKHQsZSl7dmFyIG4scjtmb3Iocj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDI2NiksdC5iPSEwLE5zKHQuZSxuKSxuLmI9dH1mdW5jdGlvbiBueih0LGUpe3ZhciBuLHI7cmV0dXJuIG49MS1lLHI9dC5hW25dLHQuYVtuXT1yLmFbZV0sci5hW2VdPXQsdC5iPSEwLHIuYj0hMSxyfWZ1bmN0aW9uIFNvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShRKHQsKFRlKCksSHkpKSw4KSxyPXUoUShlLEh5KSw4KSxMcyhuLmIsci5iKX1mdW5jdGlvbiBaZWUodCl7V3Z0LmNhbGwodGhpcyksdGhpcy5iPVh0KHllKFEodCwoVGUoKSx4ZikpKSksdGhpcy5hPXUoUSh0LFgwKSwyMTgpfWZ1bmN0aW9uIEplZSh0LGUsbil7WHd0LmNhbGwodGhpcyx0LGUsbiksdGhpcy5hPW5ldyBDcix0aGlzLmI9bmV3IENyLHRoaXMuZD1uZXcgZyR0KHRoaXMpfWZ1bmN0aW9uIHRuZSh0KXt0aGlzLmU9dCx0aGlzLmQ9bmV3IHhSKFFtKFB4KHRoaXMuZSkuZ2MoKSkpLHRoaXMuYz10aGlzLmUuYSx0aGlzLmI9dGhpcy5lLmN9ZnVuY3Rpb24gcnoodCl7dGhpcy5iPXQsdGhpcy5hPVB0KFRyLFhyLDI1LHQrMSwxNSwxKSx0aGlzLmM9UHQoVHIsWHIsMjUsdCwxNSwxKSx0aGlzLmQ9MH1mdW5jdGlvbiBjaXQodCxlLG4pe3ZhciByO3JldHVybiByPW5ldyBsZSxJNXQodCxlLHIsbiwhMCwhMCksdC5iPW5ldyByeihyLmMubGVuZ3RoKSxyfWZ1bmN0aW9uIGVuZSh0LGUpe3ZhciBuO3JldHVybiBuPXUoSm4odC5jLGUpLDQ1OCksbnx8KG49bmV3IGFxdCxuLmM9ZSxraSh0LmMsbi5jLG4pKSxufWZ1bmN0aW9uIHVpdCh0LGUpe3ZhciBuPXQuYSxyPTA7Zm9yKHZhciBzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmKGVbcisrXT1zKTtyZXR1cm4gZX1mdW5jdGlvbiByeXQodCl7dmFyIGU7cmV0dXJuIHQuYj09bnVsbD8oRWcoKSxFZygpLGhOKTooZT10LkxrKCk/dC5LaygpOnQuSmsoKSxlKX1mdW5jdGlvbiBubmUodCl7dmFyIGUsbjtmb3Iobj1uZXcgZXIodCk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDMzKSx5dShlLDApLHh1KGUsMCl9ZnVuY3Rpb24gR3AoKXtHcD1aLEM2PW5ldyBHaShsNnQpLGFHPW5ldyBHaSh6ZmUpLGxTPW5ldyBHaShxZmUpLGRPPW5ldyBHaShIZmUpfWZ1bmN0aW9uIHE4KCl7cTg9WixwTz1uZXcgQWJ0KCJUT19JTlRFUk5BTF9MVFIiLDApLG5sdD1uZXcgQWJ0KCJUT19JTlBVVF9ESVJFQ1RJT04iLDEpfWZ1bmN0aW9uIGl6KCl7aXo9WixUVj1uZXcgSGJ0KCJQMV9OT0RFX1BMQUNFTUVOVCIsMCksRTc9bmV3IEhidCgiUDJfRURHRV9ST1VUSU5HIiwxKX1mdW5jdGlvbiBKdigpe0p2PVosQXc9bmV3IHhldCgiU1RBUlQiLDApLGhiPW5ldyB4ZXQoIk1JRERMRSIsMSksU3c9bmV3IHhldCgiRU5EIiwyKX1mdW5jdGlvbiBYeCgpe1h4PVosc2x0PW5ldyBPcygiZWRnZWxhYmVsY2VudGVyZWRuZXNzYW5hbHlzaXMuaW5jbHVkZWxhYmVsIiwoRm4oKSxJMikpfWZ1bmN0aW9uIEFvbih0LGUpe3VzKFJpKG5ldyBUbihudWxsLG5ldyBfbihuZXcgVG0odC5iKSwxKSksbmV3IGNWdCh0LGUpKSxuZXcgbFZ0KHQsZSkpfWZ1bmN0aW9uIHJuZSgpe3RoaXMuYz1uZXcgRVIoMCksdGhpcy5iPW5ldyBFUihMMWUpLHRoaXMuZD1uZXcgRVIoQTFlKSx0aGlzLmE9bmV3IEVSKE1vdCl9ZnVuY3Rpb24gaXl0KHQpe3ZhciBlLG47Zm9yKG49dC5jLmEuZWMoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSwyMTQpLGNwdChlLG5ldyBDYWUoZS5lKSl9ZnVuY3Rpb24gaW5lKHQpe3ZhciBlLG47Zm9yKG49dC5jLmEuZWMoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSwyMTQpLHh0dChlLG5ldyBJWXQoZS5mKSl9ZnVuY3Rpb24gWGModCxlKXt2YXIgbjtuPXQuemIsdC56Yj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuemIpKX1mdW5jdGlvbiBzeih0LGUpe3ZhciBuO249dC54Yix0LnhiPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLG4sdC54YikpfWZ1bmN0aW9uIGF6KHQsZSl7dmFyIG47bj10LnliLHQueWI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDIsbix0LnliKSl9ZnVuY3Rpb24gZXModCxlKXt2YXIgbixyO249KHI9bmV3IFV0dCxyKSxuLm49ZSxNcigoIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLHQucyksbil9ZnVuY3Rpb24gUGkodCxlKXt2YXIgbixyO3I9KG49bmV3IHEydCxuKSxyLm49ZSxNcigoIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLHQucykscil9ZnVuY3Rpb24gZTQodCxlKXt2YXIgbixyO2ZvcihuPXQuUGMoKSxEOChuLDAsbi5sZW5ndGgsZSkscj0wO3I8bi5sZW5ndGg7cisrKXQuX2MocixuW3JdKX1mdW5jdGlvbiBVYSh0LGUpe3ZhciBuLHIscztmb3IoT24oZSksbj0hMSxzPWUuS2MoKTtzLk9iKCk7KXI9cy5QYigpLG49bnx0LkZjKHIpO3JldHVybiBufWZ1bmN0aW9uIHNuZSh0KXt2YXIgZSxuLHI7Zm9yKGU9MCxyPXQuS2MoKTtyLk9iKCk7KW49ci5QYigpLGUrPW4hPW51bGw/SGkobik6MCxlPX5+ZTtyZXR1cm4gZX1mdW5jdGlvbiBhbmUodCl7dmFyIGU7cmV0dXJuIHQ9PTA/IlVUQyI6KHQ8MD8odD0tdCxlPSJVVEMrIik6ZT0iVVRDLSIsZStxdGUodCkpfWZ1bmN0aW9uIGxpdCh0LGUpe3ZhciBuO3JldHVybiBFdChlLDE0KT8obj11KGUsMTQpLHQuR2MobikpOlhydCh0LHUoQXIoZSksMjApLktjKCkpfWZ1bmN0aW9uIG9uZSh0LGUsbil7bGVlLmNhbGwodGhpcyxlLG4pLHRoaXMuZD1QdChvMCx6ZywxMCx0LmEuYy5sZW5ndGgsMCwxKSxEMSh0LmEsdGhpcy5kKX1mdW5jdGlvbiBMb24odCl7dC5hPW51bGwsdC5lPW51bGwsdC5iLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5mLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5jPW51bGx9ZnVuY3Rpb24gY25lKHQsZSl7ZT90LkI9PW51bGwmJih0LkI9dC5ELHQuRD1udWxsKTp0LkIhPW51bGwmJih0LkQ9dC5CLHQuQj1udWxsKX1mdW5jdGlvbiB1bmUodCxlKXtyZXR1cm4gWHQoeWUoT3YocUkocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuYy5iLDE2KSksbmV3IHJSKHQpKSxlKSkpKX1mdW5jdGlvbiBzeXQodCxlKXtyZXR1cm4gWHQoeWUoT3YocUkocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuYy5iLDE2KSksbmV3IF85KHQpKSxlKSkpKX1mdW5jdGlvbiBNb24odCxlKXt3cihlLHMxZSwxKSx1cyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IGlZKSxuZXcgc1kpLG9yKGUpfWZ1bmN0aW9uIElvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShxZSh0LChheSgpLF9WKSksMTkpLHI9dShxZShlLF9WKSwxOSksZHUobi5hLHIuYSl9ZnVuY3Rpb24gYXl0KHQsZSxuKXt2YXIgcixzO2ZvcihzPWVpKHQsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDgpLHIuYSs9ZSxyLmIrPW47cmV0dXJuIHR9ZnVuY3Rpb24gSEModCxlLG4pe3ZhciByO2ZvcihyPXQuYltuJnQuZl07cjtyPXIuYilpZihuPT1yLmEmJmZkKGUsci5nKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBHQyh0LGUsbil7dmFyIHI7Zm9yKHI9dC5jW24mdC5mXTtyO3I9ci5kKWlmKG49PXIuZiYmZmQoZSxyLmkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIERvbih0LGUsbil7dmFyIHIscyxvO2ZvcihyPTAscz0wO3M8bjtzKyspbz1lW3NdLHRbc109bzw8MXxyLHI9bz4+PjMxO3IhPTAmJih0W25dPXIpfWZ1bmN0aW9uIE9vbih0LGUpe3ZuKCk7dmFyIG4scjtmb3Iocj1uZXcgbGUsbj0wO248dDsrK24pci5jW3IuYy5sZW5ndGhdPWU7cmV0dXJuIG5ldyBvZXQocil9ZnVuY3Rpb24gbG5lKHQpe3ZhciBlO3JldHVybiBlPXBadCh0KSxBdihlLmEsMCk/KGk4KCksaTgoKSxFRXQpOihpOCgpLG5ldyBOMnQoZS5iKSl9ZnVuY3Rpb24gaG5lKHQpe3ZhciBlO3JldHVybiBlPXBadCh0KSxBdihlLmEsMCk/KGk4KCksaTgoKSxFRXQpOihpOCgpLG5ldyBOMnQoZS5jKSl9ZnVuY3Rpb24gTm9uKHQpe3ZhciBlO3JldHVybiBlPW0kKHQpLEF2KGUuYSwwKT8oU1IoKSxTUigpLERnZSk6KFNSKCksbmV3IHNXdChlLmIpKX1mdW5jdGlvbiBQb24odCl7cmV0dXJuIHQuYi5jLmkuaz09KEduKCkseHMpP3UoUSh0LmIuYy5pLChzZSgpLF9pKSksMTEpOnQuYi5jfWZ1bmN0aW9uIGZuZSh0KXtyZXR1cm4gdC5iLmQuaS5rPT0oR24oKSx4cyk/dShRKHQuYi5kLmksKHNlKCksX2kpKSwxMSk6dC5iLmR9ZnVuY3Rpb24gbHModCxlLG4scixzLG8saCxkLHcsayxDLE0sRil7cmV0dXJuIGlvZSh0LGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGKSxSaXQodCwhMSksdH1mdW5jdGlvbiB1aCh0LGUsbixyLHMsbyxoKXtHci5jYWxsKHRoaXMsdCxlKSx0aGlzLmQ9bix0aGlzLmU9cix0aGlzLmM9cyx0aGlzLmI9byx0aGlzLmE9XzEoaCl9ZnVuY3Rpb24gRm9uKHQsZSl7dHlwZW9mIHdpbmRvdz09PUNEJiZ0eXBlb2Ygd2luZG93LiRnd3Q9PT1DRCYmKHdpbmRvdy4kZ3d0W3RdPWUpfWZ1bmN0aW9uIEJvbih0LGUpe3JldHVybiBLOCgpLHQ9PV93JiZlPT1EeXx8dD09RHkmJmU9PV93fHx0PT1qNCYmZT09SXl8fHQ9PUl5JiZlPT1qNH1mdW5jdGlvbiBSb24odCxlKXtyZXR1cm4gSzgoKSx0PT1fdyYmZT09SXl8fHQ9PV93JiZlPT1qNHx8dD09RHkmJmU9PWo0fHx0PT1EeSYmZT09SXl9ZnVuY3Rpb24gZG5lKHQsZSl7cmV0dXJuIHkxKCksZ2YoUDEpLGIuTWF0aC5hYnMoMC1lKTw9UDF8fGU9PTB8fGlzTmFOKDApJiZpc05hTihlKT8wOnQvZX1mdW5jdGlvbiBqb24oKXtyZXR1cm4gb28oKSxjdChvdChBbHQsMSksYWUsMjU2LDAsW1JHLGJoLHZTLGpHLGY3LFY0LHdTLGw3LGg3LCRHXSl9ZnVuY3Rpb24gaGl0KCl7aGl0PVosYUE9bmV3IGtxdCxfZnQ9Y3Qob3QoQXUsMSksUDQsMTcwLDAsW10pLHM1ZT1jdChvdChWaCwxKSxPOHQsNTksMCxbXSl9ZnVuY3Rpb24gb3ooKXtvej1aLFZDdD1uZXcgT2V0KCJOTyIsMCksd2h0PW5ldyBPZXQoIkdSRUVEWSIsMSksR0N0PW5ldyBPZXQoIkxPT0tfQkFDSyIsMil9ZnVuY3Rpb24gQnUoKXtCdT1aLE43dD1uZXcgYm0sRDd0PW5ldyBicCxPN3Q9bmV3IHRZLEk3dD1uZXcgemIsUDd0PW5ldyBlWSxGN3Q9bmV3IG5ZfWZ1bmN0aW9uICRvbih0KXt2YXIgZSxuLHI7Zm9yKHI9MCxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjkpLGUucD1yLCsrcn1mdW5jdGlvbiB6b24odCxlKXt2YXIgbjtyZXR1cm4gbj1DNHQodCksdDV0KG5ldyAkZShuLmMsbi5kKSxuZXcgJGUobi5iLG4uYSksdC5yZigpLGUsdC5IZigpKX1mdW5jdGlvbiBSYyh0LGUpe3ZhciBuO3JldHVybiB0LmI/bnVsbDoobj1SYW4odCx0LmcpLG5pKHQuYSxuKSxuLmk9dCx0LmQ9ZSxuKX1mdW5jdGlvbiBxb24odCxlLG4pe3dyKG4sIkRGUyBUcmVlaWZ5aW5nIHBoYXNlIiwxKSxRbG4odCxlKSxXMm4odCxlKSx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBnbmUodCxlLG4pe3RoaXMuZz10LHRoaXMuZD1lLHRoaXMuZT1uLHRoaXMuYT1uZXcgbGUsJGduKHRoaXMpLHZuKCksWHModGhpcy5hLG51bGwpfWZ1bmN0aW9uIG95dCh0KXt0aGlzLmk9dC5nYygpLHRoaXMuaT4wJiYodGhpcy5nPXRoaXMucmkodGhpcy5pKyh0aGlzLmkvOHwwKSsxKSx0LlFjKHRoaXMuZykpfWZ1bmN0aW9uIGlzKHQsZSl7U2ouY2FsbCh0aGlzLGE1ZSx0LGUpLHRoaXMuYj10aGlzLHRoaXMuYT1hdSh0LlRnKCkseW4odGhpcy5lLlRnKCksdGhpcy5jKSl9ZnVuY3Rpb24gVkModCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPWUudmMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw0MiksdC56YyhuLmNkKCksbi5kZCgpKX1mdW5jdGlvbiBIb24odCxlLG4pe3ZhciByO2ZvcihyPW4uS2MoKTtyLk9iKCk7KWlmKCFrJCh0LGUsci5QYigpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBHb24odCxlLG4scixzKXt2YXIgbztyZXR1cm4gbiYmKG89VmkoZS5UZygpLHQuYykscz1uLmdoKGUsLTEtKG89PS0xP3I6byksbnVsbCxzKSksc31mdW5jdGlvbiBWb24odCxlLG4scixzKXt2YXIgbztyZXR1cm4gbiYmKG89VmkoZS5UZygpLHQuYykscz1uLmloKGUsLTEtKG89PS0xP3I6byksbnVsbCxzKSksc31mdW5jdGlvbiBwbmUodCl7dmFyIGU7aWYodC5iPT0tMil7aWYodC5lPT0wKWU9LTE7ZWxzZSBmb3IoZT0wO3QuYVtlXT09MDtlKyspO3QuYj1lfXJldHVybiB0LmJ9ZnVuY3Rpb24gYm5lKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMjpyZXR1cm4gYmUoKSxCbjtjYXNlIDQ6cmV0dXJuIGJlKCksSG47ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gdm5lKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gYmUoKSxtcjtjYXNlIDM6cmV0dXJuIGJlKCksTm47ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gVW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdC5qPT0oYmUoKSxObikmJihlPVVvZSh0KSxuPU51KGUsSG4pLHI9TnUoZSxCbikscnx8ciYmbil9ZnVuY3Rpb24gV29uKHQpe3ZhciBlLG47cmV0dXJuIGU9dSh0LmUmJnQuZSgpLDkpLG49dShkd3QoZSxlLmxlbmd0aCksOSksbmV3IHJoKGUsbixlLmxlbmd0aCl9ZnVuY3Rpb24gS29uKHQsZSl7d3IoZSxzMWUsMSksYzN0KGdZZShuZXcgdHIoKHo5KCksbmV3IHRydCh0LCExLCExLG5ldyBZUCkpKSkpLG9yKGUpfWZ1bmN0aW9uIFNJKHQsZSl7cmV0dXJuIEZuKCksZWEodCk/cG10KHQsQnIoZSkpOk5tKHQpP1BudCh0LHllKGUpKTpPbSh0KT9adG4odCxSZShlKSk6dC53ZChlKX1mdW5jdGlvbiBjeXQodCxlKXtlLnE9dCx0LmQ9Yi5NYXRoLm1heCh0LmQsZS5yKSx0LmIrPWUuZCsodC5hLmMubGVuZ3RoPT0wPzA6dC5jKSx1ZSh0LmEsZSl9ZnVuY3Rpb24gSDgodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcz10LmMsbj10LmMrdC5iLG89dC5kLHI9dC5kK3QuYSxlLmE+cyYmZS5hPG4mJmUuYj5vJiZlLmI8cn1mdW5jdGlvbiB3bmUodCxlLG4scil7RXQodC5DYiwxNzkpJiYodSh0LkNiLDE3OSkudGI9bnVsbCksWGModCxuKSxlJiZjcG4odCxlKSxyJiZ0LnhrKCEwKX1mdW5jdGlvbiB1eXQodCxlKXt2YXIgbjtuPXUoZSwxODMpLEpiKG4sIngiLHQuaSksSmIobiwieSIsdC5qKSxKYihuLHpjdCx0LmcpLEpiKG4sJGN0LHQuZil9ZnVuY3Rpb24gbHl0KCl7bHl0PVosbG1lPWF3KFdWdChiaShiaShuZXcgSHMsKFdhKCksb3UpLChybygpLHdHKSkscWMsZEcpLElvKSx2Ryl9ZnVuY3Rpb24gbW5lKCl7bW5lPVosZ21lPWF3KFdWdChiaShiaShuZXcgSHMsKFdhKCksb3UpLChybygpLHdHKSkscWMsZEcpLElvKSx2Ryl9ZnVuY3Rpb24gY3ooKXtjej1aLGpodD1uZXcgUmV0KEswLDApLE1fdD1uZXcgUmV0KCJQT0xBUl9DT09SRElOQVRFIiwxKSxMX3Q9bmV3IFJldCgiSUQiLDIpfWZ1bmN0aW9uIHV6KCl7dXo9WixSQ3Q9bmV3IElldCgiRVFVQUxMWSIsMCkscGh0PW5ldyBJZXQoUnEsMSksakN0PW5ldyBJZXQoIk5PUlRIX1NPVVRIIiwyKX1mdW5jdGlvbiB5bmUoKXt5bmU9WixHd2U9V3IoKHc0KCksY3Qob3QoTkN0LDEpLGFlLDI2MCwwLFtoVixNTyxJTyxJQ3QsREN0LE1DdCxPQ3QsZlZdKSkpfWZ1bmN0aW9uIHhuZSgpe3huZT1aLG8yZT1XcigoZnEoKSxjdChvdCh5VHQsMSksYWUsMjcwLDAsW2xsdCxkbHQsdWx0LGJsdCxmbHQsaGx0LHBsdCxnbHRdKSkpfWZ1bmN0aW9uIGtuZSgpe2tuZT1aLFAzZT1XcigoamcoKSxjdChvdChOM2UsMSksYWUsMjc3LDAsW21TdCxBYSxnYyxUNyxEbyxjcyxqNixxMV0pKSl9ZnVuY3Rpb24gRW5lKCl7RW5lPVosUjRlPVdyKCh2RSgpLGN0KG90KGVVLDEpLGFlLDIzNywwLFtrZnQsSlYsdFUsWlYseGZ0LFFWLFhWLHlmdF0pKSl9ZnVuY3Rpb24gRzgoKXtHOD1aLHVTPW5ldyBPcygiZGVidWdTVkciLChGbigpLCExKSksbjd0PW5ldyBPcygib3ZlcmxhcHNFeGlzdGVkIiwhMCl9ZnVuY3Rpb24gVG5lKHQsZSl7cmV0dXJuIFltKG5ldyB6dCh0KSxuZXcgZWUoZSksbmV3IFZ0KGUpLG5ldyBkcyxjdChvdChsbCwxKSxhZSwxMzIsMCxbXSkpfWZ1bmN0aW9uIFlvbigpe3ZhciB0O3JldHVybiBMdXR8fChMdXQ9bmV3IFh6dCx0PW5ldyBJcnQoIiIpLG9YZSh0LChzOCgpLExFdCkpLFRvbihMdXQsdCkpLEx1dH1mdW5jdGlvbiBYb24odCxlKXt2YXIgbjtmb3IoQXIoZSk7dC5PYigpOylpZihuPXQuUGIoKSwhZHl0KHUobiwxMCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIENuZSh0LGUpe3ZhciBuO3JldHVybiBuPXNhdCh6OCgpLHQpLG4/KGJvKGUsKGNpKCksQzcpLG4pLCEwKTohMX1mdW5jdGlvbiBSbCh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlLmouYy5sZW5ndGg7bisrKXUod0kodCxuKSwyMSkuR2ModSh3SShlLG4pLDE0KSk7cmV0dXJuIHR9ZnVuY3Rpb24gUW9uKHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgUyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDI5KSx0LmFbbi5wXT14MG4obil9ZnVuY3Rpb24gVUModCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPXQudmMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw0MiksZS5PZChuLmNkKCksbi5kZCgpKX1mdW5jdGlvbiBseih0LGUpe3ZhciBuO0V0KGUsODMpPyh1KHQuYyw3NikuWGooKSxuPXUoZSw4Myksa29uKHQsbikpOnUodC5jLDc2KS5XYihlKX1mdW5jdGlvbiBhMih0KXtyZXR1cm4gRXQodCwxNTIpP1Z4KHUodCwxNTIpKTpFdCh0LDEzMSk/dSh0LDEzMSkuYTpFdCh0LDU0KT9uZXcgbXYodCk6bmV3IE1tKHQpfWZ1bmN0aW9uIFpvbih0LGUpe3JldHVybiBlPHQuYi5nYygpP3UodC5iLlhiKGUpLDEwKTplPT10LmIuZ2MoKT90LmE6dShGZSh0LmUsZS10LmIuZ2MoKS0xKSwxMCl9ZnVuY3Rpb24gX25lKHQsZSl7dC5hPU9hKHQuYSwxKSx0LmM9Yi5NYXRoLm1pbih0LmMsZSksdC5iPWIuTWF0aC5tYXgodC5iLGUpLHQuZD1PYSh0LmQsZSl9ZnVuY3Rpb24gSm9uKHQsZSl7dmFyIG47d3IoZSwiRWRnZSBhbmQgbGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxuPW53bih0KSx3NG4obiksb3IoZSl9ZnVuY3Rpb24gU25lKHQpe3ZhciBlO3QuZD09bnVsbD8oKyt0LmUsdC5mPTAsRnJlKG51bGwpKTooKyt0LmUsZT10LmQsdC5kPW51bGwsdC5mPTAsRnJlKGUpKX1mdW5jdGlvbiBWcCh0KXt2YXIgZTtyZXR1cm4gZT10LmgsZT09MD90LmwrdC5tKmY2OmU9PVcwP3QubCt0Lm0qZjYteDI6dH1mdW5jdGlvbiBBbmUodCl7cmV0dXJuIEJtKCksdC5BLkhjKChfbCgpLFh5KSkmJiF0LkIuSGMoKGNsKCksaU4pKT9saWUodCk6bnVsbH1mdW5jdGlvbiB0Y24odCl7aWYoT24odCksdC5sZW5ndGg9PTApdGhyb3cgcnQobmV3IG9kKCJaZXJvIGxlbmd0aCBCaWdJbnRlZ2VyIikpO2R3bih0aGlzLHQpfWZ1bmN0aW9uIG40KHQpe2lmKCF0KXRocm93IHJ0KG5ldyBGbygibm8gY2FsbHMgdG8gbmV4dCgpIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcmVtb3ZlKCkiKSl9ZnVuY3Rpb24ga3UodCl7cmV0dXJuIEREPHQmJnQ8eDI/dDwwP2IuTWF0aC5jZWlsKHQpOmIuTWF0aC5mbG9vcih0KTpWcCh5Mm4odCkpfWZ1bmN0aW9uIGVjbih0LGUpe3ZhciBuLHIscztmb3Iobj10LmMuRWUoKSxzPWUuS2MoKTtzLk9iKCk7KXI9cy5QYigpLHQuYS5PZChuLHIpO3JldHVybiB0LmIuS2Iobil9ZnVuY3Rpb24gbWkodCxlKXt2YXIgbixyLHM7aWYobj10LkpnKCksbiE9bnVsbCYmdC5NZygpKWZvcihyPTAscz1uLmxlbmd0aDtyPHM7KytyKW5bcl0udWkoZSl9ZnVuY3Rpb24gVjgodCxlKXt2YXIgbixyO2ZvcihuPXQscj1GYShuKS5lO3I7KXtpZihuPXIsbj09ZSlyZXR1cm4hMDtyPUZhKG4pLmV9cmV0dXJuITF9ZnVuY3Rpb24gbmNuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXQuYS5mW2UucF0scz10LmEuZltuLnBdLHI8cz8tMTpyPT1zPzA6MX1mdW5jdGlvbiBvMih0LGUsbil7dmFyIHIscztyZXR1cm4gcz11KHdDKHQuZCxlKSwxOSkscj11KHdDKHQuYixuKSwxOSksIXN8fCFyP251bGw6V3godCxzLmEsci5hKX1mdW5jdGlvbiByY24odCxlKXt2YXIgbixyO2ZvcihyPW5ldyBlcih0KTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMzMpLG0xKG4sbi5pK2UuYixuLmorZS5kKX1mdW5jdGlvbiBpY24odCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSx1ZSh0LmQsbiksZzBuKHQsbil9ZnVuY3Rpb24gc2NuKHQsZSl7dmFyIG4scjtyPW5ldyBsZSxuPWU7ZG8gci5jW3IuYy5sZW5ndGhdPW4sbj11KEpuKHQuayxuKSwxNyk7d2hpbGUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gSW4odCxlKXt2YXIgbjtyZXR1cm4gdC5EYiZlPyhuPWJzdCh0LGUpLG49PS0xP3QuRWI6czIodC5FYilbbl0pOm51bGx9ZnVuY3Rpb24gaWModCxlKXt2YXIgbixyO3JldHVybiBuPShyPW5ldyBYTCxyKSxuLkc9ZSwhdC5yYiYmKHQucmI9bmV3IHFtKHQsaTEsdCkpLE1yKHQucmIsbiksbn1mdW5jdGlvbiBhaSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IGxSLHIpLG4uRz1lLCF0LnJiJiYodC5yYj1uZXcgcW0odCxpMSx0KSksTXIodC5yYixuKSxufWZ1bmN0aW9uIGh5dCh0LGUpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuISF0Lm4mJnQubi5pIT0wO2Nhc2UgMjpyZXR1cm4gdC5rIT1udWxsfXJldHVybiBHd3QodCxlKX1mdW5jdGlvbiBMbmUodCl7c3dpdGNoKHQuYS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBMVnQ7Y2FzZSAzOnJldHVybiBuZXcgU3NlO2RlZmF1bHQ6cmV0dXJuIG5ldyBpZH19ZnVuY3Rpb24gaHoodCl7dmFyIGU7aWYodC5nPjF8fHQuT2IoKSlyZXR1cm4rK3QuYSx0Lmc9MCxlPXQuaSx0Lk9iKCksZTt0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIGFjbih0KXt3VXQoKTt2YXIgZTtyZXR1cm4gQUd0KHlodCx0KXx8KGU9bmV3IFNRLGUuYT10LFoydCh5aHQsdCxlKSksdShnbyh5aHQsdCksNjM1KX1mdW5jdGlvbiBTaCh0KXt2YXIgZSxuLHIscztyZXR1cm4gcz10LHI9MCxzPDAmJihzKz14MixyPVcwKSxuPXBzKHMvZjYpLGU9cHMocy1uKmY2KSxydShlLG4scil9ZnVuY3Rpb24gQUkodCl7dmFyIGUsbixyO2ZvcihyPTAsbj1uZXcgRXgodC5hKTtuLmE8bi5jLmEubGVuZ3RoOyllPUZDKG4pLHQuYi5IYyhlKSYmKytyO3JldHVybiByfWZ1bmN0aW9uIG9jbih0KXt2YXIgZSxuLHI7Zm9yKGU9MSxyPXQuS2MoKTtyLk9iKCk7KW49ci5QYigpLGU9MzEqZSsobj09bnVsbD8wOkhpKG4pKSxlPX5+ZTtyZXR1cm4gZX1mdW5jdGlvbiBjY24odCxlKXt2YXIgbjt0aGlzLmM9dCxuPW5ldyBsZSx6M3QodCxuLGUsdC5iLG51bGwsITEsbnVsbCwhMSksdGhpcy5hPW5ldyBoYShuLDApfWZ1bmN0aW9uIFU4KHQsZSl7dGhpcy5iPXQsdGhpcy5lPWUsdGhpcy5kPWUuaix0aGlzLmY9KHRvKCksdSh0LDY2KS5PaigpKSx0aGlzLms9YXUoZS5lLlRnKCksdCl9ZnVuY3Rpb24gYzIodCxlLG4pe3RoaXMuYj0oT24odCksdCksdGhpcy5kPShPbihlKSxlKSx0aGlzLmU9KE9uKG4pLG4pLHRoaXMuYz10aGlzLmQrKCIiK3RoaXMuZSl9ZnVuY3Rpb24gTW5lKCl7dGhpcy5hPXUoRGUoKFpmKCksaUcpKSwxOSkuYSx0aGlzLmM9WHQoeWUoRGUoc0cpKSksdGhpcy5iPVh0KHllKERlKEd1dCkpKX1mdW5jdGlvbiBJbmUoKXtJbmU9WixoNGU9V3IoKGZ5KCksY3Qob3QobG8sMSksYWUsOTMsMCxbRWYsSjAsVGYsX2YsbDAsemgsVWwsQ2YsJGhdKSkpfWZ1bmN0aW9uIERuZSgpe0RuZT1aLEtnZT1XcigoZ3EoKSxjdChvdChaRXQsMSksYWUsMjUwLDAsW1FFdCxXRXQsS0V0LFVFdCxPdXQsWEV0LFlFdCxWRXQsR0V0XSkpKX1mdW5jdGlvbiB0dygpe3R3PVosYU89bmV3IHpSKCJVUCIsMCksc089bmV3IHpSKHlvdCwxKSxGdXQ9bmV3IHpSKGQ2LDIpLEJ1dD1uZXcgelIoZzYsMyl9ZnVuY3Rpb24gZnl0KCl7Znl0PVosbl90PShkJCgpLE1odCksZXllPW5ldyBtbihGa3Qsbl90KSxlX3Q9KHYkKCksSWh0KSx0eWU9bmV3IG1uKEJrdCxlX3QpfWZ1bmN0aW9uIFc4KCl7Vzg9WixMbHQ9bmV3IENldCgiT05FX1NJREVEIiwwKSxNbHQ9bmV3IENldCgiVFdPX1NJREVEIiwxKSxtTz1uZXcgQ2V0KCJPRkYiLDIpfWZ1bmN0aW9uIE9uZSh0KXt0LnI9bmV3IHFzLHQudz1uZXcgcXMsdC50PW5ldyBsZSx0Lmk9bmV3IGxlLHQuZD1uZXcgcXMsdC5hPW5ldyBBeCx0LmM9bmV3IENyfWZ1bmN0aW9uIExJKHQpe3RoaXMubj1uZXcgbGUsdGhpcy5lPW5ldyBRaSx0aGlzLmo9bmV3IFFpLHRoaXMuaz1uZXcgbGUsdGhpcy5mPW5ldyBsZSx0aGlzLnA9dH1mdW5jdGlvbiBObmUodCxlKXt0LmMmJihCdWUodCxlLCEwKSx1cyhuZXcgVG4obnVsbCxuZXcgX24oZSwxNikpLG5ldyAkdHQodCkpKSxCdWUodCxlLCExKX1mdW5jdGlvbiB1Y24odCxlLG4pe3JldHVybiB0PT0oWnYoKSxkVik/bmV3IHRROm9sKGUsMSkhPTA/bmV3IGlidChuLmxlbmd0aCk6bmV3IGlIdChuLmxlbmd0aCl9ZnVuY3Rpb24gTG8odCxlKXt2YXIgbjtyZXR1cm4gZSYmKG49ZS5WZSgpLG4uZGMoKXx8KHQucT9WQyh0LnEsbik6dC5xPW5ldyBVVnQobikpKSx0fWZ1bmN0aW9uIFBuZSh0LGUpe3ZhciBuO3JldHVybiBuPXQuYS5nZXQoZSksbj09PXZvaWQgMD8rK3QuZDooT1FlKHQuYSxlKSwtLXQuYyxhJCh0LmIpKSxufWZ1bmN0aW9uIGxjbih0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lLnAtdC5wLG49PTA/KHI9dC5mLmEqdC5mLmIscz1lLmYuYSplLmYuYixMcyhyLHMpKTpufWZ1bmN0aW9uIGhjbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5mLmMubGVuZ3RoLHI9ZS5mLmMubGVuZ3RoLG48cj8tMTpuPT1yPzA6MX1mdW5jdGlvbiBmY24odCl7cmV0dXJuIHQuYi5jLmxlbmd0aCE9MCYmdShGZSh0LmIsMCksNzApLmE/dShGZSh0LmIsMCksNzApLmE6cnJ0KHQpfWZ1bmN0aW9uIGRjbih0KXt2YXIgZTtpZih0KXtpZihlPXQsZS5kYygpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIGUuWGIoZS5nYygpLTEpfXJldHVybiBGUXQodC5LYygpKX1mdW5jdGlvbiBGbmUodCl7dmFyIGU7cmV0dXJuIHljKHQsMCk8MCYmKHQ9SXZ0KHQpKSxlPVNyKEZwKHQsMzIpKSw2NC0oZSE9MD9sRChlKTpsRChTcih0KSkrMzIpfWZ1bmN0aW9uIGR5dCh0KXt2YXIgZTtyZXR1cm4gZT11KFEodCwoc2UoKSxvYykpLDYxKSx0Lms9PShHbigpLHhzKSYmKGU9PShiZSgpLEJuKXx8ZT09SG4pfWZ1bmN0aW9uIGdjbih0LGUsbil7dmFyIHIscztzPXUoUSh0LChUZSgpLF9vKSksNzQpLHMmJihyPW5ldyBEdSxBaXQociwwLHMpLEptKHIsbiksVWEoZSxyKSl9ZnVuY3Rpb24gZnoodCxlLG4pe3ZhciByLHMsbyxoO2g9RmEodCkscj1oLmQscz1oLmMsbz10Lm4sZSYmKG8uYT1vLmEtci5iLXMuYSksbiYmKG8uYj1vLmItci5kLXMuYil9ZnVuY3Rpb24gcGNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10Lmoscj1lLmosbiE9cj9uLmctci5nOnQucD09ZS5wPzA6bj09KGJlKCksTm4pP3QucC1lLnA6ZS5wLXQucH1mdW5jdGlvbiBiY24odCl7dmFyIGUsbjtmb3IoejRuKHQpLG49bmV3IFModC5kKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMDEpLGUuaSYmWDBuKGUpfWZ1bmN0aW9uIFdDKHQsZSxuLHIscyl7SmkodC5jW2UuZ10sbi5nLHIpLEppKHQuY1tuLmddLGUuZyxyKSxKaSh0LmJbZS5nXSxuLmcscyksSmkodC5iW24uZ10sZS5nLHMpfWZ1bmN0aW9uIHZjbih0LGUsbixyKXt1KG4uYiw2NSksdShuLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSksdShyLmIsNjUpLG11KHIuYSxuZXcgeXZ0KHQsZSxyKSl9ZnVuY3Rpb24gd2NuKHQsZSl7dC5kPT0oYW8oKSxqaCl8fHQuZD09WjA/dShlLmEsNTcpLmMuRmModShlLmIsNTcpKTp1KGUuYiw1NykuYy5GYyh1KGUuYSw1NykpfWZ1bmN0aW9uIGZpdCh0LGUsbixyKXtyZXR1cm4gbj09MT8oIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSxCYSh0Lm4sZSxyKSk6TzR0KHQsZSxuLHIpfWZ1bmN0aW9uIE1JKHQsZSl7dmFyIG4scjtyZXR1cm4gcj0obj1uZXcgUkwsbiksWGMocixlKSxNcigoIXQuQSYmKHQuQT1uZXcgT3UobHUsdCw3KSksdC5BKSxyKSxyfWZ1bmN0aW9uIG1jbih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIG89bnVsbCxoPWUscz1VdihoLEdjdCkscj1uZXcgZ1Z0KHQsbiksbz0oUjFuKHIuYSxyLmIscykscyksb31mdW5jdGlvbiBkaXQodCl7dmFyIGU7cmV0dXJuKCF0LmF8fCEodC5CYiYxKSYmdC5hLmtoKCkpJiYoZT1MaCh0KSxFdChlLDE0OCkmJih0LmE9dShlLDE0OCkpKSx0LmF9ZnVuY3Rpb24gSUkodCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPWUuS2MoKTtyLk9iKCk7KWlmKG49ci5QYigpLCF0LkhjKG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHljbih0LGUpe3ZhciBuLHIscztyZXR1cm4gbj10LmwrZS5sLHI9dC5tK2UubSsobj4+MjIpLHM9dC5oK2UuaCsocj4+MjIpLHJ1KG4mdWwsciZ1bCxzJlcwKX1mdW5jdGlvbiBCbmUodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49dC5sLWUubCxyPXQubS1lLm0rKG4+PjIyKSxzPXQuaC1lLmgrKHI+PjIyKSxydShuJnVsLHImdWwscyZXMCl9ZnVuY3Rpb24gREkodCl7dmFyIGU7cmV0dXJuIHQ8MTI4PyhlPShaS3QoKSxpRXQpW3RdLCFlJiYoZT1pRXRbdF09bmV3IHRSKHQpKSxlKTpuZXcgdFIodCl9ZnVuY3Rpb24gV2kodCl7dmFyIGU7cmV0dXJuIEV0KHQsNzgpP3Q6KGU9dCYmdC5fX2phdmEkZXhjZXB0aW9uLGV8fChlPW5ldyBfcmUodCksSHp0KGUpKSxlKX1mdW5jdGlvbiBPSSh0KXtpZihFdCh0LDE4NikpcmV0dXJuIHUodCwxMTgpO2lmKHQpcmV0dXJuIG51bGw7dGhyb3cgcnQobmV3IHl4KERkZSkpfWZ1bmN0aW9uIFJuZSh0LGUpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKDt0LmEhPXQuYjspaWYoeWkoZSxteih0KSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZ3l0KHQpe3JldHVybiB0LmEuT2IoKT8hMDp0LmEhPXQuZD8hMToodC5hPW5ldyBLd3QodC5lLmYpLHQuYS5PYigpKX1mdW5jdGlvbiBBcyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5QYygpLHI9bi5sZW5ndGgscj09MD8hMTooU3Z0KHQuYyx0LmMubGVuZ3RoLG4pLCEwKX1mdW5jdGlvbiB4Y24odCxlLG4pe3ZhciByLHM7Zm9yKHM9ZS52YygpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDQyKSx0LnljKHIuY2QoKSxyLmRkKCksbik7cmV0dXJuIHR9ZnVuY3Rpb24gam5lKHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxKdChuLChzZSgpLEQ2KSxlKX1mdW5jdGlvbiBrY24odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwzMyksbTEocixyLmkrZSxyLmorbil9ZnVuY3Rpb24gJG5lKHQsZSl7aWYoIXQpdGhyb3cgcnQobmV3IFBuKHZfKCJ2YWx1ZSBhbHJlYWR5IHByZXNlbnQ6ICVzIixjdChvdChYbiwxKSxJZSwxLDUsW2VdKSkpKX1mdW5jdGlvbiB6bmUodCxlKXtyZXR1cm4hdHx8IWV8fHQ9PWU/ITE6RWllKHQuZC5jLGUuZC5jK2UuZC5iKSYmRWllKGUuZC5jLHQuZC5jK3QuZC5iKX1mdW5jdGlvbiBFY24oKXtyZXR1cm4gQyQoKSxSMT9uZXcgSXJ0KG51bGwpOkdvZShZb24oKSwiY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzIil9ZnVuY3Rpb24gcW5lKHQsZSl7dmFyIG47cmV0dXJuIG49SGQoZS5hLmdjKCkpLHVzKEckKG5ldyBUbihudWxsLG5ldyBfbihlLDEpKSx0LmkpLG5ldyBvVnQodCxuKSksbn1mdW5jdGlvbiBIbmUodCl7dmFyIGUsbjtyZXR1cm4gbj0oZT1uZXcgUkwsZSksWGMobiwiVCIpLE1yKCghdC5kJiYodC5kPW5ldyBPdShsdSx0LDExKSksdC5kKSxuKSxufWZ1bmN0aW9uIHB5dCh0KXt2YXIgZSxuLHIscztmb3IoZT0xLG49MCxzPXQuZ2MoKTtuPHM7KytuKXI9dC5raShuKSxlPTMxKmUrKHI9PW51bGw/MDpIaShyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gR25lKHQsZSxuLHIpe3ZhciBzO3JldHVybiBvSShlLHQuZS5IZCgpLmdjKCkpLG9JKG4sdC5jLkhkKCkuZ2MoKSkscz10LmFbZV1bbl0sSmkodC5hW2VdLG4sciksc31mdW5jdGlvbiBjdCh0LGUsbixyLHMpe3JldHVybiBzLmdtPXQscy5obT1lLHMuaW09Q3Qscy5fX2VsZW1lbnRUeXBlSWQkPW4scy5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkPXIsc31mdW5jdGlvbiBUY24odCxlLG4scixzKXtyZXR1cm4geTQoKSxiLk1hdGgubWluKHRoZSh0LGUsbixyLHMpLHRoZShuLHIsdCxlLG1qKG5ldyAkZShzLmEscy5iKSkpKX1mdW5jdGlvbiBkeigpe2R6PVosYWx0PW5ldyBIUihLMCwwKSxfRz1uZXcgSFIoYzFlLDEpLFNHPW5ldyBIUih1MWUsMiksdk89bmV3IEhSKCJCT1RIIiwzKX1mdW5jdGlvbiBNMSgpe00xPVosXzY9bmV3IEdSKE5FLDApLGk3PW5ldyBHUihkNiwxKSxzNz1uZXcgR1IoZzYsMiksb2x0PW5ldyBHUigiVE9QIiwzKX1mdW5jdGlvbiBLOCgpe0s4PVosX3c9bmV3IHFSKCJRMSIsMCksRHk9bmV3IHFSKCJRNCIsMSksSXk9bmV3IHFSKCJRMiIsMiksajQ9bmV3IHFSKCJRMyIsMyl9ZnVuY3Rpb24gZ3ooKXtnej1aLG1odD1uZXcgTmV0KCJPRkYiLDApLHg3PW5ldyBOZXQoIlNJTkdMRV9FREdFIiwxKSxWeT1uZXcgTmV0KCJNVUxUSV9FREdFIiwyKX1mdW5jdGlvbiBOSSgpe05JPVosT1Y9bmV3IFVidCgiTUlOSU1VTV9TUEFOTklOR19UUkVFIiwwKSxiU3Q9bmV3IFVidCgiTUFYSU1VTV9TUEFOTklOR19UUkVFIiwxKX1mdW5jdGlvbiBReCgpe1F4PVosTDNlPW5ldyBkWixBM2U9bmV3IGhafWZ1bmN0aW9uIGJ5dCh0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IFFpLHI9ZWkodC5kLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwxODgpLG5pKGUsbi5jKTtyZXR1cm4gZX1mdW5jdGlvbiBnaXQodCl7dmFyIGUsbixyLHM7Zm9yKHM9bmV3IGxlLHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzMyksZT1neShuKSxBcyhzLGUpO3JldHVybiBzfWZ1bmN0aW9uIENjbih0KXt2YXIgZTtkdyh0LCEwKSxlPSRnLFZzKHQsKFRlKCksdzcpKSYmKGUrPXUoUSh0LHc3KSwxOSkuYSksSnQodCx3NyxkZShlKSl9ZnVuY3Rpb24gVm5lKHQsZSxuKXt2YXIgcjtZdSh0LmEpLG11KG4uaSxuZXcgJCR0KHQpKSxyPW5ldyBjaih1KEpuKHQuYSxlLmIpLDY1KSksRGllKHQscixlKSxuLmY9cn1mdW5jdGlvbiBfY24odCxlKXt2YXIgbixyO3JldHVybiBuPXQuYyxyPWUuZVt0LnBdLHI8bi5hLmMubGVuZ3RoLTE/dShGZShuLmEscisxKSwxMCk6bnVsbH1mdW5jdGlvbiBTY24odCxlKXt2YXIgbixyO2ZvcihyJChlLCJwcmVkaWNhdGUiKSxyPTA7dC5PYigpO3IrKylpZihuPXQuUGIoKSxlLkxiKG4pKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIFp4KHQsZSl7dmFyIG4scjtpZihyPTAsdDw2NCYmdDw9ZSlmb3IoZT1lPDY0P2U6NjMsbj10O248PWU7bisrKXI9QzEocixNMCgxLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiB2eXQodCl7dm4oKTt2YXIgZSxuLHI7Zm9yKHI9MCxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLHI9cisoZSE9bnVsbD9IaShlKTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiB3eXQodCl7dmFyIGUsbjtyZXR1cm4gbj0oVHYoKSxlPW5ldyByZCxlKSx0JiZNcigoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLG4pLG59ZnVuY3Rpb24gQWNuKHQpe3ZhciBlO3JldHVybiBlPW5ldyB5dCxlLmE9dCxlLmI9UGNuKHQpLGUuYz1QdChBZSx0ZSwyLDIsNiwxKSxlLmNbMF09YW5lKHQpLGUuY1sxXT1hbmUodCksZX1mdW5jdGlvbiBteXQodCxlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSx0Lm8uYy4kYigpO3JldHVybn1Oc3QodCxlKX1mdW5jdGlvbiBQSSh0LGUsbil7c3dpdGNoKG4uZyl7Y2FzZSAyOnQuYj1lO2JyZWFrO2Nhc2UgMTp0LmM9ZTticmVhaztjYXNlIDQ6dC5kPWU7YnJlYWs7Y2FzZSAzOnQuYT1lfX1mdW5jdGlvbiBVbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB3YjtjYXNlIDI6cmV0dXJuIHUwO2Nhc2UgMzpyZXR1cm4gUU87ZGVmYXVsdDpyZXR1cm4gWk99fWZ1bmN0aW9uIExjbih0KXtzd2l0Y2godShRKHQsKFRlKCksY3UpKSwxNjMpLmcpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gV25lKCl7V25lPVoseTJlPVdyKChvbygpLGN0KG90KEFsdCwxKSxhZSwyNTYsMCxbUkcsYmgsdlMsakcsZjcsVjQsd1MsbDcsaDcsJEddKSkpfWZ1bmN0aW9uIEtuZSgpe0tuZT1aLHg0ZT1XcigoY2woKSxjdChvdChMQXQsMSksYWUsMjU5LDAsW003LGlOLFZWLGVBLFVWLEtWLFdWLHZmdCxyTl0pKSl9ZnVuY3Rpb24gWW5lKCl7WW5lPVoscHllPWJpKGF3KGF3KE9SKGJpKG5ldyBIcywodUUoKSxQUyksKGZfKCksd1YpKSxQTyksRWh0KSxUaHQpLEZTLENodCl9ZnVuY3Rpb24gdTIoKXt1Mj1aLHhsdD1uZXcgVGV0KEswLDApLHU3PW5ldyBUZXQoIklOQ09NSU5HX09OTFkiLDEpLEc0PW5ldyBUZXQoIk9VVEdPSU5HX09OTFkiLDIpfWZ1bmN0aW9uIHBpdCgpe3BpdD1aLEV1dD17Ym9vbGVhbjpmWWUsbnVtYmVyOnhLZSxzdHJpbmc6a0tlLG9iamVjdDpjb2UsZnVuY3Rpb246Y29lLHVuZGVmaW5lZDplS2V9fWZ1bmN0aW9uIFhuZSh0LGUpe19qKHQ+PTAsIk5lZ2F0aXZlIGluaXRpYWwgY2FwYWNpdHkiKSxfaihlPj0wLCJOb24tcG9zaXRpdmUgbG9hZCBmYWN0b3IiKSxZdSh0aGlzKX1mdW5jdGlvbiBiaXQodCxlLG4pe3JldHVybiB0Pj0xMjg/ITE6dDw2ND9hQyhQcyhNMCgxLHQpLG4pLDApOmFDKFBzKE0wKDEsdC02NCksZSksMCl9ZnVuY3Rpb24gTWNuKHQsZSl7cmV0dXJuIXR8fCFlfHx0PT1lPyExOnJ3KHQuYi5jLGUuYi5jK2UuYi5iKTwwJiZydyhlLmIuYyx0LmIuYyt0LmIuYik8MH1mdW5jdGlvbiBRbmUodCl7dmFyIGUsbixyO3JldHVybiBuPXQubixyPXQubyxlPXQuZCxuZXcgaWgobi5hLWUuYixuLmItZS5kLHIuYSsoZS5iK2UuYyksci5iKyhlLmQrZS5hKSl9ZnVuY3Rpb24gSWNuKHQpe3ZhciBlLG4scixzO2ZvcihuPXQuYSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxycmUodCxlLChiZSgpLG1yKSkscnJlKHQsZSxObil9ZnVuY3Rpb24gRGNuKHQpe3ZhciBlLG4scixzO2ZvcihlPSh0Lmo9PW51bGwmJih0Lmo9KFQ4KCkscz1rdXQuY2UodCksRzFuKHMpKSksdC5qKSxuPTAscj1lLmxlbmd0aDtuPHI7KytuKTt9ZnVuY3Rpb24gWTgodCl7dmFyIGUsbixyO3JldHVybiBlPX50LmwrMSZ1bCxuPX50Lm0rKGU9PTA/MTowKSZ1bCxyPX50LmgrKGU9PTAmJm49PTA/MTowKSZXMCxydShlLG4scil9ZnVuY3Rpb24gT2NuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHUoSm4odC5nLGUuYSksNDYpLmEsNjUpLHI9dSh1KEpuKHQuZyxlLmIpLDQ2KS5hLDY1KSx1bGUobixyKX1mdW5jdGlvbiB5eXQodCxlLG4pe3ZhciByO2lmKHI9dC5nYygpLGU+cil0aHJvdyBydChuZXcgam0oZSxyKSk7cmV0dXJuIHQuaGkoKSYmKG49Z1F0KHQsbikpLHQuVmgoZSxuKX1mdW5jdGlvbiBGSSh0LGUsbil7cmV0dXJuIG49PW51bGw/KCF0LnEmJih0LnE9bmV3IENyKSxVeCh0LnEsZSkpOighdC5xJiYodC5xPW5ldyBDciksa2kodC5xLGUsbikpLHR9ZnVuY3Rpb24gSnQodCxlLG4pe3JldHVybiBuPT1udWxsPyghdC5xJiYodC5xPW5ldyBDciksVXgodC5xLGUpKTooIXQucSYmKHQucT1uZXcgQ3IpLGtpKHQucSxlLG4pKSx0fWZ1bmN0aW9uIFpuZSh0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBfJCxMbyhuLHQpLEp0KG4sKEdwKCksQzYpLHQpLGU9bmV3IENyLFBtbih0LG4sZSksbzRuKHQsbixlKSxufWZ1bmN0aW9uIE5jbih0KXt5NCgpO3ZhciBlLG4scjtmb3Iobj1QdChVcyx0ZSw4LDIsMCwxKSxyPTAsZT0wO2U8MjtlKyspcis9LjUsbltlXT1wZm4ocix0KTtyZXR1cm4gbn1mdW5jdGlvbiBKbmUodCxlKXt2YXIgbixyLHMsbztmb3Iobj0hMSxyPXQuYVtlXS5sZW5ndGgsbz0wO288ci0xO28rKylzPW8rMSxuPW58WmxuKHQsZSxvLHMpO3JldHVybiBufWZ1bmN0aW9uIFg4KHQsZSxuLHIscyl7dmFyIG8saDtmb3IoaD1uO2g8PXM7aCsrKWZvcihvPWU7bzw9cjtvKyspbDQodCxvLGgpfHxicSh0LG8saCwhMCwhMSl9ZnVuY3Rpb24gdHJlKHQsZSl7dGhpcy5iPXQscTMuY2FsbCh0aGlzLCh1KFN0KFd0KChqcCgpLExuKS5vKSwxMCksMTgpLGUuaSksZS5nKSx0aGlzLmE9KGhpdCgpLF9mdCl9ZnVuY3Rpb24geHl0KHQsZSl7dGhpcy5jPXQsdGhpcy5kPWUsdGhpcy5iPXRoaXMuZC90aGlzLmMuYy5IZCgpLmdjKCl8MCx0aGlzLmE9dGhpcy5kJXRoaXMuYy5jLkhkKCkuZ2MoKX1mdW5jdGlvbiBreXQoKXt0aGlzLm89bnVsbCx0aGlzLms9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmE9bnVsbH1mdW5jdGlvbiBFeXQodCxlLG4pe3RoaXMucT1uZXcgYi5EYXRlLHRoaXMucS5zZXRGdWxsWWVhcih0K25iLGUsbiksdGhpcy5xLnNldEhvdXJzKDAsMCwwLDApLHlfKHRoaXMsMCl9ZnVuY3Rpb24gajAoKXtqMD1aLGdiPW5ldyBMZXQoSzAsMCksUEN0PW5ldyBMZXQoIk5PREVTX0FORF9FREdFUyIsMSksZmh0PW5ldyBMZXQoIlBSRUZFUl9FREdFUyIsMil9ZnVuY3Rpb24gUGNuKHQpe3ZhciBlO3JldHVybiB0PT0wPyJFdGMvR01UIjoodDwwPyh0PS10LGU9IkV0Yy9HTVQtIik6ZT0iRXRjL0dNVCsiLGUrcXRlKHQpKX1mdW5jdGlvbiBUeXQodCl7dmFyIGU7aWYodDwwKXJldHVybiBfYTtpZih0PT0wKXJldHVybiAwO2ZvcihlPUFfOyEoZSZ0KTtlPj49MSk7cmV0dXJuIGV9ZnVuY3Rpb24gZXJlKHQpe3ZhciBlLG47cmV0dXJuIG49bEQodC5oKSxuPT0zMj8oZT1sRCh0Lm0pLGU9PTMyP2xEKHQubCkrMzI6ZSsyMC0xMCk6bi0xMn1mdW5jdGlvbiBLQyh0KXt2YXIgZTtyZXR1cm4gZT10LmFbdC5iXSxlPT1udWxsP251bGw6KEppKHQuYSx0LmIsbnVsbCksdC5iPXQuYisxJnQuYS5sZW5ndGgtMSxlKX1mdW5jdGlvbiBucmUodCl7dmFyIGUsbjtyZXR1cm4gZT10LnQtdC5rW3Quby5wXSp0LmQrdC5qW3Quby5wXT50LmYsbj10LnUrdC5lW3Quby5wXSp0LmQ+dC5mKnQucyp0LmQsZXx8bn1mdW5jdGlvbiBweih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1uZXcgJHJ0KGUsbikscz1uZXcgJHQsdC5iPVdjZSh0LHQuYixyLHMpLHMuYnx8Kyt0LmMsdC5iLmI9ITEscy5kfWZ1bmN0aW9uIHJyZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKGg9UUMoZSxuKSxvPTAscz1oLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExKSxraSh0LmMscixkZShvKyspKX1mdW5jdGlvbiBVcCh0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksZS5nLmM9LWUuZy5jLWUuZy5iO3VxKHQpfWZ1bmN0aW9uIFdwKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU3KSxlLmQuYz0tZS5kLmMtZS5kLmI7UzV0KHQpfWZ1bmN0aW9uIEN5dCh0KXt2YXIgZTtyZXR1cm4oIXQuY3x8ISh0LkJiJjEpJiZ0LmMuRGImNjQpJiYoZT1MaCh0KSxFdChlLDg4KSYmKHQuYz11KGUsMjYpKSksdC5jfWZ1bmN0aW9uIHZpdCh0KXt2YXIgZSxuLHI7ZT1+dC5sKzEmdWwsbj1+dC5tKyhlPT0wPzE6MCkmdWwscj1+dC5oKyhlPT0wJiZuPT0wPzE6MCkmVzAsdC5sPWUsdC5tPW4sdC5oPXJ9ZnVuY3Rpb24gS28odCl7dmFyIGUsbixyLHMsbztmb3IoZT1uZXcgVGEscj10LHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGUuYSs9bi5hLGUuYis9bi5iO3JldHVybiBlfWZ1bmN0aW9uIF95dCh0LGUpe3ZuKCk7dmFyIG4scixzLG8saDtmb3IoaD0hMSxyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10saD1ofHQuRmMobik7cmV0dXJuIGh9ZnVuY3Rpb24gcjQodCl7eTQoKTt2YXIgZSxuO2ZvcihuPS0xNzk3NjkzMTM0ODYyMzE1N2UyOTIsZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0+biYmKG49dFtlXSk7cmV0dXJuIG59ZnVuY3Rpb24gaXJlKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1uZXcgbGUsSTV0KHQsZSxyLChiZSgpLEhuKSwhMCwhMSksSTV0KHQsbixyLEJuLCExLCExKSxyfWZ1bmN0aW9uIHdpdCh0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIG89bnVsbCxoPWUscz1VdihoLCJsYWJlbHMiKSxyPW5ldyBUVnQodCxuKSxvPShKcG4oci5hLHIuYixzKSxzKSxvfWZ1bmN0aW9uIEZjbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz13NXQodCxlLG4sciksIXMmJihzPUJ1bih0LG4scikscyYmIUU0KHQsZSxzKSk/bnVsbDpzfWZ1bmN0aW9uIEJjbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz1tNXQodCxlLG4sciksIXMmJihzPVBpdCh0LG4scikscyYmIUU0KHQsZSxzKSk/bnVsbDpzfWZ1bmN0aW9uIHNyZSh0LGUpe3ZhciBuO2ZvcihuPTA7bjx0LmEuYS5sZW5ndGg7bisrKWlmKCF1KGVZdCh0LmEsbiksMTY5KS5MYihlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBSY24odCxlLG4pe2lmKEFyKGUpLG4uT2IoKSlmb3IoUWJ0KGUsV1l0KG4uUGIoKSkpO24uT2IoKTspUWJ0KGUsdC5hKSxRYnQoZSxXWXQobi5QYigpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU3l0KHQpe3ZuKCk7dmFyIGUsbixyO2ZvcihyPTEsbj10LktjKCk7bi5PYigpOyllPW4uUGIoKSxyPTMxKnIrKGUhPW51bGw/SGkoZSk6MCkscj1yfDA7cmV0dXJuIHJ9ZnVuY3Rpb24gamNuKHQsZSxuLHIscyl7dmFyIG87cmV0dXJuIG89aDV0KHQsZSksbiYmdml0KG8pLHMmJih0PXhmbih0LGUpLHI/b2I9WTgodCk6b2I9cnUodC5sLHQubSx0LmgpKSxvfWZ1bmN0aW9uICRjbih0LGUpe3ZhciBuO3RyeXtlLlZkKCl9Y2F0Y2gocil7aWYocj1XaShyKSxFdChyLDc4KSluPXIsdC5jW3QuYy5sZW5ndGhdPW47ZWxzZSB0aHJvdyBydChyKX19ZnVuY3Rpb24gYXJlKHQsZSxuKXt2YXIgcixzO3JldHVybiBFdChlLDE0NCkmJm4/KHI9dShlLDE0NCkscz1uLHQuYVtyLmJdW3MuYl0rdC5hW3MuYl1bci5iXSk6MH1mdW5jdGlvbiBBeXQodCxlKXtzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiEhdC5lJiZ0LmUuaSE9MDtjYXNlIDg6cmV0dXJuISF0LmQmJnQuZC5pIT0wfXJldHVybiBmM3QodCxlKX1mdW5jdGlvbiB6Y24odCxlKXtzd2l0Y2goZS5nKXtjYXNlIDA6RXQodC5iLDYzMSl8fCh0LmI9bmV3IE1uZSk7YnJlYWs7Y2FzZSAxOkV0KHQuYiw2MzIpfHwodC5iPW5ldyBJS3QpfX1mdW5jdGlvbiBxY24odCxlKXtmb3IoO3QuZz09bnVsbCYmIXQuYz9Gd3QodCk6dC5nPT1udWxsfHx0LmkhPTAmJnUodC5nW3QuaS0xXSw0NykuT2IoKTspRFllKGUsYXEodCkpfWZ1bmN0aW9uIG9yZSh0LGUsbil7dC5nPVBzdCh0LGUsKGJlKCksSG4pLHQuYiksdC5kPVBzdCh0LG4sSG4sdC5iKSwhKHQuZy5jPT0wfHx0LmQuYz09MCkmJl9hZSh0KX1mdW5jdGlvbiBjcmUodCxlLG4pe3QuZz1Qc3QodCxlLChiZSgpLEJuKSx0LmopLHQuZD1Qc3QodCxuLEJuLHQuaiksISh0LmcuYz09MHx8dC5kLmM9PTApJiZfYWUodCl9ZnVuY3Rpb24gSGNuKHQsZSxuKXtyZXR1cm4hajkoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuYywxNikpLG5ldyBadChuZXcgdVZ0KGUsbikpKSkuc2QoKFdiKCksSkUpKX1mdW5jdGlvbiBtaXQodCl7dmFyIGU7cmV0dXJuICRwKHQpLGU9bmV3IFRpLHQuYS5zZChlKT8odTgoKSxuZXcgZ1IoT24oZS5hKSkpOih1OCgpLHU4KCksV0gpfWZ1bmN0aW9uIEx5dCh0KXt2YXIgZTtyZXR1cm4gdC5iPD0wPyExOihlPWNkKCJNTHlkaEhtc1NEa0siLEV1KGJhKHQuYywwKSkpLGU+MXx8ZT49MCYmdC5iPDMpfWZ1bmN0aW9uIEJJKHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgRHUscj1laSh0LDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxoOChlLDAsbmV3IHlvKG4pKTtyZXR1cm4gZX1mdW5jdGlvbiBsMih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksZS5mLiRiKCk7dktlKHQuYix0KSxOY2UodCl9ZnVuY3Rpb24gSGkodCl7cmV0dXJuIGVhKHQpP0JnKHQpOk5tKHQpP284KHQpOk9tKHQpPyhPbih0KSx0PzEyMzE6MTIzNyk6UXZ0KHQpP3QuSGIoKTpVdnQodCk/SXYodCk6TXd0KHQpfWZ1bmN0aW9uIHNsKHQpe3JldHVybiBlYSh0KT9BZTpObSh0KT9jYTpPbSh0KT9CczpRdnQodCl8fFV2dCh0KT90LmdtOnQuZ218fEFycmF5LmlzQXJyYXkodCkmJm90KGJnZSwxKXx8YmdlfWZ1bmN0aW9uIHVyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBsWjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGxyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyB1WjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIE15dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgMDohdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksbHoodC5vLG4pO3JldHVybn1qc3QodCxlLG4pfWZ1bmN0aW9uIHlpdCh0LGUsbil7dGhpcy5nPXQsdGhpcy5lPW5ldyBUYSx0aGlzLmY9bmV3IFRhLHRoaXMuZD1uZXcgUWksdGhpcy5iPW5ldyBRaSx0aGlzLmE9ZSx0aGlzLmM9bn1mdW5jdGlvbiB4aXQodCxlLG4scil7dGhpcy5iPW5ldyBsZSx0aGlzLm49bmV3IGxlLHRoaXMuaT1yLHRoaXMuaj1uLHRoaXMucz10LHRoaXMudD1lLHRoaXMucj0wLHRoaXMuZD0wfWZ1bmN0aW9uIGgyKHQpe3RoaXMuZT10LHRoaXMuZD1uZXcgaW10KHRoaXMuZS5nKSx0aGlzLmE9dGhpcy5kLHRoaXMuYj1neXQodGhpcyksdGhpcy4kbW9kQ291bnQ9dC4kbW9kQ291bnR9ZnVuY3Rpb24gR2NuKHQpe2Zvcig7IXQuZHx8IXQuZC5PYigpOylpZih0LmImJiFOOSh0LmIpKXQuZD11KEZ4KHQuYiksNDcpO2Vsc2UgcmV0dXJuIG51bGw7cmV0dXJuIHQuZH1mdW5jdGlvbiBWY24odCl7cmV0dXJuIHVlKHQuYywoUXgoKSxMM2UpKSwkbXQodC5hLFh0KHllKERlKChWaXQoKSxvVikpKSkpP25ldyBGWjpuZXcgVSR0KHQpfWZ1bmN0aW9uIEl5dCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEExZTtkZWZhdWx0OmNhc2UgMjpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIE1vdDtjYXNlIDQ6cmV0dXJuIEwxZX19ZnVuY3Rpb24gVWNuKCl7Z2koKTt2YXIgdDtyZXR1cm4gRGZ0fHwodD1lUWUodGIoIk0iLCEwKSksdD1Caih0YigiTSIsITEpLHQpLERmdD10LERmdCl9ZnVuY3Rpb24gRHl0KHQsZSl7dmFyIG4scixzO2ZvcihzPXQuYjtzOyl7aWYobj10LmEudWUoZSxzLmQpLG49PTApcmV0dXJuIHM7cj1uPDA/MDoxLHM9cy5hW3JdfXJldHVybiBudWxsfWZ1bmN0aW9uIFdjbih0LGUsbil7dmFyIHIscztyPShGbigpLCEhSmJ0KG4pKSxzPXUoZS54YyhyKSwxNSksc3x8KHM9bmV3IGxlLGUuemMocixzKSkscy5GYyhuKX1mdW5jdGlvbiBLY24odCxlKXt2YXIgbixyO3JldHVybiBuPXUocWUodCwoS3N0KCksUk8pKSwxOSkuYSxyPXUocWUoZSxSTyksMTkpLmEsbj09cnx8bjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24gT3l0KHQsZSl7cmV0dXJuIExjZSh0LGUpPyhsbih0LmIsdShRKGUsKHNlKCksTnkpKSwyMSksZSksbmkodC5hLGUpLCEwKTohMX1mdW5jdGlvbiBZY24odCl7dmFyIGUsbjtlPXUoUSh0LChzZSgpLFp1KSksMTApLGUmJihuPWUuYyx2dShuLmEsZSksbi5hLmMubGVuZ3RoPT0wJiZ2dShGYShlKS5iLG4pKX1mdW5jdGlvbiBocmUodCl7cmV0dXJuIFIxP1B0KFBnZSxkZmUsNTcyLDAsMCwxKTp1KEQxKHQuYSxQdChQZ2UsZGZlLDU3Mix0LmEuYy5sZW5ndGgsMCwxKSksODQyKX1mdW5jdGlvbiBYY24odCxlLG4scil7cmV0dXJuIFFqKCksbmV3IFp0dChjdChvdChNMiwxKSxEcSw0MiwwLFsoaHN0KHQsZSksbmV3IF92KHQsZSkpLChoc3QobixyKSxuZXcgX3YobixyKSldKSl9ZnVuY3Rpb24gaTQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9KHI9bmV3IFd0dCxyKSxwbyhzLGUsbiksTXIoKCF0LnEmJih0LnE9bmV3IGhlKFZoLHQsMTEsMTApKSx0LnEpLHMpLHN9ZnVuY3Rpb24ga2l0KHQpe3ZhciBlLG4scixzO2ZvcihzPWtZZShQNGUsdCksbj1zLmxlbmd0aCxyPVB0KEFlLHRlLDIsbiw2LDEpLGU9MDtlPG47KytlKXJbZV09c1tlXTtyZXR1cm4gcn1mdW5jdGlvbiBzNCh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxoPW5ldyBKWXQodCksbi5RZShoKSx0eW4oaCk7WXUodC5mKX1mdW5jdGlvbiBFaXQodCxlKXt2YXIgbjtyZXR1cm4gZT09PXQ/ITA6RXQoZSwyMjQpPyhuPXUoZSwyMjQpLHlpKHQuWmIoKSxuLlpiKCkpKTohMX1mdW5jdGlvbiBOeXQodCxlKXt2YXIgbjtlKjIrMT49dC5iLmMubGVuZ3RofHwoTnl0KHQsMiplKzEpLG49MiplKzIsbjx0LmIuYy5sZW5ndGgmJk55dCh0LG4pLGhvZSh0LGUpKX1mdW5jdGlvbiBmcmUodCxlLG4pe3ZhciByLHM7dGhpcy5nPXQsdGhpcy5jPWUsdGhpcy5hPXRoaXMsdGhpcy5kPXRoaXMscz1LZWUobikscj1QdChwZ2UsTEQsMzMwLHMsMCwxKSx0aGlzLmI9cn1mdW5jdGlvbiBQeXQodCxlLG4pe3ZhciByO2ZvcihyPW4tMTtyPj0wJiZ0W3JdPT09ZVtyXTtyLS0pO3JldHVybiByPDA/MDpnZXQoUHModFtyXSxjbyksUHMoZVtyXSxjbykpPy0xOjF9ZnVuY3Rpb24gUWNuKHQsZSl7dmFyIG4scjtmb3Iocj1laSh0LDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwyMTQpLG4uZS5sZW5ndGg+MCYmKGUudGQobiksbi5pJiZWdW4obikpfWZ1bmN0aW9uIFRpdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9dShJbih0LmEsNCksMTI2KSxuPVB0KFRmdCxKY3QsNDE1LGUsMCwxKSxyIT1udWxsJiZJYyhyLDAsbiwwLHIubGVuZ3RoKSxufWZ1bmN0aW9uIGRyZSh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBlYXQoKHQuZiYyNTYpIT0wLHQuaSx0LmEsdC5kLCh0LmYmMTYpIT0wLHQuaix0LmcsZSksdC5lIT1udWxsfHwobi5jPXQpLG59ZnVuY3Rpb24gWmNuKHQsZSl7dmFyIG4scjtmb3Iocj10LlpiKCkuQ2MoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSwxNCksbi5IYyhlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDaXQodCxlLG4scixzKXt2YXIgbyxoO2ZvcihoPW47aDw9cztoKyspZm9yKG89ZTtvPD1yO28rKylpZihsNCh0LG8saCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZ3JlKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoT24obiksaD0hMSxvPXQuWmMoZSkscz1uLktjKCk7cy5PYigpOylyPXMuUGIoKSxvLlJiKHIpLGg9ITA7cmV0dXJuIGh9ZnVuY3Rpb24gSmNuKHQsZSl7dmFyIG47cmV0dXJuIHQ9PT1lPyEwOkV0KGUsODMpPyhuPXUoZSw4MyksRjR0KFB2KHQpLG4udmMoKSkpOiExfWZ1bmN0aW9uIHByZSh0LGUsbil7dmFyIHIscztmb3Iocz1uLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDQyKSx0LnJlKGUsci5kZCgpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBicmUodCxlLG4pe3JldHVybiB0LmRbZS5wXVtuLnBdfHwoWWhuKHQsZSxuKSx0LmRbZS5wXVtuLnBdPSEwLHQuZFtuLnBdW2UucF09ITApLHQuYVtlLnBdW24ucF19ZnVuY3Rpb24gUTgodCxlKXtpZighdC5haSgpJiZlPT1udWxsKXRocm93IHJ0KG5ldyBQbigiVGhlICdubyBudWxsJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkIikpO3JldHVybiBlfWZ1bmN0aW9uIFo4KHQsZSl7dC5EPT1udWxsJiZ0LkIhPW51bGwmJih0LkQ9dC5CLHQuQj1udWxsKSxyaXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKSx0LkMmJnQueWsobnVsbCl9ZnVuY3Rpb24gdHVuKHQsZSl7dmFyIG47cmV0dXJuIXR8fHQ9PWV8fCFWcyhlLChzZSgpLEl3KSk/ITE6KG49dShRKGUsKHNlKCksSXcpKSwxMCksbiE9dCl9ZnVuY3Rpb24gX2l0KHQpe3N3aXRjaCh0Lmkpe2Nhc2UgMjpyZXR1cm4hMDtjYXNlIDE6cmV0dXJuITE7Y2FzZS0xOisrdC5jO2RlZmF1bHQ6cmV0dXJuIHQucGwoKX19ZnVuY3Rpb24gdnJlKHQpe3N3aXRjaCh0Lmkpe2Nhc2UtMjpyZXR1cm4hMDtjYXNlLTE6cmV0dXJuITE7Y2FzZSAxOi0tdC5jO2RlZmF1bHQ6cmV0dXJuIHQucWwoKX19ZnVuY3Rpb24gd3JlKHQpe29RdC5jYWxsKHRoaXMsIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgaW5kaXZpZHVhbCBzcGFjaW5ncy4iLHQpfWZ1bmN0aW9uIENsKCl7Q2w9WixZbD1uZXcgWlIoIkVMSyIsMCksUEF0PW5ldyBaUigiSlNPTiIsMSksTkF0PW5ldyBaUigiRE9UIiwyKSxGQXQ9bmV3IFpSKCJTVkciLDMpfWZ1bmN0aW9uIFJJKCl7Ukk9WixDVj1uZXcgQmV0KEswLDApLHBfdD1uZXcgQmV0KCJSQURJQUxfQ09NUEFDVElPTiIsMSksYl90PW5ldyBCZXQoIldFREdFX0NPTVBBQ1RJT04iLDIpfWZ1bmN0aW9uIEkxKCl7STE9WixNRXQ9bmV3IHBldCgiQ09OQ1VSUkVOVCIsMCksR2w9bmV3IHBldCgiSURFTlRJVFlfRklOSVNIIiwxKSxMeT1uZXcgcGV0KCJVTk9SREVSRUQiLDIpfWZ1bmN0aW9uIFNpdCgpe1NpdD1aLHM3dD0oQVIoKSxSdXQpLGk3dD1uZXcgbW4odDZ0LHM3dCksT3BlPW5ldyBHaShlNnQpLE5wZT1uZXcgR2kobjZ0KSxQcGU9bmV3IEdpKHI2dCl9ZnVuY3Rpb24gSjgoKXtKOD1aLHdUdD1uZXcgVTUsbVR0PW5ldyB6WSxXYmU9bmV3IEFMLFViZT1uZXcgcVksVmJlPW5ldyBIWSx2VHQ9KE9uKFZiZSksbmV3IHBuKX1mdW5jdGlvbiB0RSgpe3RFPVosdmh0PW5ldyBEZXQoIkNPTlNFUlZBVElWRSIsMCkscUN0PW5ldyBEZXQoIkNPTlNFUlZBVElWRV9TT0ZUIiwxKSxJUz1uZXcgRGV0KCJTTE9QUFkiLDIpfWZ1bmN0aW9uIGJ6KCl7Yno9WixFQXQ9bmV3IE12KDE1KSxvNGU9bmV3IGVvKChjaSgpLHEyKSxFQXQpLEtTPXo2LG1BdD1HM2UseUF0PXoyLGtBdD1hNSx4QXQ9alZ9ZnVuY3Rpb24gQWl0KHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9bmV3IFFpLG89ZWkobiwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksOCksbmkocixuZXcgeW8ocykpO2dyZSh0LGUscil9ZnVuY3Rpb24gZXVuKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9UHQoVXMsdGUsOCx0LmIsMCwxKSxuPWVpKHQsMCk7bi5iIT1uLmQuYzspcltlKytdPXUodGkobiksOCk7cmV0dXJuIHJ9ZnVuY3Rpb24gRnl0KHQpe3ZhciBlO3JldHVybiBlPSghdC5hJiYodC5hPW5ldyBoZShlZyx0LDksNSkpLHQuYSksZS5pIT0wP21ZZSh1KFN0KGUsMCksNjc4KSk6bnVsbH1mdW5jdGlvbiBudW4odCxlKXt2YXIgbjtyZXR1cm4gbj1PYSh0LGUpLGdldCh5cnQodCxlKSwwKXxQWWUoeXJ0KHQsbiksMCk/bjpPYShJcSx5cnQoem0obiw2MyksMSkpfWZ1bmN0aW9uIHJ1bih0LGUpe3ZhciBuO249RGUoKFZpdCgpLG9WKSkhPW51bGwmJmUud2coKSE9bnVsbD9YdCh5ZShlLndnKCkpKS9YdCh5ZShEZShvVikpKToxLGtpKHQuYixlLG4pfWZ1bmN0aW9uIGl1bih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dSh0LmQuQmMoZSksMTQpLG4/KHI9dC5lLmhjKCksci5HYyhuKSx0LmUuZC09bi5nYygpLG4uJGIoKSxyKTpudWxsfWZ1bmN0aW9uIEJ5dCh0LGUpe3ZhciBuLHI7aWYocj10LmNbZV0sciE9MClmb3IodC5jW2VdPTAsdC5kLT1yLG49ZSsxO248dC5hLmxlbmd0aDspdC5hW25dLT1yLG4rPW4mLW59ZnVuY3Rpb24gbXJlKHQpe3ZhciBlO2lmKGU9dC5hLmMubGVuZ3RoLGU+MClyZXR1cm4gYjgoZS0xLHQuYS5jLmxlbmd0aCksQWcodC5hLGUtMSk7dGhyb3cgcnQobmV3IFZ6dCl9ZnVuY3Rpb24gc3VuKHQsZSxuKXtpZihlPDApdGhyb3cgcnQobmV3IG1vKHExZStlKSk7ZTx0LmouYy5sZW5ndGg/YWgodC5qLGUsbik6KEFadCh0LGUpLHVlKHQuaixuKSl9ZnVuY3Rpb24geXJlKHQsZSxuKXtpZih0PmUpdGhyb3cgcnQobmV3IFBuKEZxK3QrZ2ZlK2UpKTtpZih0PDB8fGU+bil0aHJvdyBydChuZXcgUXB0KEZxK3Qrenh0K2Uranh0K24pKX1mdW5jdGlvbiB4cmUodCl7aWYoIXQuYXx8ISh0LmEuaSY4KSl0aHJvdyBydChuZXcgRm8oIkVudW1lcmF0aW9uIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrdC5mKSl9ZnVuY3Rpb24gZXkodCl7dmFyIGU7Kyt0LmosdC5pPT0wP3QuZz1udWxsOnQuaTx0LmcubGVuZ3RoJiYoZT10LmcsdC5nPXQucmkodC5pKSxJYyhlLDAsdC5nLDAsdC5pKSl9ZnVuY3Rpb24gYXVuKHQsZSl7dmFyIG4scjtmb3Iobj10LmEubGVuZ3RoLTEsdC5jPXQuYy0xJm47ZSE9dC5jOylyPWUrMSZuLEppKHQuYSxlLHQuYVtyXSksZT1yO0ppKHQuYSx0LmMsbnVsbCl9ZnVuY3Rpb24gb3VuKHQsZSl7dmFyIG4scjtmb3Iobj10LmEubGVuZ3RoLTE7ZSE9dC5iOylyPWUtMSZuLEppKHQuYSxlLHQuYVtyXSksZT1yO0ppKHQuYSx0LmIsbnVsbCksdC5iPXQuYisxJm59ZnVuY3Rpb24gUnl0KHQsZSxuKXt2YXIgcixzO3JldHVybiBVbShlLHQuYy5sZW5ndGgpLHI9bi5QYygpLHM9ci5sZW5ndGgscz09MD8hMTooU3Z0KHQuYyxlLHIpLCEwKX1mdW5jdGlvbiBjdW4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKCFCS3QodFtlXSkpcmV0dXJuIHRbZV07cmV0dXJuIG51bGx9ZnVuY3Rpb24ga3JlKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iocz1uLG89MCxoPXMubGVuZ3RoO288aDsrK28paWYocj1zW29dLHQuYi5yZShlLHIuY2QoKSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gdnoodCl7dmFyIGUsbixyLHMsbztmb3Iobz0xLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvPTMxKm8rKGUhPW51bGw/SGkoZSk6MCksbz1vfDA7cmV0dXJuIG99ZnVuY3Rpb24gV3IodCl7dmFyIGUsbixyLHMsbztmb3IoZT17fSxyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZVsiOiIrKG4uZiE9bnVsbD9uLmY6IiIrbi5nKV09bjtyZXR1cm4gZX1mdW5jdGlvbiB1dW4odCl7dmFyIGU7Zm9yKEFyKHQpLGd2dCghMCwibnVtYmVyVG9BZHZhbmNlIG11c3QgYmUgbm9ubmVnYXRpdmUiKSxlPTA7ZTwwJiZ6cih0KTtlKyspTHIodCk7cmV0dXJuIGV9ZnVuY3Rpb24gRXJlKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IGFyKGxyKHQuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSwxNyksZS5jLmk9PWUuZC5pfHwrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gVHJlKHQsZSl7dmFyIG4scixzO249dCxzPTA7ZG97aWYobj09ZSlyZXR1cm4gcztpZihyPW4uZSwhcil0aHJvdyBydChuZXcgdU0pO249RmEociksKytzfXdoaWxlKCEwKX1mdW5jdGlvbiBDcmUodCxlKXt2YXIgbixyLHM7Zm9yKHM9ZS10LmYscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDQ0MyksdmllKG4sbi5lLG4uZitzKTt0LmY9ZX1mdW5jdGlvbiBMaXQodCxlLG4pe3JldHVybiBiLk1hdGguYWJzKGUtdCk8aEh8fGIuTWF0aC5hYnMobi10KTxoSD8hMDplLXQ+aEg/dC1uPmhIOm4tdD5oSH1mdW5jdGlvbiBNaXQodCxlKXtyZXR1cm4hdHx8ZSYmIXQuanx8RXQodCwxMjQpJiZ1KHQsMTI0KS5hLmI9PTA/MDp0LlJlKCl9ZnVuY3Rpb24gd3oodCxlKXtyZXR1cm4hdHx8ZSYmIXQua3x8RXQodCwxMjQpJiZ1KHQsMTI0KS5hLmE9PTA/MDp0LlNlKCl9ZnVuY3Rpb24gakkodCl7cmV0dXJuIEpwKCksdDwwP3QhPS0xP25ldyBEM3QoLTEsLXQpOl91dDp0PD0xMD93RXRbcHModCldOm5ldyBEM3QoMSx0KX1mdW5jdGlvbiBqeXQodCl7dGhyb3cgcGl0KCkscnQobmV3IFJxdCgiVW5leHBlY3RlZCB0eXBlb2YgcmVzdWx0ICciK3QrIic7IHBsZWFzZSByZXBvcnQgdGhpcyBidWcgdG8gdGhlIEdXVCB0ZWFtIikpfWZ1bmN0aW9uIF9yZSh0KXtHcXQoKSx1aih0aGlzKSxuJCh0aGlzKSx0aGlzLmU9dCxqY2UodGhpcyx0KSx0aGlzLmc9dD09bnVsbD9UdTokbyh0KSx0aGlzLmE9IiIsdGhpcy5iPXQsdGhpcy5hPSIifWZ1bmN0aW9uICR5dCgpe3RoaXMuYT1uZXcgb1osdGhpcy5mPW5ldyBPJHQodGhpcyksdGhpcy5iPW5ldyBOJHQodGhpcyksdGhpcy5pPW5ldyBQJHQodGhpcyksdGhpcy5lPW5ldyBGJHQodGhpcyl9ZnVuY3Rpb24gU3JlKCl7Z0tlLmNhbGwodGhpcyxuZXcgRW10KFFtKDE2KSkpLEJsKDIsWWhlKSx0aGlzLmI9Mix0aGlzLmE9bmV3IGt3dChudWxsLG51bGwsMCxudWxsKSxjTSh0aGlzLmEsdGhpcy5hKX1mdW5jdGlvbiBZQygpe1lDPVosb2h0PW5ldyBBZXQoIkRVTU1ZX05PREVfT1ZFUiIsMCksX0N0PW5ldyBBZXQoIkRVTU1ZX05PREVfVU5ERVIiLDEpLHVWPW5ldyBBZXQoIkVRVUFMIiwyKX1mdW5jdGlvbiBJaXQoKXtJaXQ9WixYdXQ9dVF0KGN0KG90KFdTLDEpLGFlLDEwMywwLFsoYW8oKSxqaCksa2ZdKSksUXV0PXVRdChjdChvdChXUywxKSxhZSwxMDMsMCxbWjAsUTBdKSl9ZnVuY3Rpb24gRGl0KHQpe3JldHVybihiZSgpLF91KS5IYyh0LmopP1h0KHllKFEodCwoc2UoKSxnNykpKSk6S28oY3Qob3QoVXMsMSksdGUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpLmJ9ZnVuY3Rpb24gbHVuKHQpe3ZhciBlLG4scixzO2ZvcihyPXQuYi5hLG49ci5hLmVjKCkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNTYxKSxzPW5ldyBtY2UoZSx0LmUsdC5mKSx1ZSh0Lmcscyl9ZnVuY3Rpb24gZjIodCxlKXt2YXIgbixyLHM7cj10Lm5rKGUsbnVsbCkscz1udWxsLGUmJihzPSh0OCgpLG49bmV3IHd2LG4pLFA4KHMsdC5yKSkscj1PMSh0LHMsciksciYmci5GaSgpfWZ1bmN0aW9uIGh1bih0LGUpe3ZhciBuLHI7Zm9yKHI9b2wodC5kLDEpIT0wLG49ITA7bjspbj0hMSxuPWUuYy5UZihlLmUsciksbj1ufHBEKHQsZSxyLCExKSxyPSFyO2l5dCh0KX1mdW5jdGlvbiB6eXQodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9ITEsbj1lLnEuZCxlLmQ8dC5iJiYocz1NY2UoZS5xLHQuYiksZS5xLmQ+cyYmKEpzZShlLnEscykscj1uIT1lLnEuZCkpLHJ9ZnVuY3Rpb24gQXJlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztyZXR1cm4gdz1lLmksaz1lLmoscj10LmYscz1yLmksbz1yLmosaD13LXMsZD1rLW8sbj1iLk1hdGguc3FydChoKmgrZCpkKSxufWZ1bmN0aW9uIHF5dCh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9RHoodCkscnx8KG49KFRhdCgpLHRvZShlKSkscj1uZXcgRnp0KG4pLE1yKHIuVmsoKSx0KSkscn1mdW5jdGlvbiAkSSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dSh0LmMuQmMoZSksMTQpLG4/KHI9dC5oYygpLHIuR2MobiksdC5kLT1uLmdjKCksbi4kYigpLHQubWMocikpOnQuamMoKX1mdW5jdGlvbiBMcmUodCxlKXt2YXIgbjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHQ9PShScihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE1yZSh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodD09KFJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZnVuKHQpe3ZhciBlLG47aWYodD09bnVsbClyZXR1cm4hMTtmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpZighQkt0KHRbZV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIElyZSh0KXt2YXIgZTtpZih0LmMhPTApcmV0dXJuIHQuYztmb3IoZT0wO2U8dC5hLmxlbmd0aDtlKyspdC5jPXQuYyozMysodC5hW2VdJi0xKTtyZXR1cm4gdC5jPXQuYyp0LmUsdC5jfWZ1bmN0aW9uIG16KHQpe3ZhciBlO3JldHVybiBRbih0LmEhPXQuYiksZT10LmQuYVt0LmFdLG9XdCh0LmI9PXQuZC5jJiZlIT1udWxsKSx0LmM9dC5hLHQuYT10LmErMSZ0LmQuYS5sZW5ndGgtMSxlfWZ1bmN0aW9uIGR1bih0KXt2YXIgZTtpZighKHQuYy5jPDA/dC5hPj10LmMuYjp0LmE8PXQuYy5iKSl0aHJvdyBydChuZXcgbGMpO3JldHVybiBlPXQuYSx0LmErPXQuYy5jLCsrdC5iLGRlKGUpfWZ1bmN0aW9uIGd1bih0KXt2YXIgZTtyZXR1cm4gZT1uZXcgY2VlKHQpLGFJKHQuYSxNYmUsbmV3IHdsKGN0KG90KGdPLDEpLEllLDM2OSwwLFtlXSkpKSxlLmQmJnVlKGUuZixlLmQpLGUuZn1mdW5jdGlvbiBPaXQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IHUydCh0LmEpLExvKGUsdCksSnQoZSwoc2UoKSxfaSksdCksZS5vLmE9dC5nLGUuby5iPXQuZixlLm4uYT10LmksZS5uLmI9dC5qLGV9ZnVuY3Rpb24gcHVuKHQsZSxuLHIpe3ZhciBzLG87Zm9yKG89dC5LYygpO28uT2IoKTspcz11KG8uUGIoKSw3MCkscy5uLmE9ZS5hKyhyLmEtcy5vLmEpLzIscy5uLmI9ZS5iLGUuYis9cy5vLmIrbn1mdW5jdGlvbiBidW4odCxlLG4pe3ZhciByLHM7Zm9yKHM9ZS5hLmEuZWMoKS5LYygpO3MuT2IoKTspaWYocj11KHMuUGIoKSw1NykscVh0KHQscixuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2dW4odCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LnIpO24uYTxuLmMuYy5sZW5ndGg7KWlmKGU9dShKKG4pLDEwKSx0Lm5bZS5wXTw9MClyZXR1cm4gZTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBEcmUodCl7dmFyIGUsbixyLHM7Zm9yKHM9bmV3IHFzLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMzMpLGU9X3ZuKG4pLFVhKHMsZSk7cmV0dXJuIHN9ZnVuY3Rpb24gd3VuKHQpe3ZhciBlO3JldHVybiBlPWlqKHVtZSksdShRKHQsKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksZjcpKSYmYmkoZSwoV2EoKSxvdSksKHJvKCkseEcpKSxlfWZ1bmN0aW9uIG11bih0LGUsbil7dmFyIHI7cj1uZXcgQm9lKHQsZSksbG4odC5yLGUuSGYoKSxyKSxuJiYhVEModC51KSYmKHIuYz1uZXcgaVF0KHQuZCksbXUoZS53ZigpLG5ldyB3bihyKSkpfWZ1bmN0aW9uIHljKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dC1lLCFpc05hTihuKSk/bjpuNHQoQm8odCk/U2godCk6dCxCbyhlKT9TaChlKTplKX1mdW5jdGlvbiB5dW4odCxlKXtyZXR1cm4gZTx0Lmxlbmd0aCYmKFJyKGUsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlKSE9NjMpJiYoUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpIT0zNSl9ZnVuY3Rpb24gT3JlKHQsZSxuLHIpe3ZhciBzLG87dC5hPWUsbz1yPzA6MSx0LmY9KHM9bmV3IEZhZSh0LmMsdC5hLG4sbyksbmV3IGR1ZShuLHQuYSxzLHQuZSx0LmIsdC5jPT0oWnYoKSxEUykpKX1mdW5jdGlvbiBIeXQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgUXModCwxLDEscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIE5yZSh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBRcyh0LDEsMyxzLGUpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gUHJlKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuZix0LmY9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IFFzKHQsMSwwLHMsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBLcCh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBvPShzPXQ/RHoodCk6bnVsbCxhb2UoKHI9ZSxzJiZzLlhrKCkscikpKSxvPT1lJiYobj1Eeih0KSxuJiZuLlhrKCkpLG99ZnVuY3Rpb24gR3l0KHQsZSl7dmFyIG4scixzO2ZvcihzPTEsbj10LHI9ZT49MD9lOi1lO3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihzKj1uLHItPTEpO3JldHVybiBlPDA/MS9zOnN9ZnVuY3Rpb24geHVuKHQsZSl7dmFyIG4scixzO2ZvcihzPTEsbj10LHI9ZT49MD9lOi1lO3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihzKj1uLHItPTEpO3JldHVybiBlPDA/MS9zOnN9ZnVuY3Rpb24gRnJlKHQpe3ZhciBlLG47aWYodCE9bnVsbClmb3Iobj0wO248dC5sZW5ndGg7KytuKWU9dFtuXSxlJiYodShlLmcsMzY3KSxlLmkpfWZ1bmN0aW9uIGt1bih0KXt2YXIgZSxuLHI7Zm9yKHI9MCxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTg3KSxyPWIuTWF0aC5tYXgocixlLmcpO3JldHVybiByfWZ1bmN0aW9uIEV1bih0KXt2YXIgZSxuLHI7Zm9yKHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTQpLGU9bi5jLlJmKCk/bi5mOm4uYSxlJiZxeW4oZSxuLmopfWZ1bmN0aW9uICQwKCl7JDA9WixIVj1uZXcgcWV0KCJJTkhFUklUIiwwKSxaZz1uZXcgcWV0KCJJTkNMVURFX0NISUxEUkVOIiwxKSxZUz1uZXcgcWV0KCJTRVBBUkFURV9DSElMRFJFTiIsMil9ZnVuY3Rpb24gVnl0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMTohdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHhyKHQubik7cmV0dXJuO2Nhc2UgMjpxQyh0LG51bGwpO3JldHVybn1teXQodCxlKX1mdW5jdGlvbiB5eih0KXt2YXIgZTtzd2l0Y2godC5nYygpKXtjYXNlIDA6cmV0dXJuIHZ1dDtjYXNlIDE6cmV0dXJuIG5ldyBTbnQoQXIodC5YYigwKSkpO2RlZmF1bHQ6cmV0dXJuIGU9dCxuZXcgb3J0KGUpfX1mdW5jdGlvbiBCcmUodCl7c3dpdGNoKGhkKCksdC5nYygpKXtjYXNlIDA6cmV0dXJuIFhudCgpLEs4dDtjYXNlIDE6cmV0dXJuIG5ldyB4eCh0LktjKCkuUGIoKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IHlidCh0KX19ZnVuY3Rpb24gRGcodCl7c3dpdGNoKGhkKCksdC5jKXtjYXNlIDA6cmV0dXJuIFhudCgpLEs4dDtjYXNlIDE6cmV0dXJuIG5ldyB4eChwb2UobmV3IEV4KHQpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IEZxdCh0KX19ZnVuY3Rpb24gbnkodCxlKXtBcih0KTt0cnl7cmV0dXJuIHQueGMoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxFdChuLDIwNSl8fEV0KG4sMTczKSlyZXR1cm4gbnVsbDt0aHJvdyBydChuKX19ZnVuY3Rpb24gVHVuKHQsZSl7QXIodCk7dHJ5e3JldHVybiB0LkJjKGUpfWNhdGNoKG4pe2lmKG49V2kobiksRXQobiwyMDUpfHxFdChuLDE3MykpcmV0dXJuIG51bGw7dGhyb3cgcnQobil9fWZ1bmN0aW9uIFV5dCh0LGUpe0FyKHQpO3RyeXtyZXR1cm4gdC5IYyhlKX1jYXRjaChuKXtpZihuPVdpKG4pLEV0KG4sMjA1KXx8RXQobiwxNzMpKXJldHVybiExO3Rocm93IHJ0KG4pfX1mdW5jdGlvbiBDdW4odCxlKXtBcih0KTt0cnl7cmV0dXJuIHQuTWMoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxFdChuLDIwNSl8fEV0KG4sMTczKSlyZXR1cm4hMTt0aHJvdyBydChuKX19ZnVuY3Rpb24gUnJlKHQsZSl7QXIodCk7dHJ5e3JldHVybiB0Ll9iKGUpfWNhdGNoKG4pe2lmKG49V2kobiksRXQobiwyMDUpfHxFdChuLDE3MykpcmV0dXJuITE7dGhyb3cgcnQobil9fWZ1bmN0aW9uIGpyZSh0LGUpe3ZhciBuO3QuYS5jLmxlbmd0aD4wJiYobj11KEZlKHQuYSx0LmEuYy5sZW5ndGgtMSksNTcwKSxPeXQobixlKSl8fHVlKHQuYSxuZXcgcEp0KGUpKX1mdW5jdGlvbiBfdW4odCl7bGYoKTt2YXIgZSxuO2U9dC5kLmMtdC5lLmMsbj11KHQuZywxNDUpLG11KG4uYixuZXcgQzkoZSkpLG11KG4uYyxuZXcgR2IoZSkpLHZhKG4uaSxuZXcgblIoZSkpfWZ1bmN0aW9uICRyZSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgX3AsZS5hKz0iVmVydGljYWxTZWdtZW50ICIsaGMoZSx0LmUpLGUuYSs9IiAiLFZyKGUsbTJ0KG5ldyBhZXQsbmV3IFModC5rKSkpLGUuYX1mdW5jdGlvbiBTdW4odCl7dmFyIGU7cmV0dXJuIGU9dShXdih0LmMuYywiIiksMjI5KSxlfHwoZT1uZXcgengoSmsoWmsobmV3IHdtLCIiKSwiT3RoZXIiKSkscDIodC5jLmMsIiIsZSkpLGV9ZnVuY3Rpb24gWEModCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/YmYodCk6KGU9bmV3IFRoKGJmKHQpKSxlLmErPSIgKG5hbWU6ICIsZm8oZSx0LnpiKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIFd5dCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LnNiLHQuc2I9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IFFzKHQsMSw0LHMsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBOaXQodCxlKXt2YXIgbixyLHM7Zm9yKG49MCxzPVlvKHQsZSkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLG4rPVEociwoc2UoKSxadSkpIT1udWxsPzE6MDtyZXR1cm4gbn1mdW5jdGlvbiBhNCh0LGUsbil7dmFyIHIscyxvO2ZvcihyPTAsbz1laSh0LDApO28uYiE9by5kLmMmJihzPVh0KHllKHRpKG8pKSksIShzPm4pKTspcz49ZSYmKytyO3JldHVybiByfWZ1bmN0aW9uIEF1bih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1uZXcgRjAodC5lLDMsMTMsbnVsbCwocz1lLmMsc3x8KGRuKCksVjEpKSxGZyh0LGUpLCExKSxuP24uRWkocik6bj1yLG59ZnVuY3Rpb24gTHVuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBGMCh0LmUsNCwxMywocz1lLmMsc3x8KGRuKCksVjEpKSxudWxsLEZnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBLeXQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5yLHQucj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgUXModCwxLDgscyx0LnIpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gT2codCxlKXt2YXIgbixyO3JldHVybiBuPXUoZSw2NzYpLHI9bi52aygpLCFyJiZuLndrKHI9RXQoZSw4OCk/bmV3IEZWdCh0LHUoZSwyNikpOm5ldyByWnQodCx1KGUsMTQ4KSkpLHJ9ZnVuY3Rpb24gekkodCxlLG4pe3ZhciByO3QucWkodC5pKzEpLHI9dC5vaShlLG4pLGUhPXQuaSYmSWModC5nLGUsdC5nLGUrMSx0LmktZSksSmkodC5nLGUsciksKyt0LmksdC5iaShlLG4pLHQuY2koKX1mdW5jdGlvbiBNdW4odCxlKXt2YXIgbjtyZXR1cm4gZS5hJiYobj1lLmEuYS5sZW5ndGgsdC5hP1ZyKHQuYSx0LmIpOnQuYT1uZXcgSWwodC5kKSxzWnQodC5hLGUuYSxlLmQubGVuZ3RoLG4pKSx0fWZ1bmN0aW9uIEl1bih0LGUpe3ZhciBuLHIscyxvO2lmKGUudmkodC5hKSxvPXUoSW4odC5hLDgpLDE5MzYpLG8hPW51bGwpZm9yKG49byxyPTAscz1uLmxlbmd0aDtyPHM7KytyKW51bGwuam0oKX1mdW5jdGlvbiBxSSh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBUaSx0LmEuc2Qobik/KHU4KCksbmV3IGdSKE9uKEZ0ZSh0LG4uYSxlKSkpKTooJHAodCksdTgoKSx1OCgpLFdIKX1mdW5jdGlvbiBRQyh0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpjYXNlIDE6cmV0dXJuIFlvKHQsZSk7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gYTIoWW8odCxlKSl9cmV0dXJuIHZuKCksdm4oKSxpb31mdW5jdGlvbiB5aSh0LGUpe3JldHVybiBlYSh0KT9obih0LGUpOk5tKHQpP2VLdCh0LGUpOk9tKHQpPyhPbih0KSxHdCh0KT09PUd0KGUpKTpRdnQodCk/dC5GYihlKTpVdnQodCk/blV0KHQsZSk6SHd0KHQsZSl9ZnVuY3Rpb24gRHVuKHQpe3JldHVybiB0P3QuaSYxP3Q9PWRsP0JzOnQ9PVRyP2phOnQ9PXIzP1hFOnQ9PWlhP2NhOnQ9PUxiP1R3OnQ9PWY1P0N3OnQ9PUh1P0U2OmFTOnQ6bnVsbH1mdW5jdGlvbiBPdW4odCxlLG4scixzKXtlPT0wfHxyPT0wfHwoZT09MT9zW3JdPVAzdChzLG4scix0WzBdKTpyPT0xP3NbZV09UDN0KHMsdCxlLG5bMF0pOlBwbih0LG4scyxlLHIpKX1mdW5jdGlvbiB6cmUodCxlKXt2YXIgbjt0LmMubGVuZ3RoIT0wJiYobj11KEQxKHQsUHQobzAsemcsMTAsdC5jLmxlbmd0aCwwLDEpKSwxOTMpLGUydChuLG5ldyB3ayksQW9lKG4sZSkpfWZ1bmN0aW9uIHFyZSh0LGUpe3ZhciBuO3QuYy5sZW5ndGghPTAmJihuPXUoRDEodCxQdChvMCx6ZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5MyksZTJ0KG4sbmV3IFJkKSxBb2UobixlKSl9ZnVuY3Rpb24gWXl0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx0Lm47Y2FzZSAyOnJldHVybiB0Lmt9cmV0dXJuIFYzdCh0LGUsbixyKX1mdW5jdGlvbiBhbygpe2FvPVosYzA9bmV3IExNKE9fLDApLGtmPW5ldyBMTShnNiwxKSxqaD1uZXcgTE0oZDYsMiksUTA9bmV3IExNKHlvdCwzKSxaMD1uZXcgTE0oIlVQIiw0KX1mdW5jdGlvbiBldygpe2V3PVosJDQ9bmV3IHlldChLMCwwKSxTN3Q9bmV3IHlldCgiSU5TSURFX1BPUlRfU0lERV9HUk9VUFMiLDEpLEp1dD1uZXcgeWV0KCJGT1JDRV9NT0RFTF9PUkRFUiIsMil9ZnVuY3Rpb24gSHJlKHQsZSxuKXtpZih0PDB8fGU+bil0aHJvdyBydChuZXcgbW8oRnErdCt6eHQrZSsiLCBzaXplOiAiK24pKTtpZih0PmUpdGhyb3cgcnQobmV3IFBuKEZxK3QrZ2ZlK2UpKX1mdW5jdGlvbiBsaCh0LGUsbil7aWYoZTwwKVE0dCh0LG4pO2Vsc2V7aWYoIW4uSWooKSl0aHJvdyBydChuZXcgUG4oYWIrbi5uZSgpK1dfKSk7dShuLDY2KS5OaigpLlZqKHQsdC55aCgpLGUpfX1mdW5jdGlvbiBOdW4odCxlLG4scixzLG8saCxkKXt2YXIgdztmb3Iodz1uO288aDspdz49cnx8ZTxuJiZkLnVlKHRbZV0sdFt3XSk8PTA/SmkocyxvKyssdFtlKytdKTpKaShzLG8rKyx0W3crK10pfWZ1bmN0aW9uIEdyZSh0LGUsbixyLHMsbyl7dGhpcy5lPW5ldyBsZSx0aGlzLmY9KHNvKCksTVMpLHVlKHRoaXMuZSx0KSx0aGlzLmQ9ZSx0aGlzLmE9bix0aGlzLmI9cix0aGlzLmY9cyx0aGlzLmM9b31mdW5jdGlvbiBWcmUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBlcih0KTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksMjYpLEd0KGUpPT09R3QobikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUHVuKHQpe0xxKCk7dmFyIGUsbixyLHM7Zm9yKG49Sml0KCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcilpZihlPW5bcl0sUm8oZS5hLHQsMCkhPS0xKXJldHVybiBlO3JldHVybiBQdXR9ZnVuY3Rpb24gVXJlKHQpe3JldHVybiB0Pj02NSYmdDw9NzA/dC02NSsxMDp0Pj05NyYmdDw9MTAyP3QtOTcrMTA6dD49NDgmJnQ8PTU3P3QtNDg6MH1mdW5jdGlvbiBXcmUodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/YmYodCk6KGU9bmV3IFRoKGJmKHQpKSxlLmErPSIgKHNvdXJjZTogIixmbyhlLHQuZCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBGdW4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgUXModCwxLDUscyx0LmEpLG4/djR0KG4scik6bj1yKSxufWZ1bmN0aW9uIE5nKHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwyLG4sZSkpfWZ1bmN0aW9uIFh5dCh0LGUpe3ZhciBuO249KHQuQmImMjU2KSE9MCxlP3QuQmJ8PTI1Njp0LkJiJj0tMjU3LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsOCxuLGUpKX1mdW5jdGlvbiB4eih0LGUpe3ZhciBuO249KHQuQmImMjU2KSE9MCxlP3QuQmJ8PTI1Njp0LkJiJj0tMjU3LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsOCxuLGUpKX1mdW5jdGlvbiBQZyh0LGUpe3ZhciBuO249KHQuQmImNTEyKSE9MCxlP3QuQmJ8PTUxMjp0LkJiJj0tNTEzLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsMyxuLGUpKX1mdW5jdGlvbiBReXQodCxlKXt2YXIgbjtuPSh0LkJiJjUxMikhPTAsZT90LkJifD01MTI6dC5CYiY9LTUxMyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgZGYodCwxLDksbixlKSl9ZnVuY3Rpb24gWkModCxlKXt2YXIgbjtyZXR1cm4gdC5iPT0tMSYmdC5hJiYobj10LmEuR2ooKSx0LmI9bj90LmMuWGcodC5hLmFqKCksbik6VmkodC5jLlRnKCksdC5hKSksdC5jLk9nKHQuYixlKX1mdW5jdGlvbiBkZSh0KXt2YXIgZSxuO3JldHVybiB0Pi0xMjkmJnQ8MTI4PyhlPXQrMTI4LG49KFZLdCgpLHNFdClbZV0sIW4mJihuPXNFdFtlXT1uZXcgaU0odCkpLG4pOm5ldyBpTSh0KX1mdW5jdGlvbiBlRSh0KXt2YXIgZSxuO3JldHVybiB0Pi0xMjkmJnQ8MTI4PyhlPXQrMTI4LG49KFFLdCgpLHVFdClbZV0sIW4mJihuPXVFdFtlXT1uZXcgZVIodCkpLG4pOm5ldyBlUih0KX1mdW5jdGlvbiBaeXQodCl7dmFyIGUsbjtyZXR1cm4gZT10LmssZT09KEduKCkseHMpPyhuPXUoUSh0LChzZSgpLG9jKSksNjEpLG49PShiZSgpLE5uKXx8bj09bXIpOiExfWZ1bmN0aW9uIEJ1bih0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPShzPXdFKHQuYixlKSxzKSxvJiYocj11KEVxKG1JKHQsbyksIiIpLDI2KSxyKT93NXQodCxyLGUsbik6bnVsbH1mdW5jdGlvbiBQaXQodCxlLG4pe3ZhciByLHMsbztyZXR1cm4gbz0ocz13RSh0LmIsZSkscyksbyYmKHI9dShFcShtSSh0LG8pLCIiKSwyNikscik/bTV0KHQscixlLG4pOm51bGx9ZnVuY3Rpb24gS3JlKHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgZXIodCk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDEzOCksR3QoZSk9PT1HdChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBKQyh0LGUsbil7dmFyIHI7aWYocj10LmdjKCksZT5yKXRocm93IHJ0KG5ldyBqbShlLHIpKTtpZih0LmhpKCkmJnQuSGMobikpdGhyb3cgcnQobmV3IFBuKFhEKSk7dC5YaChlLG4pfWZ1bmN0aW9uIFJ1bih0LGUpe3ZhciBuO2lmKG49dDQodC5pLGUpLG49PW51bGwpdGhyb3cgcnQobmV3IGFkKCJOb2RlIGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiB1eXQoZSxuKSxudWxsfWZ1bmN0aW9uIGp1bih0LGUpe3ZhciBuO2lmKG49Z0QodCxlKSxFdChuLDMyMikpcmV0dXJuIHUobiwzNCk7dGhyb3cgcnQobmV3IFBuKGFiK2UrIicgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIikpfWZ1bmN0aW9uICR1bih0LGUsbil7dmFyIHIscztmb3Iocz1FdChlLDk5KSYmdShlLDE4KS5CYiZZYT9uZXcgVWV0KGUsdCk6bmV3IFU4KGUsdCkscj0wO3I8bjsrK3IpJHoocyk7cmV0dXJuIHN9ZnVuY3Rpb24genVuKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49dC5sZW5ndGgsZT0wO2U8bjtlKyspdFtlXT09MzJ8fHRbZV09PTEzfHx0W2VdPT0xMHx8dFtlXT09OXx8KHRbcisrXT10W2VdKTtyZXR1cm4gcn1mdW5jdGlvbiBxdW4odCl7dmFyIGUsbixyO2ZvcihlPW5ldyBsZSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTk0KSxBcyhlLHUobi5qZigpLDE0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gSHVuKHQpe3ZhciBlLG4scjtmb3IoZT11KFEodCwoZmMoKSxKQ3QpKSwxNSkscj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDE4OCksbmkobi5iLmQsbiksbmkobi5jLmIsbil9ZnVuY3Rpb24gR3VuKHQpe3N3aXRjaCh1KFEodCwoc2UoKSxPMikpLDMwMykuZyl7Y2FzZSAxOkp0KHQsTzIsKEIwKCksQTYpKTticmVhaztjYXNlIDI6SnQodCxPMiwoQjAoKSxVNCkpfX1mdW5jdGlvbiBWdW4odCl7dmFyIGU7dC5nJiYoZT10LmMuUmYoKT90LmY6dC5hLEQ1dChlLmEsdC5vLCEwKSxENXQoZS5hLHQubywhMSksSnQodC5vLChUZSgpLG9zKSwob2EoKSxHMikpKX1mdW5jdGlvbiBVdW4odCl7dmFyIGU7aWYoIXQuYSl0aHJvdyBydChuZXcgRm8oIkNhbm5vdCBvZmZzZXQgYW4gdW5hc3NpZ25lZCBjdXQuIikpO2U9dC5jLXQuYix0LmIrPWUsJFh0KHQsZSksalh0KHQsZSl9ZnVuY3Rpb24gV3VuKHQpe3ZhciBlO3JldHVybiBlPXQuYVt0LmMtMSZ0LmEubGVuZ3RoLTFdLGU9PW51bGw/bnVsbDoodC5jPXQuYy0xJnQuYS5sZW5ndGgtMSxKaSh0LmEsdC5jLG51bGwpLGUpfWZ1bmN0aW9uIFlyZSh0KXt2YXIgZSxuO2ZvcihuPXQucC5hLmVjKCkuS2MoKTtuLk9iKCk7KWlmKGU9dShuLlBiKCksMjEzKSxlLmYmJnQuYltlLmNdPC0xZS0xMClyZXR1cm4gZTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKeXQodCxlKXtzd2l0Y2godC5iLmcpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIGU7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gbmV3IGloKGUuZCwwLGUuYSxlLmIpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFhyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDI6cmV0dXJuIGtmO2Nhc2UgMTpyZXR1cm4gamg7Y2FzZSA0OnJldHVybiBRMDtjYXNlIDM6cmV0dXJuIFowO2RlZmF1bHQ6cmV0dXJuIGMwfX1mdW5jdGlvbiB0M3QodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBCbjtjYXNlIDI6cmV0dXJuIE5uO2Nhc2UgMzpyZXR1cm4gSG47Y2FzZSA0OnJldHVybiBtcjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24gSEkodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBtcjtjYXNlIDI6cmV0dXJuIEJuO2Nhc2UgMzpyZXR1cm4gTm47Y2FzZSA0OnJldHVybiBIbjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24ga3oodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBIbjtjYXNlIDI6cmV0dXJuIG1yO2Nhc2UgMzpyZXR1cm4gQm47Y2FzZSA0OnJldHVybiBObjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24gS3VuKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIG5ldyBwcXQ7Y2FzZSAxOnJldHVybiBuZXcgZHF0O2Nhc2UgMjpyZXR1cm4gbmV3IGdxdDtkZWZhdWx0OnRocm93IHJ0KG5ldyB1TSl9fWZ1bmN0aW9uIExzKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0PT1lP3Q9PTA/THMoMS90LDEvZSk6MDppc05hTih0KT9pc05hTihlKT8wOjE6LTF9ZnVuY3Rpb24gWXVuKHQsZSl7d3IoZSwiU29ydCBlbmQgbGFiZWxzIiwxKSx1cyhSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IFFQKSxuZXcgcTUpLG5ldyB2WSksb3IoZSl9ZnVuY3Rpb24gdF8odCxlLG4pe3ZhciByLHM7cmV0dXJuIHQuZWooKT8ocz10LmZqKCkscj1xc3QodCxlLG4pLHQuJGkodC5aaSg3LGRlKG4pLHIsZSxzKSkscik6cXN0KHQsZSxuKX1mdW5jdGlvbiBGaXQodCxlKXt2YXIgbixyLHM7dC5kPT1udWxsPygrK3QuZSwtLXQuZik6KHM9ZS5jZCgpLG49ZS5TaCgpLHI9KG4mdmkpJXQuZC5sZW5ndGgsRHNuKHQscixmY2UodCxyLG4scykpKX1mdW5jdGlvbiBuRSh0LGUpe3ZhciBuO249KHQuQmImd2YpIT0wLGU/dC5CYnw9d2Y6dC5CYiY9LTEwMjUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxMCxuLGUpKX1mdW5jdGlvbiByRSh0LGUpe3ZhciBuO249KHQuQmImeXkpIT0wLGU/dC5CYnw9eXk6dC5CYiY9LTQwOTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxMixuLGUpKX1mdW5jdGlvbiBpRSh0LGUpe3ZhciBuO249KHQuQmImenUpIT0wLGU/dC5CYnw9enU6dC5CYiY9LTgxOTMsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxNSxuLGUpKX1mdW5jdGlvbiBzRSh0LGUpe3ZhciBuO249KHQuQmImQXkpIT0wLGU/dC5CYnw9QXk6dC5CYiY9LTIwNDksdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxMSxuLGUpKX1mdW5jdGlvbiBYdW4odCxlKXt2YXIgbjtyZXR1cm4gbj1Mcyh0LmIuYyxlLmIuYyksbiE9MHx8KG49THModC5hLmEsZS5hLmEpLG4hPTApP246THModC5hLmIsZS5hLmIpfWZ1bmN0aW9uIFF1bih0LGUpe3ZhciBuO2lmKG49Sm4odC5rLGUpLG49PW51bGwpdGhyb3cgcnQobmV3IGFkKCJQb3J0IGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiB1eXQoZSxuKSxudWxsfWZ1bmN0aW9uIFp1bih0KXt2YXIgZSxuO2ZvcihuPXZjZShGbCh0KSkuS2MoKTtuLk9iKCk7KWlmKGU9QnIobi5QYigpKSxtXyh0LGUpKXJldHVybiBhc24oKF9HdCgpLFc0ZSksZSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSnVuKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD1hdSh0LmUuVGcoKSxlKSxvPTAsbj11KHQuZywxMTkpLHM9MDtzPHQuaTsrK3Mpcj1uW3NdLGgucmwoci5haygpKSYmKytvO3JldHVybiBvfWZ1bmN0aW9uIHRsbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj11KGUuV2UodC5hKSwzNSkscz11KG4uV2UodC5hKSwzNSksciE9bnVsbCYmcyE9bnVsbD9TSShyLHMpOnIhPW51bGw/LTE6cyE9bnVsbD8xOjB9ZnVuY3Rpb24gUXJlKHQsZSxuKXt2YXIgcixzO2lmKHQuYylBNHQodC5jLGUsbik7ZWxzZSBmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE1NyksUXJlKHIsZSxuKX1mdW5jdGlvbiBCaXQodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDQ2KSx2dSh0LmIuYixuLmIpLElubih1KG4uYSwxODkpLHUobi5iLDgxKSl9ZnVuY3Rpb24gZWxuKHQpe3ZhciBlLG47Zm9yKG49UnAobmV3IF9wLDkxKSxlPSEwO3QuT2IoKTspZXx8KG4uYSs9S2EpLGU9ITEsaGMobix0LlBiKCkpO3JldHVybihuLmErPSJdIixuKS5hfWZ1bmN0aW9uIGFFKHQsZSl7dmFyIG47bj0odC5CYiZiZCkhPTAsZT90LkJifD1iZDp0LkJiJj0tMTYzODUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxNixuLGUpKX1mdW5jdGlvbiBSaXQodCxlKXt2YXIgbjtuPSh0LkJiJmRjKSE9MCxlP3QuQmJ8PWRjOnQuQmImPS0zMjc2OSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgZGYodCwxLDE4LG4sZSkpfWZ1bmN0aW9uIGUzdCh0LGUpe3ZhciBuO249KHQuQmImZGMpIT0wLGU/dC5CYnw9ZGM6dC5CYiY9LTMyNzY5LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsMTgsbixlKSl9ZnVuY3Rpb24gbjN0KHQsZSl7dmFyIG47bj0odC5CYiZZYSkhPTAsZT90LkJifD1ZYTp0LkJiJj0tNjU1MzcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwyMCxuLGUpKX1mdW5jdGlvbiByM3QodCl7dmFyIGU7cmV0dXJuIGU9UHQobWgsdmQsMjUsMiwxNSwxKSx0LT1ZYSxlWzBdPSh0Pj4xMCkrT0QmbXMsZVsxXT0odCYxMDIzKSs1NjMyMCZtcyxBaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIEV6KHQpe3ZhciBlLG47cmV0dXJuIG49dShRKHQsKFRlKCksVmwpKSwxMDMpLG49PShhbygpLGMwKT8oZT1YdCh5ZShRKHQsVUcpKSksZT49MT9rZjpRMCk6bn1mdW5jdGlvbiBubG4odCl7c3dpdGNoKHUoUSh0LChUZSgpLFgwKSksMjE4KS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBCWDtjYXNlIDM6cmV0dXJuIG5ldyBxWDtkZWZhdWx0OnJldHVybiBuZXcgRlh9fWZ1bmN0aW9uIGQyKHQpe2lmKHQuYylkMih0LmMpO2Vsc2UgaWYodC5kKXRocm93IHJ0KG5ldyBGbygiU3RyZWFtIGFscmVhZHkgdGVybWluYXRlZCwgY2FuJ3QgYmUgbW9kaWZpZWQgb3IgdXNlZCIpKX1mdW5jdGlvbiBqaXQodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/YmYodCk6KGU9bmV3IFRoKGJmKHQpKSxlLmErPSIgKGlkZW50aWZpZXI6ICIsZm8oZSx0LmspLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gWnJlKHQsZSxuKXt2YXIgcixzO3JldHVybiByPShUdigpLHM9bmV3IHZwLHMpLFckKHIsZSksSyQocixuKSx0JiZNcigoIXQuYSYmKHQuYT1uZXcgU3MoSGgsdCw1KSksdC5hKSxyKSxyfWZ1bmN0aW9uICRpdCh0LGUsbixyKXt2YXIgcyxvO3JldHVybiBPbihyKSxPbihuKSxzPXQueGMoZSksbz1zPT1udWxsP246ZEd0KHUocywxNSksdShuLDE0KSksbz09bnVsbD90LkJjKGUpOnQuemMoZSxvKSxvfWZ1bmN0aW9uIHVuKHQpe3ZhciBlLG4scixzO3JldHVybiBuPShlPXUoSGYoKHI9dC5nbSxzPXIuZixzPT1Icj9yOnMpKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSxwZihuLHQpLG59ZnVuY3Rpb24gcmxuKHQsZSxuKXt2YXIgcixzO2ZvcihzPXQuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDEwKSxJSShuLHUoRmUoZSxyLnApLDE0KSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaWxuKHQsZSxuKXt2YXIgcjt0cnl7UmNuKHQsZSxuKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNTk3KT8ocj1zLHJ0KG5ldyBhbXQocikpKTpydChzKX1yZXR1cm4gZX1mdW5jdGlvbiBZcCh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQtZSxERDxuJiZuPHgyKT9uOlZwKEJuZShCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUpKX1mdW5jdGlvbiBPYSh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQrZSxERDxuJiZuPHgyKT9uOlZwKHljbihCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUpKX1mdW5jdGlvbiBDYSh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQqZSxERDxuJiZuPHgyKT9uOlZwKHp5bihCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUpKX1mdW5jdGlvbiBZbyh0LGUpe3ZhciBuO3JldHVybiB0Lml8fFg0dCh0KSxuPXUoZ28odC5nLGUpLDQ2KSxuP25ldyBLZCh0LmosdShuLmEsMTkpLmEsdShuLmIsMTkpLmEpOih2bigpLHZuKCksaW8pfWZ1bmN0aW9uIG53KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmEuZ2V0KGUpLHQuYS5zZXQoZSxuPT09dm9pZCAwP251bGw6bikscj09PXZvaWQgMD8oKyt0LmMsYSQodC5iKSk6Kyt0LmQscn1mdW5jdGlvbiBzbG4odCxlLG4pe3Qubj1YYihMYixbdGUsYW90XSxbMzY0LDI1XSwxNCxbbixwcyhiLk1hdGguY2VpbChlLzMyKSldLDIpLHQubz1lLHQucD1uLHQuaj1lLTE+PjEsdC5rPW4tMT4+MX1mdW5jdGlvbiB6aXQoKXtFNHQoKTt2YXIgdCxlLG47bj10eG4rKytEYXRlLm5vdygpLHQ9cHMoYi5NYXRoLmZsb29yKG4qUEQpKSZQcSxlPXBzKG4tdCpSeHQpLHRoaXMuYT10XjE1MDIsdGhpcy5iPWVeZm90fWZ1bmN0aW9uIHowKHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgbGUscj1uZXcgUyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDExKSx1ZShlLG4uYik7cmV0dXJuIEFyKGUpLG5ldyB1QyhlKX1mdW5jdGlvbiBqbyh0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGxlLHI9bmV3IFModC5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMSksdWUoZSxuLmUpO3JldHVybiBBcihlKSxuZXcgdUMoZSl9ZnVuY3Rpb24gTXModCl7dmFyIGUsbixyO2ZvcihlPW5ldyBsZSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEpLHVlKGUsbi5nKTtyZXR1cm4gQXIoZSksbmV3IHVDKGUpfWZ1bmN0aW9uIGFsbih0KXt2YXIgZSxuO2ZvcihuPXJibihGbChWbSh0KSkpLktjKCk7bi5PYigpOylpZihlPUJyKG4uUGIoKSksbV8odCxlKSlyZXR1cm4gb3NuKChTR3QoKSxLNGUpLGUpO3JldHVybiBudWxsfWZ1bmN0aW9uIG9sbih0KXt2YXIgZSxuLHI7Zm9yKG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYodFtuXT09bnVsbCl0aHJvdyBydChuZXcgeXgoImF0IGluZGV4ICIrbikpO3JldHVybiBlPXQsbmV3IHdsKGUpfWZ1bmN0aW9uIGNsbih0LGUpe3ZhciBuO2lmKG49Z0QodC5UZygpLGUpLEV0KG4sOTkpKXJldHVybiB1KG4sMTgpO3Rocm93IHJ0KG5ldyBQbihhYitlKyInIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIpKX1mdW5jdGlvbiB1bG4odCl7dmFyIGU7cmV0dXJuIGU9bHkodCksZT4zNDAyODIzNDY2Mzg1Mjg4NmUyMj9zczplPC0zNDAyODIzNDY2Mzg1Mjg4NmUyMj9UczplfWZ1bmN0aW9uIEpyZSh0KXtyZXR1cm4gdC09dD4+MSYxNDMxNjU1NzY1LHQ9KHQ+PjImODU4OTkzNDU5KSsodCY4NTg5OTM0NTkpLHQ9KHQ+PjQpK3QmMjUyNjQ1MTM1LHQrPXQ+PjgsdCs9dD4+MTYsdCY2M31mdW5jdGlvbiB0aWUodCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IE5XdCh0LkhkKCkuZ2MoKSkscz0wLHI9S3godC5IZCgpLktjKCkpO3IuT2IoKTspbj1yLlBiKCksbXJuKGUsbixkZShzKyspKTtyZXR1cm4gRzBuKGUuYSl9ZnVuY3Rpb24gbGxuKHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBDcixyPWUudmMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw0Miksa2kocyxuLmNkKCksZWNuKHQsdShuLmRkKCksMTUpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gaTN0KHQsZSl7dC5uLmMubGVuZ3RoPT0wJiZ1ZSh0Lm4sbmV3IGYkKHQucyx0LnQsdC5pKSksdWUodC5iLGUpLCQzdCh1KEZlKHQubix0Lm4uYy5sZW5ndGgtMSksMjExKSxlKSxsbGUodCxlKX1mdW5jdGlvbiBvNCh0KXtyZXR1cm4odC5jIT10LmIuYnx8dC5pIT10LmcuYikmJih0LmEuYz1QdChYbixJZSwxLDAsNSwxKSxBcyh0LmEsdC5iKSxBcyh0LmEsdC5nKSx0LmM9dC5iLmIsdC5pPXQuZy5iKSx0LmF9ZnVuY3Rpb24gcWl0KHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KGUuS2IodCksMjApLktjKCk7ci5PYigpOyluPXUoci5QYigpLDE3KSxqZShSZShRKG4sKHNlKCksJDEpKSkpfHwrK3M7cmV0dXJuIHN9ZnVuY3Rpb24gaGxuKHQsZSl7dmFyIG4scixzO3I9WjMoZSkscz1YdCh5ZShpeShyLChUZSgpLHhmKSkpKSxuPWIuTWF0aC5tYXgoMCxzLzItLjUpLGNfKGUsbiwxKSx1ZSh0LG5ldyBVR3QoZSxuKSl9ZnVuY3Rpb24gaGgoKXtoaD1aLENPPW5ldyBDTShLMCwwKSx5Uz1uZXcgQ00oIkZJUlNUIiwxKSxmYj1uZXcgQ00oYzFlLDIpLHhTPW5ldyBDTSgiTEFTVCIsMyksRnk9bmV3IENNKHUxZSw0KX1mdW5jdGlvbiBxMCgpe3EwPVosZ2Z0PW5ldyBLUihPXywwKSxYTz1uZXcgS1IoIlBPTFlMSU5FIiwxKSxBNz1uZXcgS1IoIk9SVEhPR09OQUwiLDIpLEg2PW5ldyBLUigiU1BMSU5FUyIsMyl9ZnVuY3Rpb24gVHooKXtUej1aLE5fdD1uZXcgamV0KCJBU1BFQ1RfUkFUSU9fRFJJVkVOIiwwKSwkaHQ9bmV3IGpldCgiTUFYX1NDQUxFX0RSSVZFTiIsMSksT190PW5ldyBqZXQoIkFSRUFfRFJJVkVOIiwyKX1mdW5jdGlvbiBHSSgpe0dJPVosQVY9bmV3ICRldCgiUDFfU1RSVUNUVVJFIiwwKSxMVj1uZXcgJGV0KCJQMl9QUk9DRVNTSU5HX09SREVSIiwxKSxNVj1uZXcgJGV0KCJQM19FWEVDVVRJT04iLDIpfWZ1bmN0aW9uIEN6KCl7Q3o9WixOaHQ9bmV3IEZldCgiT1ZFUkxBUF9SRU1PVkFMIiwwKSxEaHQ9bmV3IEZldCgiQ09NUEFDVElPTiIsMSksT2h0PW5ldyBGZXQoIkdSQVBIX1NJWkVfQ0FMQ1VMQVRJT04iLDIpfWZ1bmN0aW9uIHJ3KHQsZSl7cmV0dXJuIHkxKCksZ2YoZWIpLGIuTWF0aC5hYnModC1lKTw9ZWJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpMdihpc05hTih0KSxpc05hTihlKSl9ZnVuY3Rpb24gZWllKHQsZSl7dmFyIG4scjtmb3Iobj1laSh0LDApO24uYiE9bi5kLmM7KXtpZihyPWxNKHllKHRpKG4pKSkscj09ZSlyZXR1cm47aWYocj5lKXtrcnQobik7YnJlYWt9fVhNKG4sZSl9ZnVuY3Rpb24gYW4odCxlKXt2YXIgbixyLHMsbyxoO2lmKG49ZS5mLHAyKHQuYy5kLG4sZSksZS5nIT1udWxsKWZvcihzPWUuZyxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxwMih0LmMuZSxyLGUpfWZ1bmN0aW9uIGZsbih0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKHM9ZSsxO3M8bjsrK3MpZm9yKG89cztvPmUmJnIudWUodFtvLTFdLHRbb10pPjA7LS1vKWg9dFtvXSxKaSh0LG8sdFtvLTFdKSxKaSh0LG8tMSxoKX1mdW5jdGlvbiBmaCh0LGUsbixyKXtpZihlPDApRTV0KHQsbixyKTtlbHNle2lmKCFuLklqKCkpdGhyb3cgcnQobmV3IFBuKGFiK24ubmUoKStXXykpO3Uobiw2NikuTmooKS5Uaih0LHQueWgoKSxlLHIpfX1mdW5jdGlvbiBfeih0LGUpe2lmKGU9PXQuZClyZXR1cm4gdC5lO2lmKGU9PXQuZSlyZXR1cm4gdC5kO3Rocm93IHJ0KG5ldyBQbigiTm9kZSAiK2UrIiBub3QgcGFydCBvZiBlZGdlICIrdCkpfWZ1bmN0aW9uIGRsbih0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpyZXR1cm4gdC5iO2Nhc2UgMTpyZXR1cm4gdC5jO2Nhc2UgNDpyZXR1cm4gdC5kO2Nhc2UgMzpyZXR1cm4gdC5hO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIG5pZSh0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpyZXR1cm4gdC5iO2Nhc2UgMTpyZXR1cm4gdC5jO2Nhc2UgNDpyZXR1cm4gdC5kO2Nhc2UgMzpyZXR1cm4gdC5hO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHMzdCh0LGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiB0LmY7Y2FzZSA0OnJldHVybiB0Lmc7Y2FzZSA1OnJldHVybiB0Lmk7Y2FzZSA2OnJldHVybiB0Lmp9cmV0dXJuIFl5dCh0LGUsbixyKX1mdW5jdGlvbiBnbG4odCl7cmV0dXJuIHQuayE9KEduKCksRHMpPyExOkE4KG5ldyBUbihudWxsLG5ldyBGdihuZXcgYXIobHIoTXModCkuYS5LYygpLG5ldyB6KSkpKSxuZXcgTEYpfWZ1bmN0aW9uIHBsbih0KXtyZXR1cm4gdC5lPT1udWxsP3Q6KCF0LmMmJih0LmM9bmV3IGVhdCgodC5mJjI1NikhPTAsdC5pLHQuYSx0LmQsKHQuZiYxNikhPTAsdC5qLHQuZyxudWxsKSksdC5jKX1mdW5jdGlvbiBibG4odCxlKXtyZXR1cm4gdC5oPT1JRCYmdC5tPT0wJiZ0Lmw9PTA/KGUmJihvYj1ydSgwLDAsMCkpLHJVdCgoTjgoKSxKOHQpKSk6KGUmJihvYj1ydSh0LmwsdC5tLHQuaCkpLHJ1KDAsMCwwKSl9ZnVuY3Rpb24gJG8odCl7dmFyIGU7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQuaW09PT1DdD9BcChzbCh0KSkrIkAiKyhlPUhpKHQpPj4+MCxlLnRvU3RyaW5nKDE2KSk6dC50b1N0cmluZygpfWZ1bmN0aW9uIGVfKHQpe3ZhciBlO3RoaXMuYT0oZT11KHQuZSYmdC5lKCksOSksbmV3IHJoKGUsdSh1ZihlLGUubGVuZ3RoKSw5KSwwKSksdGhpcy5iPVB0KFhuLEllLDEsdGhpcy5hLmEubGVuZ3RoLDUsMSl9ZnVuY3Rpb24gdmxuKHQpe3ZhciBlLG4scjtmb3IodGhpcy5hPW5ldyBBMCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE0KSxlPW5ldyBjWXQsX29uKGUsbiksTnModGhpcy5hLGUpfWZ1bmN0aW9uIHdsbih0KXtCbSgpO3ZhciBlLG4scixzO2ZvcihlPXQuby5iLHI9dSh1KEFpKHQuciwoYmUoKSxtcikpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzPW4uZSxzLmIrPWV9ZnVuY3Rpb24gYWwodCl7dmFyIGU7aWYodC5iKXtpZihhbCh0LmIpLHQuYi5kIT10LmMpdGhyb3cgcnQobmV3IGVoKX1lbHNlIHQuZC5kYygpJiYoZT11KHQuZi5jLnhjKHQuZSksMTQpLGUmJih0LmQ9ZSkpfWZ1bmN0aW9uIG1sbih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD8hMDooZT10Lmxlbmd0aCxlPjAmJihScihlLTEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlLTEpPT01OCkmJiFIaXQodCxpQSxzQSkpfWZ1bmN0aW9uIEhpdCh0LGUsbil7dmFyIHIscztmb3Iocj0wLHM9dC5sZW5ndGg7cjxzO3IrKylpZihiaXQoKFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSksZSxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB5bG4odCxlKXt2YXIgbixyO2ZvcihyPXQuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksMjY2KSxUMG4oZSxuLmQpfHxJZ24oZSxuLmQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHhsbih0LGUpe3ZhciBuLHIscztmb3Iocj1hd24odCxlKSxzPXJbci5sZW5ndGgtMV0vMixuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT49cylyZXR1cm4gZS5jK247cmV0dXJuIGUuYytlLmIuZ2MoKX1mdW5jdGlvbiBrbG4odCxlKXtmOCgpO3ZhciBuLHIscyxvO2ZvcihyPWJ0ZSh0KSxzPWUsRDgociwwLHIubGVuZ3RoLHMpLG49MDtuPHIubGVuZ3RoO24rKylvPWkxbih0LHJbbl0sbiksbiE9byYmdF8odCxuLG8pfWZ1bmN0aW9uIGEzdCh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iocj0wLG49MCxvPWUsaD0wLGQ9by5sZW5ndGg7aDxkOysraClzPW9baF0scz4wJiYocis9cywrK24pO3JldHVybiBuPjEmJihyKz10LmQqKG4tMSkpLHJ9ZnVuY3Rpb24gbzN0KHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgeGcsci5hKz0iWyIsZT0wLG49dC5nYygpO2U8bjspZm8ocixkQyh0LmtpKGUpKSksKytlPG4mJihyLmErPUthKTtyZXR1cm4gci5hKz0iXSIsci5hfWZ1bmN0aW9uIEVsbih0KXt2YXIgZSxuLHIscyxvO3JldHVybiBvPVQ0dCh0KSxuPWZNKHQuYykscj0hbixyJiYocz1uZXcgYmcsV2Yobywia25vd25MYXlvdXRlcnMiLHMpLGU9bmV3IHh6dChzKSx2YSh0LmMsZSkpLG99ZnVuY3Rpb24gVGxuKHQsZSl7dmFyIG4scixzO2ZvcihPbihlKSxuPSExLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspcz1KKHIpLHJ5KGUscywhMSkmJihfQyhyKSxuPSEwKTtyZXR1cm4gbn1mdW5jdGlvbiBjM3QodCl7dmFyIGUsbixyO2ZvcihyPVh0KHllKHQuYS5XZSgoY2koKSxxVikpKSksbj1uZXcgUyh0LmEueGYoKSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNjgwKSxTaGUodCxlLHIpfWZ1bmN0aW9uIEdpdCh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNDYpLHVlKHQuYi5iLHUobi5iLDgxKSksRXJ0KHUobi5hLDE4OSksdShuLmIsODEpKX1mdW5jdGlvbiBDbG4odCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5hLmIscj1zLmMubGVuZ3RoO3I8bjtyKyspJG0ocywwLG5ldyBDaCh0LmEpKTtrbyhlLHUoRmUocyxzLmMubGVuZ3RoLW4pLDI5KSksdC5iW2UucF09bn1mdW5jdGlvbiBfbG4odCxlLG4pe3ZhciByO3I9biwhciYmKHI9UHZ0KG5ldyBZaywwKSksd3IocixWZmUsMikscnNlKHQuYixlLFJjKHIsMSkpLG8zbih0LGUsUmMociwxKSksSjRuKGUsUmMociwxKSksb3Iocil9ZnVuY3Rpb24gU2xuKHQsZSxuLHIscyl7T2woKSx2ZihvZihhZihzZihjZihuZXcgRWgsMCkscy5kLmUtdCksZSkscy5kKSksdmYob2YoYWYoc2YoY2YobmV3IEVoLDApLG4tcy5hLmUpLHMuYSkscikpfWZ1bmN0aW9uIHUzdCh0LGUsbixyLHMsbyl7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5iPW4sdGhpcy5mPXIsdGhpcy5kPXMsdGhpcy5lPW8sdGhpcy5jPjAmJnRoaXMuYj4wJiZxdnQodGhpcy5jLHRoaXMuYix0aGlzLmEpfWZ1bmN0aW9uIGwzdCh0KXtWaXQoKSx0aGlzLmM9XzEoY3Qob3Qod3huLDEpLEllLDgzMSwwLFtSd2VdKSksdGhpcy5iPW5ldyBDcix0aGlzLmE9dCxraSh0aGlzLmIsb1YsMSksbXUoandlLG5ldyBWJHQodGhpcykpfWZ1bmN0aW9uIHJpZSh0LGUpe3ZhciBuO3JldHVybiB0LmQ/a2wodC5iLGUpP3UoSm4odC5iLGUpLDUxKToobj1lLktmKCksa2kodC5iLGUsbiksbik6ZS5LZigpfWZ1bmN0aW9uIGgzdCh0LGUpe3ZhciBuO3JldHVybiBHdCh0KT09PUd0KGUpPyEwOkV0KGUsOTEpPyhuPXUoZSw5MSksdC5lPT1uLmUmJnQuZD09bi5kJiZjc24odCxuLmEpKTohMX1mdW5jdGlvbiBKeCh0KXtzd2l0Y2goYmUoKSx0Lmcpe2Nhc2UgNDpyZXR1cm4gTm47Y2FzZSAxOnJldHVybiBIbjtjYXNlIDM6cmV0dXJuIG1yO2Nhc2UgMjpyZXR1cm4gQm47ZGVmYXVsdDpyZXR1cm4gWm99fWZ1bmN0aW9uIGYzdCh0LGUpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIHQuZiE9MDtjYXNlIDQ6cmV0dXJuIHQuZyE9MDtjYXNlIDU6cmV0dXJuIHQuaSE9MDtjYXNlIDY6cmV0dXJuIHQuaiE9MH1yZXR1cm4gaHl0KHQsZSl9ZnVuY3Rpb24gQWxuKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHJaO2Nhc2UgMTpyZXR1cm4gbmV3IEhGO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKHhjdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGlpZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBxRjtjYXNlIDE6cmV0dXJuIG5ldyBHRjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihCb3QrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBzaWUodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgR3B0O2Nhc2UgMTpyZXR1cm4gbmV3IGJxdDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIExsbih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIG5ldyBaUTtjYXNlIDI6cmV0dXJuIG5ldyBrV3Q7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oeGN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gTWxuKHQpe3ZhciBlLG47aWYodC5iKXJldHVybiB0LmI7Zm9yKG49UjE/bnVsbDp0LmQ7bjspe2lmKGU9UjE/bnVsbDpuLmIsZSlyZXR1cm4gZTtuPVIxP251bGw6bi5kfXJldHVybiBzOCgpLExFdH1mdW5jdGlvbiBJbG4odCl7dmFyIGUsbixyO3JldHVybiB0LmU9PTA/MDooZT10LmQ8PDUsbj10LmFbdC5kLTFdLHQuZTwwJiYocj1wbmUodCkscj09dC5kLTEmJigtLW4sbj1ufDApKSxlLT1sRChuKSxlKX1mdW5jdGlvbiBEbG4odCl7dmFyIGUsbixyO3JldHVybiB0PFZILmxlbmd0aD9WSFt0XToobj10Pj41LGU9dCYzMSxyPVB0KFRyLFhyLDI1LG4rMSwxNSwxKSxyW25dPTE8PGUsbmV3IEszKDEsbisxLHIpKX1mdW5jdGlvbiBhaWUodCl7dmFyIGUsbixyO3JldHVybiBuPXQuemcoKSxuPyhlPXQuVWcoKSxFdChlLDE2MCkmJihyPWFpZSh1KGUsMTYwKSksciE9bnVsbCk/cisiLiIrbjpuKTpudWxsfWZ1bmN0aW9uIHJ5KHQsZSxuKXt2YXIgcixzO2ZvcihzPXQuS2MoKTtzLk9iKCk7KWlmKHI9cy5QYigpLEd0KGUpPT09R3Qocil8fGUhPW51bGwmJnlpKGUscikpcmV0dXJuIG4mJnMuUWIoKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBkM3QodCxlLG4pe3ZhciByLHM7aWYoKyt0Lmosbi5kYygpKXJldHVybiExO2ZvcihzPW4uS2MoKTtzLk9iKCk7KXI9cy5QYigpLHQuSGkoZSx0Lm9pKGUscikpLCsrZTtyZXR1cm4hMH1mdW5jdGlvbiBPbG4odCxlLG4scil7dmFyIHMsbztpZihvPW4tZSxvPDMpZm9yKDtvPDM7KXQqPTEwLCsrbztlbHNle2ZvcihzPTE7bz4zOylzKj0xMCwtLW87dD0odCsocz4+MSkpL3N8MH1yZXR1cm4gci5pPXQsITB9ZnVuY3Rpb24gTmxuKHQpe3JldHVybiBJaXQoKSxGbigpLCEhKG5pZSh1KHQuYSw4MSkuaix1KHQuYiwxMDMpKXx8dSh0LmEsODEpLmQuZSE9MCYmbmllKHUodC5hLDgxKS5qLHUodC5iLDEwMykpKX1mdW5jdGlvbiBQbG4odCl7TyQoKSx1KHQuV2UoKGNpKCksdmIpKSwxNzQpLkhjKChjbCgpLFdWKSkmJih1KHQuV2UoS3kpLDE3NCkuRmMoKFF1KCksRzYpKSx1KHQuV2UodmIpLDE3NCkuTWMoV1YpKX1mdW5jdGlvbiBvaWUodCxlKXt2YXIgbixyO2lmKGUpe2ZvcihuPTA7bjx0Lmk7KytuKWlmKHI9dSh0Lmdbbl0sMzY2KSxyLkRpKGUpKXJldHVybiExO3JldHVybiBNcih0LGUpfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gZzN0KHQpe3ZhciBlLG4scixzO2ZvcihlPW5ldyBiZyxzPW5ldyBBKHQuYi5LYygpKTtzLmIuT2IoKTspcj11KHMuYi5QYigpLDY4Niksbj1RMG4ociksd2VuKGUsZS5hLmxlbmd0aCxuKTtyZXR1cm4gZS5hfWZ1bmN0aW9uIHAzdCh0KXt2YXIgZTtyZXR1cm4hdC5jJiYodC5jPW5ldyBvdiksWHModC5kLG5ldyBaMSksQnduKHQpLGU9Q3ZuKHQpLHVzKG5ldyBUbihudWxsLG5ldyBfbih0LmQsMTYpKSxuZXcgZ3IodCkpLGV9ZnVuY3Rpb24gU3oodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/WEModCk6KGU9bmV3IFRoKFhDKHQpKSxlLmErPSIgKGluc3RhbmNlQ2xhc3NOYW1lOiAiLGZvKGUsdC5EKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIEZsbih0LGUpe3ZhciBuLHIscyxvO2UmJihzPVIwKGUsIngiKSxuPW5ldyBienQodCksRjgobi5hLChPbihzKSxzKSksbz1SMChlLCJ5Iikscj1uZXcgdnp0KHQpLFI4KHIuYSwoT24obyksbykpKX1mdW5jdGlvbiBCbG4odCxlKXt2YXIgbixyLHMsbztlJiYocz1SMChlLCJ4Iiksbj1uZXcgZnp0KHQpLEI4KG4uYSwoT24ocykscykpLG89UjAoZSwieSIpLHI9bmV3IGd6dCh0KSxqOChyLmEsKE9uKG8pLG8pKSl9ZnVuY3Rpb24gVmkodCxlKXt2YXIgbixyLHM7aWYobj0odC5pPT1udWxsJiZwZCh0KSx0LmkpLHI9ZS5haigpLHIhPS0xKXtmb3Iocz1uLmxlbmd0aDtyPHM7KytyKWlmKG5bcl09PWUpcmV0dXJuIHJ9cmV0dXJuLTF9ZnVuY3Rpb24gUmxuKHQpe3ZhciBlLG4scixzLG87Zm9yKG49dSh0LmcsNjc0KSxyPXQuaS0xO3I+PTA7LS1yKWZvcihlPW5bcl0scz0wO3M8cjsrK3MpaWYobz1uW3NdLHNsZSh0LGUsbykpe3I2KHQscik7YnJlYWt9fWZ1bmN0aW9uIGpsbih0KXt2YXIgZT10LmU7ZnVuY3Rpb24gbihyKXtyZXR1cm4hcnx8ci5sZW5ndGg9PTA/IiI6IgkiK3Iuam9pbihgCglgKX1yZXR1cm4gZSYmKGUuc3RhY2t8fG4odFtqYXRdKSl9ZnVuY3Rpb24gYjN0KHQpe0dtKCk7dmFyIGU7c3dpdGNoKGU9dC5QYygpLGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHZ1dDtjYXNlIDE6cmV0dXJuIG5ldyBTbnQoQXIoZVswXSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBvcnQob2xuKGUpKX19ZnVuY3Rpb24gaXcodCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIE94KHQuaiwoQnUoKSxEN3QpKTtjYXNlIDI6cmV0dXJuIE94KHQuaiwoQnUoKSxON3QpKTtkZWZhdWx0OnJldHVybiB2bigpLHZuKCksaW99fWZ1bmN0aW9uIHYzdCh0LGUpe3N3aXRjaChlKXtjYXNlIDM6WHYodCwwKTtyZXR1cm47Y2FzZSA0OlF2KHQsMCk7cmV0dXJuO2Nhc2UgNTp5dSh0LDApO3JldHVybjtjYXNlIDY6eHUodCwwKTtyZXR1cm59Vnl0KHQsZSl9ZnVuY3Rpb24gVml0KCl7Vml0PVosRFIoKSxvVj0oVGUoKSxCdyksandlPV8xKGN0KG90KFFodCwxKSxOa3QsMTQ2LDAsW0FPLHhmLEI2LEZ3LEd5LHRodCxtNyx5NyxlaHQsX1MsUTQsUjIsWjRdKSl9ZnVuY3Rpb24gY2llKHQpe3ZhciBlLG47ZT10LmQ9PShpNigpLGE3KSxuPWI0dCh0KSxlJiYhbnx8IWUmJm4/SnQodC5hLChUZSgpLExkKSwoUWQoKSx6TykpOkp0KHQuYSwoVGUoKSxMZCksKFFkKCksJE8pKX1mdW5jdGlvbiAkbG4odCxlKXt2YXIgbjtyZXR1cm4gbj11KFBsKHQsaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLG4uUWMoREt0KG4uZ2MoKSkpfWZ1bmN0aW9uIEF6KCl7QXo9Wix3ZnQ9bmV3IFFSKCJTSU1QTEUiLDApLE1BdD1uZXcgUVIoIkdST1VQX0RFQyIsMSksREF0PW5ldyBRUigiR1JPVVBfTUlYRUQiLDIpLElBdD1uZXcgUVIoIkdST1VQX0lOQyIsMyl9ZnVuY3Rpb24gVWl0KCl7VWl0PVosQWZ0PW5ldyBlQixlTHQ9bmV3IG5CLG5MdD1uZXcgckIsckx0PW5ldyBBayxpTHQ9bmV3IGlCLHNMdD1uZXcgc0IsYUx0PW5ldyBLWixvTHQ9bmV3IExrLGNMdD1uZXcgTWt9ZnVuY3Rpb24gdWllKHQsZSxuKXt2ZWUoKSx1cXQuY2FsbCh0aGlzKSx0aGlzLmE9WGIoWGdlLFt0ZSxLeHRdLFs1OTUsMjEyXSwwLFtRSCxOdXRdLDIpLHRoaXMuYz1uZXcgQXgsdGhpcy5nPXQsdGhpcy5mPWUsdGhpcy5kPW59ZnVuY3Rpb24gdzN0KHQsZSl7dGhpcy5uPVhiKExiLFt0ZSxhb3RdLFszNjQsMjVdLDE0LFtlLHBzKGIuTWF0aC5jZWlsKHQvMzIpKV0sMiksdGhpcy5vPXQsdGhpcy5wPWUsdGhpcy5qPXQtMT4+MSx0aGlzLms9ZS0xPj4xfWZ1bmN0aW9uIHpsbih0LGUpe3dyKGUsIkVuZCBsYWJlbCBwb3N0LXByb2Nlc3NpbmciLDEpLHVzKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgaFkpLG5ldyBmWSksbmV3IGRZKSxvcihlKX1mdW5jdGlvbiBxbG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9WHQodC5wW2UuaS5wXSkrWHQodC5kW2UuaS5wXSkrZS5uLmIrZS5hLmIscz1YdCh0LnBbbi5pLnBdKStYdCh0LmRbbi5pLnBdKStuLm4uYituLmEuYixzLXJ9ZnVuY3Rpb24gSGxuKHQsZSxuKXt2YXIgcixzO2ZvcihyPVBzKG4sY28pLHM9MDt5YyhyLDApIT0wJiZzPGU7cysrKXI9T2EocixQcyh0W3NdLGNvKSksdFtzXT1TcihyKSxyPUZwKHIsMzIpO3JldHVybiBTcihyKX1mdW5jdGlvbiBMeih0KXt2YXIgZSxuLHIscztmb3Iocz0wLG49MCxyPXQubGVuZ3RoO248cjtuKyspZT0oUnIobix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSxlPDY0JiYocz1DMShzLE0wKDEsZSkpKTtyZXR1cm4gc31mdW5jdGlvbiBHbG4odCl7dmFyIGU7cmV0dXJuIHQ9PW51bGw/bnVsbDpuZXcgTnAoKGU9JGModCwhMCksZS5sZW5ndGg+MCYmKFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDMpP2Uuc3Vic3RyKDEpOmUpKX1mdW5jdGlvbiBWbG4odCl7dmFyIGU7cmV0dXJuIHQ9PW51bGw/bnVsbDpuZXcgTnAoKGU9JGModCwhMCksZS5sZW5ndGg+MCYmKFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDMpP2Uuc3Vic3RyKDEpOmUpKX1mdW5jdGlvbiBtM3QodCxlKXt2YXIgbjtyZXR1cm4gdC5pPjAmJihlLmxlbmd0aDx0LmkmJihuPUNJKHNsKGUpLmMsdC5pKSxlPW4pLEljKHQuZywwLGUsMCx0LmkpKSxlLmxlbmd0aD50LmkmJkppKGUsdC5pLG51bGwpLGV9ZnVuY3Rpb24gUWModCxlLG4pe3ZhciByLHMsbztyZXR1cm4gdC5laigpPyhyPXQuaSxvPXQuZmooKSx6SSh0LHIsZSkscz10LlppKDMsbnVsbCxlLHIsbyksbj9uLkVpKHMpOm49cyk6ekkodCx0LmksZSksbn1mdW5jdGlvbiBVbG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IEYwKHQuZSw0LDEwLChzPWUuYyxFdChzLDg4KT91KHMsMjYpOihkbigpLFdoKSksbnVsbCxGZyh0LGUpLCExKSxuP24uRWkocik6bj1yLG59ZnVuY3Rpb24gV2xuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBGMCh0LmUsMywxMCxudWxsLChzPWUuYyxFdChzLDg4KT91KHMsMjYpOihkbigpLFdoKSksRmcodCxlKSwhMSksbj9uLkVpKHIpOm49cixufWZ1bmN0aW9uIGxpZSh0KXtCbSgpO3ZhciBlO3JldHVybiBlPW5ldyB5byh1KHQuZS5XZSgoY2koKSxhNSkpLDgpKSx0LkIuSGMoKGNsKCksTTcpKSYmKGUuYTw9MCYmKGUuYT0yMCksZS5iPD0wJiYoZS5iPTIwKSksZX1mdW5jdGlvbiBoaWUodCl7c3koKTt2YXIgZTtyZXR1cm4odC5xP3QucToodm4oKSx2bigpLGEwKSkuX2IoKFRlKCksTncpKT9lPXUoUSh0LE53KSwxOTcpOmU9dShRKEZhKHQpLENTKSwxOTcpLGV9ZnVuY3Rpb24gaXkodCxlKXt2YXIgbixyO3JldHVybiByPW51bGwsVnModCwoVGUoKSxzVikpJiYobj11KFEodCxzViksOTQpLG4uWGUoZSkmJihyPW4uV2UoZSkpKSxyPT1udWxsJiYocj1RKEZhKHQpLGUpKSxyfWZ1bmN0aW9uIGZpZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSxyPW4uY2QoKSxzPW55KHQuUmMoKSxyKSxmZChzLG4uZGQoKSkmJihzIT1udWxsfHx0LlJjKCkuX2IocikpKTohMX1mdW5jdGlvbiBXaXQodCxlKXt2YXIgbixyLHM7cmV0dXJuIHQuZj4wPyh0LnFqKCkscj1lPT1udWxsPzA6SGkoZSkscz0ociZ2aSkldC5kLmxlbmd0aCxuPWZjZSh0LHMscixlKSxuIT0tMSk6ITF9ZnVuY3Rpb24gWWYodCxlKXt2YXIgbixyLHM7cmV0dXJuIHQuZj4wJiYodC5xaigpLHI9ZT09bnVsbD8wOkhpKGUpLHM9KHImdmkpJXQuZC5sZW5ndGgsbj1yNXQodCxzLHIsZSksbik/bi5kZCgpOm51bGx9ZnVuY3Rpb24gVkkodCxlKXt2YXIgbixyLHMsbztmb3Iobz1hdSh0LmUuVGcoKSxlKSxuPXUodC5nLDExOSkscz0wO3M8dC5pOysrcylpZihyPW5bc10sby5ybChyLmFrKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGRpZSh0KXtpZih0LmI9PW51bGwpe2Zvcig7dC5hLk9iKCk7KWlmKHQuYj10LmEuUGIoKSwhdSh0LmIsNDkpLlpnKCkpcmV0dXJuITA7cmV0dXJuIHQuYj1udWxsLCExfWVsc2UgcmV0dXJuITB9ZnVuY3Rpb24gZ2llKHQsZSl7dC5taigpO3RyeXt0LmQuVmModC5lKyssZSksdC5mPXQuZC5qLHQuZz0tMX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpP3J0KG5ldyBlaCk6cnQobil9fWZ1bmN0aW9uIE16KHQsZSl7bzJ0KCk7dmFyIG4scjtyZXR1cm4gbj16TSgoYlIoKSxiUigpLHNTKSkscj1udWxsLGU9PW4mJihyPXUoRmMoUTh0LHQpLDYxNSkpLHJ8fChyPW5ldyBaWXQodCksZT09biYmeG8oUTh0LHQscikpLHJ9ZnVuY3Rpb24gcGllKHQsZSl7dmFyIG4scjt0LmE9T2EodC5hLDEpLHQuYz1iLk1hdGgubWluKHQuYyxlKSx0LmI9Yi5NYXRoLm1heCh0LmIsZSksdC5kKz1lLG49ZS10LmYscj10LmUrbix0LmY9ci10LmUtbix0LmU9cn1mdW5jdGlvbiBLbG4odCxlKXt2YXIgbjt0LmM9ZSx0LmE9SWxuKGUpLHQuYTw1NCYmKHQuZj0obj1lLmQ+MT9DMShNMChlLmFbMV0sMzIpLFBzKGUuYVswXSxjbykpOlBzKGUuYVswXSxjbyksVnYoQ2EoZS5lLG4pKSkpfWZ1bmN0aW9uIFVJKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dCVlLEREPG4mJm48eDIpP246VnAoKGR4dChCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUsITApLG9iKSl9ZnVuY3Rpb24gbl8odCxlKXt2YXIgbjtnNG4oZSksbj11KFEodCwoVGUoKSxaRykpLDI3NiksbiYmSnQodCxaRyxXZm4obikpLFRnKHQuYyksVGcodC5mKSx5bXQodC5kKSx5bXQodShRKHQsblYpLDIwNykpfWZ1bmN0aW9uIGJpZSh0KXt0aGlzLmU9UHQoVHIsWHIsMjUsdC5sZW5ndGgsMTUsMSksdGhpcy5jPVB0KGRsLGkwLDI1LHQubGVuZ3RoLDE2LDEpLHRoaXMuYj1QdChkbCxpMCwyNSx0Lmxlbmd0aCwxNiwxKSx0aGlzLmY9MH1mdW5jdGlvbiBZbG4odCl7dmFyIGUsbjtmb3IodC5qPVB0KGlhLHZvLDI1LHQucC5jLmxlbmd0aCwxNSwxKSxuPW5ldyBTKHQucCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLHQualtlLnBdPWUuby5iL3QuaX1mdW5jdGlvbiBLaXQodCl7dmFyIGU7dC5jIT0wJiYoZT11KEZlKHQuYSx0LmIpLDI4NyksZS5iPT0xPygrK3QuYix0LmI8dC5hLmMubGVuZ3RoJiZKQih1KEZlKHQuYSx0LmIpLDI4NykpKTotLWUuYiwtLXQuYyl9ZnVuY3Rpb24gWGxuKHQpe3ZhciBlO2U9dC5hO2RvIGU9dShMcihuZXcgYXIobHIoTXMoZSkuYS5LYygpLG5ldyB6KSkpLDE3KS5kLmksZS5rPT0oR24oKSxacykmJnVlKHQuZSxlKTt3aGlsZShlLms9PShHbigpLFpzKSl9ZnVuY3Rpb24geTN0KCl7eTN0PVosQUF0PW5ldyBNdigxNSksdjRlPW5ldyBlbygoY2koKSxxMiksQUF0KSxtNGU9bmV3IGVvKEgyLDE1KSx3NGU9bmV3IGVvKGZmdCxkZSgwKSksYjRlPW5ldyBlbygkNixCRSl9ZnVuY3Rpb24gX2woKXtfbD1aLG5OPW5ldyBYUigiUE9SVFMiLDApLFYyPW5ldyBYUigiUE9SVF9MQUJFTFMiLDEpLGVOPW5ldyBYUigiTk9ERV9MQUJFTFMiLDIpLFh5PW5ldyBYUigiTUlOSU1VTV9TSVpFIiwzKX1mdW5jdGlvbiBXSSh0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5sZW5ndGgsbj0wO248cjtuKz0yKWpjKHQsKFJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKSksKFJyKG4rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4rMSkpKX1mdW5jdGlvbiB2aWUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPWUtdC5lLGg9bi10LmYscz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE4NyksWUkocixyLnMrbyxyLnQraCk7dC5lPWUsdC5mPW59ZnVuY3Rpb24gUWxuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89ZS5iLmIsdC5hPW5ldyBRaSx0LmI9UHQoVHIsWHIsMjUsbywxNSwxKSxuPTAscz1laShlLmIsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDg2KSxyLmc9bisrfWZ1bmN0aW9uIHdpZSh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPWU+PjUsZSY9MzEscz10LmQrbisoZT09MD8wOjEpLHI9UHQoVHIsWHIsMjUscywxNSwxKSxLZG4ocix0LmEsbixlKSxvPW5ldyBLMyh0LmUscyxyKSxPQyhvKSxvfWZ1bmN0aW9uIHgzdCh0LGUsbil7dmFyIHIscztyPXUoRmMoTzcsZSksMTE3KSxzPXUoRmMoaEEsZSksMTE3KSxuPyh4byhPNyx0LHIpLHhvKGhBLHQscykpOih4byhoQSx0LHIpLHhvKE83LHQscykpfWZ1bmN0aW9uIG1pZSh0LGUsbil7dmFyIHIscyxvO2ZvcihzPW51bGwsbz10LmI7bzspe2lmKHI9dC5hLnVlKGUsby5kKSxuJiZyPT0wKXJldHVybiBvO3I+PTA/bz1vLmFbMV06KHM9byxvPW8uYVswXSl9cmV0dXJuIHN9ZnVuY3Rpb24geWllKHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9bnVsbCxvPXQuYjtvOyl7aWYocj10LmEudWUoZSxvLmQpLG4mJnI9PTApcmV0dXJuIG87cjw9MD9vPW8uYVswXToocz1vLG89by5hWzFdKX1yZXR1cm4gc31mdW5jdGlvbiBabG4odCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBzPSExLE8zbih0LmYsbixyKSYmKEVobih0LmYsdC5hW2VdW25dLHQuYVtlXVtyXSksbz10LmFbZV0saD1vW3JdLG9bcl09b1tuXSxvW25dPWgscz0hMCksc31mdW5jdGlvbiBrM3QodCxlLG4scixzKXt2YXIgbyxoLGQ7Zm9yKGg9cztlLmIhPWUuYzspbz11KEZ4KGUpLDEwKSxkPXUoWW8obyxyKS5YYigwKSwxMSksdC5kW2QucF09aCsrLG4uY1tuLmMubGVuZ3RoXT1kO3JldHVybiBofWZ1bmN0aW9uIEUzdCh0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gaD10LmssZD1lLmsscj1uW2guZ11bZC5nXSxzPXllKGl5KHQscikpLG89eWUoaXkoZSxyKSksYi5NYXRoLm1heCgoT24ocykscyksKE9uKG8pLG8pKX1mdW5jdGlvbiBKbG4odCxlLG4pe3ZhciByLHMsbyxoO2ZvcihyPW4vdC5jLmxlbmd0aCxzPTAsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyMDApLENyZShvLG8uZityKnMpLEQxbihvLGUsciksKytzfWZ1bmN0aW9uIHhpZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHM9dShKbih0LmIsbiksMTc3KSxyPTAsaD1uZXcgUyhlLmopO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDExMyksc1tvLmQucF0mJisrcjtyZXR1cm4gcn1mdW5jdGlvbiBraWUodCl7dmFyIGUsbjtyZXR1cm4gZT11KEluKHQuYSw0KSwxMjYpLGUhPW51bGw/KG49UHQoVGZ0LEpjdCw0MTUsZS5sZW5ndGgsMCwxKSxJYyhlLDAsbiwwLGUubGVuZ3RoKSxuKTpqNGV9ZnVuY3Rpb24gdGhuKCl7dmFyIHQ7cmV0dXJuIHpIIT0wJiYodD1ic24oKSx0LXZnZT4yZTMmJih2Z2U9dCxxSD1iLnNldFRpbWVvdXQoYVllLDEwKSkpLHpIKys9PTA/KE5hbigoWXB0KCksWDh0KSksITApOiExfWZ1bmN0aW9uIGVobih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgYXIobHIoTXModCkuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShMcihyKSwxNykscz1uLmQuaSxzLmM9PWUpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVDN0KHQsZSl7dmFyIG4scjtpZihFdChlLDI0NSkpe3I9dShlLDI0NSk7dHJ5e3JldHVybiBuPXQudmQociksbj09MH1jYXRjaChzKXtpZihzPVdpKHMpLCFFdChzLDIwNSkpdGhyb3cgcnQocyl9fXJldHVybiExfWZ1bmN0aW9uIG5obigpe3JldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ+MD8oYi5FcnJvci5zdGFja1RyYWNlTGltaXQ9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTY0LCEwKToic3RhY2siaW4gbmV3IEVycm9yfWZ1bmN0aW9uIHJobih0LGUpe3JldHVybiB5MSgpLHkxKCksZ2YoZWIpLChiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSk/MDp0PGU/LTE6dD5lPzE6THYoaXNOYU4odCksaXNOYU4oZSkpKT4wfWZ1bmN0aW9uIEMzdCh0LGUpe3JldHVybiB5MSgpLHkxKCksZ2YoZWIpLChiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSk/MDp0PGU/LTE6dD5lPzE6THYoaXNOYU4odCksaXNOYU4oZSkpKTwwfWZ1bmN0aW9uIEVpZSh0LGUpe3JldHVybiB5MSgpLHkxKCksZ2YoZWIpLChiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSk/MDp0PGU/LTE6dD5lPzE6THYoaXNOYU4odCksaXNOYU4oZSkpKTw9MH1mdW5jdGlvbiBZaXQodCxlKXtmb3IodmFyIG49MDshZVtuXXx8ZVtuXT09IiI7KW4rKztmb3IodmFyIHI9ZVtuKytdO248ZS5sZW5ndGg7bisrKSFlW25dfHxlW25dPT0iInx8KHIrPXQrZVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gQWgodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPWUrbixrbXQoZSxvLHQubGVuZ3RoKSxoPSIiLHM9ZTtzPG87KXI9Yi5NYXRoLm1pbihzKzFlNCxvKSxoKz1VZW4odC5zbGljZShzLHIpKSxzPXI7cmV0dXJuIGh9ZnVuY3Rpb24gVGllKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbGUsbj1raXQodCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sdWUobywkYyhlLCEwKSk7cmV0dXJuIG99ZnVuY3Rpb24gQ2llKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbGUsbj1raXQodCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sdWUobywkYyhlLCEwKSk7cmV0dXJuIG99ZnVuY3Rpb24gX2llKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbGUsbj1raXQodCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sdWUobywkYyhlLCEwKSk7cmV0dXJuIG99ZnVuY3Rpb24gU2llKHQsZSl7dmFyIG4scixzO2lmKHQuYylRdih0LmMsZSk7ZWxzZSBmb3Iobj1lLUZ1KHQpLHM9bmV3IFModC5kKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNTcpLFNpZShyLEZ1KHIpK24pfWZ1bmN0aW9uIEFpZSh0LGUpe3ZhciBuLHIscztpZih0LmMpWHYodC5jLGUpO2Vsc2UgZm9yKG49ZS14bCh0KSxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTU3KSxBaWUocix4bChyKStuKX1mdW5jdGlvbiBpaG4odCxlKXt2YXIgbixyLHMsbztmb3Iocz1uZXcgWWMoZS5nYygpKSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLG89dWF0KHQsdShuLDU2KSksbyYmKHMuY1tzLmMubGVuZ3RoXT1vKTtyZXR1cm4gc31mdW5jdGlvbiBJeih0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5xaigpLHI9ZT09bnVsbD8wOkhpKGUpLHM9KHImdmkpJXQuZC5sZW5ndGgsbj1yNXQodCxzLHIsZSksbj8oQmVlKHQsbiksbi5kZCgpKTpudWxsfWZ1bmN0aW9uIHN3KHQpe3ZhciBlLG47Zm9yKG49JGFlKHQpLGU9bnVsbDt0LmM9PTI7KWZpKHQpLGV8fChlPShnaSgpLGdpKCksbmV3IGxDKDIpKSxtMihlLG4pLG49ZSksbi4kbCgkYWUodCkpO3JldHVybiBufWZ1bmN0aW9uIG9FKHQpe3ZhciBlLG4scjtpZihyPW51bGwsZT1DZCBpbiB0LmEsbj0hZSxuKXRocm93IHJ0KG5ldyBhZCgiRXZlcnkgZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQuIikpO3JldHVybiByPXM2KEQwKHQsQ2QpKSxyfWZ1bmN0aW9uIER6KHQpe3ZhciBlLG4scjtpZihyPXQuWmcoKSwhcilmb3IoZT0wLG49dC5laCgpO247bj1uLmVoKCkpe2lmKCsrZT5vb3QpcmV0dXJuIG4uZmgoKTtpZihyPW4uWmcoKSxyfHxuPT10KWJyZWFrfXJldHVybiByfWZ1bmN0aW9uIF8zdCh0KXtyZXR1cm4gZyQoKSxFdCh0LDE1Nik/dShKbihjTixMZ2UpLDI4OCkudmcodCk6a2woY04sc2wodCkpP3UoSm4oY04sc2wodCkpLDI4OCkudmcodCk6bnVsbH1mdW5jdGlvbiBzaG4odCl7aWYoT3oocUUsdCkpcmV0dXJuIEZuKCksWUU7aWYoT3ooT2N0LHQpKXJldHVybiBGbigpLEkyO3Rocm93IHJ0KG5ldyBQbigiRXhwZWN0aW5nIHRydWUgb3IgZmFsc2UiKSl9ZnVuY3Rpb24gYWhuKHQsZSl7aWYoZS5jPT10KXJldHVybiBlLmQ7aWYoZS5kPT10KXJldHVybiBlLmM7dGhyb3cgcnQobmV3IFBuKCJJbnB1dCBlZGdlIGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGlucHV0IHBvcnQuIikpfWZ1bmN0aW9uIExpZSh0LGUpe3JldHVybiB0LmU+ZS5lPzE6dC5lPGUuZT8tMTp0LmQ+ZS5kP3QuZTp0LmQ8ZS5kPy1lLmU6dC5lKlB5dCh0LmEsZS5hLHQuZCl9ZnVuY3Rpb24gTWllKHQpe3JldHVybiB0Pj00OCYmdDw0OCtiLk1hdGgubWluKDEwLDEwKT90LTQ4OnQ+PTk3JiZ0PDk3P3QtOTcrMTA6dD49NjUmJnQ8NjU/dC02NSsxMDotMX1mdW5jdGlvbiBJaWUodCxlKXt2YXIgbjtyZXR1cm4gR3QoZSk9PT1HdCh0KT8hMDohRXQoZSwyMSl8fChuPXUoZSwyMSksbi5nYygpIT10LmdjKCkpPyExOnQuSWMobil9ZnVuY3Rpb24gb2huKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIHI9dC5hLmxlbmd0aC0xLG49ZS10LmImcixvPXQuYy1lJnIscz10LmMtdC5iJnIsb1d0KG48cyksbj49bz8oYXVuKHQsZSksLTEpOihvdW4odCxlKSwxKX1mdW5jdGlvbiBjaG4odCxlKXt2YXIgbixyO2ZvcihuPShScihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkpLHI9ZSsxO3I8dC5sZW5ndGgmJihScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocik9PW4pOykrK3I7cmV0dXJuIHItZX1mdW5jdGlvbiBTM3QodCl7c3dpdGNoKHQuZyl7Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gdWhuKHQsZSl7dmFyIG49dC5hLHI7ZT1TdHJpbmcoZSksbi5oYXNPd25Qcm9wZXJ0eShlKSYmKHI9bltlXSk7dmFyIHM9KHBpdCgpLEV1dClbdHlwZW9mIHJdLG89cz9zKHIpOmp5dCh0eXBlb2Ygcik7cmV0dXJuIG99ZnVuY3Rpb24gYXcodCxlKXtpZih0LmE8MCl0aHJvdyBydChuZXcgRm8oIkRpZCBub3QgY2FsbCBiZWZvcmUoLi4uKSBvciBhZnRlciguLi4pIGJlZm9yZSBjYWxsaW5nIGFkZCguLi4pLiIpKTtyZXR1cm4gSTJ0KHQsdC5hLGUpLHR9ZnVuY3Rpb24gbGhuKHQsZSxuLHIpe3ZhciBzLG87ZS5jLmxlbmd0aCE9MCYmKHM9S2JuKG4sciksbz1XZ24oZSksdXMoRyQobmV3IFRuKG51bGwsbmV3IF9uKG8sMSkpLG5ldyAkUSksbmV3IEVYdCh0LG4scyxyKSkpfWZ1bmN0aW9uIHQ2KHQsZSxuKXt2YXIgcjt0LkRiJmU/bj09bnVsbD9PcG4odCxlKToocj1ic3QodCxlKSxyPT0tMT90LkViPW46SmkoczIodC5FYikscixuKSk6biE9bnVsbCYmaXZuKHQsZSxuKX1mdW5jdGlvbiBpdSh0KXt2YXIgZSxuO3JldHVybiB0LkRiJjMyfHwobj0oZT11KEluKHQsMTYpLDI2KSxabihlfHx0LnpoKCkpLVpuKHQuemgoKSkpLG4hPTAmJnQ2KHQsMzIsUHQoWG4sSWUsMSxuLDUsMSkpKSx0fWZ1bmN0aW9uIGhobih0KXt2YXIgZTtyZXR1cm4gdC5ifHxlWWUodCwoZT1WUWUodC5lLHQuYSksIWV8fCFobihPY3QsWWYoKCFlLmImJihlLmI9bmV3IHlsKChkbigpLFFhKSxjYyxlKSksZS5iKSwicXVhbGlmaWVkIikpKSksdC5jfWZ1bmN0aW9uIGZobih0LGUsbil7dmFyIHIscyxvO3JldHVybiByPXUoU3QoaWwodC5hKSxlKSw4Nyksbz0ocz1yLmMsc3x8KGRuKCksVjEpKSwoby5raCgpP0twKHQuYix1KG8sNDkpKTpvKT09bj93cShyKTpQOChyLG4pLG99ZnVuY3Rpb24gZGhuKHQsZSl7KCFlJiZjb25zb2xlLmdyb3VwQ29sbGFwc2VkIT1udWxsP2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ6Y29uc29sZS5ncm91cD8/Y29uc29sZS5sb2cpLmNhbGwoY29uc29sZSx0KX1mdW5jdGlvbiBnaG4odCxlLG4scil7cj09dCx1KG4uYiw2NSksdShuLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSkuYy5iLHhtdChyLGUsdCl9ZnVuY3Rpb24gcGhuKHQpe3ZhciBlLG47Zm9yKGU9bmV3IFModC5nKTtlLmE8ZS5jLmMubGVuZ3RoOyl1KEooZSksNTYyKTtuPW5ldyBGY2UodC5nLFh0KHQuYSksdC5jKSxrNG4obiksdC5nPW4uYix0LmQ9bi5hfWZ1bmN0aW9uIEEzdCh0LGUsbil7ZS5iPWIuTWF0aC5tYXgoZS5iLC1uLmEpLGUuYz1iLk1hdGgubWF4KGUuYyxuLmEtdC5hKSxlLmQ9Yi5NYXRoLm1heChlLmQsLW4uYiksZS5hPWIuTWF0aC5tYXgoZS5hLG4uYi10LmIpfWZ1bmN0aW9uIGJobih0LGUpe3JldHVybiB0LmU8ZS5lPy0xOnQuZT5lLmU/MTp0LmY8ZS5mPy0xOnQuZj5lLmY/MTpIaSh0KS1IaShlKX1mdW5jdGlvbiBPeih0LGUpe3JldHVybiBPbih0KSxlPT1udWxsPyExOmhuKHQsZSk/ITA6dC5sZW5ndGg9PWUubGVuZ3RoJiZobih0LnRvTG93ZXJDYXNlKCksZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB2aG4odCxlKXt2YXIgbixyLHMsbztmb3Iocj0wLHM9ZS5nYygpO3I8czsrK3Ipbj1lLmlsKHIpLEV0KG4sOTkpJiZ1KG4sMTgpLkJiJmRjJiYobz1lLmpsKHIpLG8hPW51bGwmJnVhdCh0LHUobyw1NikpKX1mdW5jdGlvbiBEaWUodCxlLG4pe3ZhciByLHMsbztmb3Iobz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMSkscj1uZXcgY2oodShKbih0LmEscy5iKSw2NSkpLHVlKGUuYSxyKSxEaWUodCxyLHMpfWZ1bmN0aW9uIGcyKHQpe3ZhciBlLG47cmV0dXJuIHljKHQsLTEyOSk+MCYmeWModCwxMjgpPDA/KGU9U3IodCkrMTI4LG49KFhLdCgpLGFFdClbZV0sIW4mJihuPWFFdFtlXT1uZXcgQ20odCkpLG4pOm5ldyBDbSh0KX1mdW5jdGlvbiBPaWUodCxlKXt2YXIgbixyO3JldHVybiBuPWUuSGgodC5hKSxuJiYocj1CcihZZigoIW4uYiYmKG4uYj1uZXcgeWwoKGRuKCksUWEpLGNjLG4pKSxuLmIpLG9pKSksciE9bnVsbCk/cjplLm5lKCl9ZnVuY3Rpb24gd2huKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLkhoKHQuYSksbiYmKHI9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSxvaSkpLHIhPW51bGwpP3I6ZS5uZSgpfWZ1bmN0aW9uIG1obih0LGUpe3BydCgpO3ZhciBuLHI7Zm9yKHI9bmV3IGFyKGxyKHowKHQpLmEuS2MoKSxuZXcgeikpO3pyKHIpOylpZihuPXUoTHIociksMTcpLG4uZC5pPT1lfHxuLmMuaT09ZSlyZXR1cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBMM3QodCxlLG4pe3RoaXMuYz10LHRoaXMuZj1uZXcgbGUsdGhpcy5lPW5ldyBUYSx0aGlzLmo9bmV3IFJ2dCx0aGlzLm49bmV3IFJ2dCx0aGlzLmI9ZSx0aGlzLmc9bmV3IGloKGUuYyxlLmQsZS5iLGUuYSksdGhpcy5hPW59ZnVuY3Rpb24gWGl0KHQpe3ZhciBlLG4scixzO2Zvcih0aGlzLmE9bmV3IEEwLHRoaXMuZD1uZXcgcXMsdGhpcy5lPTAsbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLCF0aGlzLmYmJih0aGlzLmY9ZSksRXJ0KHRoaXMsZSl9ZnVuY3Rpb24gTmllKHQpe0pwKCksdC5sZW5ndGg9PTA/KHRoaXMuZT0wLHRoaXMuZD0xLHRoaXMuYT1jdChvdChUciwxKSxYciwyNSwxNSxbMF0pKToodGhpcy5lPTEsdGhpcy5kPXQubGVuZ3RoLHRoaXMuYT10LE9DKHRoaXMpKX1mdW5jdGlvbiByXyh0LGUsbil7dXF0LmNhbGwodGhpcyksdGhpcy5hPVB0KFhnZSxLeHQsMjEyLChLZigpLGN0KG90KE15LDEpLGFlLDIzMiwwLFtzYyx0dSxhY10pKS5sZW5ndGgsMCwxKSx0aGlzLmI9dCx0aGlzLmQ9ZSx0aGlzLmM9bn1mdW5jdGlvbiBQaWUodCl7dGhpcy5kPW5ldyBsZSx0aGlzLmU9bmV3IG4yLHRoaXMuYz1QdChUcixYciwyNSwoYmUoKSxjdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pKS5sZW5ndGgsMTUsMSksdGhpcy5iPXR9ZnVuY3Rpb24geWhuKHQpe3ZhciBlLG4scixzLG8saDtmb3IoaD11KFEodCwoc2UoKSxfaSkpLDExKSxKdChoLGc3LHQuaS5uLmIpLGU9Z2QodC5lKSxyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sc2EobixoKX1mdW5jdGlvbiB4aG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihuPXUoUSh0LChzZSgpLF9pKSksMTEpLEp0KG4sZzcsdC5pLm4uYiksZT1nZCh0LmcpLHM9ZSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxEYShyLG4pfWZ1bmN0aW9uIGtobih0KXt2YXIgZSxuO3JldHVybiBWcyh0LmQuaSwoVGUoKSxiNykpPyhlPXUoUSh0LmMuaSxiNyksMTkpLG49dShRKHQuZC5pLGI3KSwxOSksZHUoZS5hLG4uYSk+MCk6ITF9ZnVuY3Rpb24gRmllKHQpe3ZhciBlO0d0KHFlKHQsKGNpKCkscjUpKSk9PT1HdCgoJDAoKSxIVikpJiYodHModCk/KGU9dShxZSh0cyh0KSxyNSksMzM0KSxibyh0LHI1LGUpKTpibyh0LHI1LFlTKSl9ZnVuY3Rpb24gRWhuKHQsZSxuKXt2YXIgcixzO0lzdCh0LmUsZSxuLChiZSgpLEJuKSksSXN0KHQuaSxlLG4sSG4pLHQuYSYmKHM9dShRKGUsKHNlKCksX2kpKSwxMSkscj11KFEobixfaSksMTEpLHhydCh0LmcscyxyKSl9ZnVuY3Rpb24gQmllKHQsZSxuKXt2YXIgcixzLG87cj1lLmMucCxvPWUucCx0LmJbcl1bb109bmV3IHRRdCh0LGUpLG4mJih0LmFbcl1bb109bmV3IFdrKGUpLHM9dShRKGUsKHNlKCksSXcpKSwxMCkscyYmbG4odC5kLHMsZSkpfWZ1bmN0aW9uIFJpZSh0LGUpe3ZhciBuLHIscztpZih1ZShuRyx0KSxlLkZjKHQpLG49dShKbihxdXQsdCksMjEpLG4pZm9yKHM9bi5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzMyksUm8obkcsciwwKSE9LTF8fFJpZShyLGUpfWZ1bmN0aW9uIFRobih0LGUsbil7dmFyIHI7KEZnZT8oTWxuKHQpLCEwKTpCZ2V8fGpnZT8oczgoKSwhMCk6UmdlJiYoczgoKSwhMSkpJiYocj1uZXcgZkt0KGUpLHIuYj1uLFMwbih0LHIpKX1mdW5jdGlvbiBRaXQodCxlKXt2YXIgbjtuPSF0LkEuSGMoKF9sKCksVjIpKXx8dC5xPT0ob2EoKSxWYyksdC51LkhjKChRdSgpLHRnKSk/bj9VNG4odCxlKTpnaGUodCxlKTp0LnUuSGMoeGIpJiYobj9oNG4odCxlKTpBaGUodCxlKSl9ZnVuY3Rpb24gY0UodCxlKXt2YXIgbixyO2lmKCsrdC5qLGUhPW51bGwmJihuPShyPXQuYS5DYixFdChyLDk3KT91KHIsOTcpLkpnKCk6bnVsbCksbXBuKGUsbikpKXt0Nih0LmEsNCxuKTtyZXR1cm59dDYodC5hLDQsdShlLDEyNikpfWZ1bmN0aW9uIGppZSh0LGUsbil7cmV0dXJuIG5ldyBpaChiLk1hdGgubWluKHQuYSxlLmEpLW4vMixiLk1hdGgubWluKHQuYixlLmIpLW4vMixiLk1hdGguYWJzKHQuYS1lLmEpK24sYi5NYXRoLmFicyh0LmItZS5iKStuKX1mdW5jdGlvbiBDaG4odCxlKXt2YXIgbixyO3JldHVybiBuPWR1KHQuYS5jLnAsZS5hLmMucCksbiE9MD9uOihyPWR1KHQuYS5kLmkucCxlLmEuZC5pLnApLHIhPTA/cjpkdShlLmEuZC5wLHQuYS5kLnApKX1mdW5jdGlvbiBfaG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiBvPWUuaixoPW4uaixvIT1oP28uZy1oLmc6KHI9dC5mW2UucF0scz10LmZbbi5wXSxyPT0wJiZzPT0wPzA6cj09MD8tMTpzPT0wPzE6THMocixzKSl9ZnVuY3Rpb24gJGllKHQsZSxuKXt2YXIgcixzLG87aWYoIW5bZS5kXSlmb3IobltlLmRdPSEwLHM9bmV3IFMobzQoZSkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDIxMyksbz1feihyLGUpLCRpZSh0LG8sbil9ZnVuY3Rpb24gTTN0KHQsZSxuKXt2YXIgcjtzd2l0Y2gocj1uW3QuZ11bZV0sdC5nKXtjYXNlIDE6Y2FzZSAzOnJldHVybiBuZXcgJGUoMCxyKTtjYXNlIDI6Y2FzZSA0OnJldHVybiBuZXcgJGUociwwKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBTaG4odCxlLG4pe3ZhciByLHM7cz11KGxydChlLmYpLDIwOSk7dHJ5e3MuWmUodCxuKSxGZW4oZS5mLHMpfWNhdGNoKG8pe3Rocm93IG89V2kobyksRXQobywxMDIpPyhyPW8scnQocikpOnJ0KG8pfX1mdW5jdGlvbiB6aWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdztyZXR1cm4gcj1udWxsLGQ9Ynh0KHo4KCksZSksbz1udWxsLGQmJihzPW51bGwsdz1neHQoZCxuKSxoPW51bGwsdyE9bnVsbCYmKGg9dC5ZZShkLHcpKSxzPWgsbz1zKSxyPW8scn1mdW5jdGlvbiBBaG4odCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBzPW5ldyBGMCh0LmUsMSwxMywoaD1lLmMsaHx8KGRuKCksVjEpKSwobz1uLmMsb3x8KGRuKCksVjEpKSxGZyh0LGUpLCExKSxyP3IuRWkocyk6cj1zLHJ9ZnVuY3Rpb24gWml0KHQsZSxuLHIpe3ZhciBzO2lmKHM9dC5sZW5ndGgsZT49cylyZXR1cm4gcztmb3IoZT1lPjA/ZTowO2U8cyYmIWJpdCgoUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpKSxuLHIpO2UrKyk7cmV0dXJuIGV9ZnVuY3Rpb24gRDEodCxlKXt2YXIgbixyO2ZvcihyPXQuYy5sZW5ndGgsZS5sZW5ndGg8ciYmKGU9d1IobmV3IEFycmF5KHIpLGUpKSxuPTA7bjxyOysrbilKaShlLG4sdC5jW25dKTtyZXR1cm4gZS5sZW5ndGg+ciYmSmkoZSxyLG51bGwpLGV9ZnVuY3Rpb24gcWllKHQsZSl7dmFyIG4scjtmb3Iocj10LmEubGVuZ3RoLGUubGVuZ3RoPHImJihlPXdSKG5ldyBBcnJheShyKSxlKSksbj0wO248cjsrK24pSmkoZSxuLHQuYVtuXSk7cmV0dXJuIGUubGVuZ3RoPnImJkppKGUscixudWxsKSxlfWZ1bmN0aW9uIHAyKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHM9dShKbih0LmUsZSksMzg3KSxzPyhvPUoydChzLG4pLE9VdCh0LHMpLG8pOihyPW5ldyBfdnQodCxlLG4pLGtpKHQuZSxlLHIpLHNRdChyKSxudWxsKX1mdW5jdGlvbiBMaG4odCl7dmFyIGU7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihlPUVibigkYyh0LCEwKSksZT09bnVsbCl0aHJvdyBydChuZXcgcmV0KCJJbnZhbGlkIGhleEJpbmFyeSB2YWx1ZTogJyIrdCsiJyIpKTtyZXR1cm4gZX1mdW5jdGlvbiBLSSh0KXtyZXR1cm4gSnAoKSx5Yyh0LDApPDA/eWModCwtMSkhPTA/bmV3IGc0dCgtMSxPOCh0KSk6X3V0OnljKHQsMTApPD0wP3dFdFtTcih0KV06bmV3IGc0dCgxLHQpfWZ1bmN0aW9uIEppdCgpe3JldHVybiBMcSgpLGN0KG90KEVwZSwxKSxhZSwxNTksMCxbeHBlLHlwZSxrcGUsZnBlLGhwZSxkcGUsYnBlLHBwZSxncGUsbXBlLHdwZSx2cGUsdXBlLGNwZSxscGUsYXBlLHNwZSxvcGUscnBlLG5wZSxpcGUsUHV0XSl9ZnVuY3Rpb24gSGllKHQpe3ZhciBlO3RoaXMuZD1uZXcgbGUsdGhpcy5qPW5ldyBUYSx0aGlzLmc9bmV3IFRhLGU9dC5nLmIsdGhpcy5mPXUoUShGYShlKSwoVGUoKSxWbCkpLDEwMyksdGhpcy5lPVh0KHllKEZ6KGUsR3kpKSl9ZnVuY3Rpb24gR2llKHQpe3RoaXMuYj1uZXcgbGUsdGhpcy5lPW5ldyBsZSx0aGlzLmQ9dCx0aGlzLmE9IWo5KFJpKG5ldyBUbihudWxsLG5ldyBGdihuZXcgUzEodC5iKSkpLG5ldyBadChuZXcgTUYpKSkuc2QoKFdiKCksSkUpKX1mdW5jdGlvbiBYZigpe1hmPVoscW49bmV3IEFNKCJQQVJFTlRTIiwwKSxKcz1uZXcgQU0oIk5PREVTIiwxKSxJZD1uZXcgQU0oIkVER0VTIiwyKSwkMj1uZXcgQU0oIlBPUlRTIiwzKSxYZz1uZXcgQU0oIkxBQkVMUyIsNCl9ZnVuY3Rpb24gYzQoKXtjND1aLG1iPW5ldyBNTSgiRElTVFJJQlVURUQiLDApLEpPPW5ldyBNTSgiSlVTVElGSUVEIiwxKSxDQXQ9bmV3IE1NKCJCRUdJTiIsMiksWFM9bmV3IE1NKE5FLDMpLF9BdD1uZXcgTU0oIkVORCIsNCl9ZnVuY3Rpb24gTWhuKHQpe3ZhciBlO3N3aXRjaChlPXQueWkobnVsbCksZSl7Y2FzZSAxMDpyZXR1cm4gMDtjYXNlIDE1OnJldHVybiAxO2Nhc2UgMTQ6cmV0dXJuIDI7Y2FzZSAxMTpyZXR1cm4gMztjYXNlIDIxOnJldHVybiA0fXJldHVybi0xfWZ1bmN0aW9uIHRzdCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIGFvKCksWjA7Y2FzZSA0OnJldHVybiBhbygpLGpoO2Nhc2UgMjpyZXR1cm4gYW8oKSxrZjtjYXNlIDM6cmV0dXJuIGFvKCksUTB9cmV0dXJuIGFvKCksYzB9ZnVuY3Rpb24gSWhuKHQsZSxuKXt2YXIgcjtzd2l0Y2gocj1uLnEuZ2V0RnVsbFllYXIoKS1uYituYixyPDAmJihyPS1yKSxlKXtjYXNlIDE6dC5hKz1yO2JyZWFrO2Nhc2UgMjpYZCh0LHIlMTAwLDIpO2JyZWFrO2RlZmF1bHQ6WGQodCxyLGUpfX1mdW5jdGlvbiBlaSh0LGUpe3ZhciBuLHI7aWYoVW0oZSx0LmIpLGU+PXQuYj4+MSlmb3Iocj10LmMsbj10LmI7bj5lOy0tbilyPXIuYjtlbHNlIGZvcihyPXQuYS5hLG49MDtuPGU7KytuKXI9ci5hO3JldHVybiBuZXcgbEt0KHQsZSxyKX1mdW5jdGlvbiBOeigpe056PVosSXV0PW5ldyBDYnQoIk5VTV9PRl9FWFRFUk5BTF9TSURFU19USEFOX05VTV9PRl9FWFRFTlNJT05TX0xBU1QiLDApLE9FdD1uZXcgQ2J0KCJDT1JORVJfQ0FTRVNfVEhBTl9TSU5HTEVfU0lERV9MQVNUIiwxKX1mdW5jdGlvbiBEaG4odCl7dmFyIGUsbixyLHM7Zm9yKHI9a2duKHQpLFhzKHIsUmJlKSxzPXQuZCxzLmM9UHQoWG4sSWUsMSwwLDUsMSksbj1uZXcgUyhyKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw0NTYpLEFzKHMsZS5iKX1mdW5jdGlvbiBWaWUodCl7dmFyIGUsbixyO2ZvcihyPSghdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksdC5vKSxuPXIuYy5LYygpO24uZSE9bi5pLmdjKCk7KWU9dShuLm5qKCksNDIpLGUuZGQoKTtyZXR1cm4gZkkocil9ZnVuY3Rpb24gT2huKHQpe3ZhciBlO0R4KHUoUSh0LChUZSgpLG9zKSksOTgpKSYmKGU9dC5iLE1vZSgoQW4oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwyOSkpKSxNb2UodShGZShlLGUuYy5sZW5ndGgtMSksMjkpKSl9ZnVuY3Rpb24gVWllKHQsZSl7dmFyIG4scixzLG87Zm9yKG49MCxzPW5ldyBTKGUuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLG89ci5vLmErci5kLmMrci5kLmIrdC5qLG49Yi5NYXRoLm1heChuLG8pO3JldHVybiBufWZ1bmN0aW9uIFB6KHQpe3ZhciBlLG4scixzO2ZvcihzPTAsbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllPShScihuLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobikpLGU+PTY0JiZlPDEyOCYmKHM9QzEocyxNMCgxLGUtNjQpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gRnoodCxlKXt2YXIgbixyO3JldHVybiByPW51bGwsVnModCwoY2koKSxxNikpJiYobj11KFEodCxxNiksOTQpLG4uWGUoZSkmJihyPW4uV2UoZSkpKSxyPT1udWxsJiZGYSh0KSYmKHI9UShGYSh0KSxlKSkscn1mdW5jdGlvbiBXaWUodCxlKXt2YXIgbixyLHM7cz1lLmQuaSxyPXMuaywhKHI9PShHbigpLERzKXx8cj09ajEpJiYobj1uZXcgYXIobHIoTXMocykuYS5LYygpLG5ldyB6KSksenIobikmJmtpKHQuayxlLHUoTHIobiksMTcpKSl9ZnVuY3Rpb24gZXN0KHQsZSl7dmFyIG4scixzO3JldHVybiByPXluKHQuVGcoKSxlKSxuPWUtdC5BaCgpLG48MD8ocz10LllnKHIpLHM+PTA/dC5saChzKTp6c3QodCxyKSk6bjwwP3pzdCh0LHIpOnUociw2NikuTmooKS5Taih0LHQueWgoKSxuKX1mdW5jdGlvbiBEZSh0KXt2YXIgZTtpZihFdCh0LmEsNCkpe2lmKGU9XzN0KHQuYSksZT09bnVsbCl0aHJvdyBydChuZXcgRm8oRzFlK3QuYisiJy4gIitIMWUrKEwwKHVOKSx1Ti5rKSthOHQpKTtyZXR1cm4gZX1lbHNlIHJldHVybiB0LmF9ZnVuY3Rpb24gTmhuKHQpe3ZhciBlO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYoZT10NW4oJGModCwhMCkpLGU9PW51bGwpdGhyb3cgcnQobmV3IHJldCgiSW52YWxpZCBiYXNlNjRCaW5hcnkgdmFsdWU6ICciK3QrIiciKSk7cmV0dXJuIGV9ZnVuY3Rpb24gZHIodCl7dmFyIGU7dHJ5e3JldHVybiBlPXQuaS5YYih0LmUpLHQubWooKSx0Lmc9dC5lKyssZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpPyh0Lm1qKCkscnQobmV3IGxjKSk6cnQobil9fWZ1bmN0aW9uIG5zdCh0KXt2YXIgZTt0cnl7cmV0dXJuIGU9dC5jLmtpKHQuZSksdC5taigpLHQuZz10LmUrKyxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksRXQobiw3Myk/KHQubWooKSxydChuZXcgbGMpKTpydChuKX19ZnVuY3Rpb24gaV8oKXtpXz1aLGM3dD0oY2koKSxpQXQpLCR1dD1GU3QsRnBlPSQ2LG83dD1xMiwkcGU9KEt6KCksJEV0KSxqcGU9UkV0LHpwZT1xRXQsUnBlPUJFdCxCcGU9KFNpdCgpLGk3dCksanV0PU9wZSxhN3Q9TnBlLGVHPVBwZX1mdW5jdGlvbiBCeih0KXtzd2l0Y2gocGJ0KCksdGhpcy5jPW5ldyBsZSx0aGlzLmQ9dCx0Lmcpe2Nhc2UgMDpjYXNlIDI6dGhpcy5hPUV3dChfN3QpLHRoaXMuYj1zczticmVhaztjYXNlIDM6Y2FzZSAxOnRoaXMuYT1fN3QsdGhpcy5iPVRzfX1mdW5jdGlvbiBLaWUodCxlLG4pe3ZhciByLHM7aWYodC5jKXl1KHQuYyx0LmMuaStlKSx4dSh0LmMsdC5jLmorbik7ZWxzZSBmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE1NyksS2llKHIsZSxuKX1mdW5jdGlvbiBQaG4odCxlKXt2YXIgbixyO2lmKHQuai5sZW5ndGghPWUuai5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MCxyPXQuai5sZW5ndGg7bjxyO24rKylpZighaG4odC5qW25dLGUualtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUnoodCxlLG4pe3ZhciByO2UuYS5sZW5ndGg+MCYmKHVlKHQuYixuZXcgQUt0KGUuYSxuKSkscj1lLmEubGVuZ3RoLDA8cj9lLmE9ZS5hLnN1YnN0cigwLDApOjA+ciYmKGUuYSs9RFV0KFB0KG1oLHZkLDI1LC1yLDE1LDEpKSkpfWZ1bmN0aW9uIFlpZSh0LGUpe3ZhciBuLHIscztmb3Iobj10Lm8scz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmUuYT1CZm4ocixuLmEpLHIuZS5iPW4uYipYdCh5ZShyLmIuV2UoWkgpKSl9ZnVuY3Rpb24gRmhuKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIHM9dC5rLG49WHQoeWUoUSh0LChzZSgpLER3KSkpKSxvPWUuayxyPVh0KHllKFEoZSxEdykpKSxvIT0oR24oKSx4cyk/LTE6cyE9eHM/MTpuPT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gQmhuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHUoSm4odC5nLGUuYSksNDYpLmEsNjUpLHI9dSh1KEpuKHQuZyxlLmIpLDQ2KS5hLDY1KSxIcChlLmEsZS5iKS1IcChlLmEsbDJ0KG4uYikpLUhwKGUuYixsMnQoci5iKSl9ZnVuY3Rpb24gUmhuKHQsZSl7dmFyIG47cmV0dXJuIG49dShRKHQsKFRlKCksX28pKSw3NCksSmV0KGUsRGJlKT9uP19oKG4pOihuPW5ldyBEdSxKdCh0LF9vLG4pKTpuJiZKdCh0LF9vLG51bGwpLG59ZnVuY3Rpb24gWGllKHQpe3ZhciBlO3JldHVybiBlPW5ldyBfcCxlLmErPSJuIix0LmshPShHbigpLERzKSYmVnIoVnIoKGUuYSs9IigiLGUpLHNudCh0LmspLnRvTG93ZXJDYXNlKCkpLCIpIiksVnIoKGUuYSs9Il8iLGUpLFpJKHQpKSxlLmF9ZnVuY3Rpb24gamhuKHQsZSl7d3IoZSwiU2VsZi1Mb29wIHBvc3QtcHJvY2Vzc2luZyIsMSksdXMoUmkoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyBYWSksbmV3IFFZKSxuZXcgbEYpLG5ldyBaWSksb3IoZSl9ZnVuY3Rpb24gZTYodCxlLG4scil7dmFyIHM7cmV0dXJuIG4+PTA/dC5oaChlLG4scik6KHQuZWgoKSYmKHI9KHM9dC5WZygpLHM+PTA/dC5RZyhyKTp0LmVoKCkuaWgodCwtMS1zLG51bGwscikpKSx0LlNnKGUsbixyKSl9ZnVuY3Rpb24gSTN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgNzohdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLHhyKHQuZSk7cmV0dXJuO2Nhc2UgODohdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHhyKHQuZCk7cmV0dXJufXYzdCh0LGUpfWZ1bmN0aW9uIFFmKHQsZSl7dmFyIG47bj10LlpjKGUpO3RyeXtyZXR1cm4gbi5QYigpfWNhdGNoKHIpe3Rocm93IHI9V2kociksRXQociwxMDkpP3J0KG5ldyBtbygiQ2FuJ3QgZ2V0IGVsZW1lbnQgIitlKSk6cnQocil9fWZ1bmN0aW9uIEQzdCh0LGUpe3RoaXMuZT10LGU8Y290Pyh0aGlzLmQ9MSx0aGlzLmE9Y3Qob3QoVHIsMSksWHIsMjUsMTUsW2V8MF0pKToodGhpcy5kPTIsdGhpcy5hPWN0KG90KFRyLDEpLFhyLDI1LDE1LFtlJWNvdHwwLGUvY290fDBdKSl9ZnVuY3Rpb24gUWllKHQsZSl7dm4oKTt2YXIgbixyLHMsbztmb3Iobj10LG89ZSxFdCh0LDIxKSYmIUV0KGUsMjEpJiYobj1lLG89dCkscz1uLktjKCk7cy5PYigpOylpZihyPXMuUGIoKSxvLkhjKHIpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEJhKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gcj10LlhjKGUpLHIhPS0xJiYodC5laigpPyhvPXQuZmooKSxoPXI2KHQscikscz10LlppKDQsaCxudWxsLHIsbyksbj9uLkVpKHMpOm49cyk6cjYodCxyKSksbn1mdW5jdGlvbiAkaG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiByPXQuWGMoZSksciE9LTEmJih0LmVqKCk/KG89dC5maigpLGg9RGoodCxyKSxzPXQuWmkoNCxoLG51bGwscixvKSxuP24uRWkocyk6bj1zKTpEaih0LHIpKSxufWZ1bmN0aW9uIFppZSh0LGUpe3ZhciBuO3N3aXRjaChuPXUoZ28odC5iLGUpLDEyNCkubixlLmcpe2Nhc2UgMTp0LnQ+PTAmJihuLmQ9dC50KTticmVhaztjYXNlIDM6dC50Pj0wJiYobi5hPXQudCl9dC5DJiYobi5iPXQuQy5iLG4uYz10LkMuYyl9ZnVuY3Rpb24gbjYoKXtuNj1aLGNPPW5ldyAkUihScSwwKSxvTz1uZXcgJFIoeG90LDEpLHVPPW5ldyAkUihrb3QsMiksbE89bmV3ICRSKEVvdCwzKSxjTy5hPSExLG9PLmE9ITAsdU8uYT0hMSxsTy5hPSEwfWZ1bmN0aW9uIHNfKCl7c189WixoTz1uZXcgalIoUnEsMCksSkg9bmV3IGpSKHhvdCwxKSx0Rz1uZXcgalIoa290LDIpLGZPPW5ldyBqUihFb3QsMyksaE8uYT0hMSxKSC5hPSEwLHRHLmE9ITEsZk8uYT0hMH1mdW5jdGlvbiB6aG4odCl7dmFyIGU7ZT10LmE7ZG8gZT11KExyKG5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKSksMTcpLmMuaSxlLms9PShHbigpLFpzKSYmdC5iLkZjKGUpO3doaWxlKGUuaz09KEduKCksWnMpKTt0LmI9YTIodC5iKX1mdW5jdGlvbiBxaG4odCl7dmFyIGUsbixyO2ZvcihyPXQuYy5hLHQucD0oQXIociksbmV3IFB1KHIpKSxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxlLnA9Q2duKGUpLmE7dm4oKSxYcyh0LnAsbmV3IG5RKX1mdW5jdGlvbiBKaWUodCl7dmFyIGUsbixyLHM7aWYocj0wLHM9Z3kodCkscy5jLmxlbmd0aD09MClyZXR1cm4gMTtmb3Iobj1uZXcgUyhzKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwzMykscis9SmllKGUpO3JldHVybiByfWZ1bmN0aW9uIEhobih0LGUpe3ZhciBuLHIscztmb3Iocz0wLHI9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDExMSkscys9bi5kLmIrbi5iLnJmKCkuYStuLmQuYyxyLk9iKCkmJihzKz10LncpO3JldHVybiBzfWZ1bmN0aW9uIEdobih0LGUpe3ZhciBuLHIscztmb3Iocz0wLHI9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDExMSkscys9bi5kLmQrbi5iLnJmKCkuYituLmQuYSxyLk9iKCkmJihzKz10LncpO3JldHVybiBzfWZ1bmN0aW9uIFZobih0LGUsbixyKXtpZihlLmE8ci5hKXJldHVybiEwO2lmKGUuYT09ci5hKXtpZihlLmI8ci5iKXJldHVybiEwO2lmKGUuYj09ci5iJiZ0LmI+bi5iKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHJzdCh0LGUpe3JldHVybiBlYSh0KT8hIWxnZVtlXTp0LmhtPyEhdC5obVtlXTpObSh0KT8hIXVnZVtlXTpPbSh0KT8hIWNnZVtlXTohMX1mdW5jdGlvbiBibyh0LGUsbil7cmV0dXJuIG49PW51bGw/KCF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSxJeih0Lm8sZSkpOighdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksWXoodC5vLGUsbikpLHR9ZnVuY3Rpb24gVWhuKHQsZSxuLHIpe3ZhciBzLG87bz1lLlhlKChjaSgpLHM1KSk/dShlLldlKHM1KSwyMSk6dC5qLHM9UHVuKG8pLHMhPShMcSgpLFB1dCkmJihuJiYhUzN0KHMpfHxCNHQoVGJuKHQscyxyKSxlKSl9ZnVuY3Rpb24ganoodCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBvPXluKHQuVGcoKSxlKSxzPWUtdC5BaCgpLHM8MD8oaD10LllnKG8pLGg+PTA/dC5fZyhoLG4sITApOmx3KHQsbyxuKSk6dShvLDY2KS5OaigpLlBqKHQsdC55aCgpLHMsbixyKX1mdW5jdGlvbiBXaG4odCxlLG4scil7dmFyIHMsbyxoO24ubWgoZSkmJih0bygpLFlydChlKT8ocz11KG4uYWgoZSksMTUzKSx2aG4odCxzKSk6KG89KGg9ZSxoP3Uociw0OSkueGgoaCk6bnVsbCksbyYmWVdlKG4uYWgoZSksbykpKX1mdW5jdGlvbiBLaG4odCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB0dygpLGFPO2Nhc2UgMzpyZXR1cm4gdHcoKSxzTztjYXNlIDI6cmV0dXJuIHR3KCksQnV0O2Nhc2UgNDpyZXR1cm4gdHcoKSxGdXQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTzN0KHQpe3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSBPYXQ6cmV0dXJuIEJnKHQpO2Nhc2UgTHh0OnJldHVybiBwcyh0KTtjYXNlIHU2OnJldHVybiBGbigpLHQ/MTIzMToxMjM3O2RlZmF1bHQ6cmV0dXJuIHQ9PW51bGw/MDpJdih0KX19ZnVuY3Rpb24gWWhuKHQsZSxuKXtpZih0LmUpc3dpdGNoKHQuYil7Y2FzZSAxOlRubih0LmMsZSxuKTticmVhaztjYXNlIDA6Q25uKHQuYyxlLG4pfWVsc2UgQlp0KHQuYyxlLG4pO3QuYVtlLnBdW24ucF09dC5jLmksdC5hW24ucF1bZS5wXT10LmMuZX1mdW5jdGlvbiB0c2UodCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihuPVB0KG8wLHRlLDE5Myx0Lmxlbmd0aCwwLDIpLGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdPXUoYmFuKHRbZV0sdFtlXS5sZW5ndGgpLDE5Myk7cmV0dXJuIG59ZnVuY3Rpb24gJHoodCl7dmFyIGU7aWYoX2l0KHQpKXJldHVybiB6aih0KSx0LkxrKCkmJihlPWRfKHQuZSx0LmIsdC5jLHQuYSx0LmopLHQuaj1lKSx0Lmc9dC5hLCsrdC5hLCsrdC5jLHQuaT0wLHQuajt0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIFhobih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBvPXQubyxuPXQucCxvPG4/byo9bzpuKj1uLHI9bytuLG89ZS5vLG49ZS5wLG88bj9vKj1vOm4qPW4scz1vK24scjxzPy0xOnI9PXM/MDoxfWZ1bmN0aW9uIEZnKHQsZSl7dmFyIG4scixzO2lmKHM9T3NlKHQsZSkscz49MClyZXR1cm4gcztpZih0LkZrKCkpe2ZvcihyPTA7cjx0Lmk7KytyKWlmKG49dC5Hayh1KHQuZ1tyXSw1NikpLEd0KG4pPT09R3QoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9ZnVuY3Rpb24gdTQodCxlLG4pe3ZhciByLHM7aWYocz10LmdjKCksZT49cyl0aHJvdyBydChuZXcgam0oZSxzKSk7aWYodC5oaSgpJiYocj10LlhjKG4pLHI+PTAmJnIhPWUpKXRocm93IHJ0KG5ldyBQbihYRCkpO3JldHVybiB0Lm1pKGUsbil9ZnVuY3Rpb24gTjN0KHQsZSl7aWYodGhpcy5hPXUoQXIodCksMjQ1KSx0aGlzLmI9dShBcihlKSwyNDUpLHQudmQoZSk+MHx8dD09KFF0dCgpLHB1dCl8fGU9PShYdHQoKSxidXQpKXRocm93IHJ0KG5ldyBQbigiSW52YWxpZCByYW5nZTogIitPWnQodCxlKSkpfWZ1bmN0aW9uIGVzZSh0KXt2YXIgZSxuO2Zvcih0aGlzLmI9bmV3IGxlLHRoaXMuYz10LHRoaXMuYT0hMSxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLHRoaXMuYT10aGlzLmF8ZS5rPT0oR24oKSxEcyl9ZnVuY3Rpb24gUWhuKHQsZSl7dmFyIG4scixzO2ZvcihuPUR2KG5ldyBVYix0KSxzPW5ldyBTKGUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyMSksdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLDApLG4pLHIpKTtyZXR1cm4gbn1mdW5jdGlvbiBuc2UodCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgYXIobHIoKGU/am8odCk6TXModCkpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksMTcpLG89ZT9yLmMuaTpyLmQuaSxvLms9PShHbigpLFNsKSYma28obyxuKX1mdW5jdGlvbiBzeSgpe3N5PVosbFY9bmV3IFZSKEswLDApLGNodD1uZXcgVlIoIlBPUlRfUE9TSVRJT04iLDEpLHQ1PW5ldyBWUigiTk9ERV9TSVpFX1dIRVJFX1NQQUNFX1BFUk1JVFMiLDIpLEo0PW5ldyBWUigiTk9ERV9TSVpFIiwzKX1mdW5jdGlvbiBRZCgpe1FkPVosWmh0PW5ldyBlQygiQVVUT01BVElDIiwwKSwkTz1uZXcgZUMoZDYsMSksek89bmV3IGVDKGc2LDIpLEZWPW5ldyBlQygiVE9QIiwzKSxOVj1uZXcgZUMoWHh0LDQpLFBWPW5ldyBlQyhORSw1KX1mdW5jdGlvbiBQM3QodCxlLG4scil7YkUoKTt2YXIgcyxvO2ZvcihzPTAsbz0wO288bjtvKyspcz1PYShDYShQcyhlW29dLGNvKSxQcyhyLGNvKSksUHMoU3IocyksY28pKSx0W29dPVNyKHMpLHM9em0ocywzMik7cmV0dXJuIFNyKHMpfWZ1bmN0aW9uIEYzdCh0LGUsbil7dmFyIHIscztmb3Iocz0wLHI9MDtyPE51dDtyKyspcz1iLk1hdGgubWF4KHMsTWl0KHQuYVtlLmddW3JdLG4pKTtyZXR1cm4gZT09KEtmKCksdHUpJiZ0LmImJihzPWIuTWF0aC5tYXgocyx0LmIuYikpLHN9ZnVuY3Rpb24genoodCxlKXt2YXIgbixyO2lmKFAydChlPjApLChlJi1lKT09ZSlyZXR1cm4gcHMoZSpvbCh0LDMxKSo0NjU2NjEyODczMDc3MzkzZS0yNSk7ZG8gbj1vbCh0LDMxKSxyPW4lZTt3aGlsZShuLXIrKGUtMSk8MCk7cmV0dXJuIHBzKHIpfWZ1bmN0aW9uIEJnKHQpe2RLdCgpO3ZhciBlLG4scjtyZXR1cm4gbj0iOiIrdCxyPVlIW25dLHIhPW51bGw/cHMoKE9uKHIpLHIpKToocj1JRXRbbl0sZT1yPT1udWxsP3oybih0KTpwcygoT24ocikscikpLGJubigpLFlIW25dPWUsZSl9ZnVuY3Rpb24gcnNlKHQsZSxuKXt3cihuLCJDb21wb3VuZCBncmFwaCBwcmVwcm9jZXNzb3IiLDEpLHQuYT1uZXcgSHYsdWhlKHQsZSxudWxsKSxBeW4odCxlKSxsMm4odCksSnQoZSwoc2UoKSxYVHQpLHQuYSksdC5hPW51bGwsWXUodC5iKSxvcihuKX1mdW5jdGlvbiBaaG4odCxlLG4pe3N3aXRjaChuLmcpe2Nhc2UgMTp0LmE9ZS5hLzIsdC5iPTA7YnJlYWs7Y2FzZSAyOnQuYT1lLmEsdC5iPWUuYi8yO2JyZWFrO2Nhc2UgMzp0LmE9ZS5hLzIsdC5iPWUuYjticmVhaztjYXNlIDQ6dC5hPTAsdC5iPWUuYi8yfX1mdW5jdGlvbiBKaG4odCl7dmFyIGUsbixyO2ZvcihyPXUoQWkodC5hLChnNCgpLElHKSksMTUpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDEwMSksZT1XM3QobiksdzgodCxuLGVbMF0sKEp2KCksU3cpLDApLHc4KHQsbixlWzFdLEF3LDEpfWZ1bmN0aW9uIHRmbih0KXt2YXIgZSxuLHI7Zm9yKHI9dShBaSh0LmEsKGc0KCksREcpKSwxNSkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTAxKSxlPVczdChuKSx3OCh0LG4sZVswXSwoSnYoKSxTdyksMCksdzgodCxuLGVbMV0sQXcsMSl9ZnVuY3Rpb24gaXN0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIG5ldyBybmU7Y2FzZSAyOnJldHVybiBuZXcgVnB0O2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKHhjdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIFlJKHQsZSxuKXt2YXIgcixzO2ZvcihrY24odCxlLXQucyxuLXQudCkscz1uZXcgUyh0Lm4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDIxMSksaHgocixyLmUrZS10LnMpLGZwdChyLHIuZituLXQudCk7dC5zPWUsdC50PW59ZnVuY3Rpb24gZWZuKHQpe3ZhciBlLG4scixzLG87Zm9yKG49MCxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTIxKSxyLmQ9bisrO3JldHVybiBlPUQwbih0KSxvPW51bGwsZS5jLmxlbmd0aD4xJiYobz1RaG4odCxlKSksb31mdW5jdGlvbiBzc3QodCl7dmFyIGU7cmV0dXJuIHQuZiYmdC5mLmtoKCkmJihlPXUodC5mLDQ5KSx0LmY9dShLcCh0LGUpLDgyKSx0LmYhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDksOCxlLHQuZikpKSx0LmZ9ZnVuY3Rpb24gYXN0KHQpe3ZhciBlO3JldHVybiB0LmkmJnQuaS5raCgpJiYoZT11KHQuaSw0OSksdC5pPXUoS3AodCxlKSw4MiksdC5pIT1lJiZ0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCw5LDcsZSx0LmkpKSksdC5pfWZ1bmN0aW9uIG5vKHQpe3ZhciBlO3JldHVybiB0LmImJnQuYi5EYiY2NCYmKGU9dC5iLHQuYj11KEtwKHQsZSksMTgpLHQuYiE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsOSwyMSxlLHQuYikpKSx0LmJ9ZnVuY3Rpb24gcXoodCxlKXt2YXIgbixyLHM7dC5kPT1udWxsPygrK3QuZSwrK3QuZik6KHI9ZS5TaCgpLHYybih0LHQuZisxKSxzPShyJnZpKSV0LmQubGVuZ3RoLG49dC5kW3NdLCFuJiYobj10LmRbc109dC51aigpKSxuLkZjKGUpLCsrdC5mKX1mdW5jdGlvbiBCM3QodCxlLG4pe3ZhciByO3JldHVybiBlLktqKCk/ITE6ZS5aaigpIT0tMj8ocj1lLnpqKCkscj09bnVsbD9uPT1udWxsOnlpKHIsbikpOmUuSGooKT09dC5lLlRnKCkmJm49PW51bGx9ZnVuY3Rpb24gSHooKXt2YXIgdDtCbCgxNixKaGUpLHQ9S2VlKDE2KSx0aGlzLmI9UHQod3V0LExELDMxNyx0LDAsMSksdGhpcy5jPVB0KHd1dCxMRCwzMTcsdCwwLDEpLHRoaXMuYT1udWxsLHRoaXMuZT1udWxsLHRoaXMuaT0wLHRoaXMuZj10LTEsdGhpcy5nPTB9ZnVuY3Rpb24gSDAodCl7ZXZ0LmNhbGwodGhpcyksdGhpcy5rPShHbigpLERzKSx0aGlzLmo9KEJsKDYsbXkpLG5ldyBZYyg2KSksdGhpcy5iPShCbCgyLG15KSxuZXcgWWMoMikpLHRoaXMuZD1uZXcgVnR0LHRoaXMuZj1uZXcgRnB0LHRoaXMuYT10fWZ1bmN0aW9uIG5mbih0KXt2YXIgZSxuO3QuYy5sZW5ndGg8PTF8fChlPWV1ZSh0LChiZSgpLG1yKSksSGFlKHQsdShlLmEsMTkpLmEsdShlLmIsMTkpLmEpLG49ZXVlKHQsQm4pLEhhZSh0LHUobi5hLDE5KS5hLHUobi5iLDE5KS5hKSl9ZnVuY3Rpb24gYV8oKXthXz1aLEFDdD1uZXcgVE0oIlNJTVBMRSIsMCksbGh0PW5ldyBUTShqb3QsMSksaGh0PW5ldyBUTSgiTElORUFSX1NFR01FTlRTIiwyKSxBUz1uZXcgVE0oIkJSQU5ERVNfS09FUEYiLDMpLExTPW5ldyBUTShDMWUsNCl9ZnVuY3Rpb24gUjN0KHQsZSxuKXtEeCh1KFEoZSwoVGUoKSxvcykpLDk4KSl8fChEbXQodCxlLFJnKGUsbikpLERtdCh0LGUsUmcoZSwoYmUoKSxtcikpKSxEbXQodCxlLFJnKGUsTm4pKSx2bigpLFhzKGUuaixuZXcgYU0odCkpKX1mdW5jdGlvbiBpc2UodCxlLG4scil7dmFyIHMsbyxoO2ZvcihzPXUoQWkocj90LmE6dC5iLGUpLDIxKSxoPXMuS2MoKTtoLk9iKCk7KWlmKG89dShoLlBiKCksMzMpLGRxKHQsbixvKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBvc3QodCl7dmFyIGUsbjtmb3Iobj1uZXcgZXIodCk7bi5lIT1uLmkuZ2MoKTspaWYoZT11KGRyKG4pLDg3KSxlLmV8fCghZS5kJiYoZS5kPW5ldyBTcyhobyxlLDEpKSxlLmQpLmkhPTApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY3N0KHQpe3ZhciBlLG47Zm9yKG49bmV3IGVyKHQpO24uZSE9bi5pLmdjKCk7KWlmKGU9dShkcihuKSw4NyksZS5lfHwoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKS5pIT0wKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJmbih0KXt2YXIgZSxuLHI7Zm9yKGU9MCxyPW5ldyBTKHQuYy5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksZSs9TjAobmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpKTtyZXR1cm4gZS90LmMuYS5jLmxlbmd0aH1mdW5jdGlvbiBzc2UodCl7dmFyIGUsbjtmb3IodC5jfHxoM24odCksbj1uZXcgRHUsZT1uZXcgUyh0LmEpLEooZSk7ZS5hPGUuYy5jLmxlbmd0aDspbmkobix1KEooZSksNDA3KS5hKTtyZXR1cm4gUW4obi5iIT0wKSxjaChuLG4uYy5iKSxufWZ1bmN0aW9uIHVzdCgpe3VzdD1aLGdTdD0obmF0KCksbFN0KSxkU3Q9bmV3IE12KDgpLG5ldyBlbygoY2koKSxxMiksZFN0KSxuZXcgZW8oSDIsOCksQzNlPWNTdCxoU3Q9djNlLGZTdD13M2UsVDNlPW5ldyBlbyhVTywoRm4oKSwhMSkpfWZ1bmN0aW9uIGozdCh0LGUsbixyKXtzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lO2Nhc2UgODpyZXR1cm4hdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHQuZH1yZXR1cm4gczN0KHQsZSxuLHIpfWZ1bmN0aW9uIGxzdCh0KXt2YXIgZTtyZXR1cm4gdC5hJiZ0LmEua2goKSYmKGU9dSh0LmEsNDkpLHQuYT11KEtwKHQsZSksMTM4KSx0LmEhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDksNSxlLHQuYSkpKSx0LmF9ZnVuY3Rpb24gYjIodCl7cmV0dXJuIHQ8NDh8fHQ+MTAyPy0xOnQ8PTU3P3QtNDg6dDw2NT8tMTp0PD03MD90LTY1KzEwOnQ8OTc/LTE6dC05NysxMH1mdW5jdGlvbiBoc3QodCxlKXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyB5eCgibnVsbCBrZXkgaW4gZW50cnk6IG51bGw9IitlKSk7aWYoZT09bnVsbCl0aHJvdyBydChuZXcgeXgoIm51bGwgdmFsdWUgaW4gZW50cnk6ICIrdCsiPW51bGwiKSl9ZnVuY3Rpb24gaWZuKHQsZSl7Zm9yKHZhciBuLHI7dC5PYigpOylpZighZS5PYigpfHwobj10LlBiKCkscj1lLlBiKCksIShHdChuKT09PUd0KHIpfHxuIT1udWxsJiZ5aShuLHIpKSkpcmV0dXJuITE7cmV0dXJuIWUuT2IoKX1mdW5jdGlvbiBhc2UodCxlKXt2YXIgbjtyZXR1cm4gbj1jdChvdChpYSwxKSx2bywyNSwxNSxbTWl0KHQuYVswXSxlKSxNaXQodC5hWzFdLGUpLE1pdCh0LmFbMl0sZSldKSx0LmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gb3NlKHQsZSl7dmFyIG47cmV0dXJuIG49Y3Qob3QoaWEsMSksdm8sMjUsMTUsW3d6KHQuYVswXSxlKSx3eih0LmFbMV0sZSksd3oodC5hWzJdLGUpXSksdC5kJiYoblswXT1iLk1hdGgubWF4KG5bMF0sblsyXSksblsyXT1uWzBdKSxufWZ1bmN0aW9uIHYyKCl7djI9WixtbHQ9bmV3IEVNKCJHUkVFRFkiLDApLFNUdD1uZXcgRU0oaDFlLDEpLHlsdD1uZXcgRU0oam90LDIpLHBTPW5ldyBFTSgiTU9ERUxfT1JERVIiLDMpLGdTPW5ldyBFTSgiR1JFRURZX01PREVMX09SREVSIiw0KX1mdW5jdGlvbiBjc2UodCxlKXt2YXIgbixyLHM7Zm9yKHQuYltlLmddPTEscj1laShlLmQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCkscz1uLmMsdC5iW3MuZ109PTE/bmkodC5hLG4pOnQuYltzLmddPT0yP3QuYltzLmddPTE6Y3NlKHQscyl9ZnVuY3Rpb24gc2ZuKHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBZYyhlLmdjKCkpLHI9ZS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwyODYpLG4uYz09bi5mP3BFKHQsbixuLmMpOnJnbih0LG4pfHwocy5jW3MuYy5sZW5ndGhdPW4pO3JldHVybiBzfWZ1bmN0aW9uIGFmbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IoZD10LnIrZSx0LnIrPWUsdC5kKz1uLHI9bi90Lm4uYy5sZW5ndGgscz0wLGg9bmV3IFModC5uKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyMTEpLHBibihvLGQscixzKSwrK3N9ZnVuY3Rpb24gb2ZuKHQpe3ZhciBlLG4scjtmb3IoTzkodC5iLmEpLHQuYT1QdChYSCxJZSw1Nyx0LmMuYy5hLmIuYy5sZW5ndGgsMCwxKSxlPTAscj1uZXcgUyh0LmMuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxuLmY9ZSsrfWZ1bmN0aW9uIGNmbih0KXt2YXIgZSxuLHI7Zm9yKE85KHQuYi5hKSx0LmE9UHQoWXV0LEllLDgxLHQuYy5hLmEuYi5jLmxlbmd0aCwwLDEpLGU9MCxyPW5ldyBTKHQuYy5hLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksODEpLG4uaT1lKyt9ZnVuY3Rpb24gdWZuKHQsZSxuKXt2YXIgcjt3cihuLCJTaHJpbmtpbmcgdHJlZSBjb21wYWN0aW9uIiwxKSxqZShSZShRKGUsKEc4KCksdVMpKSkpPyhFb24odCxlLmYpLHp0ZShlLmYsKHI9ZS5jLHIpKSk6enRlKGUuZixlLmMpLG9yKG4pfWZ1bmN0aW9uIHVzZSh0KXt2YXIgZTtpZihlPXV1bih0KSwhenIodCkpdGhyb3cgcnQobmV3IG1vKCJwb3NpdGlvbiAoMCkgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHJlbWFpbmVkICgiK2UrIikiKSk7cmV0dXJuIExyKHQpfWZ1bmN0aW9uIGxzZSh0LGUsbil7dmFyIHI7dHJ5e3JldHVybiBsNCh0LGUrdC5qLG4rdC5rKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24gbGZuKHQsZSxuKXt2YXIgcjt0cnl7cmV0dXJuIGRzZSh0LGUrdC5qLG4rdC5rKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24gaGZuKHQsZSxuKXt2YXIgcjt0cnl7cmV0dXJuIGdzZSh0LGUrdC5qLG4rdC5rKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24gaHNlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gYmUoKSxCbjtjYXNlIDQ6cmV0dXJuIGJlKCksTm47Y2FzZSAzOnJldHVybiBiZSgpLEhuO2Nhc2UgMjpyZXR1cm4gYmUoKSxtcjtkZWZhdWx0OnJldHVybiBiZSgpLFpvfX1mdW5jdGlvbiBmZm4odCxlLG4pe2Uuaz09KEduKCksRHMpJiZuLms9PVpzJiYodC5kPU5pdChlLChiZSgpLG1yKSksdC5iPU5pdChlLE5uKSksbi5rPT1EcyYmZS5rPT1acyYmKHQuZD1OaXQobiwoYmUoKSxObikpLHQuYj1OaXQobixtcikpfWZ1bmN0aW9uIGZzdCh0LGUpe3ZhciBuLHIscztmb3Iocz1Zbyh0LGUpLHI9cy5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSwxMSksUShuLChzZSgpLFp1KSkhPW51bGx8fHBDKG5ldyBTMShuLmIpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiAkM3QodCxlKXtyZXR1cm4geXUoZSx0LmUrdC5kKyh0LmMuYy5sZW5ndGg9PTA/MDp0LmIpKSx4dShlLHQuZiksdC5hPWIuTWF0aC5tYXgodC5hLGUuZiksdC5kKz1lLmcrKHQuYy5jLmxlbmd0aD09MD8wOnQuYiksdWUodC5jLGUpLCEwfWZ1bmN0aW9uIGRmbih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKGg9MCxyPW4vdC5hLmMubGVuZ3RoLG89bmV3IFModC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxODcpLFlJKHMscy5zLHMudCtoKnIpLGFmbihzLHQuZC1zLnIrZSxyKSwrK2h9ZnVuY3Rpb24gZ2ZuKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLGU9MCxvPW5ldyBTKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLHMucD1lKyt9ZnVuY3Rpb24gcGZuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihzPWUubGVuZ3RoLTEsaD0wLGQ9MCxyPTA7cjw9cztyKyspbz1lW3JdLG49TjBuKHMscikqR3l0KDEtdCxzLXIpKkd5dCh0LHIpLGgrPW8uYSpuLGQrPW8uYipuO3JldHVybiBuZXcgJGUoaCxkKX1mdW5jdGlvbiBmc2UodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihuPWUuZ2MoKSx0LnFpKHQuaStuKSxvPWUuS2MoKSxoPXQuaSx0LmkrPW4scj1oO3I8dC5pOysrcilzPW8uUGIoKSxmQyh0LHIsdC5vaShyLHMpKSx0LmJpKHIscyksdC5jaSgpO3JldHVybiBuIT0wfWZ1bmN0aW9uIGJmbih0LGUsbil7dmFyIHIscyxvO3JldHVybiB0LmVqKCk/KHI9dC5WaSgpLG89dC5maigpLCsrdC5qLHQuSGkocix0Lm9pKHIsZSkpLHM9dC5aaSgzLG51bGwsZSxyLG8pLG4/bi5FaShzKTpuPXMpOkFXdCh0LHQuVmkoKSxlKSxufWZ1bmN0aW9uIHZmbih0LGUsbil7dmFyIHIscyxvO3JldHVybiByPXUoU3QoTGModC5hKSxlKSw4Nyksbz0ocz1yLmMsRXQocyw4OCk/dShzLDI2KTooZG4oKSxXaCkpLChvLkRiJjY0P0twKHQuYixvKTpvKT09bj93cShyKTpQOChyLG4pLG99ZnVuY3Rpb24gejN0KHQsZSxuLHIscyxvLGgsZCl7dmFyIHcsaztyJiYodz1yLmFbMF0sdyYmejN0KHQsZSxuLHcscyxvLGgsZCksVmZuKHQsbixyLmQscyxvLGgsZCkmJmUuRmMociksaz1yLmFbMV0sayYmejN0KHQsZSxuLGsscyxvLGgsZCkpfWZ1bmN0aW9uIHdmbih0LGUpe3ZhciBuO3JldHVybiB0LmF8fChuPVB0KGlhLHZvLDI1LDAsMTUsMSksQjModC5iLmEsbmV3IG5lKG4pKSxuLnNvcnQod2VlKHh0LnByb3RvdHlwZS50ZSx4dCxbXSkpLHQuYT1uZXcgYUt0KG4sdC5kKSksTSQodC5hLGUpfWZ1bmN0aW9uIGw0KHQsZSxuKXt0cnl7cmV0dXJuIEF2KGFpdCh0LGUsbiksMSl9Y2F0Y2gocil7dGhyb3cgcj1XaShyKSxFdChyLDMyMCk/cnQobmV3IG1vKFRvdCt0Lm8rIioiK3QucCtDb3QrZStLYStuK19vdCkpOnJ0KHIpfX1mdW5jdGlvbiBkc2UodCxlLG4pe3RyeXtyZXR1cm4gQXYoYWl0KHQsZSxuKSwwKX1jYXRjaChyKXt0aHJvdyByPVdpKHIpLEV0KHIsMzIwKT9ydChuZXcgbW8oVG90K3QubysiKiIrdC5wK0NvdCtlK0thK24rX290KSk6cnQocil9fWZ1bmN0aW9uIGdzZSh0LGUsbil7dHJ5e3JldHVybiBBdihhaXQodCxlLG4pLDIpfWNhdGNoKHIpe3Rocm93IHI9V2kociksRXQociwzMjApP3J0KG5ldyBtbyhUb3QrdC5vKyIqIit0LnArQ290K2UrS2Erbitfb3QpKTpydChyKX19ZnVuY3Rpb24gcHNlKHQsZSl7aWYodC5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3QubWooKTt0cnl7dC5kLl9jKHQuZyxlKSx0LmY9dC5kLmp9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxFdChuLDczKT9ydChuZXcgZWgpOnJ0KG4pfX1mdW5jdGlvbiBtZm4odCxlLG4pe3dyKG4sIkxpbmVhciBzZWdtZW50cyBub2RlIHBsYWNlbWVudCIsMSksdC5iPXUoUShlLChzZSgpLFk0KSksMzA0KSxPNW4odCxlKSxieW4odCxlKSxEeW4odCxlKSxmNW4odCksdC5hPW51bGwsdC5iPW51bGwsb3Iobil9ZnVuY3Rpb24gWEkodCxlKXt2YXIgbixyLHMsbztmb3Iobz10LmdjKCksZS5sZW5ndGg8byYmKGU9d1IobmV3IEFycmF5KG8pLGUpKSxzPWUscj10LktjKCksbj0wO248bzsrK24pSmkocyxuLHIuUGIoKSk7cmV0dXJuIGUubGVuZ3RoPm8mJkppKGUsbyxudWxsKSxlfWZ1bmN0aW9uIHlmbih0LGUpe3ZhciBuLHI7aWYocj10LmdjKCksZT09bnVsbCl7Zm9yKG49MDtuPHI7bisrKWlmKHQuWGIobik9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iobj0wO248cjtuKyspaWYoeWkoZSx0LlhiKG4pKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBkc3QodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49ZS5jZCgpLHM9ZS5kZCgpLHI9dC54YyhuKSwhKCEoR3Qocyk9PT1HdChyKXx8cyE9bnVsbCYmeWkocyxyKSl8fHI9PW51bGwmJiF0Ll9iKG4pKX1mdW5jdGlvbiB4Zm4odCxlKXt2YXIgbixyLHM7cmV0dXJuIGU8PTIyPyhuPXQubCYoMTw8ZSktMSxyPXM9MCk6ZTw9NDQ/KG49dC5sLHI9dC5tJigxPDxlLTIyKS0xLHM9MCk6KG49dC5sLHI9dC5tLHM9dC5oJigxPDxlLTQ0KS0xKSxydShuLHIscyl9ZnVuY3Rpb24ga2ZuKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiB0LmYubi5kK3QudDtjYXNlIDM6cmV0dXJuIHQuZi5uLmErdC50O2Nhc2UgMjpyZXR1cm4gdC5mLm4uYyt0LnM7Y2FzZSA0OnJldHVybiB0LmYubi5iK3QucztkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBFZm4odCxlKXt2YXIgbixyO3N3aXRjaChyPWUuYyxuPWUuYSx0LmIuZyl7Y2FzZSAwOm4uZD10LmUtci5hLXIuZDticmVhaztjYXNlIDE6bi5kKz10LmU7YnJlYWs7Y2FzZSAyOm4uYz10LmUtci5hLXIuZDticmVhaztjYXNlIDM6bi5jPXQuZStyLmR9fWZ1bmN0aW9uIHEzdCh0LGUsbixyKXt2YXIgcyxvO3RoaXMuYT1lLHRoaXMuYz1yLHM9dC5hLHJwdCh0aGlzLG5ldyAkZSgtcy5jLC1zLmQpKSxMaSh0aGlzLmIsbiksbz1yLzIsZS5hP0JNKHRoaXMuYiwwLG8pOkJNKHRoaXMuYixvLDApLHVlKHQuYyx0aGlzKX1mdW5jdGlvbiBHeigpe0d6PVosUmh0PW5ldyBXUihLMCwwKSxfX3Q9bmV3IFdSKGYxZSwxKSxTX3Q9bmV3IFdSKCJFREdFX0xFTkdUSF9CWV9QT1NJVElPTiIsMiksQ190PW5ldyBXUigiQ1JPU1NJTkdfTUlOSU1JWkFUSU9OX0JZX1BPU0lUSU9OIiwzKX1mdW5jdGlvbiBnc3QodCxlKXt2YXIgbixyO2lmKG49dSh0NCh0LmcsZSksMzMpLG4pcmV0dXJuIG47aWYocj11KHQ0KHQuaixlKSwxMTgpLHIpcmV0dXJuIHI7dGhyb3cgcnQobmV3IGFkKCJSZWZlcmVuY2VkIHNoYXBlIGRvZXMgbm90IGV4aXN0OiAiK2UpKX1mdW5jdGlvbiBUZm4odCxlKXtpZih0LmM9PWUpcmV0dXJuIHQuZDtpZih0LmQ9PWUpcmV0dXJuIHQuYzt0aHJvdyBydChuZXcgUG4oIk5vZGUgJ29uZScgbXVzdCBiZSBlaXRoZXIgc291cmNlIG9yIHRhcmdldCBvZiBlZGdlICdlZGdlJy4iKSl9ZnVuY3Rpb24gQ2ZuKHQsZSl7aWYodC5jLmk9PWUpcmV0dXJuIHQuZC5pO2lmKHQuZC5pPT1lKXJldHVybiB0LmMuaTt0aHJvdyBydChuZXcgUG4oIk5vZGUgIitlKyIgaXMgbmVpdGhlciBzb3VyY2Ugbm9yIHRhcmdldCBvZiBlZGdlICIrdCkpfWZ1bmN0aW9uIF9mbih0LGUpe3ZhciBuO3N3aXRjaChlLmcpe2Nhc2UgMjpjYXNlIDQ6bj10LmEsdC5jLmQubi5iPG4uZC5uLmImJihuPXQuYyksX2codCxlLChNMSgpLG9sdCksbik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpfZyh0LGUsKE0xKCksXzYpLG51bGwpfX1mdW5jdGlvbiBwc3QodCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEM7Zm9yKGg9TDFuKGUsbixvKSxkPW49PShiZSgpLE5uKXx8bj09Qm4/LTE6MSxrPXRbbi5nXSxDPTA7QzxrLmxlbmd0aDtDKyspdz1rW0NdLHc+MCYmKHcrPXMpLGtbQ109aCxoKz1kKih3K3IpfWZ1bmN0aW9uIGJzZSh0KXt2YXIgZSxuLHI7Zm9yKHI9dC5mLHQubj1QdChpYSx2bywyNSxyLDE1LDEpLHQuZD1QdChpYSx2bywyNSxyLDE1LDEpLGU9MDtlPHI7ZSsrKW49dShGZSh0LmMuYixlKSwyOSksdC5uW2VdPVVpZSh0LG4pLHQuZFtlXT1TY2UodCxuKX1mdW5jdGlvbiBic3QodCxlKXt2YXIgbixyLHM7Zm9yKHM9MCxyPTI7cjxlO3I8PD0xKXQuRGImciYmKytzO2lmKHM9PTApe2ZvcihuPWU8PD0xO248PTEyODtuPDw9MSlpZih0LkRiJm4pcmV0dXJuIDA7cmV0dXJuLTF9ZWxzZSByZXR1cm4gc31mdW5jdGlvbiB2c2UodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPWF1KHQuZS5UZygpLGUpLG89bnVsbCxuPXUodC5nLDExOSkscz0wO3M8dC5pOysrcylyPW5bc10saC5ybChyLmFrKCkpJiYoIW8mJihvPW5ldyB0eCksTXIobyxyKSk7byYmTGhlKHQsbyl9ZnVuY3Rpb24gd3NlKHQpe3ZhciBlLG4scjtpZighdClyZXR1cm4gbnVsbDtpZih0LmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IHhnLG49dC5LYygpO24uT2IoKTspZT1uLlBiKCksZm8ocixCcihlKSksci5hKz0iICI7cmV0dXJuIFdldChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gSDN0KHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihEY24odCkscz0odC5rPT1udWxsJiYodC5rPVB0KHl1dCx0ZSw3OCwwLDAsMSkpLHQuayksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sSDN0KHIpO2Q9dC5mLGQmJkgzdChkKX1mdW5jdGlvbiBtc2UodCxlKXt2YXIgbj1uZXcgQXJyYXkoZSkscjtzd2l0Y2godCl7Y2FzZSAxNDpjYXNlIDE1OnI9MDticmVhaztjYXNlIDE2OnI9ITE7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbn1mb3IodmFyIHM9MDtzPGU7KytzKW5bc109cjtyZXR1cm4gbn1mdW5jdGlvbiBvdyh0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU3KSxlLmMuJGIoKTtPcCh0LmQpP3I9dC5hLmM6cj10LmEuZCxtdShyLG5ldyB2cih0KSksdC5jLk1lKHQpLEdjZSh0KX1mdW5jdGlvbiB5c2UodCl7dmFyIGUsbixyLHM7Zm9yKG49bmV3IFModC5lLmMpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IoZT11KEoobiksMjgyKSxzPW5ldyBTKGUuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksNDQ3KSxheHQocik7Zm9lKGUpfX1mdW5jdGlvbiBWeih0KXt2YXIgZSxuLHIscyxvO2ZvcihyPTAsbz0wLHM9MCxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTg3KSxvPWIuTWF0aC5tYXgobyxlLnIpLHIrPWUuZCsocz4wP3QuYzowKSwrK3M7dC5iPXIsdC5kPW99ZnVuY3Rpb24gU2ZuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0wLHM9MCxuPTAsaD1uZXcgUyhlKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyMDApLHI9Yi5NYXRoLm1heChyLG8uZSkscys9by5iKyhuPjA/dC5nOjApLCsrbjt0LmM9cyx0LmQ9cn1mdW5jdGlvbiB4c2UodCxlKXt2YXIgbjtyZXR1cm4gbj1jdChvdChpYSwxKSx2bywyNSwxNSxbRjN0KHQsKEtmKCksc2MpLGUpLEYzdCh0LHR1LGUpLEYzdCh0LGFjLGUpXSksdC5mJiYoblswXT1iLk1hdGgubWF4KG5bMF0sblsyXSksblsyXT1uWzBdKSxufWZ1bmN0aW9uIEFmbih0LGUsbil7dmFyIHI7dHJ5e2JxKHQsZSt0Lmosbit0LmssITEsITApfWNhdGNoKHMpe3Rocm93IHM9V2kocyksRXQocyw3Myk/KHI9cyxydChuZXcgbW8oci5nKyRxK2UrS2ErbisiKS4iKSkpOnJ0KHMpfX1mdW5jdGlvbiBMZm4odCxlLG4pe3ZhciByO3RyeXticSh0LGUrdC5qLG4rdC5rLCEwLCExKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24ga3NlKHQpe3ZhciBlO1ZzKHQsKFRlKCksT3cpKSYmKGU9dShRKHQsT3cpLDIxKSxlLkhjKChmeSgpLEVmKSk/KGUuTWMoRWYpLGUuRmMoVGYpKTplLkhjKFRmKSYmKGUuTWMoVGYpLGUuRmMoRWYpKSl9ZnVuY3Rpb24gRXNlKHQpe3ZhciBlO1ZzKHQsKFRlKCksT3cpKSYmKGU9dShRKHQsT3cpLDIxKSxlLkhjKChmeSgpLF9mKSk/KGUuTWMoX2YpLGUuRmMoemgpKTplLkhjKHpoKSYmKGUuTWMoemgpLGUuRmMoX2YpKSl9ZnVuY3Rpb24gTWZuKHQsZSxuKXt3cihuLCJTZWxmLUxvb3Agb3JkZXJpbmciLDEpLHVzKHB1KFJpKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgY0YpLG5ldyBVWSksbmV3IFdZKSxuZXcgS1kpLG5ldyBfbSh0KSksb3Iobil9ZnVuY3Rpb24gUUkodCxlLG4scil7dmFyIHMsbztmb3Iocz1lO3M8dC5jLmxlbmd0aDtzKyspaWYobz0oQW4ocyx0LmMubGVuZ3RoKSx1KHQuY1tzXSwxMSkpLG4uTWIobykpci5jW3IuYy5sZW5ndGhdPW87ZWxzZSByZXR1cm4gcztyZXR1cm4gdC5jLmxlbmd0aH1mdW5jdGlvbiB2c3QodCxlLG4scil7dmFyIHMsbyxoLGQ7cmV0dXJuIHQuYT09bnVsbCYmTzBuKHQsZSksaD1lLmIuai5jLmxlbmd0aCxvPW4uZC5wLGQ9ci5kLnAscz1kLTEsczwwJiYocz1oLTEpLG88PXM/dC5hW3NdLXQuYVtvXTp0LmFbaC0xXS10LmFbb10rdC5hW3NdfWZ1bmN0aW9uIElmbih0KXt2YXIgZSxuO2lmKCF0LmIpZm9yKHQuYj15JCh1KHQuZiwzMykuQWcoKS5pKSxuPW5ldyBlcih1KHQuZiwzMykuQWcoKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDEzNyksdWUodC5iLG5ldyBuZXQoZSkpO3JldHVybiB0LmJ9ZnVuY3Rpb24gRGZuKHQpe3ZhciBlLG47aWYoIXQuZSlmb3IodC5lPXkkKFpudCh1KHQuZiwzMykpLmkpLG49bmV3IGVyKFpudCh1KHQuZiwzMykpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTE4KSx1ZSh0LmUsbmV3IEV6dChlKSk7cmV0dXJuIHQuZX1mdW5jdGlvbiBUc2UodCl7dmFyIGUsbjtpZighdC5hKWZvcih0LmE9eSQoaSQodSh0LmYsMzMpKS5pKSxuPW5ldyBlcihpJCh1KHQuZiwzMykpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMzMpLHVlKHQuYSxuZXcgcm50KHQsZSkpO3JldHVybiB0LmF9ZnVuY3Rpb24gY3codCl7dmFyIGU7aWYoIXQuQyYmKHQuRCE9bnVsbHx8dC5CIT1udWxsKSlpZihlPUozbih0KSxlKXQueWsoZSk7ZWxzZSB0cnl7dC55ayhudWxsKX1jYXRjaChuKXtpZihuPVdpKG4pLCFFdChuLDYwKSl0aHJvdyBydChuKX1yZXR1cm4gdC5DfWZ1bmN0aW9uIE9mbih0KXtzd2l0Y2godC5xLmcpe2Nhc2UgNTpLc2UodCwoYmUoKSxObikpLEtzZSh0LG1yKTticmVhaztjYXNlIDQ6JGxlKHQsKGJlKCksTm4pKSwkbGUodCxtcik7YnJlYWs7ZGVmYXVsdDpZYWUodCwoYmUoKSxObikpLFlhZSh0LG1yKX19ZnVuY3Rpb24gTmZuKHQpe3N3aXRjaCh0LnEuZyl7Y2FzZSA1OllzZSh0LChiZSgpLEhuKSksWXNlKHQsQm4pO2JyZWFrO2Nhc2UgNDp6bGUodCwoYmUoKSxIbikpLHpsZSh0LEJuKTticmVhaztkZWZhdWx0OlhhZSh0LChiZSgpLEhuKSksWGFlKHQsQm4pfX1mdW5jdGlvbiBoNCh0LGUpe3ZhciBuLHIscztmb3Iocz1uZXcgVGEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDM3KSx3XyhuLHMuYSwwKSxzLmErPW4uZi5hK2Uscy5iPWIuTWF0aC5tYXgocy5iLG4uZi5iKTtyZXR1cm4gcy5iPjAmJihzLmIrPWUpLHN9ZnVuY3Rpb24gVXoodCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IFRhLHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzNyksd18obiwwLHMuYikscy5iKz1uLmYuYitlLHMuYT1iLk1hdGgubWF4KHMuYSxuLmYuYSk7cmV0dXJuIHMuYT4wJiYocy5hKz1lKSxzfWZ1bmN0aW9uIENzZSh0KXt2YXIgZSxuLHI7Zm9yKHI9dmksbj1uZXcgUyh0LmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxWcyhlLChzZSgpLFRjKSkmJihyPWIuTWF0aC5taW4ocix1KFEoZSxUYyksMTkpLmEpKTtyZXR1cm4gcn1mdW5jdGlvbiBfc2UodCxlKXt2YXIgbixyO2lmKGUubGVuZ3RoPT0wKXJldHVybiAwO2ZvcihuPVFudCh0LmEsZVswXSwoYmUoKSxCbikpLG4rPVFudCh0LmEsZVtlLmxlbmd0aC0xXSxIbikscj0wO3I8ZS5sZW5ndGg7cisrKW4rPXYwbih0LHIsZSk7cmV0dXJuIG59ZnVuY3Rpb24gU3NlKCl7Yl8oKSx0aGlzLmM9bmV3IGxlLHRoaXMuaT1uZXcgbGUsdGhpcy5lPW5ldyBBMCx0aGlzLmY9bmV3IEEwLHRoaXMuZz1uZXcgQTAsdGhpcy5qPW5ldyBsZSx0aGlzLmE9bmV3IGxlLHRoaXMuYj1uZXcgQ3IsdGhpcy5rPW5ldyBDcn1mdW5jdGlvbiB3c3QodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Nj90LkNiLmloKHQsNSxyMSxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fHQuemgoKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIFBmbih0KXtUOCgpO3ZhciBlPXQuZTtpZihlJiZlLnN0YWNrKXt2YXIgbj1lLnN0YWNrLHI9ZStgCmA7cmV0dXJuIG4uc3Vic3RyaW5nKDAsci5sZW5ndGgpPT1yJiYobj1uLnN1YnN0cmluZyhyLmxlbmd0aCkpLG4uc3BsaXQoYApgKX1yZXR1cm5bXX1mdW5jdGlvbiBGZm4odCl7dmFyIGU7cmV0dXJuIGU9KHFlZSgpLGtnZSksZVt0Pj4+MjhdfGVbdD4+MjQmMTVdPDw0fGVbdD4+MjAmMTVdPDw4fGVbdD4+MTYmMTVdPDwxMnxlW3Q+PjEyJjE1XTw8MTZ8ZVt0Pj44JjE1XTw8MjB8ZVt0Pj40JjE1XTw8MjR8ZVt0JjE1XTw8Mjh9ZnVuY3Rpb24gQXNlKHQpe3ZhciBlLG4scjt0LmI9PXQuYyYmKHI9dC5hLmxlbmd0aCxuPVR5dChiLk1hdGgubWF4KDgscikpPDwxLHQuYiE9MD8oZT11Zih0LmEsbiksWGVlKHQsZSxyKSx0LmE9ZSx0LmI9MCk6WXp0KHQuYSxuKSx0LmM9cil9ZnVuY3Rpb24gQmZuKHQsZSl7dmFyIG47cmV0dXJuIG49dC5iLG4uWGUoKGNpKCksaGwpKT9uLkhmKCk9PShiZSgpLEJuKT8tbi5yZigpLmEtWHQoeWUobi5XZShobCkpKTplK1h0KHllKG4uV2UoaGwpKSk6bi5IZigpPT0oYmUoKSxCbik/LW4ucmYoKS5hOmV9ZnVuY3Rpb24gWkkodCl7dmFyIGU7cmV0dXJuIHQuYi5jLmxlbmd0aCE9MCYmdShGZSh0LmIsMCksNzApLmE/dShGZSh0LmIsMCksNzApLmE6KGU9cnJ0KHQpLGU/PyIiKyh0LmM/Um8odC5jLmEsdCwwKTotMSkpfWZ1bmN0aW9uIFd6KHQpe3ZhciBlO3JldHVybiB0LmYuYy5sZW5ndGghPTAmJnUoRmUodC5mLDApLDcwKS5hP3UoRmUodC5mLDApLDcwKS5hOihlPXJydCh0KSxlPz8iIisodC5pP1JvKHQuaS5qLHQsMCk6LTEpKX1mdW5jdGlvbiBSZm4odCxlKXt2YXIgbixyO2lmKGU8MHx8ZT49dC5nYygpKXJldHVybiBudWxsO2ZvcihuPWU7bjx0LmdjKCk7KytuKWlmKHI9dSh0LlhiKG4pLDEyOCksbj09dC5nYygpLTF8fCFyLm8pcmV0dXJuIG5ldyBsYShkZShuKSxyKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBqZm4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG89dC5jLGQ9bj9lOnQscj1uP3Q6ZSxzPWQucCsxO3M8ci5wOysrcylpZihoPXUoRmUoby5hLHMpLDEwKSwhKGguaz09KEduKCksajEpfHxkMW4oaCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEczdCh0KXt2YXIgZSxuLHIscyxvO2ZvcihvPTAscz1UcyxyPTAsbj1uZXcgUyh0LmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE4Nyksbys9ZS5yKyhyPjA/dC5jOjApLHM9Yi5NYXRoLm1heChzLGUuZCksKytyO3QuZT1vLHQuYj1zfWZ1bmN0aW9uICRmbih0KXt2YXIgZSxuO2lmKCF0LmIpZm9yKHQuYj15JCh1KHQuZiwxMTgpLkFnKCkuaSksbj1uZXcgZXIodSh0LmYsMTE4KS5BZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTM3KSx1ZSh0LmIsbmV3IG5ldChlKSk7cmV0dXJuIHQuYn1mdW5jdGlvbiB6Zm4odCxlKXt2YXIgbixyLHM7aWYoZS5kYygpKXJldHVybiBmOCgpLGY4KCksbE47Zm9yKG49bmV3IElXdCh0LGUuZ2MoKSkscz1uZXcgZXIodCk7cy5lIT1zLmkuZ2MoKTspcj1kcihzKSxlLkhjKHIpJiZNcihuLHIpO3JldHVybiBufWZ1bmN0aW9uIFYzdCh0LGUsbixyKXtyZXR1cm4gZT09MD9yPyghdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksdC5vKTooIXQubyYmKHQubz1uZXcgVGwoKFpjKCksRWIpLCR3LHQsMCkpLGZJKHQubykpOmp6KHQsZSxuLHIpfWZ1bmN0aW9uIG1zdCh0KXt2YXIgZSxuO2lmKHQucmIpZm9yKGU9MCxuPXQucmIuaTtlPG47KytlKUZNKFN0KHQucmIsZSkpO2lmKHQudmIpZm9yKGU9MCxuPXQudmIuaTtlPG47KytlKUZNKFN0KHQudmIsZSkpO2tDKChSdSgpLG1hKSx0KSx0LkJifD0xfWZ1bmN0aW9uIEZpKHQsZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCl7cmV0dXJuIGlvZSh0LGUscixudWxsLHMsbyxoLGQsdyxrLEYsITAsSCksZTN0KHQsQyksRXQodC5DYiw4OCkmJmh5KHJsKHUodC5DYiw4OCkpLDIpLG4mJmV5dCh0LG4pLG4zdCh0LE0pLHR9ZnVuY3Rpb24gcWZuKHQpe3ZhciBlLG47aWYodD09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249JGwodCxfYSx2aSkmbXN9Y2F0Y2gocil7aWYocj1XaShyKSxFdChyLDEyNykpZT1SJCh0KSxuPWVbMF07ZWxzZSB0aHJvdyBydChyKX1yZXR1cm4gREkobil9ZnVuY3Rpb24gSGZuKHQpe3ZhciBlLG47aWYodD09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249JGwodCxfYSx2aSkmbXN9Y2F0Y2gocil7aWYocj1XaShyKSxFdChyLDEyNykpZT1SJCh0KSxuPWVbMF07ZWxzZSB0aHJvdyBydChyKX1yZXR1cm4gREkobil9ZnVuY3Rpb24gR2ZuKHQsZSl7dmFyIG4scixzO3JldHVybiBzPXQuaC1lLmgsczwwfHwobj10LmwtZS5sLHI9dC5tLWUubSsobj4+MjIpLHMrPXI+PjIyLHM8MCk/ITE6KHQubD1uJnVsLHQubT1yJnVsLHQuaD1zJlcwLCEwKX1mdW5jdGlvbiBWZm4odCxlLG4scixzLG8saCl7dmFyIGQsdztyZXR1cm4hKGUuQWUoKSYmKHc9dC5hLnVlKG4sciksdzwwfHwhcyYmdz09MCl8fGUuQmUoKSYmKGQ9dC5hLnVlKG4sbyksZD4wfHwhaCYmZD09MCkpfWZ1bmN0aW9uIFVmbih0LGUpe0o4KCk7dmFyIG47aWYobj10LmouZy1lLmouZyxuIT0wKXJldHVybiAwO3N3aXRjaCh0LmouZyl7Y2FzZSAyOnJldHVybiBxaXQoZSxtVHQpLXFpdCh0LG1UdCk7Y2FzZSA0OnJldHVybiBxaXQodCx3VHQpLXFpdChlLHdUdCl9cmV0dXJuIDB9ZnVuY3Rpb24gV2ZuKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4ga2x0O2Nhc2UgMTpyZXR1cm4gRWx0O2Nhc2UgMjpyZXR1cm4gVGx0O2Nhc2UgMzpyZXR1cm4gQ2x0O2Nhc2UgNDpyZXR1cm4gUEc7Y2FzZSA1OnJldHVybiBfbHQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gQ28odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9KHM9bmV3IEt0dCxmMihzLGUpLFhjKHMsbiksTXIoKCF0LmMmJih0LmM9bmV3IGhlKHp3LHQsMTIsMTApKSx0LmMpLHMpLHMpLElnKHIsMCksdHkociwxKSxQZyhyLCEwKSxOZyhyLCEwKSxyfWZ1bmN0aW9uIHI2KHQsZSl7dmFyIG4scjtpZihlPj10LmkpdGhyb3cgcnQobmV3IFZldChlLHQuaSkpO3JldHVybisrdC5qLG49dC5nW2VdLHI9dC5pLWUtMSxyPjAmJkljKHQuZyxlKzEsdC5nLGUsciksSmkodC5nLC0tdC5pLG51bGwpLHQuZmkoZSxuKSx0LmNpKCksbn1mdW5jdGlvbiBMc2UodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTc/dC5DYi5paCh0LDIxLEdoLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8dC56aCgpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gS2ZuKHQpe3ZhciBlLG4scixzO2Zvcih2bigpLFhzKHQuYyx0LmEpLHM9bmV3IFModC5jKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj1KKHMpLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw2NzkpLGUuS2Uocil9ZnVuY3Rpb24gWWZuKHQpe3ZhciBlLG4scixzO2Zvcih2bigpLFhzKHQuYyx0LmEpLHM9bmV3IFModC5jKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj1KKHMpLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwzNjkpLGUuS2Uocil9ZnVuY3Rpb24gWGZuKHQpe3ZhciBlLG4scixzLG87Zm9yKHM9dmksbz1udWxsLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLG4uZC5qXm4uZS5qJiYoZT1uLmUuZS1uLmQuZS1uLmEsZTxzJiYocz1lLG89bikpO3JldHVybiBvfWZ1bmN0aW9uIFUzdCgpe1UzdD1aLHViZT1uZXcgbW4oaDZ0LChGbigpLCExKSksYWJlPW5ldyBtbihmNnQsMTAwKSx2N3Q9KGpDKCksV3V0KSxvYmU9bmV3IG1uKGQ2dCx2N3QpLGNiZT1uZXcgbW4oZzZ0LHlkKSxsYmU9bmV3IG1uKHA2dCxkZSh2aSkpfWZ1bmN0aW9uIE1zZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztmb3Ioaz0wLHM9dC5hW2VdLG89MCxoPXMubGVuZ3RoO288aDsrK28pZm9yKHI9c1tvXSxDPVFDKHIsbiksdz1DLktjKCk7dy5PYigpOylkPXUody5QYigpLDExKSxraSh0LmYsZCxkZShrKyspKX1mdW5jdGlvbiBRZm4odCxlLG4pe3ZhciByLHMsbyxoO2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBRYihzKSxoPShyLmItci5hKSpyLmM8MD8oSXAoKSxBYik6bmV3IFBwKHIpO2guT2IoKTspbz11KGguUGIoKSwxOSksbG4odCxlLHM2KFhtKG4sby5hKSkpfWZ1bmN0aW9uIFpmbih0LGUsbil7dmFyIHIscyxvLGg7aWYobilmb3Iocz1uLmEubGVuZ3RoLHI9bmV3IFFiKHMpLGg9KHIuYi1yLmEpKnIuYzwwPyhJcCgpLEFiKTpuZXcgUHAocik7aC5PYigpOylvPXUoaC5QYigpLDE5KSxsbih0LGUsczYoWG0obixvLmEpKSl9ZnVuY3Rpb24gVzN0KHQpe1pwKCk7dmFyIGU7cmV0dXJuIGU9dShYSShQeCh0LmspLFB0KFhhLHhjLDYxLDIsMCwxKSksMTIyKSxEOChlLDAsZS5sZW5ndGgsbnVsbCksZVswXT09KGJlKCksTm4pJiZlWzFdPT1CbiYmKEppKGUsMCxCbiksSmkoZSwxLE5uKSksZX1mdW5jdGlvbiBJc2UodCxlLG4pe3ZhciByLHMsbztyZXR1cm4gcz1CMm4odCxlLG4pLG89TjV0KHQscyksSHJ0KHQuYikseHJ0KHQsZSxuKSx2bigpLFhzKHMsbmV3IHAkdCh0KSkscj1ONXQodCxzKSxIcnQodC5iKSx4cnQodCxuLGUpLG5ldyBsYShkZShvKSxkZShyKSl9ZnVuY3Rpb24gRHNlKCl7RHNlPVosbW1lPWJpKG5ldyBIcywoV2EoKSxJbyksKHJvKCksZlMpKSxwVj1uZXcgT3MoImxpbmVhclNlZ21lbnRzLmlucHV0UHJpbyIsZGUoMCkpLGJWPW5ldyBPcygibGluZWFyU2VnbWVudHMub3V0cHV0UHJpbyIsZGUoMCkpfWZ1bmN0aW9uIHVFKCl7dUU9Wix2Vj1uZXcgVVIoIlAxX1RSRUVJRklDQVRJT04iLDApLFBTPW5ldyBVUigiUDJfTk9ERV9PUkRFUklORyIsMSksUE89bmV3IFVSKCJQM19OT0RFX1BMQUNFTUVOVCIsMiksRlM9bmV3IFVSKCJQNF9FREdFX1JPVVRJTkciLDMpfWZ1bmN0aW9uIGF5KCl7YXk9WixOeWU9KGNpKCksejYpLFB5ZT1IMixNeWU9ejIsSXllPWE1LER5ZT12YixMeWU9czUsa190PVlPLE95ZT1LeSxGaHQ9KGI1dCgpLGt5ZSksQmh0PUV5ZSxFX3Q9VHllLF9WPUN5ZSxTVj1feWUsQk89U3llLFRfdD1BeWV9ZnVuY3Rpb24gamwoKXtqbD1aLFpPPW5ldyBZUigiVU5LTk9XTiIsMCksdTA9bmV3IFlSKCJBQk9WRSIsMSksd2I9bmV3IFlSKCJCRUxPVyIsMiksUU89bmV3IFlSKCJJTkxJTkUiLDMpLG5ldyBPcygib3JnLmVjbGlwc2UuZWxrLmxhYmVsU2lkZSIsWk8pfWZ1bmN0aW9uIE9zZSh0LGUpe3ZhciBuO2lmKHQubmkoKSYmZSE9bnVsbCl7Zm9yKG49MDtuPHQuaTsrK24paWYoeWkoZSx0Lmdbbl0pKXJldHVybiBufWVsc2UgZm9yKG49MDtuPHQuaTsrK24paWYoR3QodC5nW25dKT09PUd0KGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEpmbih0LGUsbil7dmFyIHIscztyZXR1cm4gZS5jPT0oc28oKSxldSkmJm4uYz09SnU/LTE6ZS5jPT1KdSYmbi5jPT1ldT8xOihyPVRyZShlLmEsdC5hKSxzPVRyZShuLmEsdC5hKSxlLmM9PWV1P3MtcjpyLXMpfWZ1bmN0aW9uIG95KHQsZSxuKXtpZihuJiYoZTwwfHxlPm4uYS5jLmxlbmd0aCkpdGhyb3cgcnQobmV3IFBuKCJpbmRleCBtdXN0IGJlID49IDAgYW5kIDw9IGxheWVyIG5vZGUgY291bnQiKSk7dC5jJiZ2dSh0LmMuYSx0KSx0LmM9bixuJiYkbShuLmEsZSx0KX1mdW5jdGlvbiBOc2UodCxlKXt2YXIgbixyLHM7Zm9yKHI9bmV3IGFyKGxyKHowKHQpLmEuS2MoKSxuZXcgeikpO3pyKHIpOylyZXR1cm4gbj11KExyKHIpLDE3KSxzPXUoZS5LYihuKSwxMCksbmV3IGprKEFyKHMubi5iK3Muby5iLzIpKTtyZXR1cm4gSTkoKSxJOSgpLGd1dH1mdW5jdGlvbiBQc2UodCxlKXt0aGlzLmM9bmV3IENyLHRoaXMuYT10LHRoaXMuYj1lLHRoaXMuZD11KFEodCwoc2UoKSxZNCkpLDMwNCksR3QoUSh0LChUZSgpLGlDdCkpKT09PUd0KChiSSgpLEZHKSk/dGhpcy5lPW5ldyBmcXQ6dGhpcy5lPW5ldyBocXR9ZnVuY3Rpb24gdDFuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89MCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMzKSxvKz1iLk1hdGgucG93KG4uZypuLmYtZSwyKTtyZXR1cm4gcz1iLk1hdGguc3FydChvLyh0LmMubGVuZ3RoLTEpKSxzfWZ1bmN0aW9uIG9fKHQsZSl7dmFyIG4scjtyZXR1cm4gcj1udWxsLHQuWGUoKGNpKCkscTYpKSYmKG49dSh0LldlKHE2KSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJnQueWYoKSYmKHI9dC55ZigpLldlKGUpKSxyPT1udWxsJiYocj1EZShlKSkscn1mdW5jdGlvbiB5c3QodCxlKXt2YXIgbixyO249dC5aYyhlKTt0cnl7cmV0dXJuIHI9bi5QYigpLG4uUWIoKSxyfWNhdGNoKHMpe3Rocm93IHM9V2kocyksRXQocywxMDkpP3J0KG5ldyBtbygiQ2FuJ3QgcmVtb3ZlIGVsZW1lbnQgIitlKSk6cnQocyl9fWZ1bmN0aW9uIGUxbih0LGUpe3ZhciBuLHIscztpZihyPW5ldyBfUixzPW5ldyBFeXQoci5xLmdldEZ1bGxZZWFyKCktbmIsci5xLmdldE1vbnRoKCksci5xLmdldERhdGUoKSksbj1ueW4odCxlLHMpLG49PTB8fG48ZS5sZW5ndGgpdGhyb3cgcnQobmV3IFBuKGUpKTtyZXR1cm4gc31mdW5jdGlvbiBLM3QodCxlKXt2YXIgbixyLHM7Zm9yKE9uKGUpLFAydChlIT10KSxzPXQuYi5jLmxlbmd0aCxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHVlKHQuYixPbihuKSk7cmV0dXJuIHMhPXQuYi5jLmxlbmd0aD8oTnl0KHQsMCksITApOiExfWZ1bmN0aW9uIEpJKCl7Skk9Wix4N3Q9KGNpKCksUlYpLG5ldyBlbyhyZnQsKEZuKCksITApKSxmYmU9ejIsZGJlPWE1LGdiZT12YixoYmU9czUsRTd0PVlPLHBiZT1LeSx5N3Q9KFUzdCgpLHViZSksdzd0PW9iZSxtN3Q9Y2JlLGs3dD1sYmUsb0c9YWJlfWZ1bmN0aW9uIG4xbih0LGUpe2lmKGU9PXQuYylyZXR1cm4gdC5kO2lmKGU9PXQuZClyZXR1cm4gdC5jO3Rocm93IHJ0KG5ldyBQbigiJ3BvcnQnIG11c3QgYmUgZWl0aGVyIHRoZSBzb3VyY2UgcG9ydCBvciB0YXJnZXQgcG9ydCBvZiB0aGUgZWRnZS4iKSl9ZnVuY3Rpb24gcjFuKHQsZSxuKXt2YXIgcixzO3N3aXRjaChzPXQubyxyPXQuZCxlLmcpe2Nhc2UgMTpyZXR1cm4tci5kLW47Y2FzZSAzOnJldHVybiBzLmIrci5hK247Y2FzZSAyOnJldHVybiBzLmErci5jK247Y2FzZSA0OnJldHVybi1yLmItbjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBZM3QodCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKGtvKGUsdShyLlhiKDApLDI5KSksZD1yLmJkKDEsci5nYygpKSxvPXUobi5LYihlKSwyMCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTcpLGg9cy5jLmk9PWU/cy5kLmk6cy5jLmksWTN0KHQsaCxuLGQpfWZ1bmN0aW9uIEZzZSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgQ3IsVnModCwoc2UoKSxqbHQpKT91KFEodCxqbHQpLDgzKToodXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuaiwxNikpLG5ldyBpWCksbmV3IHB4KGUpKSxKdCh0LGpsdCxlKSxlKX1mdW5jdGlvbiBYM3QodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Nj90LkNiLmloKHQsNixXcyxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChaYygpLFlWKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIFEzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT03P3QuQ2IuaWgodCwxLHNOLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KFpjKCksUkF0KSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIFozdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT05P3QuQ2IuaWgodCw5LG5zLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KFpjKCksJEF0KSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIEJzZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT01P3QuQ2IuaWgodCw5LGlVLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KGRuKCksdHApKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gSjN0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTM/dC5DYi5paCh0LDAsb04sZSk6KHI9bm8odSh5bigobj11KEluKHQsMTYpLDI2KSxufHwoZG4oKSxKZykpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBSc2UodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Nz90LkNiLmloKHQsNixyMSxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChkbigpLG5wKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIGpzZSgpe3RoaXMuYT1uZXcgWEYsdGhpcy5nPW5ldyBIeix0aGlzLmo9bmV3IEh6LHRoaXMuYj1uZXcgQ3IsdGhpcy5kPW5ldyBIeix0aGlzLmk9bmV3IEh6LHRoaXMuaz1uZXcgQ3IsdGhpcy5jPW5ldyBDcix0aGlzLmU9bmV3IENyLHRoaXMuZj1uZXcgQ3J9ZnVuY3Rpb24gaTFuKHQsZSxuKXt2YXIgcixzLG87Zm9yKG48MCYmKG49MCksbz10Lmkscz1uO3M8bztzKyspaWYocj1TdCh0LHMpLGU9PW51bGwpe2lmKHI9PW51bGwpcmV0dXJuIHN9ZWxzZSBpZihHdChlKT09PUd0KHIpfHx5aShlLHIpKXJldHVybiBzO3JldHVybi0xfWZ1bmN0aW9uIHMxbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5IaCh0LmEpLG4/KHI9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSxPSCkpLGhuKHRPLHIpP2tDKHQsRmwoZS5IaigpKSk6cik6bnVsbH1mdW5jdGlvbiBsRSh0LGUpe3ZhciBuLHI7aWYoZSl7aWYoZT09dClyZXR1cm4hMDtmb3Iobj0wLHI9dShlLDQ5KS5laCgpO3ImJnIhPWU7cj1yLmVoKCkpe2lmKCsrbj5vb3QpcmV0dXJuIGxFKHQscik7aWYocj09dClyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gYTFuKHQpe3N3aXRjaChnaigpLHQucS5nKXtjYXNlIDU6RW9lKHQsKGJlKCksTm4pKSxFb2UodCxtcik7YnJlYWs7Y2FzZSA0OndjZSh0LChiZSgpLE5uKSksd2NlKHQsbXIpO2JyZWFrO2RlZmF1bHQ6d2hlKHQsKGJlKCksTm4pKSx3aGUodCxtcil9fWZ1bmN0aW9uIG8xbih0KXtzd2l0Y2goZ2ooKSx0LnEuZyl7Y2FzZSA1OlJvZSh0LChiZSgpLEhuKSksUm9lKHQsQm4pO2JyZWFrO2Nhc2UgNDpZaWUodCwoYmUoKSxIbikpLFlpZSh0LEJuKTticmVhaztkZWZhdWx0Om1oZSh0LChiZSgpLEhuKSksbWhlKHQsQm4pfX1mdW5jdGlvbiBjMW4odCl7dmFyIGUsbjtlPXUoUSh0LChaZigpLHJiZSkpLDE5KSxlPyhuPWUuYSxuPT0wP0p0KHQsKEdwKCksYUcpLG5ldyB6aXQpOkp0KHQsKEdwKCksYUcpLG5ldyBUJChuKSkpOkp0KHQsKEdwKCksYUcpLG5ldyBUJCgxKSl9ZnVuY3Rpb24gdTFuKHQsZSl7dmFyIG47c3dpdGNoKG49dC5pLGUuZyl7Y2FzZSAxOnJldHVybi0odC5uLmIrdC5vLmIpO2Nhc2UgMjpyZXR1cm4gdC5uLmEtbi5vLmE7Y2FzZSAzOnJldHVybiB0Lm4uYi1uLm8uYjtjYXNlIDQ6cmV0dXJuLSh0Lm4uYSt0Lm8uYSl9cmV0dXJuIDB9ZnVuY3Rpb24gbDFuKHQsZSl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBlPT0oaGgoKSxmYik/X0c6U0c7Y2FzZSAxOnJldHVybiBlPT0oaGgoKSxmYik/X0c6dk87Y2FzZSAyOnJldHVybiBlPT0oaGgoKSxmYik/dk86U0c7ZGVmYXVsdDpyZXR1cm4gdk99fWZ1bmN0aW9uIHREKHQsZSl7dmFyIG4scixzO2Zvcih2dSh0LmEsZSksdC5lLT1lLnIrKHQuYS5jLmxlbmd0aD09MD8wOnQuYykscz1qa3Qscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4Nykscz1iLk1hdGgubWF4KHMsbi5kKTt0LmI9c31mdW5jdGlvbiB0NHQodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Mz90LkNiLmloKHQsMTIsbnMsZSk6KHI9bm8odSh5bigobj11KEluKHQsMTYpLDI2KSxufHwoWmMoKSxCQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gZTR0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTExP3QuQ2IuaWgodCwxMCxucyxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChaYygpLGpBdCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiAkc2UodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTA/dC5DYi5paCh0LDExLEdoLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KGRuKCksZXApKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24genNlKHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTEwP3QuQ2IuaWgodCwxMixWaCxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChkbigpLGUzKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIExoKHQpe3ZhciBlO3JldHVybiEodC5CYiYxKSYmdC5yJiZ0LnIua2goKSYmKGU9dSh0LnIsNDkpLHQucj11KEtwKHQsZSksMTM4KSx0LnIhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDksOCxlLHQucikpKSx0LnJ9ZnVuY3Rpb24geHN0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1jdChvdChpYSwxKSx2bywyNSwxNSxbXzR0KHQsKEtmKCksc2MpLGUsbiksXzR0KHQsdHUsZSxuKSxfNHQodCxhYyxlLG4pXSksdC5mJiYoclswXT1iLk1hdGgubWF4KHJbMF0sclsyXSksclsyXT1yWzBdKSxyfWZ1bmN0aW9uIGgxbih0LGUpe3ZhciBuLHIscztpZihzPXNmbih0LGUpLHMuYy5sZW5ndGghPTApZm9yKFhzKHMsbmV3IEZZKSxuPXMuYy5sZW5ndGgscj0wO3I8bjtyKyspcEUodCwoQW4ocixzLmMubGVuZ3RoKSx1KHMuY1tyXSwyODYpKSxJdm4odCxzLHIpKX1mdW5jdGlvbiBmMW4odCl7dmFyIGUsbixyLHM7Zm9yKHM9dShBaSh0LmEsKGc0KCksQUcpKSwxNSkuS2MoKTtzLk9iKCk7KWZvcihyPXUocy5QYigpLDEwMSksbj1QeChyLmspLktjKCk7bi5PYigpOyllPXUobi5QYigpLDYxKSx3OCh0LHIsZSwoSnYoKSxoYiksMSl9ZnVuY3Rpb24gZDFuKHQpe3ZhciBlLG47aWYodC5rPT0oR24oKSxacykpe2ZvcihuPW5ldyBhcihscih6MCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KExyKG4pLDE3KSwhVmEoZSkmJnQuYz09YzR0KGUsdCkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBnMW4odCl7dmFyIGUsbjtpZih0Lms9PShHbigpLFpzKSl7Zm9yKG49bmV3IGFyKGxyKHowKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTHIobiksMTcpLCFWYShlKSYmZS5jLmkuYz09ZS5kLmkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBwMW4odCxlKXt2YXIgbixyLHMsbztmb3Iod3IoZSwiRHVsbCBlZGdlIHJvdXRpbmciLDEpLG89ZWkodC5iLDApO28uYiE9by5kLmM7KWZvcihzPXUodGkobyksODYpLHI9ZWkocy5kLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwxODgpLF9oKG4uYSl9ZnVuY3Rpb24gYjFuKHQsZSl7dmFyIG4scixzLG8saDtpZihlKWZvcihzPWUuYS5sZW5ndGgsbj1uZXcgUWIocyksaD0obi5iLW4uYSkqbi5jPDA/KElwKCksQWIpOm5ldyBQcChuKTtoLk9iKCk7KW89dShoLlBiKCksMTkpLHI9XzgoZSxvLmEpLHImJmhjZSh0LHIpfWZ1bmN0aW9uIHYxbigpe3ZidCgpO3ZhciB0LGU7Zm9yKEY1bigoanAoKSxMbikpLEE1bihMbiksbXN0KExuKSx0THQ9KGRuKCksVjEpLGU9bmV3IFModUx0KTtlLmE8ZS5jLmMubGVuZ3RoOyl0PXUoSihlKSwyNDEpLF9FKHQsVjEsbnVsbCk7cmV0dXJuITB9ZnVuY3Rpb24gbjR0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztyZXR1cm4gdz10Lmg+PjE5LGs9ZS5oPj4xOSx3IT1rP2stdzoocz10LmgsZD1lLmgscyE9ZD9zLWQ6KHI9dC5tLGg9ZS5tLHIhPWg/ci1oOihuPXQubCxvPWUubCxuLW8pKSl9ZnVuY3Rpb24gS3ooKXtLej1aLEhFdD0oZ3EoKSxPdXQpLHFFdD1uZXcgbW4oR3h0LEhFdCksekV0PSgkJCgpLER1dCksJEV0PW5ldyBtbihWeHQsekV0KSxqRXQ9KE56KCksSXV0KSxSRXQ9bmV3IG1uKFV4dCxqRXQpLEJFdD1uZXcgbW4oV3h0LChGbigpLCEwKSl9ZnVuY3Rpb24gY18odCxlLG4pe3ZhciByLHM7cj1lKm4sRXQodC5nLDE0NSk/KHM9SHgodCkscy5mLmQ/cy5mLmF8fCh0LmQuYSs9citQMSk6KHQuZC5kLT1yK1AxLHQuZC5hKz1yK1AxKSk6RXQodC5nLDEwKSYmKHQuZC5kLT1yLHQuZC5hKz0yKnIpfWZ1bmN0aW9uIHFzZSh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iocz10W24uZ10sZD1uZXcgUyhlLmQpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwMSksbz1oLmksbyYmby5pPT1uJiYocj1oLmRbbi5nXSxzW3JdPWIuTWF0aC5tYXgoc1tyXSxvLmouYikpfWZ1bmN0aW9uIHcxbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9MCxzPTAsbj0wLGg9bmV3IFMoZS5kKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw0NDMpLFZ6KG8pLHI9Yi5NYXRoLm1heChyLG8uYikscys9by5kKyhuPjA/dC5nOjApLCsrbjtlLmI9cixlLmU9c31mdW5jdGlvbiBIc2UodCl7dmFyIGUsbixyO2lmKHI9dC5iLGhHdCh0Lmksci5sZW5ndGgpKXtmb3Iobj1yLmxlbmd0aCoyLHQuYj1QdCh3dXQsTEQsMzE3LG4sMCwxKSx0LmM9UHQod3V0LExELDMxNyxuLDAsMSksdC5mPW4tMSx0Lmk9MCxlPXQuYTtlO2U9ZS5jKW9EKHQsZSxlKTsrK3QuZ319ZnVuY3Rpb24gbTFuKHQsZSxuLHIpe3ZhciBzLG8saCxkO2ZvcihzPTA7czxlLm87cysrKWZvcihvPXMtZS5qK24saD0wO2g8ZS5wO2grKylkPWgtZS5rK3IsbDQoZSxzLGgpP2hmbih0LG8sZCl8fEFmbih0LG8sZCk6Z3NlKGUscyxoKSYmKGxzZSh0LG8sZCl8fExmbih0LG8sZCkpfWZ1bmN0aW9uIHkxbih0LGUsbil7dmFyIHI7cj1lLmMuaSxyLms9PShHbigpLFpzKT8oSnQodCwoc2UoKSxuMSksdShRKHIsbjEpLDExKSksSnQodCxSaCx1KFEocixSaCksMTEpKSk6KEp0KHQsKHNlKCksbjEpLGUuYyksSnQodCxSaCxuLmQpKX1mdW5jdGlvbiBoRSh0LGUsbil7eTQoKTt2YXIgcixzLG8saCxkLHc7cmV0dXJuIGg9ZS8yLG89bi8yLHI9Yi5NYXRoLmFicyh0LmEpLHM9Yi5NYXRoLmFicyh0LmIpLGQ9MSx3PTEscj5oJiYoZD1oL3IpLHM+byYmKHc9by9zKSx1ZCh0LGIuTWF0aC5taW4oZCx3KSksdH1mdW5jdGlvbiB4MW4oKXt5cSgpO3ZhciB0LGU7dHJ5e2lmKGU9dShmNHQoKE1wKCksVWgpLEdFKSwyMDE0KSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49V2kobiksRXQobiwxMDIpKXQ9bixKdnQoKE5yKCksdCkpO2Vsc2UgdGhyb3cgcnQobil9cmV0dXJuIG5ldyBKNX1mdW5jdGlvbiBrMW4oKXtOdGUoKTt2YXIgdCxlO3RyeXtpZihlPXUoZjR0KChNcCgpLFVoKSxMMiksMjAyNCksZSlyZXR1cm4gZX1jYXRjaChuKXtpZihuPVdpKG4pLEV0KG4sMTAyKSl0PW4sSnZ0KChOcigpLHQpKTtlbHNlIHRocm93IHJ0KG4pfXJldHVybiBuZXcgRW19ZnVuY3Rpb24gRTFuKCl7eXEoKTt2YXIgdCxlO3RyeXtpZihlPXUoZjR0KChNcCgpLFVoKSxQaCksMTk0MSksZSlyZXR1cm4gZX1jYXRjaChuKXtpZihuPVdpKG4pLEV0KG4sMTAyKSl0PW4sSnZ0KChOcigpLHQpKTtlbHNlIHRocm93IHJ0KG4pfXJldHVybiBuZXcgWVp9ZnVuY3Rpb24gVDFuKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuZSx0LmU9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IFFzKHQsMSw0LHMsZSksbj9uLkVpKHIpOm49cikscyE9ZSYmKGU/bj1fRSh0LG9xKHQsZSksbik6bj1fRSh0LHQuYSxuKSksbn1mdW5jdGlvbiBHc2UoKXtfUi5jYWxsKHRoaXMpLHRoaXMuZT0tMSx0aGlzLmE9ITEsdGhpcy5wPV9hLHRoaXMuaz0tMSx0aGlzLmM9LTEsdGhpcy5iPS0xLHRoaXMuZz0hMSx0aGlzLmY9LTEsdGhpcy5qPS0xLHRoaXMubj0tMSx0aGlzLmk9LTEsdGhpcy5kPS0xLHRoaXMubz1fYX1mdW5jdGlvbiBDMW4odCxlKXt2YXIgbixyLHM7aWYocj10LmIuZC5kLHQuYXx8KHIrPXQuYi5kLmEpLHM9ZS5iLmQuZCxlLmF8fChzKz1lLmIuZC5hKSxuPUxzKHIscyksbj09MCl7aWYoIXQuYSYmZS5hKXJldHVybi0xO2lmKCFlLmEmJnQuYSlyZXR1cm4gMX1yZXR1cm4gbn1mdW5jdGlvbiBfMW4odCxlKXt2YXIgbixyLHM7aWYocj10LmIuYi5kLHQuYXx8KHIrPXQuYi5iLmEpLHM9ZS5iLmIuZCxlLmF8fChzKz1lLmIuYi5hKSxuPUxzKHIscyksbj09MCl7aWYoIXQuYSYmZS5hKXJldHVybi0xO2lmKCFlLmEmJnQuYSlyZXR1cm4gMX1yZXR1cm4gbn1mdW5jdGlvbiBTMW4odCxlKXt2YXIgbixyLHM7aWYocj10LmIuZy5kLHQuYXx8KHIrPXQuYi5nLmEpLHM9ZS5iLmcuZCxlLmF8fChzKz1lLmIuZy5hKSxuPUxzKHIscyksbj09MCl7aWYoIXQuYSYmZS5hKXJldHVybi0xO2lmKCFlLmEmJnQuYSlyZXR1cm4gMX1yZXR1cm4gbn1mdW5jdGlvbiByNHQoKXtyNHQ9Wix2YmU9S3UoYmkoYmkoYmkobmV3IEhzLChXYSgpLHFjKSwocm8oKSxpVHQpKSxxYyxzVHQpLElvLGFUdCksSW8sVzd0KSxtYmU9YmkoYmkobmV3IEhzLHFjLCQ3dCkscWMsSzd0KSx3YmU9S3UobmV3IEhzLElvLFg3dCl9ZnVuY3Rpb24gQTFuKHQpe3ZhciBlLG4scixzLG87Zm9yKGU9dShRKHQsKHNlKCksbVMpKSw4Myksbz10Lm4scj1lLkNjKCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMzA2KSxzPW4uaSxzLmMrPW8uYSxzLmQrPW8uYixuLmM/YXVlKG4pOm91ZShuKTtKdCh0LG1TLG51bGwpfWZ1bmN0aW9uIEwxbih0LGUsbil7dmFyIHIscztzd2l0Y2gocz10LmIscj1zLmQsZS5nKXtjYXNlIDE6cmV0dXJuLXIuZC1uO2Nhc2UgMjpyZXR1cm4gcy5vLmErci5jK247Y2FzZSAzOnJldHVybiBzLm8uYityLmErbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuLTF9fWZ1bmN0aW9uIE0xbih0KXt2YXIgZSxuLHIscyxvO2lmKHI9MCxzPUZFLHQuYilmb3IoZT0wO2U8MzYwO2UrKyluPWUqLjAxNzQ1MzI5MjUxOTk0MzI5NSxXNXQodCx0LmQsMCwwLEk0LG4pLG89dC5iLmlnKHQuZCksbzxzJiYocj1uLHM9byk7VzV0KHQsdC5kLDAsMCxJNCxyKX1mdW5jdGlvbiBJMW4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1uZXcgQ3IsZS5lPW51bGwsZS5mPW51bGwscj1uZXcgUyhlLmkpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDY1KSxzPXUoSm4odC5nLG4uYSksNDYpLG4uYT1HaihuLmIpLGtpKG8sbi5hLHMpO3QuZz1vfWZ1bmN0aW9uIEQxbih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihzPWUtdC5lLG89cy90LmQuYy5sZW5ndGgsaD0wLHc9bmV3IFModC5kKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSw0NDMpLHI9dC5iLWQuYituLHZpZShkLGQuZStoKm8sZC5mKSxkZm4oZCxvLHIpLCsraH1mdW5jdGlvbiBWc2UodCl7dmFyIGU7aWYodC5mLnFqKCksdC5iIT0tMSl7aWYoKyt0LmIsZT10LmYuZFt0LmFdLHQuYjxlLmkpcmV0dXJuOysrdC5hfWZvcig7dC5hPHQuZi5kLmxlbmd0aDsrK3QuYSlpZihlPXQuZi5kW3QuYV0sZSYmZS5pIT0wKXt0LmI9MDtyZXR1cm59dC5iPS0xfWZ1bmN0aW9uIE8xbih0LGUpe3ZhciBuLHIscztmb3Iocz1lLmMubGVuZ3RoLG49RGduKHQscz09MD8iIjooQW4oMCxlLmMubGVuZ3RoKSxCcihlLmNbMF0pKSkscj0xO3I8cyYmbjsrK3Ipbj11KG4sNDkpLm9oKChBbihyLGUuYy5sZW5ndGgpLEJyKGUuY1tyXSkpKTtyZXR1cm4gbn1mdW5jdGlvbiBVc2UodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSx0LmNbbi5jLnBdW24ucF0uYT1WdnQodC5pKSx0LmNbbi5jLnBdW24ucF0uZD1YdCh0LmNbbi5jLnBdW24ucF0uYSksdC5jW24uYy5wXVtuLnBdLmI9MX1mdW5jdGlvbiBOMW4odCxlKXt2YXIgbixyLHMsbztmb3Iobz0wLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTU3KSxvKz1iLk1hdGgucG93KEZ1KG4pKnhsKG4pLWUsMik7cmV0dXJuIHM9Yi5NYXRoLnNxcnQoby8odC5jLmxlbmd0aC0xKSksc31mdW5jdGlvbiBXc2UodCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBvPW93bih0LGUsbixyKSxoPXo1dCh0LG8pLElzdCh0LGUsbixyKSxIcnQodC5iKSx2bigpLFhzKG8sbmV3IGIkdCh0KSkscz16NXQodCxvKSxJc3QodCxuLGUsciksSHJ0KHQuYiksbmV3IGxhKGRlKGgpLGRlKHMpKX1mdW5jdGlvbiBQMW4odCxlLG4pe3ZhciByLHM7Zm9yKHdyKG4sIkludGVyYWN0aXZlIG5vZGUgcGxhY2VtZW50IiwxKSx0LmE9dShRKGUsKHNlKCksWTQpKSwzMDQpLHM9bmV3IFMoZS5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyOSksbXZuKHQscik7b3Iobil9ZnVuY3Rpb24gRjFuKHQsZSl7dmFyIG47d3IoZSwiR2VuZXJhbCBDb21wYWN0b3IiLDEpLGUubiYmdCYmaGYoZSxmZih0KSwoQ2woKSxZbCkpLG49TGxuKHUocWUodCwoYXkoKSxCaHQpKSwzODApKSxuLmhnKHQpLGUubiYmdCYmaGYoZSxmZih0KSwoQ2woKSxZbCkpfWZ1bmN0aW9uIEIxbih0LGUsbil7dmFyIHIscztmb3Iob2oodCx0LmorZSx0Lmsrbikscz1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IFNzKEhoLHQsNSkpLHQuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSw0NjkpLG4ydChyLHIuYStlLHIuYituKTthaih0LHQuYitlLHQuYytuKX1mdW5jdGlvbiBpNHQodCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4hdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLFFjKHQuZSxlLHIpO2Nhc2UgODpyZXR1cm4hdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLFFjKHQuZCxlLHIpfXJldHVybiBBc3QodCxlLG4scil9ZnVuY3Rpb24gczR0KHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDc6cmV0dXJuIXQuZSYmKHQuZT1uZXcgQ24oV3MsdCw3LDQpKSxCYSh0LmUsZSxyKTtjYXNlIDg6cmV0dXJuIXQuZCYmKHQuZD1uZXcgQ24oV3MsdCw4LDUpKSxCYSh0LmQsZSxyKX1yZXR1cm4gZml0KHQsZSxuLHIpfWZ1bmN0aW9uIFIxbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgUWIobyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9XzgobixoLmEpLHMmJmtvZSh0LHMsZSl9ZnVuY3Rpb24gWXoodCxlLG4pe3ZhciByLHMsbyxoLGQ7cmV0dXJuIHQucWooKSxvPWU9PW51bGw/MDpIaShlKSx0LmY+MCYmKGg9KG8mdmkpJXQuZC5sZW5ndGgscz1yNXQodCxoLG8sZSkscyk/KGQ9cy5lZChuKSxkKToocj10LnRqKG8sZSxuKSx0LmMuRmMociksbnVsbCl9ZnVuY3Rpb24gYTR0KHQsZSl7dmFyIG4scixzLG87c3dpdGNoKE9nKHQsZSkuX2soKSl7Y2FzZSAzOmNhc2UgMjp7Zm9yKG49azQoZSkscz0wLG89bi5pO3M8bzsrK3MpaWYocj11KFN0KG4scyksMzQpLCR2KEVvKHQscikpPT01KXJldHVybiByO2JyZWFrfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqMW4odCl7dmFyIGUsbixyLHMsbztpZihoR3QodC5mLHQuYi5sZW5ndGgpKWZvcihyPVB0KHBnZSxMRCwzMzAsdC5iLmxlbmd0aCoyLDAsMSksdC5iPXIscz1yLmxlbmd0aC0xLG49dC5hO24hPXQ7bj1uLlJkKCkpbz11KG4sMzMwKSxlPW8uZCZzLG8uYT1yW2VdLHJbZV09b31mdW5jdGlvbiBLc2UodCxlKXt2YXIgbixyLHMsbztmb3Iobz0wLHM9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksbz1iLk1hdGgubWF4KG8sci5lLmErci5iLnJmKCkuYSk7bj11KGdvKHQuYixlKSwxMjQpLG4ubi5iPTAsbi5hLmE9b31mdW5jdGlvbiBZc2UodCxlKXt2YXIgbixyLHMsbztmb3Iobj0wLG89dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExMSksbj1iLk1hdGgubWF4KG4scy5lLmIrcy5iLnJmKCkuYik7cj11KGdvKHQuYixlKSwxMjQpLHIubi5kPTAsci5hLmI9bn1mdW5jdGlvbiAkMW4odCl7dmFyIGUsbjtyZXR1cm4gbj11KFEodCwoc2UoKSxHYykpLDIxKSxlPWlqKFBtZSksbi5IYygob28oKSxWNCkpJiZSbChlLFJtZSksbi5IYyh3UykmJlJsKGUsam1lKSxuLkhjKGw3KSYmUmwoZSxGbWUpLG4uSGMoaDcpJiZSbChlLEJtZSksZX1mdW5jdGlvbiB6MW4odCxlKXt2YXIgbjt3cihlLCJEZWxhdW5heSB0cmlhbmd1bGF0aW9uIiwxKSxuPW5ldyBsZSxtdSh0LmksbmV3IFIkdChuKSksamUoUmUoUSh0LChHOCgpLHVTKSkpKSx0LmU/VWEodC5lLE5oZShuKSk6dC5lPU5oZShuKSxvcihlKX1mdW5jdGlvbiBvNHQodCl7aWYodDwwKXRocm93IHJ0KG5ldyBQbigiVGhlIGlucHV0IG11c3QgYmUgcG9zaXRpdmUiKSk7cmV0dXJuIHQ8eVN0Lmxlbmd0aD9Wdih5U3RbdF0pOmIuTWF0aC5zcXJ0KEk0KnQpKih4dW4odCx0KS9HeXQoMi43MTgyODE4Mjg0NTkwNDUsdCkpfWZ1bmN0aW9uIGZFKHQsZSl7dmFyIG47aWYodC5uaSgpJiZlIT1udWxsKXtmb3Iobj0wO248dC5pOysrbilpZih5aShlLHQuZ1tuXSkpcmV0dXJuITB9ZWxzZSBmb3Iobj0wO248dC5pOysrbilpZihHdCh0Lmdbbl0pPT09R3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcTFuKHQsZSl7aWYoZT09bnVsbCl7Zm9yKDt0LmEuT2IoKTspaWYodSh0LmEuUGIoKSw0MikuZGQoKT09bnVsbClyZXR1cm4hMH1lbHNlIGZvcig7dC5hLk9iKCk7KWlmKHlpKGUsdSh0LmEuUGIoKSw0MikuZGQoKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSDFuKHQsZSl7dmFyIG4scixzO3JldHVybiBlPT09dD8hMDpFdChlLDY2NCk/KHM9dShlLDE5NDcpLElpZSgocj10Lmcscnx8KHQuZz1uZXcgdjkodCkpKSwobj1zLmcsbnx8KHMuZz1uZXcgdjkocykpKSkpOiExfWZ1bmN0aW9uIEcxbih0KXt2YXIgZSxuLHIscztmb3IoZT0iU3oiLG49ImV6IixzPWIuTWF0aC5taW4odC5sZW5ndGgsNSkscj1zLTE7cj49MDtyLS0paWYoaG4odFtyXS5kLGUpfHxobih0W3JdLmQsbikpe3QubGVuZ3RoPj1yKzEmJnQuc3BsaWNlKDAscisxKTticmVha31yZXR1cm4gdH1mdW5jdGlvbiBlRCh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQvZSxERDxuJiZuPHgyKT9uPDA/Yi5NYXRoLmNlaWwobik6Yi5NYXRoLmZsb29yKG4pOlZwKGR4dChCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUsITEpKX1mdW5jdGlvbiBjNHQodCxlKXtpZihlPT10LmMuaSlyZXR1cm4gdC5kLmk7aWYoZT09dC5kLmkpcmV0dXJuIHQuYy5pO3Rocm93IHJ0KG5ldyBQbigiJ25vZGUnIG11c3QgZWl0aGVyIGJlIHRoZSBzb3VyY2Ugbm9kZSBvciB0YXJnZXQgbm9kZSBvZiB0aGUgZWRnZS4iKSl9ZnVuY3Rpb24gVjFuKHQpe3ZhciBlLG4scixzO2lmKHM9dShRKHQsKHNlKCksWVR0KSksMzcpLHMpe2ZvcihyPW5ldyBUYSxlPUZhKHQuYy5pKTtlIT1zOyluPWUuZSxlPUZhKG4pLEZtKExpKExpKHIsbi5uKSxlLmMpLGUuZC5iLGUuZC5kKTtyZXR1cm4gcn1yZXR1cm4gQmJlfWZ1bmN0aW9uIFUxbih0KXt2YXIgZTtlPXUoUSh0LChzZSgpLGQ3KSksNDAzKSx1cyhXbyhuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IEpZKSxuZXcgZ3godCkpLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgaEYpLG5ldyBPMyh0KSl9ZnVuY3Rpb24ga3N0KHQsZSl7dmFyIG4scixzLG87Zm9yKHM9ZT9Ncyh0KTpqbyh0KSxyPW5ldyBhcihscihzLmEuS2MoKSxuZXcgeikpO3pyKHIpOylpZihuPXUoTHIociksMTcpLG89YzR0KG4sdCksby5rPT0oR24oKSxacykmJm8uYyE9dC5jKXJldHVybiBvO3JldHVybiBudWxsfWZ1bmN0aW9uIFcxbih0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5wKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksZS5rPT0oR24oKSxEcykmJihyPWUuby5iLHQuaT1iLk1hdGgubWluKHQuaSxyKSx0Lmc9Yi5NYXRoLm1heCh0LmcscikpfWZ1bmN0aW9uIFhzZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEwKSx0LmNbci5jLnBdW3IucF0uZT0hMTtmb3Iocz1uZXcgUyhlKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMCksbXh0KHQscixuKX1mdW5jdGlvbiBFc3QodCxlLG4pe3ZhciByLHM7cj1hNChlLmosbi5zLG4uYykrYTQobi5lLGUucyxlLmMpLHM9YTQobi5qLGUucyxlLmMpK2E0KGUuZSxuLnMsbi5jKSxyPT1zP3I+MCYmKHQuYis9Mix0LmErPXIpOih0LmIrPTEsdC5hKz1iLk1hdGgubWluKHIscykpfWZ1bmN0aW9uIFFzZSh0LGUpe3ZhciBuLHI7aWYocj0hMSxlYShlKSYmKHI9ITAsQngodCxuZXcgSG0oQnIoZSkpKSkscnx8RXQoZSwyMzYpJiYocj0hMCxCeCh0LChuPWZ2dCh1KGUsMjM2KSksbmV3IHk5KG4pKSkpLCFyKXRocm93IHJ0KG5ldyB0ZXQoeDh0KSl9ZnVuY3Rpb24gSzFuKHQsZSxuLHIpe3ZhciBzLG8saDtyZXR1cm4gcz1uZXcgRjAodC5lLDEsMTAsKGg9ZS5jLEV0KGgsODgpP3UoaCwyNik6KGRuKCksV2gpKSwobz1uLmMsRXQobyw4OCk/dShvLDI2KTooZG4oKSxXaCkpLEZnKHQsZSksITEpLHI/ci5FaShzKTpyPXMscn1mdW5jdGlvbiB1NHQodCl7dmFyIGUsbjtzd2l0Y2godShRKEZhKHQpLChUZSgpLFg5dCkpLDQyMCkuZyl7Y2FzZSAwOnJldHVybiBlPXQubixuPXQubyxuZXcgJGUoZS5hK24uYS8yLGUuYituLmIvMik7Y2FzZSAxOnJldHVybiBuZXcgeW8odC5uKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBuRCgpe25EPVosQkc9bmV3IFE5KEswLDApLFBUdD1uZXcgUTkoIkxFRlRVUCIsMSksQlR0PW5ldyBROSgiUklHSFRVUCIsMiksTlR0PW5ldyBROSgiTEVGVERPV04iLDMpLEZUdD1uZXcgUTkoIlJJR0hURE9XTiIsNCksU2x0PW5ldyBROSgiQkFMQU5DRUQiLDUpfWZ1bmN0aW9uIFkxbih0LGUsbil7dmFyIHIscyxvO2lmKHI9THModC5hW2UucF0sdC5hW24ucF0pLHI9PTApe2lmKHM9dShRKGUsKHNlKCksSTYpKSwxNSksbz11KFEobixJNiksMTUpLHMuSGMobikpcmV0dXJuLTE7aWYoby5IYyhlKSlyZXR1cm4gMX1yZXR1cm4gcn1mdW5jdGlvbiBYMW4odCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBuZXcgdFo7Y2FzZSAyOnJldHVybiBuZXcgZVo7Y2FzZSAzOnJldHVybiBuZXcgSlE7Y2FzZSAwOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKHhjdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGw0dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgMTohdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHhyKHQubiksIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSxycyh0Lm4sdShuLDE0KSk7cmV0dXJuO2Nhc2UgMjpxQyh0LEJyKG4pKTtyZXR1cm59TXl0KHQsZSxuKX1mdW5jdGlvbiBoNHQodCxlLG4pe3N3aXRjaChlKXtjYXNlIDM6WHYodCxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDQ6UXYodCxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDU6eXUodCxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDY6eHUodCxYdCh5ZShuKSkpO3JldHVybn1sNHQodCxlLG4pfWZ1bmN0aW9uIFh6KHQsZSxuKXt2YXIgcixzLG87bz0ocj1uZXcgS3R0LHIpLHM9TzEobyxlLG51bGwpLHMmJnMuRmkoKSxYYyhvLG4pLE1yKCghdC5jJiYodC5jPW5ldyBoZSh6dyx0LDEyLDEwKSksdC5jKSxvKSxJZyhvLDApLHR5KG8sMSksUGcobywhMCksTmcobywhMCl9ZnVuY3Rpb24gZjR0KHQsZSl7dmFyIG4scixzO3JldHVybiBuPVU5KHQuZyxlKSxFdChuLDIzNSk/KHM9dShuLDIzNSkscy5RaCgpPT1udWxsLHMuTmgoKSk6RXQobiw0OTgpPyhyPXUobiwxOTM4KSxzPXIuYixzKTpudWxsfWZ1bmN0aW9uIFExbih0LGUsbixyKXt2YXIgcyxvO3JldHVybiBBcihlKSxBcihuKSxvPXUod0ModC5kLGUpLDE5KSxqdGUoISFvLCJSb3cgJXMgbm90IGluICVzIixlLHQuZSkscz11KHdDKHQuYixuKSwxOSksanRlKCEhcywiQ29sdW1uICVzIG5vdCBpbiAlcyIsbix0LmMpLEduZSh0LG8uYSxzLmEscil9ZnVuY3Rpb24gWnNlKHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxDLE07aWYoQz1zW29dLGs9bz09aC0xLGQ9az9yOjAsTT1tc2UoZCxDKSxyIT0xMCYmY3Qob3QodCxoLW8pLGVbb10sbltvXSxkLE0pLCFrKWZvcigrK28sdz0wO3c8QzsrK3cpTVt3XT1ac2UodCxlLG4scixzLG8saCk7cmV0dXJuIE19ZnVuY3Rpb24gdV8odCl7aWYodC5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3QubWooKTt0cnl7dC5pLiRjKHQuZyksdC5mPXQuaS5qLHQuZzx0LmUmJi0tdC5lLHQuZz0tMX1jYXRjaChlKXt0aHJvdyBlPVdpKGUpLEV0KGUsNzMpP3J0KG5ldyBlaCk6cnQoZSl9fWZ1bmN0aW9uIGxfKHQsZSl7cmV0dXJuIHQuYi5hPWIuTWF0aC5taW4odC5iLmEsZS5jKSx0LmIuYj1iLk1hdGgubWluKHQuYi5iLGUuZCksdC5hLmE9Yi5NYXRoLm1heCh0LmEuYSxlLmMpLHQuYS5iPWIuTWF0aC5tYXgodC5hLmIsZS5kKSx0LmNbdC5jLmxlbmd0aF09ZSwhMH1mdW5jdGlvbiBaMW4odCl7dmFyIGUsbixyLHM7Zm9yKHM9LTEscj0wLG49bmV3IFModCk7bi5hPG4uYy5jLmxlbmd0aDspe2lmKGU9dShKKG4pLDI0MyksZS5jPT0oc28oKSxKdSkpe3M9cj09MD8wOnItMTticmVha31lbHNlIHI9PXQuYy5sZW5ndGgtMSYmKHM9cik7cis9MX1yZXR1cm4gc31mdW5jdGlvbiBKMW4odCl7dmFyIGUsbixyLHM7Zm9yKHM9MCxlPTAscj1uZXcgUyh0LmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMzKSx5dShuLHQuZStzKSx4dShuLHQuZikscys9bi5nK3QuYixlPWIuTWF0aC5tYXgoZSxuLmYrdC5iKTt0LmQ9cy10LmIsdC5hPWUtdC5ifWZ1bmN0aW9uIGY0KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLHI9ZS5kLmMsZS5kLmM9ZS5kLmQsZS5kLmQ9cixyPWUuZC5iLGUuZC5iPWUuZC5hLGUuZC5hPXIscj1lLmIuYSxlLmIuYT1lLmIuYixlLmIuYj1yO1M1dCh0KX1mdW5jdGlvbiBkNCh0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxyPWUuZy5jLGUuZy5jPWUuZy5kLGUuZy5kPXIscj1lLmcuYixlLmcuYj1lLmcuYSxlLmcuYT1yLHI9ZS5lLmEsZS5lLmE9ZS5lLmIsZS5lLmI9cjt1cSh0KX1mdW5jdGlvbiB0ZG4odCl7dmFyIGUsbixyLHMsbztmb3Iobz1QeCh0LmspLG49KGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkscj0wLHM9bi5sZW5ndGg7cjxzOysrcilpZihlPW5bcl0sZSE9Wm8mJiFvLkhjKGUpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIFRzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9dShTMnQobWl0KFJpKG5ldyBUbihudWxsLG5ldyBfbihlLmosMTYpKSxuZXcgVlgpKSksMTEpLHImJihuPXUoRmUoci5lLDApLDE3KSxuKT91KFEobiwoc2UoKSxUYykpLDE5KS5hOkxhbih0LmIpfWZ1bmN0aW9uIGVkbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxQOSh0LmQpLHI9bmV3IGFyKGxyKE1zKHMpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLFdvZSh0LHMsbi5kLmkpfWZ1bmN0aW9uIG5kbih0LGUpe3ZhciBuLHI7Zm9yKHZ1KHQuYixlKSxyPW5ldyBTKHQubik7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KEoociksMjExKSxSbyhuLmMsZSwwKSE9LTEpe3Z1KG4uYyxlKSxKMW4obiksbi5jLmMubGVuZ3RoPT0wJiZ2dSh0Lm4sbik7YnJlYWt9Z3luKHQpfWZ1bmN0aW9uIEpzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9dC5mLHM9MCxvPTAscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4NyksWUkobix0LmUsaCksZEkobixlKSxvPWIuTWF0aC5tYXgobyxuLnIpLGgrPW4uZCt0LmMscz1oO3QuZD1vLHQuYj1zfWZ1bmN0aW9uIHRhZSh0KXt2YXIgZSxuO3JldHVybiBuPWZEKHQpLFM4KG4pP251bGw6KGU9KEFyKG4pLHUodXNlKG5ldyBhcihscihuLmEuS2MoKSxuZXcgeikpKSw3OSkpLE1vKHUoU3QoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MikpKX1mdW5jdGlvbiBReih0KXt2YXIgZTtyZXR1cm4gdC5vfHwoZT10LkxqKCksZT90Lm89bmV3IG13dCh0LHQsbnVsbCk6dC5yaygpP3Qubz1uZXcgUTJ0KHQsbnVsbCk6JHYoRW8oKFJ1KCksbWEpLHQpKT09MT90Lm89bmV3ICRadCh0KTp0Lm89bmV3IGxudCh0LG51bGwpKSx0Lm99ZnVuY3Rpb24gcmRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7bi5taChlKSYmKHM9KGg9ZSxoP3Uociw0OSkueGgoaCk6bnVsbCkscyYmKHc9bi5haChlKSxkPWUudCxkPjF8fGQ9PS0xPyhvPXUodywxNSkscy5XYihpaG4odCxvKSkpOnMuV2IodWF0KHQsdSh3LDU2KSkpKSl9ZnVuY3Rpb24gaWRuKHQsZSxuLHIpe2pIdCgpO3ZhciBzPWR1dDtmdW5jdGlvbiBvKCl7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspc1toXSgpfWlmKHQpdHJ5e2o1ZShvKSgpfWNhdGNoKGgpe3QoZSxoKX1lbHNlIGo1ZShvKSgpfWZ1bmN0aW9uIHNkbih0KXt2YXIgZSxuLHIscyxvO2ZvcihyPW5ldyBoMihuZXcgd2codC5iKS5hKTtyLmI7KW49WXYociksZT11KG4uY2QoKSwxMCksbz11KHUobi5kZCgpLDQ2KS5hLDEwKSxzPXUodShuLmRkKCksNDYpLmIsOCksTGkoR2YoZS5uKSxMaShuYyhvLm4pLHMpKX1mdW5jdGlvbiBhZG4odCl7c3dpdGNoKHUoUSh0LmIsKFRlKCksSDl0KSksMzc1KS5nKXtjYXNlIDE6dXMocHUoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZCwxNikpLG5ldyBfRiksbmV3IGh2KSxuZXcgU0YpO2JyZWFrO2Nhc2UgMjpZdm4odCk7YnJlYWs7Y2FzZSAwOk1nbih0KX19ZnVuY3Rpb24gb2RuKHQsZSxuKXt2YXIgcjt3cihuLCJTdHJhaWdodCBMaW5lIEVkZ2UgUm91dGluZyIsMSksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSkscj11KHFlKGUsKGJDKCksJFMpKSwzMyksX2xlKHQsciksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSl9ZnVuY3Rpb24gY3koKXtjeT1aLGVmdD1uZXcgbkMoIlZfVE9QIiwwKSxWTz1uZXcgbkMoIlZfQ0VOVEVSIiwxKSxHTz1uZXcgbkMoIlZfQk9UVE9NIiwyKSx0ZnQ9bmV3IG5DKCJIX0xFRlQiLDMpLHFPPW5ldyBuQygiSF9DRU5URVIiLDQpLEhPPW5ldyBuQygiSF9SSUdIVCIsNSl9ZnVuY3Rpb24gZDR0KHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P1N6KHQpOihlPW5ldyBUaChTeih0KSksZS5hKz0iIChhYnN0cmFjdDogIixrZyhlLCh0LkJiJjI1NikhPTApLGUuYSs9IiwgaW50ZXJmYWNlOiAiLGtnKGUsKHQuQmImNTEyKSE9MCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBjZG4odCxlLG4scil7dmFyIHMsbyxoLGQ7cmV0dXJuIG1sKHQuZSkmJihzPWUuYWsoKSxkPWUuZGQoKSxvPW4uZGQoKSxoPXpwKHQsMSxzLGQsbyxzLiRqKCk/RUUodCxzLG8sRXQocyw5OSkmJih1KHMsMTgpLkJiJllhKSE9MCk6LTEsITApLHI/ci5FaShoKTpyPWgpLHJ9ZnVuY3Rpb24gdWRuKHQpe3ZhciBlO3QuYz09bnVsbCYmKGU9R3QodC5iKT09PUd0KFk4dCk/bnVsbDp0LmIsdC5kPWU9PW51bGw/VHU6eFl0KGUpP0dYZShGWHQoZSkpOmVhKGUpP0R4dDpBcChzbChlKSksdC5hPXQuYSsiOiAiKyh4WXQoZSk/QlFlKEZYdChlKSk6ZSsiIiksdC5jPSIoIit0LmQrIikgIit0LmEpfWZ1bmN0aW9uIGc0dCh0LGUpe3RoaXMuZT10LEF2KFBzKGUsLTQyOTQ5NjcyOTYpLDApPyh0aGlzLmQ9MSx0aGlzLmE9Y3Qob3QoVHIsMSksWHIsMjUsMTUsW1NyKGUpXSkpOih0aGlzLmQ9Mix0aGlzLmE9Y3Qob3QoVHIsMSksWHIsMjUsMTUsW1NyKGUpLFNyKEZwKGUsMzIpKV0pKX1mdW5jdGlvbiBsZG4oKXtmdW5jdGlvbiB0KCl7dHJ5e3JldHVybiBuZXcgTWFwKCkuZW50cmllcygpLm5leHQoKS5kb25lfWNhdGNoe3JldHVybiExfX1yZXR1cm4gdHlwZW9mIE1hcD09PU5hdCYmTWFwLnByb3RvdHlwZS5lbnRyaWVzJiZ0KCk/TWFwOk40bigpfWZ1bmN0aW9uIGhkbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBoYSh0LmUsMCksbj0wO28uYjxvLmQuZ2MoKTspe2lmKHI9WHQoKFFuKG8uYjxvLmQuZ2MoKSkseWUoby5kLlhiKG8uYz1vLmIrKykpKSkscz1yLWUscz53Y3QpcmV0dXJuIG47cz4tMWUtNiYmKytufXJldHVybiBufWZ1bmN0aW9uIHA0dCh0LGUpe3ZhciBuO2UhPXQuYj8obj1udWxsLHQuYiYmKG49YyQodC5iLHQsLTQsbikpLGUmJihuPWU2KGUsdCwtNCxuKSksbj1OcmUodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLGUsZSkpfWZ1bmN0aW9uIGVhZSh0LGUpe3ZhciBuO2UhPXQuZj8obj1udWxsLHQuZiYmKG49YyQodC5mLHQsLTEsbikpLGUmJihuPWU2KGUsdCwtMSxuKSksbj1QcmUodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwwLGUsZSkpfWZ1bmN0aW9uIG5hZSh0KXt2YXIgZSxuLHI7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihuPXUodCwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyB4ZyxlPW4uS2MoKTtlLk9iKCk7KWZvKHIsKERpKCksQnIoZS5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBXZXQocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIHJhZSh0KXt2YXIgZSxuLHI7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihuPXUodCwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyB4ZyxlPW4uS2MoKTtlLk9iKCk7KWZvKHIsKERpKCksQnIoZS5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBXZXQocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIGZkbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj10LmNbZS5jLnBdW2UucF0scz10LmNbbi5jLnBdW24ucF0sci5hIT1udWxsJiZzLmEhPW51bGw/UG50KHIuYSxzLmEpOnIuYSE9bnVsbD8tMTpzLmEhPW51bGw/MTowfWZ1bmN0aW9uIGRkbih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihlKWZvcihvPWUuYS5sZW5ndGgsbj1uZXcgUWIobyksZD0obi5iLW4uYSkqbi5jPDA/KElwKCksQWIpOm5ldyBQcChuKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9XzgoZSxoLmEpLHI9bmV3IGl6dCh0KSxubm4oci5hLHMpfWZ1bmN0aW9uIGdkbih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihlKWZvcihvPWUuYS5sZW5ndGgsbj1uZXcgUWIobyksZD0obi5iLW4uYSkqbi5jPDA/KElwKCksQWIpOm5ldyBQcChuKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9XzgoZSxoLmEpLHI9bmV3IFkkdCh0KSxlbm4oci5hLHMpfWZ1bmN0aW9uIHBkbih0KXt2YXIgZTtpZih0IT1udWxsJiZ0Lmxlbmd0aD4wJiZiYSh0LHQubGVuZ3RoLTEpPT0zMyl0cnl7cmV0dXJuIGU9dG9lKERsKHQsMCx0Lmxlbmd0aC0xKSksZS5lPT1udWxsfWNhdGNoKG4pe2lmKG49V2kobiksIUV0KG4sMzIpKXRocm93IHJ0KG4pfXJldHVybiExfWZ1bmN0aW9uIGlhZSh0LGUsbil7dmFyIHIscyxvO3JldHVybiByPWUuYWsoKSxvPWUuZGQoKSxzPXIuJGooKT96cCh0LDMscixudWxsLG8sRUUodCxyLG8sRXQociw5OSkmJih1KHIsMTgpLkJiJllhKSE9MCksITApOnpwKHQsMSxyLHIuemooKSxvLC0xLCEwKSxuP24uRWkocyk6bj1zLG59ZnVuY3Rpb24gYmRuKCl7dmFyIHQsZSxuO2ZvcihlPTAsdD0wO3Q8MTt0Kyspe2lmKG49bzV0KChScih0LDEpLCJYIi5jaGFyQ29kZUF0KHQpKSksbj09MCl0aHJvdyBydChuZXcgRnIoIlVua25vd24gT3B0aW9uOiAiKyJYIi5zdWJzdHIodCkpKTtlfD1ufXJldHVybiBlfWZ1bmN0aW9uIHZkbih0LGUsbil7dmFyIHIscyxvO3N3aXRjaChyPUZhKGUpLHM9RXoociksbz1uZXcgTWMsVW8obyxlKSxuLmcpe2Nhc2UgMTpGcyhvLEhJKEp4KHMpKSk7YnJlYWs7Y2FzZSAyOkZzKG8sSngocykpfXJldHVybiBKdChvLChUZSgpLHp5KSx5ZShRKHQsenkpKSksb31mdW5jdGlvbiBiNHQodCl7dmFyIGUsbjtyZXR1cm4gZT11KExyKG5ldyBhcihscihqbyh0LmEpLmEuS2MoKSxuZXcgeikpKSwxNyksbj11KExyKG5ldyBhcihscihNcyh0LmEpLmEuS2MoKSxuZXcgeikpKSwxNyksamUoUmUoUShlLChzZSgpLCQxKSkpKXx8amUoUmUoUShuLCQxKSkpfWZ1bmN0aW9uIGc0KCl7ZzQ9WixMRz1uZXcga00oIk9ORV9TSURFIiwwKSxJRz1uZXcga00oIlRXT19TSURFU19DT1JORVIiLDEpLERHPW5ldyBrTSgiVFdPX1NJREVTX09QUE9TSU5HIiwyKSxNRz1uZXcga00oIlRIUkVFX1NJREVTIiwzKSxBRz1uZXcga00oIkZPVVJfU0lERVMiLDQpfWZ1bmN0aW9uIENzdCh0LGUsbixyLHMpe3ZhciBvLGg7bz11KFBsKFJpKGUuT2MoKSxuZXcgT1gpLGkyKG5ldyBfZSxuZXcgd2UsbmV3IG5yLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxHbCldKSkpLDE1KSxoPXUobzIodC5iLG4sciksMTUpLHM9PTA/aC5XYygwLG8pOmguR2Mobyl9ZnVuY3Rpb24gd2RuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobz1uZXcgUyhlLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCkscj1uZXcgYXIobHIoam8ocykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSwxNyksaD1uLmMuaS5wLHQubltoXT10Lm5baF0tMX1mdW5jdGlvbiBtZG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPW5ldyBTKGUuZCk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwMSksaD11KEpuKHQuYyxzKSwxMTIpLm8scj1uZXcgRXgocy5iKTtyLmE8ci5jLmEubGVuZ3RoOyluPXUoRkMociksNjEpLFNtdChzLG4saCl9ZnVuY3Rpb24geWRuKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5lLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI5KSxYM24odCxlKTt1cyhSaShXbyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgdlEpLG5ldyBqRiksbmV3IHhRKSxuZXcgTSR0KHQpKX1mdW5jdGlvbiB2NHQodCxlKXtyZXR1cm4gZT90LkRpKGUpPyExOnQuaT90LmkuRWkoZSk6RXQoZSwxNDMpPyh0Lmk9dShlLDE0MyksITApOih0Lmk9bmV3IGV4LHQuaS5FaShlKSk6ITF9ZnVuY3Rpb24geGRuKHQpe2lmKHQ9JGModCwhMCksaG4ocUUsdCl8fGhuKCIxIix0KSlyZXR1cm4gRm4oKSxZRTtpZihobihPY3QsdCl8fGhuKCIwIix0KSlyZXR1cm4gRm4oKSxJMjt0aHJvdyBydChuZXcgcmV0KCJJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICciK3QrIiciKSl9ZnVuY3Rpb24gdzR0KHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9dC52YygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDQyKSxvPXIuY2QoKSxHdChlKT09PUd0KG8pfHxlIT1udWxsJiZ5aShlLG8pKXJldHVybiBuJiYocj1uZXcgUlIoci5jZCgpLHIuZGQoKSkscy5RYigpKSxyO3JldHVybiBudWxsfWZ1bmN0aW9uIGtkbih0KXtCbSgpO3ZhciBlLG4scjt0LkIuSGMoKGNsKCksVlYpKSYmKHI9dC5mLmksZT1uZXcgbyQodC5hLmMpLG49bmV3IHd4LG4uYj1lLmMtci5jLG4uZD1lLmQtci5kLG4uYz1yLmMrci5iLShlLmMrZS5iKSxuLmE9ci5kK3IuYS0oZS5kK2UuYSksdC5lLkZmKG4pKX1mdW5jdGlvbiBzYWUodCxlLG4scil7dmFyIHMsbyxoO2ZvcihoPWIuTWF0aC5taW4obixkbGUodSh0LmIsNjUpLGUsbixyKSksbz1uZXcgUyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMSkscyE9ZSYmKGg9Yi5NYXRoLm1pbihoLHNhZShzLGUsaCxyKSkpO3JldHVybiBofWZ1bmN0aW9uIG00dCh0KXt2YXIgZSxuLHIscztmb3Iocz1QdChvMCx0ZSwxOTMsdC5iLmMubGVuZ3RoLDAsMikscj1uZXcgaGEodC5iLDApO3IuYjxyLmQuZ2MoKTspZT0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDI5KSksbj1yLmItMSxzW25dPXNJKGUuYSk7cmV0dXJuIHN9ZnVuY3Rpb24gX3N0KHQsZSxuLHIscyl7dmFyIG8saCxkLHc7Zm9yKGg9aktlKGVidChtdnQoS2huKG4pKSxyKSxyMW4odCxuLHMpKSx3PVJnKHQsbikuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTEpLGVbZC5wXSYmKG89ZVtkLnBdLmksdWUoaC5kLG5ldyBEbnQobyxKeXQoaCxvKSkpKTtwM3QoaCl9ZnVuY3Rpb24geTR0KHQsZSl7dGhpcy5mPW5ldyBDcix0aGlzLmI9bmV3IENyLHRoaXMuaj1uZXcgQ3IsdGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5jPjAmJk1zZSh0aGlzLHRoaXMuYy0xLChiZSgpLEhuKSksdGhpcy5jPHRoaXMuYS5sZW5ndGgtMSYmTXNlKHRoaXMsdGhpcy5jKzEsKGJlKCksQm4pKX1mdW5jdGlvbiB4NHQodCl7dC5sZW5ndGg+MCYmdFswXS5sZW5ndGg+MCYmKHRoaXMuYz1qZShSZShRKEZhKHRbMF1bMF0pLChzZSgpLFpUdCkpKSkpLHRoaXMuYT1QdChvbWUsdGUsMjAxOCx0Lmxlbmd0aCwwLDIpLHRoaXMuYj1QdChjbWUsdGUsMjAxOSx0Lmxlbmd0aCwwLDIpLHRoaXMuZD1uZXcgU3JlfWZ1bmN0aW9uIEVkbih0KXtyZXR1cm4gdC5jLmxlbmd0aD09MD8hMTooQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxNykpLmMuaS5rPT0oR24oKSxacyk/ITA6QTgocHUobmV3IFRuKG51bGwsbmV3IF9uKHQsMTYpKSxuZXcgY1EpLG5ldyB1USl9ZnVuY3Rpb24gVGRuKHQsZSxuKXtyZXR1cm4gd3IobiwiVHJlZSBsYXlvdXQiLDEpLHckKHQuYiksVWQodC5iLCh1RSgpLHZWKSx2ViksVWQodC5iLFBTLFBTKSxVZCh0LmIsUE8sUE8pLFVkKHQuYixGUyxGUyksdC5hPVRxKHQuYixlKSxKMm4odCxlLFJjKG4sMSkpLG9yKG4pLGV9ZnVuY3Rpb24gYWFlKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKGQ9Z3koZSksbz1lLmYsdz1lLmcsaD1iLk1hdGguc3FydChvKm8rdyp3KSxzPTAscj1uZXcgUyhkKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwzMykscys9YWFlKHQsbik7cmV0dXJuIGIuTWF0aC5tYXgocyxoKX1mdW5jdGlvbiBvYSgpe29hPVoseWI9bmV3IGlDKE9fLDApLEgxPW5ldyBpQygiRlJFRSIsMSksTDc9bmV3IGlDKCJGSVhFRF9TSURFIiwyKSxHMj1uZXcgaUMoIkZJWEVEX09SREVSIiwzKSxoMD1uZXcgaUMoIkZJWEVEX1JBVElPIiw0KSxWYz1uZXcgaUMoIkZJWEVEX1BPUyIsNSl9ZnVuY3Rpb24gQ2RuKHQsZSl7dmFyIG4scixzO2lmKG49ZS5IaCh0LmEpLG4pe2ZvcihzPUJyKFlmKCghbi5iJiYobi5iPW5ldyB5bCgoZG4oKSxRYSksY2MsbikpLG4uYiksRmgpKSxyPTE7cjwoUnUoKSxkTHQpLmxlbmd0aDsrK3IpaWYoaG4oZEx0W3JdLHMpKXJldHVybiByfXJldHVybiAwfWZ1bmN0aW9uIF9kbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIFR1O2ZvcihvPW5ldyBjMihLYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sUDAobywiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFNkbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIFR1O2ZvcihvPW5ldyBjMihLYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sUDAobywiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIG9hZSh0KXt2YXIgZSxuLHI7Zm9yKHI9bmV3IGMyKEthLCJ7IiwifSIpLG49dC52YygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDQyKSxQMChyLE5adCh0LGUuY2QoKSkrIj0iK05adCh0LGUuZGQoKSkpO3JldHVybiByLmE/ci5lLmxlbmd0aD09MD9yLmEuYTpyLmEuYSsoIiIrci5lKTpyLmN9ZnVuY3Rpb24gQWRuKHQpe2Zvcih2YXIgZSxuLHIsczshTjkodC5vKTspbj11KEZ4KHQubyksNDYpLHI9dShuLmEsMTIxKSxlPXUobi5iLDIxMykscz1feihlLHIpLGUuZT09cj8ocGoocy5nLGUpLHIuZT1zLmUrZS5hKToocGoocy5iLGUpLHIuZT1zLmUtZS5hKSx1ZSh0LmUuYSxyKX1mdW5jdGlvbiBrNHQodCxlKXt2YXIgbixyLHM7Zm9yKG49bnVsbCxzPXUoZS5LYih0KSwyMCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMTcpLCFuKW49ci5jLmk9PXQ/ci5kLmk6ci5jLmk7ZWxzZSBpZigoci5jLmk9PXQ/ci5kLmk6ci5jLmkpIT1uKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNhZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49QWNlKHQsITEsZSkscz1uZXcgUyhuKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjkpLHIuZD09MD8odnJ0KHIsbnVsbCksd3J0KHIsbnVsbCkpOihvPXIuYSxoPXIuYix2cnQocixoKSx3cnQocixvKSl9ZnVuY3Rpb24gTGRuKHQpe3ZhciBlLG47cmV0dXJuIGU9bmV3IEhzLFJsKGUscW1lKSxuPXUoUSh0LChzZSgpLEdjKSksMjEpLG4uSGMoKG9vKCksd1MpKSYmUmwoZSxVbWUpLG4uSGMobDcpJiZSbChlLEhtZSksbi5IYyhWNCkmJlJsKGUsVm1lKSxuLkhjKGg3KSYmUmwoZSxHbWUpLGV9ZnVuY3Rpb24gTWRuKHQpe3ZhciBlLG4scixzO2ZvcihaeW4odCksbj1uZXcgYXIobHIoejAodCkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSwxNykscj1lLmMuaT09dCxzPXI/ZS5kOmUuYyxyP3NhKGUsbnVsbCk6RGEoZSxudWxsKSxKdChlLChzZSgpLG45dCkscyksanBuKHQscy5pKX1mdW5jdGlvbiBJZG4odCxlLG4scil7dmFyIHMsbztzd2l0Y2gobz1lLmkscz1uW28uZ11bdC5kW28uZ11dLG8uZyl7Y2FzZSAxOnMtPXIrZS5qLmIsZS5nLmI9czticmVhaztjYXNlIDM6cys9cixlLmcuYj1zO2JyZWFrO2Nhc2UgNDpzLT1yK2Uuai5hLGUuZy5hPXM7YnJlYWs7Y2FzZSAyOnMrPXIsZS5nLmE9c319ZnVuY3Rpb24gRGRuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksMzMpLHI9ZkQoZSksIXpyKG5ldyBhcihscihyLmEuS2MoKSxuZXcgeikpKSlyZXR1cm4gZTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBPZG4oKXt2YXIgdDtyZXR1cm4gRjRlP3Uod0UoKE1wKCksVWgpLEdFKSwyMDE2KToodD11KEV0KEZjKChNcCgpLFVoKSxHRSksNTU1KT9GYyhVaCxHRSk6bmV3IFFvZSw1NTUpLEY0ZT0hMCxCM24odCksVjVuKHQpLG1zdCh0KSx4byhVaCxHRSx0KSx0KX1mdW5jdGlvbiBTc3QodCxlLG4pe3ZhciByLHM7aWYodC5qPT0wKXJldHVybiBuO2lmKHM9dShJZWUodCxlLG4pLDcyKSxyPW4uYWsoKSwhci5JaigpfHwhdC5hLnJsKHIpKXRocm93IHJ0KG5ldyBHbygiSW52YWxpZCBlbnRyeSBmZWF0dXJlICciK3IuSGooKS56YisiLiIrci5uZSgpKyInIikpO3JldHVybiBzfWZ1bmN0aW9uIE5kbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKGQ9dC5hLHc9MCxrPWQubGVuZ3RoO3c8azsrK3cpZm9yKGg9ZFt3XSxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcylpZihuPXJbc10sR3QoZSk9PT1HdChuKXx8ZSE9bnVsbCYmeWkoZSxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQZG4odCl7dmFyIGUsbixyO3JldHVybiB5Yyh0LDApPj0wPyhuPWVEKHQsTnEpLHI9VUkodCxOcSkpOihlPXptKHQsMSksbj1lRChlLDVlOCkscj1VSShlLDVlOCkscj1PYShNMChyLDEpLFBzKHQsMSkpKSxDMShNMChyLDMyKSxQcyhuLGNvKSl9ZnVuY3Rpb24gdWFlKHQsZSxuKXt2YXIgcixzO3N3aXRjaChyPShRbihlLmIhPTApLHUoY2goZSxlLmEuYSksOCkpLG4uZyl7Y2FzZSAwOnIuYj0wO2JyZWFrO2Nhc2UgMjpyLmI9dC5mO2JyZWFrO2Nhc2UgMzpyLmE9MDticmVhaztkZWZhdWx0OnIuYT10Lmd9cmV0dXJuIHM9ZWkoZSwwKSxYTShzLHIpLGV9ZnVuY3Rpb24gbGFlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7c3dpdGNoKHc9dC5iLG89ZS5kLGg9by5qLGQ9TTN0KGgsdy5kW2guZ10sbikscz1MaShuYyhvLm4pLG8uYSksby5qLmcpe2Nhc2UgMTpjYXNlIDM6ZC5hKz1zLmE7YnJlYWs7Y2FzZSAyOmNhc2UgNDpkLmIrPXMuYn1ocyhyLGQsci5jLmIsci5jKX1mdW5jdGlvbiBGZG4odCxlLG4pe3ZhciByLHMsbyxoO2ZvcihoPVJvKHQuZSxlLDApLG89bmV3IE5wdCxvLmI9bixyPW5ldyBoYSh0LmUsaCk7ci5iPHIuZC5nYygpOylzPShRbihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMTApKSxzLnA9bix1ZShvLmUscyksRWwocik7cmV0dXJuIG99ZnVuY3Rpb24gQmRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7Zm9yKHM9bnVsbCxvPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwzMyksdz1oLmkraC5nLHQ8aC5qK2guZityJiYocz9uLmktdzxuLmktbyYmKHM9aCk6cz1oLG89cy5pK3MuZyk7cmV0dXJuIHM/bytyOjB9ZnVuY3Rpb24gUmRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7Zm9yKG89bnVsbCxzPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwzMyksdz1oLmoraC5mLHQ8aC5pK2guZytyJiYobz9uLmotdzxuLmotcyYmKG89aCk6bz1oLHM9by5qK28uZik7cmV0dXJuIG8/cytyOjB9ZnVuY3Rpb24gamRuKHQpe3ZhciBlLG4scjtmb3IoZT0hMSxyPXQuYi5jLmxlbmd0aCxuPTA7bjxyO24rKylMeXQodShGZSh0LmIsbiksNDM0KSk/IWUmJm4rMTxyJiZMeXQodShGZSh0LmIsbisxKSw0MzQpKSYmKGU9ITAsdShGZSh0LmIsbiksNDM0KS5hPSEwKTplPSExfWZ1bmN0aW9uICRkbih0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKG89MCxoPTA7aDxzO2grKylvPU9hKG8sWXAoUHMoZVtoXSxjbyksUHMocltoXSxjbykpKSx0W2hdPVNyKG8pLG89RnAobywzMik7Zm9yKDtoPG47aCsrKW89T2EobyxQcyhlW2hdLGNvKSksdFtoXT1TcihvKSxvPUZwKG8sMzIpfWZ1bmN0aW9uIHpkbih0LGUpe2JFKCk7dmFyIG4scjtmb3Iocj0oSnAoKSxHSCksbj10O2U+MTtlPj49MSllJjEmJihyPUozKHIsbikpLG4uZD09MT9uPUozKG4sbik6bj1uZXcgTmllKEh1ZShuLmEsbi5kLFB0KFRyLFhyLDI1LG4uZDw8MSwxNSwxKSkpO3JldHVybiByPUozKHIsbikscn1mdW5jdGlvbiBFNHQoKXtFNHQ9Wjt2YXIgdCxlLG4scjtmb3IoVEV0PVB0KGlhLHZvLDI1LDI1LDE1LDEpLENFdD1QdChpYSx2bywyNSwzMywxNSwxKSxyPTE1MjU4Nzg5MDYyNWUtMTYsZT0zMjtlPj0wO2UtLSlDRXRbZV09cixyKj0uNTtmb3Iobj0xLHQ9MjQ7dD49MDt0LS0pVEV0W3RdPW4sbio9LjV9ZnVuY3Rpb24gcWRuKHQpe3ZhciBlLG47aWYoamUoUmUocWUodCwoVGUoKSwkeSkpKSkpe2ZvcihuPW5ldyBhcihscihHMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KExyKG4pLDc5KSx1dyhlKSYmamUoUmUocWUoZSxQMikpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBoYWUodCxlKXt2YXIgbixyLHM7TnModC5mLGUpJiYoZS5iPXQscj1lLmMsUm8odC5qLHIsMCkhPS0xfHx1ZSh0Lmoscikscz1lLmQsUm8odC5qLHMsMCkhPS0xfHx1ZSh0Lmoscyksbj1lLmEuYixuLmMubGVuZ3RoIT0wJiYoIXQuaSYmKHQuaT1uZXcgSGllKHQpKSxpY24odC5pLG4pKSl9ZnVuY3Rpb24gSGRuKHQpe3ZhciBlLG4scixzLG87cmV0dXJuIG49dC5jLmQscj1uLmoscz10LmQuZCxvPXMuaixyPT1vP24ucDxzLnA/MDoxOmt6KHIpPT1vPzA6dDN0KHIpPT1vPzE6KGU9dC5iLE51KGUuYixreihyKSk/MDoxKX1mdW5jdGlvbiBaeigpe1p6PVosYWh0PW5ldyBKOShDMWUsMCksRUN0PW5ldyBKOSgiTE9OR0VTVF9QQVRIIiwxKSxzaHQ9bmV3IEo5KCJDT0ZGTUFOX0dSQUhBTSIsMiksa0N0PW5ldyBKOShqb3QsMyksVEN0PW5ldyBKOSgiU1RSRVRDSF9XSURUSCIsNCksY1Y9bmV3IEo5KCJNSU5fV0lEVEgiLDUpfWZ1bmN0aW9uIHcyKHQpe3ZhciBlO3RoaXMuZD1uZXcgQ3IsdGhpcy5jPXQuYyx0aGlzLmU9dC5kLHRoaXMuYj10LmIsdGhpcy5mPW5ldyBvWXQodC5lKSx0aGlzLmE9dC5hLHQuZj90aGlzLmc9dC5mOnRoaXMuZz0oZT11KEhmKGVVKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKX1mdW5jdGlvbiBKeih0LGUpe3ZhciBuLHIscyxvLGgsZDtzPXQsaD1QQyhzLCJsYXlvdXRPcHRpb25zIiksIWgmJihoPVBDKHMsRWRlKSksaCYmKGQ9aCxyPW51bGwsZCYmKHI9KG89dWl0KGQsUHQoQWUsdGUsMiwwLDYsMSkpLG5ldyBmZXQoZCxvKSkpLHImJihuPW5ldyBrVnQoZCxlKSx2YShyLG4pKSl9ZnVuY3Rpb24gTW8odCl7aWYoRXQodCwyMzkpKXJldHVybiB1KHQsMzMpO2lmKEV0KHQsMTg2KSlyZXR1cm4gazEodSh0LDExOCkpO3Rocm93IHJ0KHQ/bmV3IHlnKCJPbmx5IHN1cHBvcnQgbm9kZXMgYW5kIHBvcnRzLiIpOm5ldyB5eChEZGUpKX1mdW5jdGlvbiBHZG4odCxlLG4scil7cmV0dXJuKGU+PTAmJmhuKHQuc3Vic3RyKGUsMyksIkdNVCIpfHxlPj0wJiZobih0LnN1YnN0cihlLDMpLCJVVEMiKSkmJihuWzBdPWUrMyksWDV0KHQsbixyKX1mdW5jdGlvbiBWZG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPXQuZy5hLGg9dC5nLmIscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxzPW4ubixzLmE9byx0Lmk9PShiZSgpLE5uKT9zLmI9aCt0LmouYi1uLm8uYjpzLmI9aCxMaShzLGUpLG8rPW4uby5hK3QuZX1mdW5jdGlvbiB3cih0LGUsbil7aWYodC5iKXRocm93IHJ0KG5ldyBGbygiVGhlIHRhc2sgaXMgYWxyZWFkeSBkb25lLiIpKTtyZXR1cm4gdC5wIT1udWxsPyExOih0LnA9ZSx0LnI9bix0LmsmJih0Lm89KHFkKCksQ2Eoa3UoRGF0ZS5ub3coKSksJGcpKSksITApfWZ1bmN0aW9uIFQ0dCh0KXt2YXIgZSxuLHIscyxvLGgsZDtyZXR1cm4gZD1uZXcgbXgsbj10LnRnKCkscz1uIT1udWxsLHMmJnA4KGQsQ2QsdC50ZygpKSxyPXQubmUoKSxvPXIhPW51bGwsbyYmcDgoZCxvaSx0Lm5lKCkpLGU9dC5zZygpLGg9ZSE9bnVsbCxoJiZwOChkLCJkZXNjcmlwdGlvbiIsdC5zZygpKSxkfWZ1bmN0aW9uIGZhZSh0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPXQucSx0LnE9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHM9bmV3IFFzKHQsMSw5LG8sZSksbj9uLkVpKHMpOm49cyksZT8ocj1lLmMsciE9dC5yJiYobj10Lm5rKHIsbikpKTp0LnImJihuPXQubmsobnVsbCxuKSksbn1mdW5jdGlvbiBVZG4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG49KGQ9ZSxlNihkLHQuZSwtMS10LmMsbikpLGg9eHd0KHQuYSksbz0ocj1uZXcgaDIobmV3IHdnKGguYSkuYSksbmV3IHVSKHIpKTtvLmEuYjspcz11KFl2KG8uYSkuY2QoKSw4Nyksbj1fRShzLG9xKHMsdC5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBXZG4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG49KGQ9ZSxjJChkLHQuZSwtMS10LmMsbikpLGg9eHd0KHQuYSksbz0ocj1uZXcgaDIobmV3IHdnKGguYSkuYSksbmV3IHVSKHIpKTtvLmEuYjspcz11KFl2KG8uYSkuY2QoKSw4Nyksbj1fRShzLG9xKHMsdC5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBLZG4odCxlLG4scil7dmFyIHMsbyxoO2lmKHI9PTApSWMoZSwwLHQsbix0Lmxlbmd0aC1uKTtlbHNlIGZvcihoPTMyLXIsdFt0Lmxlbmd0aC0xXT0wLG89dC5sZW5ndGgtMTtvPm47by0tKXRbb118PWVbby1uLTFdPj4+aCx0W28tMV09ZVtvLW4tMV08PHI7Zm9yKHM9MDtzPG47cysrKXRbc109MH1mdW5jdGlvbiBZZG4odCl7dmFyIGUsbixyLHMsbztmb3IoZT0wLG49MCxvPXQuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTExKSxlPWIuTWF0aC5tYXgoZSxyLmQuYiksbj1iLk1hdGgubWF4KG4sci5kLmMpO2ZvcihzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmQuYj1lLHIuZC5jPW59ZnVuY3Rpb24gWGRuKHQpe3ZhciBlLG4scixzLG87Zm9yKG49MCxlPTAsbz10LktjKCk7by5PYigpOylyPXUoby5QYigpLDExMSksbj1iLk1hdGgubWF4KG4sci5kLmQpLGU9Yi5NYXRoLm1heChlLHIuZC5hKTtmb3Iocz10LktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksci5kLmQ9bixyLmQuYT1lfWZ1bmN0aW9uIGRhZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBsZSxzPTAscj1lLktjKCk7ci5PYigpOyl7Zm9yKG49ZGUodShyLlBiKCksMTkpLmErcyk7bi5hPHQuZiYmISR0bih0LG4uYSk7KW49ZGUobi5hKzEpLCsrcztpZihuLmE+PXQuZilicmVhaztvLmNbby5jLmxlbmd0aF09bn1yZXR1cm4gb31mdW5jdGlvbiBDNHQodCl7dmFyIGUsbixyLHM7Zm9yKGU9bnVsbCxzPW5ldyBTKHQud2YoKSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTgxKSxuPW5ldyBpaChyLnFmKCkuYSxyLnFmKCkuYixyLnJmKCkuYSxyLnJmKCkuYiksZT9oXyhlLG4pOmU9bjtyZXR1cm4hZSYmKGU9bmV3IEF4KSxlfWZ1bmN0aW9uIEFzdCh0LGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0xPyghdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLFFjKHQubixlLHIpKToobz11KHluKChzPXUoSW4odCwxNiksMjYpLHN8fHQuemgoKSksbiksNjYpLG8uTmooKS5Raih0LGl1KHQpLG4tWm4odC56aCgpKSxlLHIpKX1mdW5jdGlvbiBMc3QodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKHI9bi5nYygpLHQucWkodC5pK3IpLGQ9dC5pLWUsZD4wJiZJYyh0LmcsZSx0LmcsZStyLGQpLGg9bi5LYygpLHQuaSs9cixzPTA7czxyOysrcylvPWguUGIoKSxmQyh0LGUsdC5vaShlLG8pKSx0LmJpKGUsbyksdC5jaSgpLCsrZTtyZXR1cm4gciE9MH1mdW5jdGlvbiBPMSh0LGUsbil7dmFyIHI7cmV0dXJuIGUhPXQucT8odC5xJiYobj1jJCh0LnEsdCwtMTAsbikpLGUmJihuPWU2KGUsdCwtMTAsbikpLG49ZmFlKHQsZSxuKSk6dC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBRcyh0LDEsOSxlLGUpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gTXN0KHQsZSxuLHIpe3JldHVybiBndnQoKG4mYmQpPT0wLCJmbGF0TWFwIGRvZXMgbm90IHN1cHBvcnQgU1VCU0laRUQgY2hhcmFjdGVyaXN0aWMiKSxndnQoKG4mNCk9PTAsImZsYXRNYXAgZG9lcyBub3Qgc3VwcG9ydCBTT1JURUQgY2hhcmFjdGVyaXN0aWMiKSxBcih0KSxBcihlKSxuZXcgd1p0KHQsbixyLGUpfWZ1bmN0aW9uIFFkbih0LGUpe3V3dChlLCJDYW5ub3Qgc3VwcHJlc3MgYSBudWxsIGV4Y2VwdGlvbi4iKSxfaihlIT10LCJFeGNlcHRpb24gY2FuIG5vdCBzdXBwcmVzcyBpdHNlbGYuIiksIXQuaSYmKHQuaz09bnVsbD90Lms9Y3Qob3QoeXV0LDEpLHRlLDc4LDAsW2VdKTp0LmtbdC5rLmxlbmd0aF09ZSl9ZnVuY3Rpb24gcDQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihoPW4ubGVuZ3RoLG89MCxzPS0xLGs9b2VlKHQuc3Vic3RyKGUpLCh2bnQoKSxrRXQpKSxkPTA7ZDxoOysrZCl3PW5bZF0ubGVuZ3RoLHc+byYmb2VuKGssb2VlKG5bZF0sa0V0KSkmJihzPWQsbz13KTtyZXR1cm4gcz49MCYmKHJbMF09ZStvKSxzfWZ1bmN0aW9uIFpkbih0LGUpe3ZhciBuO2lmKG49aVV0KHQuYi5IZigpLGUuYi5IZigpKSxuIT0wKXJldHVybiBuO3N3aXRjaCh0LmIuSGYoKS5nKXtjYXNlIDE6Y2FzZSAyOnJldHVybiBkdSh0LmIuc2YoKSxlLmIuc2YoKSk7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gZHUoZS5iLnNmKCksdC5iLnNmKCkpfXJldHVybiAwfWZ1bmN0aW9uIEpkbih0KXt2YXIgZSxuLHI7Zm9yKHI9dC5lLmMubGVuZ3RoLHQuYT1YYihUcixbdGUsWHJdLFs0OCwyNV0sMTUsW3Iscl0sMiksbj1uZXcgUyh0LmMpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI4MiksdC5hW2UuYy5iXVtlLmQuYl0rPXUoUShlLChaZigpLHQ3KSksMTkpLmF9ZnVuY3Rpb24gdDBuKHQsZSxuKXt3cihuLCJHcm93IFRyZWUiLDEpLHQuYj1lLmYsamUoUmUoUShlLChHOCgpLHVTKSkpKT8odC5jPW5ldyBncCxNUXQodCxudWxsKSk6dC5jPW5ldyBncCx0LmE9ITEsT2NlKHQsZS5mKSxKdChlLG43dCwoRm4oKSwhIXQuYSkpLG9yKG4pfWZ1bmN0aW9uIGUwbih0LGUpe3ZhciBuLHIscyxvLGg7aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3IoaD1QdChtaCx2ZCwyNSwyKmUsMTUsMSkscj0wLHM9MDtyPGU7KytyKW49dFtyXT4+NCYxNSxvPXRbcl0mMTUsaFtzKytdPXpBdFtuXSxoW3MrK109ekF0W29dO3JldHVybiBBaChoLDAsaC5sZW5ndGgpfWZ1bmN0aW9uIG4wbih0LGUsbil7dmFyIHIscyxvO3JldHVybiByPWUuYWsoKSxvPWUuZGQoKSxzPXIuJGooKT96cCh0LDQscixvLG51bGwsRUUodCxyLG8sRXQociw5OSkmJih1KHIsMTgpLkJiJllhKSE9MCksITApOnpwKHQsci5LaigpPzI6MSxyLG8sci56aigpLC0xLCEwKSxuP24uRWkocyk6bj1zLG59ZnVuY3Rpb24gRXUodCl7dmFyIGUsbjtyZXR1cm4gdD49WWE/KGU9T0QrKHQtWWE+PjEwJjEwMjMpJm1zLG49NTYzMjArKHQtWWEmMTAyMykmbXMsU3RyaW5nLmZyb21DaGFyQ29kZShlKSsoIiIrU3RyaW5nLmZyb21DaGFyQ29kZShuKSkpOlN0cmluZy5mcm9tQ2hhckNvZGUodCZtcyl9ZnVuY3Rpb24gcjBuKHQsZSl7Qm0oKTt2YXIgbixyLHMsbztyZXR1cm4gcz11KHUoQWkodC5yLGUpLDIxKSw4NCkscy5nYygpPj0yPyhyPXUocy5LYygpLlBiKCksMTExKSxuPXQudS5IYygoUXUoKSxKUykpLG89dC51LkhjKEc2KSwhci5hJiYhbiYmKHMuZ2MoKT09Mnx8bykpOiExfWZ1bmN0aW9uIGdhZSh0LGUsbixyLHMpe3ZhciBvLGgsZDtmb3Iobz1RY2UodCxlLG4scixzKSxkPSExOyFvOylzcSh0LHMsITApLGQ9ITAsbz1RY2UodCxlLG4scixzKTtkJiZzcSh0LHMsITEpLGg9Z2l0KHMpLGguYy5sZW5ndGghPTAmJih0LmQmJnQuZC5sZyhoKSxnYWUodCxzLG4scixoKSl9ZnVuY3Rpb24gdHEoKXt0cT1aLGJmdD1uZXcgckMoSzAsMCkscEF0PW5ldyByQygiRElSRUNURUQiLDEpLHZBdD1uZXcgckMoIlVORElSRUNURUQiLDIpLGRBdD1uZXcgckMoIkFTU09DSUFUSU9OIiwzKSxiQXQ9bmV3IHJDKCJHRU5FUkFMSVpBVElPTiIsNCksZ0F0PW5ldyByQygiREVQRU5ERU5DWSIsNSl9ZnVuY3Rpb24gaTBuKHQsZSl7dmFyIG47aWYoIWsxKHQpKXRocm93IHJ0KG5ldyBGbyh1ZGUpKTtzd2l0Y2gobj1rMSh0KSxlLmcpe2Nhc2UgMTpyZXR1cm4tKHQuait0LmYpO2Nhc2UgMjpyZXR1cm4gdC5pLW4uZztjYXNlIDM6cmV0dXJuIHQuai1uLmY7Y2FzZSA0OnJldHVybi0odC5pK3QuZyl9cmV0dXJuIDB9ZnVuY3Rpb24gZEUodCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPXQuYi5jLmxlbmd0aCx1ZSh0LmIsZSk7cj4wOyl7aWYobj1yLHI9KHItMSkvMnwwLHQuYS51ZShGZSh0LmIsciksZSk8PTApcmV0dXJuIGFoKHQuYixuLGUpLCEwO2FoKHQuYixuLEZlKHQuYixyKSl9cmV0dXJuIGFoKHQuYixyLGUpLCEwfWZ1bmN0aW9uIF80dCh0LGUsbixyKXt2YXIgcyxvO2lmKHM9MCxuKXM9d3oodC5hW24uZ11bZS5nXSxyKTtlbHNlIGZvcihvPTA7bzxRSDtvKyspcz1iLk1hdGgubWF4KHMsd3oodC5hW29dW2UuZ10scikpO3JldHVybiBlPT0oS2YoKSx0dSkmJnQuYiYmKHM9Yi5NYXRoLm1heChzLHQuYi5hKSksc31mdW5jdGlvbiBzMG4odCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIHM9dC5pLG89ZS5pLCFzfHwhb3x8cy5pIT1vLml8fHMuaT09KGJlKCksSG4pfHxzLmk9PShiZSgpLEJuKT8hMTooaD1zLmcuYSxuPWgrcy5qLmEsZD1vLmcuYSxyPWQrby5qLmEsaDw9ciYmbj49ZCl9ZnVuY3Rpb24gUzR0KHQsZSxuLHIpe3ZhciBzO2lmKHM9ITEsZWEocikmJihzPSEwLHA4KGUsbixCcihyKSkpLHN8fE9tKHIpJiYocz0hMCxTNHQodCxlLG4scikpLHN8fEV0KHIsMjM2KSYmKHM9ITAsSmIoZSxuLHUociwyMzYpKSksIXMpdGhyb3cgcnQobmV3IHRldCh4OHQpKX1mdW5jdGlvbiBhMG4odCxlKXt2YXIgbixyLHM7aWYobj1lLkhoKHQuYSksbiYmKHM9WWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSxOaCkscyE9bnVsbCkpe2ZvcihyPTE7cjwoUnUoKSxoTHQpLmxlbmd0aDsrK3IpaWYoaG4oaEx0W3JdLHMpKXJldHVybiByfXJldHVybiAwfWZ1bmN0aW9uIG8wbih0LGUpe3ZhciBuLHIscztpZihuPWUuSGgodC5hKSxuJiYocz1ZZigoIW4uYiYmKG4uYj1uZXcgeWwoKGRuKCksUWEpLGNjLG4pKSxuLmIpLE5oKSxzIT1udWxsKSl7Zm9yKHI9MTtyPChSdSgpLGZMdCkubGVuZ3RoOysrcilpZihobihmTHRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gcGFlKHQsZSl7dmFyIG4scixzLG87aWYoT24oZSksbz10LmEuZ2MoKSxvPGUuZ2MoKSlmb3Iobj10LmEuZWMoKS5LYygpO24uT2IoKTspcj1uLlBiKCksZS5IYyhyKSYmbi5RYigpO2Vsc2UgZm9yKHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5hLkJjKHIpIT1udWxsO3JldHVybiBvIT10LmEuZ2MoKX1mdW5jdGlvbiBiYWUodCl7dmFyIGUsbjtzd2l0Y2gobj1uYyhLbyhjdChvdChVcywxKSx0ZSw4LDAsW3QuaS5uLHQubix0LmFdKSkpLGU9dC5pLmQsdC5qLmcpe2Nhc2UgMTpuLmItPWUuZDticmVhaztjYXNlIDI6bi5hKz1lLmM7YnJlYWs7Y2FzZSAzOm4uYis9ZS5hO2JyZWFrO2Nhc2UgNDpuLmEtPWUuYn1yZXR1cm4gbn1mdW5jdGlvbiBjMG4odCl7dmFyIGU7Zm9yKGU9KFh4KCksdShMcihuZXcgYXIobHIoam8odCkuYS5LYygpLG5ldyB6KSkpLDE3KS5jLmkpO2Uuaz09KEduKCksWnMpOylKdChlLChzZSgpLEVPKSwoRm4oKSwhMCkpLGU9dShMcihuZXcgYXIobHIoam8oZSkuYS5LYygpLG5ldyB6KSkpLDE3KS5jLml9ZnVuY3Rpb24gSXN0KHQsZSxuLHIpe3ZhciBzLG8saCxkO2ZvcihkPVFDKGUsciksaD1kLktjKCk7aC5PYigpOylzPXUoaC5QYigpLDExKSx0LmRbcy5wXT10LmRbcy5wXSt0LmNbbi5wXTtmb3IoZD1RQyhuLHIpLG89ZC5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxMSksdC5kW3MucF09dC5kW3MucF0tdC5jW2UucF19ZnVuY3Rpb24gQTR0KHQsZSxuKXt2YXIgcixzO2ZvcihzPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksbTEocixyLmkrZSxyLmorbik7dmEoKCF0LmImJih0LmI9bmV3IGhlKFdzLHQsMTIsMykpLHQuYiksbmV3IGhWdChlLG4pKX1mdW5jdGlvbiB1MG4odCxlLG4scil7dmFyIHMsbztmb3Iobz1lLHM9by5kPT1udWxsfHx0LmEudWUobi5kLG8uZCk+MD8xOjA7by5hW3NdIT1uOylvPW8uYVtzXSxzPXQuYS51ZShuLmQsby5kKT4wPzE6MDtvLmFbc109cixyLmI9bi5iLHIuYVswXT1uLmFbMF0sci5hWzFdPW4uYVsxXSxuLmFbMF09bnVsbCxuLmFbMV09bnVsbH1mdW5jdGlvbiBsMG4odCl7UXUoKTt2YXIgZSxuO3JldHVybiBlPWppKHRnLGN0KG90KEdWLDEpLGFlLDI3MywwLFt4Yl0pKSwhKEFJKGgkKGUsdCkpPjF8fChuPWppKEpTLGN0KG90KEdWLDEpLGFlLDI3MywwLFtaUyxHNl0pKSxBSShoJChuLHQpKT4xKSl9ZnVuY3Rpb24gTDR0KHQsZSl7dmFyIG47bj1GYygoTXAoKSxVaCksdCksRXQobiw0OTgpP3hvKFVoLHQsbmV3IE5WdCh0aGlzLGUpKTp4byhVaCx0LHRoaXMpLERzdCh0aGlzLGUpLGU9PSh0OCgpLEpBdCk/KHRoaXMud2I9dSh0aGlzLDE5MzkpLHUoZSwxOTQxKSk6dGhpcy53Yj0oanAoKSxMbil9ZnVuY3Rpb24gaDBuKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihlPW51bGwsbj0wO248ckEubGVuZ3RoOysrbil0cnl7cmV0dXJuIFRHdChyQVtuXSx0KX1jYXRjaChzKXtpZihzPVdpKHMpLEV0KHMsMzIpKXI9cyxlPXI7ZWxzZSB0aHJvdyBydChzKX10aHJvdyBydChuZXcgRiQoZSkpfWZ1bmN0aW9uIHZhZSgpe3ZhZT1aLFNnZT1jdChvdChBZSwxKSx0ZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSksQWdlPWN0KG90KEFlLDEpLHRlLDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsbDYsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKX1mdW5jdGlvbiB3YWUodCl7dmFyIGUsbixyO2U9aG4odHlwZW9mIGUscG90KT9udWxsOm5ldyBxYSxlJiYoczgoKSxuPShyPTkwMCxyPj0kZz8iZXJyb3IiOnI+PTkwMD8id2FybiI6cj49ODAwPyJpbmZvIjoibG9nIiksZVh0KG4sdC5hKSx0LmImJkw1dChlLG4sdC5iLCJFeGNlcHRpb246ICIsITApKX1mdW5jdGlvbiBRKHQsZSl7dmFyIG4scjtyZXR1cm4gcj0oIXQucSYmKHQucT1uZXcgQ3IpLEpuKHQucSxlKSkscj8/KG49ZS53ZygpLEV0KG4sNCkmJihuPT1udWxsPyghdC5xJiYodC5xPW5ldyBDciksVXgodC5xLGUpKTooIXQucSYmKHQucT1uZXcgQ3IpLGtpKHQucSxlLG4pKSksbil9ZnVuY3Rpb24gV2EoKXtXYT1aLEFkPW5ldyB4TSgiUDFfQ1lDTEVfQlJFQUtJTkciLDApLGxiPW5ldyB4TSgiUDJfTEFZRVJJTkciLDEpLG91PW5ldyB4TSgiUDNfTk9ERV9PUkRFUklORyIsMikscWM9bmV3IHhNKCJQNF9OT0RFX1BMQUNFTUVOVCIsMyksSW89bmV3IHhNKCJQNV9FREdFX1JPVVRJTkciLDQpfWZ1bmN0aW9uIG1hZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHM9ZT09MT9RdXQ6WHV0LHI9cy5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPXUoci5QYigpLDEwMyksaD11KEFpKHQuZi5jLG4pLDIxKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0NiksdnUodC5iLmIsby5iKSx2dSh0LmIuYSx1KG8uYiw4MSkuZCl9ZnVuY3Rpb24gZjBuKHQsZSl7JEMoKTt2YXIgbjtpZih0LmM9PWUuYyl7aWYodC5iPT1lLmJ8fEJvbih0LmIsZS5iKSl7aWYobj1VWWUodC5iKT8xOi0xLHQuYSYmIWUuYSlyZXR1cm4gbjtpZighdC5hJiZlLmEpcmV0dXJuLW59cmV0dXJuIGR1KHQuYi5nLGUuYi5nKX1lbHNlIHJldHVybiBMcyh0LmMsZS5jKX1mdW5jdGlvbiBkMG4odCxlKXt2YXIgbjt3cihlLCJIaWVyYXJjaGljYWwgcG9ydCBwb3NpdGlvbiBwcm9jZXNzaW5nIiwxKSxuPXQuYixuLmMubGVuZ3RoPjAmJlJ1ZSgoQW4oMCxuLmMubGVuZ3RoKSx1KG4uY1swXSwyOSkpLHQpLG4uYy5sZW5ndGg+MSYmUnVlKHUoRmUobixuLmMubGVuZ3RoLTEpLDI5KSx0KSxvcihlKX1mdW5jdGlvbiB5YWUodCxlKXt2YXIgbixyLHM7aWYoSTR0KHQsZSkpcmV0dXJuITA7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KEoociksMzMpLHM9dGFlKG4pLGRxKHQsbixzKXx8QXJlKHQsbiktdC5nPD10LmEpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gckQoKXtyRD1aLERWPShuYXQoKSxsU3QpLFlodD1FM2UsS2h0PWszZSxyU3Q9bTNlLFdodD14M2UsblN0PW5ldyBNdig4KSxmM2U9bmV3IGVvKChjaSgpLHEyKSxuU3QpLGQzZT1uZXcgZW8oSDIsOCksZzNlPWNTdCx0U3Q9cDNlLGVTdD1iM2UsaDNlPW5ldyBlbyhVTywoRm4oKSwhMSkpfWZ1bmN0aW9uIGVxKCl7ZXE9WixTU3Q9bmV3IE12KDE1KSwkM2U9bmV3IGVvKChjaSgpLHEyKSxTU3QpLHozZT1uZXcgZW8oSDIsMTUpLEFTdD1uZXcgZW8oelYsZGUoMCkpLFRTdD1SU3QsUjNlPXoyLGozZT12YixFU3Q9bmV3IGVvKCQ2LFYxZSksQ1N0PVJWLF9TdD1hNSxKaHQ9VjNlLEIzZT1CVn1mdW5jdGlvbiBaZCh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmkhPTF8fCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaSE9MSl0aHJvdyBydChuZXcgUG4oVWN0KSk7cmV0dXJuIE1vKHUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpfWZ1bmN0aW9uIHhhZSh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmkhPTF8fCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaSE9MSl0aHJvdyBydChuZXcgUG4oVWN0KSk7cmV0dXJuIE9JKHUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpfWZ1bmN0aW9uIGthZSh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmkhPTF8fCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaSE9MSl0aHJvdyBydChuZXcgUG4oVWN0KSk7cmV0dXJuIE9JKHUoU3QoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKSwwKSw4MikpfWZ1bmN0aW9uIFhwKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IHJ0KG5ldyBQbihVY3QpKTtyZXR1cm4gTW8odShTdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSl9ZnVuY3Rpb24gTTR0KHQsZSxuKXt2YXIgcixzLG87aWYoKyt0Lmoscz10LlZpKCksZT49c3x8ZTwwKXRocm93IHJ0KG5ldyBtbyhXY3QrZStTMitzKSk7aWYobj49c3x8bjwwKXRocm93IHJ0KG5ldyBtbyhLY3QrbitTMitzKSk7cmV0dXJuIGUhPW4/cj0obz10LlRpKG4pLHQuSGkoZSxvKSxvKTpyPXQuT2kobikscn1mdW5jdGlvbiBFYWUodCl7dmFyIGUsbixyO2lmKHI9dCx0KWZvcihlPTAsbj10LlVnKCk7bjtuPW4uVWcoKSl7aWYoKytlPm9vdClyZXR1cm4gRWFlKG4pO2lmKHI9bixuPT10KXRocm93IHJ0KG5ldyBGbygiVGhlcmUgaXMgYSBjeWNsZSBpbiB0aGUgY29udGFpbm1lbnQgaGllcmFyY2h5IG9mICIrdCkpfXJldHVybiByfWZ1bmN0aW9uIFFwKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgYzIoS2EsIlsiLCJdIiksbj10LktjKCk7bi5PYigpOyllPW4uUGIoKSxQMChyLEd0KGUpPT09R3QodCk/Iih0aGlzIENvbGxlY3Rpb24pIjplPT1udWxsP1R1OiRvKGUpKTtyZXR1cm4gci5hP3IuZS5sZW5ndGg9PTA/ci5hLmE6ci5hLmErKCIiK3IuZSk6ci5jfWZ1bmN0aW9uIEk0dCh0LGUpe3ZhciBuLHI7aWYocj0hMSxlLmdjKCk8MilyZXR1cm4hMTtmb3Iobj0wO248ZS5nYygpO24rKyluPGUuZ2MoKS0xP3I9cnxkcSh0LHUoZS5YYihuKSwzMyksdShlLlhiKG4rMSksMzMpKTpyPXJ8ZHEodCx1KGUuWGIobiksMzMpLHUoZS5YYigwKSwzMykpO3JldHVybiByfWZ1bmN0aW9uIFRhZSh0LGUpe3ZhciBuO2UhPXQuYT8obj1udWxsLHQuYSYmKG49dSh0LmEsNDkpLmloKHQsNCxyMSxuKSksZSYmKG49dShlLDQ5KS5naCh0LDQscjEsbikpLG49SHl0KHQsZSxuKSxuJiZuLkZpKCkpOnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxlLGUpKX1mdW5jdGlvbiBENHQodCxlKXt2YXIgbjtlIT10LmU/KHQuZSYmT0p0KHh3dCh0LmUpLHQpLGUmJighZS5iJiYoZS5iPW5ldyBjUihuZXcgWXR0KSksV1d0KGUuYix0KSksbj1UMW4odCxlLG51bGwpLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSw0LGUsZSkpfWZ1bmN0aW9uIHV5KHQpe3ZhciBlLG4scjtmb3Iobj10Lmxlbmd0aCxyPTA7cjxuJiYoUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpPD0zMik7KSsrcjtmb3IoZT1uO2U+ciYmKFJyKGUtMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUtMSk8PTMyKTspLS1lO3JldHVybiByPjB8fGU8bj90LnN1YnN0cihyLGUtcik6dH1mdW5jdGlvbiBnMG4odCxlKXt2YXIgbjtuPWUubyxPcCh0LmYpPyh0LmouYT1iLk1hdGgubWF4KHQuai5hLG4uYSksdC5qLmIrPW4uYix0LmQuYy5sZW5ndGg+MSYmKHQuai5iKz10LmUpKToodC5qLmErPW4uYSx0LmouYj1iLk1hdGgubWF4KHQuai5iLG4uYiksdC5kLmMubGVuZ3RoPjEmJih0LmouYSs9dC5lKSl9ZnVuY3Rpb24gWnAoKXtacD1aLHIyZT1jdChvdChYYSwxKSx4Yyw2MSwwLFsoYmUoKSxObiksSG4sbXJdKSxuMmU9Y3Qob3QoWGEsMSkseGMsNjEsMCxbSG4sbXIsQm5dKSxpMmU9Y3Qob3QoWGEsMSkseGMsNjEsMCxbbXIsQm4sTm5dKSxzMmU9Y3Qob3QoWGEsMSkseGMsNjEsMCxbQm4sTm4sSG5dKX1mdW5jdGlvbiBwMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYoaD10LmMuZCxkPXQuZC5kLGguaiE9ZC5qKWZvcihDPXQuYixzPWguaix3PW51bGw7cyE9ZC5qOyl3PWU9PTA/a3oocyk6dDN0KHMpLG89TTN0KHMsQy5kW3MuZ10sbiksaz1NM3QodyxDLmRbdy5nXSxuKSxuaShyLExpKG8saykpLHM9d31mdW5jdGlvbiBiMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdztyZXR1cm4gaD1Jc2UodC5hLGUsbiksZD11KGguYSwxOSkuYSxvPXUoaC5iLDE5KS5hLHImJih3PXUoUShlLChzZSgpLFp1KSksMTApLHM9dShRKG4sWnUpLDEwKSx3JiZzJiYoQlp0KHQuYix3LHMpLGQrPXQuYi5pLG8rPXQuYi5lKSksZD5vfWZ1bmN0aW9uIENhZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7Zm9yKHRoaXMuYT10c2UodCksdGhpcy5iPW5ldyBsZSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcilmb3IoZT1uW3JdLG89bmV3IGxlLHVlKHRoaXMuYixvKSxkPWUsdz0wLGs9ZC5sZW5ndGg7dzxrOysrdyloPWRbd10sdWUobyxuZXcgUHUoaC5qKSl9ZnVuY3Rpb24gdjBuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89MCxyPW5bZV0sZTxuLmxlbmd0aC0xJiYocz1uW2UrMV0sdC5iW2VdPyhvPXE1bih0LmQscixzKSxvKz1RbnQodC5hLHIsKGJlKCksSG4pKSxvKz1RbnQodC5hLHMsQm4pKTpvPWNhbih0LmEscixzKSksdC5jW2VdJiYobys9SXNuKHQuYSxyKSksb31mdW5jdGlvbiB3MG4odCxlLG4scixzKXt2YXIgbyxoLGQsdztmb3Iodz1udWxsLGQ9bmV3IFMocik7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksNDQxKSxoIT1uJiZSbyhoLmUscywwKSE9LTEpe3c9aDticmVha31vPU5ydChzKSxEYShvLG4uYiksc2Eobyx3LmIpLGxuKHQuYSxzLG5ldyBUaihvLGUsbi5mKSl9ZnVuY3Rpb24gX2FlKHQpe2Zvcig7dC5nLmMhPTAmJnQuZC5jIT0wOyl1bnQodC5nKS5jPnVudCh0LmQpLmM/KHQuaSs9dC5nLmMsS2l0KHQuZCkpOnVudCh0LmQpLmM+dW50KHQuZykuYz8odC5lKz10LmQuYyxLaXQodC5nKSk6KHQuaSs9bll0KHQuZyksdC5lKz1uWXQodC5kKSxLaXQodC5nKSxLaXQodC5kKSl9ZnVuY3Rpb24gbTBuKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iobz1lLnEsaD1lLnIsbmV3IHQyKChWZigpLHBiKSxlLG8sMSksbmV3IHQyKHBiLG8saCwxKSxzPW5ldyBTKG4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExMiksciE9byYmciE9ZSYmciE9aCYmKGx4dCh0LmEscixlKSxseHQodC5hLHIsaCkpfWZ1bmN0aW9uIFNhZSh0LGUsbixyKXt0LmEuZD1iLk1hdGgubWluKGUsbiksdC5hLmE9Yi5NYXRoLm1heChlLHIpLXQuYS5kLGU8bj8odC5iPS41KihlK24pLHQuZz1tY3QqdC5iKy45KmUsdC5mPW1jdCp0LmIrLjkqbik6KHQuYj0uNSooZStyKSx0Lmc9bWN0KnQuYisuOSpyLHQuZj1tY3QqdC5iKy45KmUpfWZ1bmN0aW9uIHkwbigpeyRIPXt9LCFBcnJheS5pc0FycmF5JiYoQXJyYXkuaXNBcnJheT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgQXJyYXldIn0pO2Z1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCl9IURhdGUubm93JiYoRGF0ZS5ub3c9dCl9ZnVuY3Rpb24gQWFlKHQsZSl7dmFyIG4scjtyPXUoUShlLChUZSgpLG9zKSksOTgpLEp0KGUsKHNlKCkscjl0KSxyKSxuPWUuZSxuJiYodXMobmV3IFRuKG51bGwsbmV3IF9uKG4uYSwxNikpLG5ldyBncyh0KSksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKG4uYiwxNikpLG5ldyBSNSksbmV3IHFpKHQpKSl9ZnVuY3Rpb24geDBuKHQpe3ZhciBlLG4scixzO2lmKGM4KHUoUSh0LmIsKFRlKCksVmwpKSwxMDMpKSlyZXR1cm4gMDtmb3IoZT0wLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksbi5rPT0oR24oKSxEcykmJihzPW4uby5hLGU9Yi5NYXRoLm1heChlLHMpKTtyZXR1cm4gZX1mdW5jdGlvbiBrMG4odCl7c3dpdGNoKHUoUSh0LChUZSgpLGN1KSksMTYzKS5nKXtjYXNlIDE6SnQodCxjdSwoaGgoKSx4UykpO2JyZWFrO2Nhc2UgMjpKdCh0LGN1LChoaCgpLEZ5KSk7YnJlYWs7Y2FzZSAzOkp0KHQsY3UsKGhoKCkseVMpKTticmVhaztjYXNlIDQ6SnQodCxjdSwoaGgoKSxmYikpfX1mdW5jdGlvbiBnRSgpe2dFPVosYlM9bmV3IFo5KEswLDApLCRUdD1uZXcgWjkoZDYsMSksSFR0PW5ldyBaOShnNiwyKSxxVHQ9bmV3IFo5KCJMRUZUX1JJR0hUX0NPTlNUUkFJTlRfTE9DS0lORyIsMykselR0PW5ldyBaOSgiTEVGVF9SSUdIVF9DT05ORUNUSU9OX0xPQ0tJTkciLDQpLGpUdD1uZXcgWjkoZjFlLDUpfWZ1bmN0aW9uIExhZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7ZD1uLmEvMixvPW4uYi8yLHI9Yi5NYXRoLmFicyhlLmEtdC5hKSxzPWIuTWF0aC5hYnMoZS5iLXQuYiksdz0xLGs9MSxyPmQmJih3PWQvcikscz5vJiYoaz1vL3MpLGg9Yi5NYXRoLm1pbih3LGspLHQuYSs9aCooZS5hLXQuYSksdC5iKz1oKihlLmItdC5iKX1mdW5jdGlvbiBFMG4odCxlLG4scixzKXt2YXIgbyxoO2ZvcihoPSExLG89dShGZShuLmIsMCksMzMpO1Jtbih0LGUsbyxyLHMpJiYoaD0hMCxuZG4obixvKSxuLmIuYy5sZW5ndGghPTApOylvPXUoRmUobi5iLDApLDMzKTtyZXR1cm4gbi5iLmMubGVuZ3RoPT0wJiZ0RChuLmosbiksaCYmVnooZS5xKSxofWZ1bmN0aW9uIFQwbih0LGUpe3k0KCk7dmFyIG4scixzLG87aWYoZS5iPDIpcmV0dXJuITE7Zm9yKG89ZWkoZSwwKSxuPXUodGkobyksOCkscj1uO28uYiE9by5kLmM7KXtpZihzPXUodGkobyksOCksUXN0KHQscixzKSlyZXR1cm4hMDtyPXN9cmV0dXJuISFRc3QodCxyLG4pfWZ1bmN0aW9uIE80dCh0LGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0wPyghdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksa2oodC5vLGUscikpOihvPXUoeW4oKHM9dShJbih0LDE2KSwyNiksc3x8dC56aCgpKSxuKSw2Niksby5OaigpLlJqKHQsaXUodCksbi1abih0LnpoKCkpLGUscikpfWZ1bmN0aW9uIERzdCh0LGUpe3ZhciBuO2UhPXQuc2I/KG49bnVsbCx0LnNiJiYobj11KHQuc2IsNDkpLmloKHQsMSxuQSxuKSksZSYmKG49dShlLDQ5KS5naCh0LDEsbkEsbikpLG49V3l0KHQsZSxuKSxuJiZuLkZpKCkpOnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNCxlLGUpKX1mdW5jdGlvbiBDMG4odCxlKXt2YXIgbixyLHMsbztpZihlKXM9UjAoZSwieCIpLG49bmV3IGV6dCh0KSxGOChuLmEsKE9uKHMpLHMpKSxvPVIwKGUsInkiKSxyPW5ldyBuenQodCksUjgoci5hLChPbihvKSxvKSk7ZWxzZSB0aHJvdyBydChuZXcgYWQoIkFsbCBlZGdlIHNlY3Rpb25zIG5lZWQgYW4gZW5kIHBvaW50LiIpKX1mdW5jdGlvbiBfMG4odCxlKXt2YXIgbixyLHMsbztpZihlKXM9UjAoZSwieCIpLG49bmV3IFokdCh0KSxCOChuLmEsKE9uKHMpLHMpKSxvPVIwKGUsInkiKSxyPW5ldyBKJHQodCksajgoci5hLChPbihvKSxvKSk7ZWxzZSB0aHJvdyBydChuZXcgYWQoIkFsbCBlZGdlIHNlY3Rpb25zIG5lZWQgYSBzdGFydCBwb2ludC4iKSl9ZnVuY3Rpb24gUzBuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHI9aHJlKHQpLG89MCxkPXIubGVuZ3RoO288ZDsrK28pd2FlKGUpO2Zvcih3PSFSMSYmdC5lP1IxP251bGw6dC5kOm51bGw7dzspe2ZvcihuPWhyZSh3KSxzPTAsaD1uLmxlbmd0aDtzPGg7KytzKXdhZShlKTt3PSFSMSYmdy5lP1IxP251bGw6dy5kOm51bGx9fWZ1bmN0aW9uIEduKCl7R249WixEcz1uZXcgSzkoIk5PUk1BTCIsMCksWnM9bmV3IEs5KCJMT05HX0VER0UiLDEpLHhzPW5ldyBLOSgiRVhURVJOQUxfUE9SVCIsMiksSGM9bmV3IEs5KCJOT1JUSF9TT1VUSF9QT1JUIiwzKSxTbD1uZXcgSzkoIkxBQkVMIiw0KSxqMT1uZXcgSzkoIkJSRUFLSU5HX1BPSU5UIiw1KX1mdW5jdGlvbiBBMG4odCl7dmFyIGUsbixyLHM7aWYoZT0hMSxWcyh0LChzZSgpLG1TKSkpZm9yKG49dShRKHQsbVMpLDgzKSxzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEpLElibihyKSYmKGV8fChVZ24oRmEodCkpLGU9ITApLERobih1KG4ueGMociksMzA2KSkpfWZ1bmN0aW9uIEwwbih0LGUsbil7dmFyIHI7d3IobiwiU2VsZi1Mb29wIHJvdXRpbmciLDEpLHI9bmxuKGUpLG5qKFEoZSwoTCQoKSxHUykpKSx1cyhwdShSaShSaShXbyhuZXcgVG4obnVsbCxuZXcgX24oZS5iLDE2KSksbmV3IGtrKSxuZXcgVzUpLG5ldyBCVCksbmV3IG5YKSxuZXcgQkd0KHQscikpLG9yKG4pfWZ1bmN0aW9uIE0wbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7cmV0dXJuIGs9VDR0KHQpLG49dC5lLG89biE9bnVsbCxvJiZwOChrLG1ILHQuZSksZD10LmssaD0hIWQsaCYmcDgoaywidHlwZSIsc250KHQuaykpLHI9Zk0odC5qKSxzPSFyLHMmJih3PW5ldyBiZyxXZihrLFZjdCx3KSxlPW5ldyBrenQodyksdmEodC5qLGUpKSxrfWZ1bmN0aW9uIEkwbih0KXt2YXIgZSxuLHIscztmb3Iocz1ScCgoQmwodC5nYygpLCJzaXplIiksbmV3IExtKSwxMjMpLHI9ITAsbj1Qdih0KS5LYygpO24uT2IoKTspZT11KG4uUGIoKSw0Mikscnx8KHMuYSs9S2EpLHI9ITEsaGMoUnAoaGMocyxlLmNkKCkpLDYxKSxlLmRkKCkpO3JldHVybihzLmErPSJ9IixzKS5hfWZ1bmN0aW9uIE1hZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gZSY9NjMsZTwyMj8obj10Lmw8PGUscj10Lm08PGV8dC5sPj4yMi1lLHM9dC5oPDxlfHQubT4+MjItZSk6ZTw0ND8obj0wLHI9dC5sPDxlLTIyLHM9dC5tPDxlLTIyfHQubD4+NDQtZSk6KG49MCxyPTAscz10Lmw8PGUtNDQpLHJ1KG4mdWwsciZ1bCxzJlcwKX1mdW5jdGlvbiBseSh0KXtpZihlRXQ9PW51bGwmJihlRXQ9bmV3IFJlZ0V4cCgiXlxccypbKy1dPyhOYU58SW5maW5pdHl8KChcXGQrXFwuP1xcZCopfChcXC5cXGQrKSkoW2VFXVsrLV0/XFxkKyk/W2REZkZdPylcXHMqJCIpKSwhZUV0LnRlc3QodCkpdGhyb3cgcnQobmV3IG9kKHZ3K3QrJyInKSk7cmV0dXJuIHBhcnNlRmxvYXQodCl9ZnVuY3Rpb24gRDBuKHQpe3ZhciBlLG4scixzO2ZvcihlPW5ldyBsZSxuPVB0KGRsLGkwLDI1LHQuYS5jLmxlbmd0aCwxNiwxKSxhd3QobixuLmxlbmd0aCkscz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyMSksbltyLmRdfHwoZS5jW2UuYy5sZW5ndGhdPXIsJGllKHQscixuKSk7cmV0dXJuIGV9ZnVuY3Rpb24gTzBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89ZS5iLmosdC5hPVB0KFRyLFhyLDI1LG8uYy5sZW5ndGgsMTUsMSkscz0wLHI9MDtyPG8uYy5sZW5ndGg7cisrKW49KEFuKHIsby5jLmxlbmd0aCksdShvLmNbcl0sMTEpKSxuLmUuYy5sZW5ndGg9PTAmJm4uZy5jLmxlbmd0aD09MD9zKz0xOnMrPTMsdC5hW3JdPXN9ZnVuY3Rpb24gbnEoKXtucT1aLEVsdD1uZXcgWDkoIkFMV0FZU19VUCIsMCksa2x0PW5ldyBYOSgiQUxXQVlTX0RPV04iLDEpLENsdD1uZXcgWDkoIkRJUkVDVElPTl9VUCIsMiksVGx0PW5ldyBYOSgiRElSRUNUSU9OX0RPV04iLDMpLF9sdD1uZXcgWDkoIlNNQVJUX1VQIiw0KSxQRz1uZXcgWDkoIlNNQVJUX0RPV04iLDUpfWZ1bmN0aW9uIE4wbih0LGUpe2lmKHQ8MHx8ZTwwKXRocm93IHJ0KG5ldyBQbigiayBhbmQgbiBtdXN0IGJlIHBvc2l0aXZlIikpO2lmKGU+dCl0aHJvdyBydChuZXcgUG4oImsgbXVzdCBiZSBzbWFsbGVyIHRoYW4gbiIpKTtyZXR1cm4gZT09MHx8ZT09dD8xOnQ9PTA/MDpvNHQodCkvKG80dChlKSpvNHQodC1lKSl9ZnVuY3Rpb24gTjR0KHQsZSl7dmFyIG4scixzLG87Zm9yKG49bmV3IHIydCh0KTtuLmc9PW51bGwmJiFuLmM/Rnd0KG4pOm4uZz09bnVsbHx8bi5pIT0wJiZ1KG4uZ1tuLmktMV0sNDcpLk9iKCk7KWlmKG89dShhcShuKSw1NiksRXQobywxNjApKWZvcihyPXUobywxNjApLHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLm9nKHIpfWZ1bmN0aW9uIE9zdCh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9qaXQodCk6KGU9bmV3IFRoKGppdCh0KSksZS5hKz0iIChoZWlnaHQ6ICIsUjMoZSx0LmYpLGUuYSs9Iiwgd2lkdGg6ICIsUjMoZSx0LmcpLGUuYSs9IiwgeDogIixSMyhlLHQuaSksZS5hKz0iLCB5OiAiLFIzKGUsdC5qKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIFAwbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT1uZXcgbjIscj10LHM9MCxvPXIubGVuZ3RoO3M8bzsrK3MpaWYobj1yW3NdLGg9QXIobi5jZCgpKSxkPXAyKGUsaCxBcihuLmRkKCkpKSxkIT1udWxsKXRocm93IHJ0KG5ldyBQbigiZHVwbGljYXRlIGtleTogIitoKSk7dGhpcy5iPSh2bigpLG5ldyBxKGUpKX1mdW5jdGlvbiBGMG4odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBUdTtmb3Iobz1uZXcgYzIoS2EsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLFAwKG8sU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBQNHQoKXtQNHQ9Wix1N3Q9KHokKCksckcpLEhwZT1uZXcgbW4ocXEsdTd0KSxkZSgxKSxxcGU9bmV3IG1uKGM2dCxkZSgzMDApKSxkZSgwKSxVcGU9bmV3IG1uKHU2dCxkZSgwKSksV3BlPW5ldyBtbihJb3QseWQpLEdwZT1uZXcgbW4oRG90LDUpLEtwZT1yRyxWcGU9SHV0fWZ1bmN0aW9uIElhZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHM9ZT09MT9RdXQ6WHV0LHI9cy5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPXUoci5QYigpLDEwMyksaD11KEFpKHQuZi5jLG4pLDIxKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0NiksdWUodC5iLmIsdShvLmIsODEpKSx1ZSh0LmIuYSx1KG8uYiw4MSkuZCl9ZnVuY3Rpb24gQjBuKHQsZSl7dmFyIG47aWYoZSE9bnVsbCYmIXQuYy5ZaigpLndqKGUpKXRocm93IG49RXQoZSw1Nik/dShlLDU2KS5UZygpLnpiOkFwKHNsKGUpKSxydChuZXcgWGsoYWIrdC5jLm5lKCkrIidzIHR5cGUgJyIrdC5jLllqKCkubmUoKSsiJyBkb2VzIG5vdCBwZXJtaXQgYSB2YWx1ZSBvZiB0eXBlICciK24rIiciKSl9ZnVuY3Rpb24gUjBuKHQsZSxuKXt2YXIgcixzO2ZvcihzPW5ldyBoYSh0LmIsMCk7cy5iPHMuZC5nYygpOylyPShRbihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksNzApKSxHdChRKHIsKHNlKCksZTl0KSkpPT09R3QoZSkmJih6NHQoci5uLEZhKHQuYy5pKSxuKSxFbChzKSx1ZShlLmIscikpfWZ1bmN0aW9uIGowbih0LGUpe2lmKGUuYSlzd2l0Y2godShRKGUuYiwoc2UoKSxyOXQpKSw5OCkuZyl7Y2FzZSAwOmNhc2UgMTphZG4oZSk7Y2FzZSAyOnVzKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgdUYpLCRwbih0LmEsZSl9ZWxzZSB1cyhuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IHVGKX1mdW5jdGlvbiBEYWUodCl7dmFyIGUsbjtyZXR1cm4gbj1iLk1hdGguc3FydCgodC5rPT1udWxsJiYodC5rPXN5dCh0LG5ldyBaWCkpLFh0KHQuaykvKHQuYioodC5nPT1udWxsJiYodC5nPXVuZSh0LG5ldyBORikpLFh0KHQuZykpKSkpLGU9U3Ioa3UoYi5NYXRoLnJvdW5kKG4pKSksZT1iLk1hdGgubWluKGUsdC5mKSxlfWZ1bmN0aW9uIE1jKCl7QnUoKSxldnQuY2FsbCh0aGlzKSx0aGlzLmo9KGJlKCksWm8pLHRoaXMuYT1uZXcgVGEsbmV3IFZ0dCx0aGlzLmY9KEJsKDIsbXkpLG5ldyBZYygyKSksdGhpcy5lPShCbCg0LG15KSxuZXcgWWMoNCkpLHRoaXMuZz0oQmwoNCxteSksbmV3IFljKDQpKSx0aGlzLmI9bmV3IFZHdCh0aGlzLmUsdGhpcy5nKX1mdW5jdGlvbiAkMG4odCxlKXt2YXIgbixyO3JldHVybiEoamUoUmUoUShlLChzZSgpLCQxKSkpKXx8KHI9ZS5jLmksdD09KGhoKCkseVMpJiZyLms9PShHbigpLFNsKSl8fChuPXUoUShyLChUZSgpLGN1KSksMTYzKSxuPT1mYikpfWZ1bmN0aW9uIHowbih0LGUpe3ZhciBuLHI7cmV0dXJuIShqZShSZShRKGUsKHNlKCksJDEpKSkpfHwocj1lLmQuaSx0PT0oaGgoKSx4UykmJnIuaz09KEduKCksU2wpKXx8KG49dShRKHIsKFRlKCksY3UpKSwxNjMpLG49PUZ5KSl9ZnVuY3Rpb24gcTBuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKGg9dC5kLHc9dC5vLGQ9bmV3IGloKC1oLmIsLWguZCxoLmIrdy5hK2guYyxoLmQrdy5iK2guYSkscj1lLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLG4mJmhfKGQsbi5pKTtoLmI9LWQuYyxoLmQ9LWQuZCxoLmM9ZC5iLWguYi13LmEsaC5hPWQuYS1oLmQtdy5ifWZ1bmN0aW9uIGlEKCl7aUQ9WixYX3Q9bmV3IFNNKCJDRU5URVJfRElTVEFOQ0UiLDApLFZodD1uZXcgU00oIkNJUkNMRV9VTkRFUkxBUCIsMSksWl90PW5ldyBTTSgiUkVDVEFOR0xFX1VOREVSTEFQIiwyKSxVaHQ9bmV3IFNNKCJJTlZFUlRFRF9PVkVSTEFQIiwzKSxRX3Q9bmV3IFNNKCJNSU5JTVVNX1JPT1RfRElTVEFOQ0UiLDQpfWZ1bmN0aW9uIEgwbih0KXtQNXQoKTt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHI9dC5sZW5ndGgscz1yKjIsZT1QdChtaCx2ZCwyNSxzLDE1LDEpLG49MDtuPHI7bisrKW89dFtuXSxvPDAmJihvKz0yNTYpLGVbbioyXT11VVtvPj40XSxlW24qMisxXT11VVtvJjE1XTtyZXR1cm4gQWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBHMG4odCl7UWooKTt2YXIgZSxuLHI7c3dpdGNoKHI9dC5jLmxlbmd0aCxyKXtjYXNlIDA6cmV0dXJuIGhnZTtjYXNlIDE6cmV0dXJuIGU9dShwb2UobmV3IFModCkpLDQyKSxndG4oZS5jZCgpLGUuZGQoKSk7ZGVmYXVsdDpyZXR1cm4gbj11KEQxKHQsUHQoTTIsRHEsNDIsdC5jLmxlbmd0aCwwLDEpKSwxNjUpLG5ldyBadHQobil9fWZ1bmN0aW9uIFYwbih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKGU9bmV3IFAzLG49bmV3IFAzLHFwKGUsdCkscXAobix0KTtuLmIhPW4uYzspZm9yKHM9dShGeChuKSwzNyksaD1uZXcgUyhzLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSxvLmUmJihyPW8uZSxxcChlLHIpLHFwKG4scikpO3JldHVybiBlfWZ1bmN0aW9uIFJnKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBPeCh0LmosKEJ1KCksTzd0KSk7Y2FzZSAyOnJldHVybiBPeCh0LmosKEJ1KCksSTd0KSk7Y2FzZSAzOnJldHVybiBPeCh0LmosKEJ1KCksUDd0KSk7Y2FzZSA0OnJldHVybiBPeCh0LmosKEJ1KCksRjd0KSk7ZGVmYXVsdDpyZXR1cm4gdm4oKSx2bigpLGlvfX1mdW5jdGlvbiBVMG4odCxlKXt2YXIgbixyLHM7bj11dG4oZSx0LmUpLHI9dShKbih0LmcuZixuKSwxOSkuYSxzPXQuYS5jLmxlbmd0aC0xLHQuYS5jLmxlbmd0aCE9MCYmdShGZSh0LmEscyksMjg3KS5jPT1yPygrK3UoRmUodC5hLHMpLDI4NykuYSwrK3UoRmUodC5hLHMpLDI4NykuYik6dWUodC5hLG5ldyBoV3QocikpfWZ1bmN0aW9uIFcwbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1Kdm4odCxlLG4pLHIhPTA/cjpWcyhlLChzZSgpLFRjKSkmJlZzKG4sVGMpPyhzPWR1KHUoUShlLFRjKSwxOSkuYSx1KFEobixUYyksMTkpLmEpLHM8MD92RCh0LGUsbik6cz4wJiZ2RCh0LG4sZSkscyk6U3BuKHQsZSxuKX1mdW5jdGlvbiBPYWUodCxlLG4pe3ZhciByLHMsbyxoO2lmKGUuYiE9MCl7Zm9yKHI9bmV3IFFpLGg9ZWkoZSwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksODYpLFVhKHIsYnl0KG8pKSxzPW8uZSxzLmE9dShRKG8sKGZjKCksTGh0KSksMTkpLmEscy5iPXUoUShvLHRfdCksMTkpLmE7T2FlKHQscixSYyhuLHIuYi90LmF8MCkpfX1mdW5jdGlvbiBOYWUodCxlKXt2YXIgbixyLHMsbyxoO2lmKHQuZTw9ZXx8SnJuKHQsdC5nLGUpKXJldHVybiB0Lmc7Zm9yKG89dC5yLHI9dC5nLGg9dC5yLHM9KG8tcikvMityO3IrMTxvOyluPUVfKHQscywhMSksbi5iPD1zJiZuLmE8PWU/KGg9cyxvPXMpOnI9cyxzPShvLXIpLzIrcjtyZXR1cm4gaH1mdW5jdGlvbiBLMG4odCxlLG4pe3ZhciByO3I9SmNlKHQsZSwhMCksd3IobiwiUmVjdXJzaXZlIEdyYXBoIExheW91dCIsciksTjR0KGUsY3Qob3Qod1N0LDEpLEllLDUyNywwLFtuZXcgWUxdKSkscjIoZSwoY2koKSxDNykpfHxONHQoZSxjdChvdCh3U3QsMSksSWUsNTI3LDAsW25ldyB5Wl0pKSxUeHQodCxlLG51bGwsbiksb3Iobil9ZnVuY3Rpb24gb3IodCl7dmFyIGU7aWYodC5wPT1udWxsKXRocm93IHJ0KG5ldyBGbygiVGhlIHRhc2sgaGFzIG5vdCBiZWd1biB5ZXQuIikpO3QuYnx8KHQuayYmKGU9KHFkKCksQ2Eoa3UoRGF0ZS5ub3coKSksJGcpKSx0LnE9VnYoWXAoZSx0Lm8pKSoxZS05KSx0LmM8dC5yJiZpaXQodCx0LnItdC5jKSx0LmI9ITApfWZ1bmN0aW9uIHNEKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgRHUsbmkocixuZXcgJGUodC5qLHQuaykpLG49bmV3IGVyKCghdC5hJiYodC5hPW5ldyBTcyhIaCx0LDUpKSx0LmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNDY5KSxuaShyLG5ldyAkZShlLmEsZS5iKSk7cmV0dXJuIG5pKHIsbmV3ICRlKHQuYix0LmMpKSxyfWZ1bmN0aW9uIFkwbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQztpZihzKWZvcih3PXMuYS5sZW5ndGgsbz1uZXcgUWIodyksQz0oby5iLW8uYSkqby5jPDA/KElwKCksQWIpOm5ldyBQcChvKTtDLk9iKCk7KWs9dShDLlBiKCksMTkpLGQ9XzgocyxrLmEpLGg9bmV3IEFYdCh0LGUsbixyKSxzbW4oaC5hLGguYixoLmMsaC5kLGQpfWZ1bmN0aW9uIEY0dCh0LGUpe3ZhciBuO2lmKEd0KHQpPT09R3QoZSkpcmV0dXJuITA7aWYoRXQoZSwyMSkpe249dShlLDIxKTt0cnl7cmV0dXJuIHQuZ2MoKT09bi5nYygpJiZ0LkljKG4pfWNhdGNoKHIpe2lmKHI9V2kociksRXQociwxNzMpfHxFdChyLDIwNSkpcmV0dXJuITE7dGhyb3cgcnQocil9fXJldHVybiExfWZ1bmN0aW9uIEI0dCh0LGUpe3ZhciBuO3VlKHQuZCxlKSxuPWUucmYoKSx0LmM/KHQuZS5hPWIuTWF0aC5tYXgodC5lLmEsbi5hKSx0LmUuYis9bi5iLHQuZC5jLmxlbmd0aD4xJiYodC5lLmIrPXQuYSkpOih0LmUuYSs9bi5hLHQuZS5iPWIuTWF0aC5tYXgodC5lLmIsbi5iKSx0LmQuYy5sZW5ndGg+MSYmKHQuZS5hKz10LmEpKX1mdW5jdGlvbiBYMG4odCl7dmFyIGUsbixyLHM7c3dpdGNoKHM9dC5pLGU9cy5iLHI9cy5qLG49cy5nLHMuYS5nKXtjYXNlIDA6bi5hPSh0LmcuYi5vLmEtci5hKS8yO2JyZWFrO2Nhc2UgMTpuLmE9ZS5kLm4uYStlLmQuYS5hO2JyZWFrO2Nhc2UgMjpuLmE9ZS5kLm4uYStlLmQuYS5hLXIuYTticmVhaztjYXNlIDM6bi5iPWUuZC5uLmIrZS5kLmEuYn19ZnVuY3Rpb24gUGFlKHQsZSxuLHIscyl7aWYocjxlfHxzPG4pdGhyb3cgcnQobmV3IFBuKCJUaGUgaGlnaHggbXVzdCBiZSBiaWdnZXIgdGhlbiBsb3d4IGFuZCB0aGUgaGlnaHkgbXVzdCBiZSBiaWdnZXIgdGhlbiBsb3d5IikpO3JldHVybiB0LmE8ZT90LmE9ZTp0LmE+ciYmKHQuYT1yKSx0LmI8bj90LmI9bjp0LmI+cyYmKHQuYj1zKSx0fWZ1bmN0aW9uIFEwbih0KXtpZihFdCh0LDE0OSkpcmV0dXJuIF8ybih1KHQsMTQ5KSk7aWYoRXQodCwyMjkpKXJldHVybiBFbG4odSh0LDIyOSkpO2lmKEV0KHQsMjMpKXJldHVybiBNMG4odSh0LDIzKSk7dGhyb3cgcnQobmV3IFBuKGs4dCtRcChuZXcgd2woY3Qob3QoWG4sMSksSWUsMSw1LFt0XSkpKSkpfWZ1bmN0aW9uIFowbih0LGUsbixyLHMpe3ZhciBvLGgsZDtmb3Iobz0hMCxoPTA7aDxyO2grKylvPW8mbltoXT09MDtpZihzPT0wKUljKG4scix0LDAsZSksaD1lO2Vsc2V7Zm9yKGQ9MzItcyxvPW8mbltoXTw8ZD09MCxoPTA7aDxlLTE7aCsrKXRbaF09bltoK3JdPj4+c3xuW2grcisxXTw8ZDt0W2hdPW5baCtyXT4+PnMsKytofXJldHVybiBvfWZ1bmN0aW9uIFI0dCh0LGUsbixyKXt2YXIgcyxvLGg7aWYoZS5rPT0oR24oKSxacykpe2ZvcihvPW5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKTt6cihvKTspaWYocz11KExyKG8pLDE3KSxoPXMuYy5pLmssaD09WnMmJnQuYy5hW3MuYy5pLmMucF09PXImJnQuYy5hW2UuYy5wXT09bilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBKMG4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gZSY9NjMsbj10LmgmVzAsZTwyMj8obz1uPj4+ZSxzPXQubT4+ZXxuPDwyMi1lLHI9dC5sPj5lfHQubTw8MjItZSk6ZTw0ND8obz0wLHM9bj4+PmUtMjIscj10Lm0+PmUtMjJ8dC5oPDw0NC1lKToobz0wLHM9MCxyPW4+Pj5lLTQ0KSxydShyJnVsLHMmdWwsbyZXMCl9ZnVuY3Rpb24gRmFlKHQsZSxuLHIpe3ZhciBzO3RoaXMuYj1yLHRoaXMuZT10PT0oWnYoKSxEUykscz1lW25dLHRoaXMuZD1YYihkbCxbdGUsaTBdLFsxNzcsMjVdLDE2LFtzLmxlbmd0aCxzLmxlbmd0aF0sMiksdGhpcy5hPVhiKFRyLFt0ZSxYcl0sWzQ4LDI1XSwxNSxbcy5sZW5ndGgscy5sZW5ndGhdLDIpLHRoaXMuYz1uZXcgeTR0KGUsbil9ZnVuY3Rpb24gdGduKHQpe3ZhciBlLG4scjtmb3IodC5rPW5ldyAkd3QoKGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkubGVuZ3RoLHQuai5jLmxlbmd0aCkscj1uZXcgUyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDExMyksZT1uLmQuaixsbih0LmssZSxuKTt0LmU9ZjJuKFB4KHQuaykpfWZ1bmN0aW9uIEJhZSh0LGUpe3ZhciBuLHIscztOcyh0LmQsZSksbj1uZXcgVlQsa2kodC5jLGUsbiksbi5mPURpdChlLmMpLG4uYT1EaXQoZS5kKSxuLmQ9KGJfKCkscz1lLmMuaS5rLHM9PShHbigpLERzKXx8cz09ajEpLG4uZT0ocj1lLmQuaS5rLHI9PURzfHxyPT1qMSksbi5iPWUuYy5qPT0oYmUoKSxCbiksbi5jPWUuZC5qPT1Ibn1mdW5jdGlvbiBlZ24odCl7dmFyIGUsbixyLHMsbztmb3Iobz12aSxzPXZpLHI9bmV3IFMobzQodCkpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxMyksZT1uLmUuZS1uLmQuZSxuLmU9PXQmJmU8cz9zPWU6ZTxvJiYobz1lKTtyZXR1cm4gcz09dmkmJihzPS0xKSxvPT12aSYmKG89LTEpLG5ldyBsYShkZShzKSxkZShvKSl9ZnVuY3Rpb24gbmduKHQsZSl7dmFyIG4scixzO3JldHVybiBzPUZFLHI9KHNfKCksaE8pLHM9Yi5NYXRoLmFicyh0LmIpLG49Yi5NYXRoLmFicyhlLmYtdC5iKSxuPHMmJihzPW4scj10Ryksbj1iLk1hdGguYWJzKHQuYSksbjxzJiYocz1uLHI9Zk8pLG49Yi5NYXRoLmFicyhlLmctdC5hKSxuPHMmJihzPW4scj1KSCkscn1mdW5jdGlvbiByZ24odCxlKXt2YXIgbixyLHMsbztmb3Iobj1lLmEuby5hLG89bmV3IEtkKEZhKGUuYSkuYixlLmMsZS5mKzEpLHM9bmV3IGZ4KG8pO3MuYjxzLmQuZ2MoKTspaWYocj0oUW4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDI5KSksci5jLmE+PW4pcmV0dXJuIHBFKHQsZSxyLnApLCEwO3JldHVybiExfWZ1bmN0aW9uIFJhZSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9Pc3QodCk6KGU9bmV3IElsKGg4dCksIXQuYXx8VnIoVnIoKGUuYSs9JyAiJyxlKSx0LmEpLCciJyksVnIoQ3YoVnIoQ3YoVnIoQ3YoVnIoQ3YoKGUuYSs9IiAoIixlKSx0LmkpLCIsIiksdC5qKSwiIHwgIiksdC5nKSwiLCIpLHQuZiksIikiKSxlLmEpfWZ1bmN0aW9uIGphZSh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IoZD1hdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSkscj0wLGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGQucmwoby5haygpKSl7aWYocj09bilyZXR1cm4gZHkodCxoKSx0bygpLHUoZSw2NikuT2ooKT9vOm8uZGQoKTsrK3J9dGhyb3cgcnQobmV3IG1vKFhfK24rUzIrcikpfWZ1bmN0aW9uICRhZSh0KXt2YXIgZSxuLHI7aWYoZT10LmMsZT09Mnx8ZT09N3x8ZT09MSlyZXR1cm4gZ2koKSxnaSgpLGZBO2ZvcihyPUN4dCh0KSxuPW51bGw7KGU9dC5jKSE9MiYmZSE9NyYmZSE9MTspbnx8KG49KGdpKCksZ2koKSxuZXcgbEMoMSkpLG0yKG4scikscj1uKSxtMihuLEN4dCh0KSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaWduKHQsZSxuKXtyZXR1cm4gdDwwfHx0Pm4/VTR0KHQsbiwic3RhcnQgaW5kZXgiKTplPDB8fGU+bj9VNHQoZSxuLCJlbmQgaW5kZXgiKTp2XygiZW5kIGluZGV4ICglcykgbXVzdCBub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGluZGV4ICglcykiLGN0KG90KFhuLDEpLEllLDEsNSxbZGUoZSksZGUodCldKSl9ZnVuY3Rpb24gemFlKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe289dFtyXTt0cnl7b1sxXT9vWzBdLmptKCkmJihlPXF0bihlLG8pKTpvWzBdLmptKCl9Y2F0Y2goaCl7aWYoaD1XaShoKSxFdChoLDc4KSluPWgsdlIoKSxPbm4oRXQobiw0NzcpP3Uobiw0NzcpLmFlKCk6bik7ZWxzZSB0aHJvdyBydChoKX19cmV0dXJuIGV9ZnVuY3Rpb24gcEUodCxlLG4pe3ZhciByLHMsbztmb3IobiE9ZS5jK2UuYi5nYygpJiZweW4oZS5hLFpvbihlLG4tZS5jKSksbz1lLmEuYy5wLHQuYVtvXT1iLk1hdGgubWF4KHQuYVtvXSxlLmEuby5hKSxzPXUoUShlLmEsKHNlKCksVE8pKSwxNSkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksNzApLEp0KHIsc2x0LChGbigpLCEwKSl9ZnVuY3Rpb24gc2duKHQsZSl7dmFyIG4scixzO3M9TjJuKGUpLEp0KGUsKHNlKCksRmx0KSxzKSxzJiYocj12aSxBbyh0LmYscykmJihyPXUoZWMoQW8odC5mLHMpKSwxOSkuYSksbj11KEZlKGUuZywwKSwxNyksamUoUmUoUShuLCQxKSkpfHxraSh0LHMsZGUoYi5NYXRoLm1pbih1KFEobixUYyksMTkpLmEscikpKSl9ZnVuY3Rpb24gcWFlKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihlLnA9LTEsZD1pdyhlLChzbygpLGV1KSkuS2MoKTtkLk9iKCk7KWZvcihoPXUoZC5QYigpLDExKSxzPW5ldyBTKGguZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLG89ci5kLmksZSE9byYmKG8ucDwwP24uRmMocik6by5wPjAmJnFhZSh0LG8sbikpO2UucD0wfWZ1bmN0aW9uIFhlKHQpe3ZhciBlO3RoaXMuYz1uZXcgUWksdGhpcy5mPXQuZSx0aGlzLmU9dC5kLHRoaXMuaT10LmcsdGhpcy5kPXQuYyx0aGlzLmI9dC5iLHRoaXMuaz10LmosdGhpcy5hPXQuYSx0Lmk/dGhpcy5qPXQuaTp0aGlzLmo9KGU9dShIZihRZyksOSksbmV3IHJoKGUsdSh1ZihlLGUubGVuZ3RoKSw5KSwwKSksdGhpcy5nPXQuZn1mdW5jdGlvbiBhZ24odCl7dmFyIGUsbixyLHM7Zm9yKGU9UnAoVnIobmV3IElsKCJQcmVkaWNhdGVzLiIpLCJhbmQiKSw0MCksbj0hMCxzPW5ldyBmeCh0KTtzLmI8cy5kLmdjKCk7KXI9KFFuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKykpLG58fChlLmErPSIsIiksZS5hKz0iIityLG49ITE7cmV0dXJuKGUuYSs9IikiLGUpLmF9ZnVuY3Rpb24gSGFlKHQsZSxuKXt2YXIgcixzLG87aWYoIShuPD1lKzIpKWZvcihzPShuLWUpLzJ8MCxyPTA7cjxzOysrcilvPShBbihlK3IsdC5jLmxlbmd0aCksdSh0LmNbZStyXSwxMSkpLGFoKHQsZStyLChBbihuLXItMSx0LmMubGVuZ3RoKSx1KHQuY1tuLXItMV0sMTEpKSksQW4obi1yLTEsdC5jLmxlbmd0aCksdC5jW24tci0xXT1vfWZ1bmN0aW9uIG9nbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztvPXQuZC5wLGQ9by5lLHc9by5yLHQuZz1uZXcgSE0odyksaD10LmQuby5jLnAscj1oPjA/ZFtoLTFdOlB0KG8wLHpnLDEwLDAsMCwxKSxzPWRbaF0saz1oPGQubGVuZ3RoLTE/ZFtoKzFdOlB0KG8wLHpnLDEwLDAsMCwxKSxDPWU9PW4tMSxDP2dydCh0LmcscyxrKTpncnQodC5nLHIscyl9ZnVuY3Rpb24gR2FlKHQpe3ZhciBlO3RoaXMuaj1uZXcgbGUsdGhpcy5mPW5ldyBxcyx0aGlzLmI9KGU9dShIZihYYSksOSksbmV3IHJoKGUsdSh1ZihlLGUubGVuZ3RoKSw5KSwwKSksdGhpcy5kPVB0KFRyLFhyLDI1LChiZSgpLGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSkpLmxlbmd0aCwxNSwxKSx0aGlzLmc9dH1mdW5jdGlvbiBWYWUodCxlKXt2YXIgbixyLHM7aWYoZS5jLmxlbmd0aCE9MCl7Zm9yKG49eWFlKHQsZSkscz0hMTshbjspc3EodCxlLCEwKSxzPSEwLG49eWFlKHQsZSk7cyYmc3EodCxlLCExKSxyPWdpdChlKSx0LmImJnQuYi5sZyhyKSx0LmE9QXJlKHQsKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMzMpKSksVmFlKHQscil9fWZ1bmN0aW9uIE5zdCh0LGUpe3ZhciBuLHIscztpZihyPXluKHQuVGcoKSxlKSxuPWUtdC5BaCgpLG48MClpZihyKWlmKHIuSWooKSlzPXQuWWcocikscz49MD90LkJoKHMpOlE0dCh0LHIpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKGFiK3IubmUoKStXXykpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKHlkZStlK3hkZSkpO2Vsc2UgbGgodCxuLHIpfWZ1bmN0aW9uIGo0dCh0KXt2YXIgZSxuO2lmKG49bnVsbCxlPSExLEV0KHQsMjA0KSYmKGU9ITAsbj11KHQsMjA0KS5hKSxlfHxFdCh0LDI1OCkmJihlPSEwLG49IiIrdSh0LDI1OCkuYSksZXx8RXQodCw0ODMpJiYoZT0hMCxuPSIiK3UodCw0ODMpLmEpLCFlKXRocm93IHJ0KG5ldyB0ZXQoeDh0KSk7cmV0dXJuIG59ZnVuY3Rpb24gVWFlKHQsZSl7dmFyIG4scjtpZih0LmYpe2Zvcig7ZS5PYigpOylpZihuPXUoZS5QYigpLDcyKSxyPW4uYWsoKSxFdChyLDk5KSYmdShyLDE4KS5CYiZkYyYmKCF0LmV8fHIuR2ooKSE9STd8fHIuYWooKSE9MCkmJm4uZGQoKSE9bnVsbClyZXR1cm4gZS5VYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIGUuT2IoKX1mdW5jdGlvbiBXYWUodCxlKXt2YXIgbixyO2lmKHQuZil7Zm9yKDtlLlNiKCk7KWlmKG49dShlLlViKCksNzIpLHI9bi5haygpLEV0KHIsOTkpJiZ1KHIsMTgpLkJiJmRjJiYoIXQuZXx8ci5HaigpIT1JN3x8ci5haigpIT0wKSYmbi5kZCgpIT1udWxsKXJldHVybiBlLlBiKCksITA7cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5TYigpfWZ1bmN0aW9uICQ0dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2Zvcih3PWF1KHQuZS5UZygpLGUpLHI9MCxkPXQuaSxzPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihvPXNbaF0sdy5ybChvLmFrKCkpKXtpZihuPT1yKXJldHVybiBoOysrcixkPWgrMX1pZihuPT1yKXJldHVybiBkO3Rocm93IHJ0KG5ldyBtbyhYXytuK1MyK3IpKX1mdW5jdGlvbiBjZ24odCxlKXt2YXIgbixyLHMsbztpZih0LmYuYy5sZW5ndGg9PTApcmV0dXJuIG51bGw7Zm9yKG89bmV3IEF4LHI9bmV3IFModC5mKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw3MCkscz1uLm8sby5iPWIuTWF0aC5tYXgoby5iLHMuYSksby5hKz1zLmI7cmV0dXJuIG8uYSs9KHQuZi5jLmxlbmd0aC0xKSplLG99ZnVuY3Rpb24gdWduKHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9bmV3IGFyKGxyKHowKG4pLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksMTcpLCFWYShyKSYmISghVmEocikmJnIuYy5pLmM9PXIuZC5pLmMpJiYobz1fY2UodCxyLG4sbmV3IGNxdCksby5jLmxlbmd0aD4xJiYoZS5jW2UuYy5sZW5ndGhdPW8pKX1mdW5jdGlvbiBsZ24odCl7dmFyIGUsbixyLHM7Zm9yKG49bmV3IFFpLFVhKG4sdC5vKSxyPW5ldyBQcHQ7bi5iIT0wOyllPXUobi5iPT0wP251bGw6KFFuKG4uYiE9MCksY2gobixuLmEuYSkpLDUwOCkscz1faGUodCxlLCEwKSxzJiZ1ZShyLmEsZSk7Zm9yKDtyLmEuYy5sZW5ndGghPTA7KWU9dShtcmUociksNTA4KSxfaGUodCxlLCExKX1mdW5jdGlvbiBqZygpe2pnPVosbVN0PW5ldyBfeChPXywwKSxBYT1uZXcgX3goIkJPT0xFQU4iLDEpLGdjPW5ldyBfeCgiSU5UIiwyKSxUNz1uZXcgX3goIlNUUklORyIsMyksRG89bmV3IF94KCJET1VCTEUiLDQpLGNzPW5ldyBfeCgiRU5VTSIsNSksajY9bmV3IF94KCJFTlVNU0VUIiw2KSxxMT1uZXcgX3goIk9CSkVDVCIsNyl9ZnVuY3Rpb24gaF8odCxlKXt2YXIgbixyLHMsbyxoO3I9Yi5NYXRoLm1pbih0LmMsZS5jKSxvPWIuTWF0aC5taW4odC5kLGUuZCkscz1iLk1hdGgubWF4KHQuYyt0LmIsZS5jK2UuYiksaD1iLk1hdGgubWF4KHQuZCt0LmEsZS5kK2UuYSksczxyJiYobj1yLHI9cyxzPW4pLGg8byYmKG49byxvPWgsaD1uKSxSS3QodCxyLG8scy1yLGgtbyl9ZnVuY3Rpb24gUnUoKXtSdT1aLGZMdD1jdChvdChBZSwxKSx0ZSwyLDYsW0Y4dCxKRCxJSCxCMGUsREgsbnV0LG1IXSksaEx0PWN0KG90KEFlLDEpLHRlLDIsNixbRjh0LCJlbXB0eSIsSkQsWkQsImVsZW1lbnRPbmx5Il0pLGRMdD1jdChvdChBZSwxKSx0ZSwyLDYsW0Y4dCwicHJlc2VydmUiLCJyZXBsYWNlIix0MV0pLG1hPW5ldyBGS3R9ZnVuY3Rpb24gejR0KHQsZSxuKXt2YXIgcixzLG87aWYoZSE9bil7cj1lO2RvIExpKHQsci5jKSxzPXIuZSxzJiYobz1yLmQsRm0odCxvLmIsby5kKSxMaSh0LHMubikscj1GYShzKSk7d2hpbGUocyk7cj1uO2RvIG5hKHQsci5jKSxzPXIuZSxzJiYobz1yLmQsQk0odCxvLmIsby5kKSxuYSh0LHMubikscj1GYShzKSk7d2hpbGUocyl9fWZ1bmN0aW9uIFBzdCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2lmKHIuZi5jK3IuZy5jPT0wKWZvcihoPXQuYVt0LmNdLGQ9MCx3PWgubGVuZ3RoO2Q8dzsrK2Qpbz1oW2RdLGtpKHIsbyxuZXcgZ25lKHQsbyxuKSk7cmV0dXJuIHM9dShlYyhBbyhyLmYsZSkpLDY2Mykscy5iPTAscy5jPXMuZixzLmM9PTB8fEpCKHUoRmUocy5hLHMuYiksMjg3KSksc31mdW5jdGlvbiBpNigpe2k2PVosbzc9bmV3IFk5KCJNRURJQU5fTEFZRVIiLDApLGRTPW5ldyBZOSgiVEFJTF9MQVlFUiIsMSksYTc9bmV3IFk5KCJIRUFEX0xBWUVSIiwyKSxPeT1uZXcgWTkoIlNQQUNFX0VGRklDSUVOVF9MQVlFUiIsMyksSDQ9bmV3IFk5KCJXSURFU1RfTEFZRVIiLDQpLHE0PW5ldyBZOSgiQ0VOVEVSX0xBWUVSIiw1KX1mdW5jdGlvbiBoZ24odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6cmV0dXJuIGJlKCksTm47Y2FzZSAzOmNhc2UgNDpjYXNlIDU6cmV0dXJuIGJlKCksbXI7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6cmV0dXJuIGJlKCksQm47Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpyZXR1cm4gYmUoKSxIbjtkZWZhdWx0OnJldHVybiBiZSgpLFpvfX1mdW5jdGlvbiBmZ24odCxlKXt2YXIgbjtyZXR1cm4gdC5jLmxlbmd0aD09MD8hMToobj1oaWUoKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTcpKS5jLmkpLE9sKCksbj09KHN5KCksdDUpfHxuPT1KND8hMDpBOChwdShuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyBsUSksbmV3IEUkdChlKSkpfWZ1bmN0aW9uIHE0dCh0LGUsbil7dmFyIHIscyxvO2lmKCF0LmJbZS5nXSl7Zm9yKHQuYltlLmddPSEwLHI9biwhciYmKHI9bmV3IEEkKSxuaShyLmIsZSksbz10LmFbZS5nXS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxODgpLHMuYiE9ZSYmcTR0KHQscy5iLHIpLHMuYyE9ZSYmcTR0KHQscy5jLHIpLG5pKHIuYSxzKTtyZXR1cm4gcn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBmXygpe2ZfPVosd1Y9bmV3IHRDKCJST09UX1BST0MiLDApLGtodD1uZXcgdEMoIkZBTl9QUk9DIiwxKSxUaHQ9bmV3IHRDKCJORUlHSEJPUlNfUFJPQyIsMiksRWh0PW5ldyB0QygiTEVWRUxfSEVJR0hUIiwzKSxDaHQ9bmV3IHRDKCJOT0RFX1BPU0lUSU9OX1BST0MiLDQpLHhodD1uZXcgdEMoIkRFVFJFRUlGWUlOR19QUk9DIiw1KX1mdW5jdGlvbiBGc3QodCxlKXtpZihFdChlLDIzOSkpcmV0dXJuIHNYZSh0LHUoZSwzMykpO2lmKEV0KGUsMTg2KSlyZXR1cm4gYVhlKHQsdShlLDExOCkpO2lmKEV0KGUsNDM5KSlyZXR1cm4gaVhlKHQsdShlLDIwMikpO3Rocm93IHJ0KG5ldyBQbihrOHQrUXAobmV3IHdsKGN0KG90KFhuLDEpLEllLDEsNSxbZV0pKSkpKX1mdW5jdGlvbiBLYWUodCxlLG4pe3ZhciByLHM7aWYodGhpcy5mPXQscj11KEpuKHQuYixlKSwyODMpLHM9cj9yLmE6MCxibXQobixzKSxuPj0ocy8yfDApKWZvcih0aGlzLmU9cj9yLmM6bnVsbCx0aGlzLmQ9cztuKys8czspeVF0KHRoaXMpO2Vsc2UgZm9yKHRoaXMuYz1yP3IuYjpudWxsO24tLSA+MDspQnd0KHRoaXMpO3RoaXMuYj1lLHRoaXMuYT1udWxsfWZ1bmN0aW9uIGRnbih0LGUpe3ZhciBuLHI7ZS5hP0Yybih0LGUpOihuPXUoZ250KHQuYixlLmIpLDU3KSxuJiZuPT10LmFbZS5iLmZdJiZuLmEmJm4uYSE9ZS5iLmEmJm4uYy5GYyhlLmIpLHI9dShkbnQodC5iLGUuYiksNTcpLHImJnQuYVtyLmZdPT1lLmImJnIuYSYmci5hIT1lLmIuYSYmZS5iLmMuRmMociksZW50KHQuYixlLmIpKX1mdW5jdGlvbiBZYWUodCxlKXt2YXIgbixyO2lmKG49dShnbyh0LmIsZSksMTI0KSx1KHUoQWkodC5yLGUpLDIxKSw4NCkuZGMoKSl7bi5uLmI9MCxuLm4uYz0wO3JldHVybn1uLm4uYj10LkMuYixuLm4uYz10LkMuYyx0LkEuSGMoKF9sKCksVjIpKSYmbXVlKHQsZSkscj1IaG4odCxlKSxKc3QodCxlKT09KGM0KCksbWIpJiYocis9Mip0LncpLG4uYS5hPXJ9ZnVuY3Rpb24gWGFlKHQsZSl7dmFyIG4scjtpZihuPXUoZ28odC5iLGUpLDEyNCksdSh1KEFpKHQucixlKSwyMSksODQpLmRjKCkpe24ubi5kPTAsbi5uLmE9MDtyZXR1cm59bi5uLmQ9dC5DLmQsbi5uLmE9dC5DLmEsdC5BLkhjKChfbCgpLFYyKSkmJnl1ZSh0LGUpLHI9R2huKHQsZSksSnN0KHQsZSk9PShjNCgpLG1iKSYmKHIrPTIqdC53KSxuLmEuYj1yfWZ1bmN0aW9uIGdnbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBsZSxyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDY1KSx1ZShvLG5ldyBUYnQobiwhMCkpLHVlKG8sbmV3IFRidChuLCExKSk7cz1uZXcgSFh0KHQpLE85KHMuYS5hKSxjWnQobyx0LmIsbmV3IHdsKGN0KG90KHpnZSwxKSxJZSw2NzksMCxbc10pKSl9ZnVuY3Rpb24gUWFlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtyZXR1cm4gdz10LmEsSD10LmIsaz1lLmEsVj1lLmIsQz1uLmEsWT1uLmIsTT1yLmEsdHQ9ci5iLG89dypWLUgqayxoPUMqdHQtWSpNLHM9KHctaykqKFktdHQpLShILVYpKihDLU0pLGQ9KG8qKEMtTSktaCoody1rKSkvcyxGPShvKihZLXR0KS1oKihILVYpKS9zLG5ldyAkZShkLEYpfWZ1bmN0aW9uIEg0dCh0LGUpe3ZhciBuLHIscztpZighdC5kW2UucF0pe2Zvcih0LmRbZS5wXT0hMCx0LmFbZS5wXT0hMCxyPW5ldyBhcihscihNcyhlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSwhVmEobikmJihzPW4uZC5pLHQuYVtzLnBdP3VlKHQuYixuKTpINHQodCxzKSk7dC5hW2UucF09ITF9fWZ1bmN0aW9uIFphZSh0LGUsbil7dmFyIHI7c3dpdGNoKHI9MCx1KFEoZSwoVGUoKSxjdSkpLDE2MykuZyl7Y2FzZSAyOnI9Miotbit0LmEsKyt0LmE7YnJlYWs7Y2FzZSAxOnI9LW47YnJlYWs7Y2FzZSAzOnI9bjticmVhaztjYXNlIDQ6cj0yKm4rdC5iLCsrdC5ifXJldHVybiBWcyhlLChzZSgpLFRjKSkmJihyKz11KFEoZSxUYyksMTkpLmEpLHJ9ZnVuY3Rpb24gSmFlKHQsZSxuKXt2YXIgcixzLG87Zm9yKG4uemMoZSx0KSx1ZSh0Lm4sZSksbz10LnAuZWcoZSksZS5qPT10LnAuZmcoKT9laWUodC5lLG8pOmVpZSh0LmosbyksS2oodCkscz1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtuZXcgWXMoZSksbmV3IEVyKGUpXSkpKTt6cihzKTspcj11KExyKHMpLDExKSxuLl9iKHIpfHxKYWUodCxyLG4pfWZ1bmN0aW9uIEc0dCh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dShxZSh0LChjaSgpLHoyKSksMjEpLG4uSGMoKF9sKCksWHkpKT8ocj11KHFlKHQsdmIpLDIxKSxlPW5ldyB5byh1KHFlKHQsYTUpLDgpKSxyLkhjKChjbCgpLE03KSkmJihlLmE8PTAmJihlLmE9MjApLGUuYjw9MCYmKGUuYj0yMCkpLGUpOm5ldyBUYX1mdW5jdGlvbiBWNHQodCl7dmFyIGUsbixyO2lmKCF0LmIpe2ZvcihyPW5ldyBTayxuPW5ldyBNeChrXyh0KSk7bi5lIT1uLmkuZ2MoKTspZT11KG5zdChuKSwxOCksZS5CYiZkYyYmTXIocixlKTtleShyKSx0LmI9bmV3IHEzKCh1KFN0KFd0KChqcCgpLExuKS5vKSw4KSwxOCksci5pKSxyLmcpLHJsKHQpLmImPS05fXJldHVybiB0LmJ9ZnVuY3Rpb24gcGduKHQsZSl7dmFyIG4scixzLG8saCxkLHcsazt3PXUoWEkoUHgoZS5rKSxQdChYYSx4Yyw2MSwyLDAsMSkpLDEyMiksaz1lLmcsbj1fWnQoZSx3WzBdKSxzPUNadChlLHdbMV0pLHI9dnN0KHQsayxuLHMpLG89X1p0KGUsd1sxXSksZD1DWnQoZSx3WzBdKSxoPXZzdCh0LGssbyxkKSxyPD1oPyhlLmE9bixlLmM9cyk6KGUuYT1vLGUuYz1kKX1mdW5jdGlvbiBiZ24odCxlLG4pe3ZhciByLHMsbztmb3Iod3IobiwiUHJvY2Vzc29yIHNldCBuZWlnaGJvcnMiLDEpLHQuYT1lLmIuYj09MD8xOmUuYi5iLHM9bnVsbCxyPWVpKGUuYiwwKTshcyYmci5iIT1yLmQuYzspbz11KHRpKHIpLDg2KSxqZShSZShRKG8sKGZjKCksV3kpKSkpJiYocz1vKTtzJiZzdWUodCxuZXcgQ3Aocyksbiksb3Iobil9ZnVuY3Rpb24gdG9lKHQpe1RhdCgpO3ZhciBlLG4scixzO3JldHVybiByPWNkKHQsRXUoMzUpKSxlPXI9PS0xP3Q6dC5zdWJzdHIoMCxyKSxuPXI9PS0xP251bGw6dC5zdWJzdHIocisxKSxzPXJzbihRQXQsZSkscz9uIT1udWxsJiYocz1kcmUocywoT24obiksbikpKToocz1ENW4oZSksZnNuKFFBdCxlLHMpLG4hPW51bGwmJihzPWRyZShzLG4pKSksc31mdW5jdGlvbiBCc3QodCl7dmFyIGU7dm4oKTt2YXIgbixyLHMsbyxoLGQ7aWYoRXQodCw1NCkpZm9yKG89MCxzPXQuZ2MoKS0xO288czsrK28sLS1zKWU9dC5YYihvKSx0Ll9jKG8sdC5YYihzKSksdC5fYyhzLGUpO2Vsc2UgZm9yKG49dC5ZYygpLGg9dC5aYyh0LmdjKCkpO24uVGIoKTxoLlZiKCk7KXI9bi5QYigpLGQ9aC5VYigpLG4uV2IoZCksaC5XYihyKX1mdW5jdGlvbiB2Z24odCxlKXt2YXIgbixyLHM7d3IoZSwiRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nIiwxKSxuPVh0KHllKFEodCwoVGUoKSxCNikpKSkscj1YdCh5ZShRKHQsR3kpKSkscz1jOCh1KFEodCxWbCksMTAzKSksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyB5TCksbmV3IHZLdChuLHIscykpLG9yKGUpfWZ1bmN0aW9uIFJzdCh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IoZD0wLG89bmV3IFAzLHFwKG8sZSk7by5iIT1vLmM7KWZvcihoPXUoRngobyksMjE0KSxkKz1fc2UoaC5kLGguZSkscz1uZXcgUyhoLmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDM3KSxuPXUoRmUodC5iLHIucCksMjE0KSxuLnN8fChkKz1Sc3QodCxuKSk7cmV0dXJuIGR9ZnVuY3Rpb24gZW9lKHQsZSxuKXt2YXIgcixzO09uZSh0aGlzKSxlPT0ocXYoKSxiYik/TnModGhpcy5yLHQuYyk6TnModGhpcy53LHQuYyksbj09YmI/TnModGhpcy5yLHQuZCk6TnModGhpcy53LHQuZCksQmFlKHRoaXMsdCkscj1EaXQodC5jKSxzPURpdCh0LmQpLFNhZSh0aGlzLHIscyxzKSx0aGlzLm89KGJfKCksYi5NYXRoLmFicyhyLXMpPC4yKX1mdW5jdGlvbiBub2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihkPXUoSW4odC5hLDgpLDE5MzYpLGQhPW51bGwpZm9yKHM9ZCxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKW51bGwuam0oKTtyPW4sdC5hLkRiJjF8fCh3PW5ldyByWHQodCxuLGUpLHIudWkodykpLEV0KHIsNjcyKT91KHIsNjcyKS53aSh0LmEpOnIudGkoKT09dC5hJiZyLnZpKG51bGwpfWZ1bmN0aW9uIHdnbigpe3ZhciB0O3JldHVybiBMNWU/dSh3RSgoTXAoKSxVaCksTDIpLDE5NDUpOihENG4oKSx0PXUoRXQoRmMoKE1wKCksVWgpLEwyKSw1ODYpP0ZjKFVoLEwyKTpuZXcgaFh0LDU4NiksTDVlPSEwLHA1bih0KSxINW4odCksa2koKGJidCgpLFpBdCksdCxuZXcgaXgpLG1zdCh0KSx4byhVaCxMMix0KSx0KX1mdW5jdGlvbiBtZ24odCxlLG4scil7dmFyIHM7cmV0dXJuIHM9cDQodCxuLGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSksZSksczwwJiYocz1wNCh0LG4sY3Qob3QoQWUsMSksdGUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pLGUpKSxzPDA/ITE6KHIuZD1zLCEwKX1mdW5jdGlvbiB5Z24odCxlLG4scil7dmFyIHM7cmV0dXJuIHM9cDQodCxuLGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSksZSksczwwJiYocz1wNCh0LG4sY3Qob3QoQWUsMSksdGUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pLGUpKSxzPDA/ITE6KHIuZD1zLCEwKX1mdW5jdGlvbiB4Z24odCl7dmFyIGUsbixyO2ZvcihTYm4odCkscj1uZXcgbGUsbj1uZXcgUyh0LmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksdWUocixuZXcgTGJ0KGUsITApKSx1ZShyLG5ldyBMYnQoZSwhMSkpO2Nmbih0LmMpLGFJKHIsdC5iLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbdC5jXSkpKSxxcG4odCl9ZnVuY3Rpb24ga2duKHQpe3ZhciBlLG4scixzO2ZvcihuPW5ldyBDcixzPW5ldyBTKHQuZCk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTgxKSxlPXUoci5XZSgoc2UoKSxNNikpLDE3KSxBbyhuLmYsZSl8fGtpKG4sZSxuZXcgQlh0KGUpKSx1ZSh1KGVjKEFvKG4uZixlKSksNDU2KS5iLHIpO3JldHVybiBuZXcgUHUobmV3IGIxKG4pKX1mdW5jdGlvbiBFZ24odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPW5ldyBSUXQodC5qLmMubGVuZ3RoKSxuPW51bGwsbz1uZXcgUyh0LmopO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExKSxzLmohPW4mJihyLmI9PXIuY3x8cGNlKHIsbixlKSxybXQociksbj1zLmopLGg9Sm9lKHMpLGgmJlF3dChyLGgpO3IuYj09ci5jfHxwY2UocixuLGUpfWZ1bmN0aW9uIFRnbih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgaGEodC5iLDApO3IuYjxyLmQuZ2MoKTspbj0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDcwKSkscz11KFEobiwoVGUoKSxNZCkpLDI3Mikscz09KEExKCksWXkpJiYoRWwociksdWUoZS5iLG4pLFZzKG4sKHNlKCksTTYpKXx8SnQobixNNix0KSl9ZnVuY3Rpb24gQ2duKHQpe3ZhciBlLG4scixzLG87Zm9yKGU9TjAobmV3IGFyKGxyKE1zKHQpLmEuS2MoKSxuZXcgeikpKSxzPW5ldyBhcihscihqbyh0KS5hLktjKCksbmV3IHopKTt6cihzKTspcj11KExyKHMpLDE3KSxuPXIuYy5pLG89TjAobmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpKSxlPWIuTWF0aC5tYXgoZSxvKTtyZXR1cm4gZGUoZSl9ZnVuY3Rpb24gX2duKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iod3IobiwiUHJvY2Vzc29yIGFycmFuZ2Ugbm9kZSIsMSkscz1udWxsLG89bmV3IFFpLHI9ZWkoZS5iLDApOyFzJiZyLmIhPXIuZC5jOyloPXUodGkociksODYpLGplKFJlKFEoaCwoZmMoKSxXeSkpKSkmJihzPWgpO2hzKG8scyxvLmMuYixvLmMpLGZoZSh0LG8sUmMobiwxKSksb3Iobil9ZnVuY3Rpb24gcm9lKHQsZSxuKXt2YXIgcixzLG87cj11KHFlKHQsKGNpKCksQlYpKSwyMSkscz0wLG89MCxlLmE+bi5hJiYoci5IYygoY3koKSxxTykpP3M9KGUuYS1uLmEpLzI6ci5IYyhITykmJihzPWUuYS1uLmEpKSxlLmI+bi5iJiYoci5IYygoY3koKSxWTykpP289KGUuYi1uLmIpLzI6ci5IYyhHTykmJihvPWUuYi1uLmIpKSxBNHQodCxzLG8pfWZ1bmN0aW9uIGlvZSh0LGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGKXtFdCh0LkNiLDg4KSYmaHkocmwodSh0LkNiLDg4KSksNCksWGModCxuKSx0LmY9aCxyRSh0LGQpLHNFKHQsdyksbkUodCxrKSxpRSh0LEMpLFBnKHQsTSksYUUodCxGKSxOZyh0LCEwKSxJZyh0LHMpLHQub2sobyksZjIodCxlKSxyIT1udWxsJiYodC5pPW51bGwsZXoodCxyKSl9ZnVuY3Rpb24gc29lKHQpe3ZhciBlLG47aWYodC5mKXtmb3IoO3Qubj4wOyl7aWYoZT11KHQuay5YYih0Lm4tMSksNzIpLG49ZS5haygpLEV0KG4sOTkpJiZ1KG4sMTgpLkJiJmRjJiYoIXQuZXx8bi5HaigpIT1JN3x8bi5haigpIT0wKSYmZS5kZCgpIT1udWxsKXJldHVybiEwOy0tdC5ufXJldHVybiExfWVsc2UgcmV0dXJuIHQubj4wfWZ1bmN0aW9uIFU0dCh0LGUsbil7aWYodDwwKXJldHVybiB2XyhIaGUsY3Qob3QoWG4sMSksSWUsMSw1LFtuLGRlKHQpXSkpO2lmKGU8MCl0aHJvdyBydChuZXcgUG4oR2hlK2UpKTtyZXR1cm4gdl8oIiVzICglcykgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHNpemUgKCVzKSIsY3Qob3QoWG4sMSksSWUsMSw1LFtuLGRlKHQpLGRlKGUpXSkpfWZ1bmN0aW9uIFc0dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGs7aWYoaD1yLW4saDw3KXtmbG4oZSxuLHIsbyk7cmV0dXJufWlmKHc9bitzLGQ9citzLGs9dysoZC13Pj4xKSxXNHQoZSx0LHcsaywtcyxvKSxXNHQoZSx0LGssZCwtcyxvKSxvLnVlKHRbay0xXSx0W2tdKTw9MCl7Zm9yKDtuPHI7KUppKGUsbisrLHRbdysrXSk7cmV0dXJufU51bih0LHcsayxkLGUsbixyLG8pfWZ1bmN0aW9uIGFEKHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBsZSxyPW5ldyBTKHQuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxlLkxiKG4pJiYodWUocyxuZXcga2J0KG4sITApKSx1ZShzLG5ldyBrYnQobiwhMSkpKTtvZm4odC5lKSxjWnQocyx0LmQsbmV3IHdsKGN0KG90KHpnZSwxKSxJZSw2NzksMCxbdC5lXSkpKX1mdW5jdGlvbiBTZ24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iodz1lLmQscz1lLmIuaixkPW5ldyBTKHcpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMDEpLG89UHQoZGwsaTAsMjUscy5jLmxlbmd0aCwxNiwxKSxraSh0LmIsaCxvKSxuPWguYS5kLnAtMSxyPWguYy5kLnA7biE9cjspbj0obisxKSVzLmMubGVuZ3RoLG9bbl09ITB9ZnVuY3Rpb24gQWduKHQsZSl7Zm9yKHQucj1uZXcgTEkodC5wKSxscHQodC5yLHQpLFVhKHQuci5qLHQuaiksX2godC5qKSxuaSh0LmosZSksbmkodC5yLmUsZSksS2oodCksS2oodC5yKTt0LmYuYy5sZW5ndGghPTA7KUFVdCh1KEZlKHQuZiwwKSwxMjkpKTtmb3IoO3Quay5jLmxlbmd0aCE9MDspQVV0KHUoRmUodC5rLDApLDEyOSkpO3JldHVybiB0LnJ9ZnVuY3Rpb24ganN0KHQsZSxuKXt2YXIgcixzLG87aWYocz15bih0LlRnKCksZSkscj1lLXQuQWgoKSxyPDApaWYocylpZihzLklqKCkpbz10LllnKHMpLG8+PTA/dC5zaChvLG4pOkU1dCh0LHMsbik7ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrcy5uZSgpK1dfKSk7ZWxzZSB0aHJvdyBydChuZXcgUG4oeWRlK2UreGRlKSk7ZWxzZSBmaCh0LHIscyxuKX1mdW5jdGlvbiBhb2UodCl7dmFyIGUsbixyLHM7aWYobj11KHQsNDkpLnFoKCksbil0cnl7aWYocj1udWxsLGU9d0UoKE1wKCksVWgpLHF1ZShwbG4obikpKSxlJiYocz1lLnJoKCkscyYmKHI9cy5XayhFS2Uobi5lKSkpKSxyJiZyIT10KXJldHVybiBhb2Uocil9Y2F0Y2gobyl7aWYobz1XaShvKSwhRXQobyw2MCkpdGhyb3cgcnQobyl9cmV0dXJuIHR9ZnVuY3Rpb24gc3UodCxlLG4pe3ZhciByLHMsbyxoO2lmKGg9ZT09bnVsbD8wOnQuYi5zZShlKSxzPShyPXQuYS5nZXQoaCkscj8/bmV3IEFycmF5KSxzLmxlbmd0aD09MCl0LmEuc2V0KGgscyk7ZWxzZSBpZihvPWtyZSh0LGUscyksbylyZXR1cm4gby5lZChuKTtyZXR1cm4gSmkocyxzLmxlbmd0aCxuZXcgUlIoZSxuKSksKyt0LmMsYSQodC5iKSxudWxsfWZ1bmN0aW9uIG9vZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHckKHQuYSksVWQodC5hLChpeigpLFRWKSxUViksVWQodC5hLEU3LEU3KSxyPW5ldyBIcyxiaShyLEU3LChDeigpLE5odCkpLEd0KHFlKGUsKGF5KCksQmh0KSkpIT09R3QoKFJJKCksQ1YpKSYmYmkocixFNyxEaHQpLGJpKHIsRTcsT2h0KSxvVXQodC5hLHIpLG49VHEodC5hLGUpLG59ZnVuY3Rpb24gY29lKHQpe2lmKCF0KXJldHVybiBWcXQoKSx5Z2U7dmFyIGU9dC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7aWYoZSE9PXQpe3ZhciBuPUV1dFt0eXBlb2YgZV07cmV0dXJuIG4/bihlKTpqeXQodHlwZW9mIGUpfWVsc2UgcmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8dCBpbnN0YW5jZW9mIGIuQXJyYXk/bmV3IGx4KHQpOm5ldyBIayh0KX1mdW5jdGlvbiB1b2UodCxlLG4pe3ZhciByLHMsbztzd2l0Y2gobz10Lm8scj11KGdvKHQucCxuKSwyNDQpLHM9ci5pLHMuYj11RChyKSxzLmE9Y0Qocikscy5iPWIuTWF0aC5tYXgocy5iLG8uYSkscy5iPm8uYSYmIWUmJihzLmI9by5hKSxzLmM9LShzLmItby5hKS8yLG4uZyl7Y2FzZSAxOnMuZD0tcy5hO2JyZWFrO2Nhc2UgMzpzLmQ9by5ifWZhdChyKSxkYXQocil9ZnVuY3Rpb24gbG9lKHQsZSxuKXt2YXIgcixzLG87c3dpdGNoKG89dC5vLHI9dShnbyh0LnAsbiksMjQ0KSxzPXIuaSxzLmI9dUQocikscy5hPWNEKHIpLHMuYT1iLk1hdGgubWF4KHMuYSxvLmIpLHMuYT5vLmImJiFlJiYocy5hPW8uYikscy5kPS0ocy5hLW8uYikvMixuLmcpe2Nhc2UgNDpzLmM9LXMuYjticmVhaztjYXNlIDI6cy5jPW8uYX1mYXQociksZGF0KHIpfWZ1bmN0aW9uIExnbih0LGUpe3ZhciBuLHIscyxvLGg7aWYoIWUuZGMoKSl7aWYocz11KGUuWGIoMCksMTI4KSxlLmdjKCk9PTEpe0JjZSh0LHMscywxLDAsZSk7cmV0dXJufWZvcihuPTE7bjxlLmdjKCk7KShzLmp8fCFzLm8pJiYobz1SZm4oZSxuKSxvJiYocj11KG8uYSwxOSkuYSxoPXUoby5iLDEyOCksQmNlKHQscyxoLG4scixlKSxuPXIrMSxzPWgpKX19ZnVuY3Rpb24gTWduKHQpe3ZhciBlLG4scixzLG8saDtmb3IoaD1uZXcgUHUodC5kKSxYcyhoLG5ldyBMWCksZT0oZnEoKSxjdChvdCh5VHQsMSksYWUsMjcwLDAsW2xsdCxkbHQsdWx0LGJsdCxmbHQsaGx0LHBsdCxnbHRdKSksbj0wLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTAxKSxyPWVbbiVlLmxlbmd0aF0sX3BuKHMsciksKytufWZ1bmN0aW9uIElnbih0LGUpe3k0KCk7dmFyIG4scixzLG87aWYoZS5iPDIpcmV0dXJuITE7Zm9yKG89ZWkoZSwwKSxuPXUodGkobyksOCkscj1uO28uYiE9by5kLmM7KXtpZihzPXUodGkobyksOCksIShIOCh0LHIpJiZIOCh0LHMpKSlyZXR1cm4hMTtyPXN9cmV0dXJuISEoSDgodCxyKSYmSDgodCxuKSl9ZnVuY3Rpb24gSzR0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07cmV0dXJuIEM9bnVsbCxNPXQsaD1SMChNLCJ4Iiksbj1uZXcgYXp0KGUpLEVhbihuLmEsaCksZD1SMChNLCJ5Iikscj1uZXcgb3p0KGUpLFRhbihyLmEsZCksdz1SMChNLHpjdCkscz1uZXcgY3p0KGUpLENhbihzLmEsdyksaz1SMChNLCRjdCksbz1uZXcgdXp0KGUpLEM9KF9hbihvLmEsayksayksQ31mdW5jdGlvbiBoeSh0LGUpe2J1ZSh0LGUpLHQuYiYxJiYodC5hLmE9bnVsbCksdC5iJjImJih0LmEuZj1udWxsKSx0LmImNCYmKHQuYS5nPW51bGwsdC5hLmk9bnVsbCksdC5iJjE2JiYodC5hLmQ9bnVsbCx0LmEuZT1udWxsKSx0LmImOCYmKHQuYS5iPW51bGwpLHQuYiYzMiYmKHQuYS5qPW51bGwsdC5hLmM9bnVsbCl9ZnVuY3Rpb24gRGduKHQsZSl7dmFyIG4scixzO2lmKHM9MCxlLmxlbmd0aD4wKXRyeXtzPSRsKGUsX2EsdmkpfWNhdGNoKG8pe3Rocm93IG89V2kobyksRXQobywxMjcpPyhyPW8scnQobmV3IEYkKHIpKSk6cnQobyl9cmV0dXJuIG49KCF0LmEmJih0LmE9bmV3IHp0dCh0KSksdC5hKSxzPG4uaSYmcz49MD91KFN0KG4scyksNTYpOm51bGx9ZnVuY3Rpb24gT2duKHQsZSl7aWYodDwwKXJldHVybiB2XyhIaGUsY3Qob3QoWG4sMSksSWUsMSw1LFsiaW5kZXgiLGRlKHQpXSkpO2lmKGU8MCl0aHJvdyBydChuZXcgUG4oR2hlK2UpKTtyZXR1cm4gdl8oIiVzICglcykgbXVzdCBiZSBsZXNzIHRoYW4gc2l6ZSAoJXMpIixjdChvdChYbiwxKSxJZSwxLDUsWyJpbmRleCIsZGUodCksZGUoZSldKSl9ZnVuY3Rpb24gTmduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gVHU7Zm9yKG89bmV3IGMyKEthLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/VnIoby5hLG8uYik6by5hPW5ldyBJbChvLmQpLGNDKG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFBnbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIFR1O2ZvcihvPW5ldyBjMihLYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sby5hP1ZyKG8uYSxvLmIpOm8uYT1uZXcgSWwoby5kKSxjQyhvLmEsIiIrZSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBGZ24odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBUdTtmb3Iobz1uZXcgYzIoS2EsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG8uYT9WcihvLmEsby5iKTpvLmE9bmV3IElsKG8uZCksY0Moby5hLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQmduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gVHU7Zm9yKG89bmV3IGMyKEthLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/VnIoby5hLG8uYik6by5hPW5ldyBJbChvLmQpLGNDKG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIGhvZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobj10LmIuYy5sZW5ndGgscz1GZSh0LmIsZSk7ZSoyKzE8biYmKHI9KG89MiplKzEsaD1vKzEsZD1vLGg8biYmdC5hLnVlKEZlKHQuYixoKSxGZSh0LmIsbykpPDAmJihkPWgpLGQpLCEodC5hLnVlKHMsRmUodC5iLHIpKTwwKSk7KWFoKHQuYixlLEZlKHQuYixyKSksZT1yO2FoKHQuYixlLHMpfWZ1bmN0aW9uIFk0dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGssQztmb3IoR3QodCk9PT1HdChuKSYmKHQ9dC5zbGljZShlLGUrcyksZT0wKSx3PW4sZD1lLGs9ZStzO2Q8azspaD1iLk1hdGgubWluKGQrMWU0LGspLHM9aC1kLEM9dC5zbGljZShkLGgpLEMuc3BsaWNlKDAsMCxyLG8/czowKSxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHcsQyksZD1oLHIrPXN9ZnVuY3Rpb24gJHN0KHQsZSxuKXt2YXIgcixzO3JldHVybiByPW4uZCxzPW4uZSx0Lmdbci5kXTw9dC5pW2UuZF0mJnQuaVtlLmRdPD10Lmlbci5kXSYmdC5nW3MuZF08PXQuaVtlLmRdJiZ0LmlbZS5kXTw9dC5pW3MuZF0/ISh0Lmlbci5kXTx0Lmlbcy5kXSk6dC5pW3IuZF08dC5pW3MuZF19ZnVuY3Rpb24gZm9lKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKHI9dC5hLmMubGVuZ3RoLHI+MClmb3IoaD10LmMuZCxkPXQuZC5kLHM9dWQobmEobmV3ICRlKGQuYSxkLmIpLGgpLDEvKHIrMSkpLG89bmV3ICRlKGguYSxoLmIpLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw1NTkpLGUuZC5hPW8uYSxlLmQuYj1vLmIsTGkobyxzKX1mdW5jdGlvbiBkb2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3Iodz1zcyxvPW5ldyBTKENjZSh0LmIpKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTY4KSxkPW5ldyBTKENjZShlLmIpKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNjgpLHI9VGNuKHMuYSxzLmIsaC5hLGguYixuKSx3PWIuTWF0aC5taW4odyxyKTtyZXR1cm4gd31mdW5jdGlvbiBGcyh0LGUpe2lmKCFlKXRocm93IHJ0KG5ldyBMOSk7aWYodC5qPWUsIXQuZClzd2l0Y2godC5qLmcpe2Nhc2UgMTp0LmEuYT10Lm8uYS8yLHQuYS5iPTA7YnJlYWs7Y2FzZSAyOnQuYS5hPXQuby5hLHQuYS5iPXQuby5iLzI7YnJlYWs7Y2FzZSAzOnQuYS5hPXQuby5hLzIsdC5hLmI9dC5vLmI7YnJlYWs7Y2FzZSA0OnQuYS5hPTAsdC5hLmI9dC5vLmIvMn19ZnVuY3Rpb24gUmduKHQsZSl7dmFyIG4scixzO3JldHVybiBFdChlLmcsMTApJiZ1KGUuZywxMCkuaz09KEduKCkseHMpP3NzOihzPUh4KGUpLHM/Yi5NYXRoLm1heCgwLHQuYi8yLS41KToobj1aMyhlKSxuPyhyPVh0KHllKGl5KG4sKFRlKCksQncpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTpzcykpfWZ1bmN0aW9uIGpnbih0LGUpe3ZhciBuLHIscztyZXR1cm4gRXQoZS5nLDEwKSYmdShlLmcsMTApLms9PShHbigpLHhzKT9zczoocz1IeChlKSxzP2IuTWF0aC5tYXgoMCx0LmIvMi0uNSk6KG49WjMoZSksbj8ocj1YdCh5ZShpeShuLChUZSgpLEJ3KSkpKSxiLk1hdGgubWF4KDAsci8yLS41KSk6c3MpKX1mdW5jdGlvbiAkZ24odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPVFDKHQuZCx0LmUpLG89aC5LYygpO28uT2IoKTspZm9yKHM9dShvLlBiKCksMTEpLHI9dC5lPT0oYmUoKSxCbik/cy5lOnMuZyxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE3KSwhVmEoZSkmJmUuYy5pLmMhPWUuZC5pLmMmJihVMG4odCxlKSwrK3QuZiwrK3QuYyl9ZnVuY3Rpb24gZ29lKHQsZSl7dmFyIG4scjtpZihlLmRjKCkpcmV0dXJuIHZuKCksdm4oKSxpbztmb3Iocj1uZXcgbGUsdWUocixkZShfYSkpLG49MTtuPHQuZjsrK24pdC5hPT1udWxsJiZwdWUodCksdC5hW25dJiZ1ZShyLGRlKG4pKTtyZXR1cm4gci5jLmxlbmd0aD09MT8odm4oKSx2bigpLGlvKToodWUocixkZSh2aSkpLHptbihlLHIpKX1mdW5jdGlvbiB6Z24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztoPWUuYy5pLmshPShHbigpLERzKSx3PWg/ZS5kOmUuYyxuPW4xbihlLHcpLmkscz11KEpuKHQuayx3KSwxMjEpLHI9dC5pW24ucF0uYSxyS3Qody5pKTwobi5jP1JvKG4uYy5hLG4sMCk6LTEpPyhvPXMsZD1yKToobz1yLGQ9cyksdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLDQpLG8pLGQpKX1mdW5jdGlvbiBxZ24odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgUWIocyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHc9Z3N0KHQsczYoWG0obixoLmEpKSksdyYmKG89KCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSxNcihvLHcpKX1mdW5jdGlvbiBIZ24odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgUWIocyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHc9Z3N0KHQsczYoWG0obixoLmEpKSksdyYmKG89KCFlLmMmJihlLmM9bmV3IENuKGJyLGUsNSw4KSksZS5jKSxNcihvLHcpKX1mdW5jdGlvbiBvRCh0LGUsbil7dmFyIHIscztyPWUuYSZ0LmYsZS5iPXQuYltyXSx0LmJbcl09ZSxzPWUuZiZ0LmYsZS5kPXQuY1tzXSx0LmNbc109ZSxuPyhlLmU9bi5lLGUuZT9lLmUuYz1lOnQuYT1lLGUuYz1uLmMsZS5jP2UuYy5lPWU6dC5lPWUpOihlLmU9dC5lLGUuYz1udWxsLHQuZT90LmUuYz1lOnQuYT1lLHQuZT1lKSwrK3QuaSwrK3QuZ31mdW5jdGlvbiBwb2UodCl7dmFyIGUsbixyO2lmKGU9dC5QYigpLCF0Lk9iKCkpcmV0dXJuIGU7Zm9yKHI9aGMoVnIobmV3IF9wLCJleHBlY3RlZCBvbmUgZWxlbWVudCBidXQgd2FzOiA8IiksZSksbj0wO248NCYmdC5PYigpO24rKyloYygoci5hKz1LYSxyKSx0LlBiKCkpO3Rocm93IHQuT2IoKSYmKHIuYSs9IiwgLi4uIiksci5hKz0iPiIscnQobmV3IFBuKHIuYSkpfWZ1bmN0aW9uIEdnbih0LGUpe3ZhciBuO2UuZD9lLmQuYj1lLmI6dC5hPWUuYixlLmI/ZS5iLmQ9ZS5kOnQuZT1lLmQsIWUuZSYmIWUuYz8obj11KFV4KHQuYixlLmEpLDI4Myksbi5hPTAsKyt0LmMpOihuPXUoSm4odC5iLGUuYSksMjgzKSwtLW4uYSxlLmU/ZS5lLmM9ZS5jOm4uYj1lLmMsZS5jP2UuYy5lPWUuZTpuLmM9ZS5lKSwtLXQuZH1mdW5jdGlvbiBWZ24odCl7dmFyIGUsbjtyZXR1cm4gbj0tdC5hLGU9Y3Qob3QobWgsMSksdmQsMjUsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSksbjwwJiYoZVswXT00NSxuPS1uKSxlWzFdPWVbMV0rKChuLzYwfDApLzEwfDApJm1zLGVbMl09ZVsyXSsobi82MHwwKSUxMCZtcyxlWzNdPWVbM10rKG4lNjAvMTB8MCkmbXMsZVs0XT1lWzRdK24lMTAmbXMsQWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBib2UodCxlLG4pe3ZhciByLHM7Zm9yKHI9ZS5kLHM9bi5kO3IuYS1zLmE9PTAmJnIuYi1zLmI9PTA7KXIuYSs9b2wodCwyNikqTF8rb2wodCwyNykqTV8tLjUsci5iKz1vbCh0LDI2KSpMXytvbCh0LDI3KSpNXy0uNSxzLmErPW9sKHQsMjYpKkxfK29sKHQsMjcpKk1fLS41LHMuYis9b2wodCwyNikqTF8rb2wodCwyNykqTV8tLjV9ZnVuY3Rpb24gWDR0KHQpe3ZhciBlLG4scixzO2Zvcih0Lmc9bmV3IGVfKHUoQXIoWGEpLDI5MCkpLHI9MCxuPShiZSgpLE5uKSxlPTA7ZTx0LmouYy5sZW5ndGg7ZSsrKXM9dShGZSh0LmosZSksMTEpLHMuaiE9biYmKHIhPWUmJk54KHQuZyxuLG5ldyBsYShkZShyKSxkZShlKSkpLG49cy5qLHI9ZSk7TngodC5nLG4sbmV3IGxhKGRlKHIpLGRlKGUpKSl9ZnVuY3Rpb24gVWduKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihyPTAsbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWZvcihlPXUoSihuKSwyOSksbz1uZXcgUyhlLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCkscy5wPXIrKyxkPW5ldyBTKHMuaik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTEpLGgucD1yKyt9ZnVuY3Rpb24gdm9lKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsaztpZihlKWZvcihkPWUuS2MoKTtkLk9iKCk7KWZvcihoPXUoZC5QYigpLDEwKSxrPWo1dChoLChzbygpLGV1KSxuKS5LYygpO2suT2IoKTspdz11KGsuUGIoKSwxMSksbz11KGVjKEFvKHMuZix3KSksMTEyKSxvfHwobz1uZXcgTEkodC5kKSxyLmNbci5jLmxlbmd0aF09byxKYWUobyx3LHMpKX1mdW5jdGlvbiBRNHQodCxlKXt2YXIgbixyLHM7aWYocz1FNCgoUnUoKSxtYSksdC5UZygpLGUpLHMpdG8oKSx1KHMsNjYpLk9qKCl8fChzPXF4KEVvKG1hLHMpKSkscj0obj10LllnKHMpLHUobj49MD90Ll9nKG4sITAsITApOmx3KHQscywhMCksMTUzKSksdShyLDIxNSkub2woZSk7ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK1dfKSl9ZnVuY3Rpb24gWjR0KHQpe3ZhciBlLG47cmV0dXJuIHQ+LTB4ODAwMDAwMDAwMDAwJiZ0PDB4ODAwMDAwMDAwMDAwP3Q9PTA/MDooZT10PDAsZSYmKHQ9LXQpLG49cHMoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2codCkvLjY5MzE0NzE4MDU1OTk0NTMpKSwoIWV8fHQhPWIuTWF0aC5wb3coMixuKSkmJisrbixuKTpGbmUoa3UodCkpfWZ1bmN0aW9uIFdnbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobz1uZXcgQTAsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMjkpLGg9ZS5hLGQ9ZS5iLCEoby5hLl9iKGgpfHxvLmEuX2IoZCkpJiYocz1oLHI9ZCxoLmUuYitoLmouYj4yJiZkLmUuYitkLmouYjw9MiYmKHM9ZCxyPWgpLG8uYS56YyhzLG8pLHMucT1yKTtyZXR1cm4gb31mdW5jdGlvbiB3b2UodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9bmV3IEgwKHQpLExvKHIsZSksSnQociwoc2UoKSxHRyksZSksSnQociwoVGUoKSxvcyksKG9hKCksVmMpKSxKdChyLExkLChRZCgpLFBWKSksXzAociwoR24oKSx4cykpLG49bmV3IE1jLFVvKG4sciksRnMobiwoYmUoKSxCbikpLHM9bmV3IE1jLFVvKHMsciksRnMocyxIbikscn1mdW5jdGlvbiBtb2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgZWV0KChadigpLE9PKSk7Y2FzZSAxOnJldHVybiBuZXcgT0I7Y2FzZSAyOnJldHVybiBuZXcgSko7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGNyb3NzaW5nIG1pbmltaXplciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24geW9lKHQsZSl7dmFyIG4scixzLG8saDtmb3IodC5jW2UucF09ITAsdWUodC5hLGUpLGg9bmV3IFMoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTEpLHI9bmV3IFMxKG8uYik7Vm8oci5hKXx8Vm8oci5iKTspbj11KFZvKHIuYSk/SihyLmEpOkooci5iKSwxNykscz1haG4obyxuKS5pLHQuY1tzLnBdfHx5b2UodCxzKX1mdW5jdGlvbiB4b2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGg9MCxuPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwzMyksZD1lLmcscz1lLmYscj1iLk1hdGguc3FydChkKmQrcypzKSxoPWIuTWF0aC5tYXgocixoKSxvPXhvZShlKSxoPWIuTWF0aC5tYXgobyxoKTtyZXR1cm4gaH1mdW5jdGlvbiBRdSgpe1F1PVoseGI9bmV3IHNDKCJPVVRTSURFIiwwKSx0Zz1uZXcgc0MoIklOU0lERSIsMSksdE49bmV3IHNDKCJORVhUX1RPX1BPUlRfSUZfUE9TU0lCTEUiLDIpLEpTPW5ldyBzQygiQUxXQVlTX1NBTUVfU0lERSIsMyksWlM9bmV3IHNDKCJBTFdBWVNfT1RIRVJfU0FNRV9TSURFIiw0KSxHNj1uZXcgc0MoIlNQQUNFX0VGRklDSUVOVCIsNSl9ZnVuY3Rpb24ga29lKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7cmV0dXJuIHI9Q2luKHQsKHM9KFR2KCksbz1uZXcgQnB0LG8pLG4mJkM1dChzLG4pLHMpLGUpLHFDKHIsTzAoZSxDZCkpLEp6KGUsciksbGJuKGUsciksSzR0KGUsciksaD1lLGQ9VXYoaCwicG9ydHMiKSx3PW5ldyBDVnQodCxyKSxYYm4ody5hLHcuYixkKSx3aXQodCxlLHIpLG1jbih0LGUscikscn1mdW5jdGlvbiBLZ24odCl7dmFyIGUsbjtyZXR1cm4gbj0tdC5hLGU9Y3Qob3QobWgsMSksdmQsMjUsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSksbjwwJiYoZVswXT00NSxuPS1uKSxlWzFdPWVbMV0rKChuLzYwfDApLzEwfDApJm1zLGVbMl09ZVsyXSsobi82MHwwKSUxMCZtcyxlWzRdPWVbNF0rKG4lNjAvMTB8MCkmbXMsZVs1XT1lWzVdK24lMTAmbXMsQWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBZZ24odCl7dmFyIGU7cmV0dXJuIGU9Y3Qob3QobWgsMSksdmQsMjUsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSksdDw9MCYmKGVbM109NDMsdD0tdCksZVs0XT1lWzRdKygodC82MHwwKS8xMHwwKSZtcyxlWzVdPWVbNV0rKHQvNjB8MCklMTAmbXMsZVs3XT1lWzddKyh0JTYwLzEwfDApJm1zLGVbOF09ZVs4XSt0JTEwJm1zLEFoKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gWGduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gVHU7Zm9yKG89bmV3IGMyKEthLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/VnIoby5hLG8uYik6by5hPW5ldyBJbChvLmQpLGNDKG8uYSwiIitFQyhlKSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBKNHQodCxlKXt2YXIgbixyLHM7Zm9yKHM9dmkscj1uZXcgUyhvNChlKSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxuLmYmJiF0LmNbbi5jXSYmKHQuY1tuLmNdPSEwLHM9Yi5NYXRoLm1pbihzLEo0dCh0LF96KG4sZSkpKSk7cmV0dXJuIHQuaVtlLmRdPXQuaix0LmdbZS5kXT1iLk1hdGgubWluKHMsdC5qKyspLHQuZ1tlLmRdfWZ1bmN0aW9uIEVvZSh0LGUpe3ZhciBuLHIscztmb3Iocz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmUuYj0obj1yLmIsbi5YZSgoY2koKSxobCkpP24uSGYoKT09KGJlKCksTm4pPy1uLnJmKCkuYi1YdCh5ZShuLldlKGhsKSkpOlh0KHllKG4uV2UoaGwpKSk6bi5IZigpPT0oYmUoKSxObik/LW4ucmYoKS5iOjApfWZ1bmN0aW9uIFFnbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj1hMnQodC5lKSxvPXVkKEJNKG5jKHMydCh0LmUpKSx0LmQqdC5hLHQuYyp0LmIpLC0uNSksZT1uLmEtby5hLHM9bi5iLW8uYixkPTA7ZDx0LmM7ZCsrKXtmb3Iocj1lLGg9MDtoPHQuZDtoKyspeWxuKHQuZSxuZXcgaWgocixzLHQuYSx0LmIpKSYmYnEodCxoLGQsITEsITApLHIrPXQuYTtzKz10LmJ9fWZ1bmN0aW9uIFpnbih0KXt2YXIgZSxuLHI7aWYoamUoUmUocWUodCwoY2koKSxXTykpKSkpe2ZvcihyPW5ldyBsZSxuPW5ldyBhcihscihHMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDc5KSx1dyhlKSYmamUoUmUocWUoZSxzZnQpKSkmJihyLmNbci5jLmxlbmd0aF09ZSk7cmV0dXJuIHJ9ZWxzZSByZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIHM2KHQpe3ZhciBlLG47aWYobj0hMSxFdCh0LDIwNCkpcmV0dXJuIG49ITAsdSh0LDIwNCkuYTtpZighbiYmRXQodCwyNTgpJiYoZT11KHQsMjU4KS5hJTE9PTAsZSkpcmV0dXJuIG49ITAsZGUoVlllKHUodCwyNTgpLmEpKTt0aHJvdyBydChuZXcgYWQoIklkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW50ZWdlcjogJyIrdCsiJy4iKSl9ZnVuY3Rpb24gSmduKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihvPW51bGwscz1uZXcgTll0KCghdC5hJiYodC5hPW5ldyB6dHQodCkpLHQuYSkpO2k1dChzKTspaWYobj11KGFxKHMpLDU2KSxyPShoPW4uVGcoKSxkPShrNChoKSxoLm8pLCFkfHwhbi5taChkKT9udWxsOmN2dChkaXQoZCksbi5haChkKSkpLHIhPW51bGwmJmhuKHIsZSkpe289bjticmVha31yZXR1cm4gb31mdW5jdGlvbiBUb2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoQmwobiwib2NjdXJyZW5jZXMiKSxuPT0wKXJldHVybiBkPXUobnkoJHgodC5hKSxlKSwxNCksZD9kLmdjKCk6MDtpZihoPXUobnkoJHgodC5hKSxlKSwxNCksIWgpcmV0dXJuIDA7aWYobz1oLmdjKCksbj49byloLiRiKCk7ZWxzZSBmb3Iocz1oLktjKCkscj0wO3I8bjtyKyspcy5QYigpLHMuUWIoKTtyZXR1cm4gb31mdW5jdGlvbiB0cG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiBCbChuLCJvbGRDb3VudCIpLEJsKDAsIm5ld0NvdW50Iikscj11KG55KCR4KHQuYSksZSksMTQpLChyP3IuZ2MoKTowKT09bj8oQmwoMCwiY291bnQiKSxzPShvPXUobnkoJHgodC5hKSxlKSwxNCksbz9vLmdjKCk6MCksaD0tcyxoPjA/WHB0KCk6aDwwJiZUb2UodCxlLC1oKSwhMCk6ITF9ZnVuY3Rpb24gY0QodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MCl7Zm9yKGg9YXNlKHQsITApLGU9MCxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbj4wJiYoZCs9biwrK2UpO2U+MSYmKGQrPXQuYyooZS0xKSl9ZWxzZSBkPUpxdChsbmUoSmooUmkoJG50KHQuYSksbmV3IEFsKSxuZXcgdWEpKSk7cmV0dXJuIGQ+MD9kK3Qubi5kK3Qubi5hOjB9ZnVuY3Rpb24gdUQodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MClkPUpxdChsbmUoSmooUmkoJG50KHQuYSksbmV3IFpsKSxuZXcgUGEpKSk7ZWxzZXtmb3IoaD1vc2UodCwhMCksZT0wLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxuPjAmJihkKz1uLCsrZSk7ZT4xJiYoZCs9dC5jKihlLTEpKX1yZXR1cm4gZD4wP2QrdC5uLmIrdC5uLmM6MH1mdW5jdGlvbiBlcG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz11KGdvKHQuYixlKSwxMjQpLG49by5hLHM9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksci5jJiYobi5hPWIuTWF0aC5tYXgobi5hLEJ2dChyLmMpKSk7aWYobi5hPjApc3dpdGNoKGUuZyl7Y2FzZSAyOm8ubi5jPXQuczticmVhaztjYXNlIDQ6by5uLmI9dC5zfX1mdW5jdGlvbiBucG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49dShRKGUsKFpmKCksdDcpKSwxOSkuYS11KFEodCx0NyksMTkpLmEsbj09MD8ocj1uYShuYyh1KFEodCwoR3AoKSxkTykpLDgpKSx1KFEodCxsUyksOCkpLHM9bmEobmModShRKGUsZE8pLDgpKSx1KFEoZSxsUyksOCkpLExzKHIuYSpyLmIscy5hKnMuYikpOm59ZnVuY3Rpb24gcnBuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXUoUShlLChodygpLEVWKSksMTkpLmEtdShRKHQsRVYpLDE5KS5hLG49PTA/KHI9bmEobmModShRKHQsKGZjKCksRk8pKSw4KSksdShRKHQsQlMpLDgpKSxzPW5hKG5jKHUoUShlLEZPKSw4KSksdShRKGUsQlMpLDgpKSxMcyhyLmEqci5iLHMuYSpzLmIpKTpufWZ1bmN0aW9uIENvZSh0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBfcCxuLmErPSJlXyIsZT1mY24odCksZSE9bnVsbCYmKG4uYSs9IiIrZSksdC5jJiZ0LmQmJihWcigobi5hKz0iICIsbiksV3oodC5jKSksVnIoaGMoKG4uYSs9IlsiLG4pLHQuYy5pKSwiXSIpLFZyKChuLmErPVBvdCxuKSxXeih0LmQpKSxWcihoYygobi5hKz0iWyIsbiksdC5kLmkpLCJdIikpLG4uYX1mdW5jdGlvbiBfb2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgV0w7Y2FzZSAxOnJldHVybiBuZXcgUUo7Y2FzZSAyOnJldHVybiBuZXcgWEo7Y2FzZSAzOnJldHVybiBuZXcgTkI7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBwaGFzZSAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gdDV0KHQsZSxuLHIscyl7dmFyIG87c3dpdGNoKG89MCxzLmcpe2Nhc2UgMTpvPWIuTWF0aC5tYXgoMCxlLmIrdC5iLShuLmIrcikpO2JyZWFrO2Nhc2UgMzpvPWIuTWF0aC5tYXgoMCwtdC5iLXIpO2JyZWFrO2Nhc2UgMjpvPWIuTWF0aC5tYXgoMCwtdC5hLXIpO2JyZWFrO2Nhc2UgNDpvPWIuTWF0aC5tYXgoMCxlLmErdC5hLShuLmErcikpfXJldHVybiBvfWZ1bmN0aW9uIGlwbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgUWIocyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLG89XzgobixoLmEpLHA4dCBpbiBvLmF8fFZjdCBpbiBvLmE/cHduKHQsbyxlKTp4NW4odCxvLGUpLHFYZSh1KEpuKHQuYixvRShvKSksNzkpKX1mdW5jdGlvbiBlNXQodCl7dmFyIGUsbjtzd2l0Y2godC5iKXtjYXNlLTE6cmV0dXJuITA7Y2FzZSAwOnJldHVybiBuPXQudCxuPjF8fG49PS0xPyh0LmI9LTEsITApOihlPUxoKHQpLGUmJih0bygpLGUuQ2ooKT09azBlKT8odC5iPS0xLCEwKToodC5iPTEsITEpKTtkZWZhdWx0OmNhc2UgMTpyZXR1cm4hMX19ZnVuY3Rpb24gc3BuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0oIWUucyYmKGUucz1uZXcgaGUoQXUsZSwyMSwxNykpLGUucyksbz1udWxsLHM9MCxoPXIuaTtzPGg7KytzKXN3aXRjaChuPXUoU3QocixzKSwxNzApLCR2KEVvKHQsbikpKXtjYXNlIDI6Y2FzZSAzOiFvJiYobz1uZXcgbGUpLG8uY1tvLmMubGVuZ3RoXT1ufXJldHVybiBvfHwodm4oKSx2bigpLGlvKX1mdW5jdGlvbiBuNXQodCxlKXt2YXIgbixyLHMsbztpZihmaSh0KSx0LmMhPTB8fHQuYSE9MTIzKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZGUpKSkpO2lmKG89ZT09MTEyLHI9dC5kLG49bDgodC5pLDEyNSxyKSxuPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFZkZSkpKSk7cmV0dXJuIHM9RGwodC5pLHIsbiksdC5kPW4rMSxmdGUocyxvLCh0LmUmNTEyKT09NTEyKX1mdW5jdGlvbiBhcG4odCl7dmFyIGU7aWYoZT11KFEodCwoVGUoKSxFUykpLDMxNCksZT09KFl4KCksUzYpKXRocm93IHJ0KG5ldyBGOSgiVGhlIGhpZXJhcmNoeSBhd2FyZSBwcm9jZXNzb3IgIitlKyIgaW4gY2hpbGQgbm9kZSAiK3QrIiBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIHJvb3Qgbm9kZSBzcGVjaWZpZXMgdGhlIHNhbWUgaGllcmFyY2hpY2FsIHByb2Nlc3Nvci4iKSl9ZnVuY3Rpb24gb3BuKHQsZSl7bGYoKTt2YXIgbixyLHMsbyxoLGQ7Zm9yKG49bnVsbCxoPWUuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTI4KSwhby5vJiYocj1FWGUoby5hKSxzPWx0bihvLmEpLGQ9bmV3IHhfKHIscyxudWxsLHUoby5kLmEuZWMoKS5LYygpLlBiKCksMTcpKSx1ZShkLmMsby5hKSx0LmNbdC5jLmxlbmd0aF09ZCxuJiZ1ZShuLmQsZCksbj1kKX1mdW5jdGlvbiBjcG4odCxlKXt2YXIgbixyLHM7aWYoIWUpcml0KHQsbnVsbCksJDgodCxudWxsKTtlbHNlIGlmKGUuaSY0KWZvcihyPSJbXSIsbj1lLmM7O249bi5jKXtpZighKG4uaSY0KSl7cz1XcHQoKEwwKG4pLG4ubytyKSkscml0KHQscyksJDgodCxzKTticmVha31yKz0iW10ifWVsc2Ugcz1XcHQoKEwwKGUpLGUubykpLHJpdCh0LHMpLCQ4KHQscyk7dC55ayhlKX1mdW5jdGlvbiBkXyh0LGUsbixyLHMpe3ZhciBvLGgsZCx3O3JldHVybiB3PWNudCh0LHUocyw1NikpLEd0KHcpIT09R3Qocyk/KGQ9dSh0Lmdbbl0sNzIpLG89WWQoZSx3KSxmQyh0LG4sU3N0KHQsbixvKSksbWwodC5lKSYmKGg9enAodCw5LG8uYWsoKSxzLHcsciwhMSksdjR0KGgsbmV3IEYwKHQuZSw5LHQuYyxkLG8sciwhMSkpLFVydChoKSksdyk6c31mdW5jdGlvbiB1cG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3Iocj11KEFpKHQuYyxlKSwxNSkscz11KEFpKHQuYyxuKSwxNSksbz1yLlpjKHIuZ2MoKSksaD1zLlpjKHMuZ2MoKSk7by5TYigpJiZoLlNiKCk7KWlmKGQ9dShvLlViKCksMTkpLHc9dShoLlViKCksMTkpLGQhPXcpcmV0dXJuIGR1KGQuYSx3LmEpO3JldHVybiFvLk9iKCkmJiFoLk9iKCk/MDpvLk9iKCk/MTotMX1mdW5jdGlvbiBTb2UodCxlKXt2YXIgbixyLHM7dHJ5e3JldHVybiBzPXRpbih0LmEsZSksc31jYXRjaChvKXtpZihvPVdpKG8pLEV0KG8sMzIpKXt0cnl7aWYocj0kbChlLF9hLHZpKSxuPUhmKHQuYSkscj49MCYmcjxuLmxlbmd0aClyZXR1cm4gbltyXX1jYXRjaChoKXtpZihoPVdpKGgpLCFFdChoLDEyNykpdGhyb3cgcnQoaCl9cmV0dXJuIG51bGx9ZWxzZSB0aHJvdyBydChvKX19ZnVuY3Rpb24genN0KHQsZSl7dmFyIG4scixzO2lmKHM9RTQoKFJ1KCksbWEpLHQuVGcoKSxlKSxzKXJldHVybiB0bygpLHUocyw2NikuT2ooKXx8KHM9cXgoRW8obWEscykpKSxyPShuPXQuWWcocyksdShuPj0wP3QuX2cobiwhMCwhMCk6bHcodCxzLCEwKSwxNTMpKSx1KHIsMjE1KS5sbChlKTt0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK0ZjdCkpfWZ1bmN0aW9uIGxwbigpe3ZidCgpO3ZhciB0O3JldHVybiBvNWU/dSh3RSgoTXAoKSxVaCksUGgpLDE5MzkpOihyaShNMixuZXcgUmYpLFYzbigpLHQ9dShFdChGYygoTXAoKSxVaCksUGgpLDU0Nyk/RmMoVWgsUGgpOm5ldyBmWHQsNTQ3KSxvNWU9ITAsejVuKHQpLFU1bih0KSxraSgoYmJ0KCksWkF0KSx0LG5ldyBYWikseG8oVWgsUGgsdCksdCl9ZnVuY3Rpb24gaHBuKHQsZSl7dmFyIG4scixzLG87dC5qPS0xLG1sKHQuZSk/KG49dC5pLG89dC5pIT0wLHVJKHQsZSkscj1uZXcgRjAodC5lLDMsdC5jLG51bGwsZSxuLG8pLHM9ZS5Rayh0LmUsdC5jLG51bGwpLHM9aWFlKHQsZSxzKSxzPyhzLkVpKHIpLHMuRmkoKSk6bWkodC5lLHIpKToodUkodCxlKSxzPWUuUWsodC5lLHQuYyxudWxsKSxzJiZzLkZpKCkpfWZ1bmN0aW9uIHJxKHQsZSl7dmFyIG4scixzO2lmKHM9MCxyPWVbMF0scj49dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKG49KFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSk7bj49NDgmJm48PTU3JiYocz1zKjEwKyhuLTQ4KSwrK3IsIShyPj10Lmxlbmd0aCkpOyluPShScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocikpO3JldHVybiByPmVbMF0/ZVswXT1yOnM9LTEsc31mdW5jdGlvbiBmcG4odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gcz11KHQuYSwxOSkuYSxvPXUodC5iLDE5KS5hLG49cyxyPW8sZT1iLk1hdGgubWF4KGIuTWF0aC5hYnMocyksYi5NYXRoLmFicyhvKSksczw9MCYmcz09bz8obj0wLHI9by0xKTpzPT0tZSYmbyE9ZT8obj1vLHI9cyxvPj0wJiYrK24pOihuPS1vLHI9cyksbmV3IGxhKGRlKG4pLGRlKHIpKX1mdW5jdGlvbiBkcG4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihzPTA7czxlLm87cysrKWZvcihvPXMtZS5qK24saD0wO2g8ZS5wO2grKylpZihkPWgtZS5rK3Isdz1vLGs9ZCx3Kz10Lmosays9dC5rLHc+PTAmJms+PTAmJnc8dC5vJiZrPHQucCYmKCFkc2UoZSxzLGgpJiZsc2UodCxvLGQpfHxsNChlLHMsaCkmJiFsZm4odCxvLGQpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBncG4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aD10LmMsZD10LmQsbz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW2guaS5uLGgubixoLmFdKSkuYixzPShvK0tvKGN0KG90KFVzLDEpLHRlLDgsMCxbZC5pLm4sZC5uLGQuYV0pKS5iKS8yLHI9bnVsbCxoLmo9PShiZSgpLEhuKT9yPW5ldyAkZShlK2guaS5jLmMuYStuLHMpOnI9bmV3ICRlKGUtbixzKSxoOCh0LmEsMCxyKX1mdW5jdGlvbiB1dyh0KXt2YXIgZSxuLHIscztmb3IoZT1udWxsLHI9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpXSkpKTt6cihyKTspaWYobj11KExyKHIpLDgyKSxzPU1vKG4pLCFlKWU9cztlbHNlIGlmKGUhPXMpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcXN0KHQsZSxuKXt2YXIgcjtpZigrK3QuaixlPj10LmkpdGhyb3cgcnQobmV3IG1vKFdjdCtlK1MyK3QuaSkpO2lmKG4+PXQuaSl0aHJvdyBydChuZXcgbW8oS2N0K24rUzIrdC5pKSk7cmV0dXJuIHI9dC5nW25dLGUhPW4mJihlPG4/SWModC5nLGUsdC5nLGUrMSxuLWUpOkljKHQuZyxuKzEsdC5nLG4sZS1uKSxKaSh0LmcsZSxyKSx0LmVpKGUscixuKSx0LmNpKCkpLHJ9ZnVuY3Rpb24gbG4odCxlLG4pe3ZhciByO2lmKHI9dSh0LmMueGMoZSksMTQpLHIpcmV0dXJuIHIuRmMobik/KCsrdC5kLCEwKTohMTtpZihyPXQuaWMoZSksci5GYyhuKSlyZXR1cm4rK3QuZCx0LmMuemMoZSxyKSwhMDt0aHJvdyBydChuZXcgYW10KCJOZXcgQ29sbGVjdGlvbiB2aW9sYXRlZCB0aGUgQ29sbGVjdGlvbiBzcGVjIikpfWZ1bmN0aW9uIGxEKHQpe3ZhciBlLG4scjtyZXR1cm4gdDwwPzA6dD09MD8zMjoocj0tKHQ+PjE2KSxlPXI+PjE2JjE2LG49MTYtZSx0PXQ+PmUscj10LTI1NixlPXI+PjE2Jjgsbis9ZSx0PDw9ZSxyPXQteXksZT1yPj4xNiY0LG4rPWUsdDw8PWUscj10LWJkLGU9cj4+MTYmMixuKz1lLHQ8PD1lLHI9dD4+MTQsZT1yJn4ocj4+MSksbisyLWUpfWZ1bmN0aW9uIHBwbih0KXtqeCgpO3ZhciBlLG4scixzO2ZvcihuRz1uZXcgbGUscXV0PW5ldyBDcix6dXQ9bmV3IGxlLGU9KCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpLFc0bihlKSxzPW5ldyBlcihlKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMzMpLFJvKG5HLHIsMCk9PS0xJiYobj1uZXcgbGUsdWUoenV0LG4pLFJpZShyLG4pKTtyZXR1cm4genV0fWZ1bmN0aW9uIGJwbih0LGUsbil7dmFyIHIscyxvLGg7dC5hPW4uYi5kLEV0KGUsMzUyKT8ocz1tNCh1KGUsNzkpLCExLCExKSxvPXNEKHMpLHI9bmV3IGthKHQpLHZhKG8scikseUQobyxzKSxlLldlKChjaSgpLGk1KSkhPW51bGwmJnZhKHUoZS5XZShpNSksNzQpLHIpKTooaD11KGUsNDcwKSxoLkhnKGguRGcoKSt0LmEuYSksaC5JZyhoLkVnKCkrdC5hLmIpKX1mdW5jdGlvbiBBb2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2ZvcihrPVh0KHllKFEoZSwoVGUoKSxfUykpKSksdz10WzBdLm4uYSt0WzBdLm8uYSt0WzBdLmQuYytrLGQ9MTtkPHQubGVuZ3RoO2QrKylyPXRbZF0ubixzPXRbZF0ubyxuPXRbZF0uZCxvPXIuYS1uLmItdyxvPDAmJihyLmEtPW8pLGg9ZS5mLGguYT1iLk1hdGgubWF4KGguYSxyLmErcy5hKSx3PXIuYStzLmErbi5jK2t9ZnVuY3Rpb24gdnBuKHQsZSl7dmFyIG4scixzLG8saCxkO3JldHVybiByPXUodShKbih0LmcsZS5hKSw0NikuYSw2NSkscz11KHUoSm4odC5nLGUuYiksNDYpLmEsNjUpLG89ci5iLGg9cy5iLG49UHluKG8saCksbj49MD9uOihkPUFDKG5hKG5ldyAkZShoLmMraC5iLzIsaC5kK2guYS8yKSxuZXcgJGUoby5jK28uYi8yLG8uZCtvLmEvMikpKSwtKFh1ZShvLGgpLTEpKmQpfWZ1bmN0aW9uIHdwbih0LGUsbil7dmFyIHI7dXMobmV3IFRuKG51bGwsKCFuLmEmJihuLmE9bmV3IGhlKFppLG4sNiw2KSksbmV3IF9uKG4uYSwxNikpKSxuZXcgZlZ0KHQsZSkpLHVzKG5ldyBUbihudWxsLCghbi5uJiYobi5uPW5ldyBoZShxbyxuLDEsNykpLG5ldyBfbihuLm4sMTYpKSksbmV3IGRWdCh0LGUpKSxyPXUocWUobiwoY2koKSxpNSkpLDc0KSxyJiZheXQocix0LGUpfWZ1bmN0aW9uIGx3KHQsZSxuKXt2YXIgcixzLG87aWYobz1FNCgoUnUoKSxtYSksdC5UZygpLGUpLG8pcmV0dXJuIHRvKCksdShvLDY2KS5PaigpfHwobz1xeChFbyhtYSxvKSkpLHM9KHI9dC5ZZyhvKSx1KHI+PTA/dC5fZyhyLCEwLCEwKTpsdyh0LG8sITApLDE1MykpLHUocywyMTUpLmhsKGUsbik7dGhyb3cgcnQobmV3IFBuKGFiK2UubmUoKStGY3QpKX1mdW5jdGlvbiByNXQodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZihzPXQuZFtlXSxzKXtpZihvPXMuZyx3PXMuaSxyIT1udWxsKXtmb3IoZD0wO2Q8dzsrK2QpaWYoaD11KG9bZF0sMTMzKSxoLlNoKCk9PW4mJnlpKHIsaC5jZCgpKSlyZXR1cm4gaH1lbHNlIGZvcihkPTA7ZDx3OysrZClpZihoPXUob1tkXSwxMzMpLEd0KGguY2QoKSk9PT1HdChyKSlyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBoRCh0LGUpe3ZhciBuO2lmKGU8MCl0aHJvdyBydChuZXcgcFIoIk5lZ2F0aXZlIGV4cG9uZW50IikpO2lmKGU9PTApcmV0dXJuIEdIO2lmKGU9PTF8fGgzdCh0LEdIKXx8aDN0KHQsUUUpKXJldHVybiB0O2lmKCFab2UodCwwKSl7Zm9yKG49MTshWm9lKHQsbik7KSsrbjtyZXR1cm4gSjMoRGxuKG4qZSksaEQodW10KHQsbiksZSkpfXJldHVybiB6ZG4odCxlKX1mdW5jdGlvbiBtcG4odCxlKXt2YXIgbixyLHM7aWYoR3QodCk9PT1HdChlKSlyZXR1cm4hMDtpZih0PT1udWxsfHxlPT1udWxsfHx0Lmxlbmd0aCE9ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbilpZihyPXRbbl0scz1lW25dLCEoR3Qocik9PT1HdChzKXx8ciE9bnVsbCYmeWkocixzKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTG9lKHQpe2didCgpO3ZhciBlLG4scjtmb3IodGhpcy5iPUViZSx0aGlzLmM9KGFvKCksYzApLHRoaXMuZj0obUd0KCksa2JlKSx0aGlzLmE9dCxuYnQodGhpcyxuZXcgYmwpLHVxKHRoaXMpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksbi5kfHwoZT1uZXcgWGl0KGN0KG90KFl1dCwxKSxJZSw4MSwwLFtuXSkpLHVlKHQuYSxlKSl9ZnVuY3Rpb24geXBuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoIXR8fHQuYy5sZW5ndGg9PTApcmV0dXJuIG51bGw7Zm9yKG89bmV3IGVRdChlLCFuKSxzPW5ldyBTKHQpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDcwKSxCNHQobywoejkoKSxuZXcgR2EocikpKTtyZXR1cm4gaD1vLmksaC5hPSh3PW8ubixvLmUuYit3LmQrdy5hKSxoLmI9KGQ9by5uLG8uZS5hK2QuYitkLmMpLG99ZnVuY3Rpb24gTW9lKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihkPXNJKHQuYSksZTJ0KGQsbmV3IHJmKSxuPW51bGwscz1kLG89MCxoPXMubGVuZ3RoO288aCYmKHI9c1tvXSxyLms9PShHbigpLHhzKSk7KytvKWU9dShRKHIsKHNlKCksb2MpKSw2MSksIShlIT0oYmUoKSxCbikmJmUhPUhuKSYmKG4mJnUoUShuLEk2KSwxNSkuRmMociksbj1yKX1mdW5jdGlvbiB4cG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO3c9KEFuKGUsdC5jLmxlbmd0aCksdSh0LmNbZV0sMzI5KSksQWcodCxlKSx3LmIvMj49biYmKHI9ZSxrPSh3LmMrdy5hKS8yLGg9ay1uLHcuYzw9ay1uJiYocz1uZXcgeW50KHcuYyxoKSwkbSh0LHIrKyxzKSksZD1rK24sZDw9dy5hJiYobz1uZXcgeW50KGQsdy5hKSxVbShyLHQuYy5sZW5ndGgpLFc5KHQuYyxyLG8pKSl9ZnVuY3Rpb24gaTV0KHQpe3ZhciBlO2lmKCF0LmMmJnQuZz09bnVsbCl0LmQ9dC5zaSh0LmYpLE1yKHQsdC5kKSxlPXQuZDtlbHNle2lmKHQuZz09bnVsbClyZXR1cm4hMDtpZih0Lmk9PTApcmV0dXJuITE7ZT11KHQuZ1t0LmktMV0sNDcpfXJldHVybiBlPT10LmImJm51bGwua20+PW51bGwuam0oKT8oYXEodCksaTV0KHQpKTplLk9iKCl9ZnVuY3Rpb24ga3BuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKGQ9biwhZCYmKGQ9UHZ0KG5ldyBZaywwKSksd3IoZCxWZmUsMSksWGxlKHQuYyxlKSxoPUYzbih0LmEsZSksaC5nYygpPT0xKURsZSh1KGguWGIoMCksMzcpLGQpO2Vsc2UgZm9yKG89MS9oLmdjKCkscz1oLktjKCk7cy5PYigpOylyPXUocy5QYigpLDM3KSxEbGUocixSYyhkLG8pKTtNS2UodC5hLGgsZSksRnZuKGUpLG9yKGQpfWZ1bmN0aW9uIElvZSh0KXtpZih0aGlzLmE9dCx0LmMuaS5rPT0oR24oKSx4cykpdGhpcy5jPXQuYyx0aGlzLmQ9dShRKHQuYy5pLChzZSgpLG9jKSksNjEpO2Vsc2UgaWYodC5kLmkuaz09eHMpdGhpcy5jPXQuZCx0aGlzLmQ9dShRKHQuZC5pLChzZSgpLG9jKSksNjEpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKCJFZGdlICIrdCsiIGlzIG5vdCBhbiBleHRlcm5hbCBlZGdlLiIpKX1mdW5jdGlvbiBEb2UodCxlKXt2YXIgbixyLHM7cz10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLHMsdC5iKSksZT9lIT10JiYoWGModCxlLnpiKSx0aXQodCxlLmQpLG49KHI9ZS5jLHI/P2UuemIpLG5pdCh0LG49PW51bGx8fGhuKG4sZS56Yik/bnVsbDpuKSk6KFhjKHQsbnVsbCksdGl0KHQsMCksbml0KHQsbnVsbCkpfWZ1bmN0aW9uIE9vZSh0KXt2YXIgZSxuO2lmKHQuZil7Zm9yKDt0Lm48dC5vOyl7aWYoZT11KHQuaj90LmoucGkodC5uKTp0LmsuWGIodC5uKSw3Miksbj1lLmFrKCksRXQobiw5OSkmJnUobiwxOCkuQmImZGMmJighdC5lfHxuLkdqKCkhPUk3fHxuLmFqKCkhPTApJiZlLmRkKCkhPW51bGwpcmV0dXJuITA7Kyt0Lm59cmV0dXJuITF9ZWxzZSByZXR1cm4gdC5uPHQub31mdW5jdGlvbiBOb2UodCxlKXt2YXIgbjt0aGlzLmU9KEdtKCksQXIodCksR20oKSxiM3QodCkpLHRoaXMuYz0oQXIoZSksYjN0KGUpKSx4MnQodGhpcy5lLkhkKCkuZGMoKT09dGhpcy5jLkhkKCkuZGMoKSksdGhpcy5kPXRpZSh0aGlzLmUpLHRoaXMuYj10aWUodGhpcy5jKSxuPVhiKFhuLFt0ZSxJZV0sWzUsMV0sNSxbdGhpcy5lLkhkKCkuZ2MoKSx0aGlzLmMuSGQoKS5nYygpXSwyKSx0aGlzLmE9bixob24odGhpcyl9ZnVuY3Rpb24gUG9lKHQpeyF4dXQmJih4dXQ9bjVuKCkpO3ZhciBlPXQucmVwbGFjZSgvW1x4MDAtXHgxZlx4YWRcdTA2MDAtXHUwNjAzXHUwNmRkXHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBiLVx1MjAwZlx1MjAyOC1cdTIwMmVcdTIwNjAtXHUyMDY0XHUyMDZhLVx1MjA2Zlx1ZmVmZlx1ZmZmOS1cdWZmZmIiXFxdL2csZnVuY3Rpb24obil7cmV0dXJuIHVybihuKX0pO3JldHVybiciJytlKyciJ31mdW5jdGlvbiBGb2UodCl7QXd0KCk7dmFyIGUsbjtmb3IodGhpcy5iPUhnZSx0aGlzLmM9VmdlLHRoaXMuZz0od0d0KCkscWdlKSx0aGlzLmQ9KGFvKCksYzApLHRoaXMuYT10LFM1dCh0aGlzKSxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLCFlLmEmJmVXdChPZWUobmV3IElwdCxjdChvdChYSCwxKSxJZSw1NywwLFtlXSkpLHQpLGUuZT1uZXcgbyQoZS5kKX1mdW5jdGlvbiBFcG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihzPXQuZS5jLmxlbmd0aCxyPVB0KHBoLHh5LDE1LHMsMCwxKSxoPW5ldyBTKHQuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTQ0KSxyW28uYl09bmV3IFFpO2ZvcihuPW5ldyBTKHQuYyk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjgyKSxyW2UuYy5iXS5GYyhlKSxyW2UuZC5iXS5GYyhlKTtyZXR1cm4gcn1mdW5jdGlvbiBUcG4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9SGQodC5jLmxlbmd0aCkscz1uZXcgUyh0KTtzLmE8cy5jLmMubGVuZ3RoOyl7Zm9yKHI9dShKKHMpLDEwKSxoPW5ldyBxcyxvPU1zKHIpLG49bmV3IGFyKGxyKG8uYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSwxNyksZS5jLmk9PWUuZC5pfHxOcyhoLGUuZC5pKTtkLmNbZC5jLmxlbmd0aF09aH1yZXR1cm4gZH1mdW5jdGlvbiBDcG4odCxlKXt2YXIgbixyLHMsbyxoO2lmKG49dShJbih0LmEsNCksMTI2KSxoPW49PW51bGw/MDpuLmxlbmd0aCxlPj1oKXRocm93IHJ0KG5ldyBqbShlLGgpKTtyZXR1cm4gcz1uW2VdLGg9PTE/cj1udWxsOihyPVB0KFRmdCxKY3QsNDE1LGgtMSwwLDEpLEljKG4sMCxyLDAsZSksbz1oLWUtMSxvPjAmJkljKG4sZSsxLHIsZSxvKSksY0UodCxyKSxub2UodCxlLHMpLHN9ZnVuY3Rpb24gYTYoKXthNj1aLFc2PXUoU3QoV3QoKHNidCgpLHBjKS5xYiksNiksMzQpLFU2PXUoU3QoV3QocGMucWIpLDMpLDM0KSxNZnQ9dShTdChXdChwYy5xYiksNCksMzQpLElmdD11KFN0KFd0KHBjLnFiKSw1KSwxOCksUXooVzYpLFF6KFU2KSxReihNZnQpLFF6KElmdCksaDVlPW5ldyB3bChjdChvdChBdSwxKSxQNCwxNzAsMCxbVzYsVTZdKSl9ZnVuY3Rpb24gQm9lKHQsZSl7dmFyIG47dGhpcy5kPW5ldyBNOSx0aGlzLmI9ZSx0aGlzLmU9bmV3IHlvKGUucWYoKSksbj10LnUuSGMoKFF1KCksdE4pKSx0LnUuSGModGcpP3QuRD90aGlzLmE9biYmIWUuSWYoKTp0aGlzLmE9ITA6dC51LkhjKHhiKT9uP3RoaXMuYT0hKGUuemYoKS5LYygpLk9iKCl8fGUuQmYoKS5LYygpLk9iKCkpOnRoaXMuYT0hMTp0aGlzLmE9ITF9ZnVuY3Rpb24gUm9lKHQsZSl7dmFyIG4scixzLG87Zm9yKG49dC5vLmEsbz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTExKSxzLmUuYT0ocj1zLmIsci5YZSgoY2koKSxobCkpP3IuSGYoKT09KGJlKCksQm4pPy1yLnJmKCkuYS1YdCh5ZShyLldlKGhsKSkpOm4rWHQoeWUoci5XZShobCkpKTpyLkhmKCk9PShiZSgpLEJuKT8tci5yZigpLmE6bil9ZnVuY3Rpb24gam9lKHQsZSl7dmFyIG4scixzLG87bj11KFEodCwoVGUoKSxWbCkpLDEwMyksbz11KHFlKGUsdjcpLDYxKSxzPXUoUSh0LG9zKSw5OCkscyE9KG9hKCksSDEpJiZzIT15Yj9vPT0oYmUoKSxabykmJihvPW54dChlLG4pLG89PVpvJiYobz1KeChuKSkpOihyPUlsZShlKSxyPjA/bz1KeChuKTpvPUhJKEp4KG4pKSksYm8oZSx2NyxvKX1mdW5jdGlvbiBfcG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPXQuaixlLmEhPWUuYiYmWHMoaCxuZXcgSzUpLHM9aC5jLmxlbmd0aC8yfDAscj0wO3I8cztyKyspbz0oQW4ocixoLmMubGVuZ3RoKSx1KGguY1tyXSwxMTMpKSxvLmMmJkZzKG8uZCxlLmEpO2ZvcihuPXM7bjxoLmMubGVuZ3RoO24rKylvPShBbihuLGguYy5sZW5ndGgpLHUoaC5jW25dLDExMykpLG8uYyYmRnMoby5kLGUuYil9ZnVuY3Rpb24gU3BuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dC5jW2UuYy5wXVtlLnBdLHM9dC5jW24uYy5wXVtuLnBdLHIuYSE9bnVsbCYmcy5hIT1udWxsPyhvPVBudChyLmEscy5hKSxvPDA/dkQodCxlLG4pOm8+MCYmdkQodCxuLGUpLG8pOnIuYSE9bnVsbD8odkQodCxlLG4pLC0xKTpzLmEhPW51bGw/KHZEKHQsbixlKSwxKTowfWZ1bmN0aW9uICRvZSh0LGUpe3ZhciBuLHIscyxvO3QuZWooKT8obj10LlZpKCksbz10LmZqKCksKyt0LmosdC5IaShuLHQub2kobixlKSkscj10LlppKDMsbnVsbCxlLG4sbyksdC5iaigpPyhzPXQuY2ooZSxudWxsKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KG5YdCh0LGUpLHQuYmooKSYmKHM9dC5jaihlLG51bGwpLHMmJnMuRmkoKSkpfWZ1bmN0aW9uIGlxKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD1hdSh0LmUuVGcoKSxlKSxzPW5ldyB0eCxuPXUodC5nLDExOSksbz10Lmk7LS1vPj0wOylyPW5bb10saC5ybChyLmFrKCkpJiZNcihzLHIpOyFMaGUodCxzKSYmbWwodC5lKSYmS2sodCxlLiRqKCk/enAodCw2LGUsKHZuKCksaW8pLG51bGwsLTEsITEpOnpwKHQsZS5LaigpPzI6MSxlLG51bGwsbnVsbCwtMSwhMSkpfWZ1bmN0aW9uIGJFKCl7YkU9Wjt2YXIgdCxlO2ZvcihUNj1QdChCNCx0ZSw5MSwzMiwwLDEpLG9TPVB0KEI0LHRlLDkxLDMyLDAsMSksdD0xLGU9MDtlPD0xODtlKyspVDZbZV09S0kodCksb1NbZV09S0koTTAodCxlKSksdD1DYSh0LDUpO2Zvcig7ZTxvUy5sZW5ndGg7ZSsrKVQ2W2VdPUozKFQ2W2UtMV0sVDZbMV0pLG9TW2VdPUozKG9TW2UtMV0sKEpwKCksU3V0KSl9ZnVuY3Rpb24gQXBuKHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gdC5hPT0oZ0UoKSxiUyk/ITA6KG89ZS5hLmMsbj1lLmEuYytlLmEuYiwhKGUuaiYmKHI9ZS5BLGg9ci5jLmMuYS1yLm8uYS8yLHM9by0oci5uLmErci5vLmEpLHM+aCl8fGUucSYmKHI9ZS5DLGg9ci5jLmMuYS1yLm8uYS8yLHM9ci5uLmEtbixzPmgpKSl9ZnVuY3Rpb24gTHBuKHQsZSl7dmFyIG47d3IoZSwiUGFydGl0aW9uIHByZXByb2Nlc3NpbmciLDEpLG49dShQbChSaShXbyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5hLDE2KSksbmV3ICRZKSxuZXcgYUYpLG5ldyBWNSksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLHVzKG4uT2MoKSxuZXcgb0YpLG9yKGUpfWZ1bmN0aW9uIHpvZSh0KXtwcnQoKTt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj1uZXcgbjIscz1uZXcgUyh0LmUuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLGQ9dC5nW28ucF0sZT11KFd2KG4sZCksMTUpLGV8fChlPW5ldyBsZSxwMihuLGQsZSkpLGUuRmMobyk7cmV0dXJuIG59ZnVuY3Rpb24gTXBuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lLmIuYix0LmE9UHQocGgseHksMTUscywwLDEpLHQuYj1QdChkbCxpMCwyNSxzLDE2LDEpLGg9ZWkoZS5iLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4NiksdC5hW28uZ109bmV3IFFpO2ZvcihyPWVpKGUuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksMTg4KSx0LmFbbi5iLmddLkZjKG4pLHQuYVtuLmMuZ10uRmMobil9ZnVuY3Rpb24gcW9lKHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P2JmKHQpOihlPW5ldyBUaChiZih0KSksZS5hKz0iIChzdGFydFg6ICIsUjMoZSx0LmopLGUuYSs9Iiwgc3RhcnRZOiAiLFIzKGUsdC5rKSxlLmErPSIsIGVuZFg6ICIsUjMoZSx0LmIpLGUuYSs9IiwgZW5kWTogIixSMyhlLHQuYyksZS5hKz0iLCBpZGVudGlmaWVyOiAiLGZvKGUsdC5kKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIHM1dCh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9YQyh0KTooZT1uZXcgVGgoWEModCkpLGUuYSs9IiAob3JkZXJlZDogIixrZyhlLCh0LkJiJjI1NikhPTApLGUuYSs9IiwgdW5pcXVlOiAiLGtnKGUsKHQuQmImNTEyKSE9MCksZS5hKz0iLCBsb3dlckJvdW5kOiAiLHVldChlLHQucyksZS5hKz0iLCB1cHBlckJvdW5kOiAiLHVldChlLHQudCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBIb2UodCxlLG4scixzLG8saCxkKXt2YXIgdztyZXR1cm4gRXQodC5DYiw4OCkmJmh5KHJsKHUodC5DYiw4OCkpLDQpLFhjKHQsbiksdC5mPXIsckUodCxzKSxzRSh0LG8pLG5FKHQsaCksaUUodCwhMSksUGcodCwhMCksYUUodCxkKSxOZyh0LCEwKSxJZyh0LDApLHQuYj0wLHR5KHQsMSksdz1PMSh0LGUsbnVsbCksdyYmdy5GaSgpLFJpdCh0LCExKSx0fWZ1bmN0aW9uIEdvZSh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPXUoRmModC5hLGUpLDUxMiksbnx8KHI9bmV3IElydChlKSxzPShDJCgpLFIxP251bGw6ci5jKSxvPURsKHMsMCxiLk1hdGgubWF4KDAsZGoocyxFdSg0NikpKSksZVplKHIsR29lKHQsbykpLChSMT9udWxsOnIuYykubGVuZ3RoPT0wJiZTV3QocixuZXcgb2UpLHhvKHQuYSxSMT9udWxsOnIuYyxyKSxyKX1mdW5jdGlvbiBJcG4odCxlKXt2YXIgbjt0LmI9ZSx0Lmc9bmV3IGxlLG49RnBuKHQuYiksdC5lPW4sdC5mPW4sdC5jPWplKFJlKFEodC5iLChLeigpLEJFdCkpKSksdC5hPXllKFEodC5iLChjaSgpLCQ2KSkpLHQuYT09bnVsbCYmKHQuYT0xKSxYdCh0LmEpPjE/dC5lKj1YdCh0LmEpOnQuZi89WHQodC5hKSxsdW4odCkscGhuKHQpLFF2bih0KSxKdCh0LmIsKGlfKCksZUcpLHQuZyl9ZnVuY3Rpb24gVm9lKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKHI9MCx3PW4sZXx8KHI9bioodC5jLmxlbmd0aC0xKSx3Kj0tMSksbz1uZXcgUyh0KTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDEwKSxKdChzLChUZSgpLExkKSwoUWQoKSxQVikpLHMuby5hPXIsZD1SZyhzLChiZSgpLEhuKSkuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTEpLGgubi5hPXI7cis9d319ZnVuY3Rpb24gYTV0KHQsZSxuKXt2YXIgcixzLG87dC5laigpPyhvPXQuZmooKSx6SSh0LGUsbikscj10LlppKDMsbnVsbCxuLGUsbyksdC5iaigpPyhzPXQuY2oobixudWxsKSx0LmlqKCkmJihzPXQuamoobixzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOnQuJGkocikpOih6SSh0LGUsbiksdC5iaigpJiYocz10LmNqKG4sbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gbzYodCxlLG4pe3ZhciByLHMsbyxoLGQsdztyZXR1cm4gZD10LkdrKG4pLGQhPW4/KGg9dC5nW2VdLHc9ZCxmQyh0LGUsdC5vaShlLHcpKSxvPWgsdC5naShlLHcsbyksdC5yaygpJiYocj1uLHM9dC5kaihyLG51bGwpLCF1KGQsNDkpLmVoKCkmJihzPXQuY2oodyxzKSkscyYmcy5GaSgpKSxtbCh0LmUpJiZLayh0LHQuWmkoOSxuLGQsZSwhMSkpLGQpOm59ZnVuY3Rpb24gRHBuKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9bmV3IFModC5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4OSksbi5nPSEwO2ZvcihvPW5ldyBTKHQuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw4MSkscy5rPWplKFJlKHQuZS5LYihuZXcgbGEocyxlKSkpKSxzLmQuZz1zLmQuZyZqZShSZSh0LmUuS2IobmV3IGxhKHMsZSkpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gVW9lKHQpe3ZhciBlLG4scixzLG87aWYobj0oZT11KEhmKFhhKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSxvPXUoUSh0LChzZSgpLFp1KSksMTApLG8pZm9yKHM9bmV3IFMoby5qKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMSksR3QoUShyLF9pKSk9PT1HdCh0KSYmcEMobmV3IFMxKHIuYikpJiZwZihuLHIuaik7cmV0dXJuIG59ZnVuY3Rpb24gV29lKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKCF0LmRbbi5wXSl7Zm9yKHM9bmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpO3pyKHMpOyl7Zm9yKHI9dShMcihzKSwxNyksZD1yLmQuaSxoPW5ldyBhcihscihqbyhkKS5hLktjKCksbmV3IHopKTt6cihoKTspbz11KExyKGgpLDE3KSxvLmMuaT09ZSYmKHQuYVtvLnBdPSEwKTtXb2UodCxlLGQpfXQuZFtuLnBdPSEwfX1mdW5jdGlvbiBPcG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZihyPUpyZSh0LkRiJjI1NCkscj09MSl0LkViPW51bGw7ZWxzZSBpZihvPXMyKHQuRWIpLHI9PTIpcz1ic3QodCxlKSx0LkViPW9bcz09MD8xOjBdO2Vsc2V7Zm9yKGg9UHQoWG4sSWUsMSxyLTEsNSwxKSxuPTIsZD0wLHc9MDtuPD0xMjg7bjw8PTEpbj09ZT8rK2Q6dC5EYiZuJiYoaFt3KytdPW9bZCsrXSk7dC5FYj1ofXQuRGImPX5lfWZ1bmN0aW9uIE5wbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9KCFlLnMmJihlLnM9bmV3IGhlKEF1LGUsMjEsMTcpKSxlLnMpLG89bnVsbCxzPTAsaD1yLmk7czxoOysrcylzd2l0Y2gobj11KFN0KHIscyksMTcwKSwkdihFbyh0LG4pKSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6eyFvJiYobz1uZXcgbGUpLG8uY1tvLmMubGVuZ3RoXT1uO2JyZWFrfX1yZXR1cm4gb3x8KHZuKCksdm4oKSxpbyl9ZnVuY3Rpb24gbzV0KHQpe3ZhciBlO3N3aXRjaChlPTAsdCl7Y2FzZSAxMDU6ZT0yO2JyZWFrO2Nhc2UgMTA5OmU9ODticmVhaztjYXNlIDExNTplPTQ7YnJlYWs7Y2FzZSAxMjA6ZT0xNjticmVhaztjYXNlIDExNzplPTMyO2JyZWFrO2Nhc2UgMTE5OmU9NjQ7YnJlYWs7Y2FzZSA3MDplPTI1NjticmVhaztjYXNlIDcyOmU9MTI4O2JyZWFrO2Nhc2UgODg6ZT01MTI7YnJlYWs7Y2FzZSA0NDplPXdmfXJldHVybiBlfWZ1bmN0aW9uIFBwbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3O2lmKEd0KHQpPT09R3QoZSkmJnI9PXMpe0h1ZSh0LHIsbik7cmV0dXJufWZvcihkPTA7ZDxyO2QrKyl7Zm9yKGg9MCxvPXRbZF0sdz0wO3c8czt3KyspaD1PYShPYShDYShQcyhvLGNvKSxQcyhlW3ddLGNvKSksUHMobltkK3ddLGNvKSksUHMoU3IoaCksY28pKSxuW2Qrd109U3IoaCksaD16bShoLDMyKTtuW2Qrc109U3IoaCl9fWZ1bmN0aW9uIEZwbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNO2ZvcihDPTAsaz0wLHM9dC5hLGQ9cy5hLmdjKCkscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw1NjEpLGU9KG4uYiYmYmF0KG4pLG4uYSksTT1lLmEsaD1lLmIsQys9TStoLGsrPU0qaDtyZXR1cm4gdz1iLk1hdGguc3FydCg0MDAqZCprLTQqaytDKkMpK0Msbz0yKigxMDAqZC0xKSxvPT0wP3c6dy9vfWZ1bmN0aW9uIEtvZSh0LGUpe2UuYiE9MCYmKGlzTmFOKHQucyk/dC5zPVh0KChRbihlLmIhPTApLHllKGUuYS5hLmMpKSk6dC5zPWIuTWF0aC5taW4odC5zLFh0KChRbihlLmIhPTApLHllKGUuYS5hLmMpKSkpLGlzTmFOKHQuYyk/dC5jPVh0KChRbihlLmIhPTApLHllKGUuYy5iLmMpKSk6dC5jPWIuTWF0aC5tYXgodC5jLFh0KChRbihlLmIhPTApLHllKGUuYy5iLmMpKSkpKX1mdW5jdGlvbiBnXyh0KXt2YXIgZSxuLHIscztmb3IoZT1udWxsLHI9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpXSkpKTt6cihyKTspaWYobj11KExyKHIpLDgyKSxzPU1vKG4pLCFlKWU9dHMocyk7ZWxzZSBpZihlIT10cyhzKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBIc3QodCxlKXt2YXIgbixyLHMsbzt0LmVqKCk/KG49dC5pLG89dC5maigpLHVJKHQsZSkscj10LlppKDMsbnVsbCxlLG4sbyksdC5iaigpPyhzPXQuY2ooZSxudWxsKSx0LmlqKCkmJihzPXQuamooZSxzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOnQuJGkocikpOih1SSh0LGUpLHQuYmooKSYmKHM9dC5jaihlLG51bGwpLHMmJnMuRmkoKSkpfWZ1bmN0aW9uIFlvZSh0LGUsbil7dmFyIHIscyxvO3QuZWooKT8obz10LmZqKCksKyt0LmosdC5IaShlLHQub2koZSxuKSkscj10LlppKDMsbnVsbCxuLGUsbyksdC5iaigpPyhzPXQuY2oobixudWxsKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KCsrdC5qLHQuSGkoZSx0Lm9pKGUsbikpLHQuYmooKSYmKHM9dC5jaihuLG51bGwpLHMmJnMuRmkoKSkpfWZ1bmN0aW9uIEJwbih0KXt2YXIgZSxuLHIscztmb3Iocz10Lmxlbmd0aCxlPW51bGwscj0wO3I8cztyKyspbj0oUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKSxjZCgiLiorP3tbKCl8XFxeJCIsRXUobikpPj0wPyhlfHwoZT1uZXcgQjkscj4wJiZmbyhlLHQuc3Vic3RyKDAscikpKSxlLmErPSJcXCIsbTgoZSxuJm1zKSk6ZSYmbTgoZSxuJm1zKTtyZXR1cm4gZT9lLmE6dH1mdW5jdGlvbiBScG4odCl7dmFyIGU7aWYoIXQuYSl0aHJvdyBydChuZXcgRm8oIklEYXRhVHlwZSBjbGFzcyBleHBlY3RlZCBmb3IgbGF5b3V0IG9wdGlvbiAiK3QuZikpO2lmKGU9VWluKHQuYSksZT09bnVsbCl0aHJvdyBydChuZXcgRm8oIkNvdWxkbid0IGNyZWF0ZSBuZXcgaW5zdGFuY2Ugb2YgcHJvcGVydHkgJyIrdC5mKyInLiAiK0gxZSsoTDAodU4pLHVOLmspK2E4dCkpO3JldHVybiB1KGUsNDE0KX1mdW5jdGlvbiBHc3QodCl7dmFyIGUsbixyLHMsbztyZXR1cm4gbz10LmVoKCksbyYmby5raCgpJiYocz1LcCh0LG8pLHMhPW8pPyhuPXQuVmcoKSxyPShlPXQuVmcoKSxlPj0wP3QuUWcobnVsbCk6dC5laCgpLmloKHQsLTEtZSxudWxsLG51bGwpKSx0LlJnKHUocyw0OSksbiksciYmci5GaSgpLHQuTGcoKSYmdC5NZygpJiZuPi0xJiZtaSh0LG5ldyBRcyh0LDksbixvLHMpKSxzKTpvfWZ1bmN0aW9uIFhvZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2ZvcihoPTAsbz10LmYuZSxyPTA7cjxvLmMubGVuZ3RoOysrcilmb3IoZD0oQW4ocixvLmMubGVuZ3RoKSx1KG8uY1tyXSwxNDQpKSxzPXIrMTtzPG8uYy5sZW5ndGg7KytzKXc9KEFuKHMsby5jLmxlbmd0aCksdShvLmNbc10sMTQ0KSksbj1IcChkLmQsdy5kKSxlPW4tdC5hW2QuYl1bdy5iXSxoKz10LmlbZC5iXVt3LmJdKmUqZTtyZXR1cm4gaH1mdW5jdGlvbiBqcG4odCxlKXt2YXIgbjtpZighVnMoZSwoVGUoKSxjdSkpJiYobj1sMW4odShRKGUsYlR0KSwzNjApLHUoUSh0LGN1KSwxNjMpKSxKdChlLGJUdCxuKSwhenIobmV3IGFyKGxyKHowKGUpLmEuS2MoKSxuZXcgeikpKSkpc3dpdGNoKG4uZyl7Y2FzZSAxOkp0KGUsY3UsKGhoKCkseVMpKTticmVhaztjYXNlIDI6SnQoZSxjdSwoaGgoKSx4UykpfX1mdW5jdGlvbiAkcG4odCxlKXt2YXIgbjtYdm4odCksdC5hPShuPW5ldyBzZXQsdXMobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyBCdHQobikpLG4pLGF2bih0LHUoUShlLmIsKFRlKCksV2x0KSksMzc2KSksSmhuKHQpLFZwbih0KSxmMW4odCksdGZuKHQpLFl5bih0LGUpLHVzKFdvKG5ldyBUbihudWxsLG9adChUZW4odC5iKS5hKSksbmV3IF8zKSxuZXcgTVgpLGUuYT0hMSx0LmE9bnVsbH1mdW5jdGlvbiBRb2UoKXtMNHQuY2FsbCh0aGlzLEdFLChUdigpLEE0ZSkpLHRoaXMucD1udWxsLHRoaXMuYT1udWxsLHRoaXMuZj1udWxsLHRoaXMubj1udWxsLHRoaXMuZz1udWxsLHRoaXMuYz1udWxsLHRoaXMuaT1udWxsLHRoaXMuaj1udWxsLHRoaXMuZD1udWxsLHRoaXMuYj1udWxsLHRoaXMuZT1udWxsLHRoaXMuaz1udWxsLHRoaXMubz1udWxsLHRoaXMucz1udWxsLHRoaXMucT0hMSx0aGlzLnI9ITF9ZnVuY3Rpb24gdkUoKXt2RT1aLGtmdD1uZXcgU3goZDFlLDApLEpWPW5ldyBTeCgiSU5TSURFX1NFTEZfTE9PUFMiLDEpLHRVPW5ldyBTeCgiTVVMVElfRURHRVMiLDIpLFpWPW5ldyBTeCgiRURHRV9MQUJFTFMiLDMpLHhmdD1uZXcgU3goIlBPUlRTIiw0KSxRVj1uZXcgU3goIkNPTVBPVU5EIiw1KSxYVj1uZXcgU3goIkNMVVNURVJTIiw2KSx5ZnQ9bmV3IFN4KCJESVNDT05ORUNURUQiLDcpfWZ1bmN0aW9uIFpvZSh0LGUpe3ZhciBuLHIscztpZihlPT0wKXJldHVybih0LmFbMF0mMSkhPTA7aWYoZTwwKXRocm93IHJ0KG5ldyBwUigiTmVnYXRpdmUgYml0IGFkZHJlc3MiKSk7aWYocz1lPj41LHM+PXQuZClyZXR1cm4gdC5lPDA7aWYobj10LmFbc10sZT0xPDwoZSYzMSksdC5lPDApe2lmKHI9cG5lKHQpLHM8cilyZXR1cm4hMTtyPT1zP249LW46bj1+bn1yZXR1cm4obiZlKSE9MH1mdW5jdGlvbiB6cG4odCxlLG4scil7dmFyIHM7dShuLmIsNjUpLHUobi5iLDY1KSx1KHIuYiw2NSksdShyLmIsNjUpLHM9bmEobmModShuLmIsNjUpLmMpLHUoci5iLDY1KS5jKSxBaihzLGRvZSh1KG4uYiw2NSksdShyLmIsNjUpLHMpKSx1KHIuYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KS5jLmErcy5hLHUoci5iLDY1KS5jLmIrcy5iLHUoci5iLDY1KSxtdShyLmEsbmV3IHh2dCh0LGUscikpfWZ1bmN0aW9uIGM1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKG89ZS5lLG8pe2ZvcihuPUdzdChvKSxyPXUodC5nLDY3NCksaD0wO2g8dC5pOysraClpZih3PXJbaF0sbHN0KHcpPT1uJiYocz0oIXcuZCYmKHcuZD1uZXcgU3MoaG8sdywxKSksdy5kKSxkPXUobi5haChhYXQobyxvLkNiLG8uRGI+PjE2KSksMTUpLlhjKG8pLGQ8cy5pKSlyZXR1cm4gYzV0KHQsdShTdChzLGQpLDg3KSl9cmV0dXJuIGV9ZnVuY3Rpb24gSSh0LGUsbil7dmFyIHI9JEgscyxvPXJbdF0saD1vIGluc3RhbmNlb2YgQXJyYXk/b1swXTpudWxsO28mJiFoP2w9bzoobD0ocz1lJiZlLnByb3RvdHlwZSwhcyYmKHM9JEhbZV0pLGhybihzKSksbC5obT1uLCFlJiYobC5pbT1DdCksclt0XT1sKTtmb3IodmFyIGQ9MztkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWFyZ3VtZW50c1tkXS5wcm90b3R5cGU9bDtoJiYobC5nbT1oKX1mdW5jdGlvbiB6cih0KXtmb3IodmFyIGU7IXUoQXIodC5hKSw0NykuT2IoKTspe2lmKHQuZD1HY24odCksIXQuZClyZXR1cm4hMTtpZih0LmE9dSh0LmQuUGIoKSw0NyksRXQodC5hLDM5KSl7aWYoZT11KHQuYSwzOSksdC5hPWUuYSwhdC5iJiYodC5iPW5ldyBQMykscXAodC5iLHQuZCksZS5iKWZvcig7IU45KGUuYik7KXFwKHQuYix1KGNlbihlLmIpLDQ3KSk7dC5kPWUuZH19cmV0dXJuITB9ZnVuY3Rpb24gdTV0KHQsZSl7dmFyIG4scixzLG8saDtmb3Iobz1lPT1udWxsPzA6dC5iLnNlKGUpLHI9KG49dC5hLmdldChvKSxuPz9uZXcgQXJyYXkpLGg9MDtoPHIubGVuZ3RoO2grKylpZihzPXJbaF0sdC5iLnJlKGUscy5jZCgpKSlyZXR1cm4gci5sZW5ndGg9PTE/KHIubGVuZ3RoPTAsRFFlKHQuYSxvKSk6ci5zcGxpY2UoaCwxKSwtLXQuYyxhJCh0LmIpLHMuZGQoKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsNXQodCxlKXt2YXIgbixyLHMsbztmb3Iocz0xLGUuaj0hMCxvPW51bGwscj1uZXcgUyhvNChlKSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSx0LmNbbi5jXXx8KHQuY1tuLmNdPSEwLG89X3oobixlKSxuLmY/cys9bDV0KHQsbyk6IW8uaiYmbi5hPT1uLmUuZS1uLmQuZSYmKG4uZj0hMCxOcyh0LnAsbikscys9bDV0KHQsbykpKTtyZXR1cm4gc31mdW5jdGlvbiBxcG4odCl7dmFyIGUsbixyO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxyPShPbigwKSwwKSxyPjAmJighKE9wKHQuYS5jKSYmZS5uLmQpJiYhKGM4KHQuYS5jKSYmZS5uLmIpJiYoZS5nLmQrPWIuTWF0aC5tYXgoMCxyLzItLjUpKSwhKE9wKHQuYS5jKSYmZS5uLmEpJiYhKGM4KHQuYS5jKSYmZS5uLmMpJiYoZS5nLmEtPXItMSkpfWZ1bmN0aW9uIEpvZSh0KXt2YXIgZSxuLHIscyxvO2lmKHM9bmV3IGxlLG89VXVlKHQscyksZT11KFEodCwoc2UoKSxadSkpLDEwKSxlKWZvcihyPW5ldyBTKGUuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEpLEd0KFEobixfaSkpPT09R3QodCkmJihvPWIuTWF0aC5tYXgobyxVdWUobixzKSkpO3JldHVybiBzLmMubGVuZ3RoPT0wfHxKdCh0LFc0LG8pLG8hPS0xP3M6bnVsbH1mdW5jdGlvbiB0Y2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztvPXUoRmUoZS5lLDApLDE3KS5jLHI9by5pLHM9ci5rLHc9dShGZShuLmcsMCksMTcpLmQsaD13LmksZD1oLmsscz09KEduKCksWnMpP0p0KHQsKHNlKCksbjEpLHUoUShyLG4xKSwxMSkpOkp0KHQsKHNlKCksbjEpLG8pLGQ9PVpzP0p0KHQsKHNlKCksUmgpLHUoUShoLFJoKSwxMSkpOkp0KHQsKHNlKCksUmgpLHcpfWZ1bmN0aW9uIGVjZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPVNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpLG49byZ0LmIubGVuZ3RoLTEscz1udWxsLHI9dC5iW25dO3I7cz1yLHI9ci5hKWlmKHIuZD09byYmZmQoci5pLGUpKXJldHVybiBzP3MuYT1yLmE6dC5iW25dPXIuYSxLcXQoci5jLHIuZiksY00oci5iLHIuZSksLS10LmYsKyt0LmUsITA7cmV0dXJuITF9ZnVuY3Rpb24gaDV0KHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gZSY9NjMsbj10Lmgscj0obiZJRCkhPTAsciYmKG58PS0xMDQ4NTc2KSxlPDIyPyhoPW4+PmUsbz10Lm0+PmV8bjw8MjItZSxzPXQubD4+ZXx0Lm08PDIyLWUpOmU8NDQ/KGg9cj9XMDowLG89bj4+ZS0yMixzPXQubT4+ZS0yMnxuPDw0NC1lKTooaD1yP1cwOjAsbz1yP3VsOjAscz1uPj5lLTQ0KSxydShzJnVsLG8mdWwsaCZXMCl9ZnVuY3Rpb24gVnN0KHQpe3ZhciBlLG4scixzLG8saDtmb3IodGhpcy5jPW5ldyBsZSx0aGlzLmQ9dCxyPXNzLHM9c3MsZT1UcyxuPVRzLGg9ZWkodCwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksOCkscj1iLk1hdGgubWluKHIsby5hKSxzPWIuTWF0aC5taW4ocyxvLmIpLGU9Yi5NYXRoLm1heChlLG8uYSksbj1iLk1hdGgubWF4KG4sby5iKTt0aGlzLmE9bmV3IGloKHIscyxlLXIsbi1zKX1mdW5jdGlvbiBuY2UodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMjkpLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOylmb3IoaD11KEooZCksMTApLGguaz09KEduKCksU2wpJiZjNihoLGUpLHI9bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLGpuZShuLGUpfWZ1bmN0aW9uIGY1dCh0KXt2YXIgZSxuLHI7dGhpcy5jPXQscj11KFEodCwoVGUoKSxWbCkpLDEwMyksZT1YdCh5ZShRKHQsVUcpKSksbj1YdCh5ZShRKHQscEN0KSkpLHI9PShhbygpLGpoKXx8cj09a2Z8fHI9PWMwP3RoaXMuYj1lKm46dGhpcy5iPTEvKGUqbiksdGhpcy5qPVh0KHllKFEodCxaNCkpKSx0aGlzLmU9WHQoeWUoUSh0LEJ3KSkpLHRoaXMuZj10LmIuYy5sZW5ndGh9ZnVuY3Rpb24gSHBuKHQpe3ZhciBlLG47Zm9yKHQuZT1QdChUcixYciwyNSx0LnAuYy5sZW5ndGgsMTUsMSksdC5rPVB0KFRyLFhyLDI1LHQucC5jLmxlbmd0aCwxNSwxKSxuPW5ldyBTKHQucCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLHQuZVtlLnBdPU4wKG5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKSksdC5rW2UucF09TjAobmV3IGFyKGxyKE1zKGUpLmEuS2MoKSxuZXcgeikpKX1mdW5jdGlvbiBHcG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihzPTAsdC5xPW5ldyBsZSxlPW5ldyBxcyxoPW5ldyBTKHQucCk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwxMCksby5wPXMscj1uZXcgYXIobHIoTXMobykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSwxNyksTnMoZSxuLmQuaSk7ZS5hLkJjKG8pIT1udWxsLHVlKHQucSxuZXcgeUMoZSkpLGUuYS4kYigpLCsrc319ZnVuY3Rpb24gaHcoKXtodz1aLHNfdD1uZXcgTXYoMjApLG95ZT1uZXcgZW8oKGNpKCkscTIpLHNfdCksb190PW5ldyBlbyhIMiwyMCksbnllPW5ldyBlbygkNixCRSksRVY9bmV3IGVvKHpWLGRlKDEpKSx1eWU9bmV3IGVvKGRmdCwoRm4oKSwhMCkpLHJfdD1VTyxpeWU9ejIsc3llPWE1LGF5ZT12YixyeWU9czUsaV90PVlPLGN5ZT1LeSxseWU9KGZ5dCgpLGV5ZSksYV90PXR5ZX1mdW5jdGlvbiByY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYodC5hLmY+MCYmRXQoZSw0MikmJih0LmEucWooKSxrPXUoZSw0Miksdz1rLmNkKCksbz13PT1udWxsPzA6SGkodyksaD1YMnQodC5hLG8pLG49dC5hLmRbaF0sbikpe2ZvcihyPXUobi5nLDM2NyksQz1uLmksZD0wO2Q8QzsrK2QpaWYocz1yW2RdLHMuU2goKT09byYmcy5GYihrKSlyZXR1cm4gcmNlKHQsayksITB9cmV0dXJuITF9ZnVuY3Rpb24gVnBuKHQpe3ZhciBlLG4scixzO2ZvcihzPXUoQWkodC5hLChnNCgpLE1HKSksMTUpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwMSksbj0oZT1QeChyLmspLGUuSGMoKGJlKCksTm4pKT9lLkhjKEhuKT9lLkhjKG1yKT9lLkhjKEJuKT9udWxsOnIyZTpzMmU6aTJlOm4yZSksdzgodCxyLG5bMF0sKEp2KCksU3cpLDApLHc4KHQscixuWzFdLGhiLDEpLHc4KHQscixuWzJdLEF3LDEpfWZ1bmN0aW9uIFVwbih0LGUpe3ZhciBuLHI7bj15d24oZSksd3ZuKHQsZSxuKSxjYWUodC5hLHUoUShGYShlLmIpLChzZSgpLE82KSksMjMwKSksVnduKHQpLG1kbih0LGUpLHI9UHQoVHIsWHIsMjUsZS5iLmouYy5sZW5ndGgsMTUsMSksU2F0KHQsZSwoYmUoKSxObikscixuKSxTYXQodCxlLEhuLHIsbiksU2F0KHQsZSxtcixyLG4pLFNhdCh0LGUsQm4scixuKSx0LmE9bnVsbCx0LmM9bnVsbCx0LmI9bnVsbH1mdW5jdGlvbiBkNXQoKXtkNXQ9WixGX3Q9KFR6KCksJGh0KSxHeWU9bmV3IG1uKFdrdCxGX3QpLHF5ZT1uZXcgbW4oS2t0LChGbigpLCEwKSksZGUoLTEpLGp5ZT1uZXcgbW4oWWt0LGRlKC0xKSksZGUoLTEpLCR5ZT1uZXcgbW4oWGt0LGRlKC0xKSksSHllPW5ldyBtbihRa3QsITEpLFZ5ZT1uZXcgbW4oWmt0LCEwKSx6eWU9bmV3IG1uKENjdCwhMSksVXllPW5ldyBtbihKa3QsLTEpfWZ1bmN0aW9uIGc1dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgNzohdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLHhyKHQuZSksIXQuZSYmKHQuZT1uZXcgQ24oV3MsdCw3LDQpKSxycyh0LmUsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODohdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHhyKHQuZCksIXQuZCYmKHQuZD1uZXcgQ24oV3MsdCw4LDUpKSxycyh0LmQsdShuLDE0KSk7cmV0dXJufWg0dCh0LGUsbil9ZnVuY3Rpb24gcDV0KHQsZSl7dmFyIG4scixzLG8saDtpZihHdChlKT09PUd0KHQpKXJldHVybiEwO2lmKCFFdChlLDE1KXx8KGg9dShlLDE1KSx0LmdjKCkhPWguZ2MoKSkpcmV0dXJuITE7Zm9yKG89aC5LYygpLHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCkscz1vLlBiKCksIShHdChuKT09PUd0KHMpfHxuIT1udWxsJiZ5aShuLHMpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBXcG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz11KFBsKFdvKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcga0wpLG5ldyBKUCksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLG8uSmMobmV3IEVMKSxuPTAscz1vLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExKSxyLnA9PS0xJiZ2NXQodCxyLG4rKyl9ZnVuY3Rpb24gaWNlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHA5O2Nhc2UgMTpyZXR1cm4gbmV3IEtKO2Nhc2UgMjpyZXR1cm4gbmV3IFdKO2Nhc2UgMzpyZXR1cm4gbmV3IEFWdDtjYXNlIDQ6cmV0dXJuIG5ldyBwWXQ7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIG5vZGUgcGxhY2VyICIrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBzY2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgS3Z0O2Nhc2UgMTpyZXR1cm4gbmV3IFlKO2Nhc2UgMjpyZXR1cm4gbmV3IHpKO2Nhc2UgMzpyZXR1cm4gbmV3IHFKO2Nhc2UgNDpyZXR1cm4gbmV3IE1WdDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgY3ljbGUgYnJlYWtlciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gYjV0KCl7YjV0PVosQ3llPW5ldyBtbih6a3QsZGUoMCkpLF95ZT1uZXcgbW4ocWt0LDApLHdfdD0oUkkoKSxDViksRXllPW5ldyBtbihrY3Qsd190KSxkZSgwKSxreWU9bmV3IG1uKEVjdCxkZSgxKSkseV90PShjeigpLGpodCksU3llPW5ldyBtbihIa3QseV90KSx4X3Q9KE4kKCksUGh0KSxBeWU9bmV3IG1uKEdrdCx4X3QpLG1fdD0oR3ooKSxSaHQpLFR5ZT1uZXcgbW4oVmt0LG1fdCl9ZnVuY3Rpb24gS3BuKHQsZSxuKXt2YXIgcjtyPW51bGwsZSYmKHI9ZS5kKSxsXyh0LG5ldyBhOChlLm4uYS1yLmIrbi5hLGUubi5iLXIuZCtuLmIpKSxsXyh0LG5ldyBhOChlLm4uYS1yLmIrbi5hLGUubi5iK2Uuby5iK3IuYStuLmIpKSxsXyh0LG5ldyBhOChlLm4uYStlLm8uYStyLmMrbi5hLGUubi5iLXIuZCtuLmIpKSxsXyh0LG5ldyBhOChlLm4uYStlLm8uYStyLmMrbi5hLGUubi5iK2Uuby5iK3IuYStuLmIpKX1mdW5jdGlvbiB2NXQodCxlLG4pe3ZhciByLHMsbztmb3IoZS5wPW4sbz1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtuZXcgWXMoZSksbmV3IEVyKGUpXSkpKTt6cihvKTspcj11KExyKG8pLDExKSxyLnA9PS0xJiZ2NXQodCxyLG4pO2lmKGUuaS5rPT0oR24oKSxacykpZm9yKHM9bmV3IFMoZS5pLmopO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxyIT1lJiZyLnA9PS0xJiZ2NXQodCxyLG4pfWZ1bmN0aW9uIGFjZSh0KXt2YXIgZSxuLHIscyxvO2lmKHM9dShQbCh5cm4oUFF0KHQpKSxpMihuZXcgX2UsbmV3IHdlLG5ldyBucixjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksR2wpXSkpKSwxNSkscj1GRSxzLmdjKCk+PTIpZm9yKG49cy5LYygpLGU9eWUobi5QYigpKTtuLk9iKCk7KW89ZSxlPXllKG4uUGIoKSkscj1iLk1hdGgubWluKHIsKE9uKGUpLGUtKE9uKG8pLG8pKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gWXBuKHQsZSl7dmFyIG4scixzLG8saDtyPW5ldyBRaSxocyhyLGUsci5jLmIsci5jKTtkbyBmb3Iobj0oUW4oci5iIT0wKSx1KGNoKHIsci5hLmEpLDg2KSksdC5iW24uZ109MSxvPWVpKG4uZCwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksMTg4KSxoPXMuYyx0LmJbaC5nXT09MT9uaSh0LmEscyk6dC5iW2guZ109PTI/dC5iW2guZ109MTpocyhyLGgsci5jLmIsci5jKTt3aGlsZShyLmIhPTApfWZ1bmN0aW9uIFhwbih0LGUpe3ZhciBuLHIscztpZihHdChlKT09PUd0KEFyKHQpKSlyZXR1cm4hMDtpZighRXQoZSwxNSl8fChyPXUoZSwxNSkscz10LmdjKCkscyE9ci5nYygpKSlyZXR1cm4hMTtpZihFdChyLDU0KSl7Zm9yKG49MDtuPHM7bisrKWlmKCFmZCh0LlhiKG4pLHIuWGIobikpKXJldHVybiExO3JldHVybiEwfWVsc2UgcmV0dXJuIGlmbih0LktjKCksci5LYygpKX1mdW5jdGlvbiBvY2UodCxlKXt2YXIgbixyO2lmKHQuYy5sZW5ndGghPTApe2lmKHQuYy5sZW5ndGg9PTIpYzYoKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTApKSwoamwoKSx1MCkpLGM2KChBbigxLHQuYy5sZW5ndGgpLHUodC5jWzFdLDEwKSksd2IpO2Vsc2UgZm9yKHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLGM2KG4sZSk7dC5jPVB0KFhuLEllLDEsMCw1LDEpfX1mdW5jdGlvbiBRcG4odCl7dmFyIGUsbjtpZih0LmMubGVuZ3RoIT0yKXRocm93IHJ0KG5ldyBGbygiT3JkZXIgb25seSBhbGxvd2VkIGZvciB0d28gcGF0aHMuIikpO2U9KEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTcpKSxuPShBbigxLHQuYy5sZW5ndGgpLHUodC5jWzFdLDE3KSksZS5kLmkhPW4uYy5pJiYodC5jPVB0KFhuLEllLDEsMCw1LDEpLHQuY1t0LmMubGVuZ3RoXT1uLHQuY1t0LmMubGVuZ3RoXT1lKX1mdW5jdGlvbiBacG4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHI9bmV3IG4yLGg9RSQobmV3IHdsKHQuZykpLG89aC5hLmVjKCkuS2MoKTtvLk9iKCk7KXtpZihzPXUoby5QYigpLDEwKSwhcyl7WWIoZSwiVGhlcmUgYXJlIG5vIGNsYXNzZXMgaW4gYSBiYWxhbmNlZCBsYXlvdXQuIik7YnJlYWt9ZD10Lmpbcy5wXSxuPXUoV3YocixkKSwxNSksbnx8KG49bmV3IGxlLHAyKHIsZCxuKSksbi5GYyhzKX1yZXR1cm4gcn1mdW5jdGlvbiBKcG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2lmKG4pZm9yKG89bi5hLmxlbmd0aCxyPW5ldyBRYihvKSxkPShyLmItci5hKSpyLmM8MD8oSXAoKSxBYik6bmV3IFBwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksdz1fOChuLGguYSksdyYmKGs9b29uKE8wKHcsSGN0KSxlKSxraSh0LmYsayx3KSxzPUNkIGluIHcuYSxzJiZxQyhrLE8wKHcsQ2QpKSxKeih3LGspLEs0dCh3LGspKX1mdW5jdGlvbiB0Ym4odCxlKXt2YXIgbixyLHMsbyxoO2Zvcih3cihlLCJQb3J0IHNpZGUgcHJvY2Vzc2luZyIsMSksaD1uZXcgUyh0LmEpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxibGUocyk7Zm9yKHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksYmxlKHMpO29yKGUpfWZ1bmN0aW9uIGNjZSh0LGUsbil7dmFyIHIscyxvLGgsZDtpZihzPXQuZiwhcyYmKHM9dSh0LmEuYS5lYygpLktjKCkuUGIoKSw1NykpLGNfKHMsZSxuKSx0LmEuYS5nYygpIT0xKWZvcihyPWUqbixoPXQuYS5hLmVjKCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNTcpLG8hPXMmJihkPUh4KG8pLGQuZi5kPyhvLmQuZCs9citQMSxvLmQuYS09citQMSk6ZC5mLmEmJihvLmQuYS09citQMSkpfWZ1bmN0aW9uIFVzdCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSDtyZXR1cm4gaD1uLXQsZD1yLWUsbz1iLk1hdGguYXRhbjIoaCxkKSx3PW8rTW90LGs9by1Nb3QsQz1zKmIuTWF0aC5zaW4odykrdCxGPXMqYi5NYXRoLmNvcyh3KStlLE09cypiLk1hdGguc2luKGspK3QsSD1zKmIuTWF0aC5jb3MoaykrZSxfMShjdChvdChVcywxKSx0ZSw4LDAsW25ldyAkZShDLEYpLG5ldyAkZShNLEgpXSkpfWZ1bmN0aW9uIGVibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO3M9bixDPWUsbz1DO2RvIG89dC5hW28ucF0sZD0oTT10Lmdbby5wXSxYdCh0LnBbTS5wXSkrWHQodC5kW28ucF0pLW8uZC5kKSx3PXBvbihvLHIpLHcmJihoPShrPXQuZ1t3LnBdLFh0KHQucFtrLnBdKStYdCh0LmRbdy5wXSkrdy5vLmIrdy5kLmEpLHM9Yi5NYXRoLm1pbihzLGQtKGgrVjModC5rLG8sdykpKSk7d2hpbGUoQyE9byk7cmV0dXJuIHN9ZnVuY3Rpb24gbmJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE07cz1uLEM9ZSxvPUM7ZG8gbz10LmFbby5wXSxoPShNPXQuZ1tvLnBdLFh0KHQucFtNLnBdKStYdCh0LmRbby5wXSkrby5vLmIrby5kLmEpLHc9X2NuKG8sciksdyYmKGQ9KGs9dC5nW3cucF0sWHQodC5wW2sucF0pK1h0KHQuZFt3LnBdKS13LmQuZCkscz1iLk1hdGgubWluKHMsZC0oaCtWMyh0Lmssbyx3KSkpKTt3aGlsZShDIT1vKTtyZXR1cm4gc31mdW5jdGlvbiBxZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9KCF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSxZZih0Lm8sZSkpLHI/PyhuPWUud2coKSxFdChuLDQpJiYobj09bnVsbD8oIXQubyYmKHQubz1uZXcgVGwoKFpjKCksRWIpLCR3LHQsMCkpLEl6KHQubyxlKSk6KCF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSxZeih0Lm8sZSxuKSkpLG4pfWZ1bmN0aW9uIGZ5KCl7Znk9WixFZj1uZXcgJDMoIkhfTEVGVCIsMCksSjA9bmV3ICQzKCJIX0NFTlRFUiIsMSksVGY9bmV3ICQzKCJIX1JJR0hUIiwyKSxfZj1uZXcgJDMoIlZfVE9QIiwzKSxsMD1uZXcgJDMoIlZfQ0VOVEVSIiw0KSx6aD1uZXcgJDMoIlZfQk9UVE9NIiw1KSxVbD1uZXcgJDMoIklOU0lERSIsNiksQ2Y9bmV3ICQzKCJPVVRTSURFIiw3KSwkaD1uZXcgJDMoIkhfUFJJT1JJVFkiLDgpfWZ1bmN0aW9uIHJibih0KXt2YXIgZSxuLHIscyxvLGgsZDtpZihlPXQuSGgoUGgpLGUmJihkPUJyKFlmKCghZS5iJiYoZS5iPW5ldyB5bCgoZG4oKSxRYSksY2MsZSkpLGUuYiksInNldHRpbmdEZWxlZ2F0ZXMiKSksZCE9bnVsbCkpe2ZvcihuPW5ldyBsZSxzPXB5KGQsIlxcdysiKSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxuLmNbbi5jLmxlbmd0aF09cjtyZXR1cm4gbn1yZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIGlibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKCFlLmYpdGhyb3cgcnQobmV3IFBuKCJUaGUgaW5wdXQgZWRnZSBpcyBub3QgYSB0cmVlIGVkZ2UuIikpO2ZvcihvPW51bGwscz12aSxyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxkPW4uZCx3PW4uZSwkc3QodCxkLGUpJiYhJHN0KHQsdyxlKSYmKGg9dy5lLWQuZS1uLmEsaDxzJiYocz1oLG89bikpO3JldHVybiBvfWZ1bmN0aW9uIHNibih0KXt2YXIgZSxuLHIscyxvLGg7aWYoISh0LmYuZS5jLmxlbmd0aDw9MSkpe2U9MCxzPVhvZSh0KSxuPXNzO2Rve2ZvcihlPjAmJihzPW4pLGg9bmV3IFModC5mLmUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE0NCksIWplKFJlKFEobywoSkkoKSx5N3QpKSkpJiYocj1nbW4odCxvKSxMaShHZihvLmQpLHIpKTtuPVhvZSh0KX13aGlsZSghTGVuKHQsZSsrLHMsbikpfX1mdW5jdGlvbiBhYm4odCxlKXt2YXIgbixyLHM7Zm9yKHdyKGUsIkxheWVyIGNvbnN0cmFpbnQgcHJlcHJvY2Vzc2luZyIsMSksbj1uZXcgbGUscz1uZXcgaGEodC5hLDApO3MuYjxzLmQuZ2MoKTspcj0oUW4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDEwKSksTGNuKHIpJiYoTWRuKHIpLG4uY1tuLmMubGVuZ3RoXT1yLEVsKHMpKTtuLmMubGVuZ3RoPT0wfHxKdCh0LChzZSgpLE5sdCksbiksb3IoZSl9ZnVuY3Rpb24gb2JuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobz10LmcuYSxoPXQuZy5iLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw3MCkscz1uLm4sdC5hPT0oTTEoKSxpNyl8fHQuaT09KGJlKCksSG4pP3MuYT1vOnQuYT09czd8fHQuaT09KGJlKCksQm4pP3MuYT1vK3Quai5hLW4uby5hOnMuYT1vKyh0LmouYS1uLm8uYSkvMixzLmI9aCxMaShzLGUpLGgrPW4uby5iK3QuZX1mdW5jdGlvbiBjYm4odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih3cihuLCJQcm9jZXNzb3Igc2V0IGNvb3JkaW5hdGVzIiwxKSx0LmE9ZS5iLmI9PTA/MTplLmIuYixvPW51bGwscj1laShlLmIsMCk7IW8mJnIuYiE9ci5kLmM7KWg9dSh0aShyKSw4NiksamUoUmUoUShoLChmYygpLFd5KSkpKSYmKG89aCxzPWguZSxzLmE9dShRKGgsTGh0KSwxOSkuYSxzLmI9MCk7T2FlKHQsYnl0KG8pLFJjKG4sMSkpLG9yKG4pfWZ1bmN0aW9uIHVibih0LGUsbil7dmFyIHIscyxvO2Zvcih3cihuLCJQcm9jZXNzb3IgZGV0ZXJtaW5lIHRoZSBoZWlnaHQgZm9yIGVhY2ggbGV2ZWwiLDEpLHQuYT1lLmIuYj09MD8xOmUuYi5iLHM9bnVsbCxyPWVpKGUuYiwwKTshcyYmci5iIT1yLmQuYzspbz11KHRpKHIpLDg2KSxqZShSZShRKG8sKGZjKCksV3kpKSkpJiYocz1vKTtzJiZYY2UodCxfMShjdChvdChieG4sMSksaTZ0LDg2LDAsW3NdKSksbiksb3Iobil9ZnVuY3Rpb24gbGJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07az10LHc9UEMoaywiaW5kaXZpZHVhbFNwYWNpbmdzIiksdyYmKHI9cjIoZSwoY2koKSxxNikpLGg9IXIsaCYmKHM9bmV3IFd1LGJvKGUscTYscykpLGQ9dShxZShlLHE2KSwzNzMpLE09dyxvPW51bGwsTSYmKG89KEM9dWl0KE0sUHQoQWUsdGUsMiwwLDYsMSkpLG5ldyBmZXQoTSxDKSkpLG8mJihuPW5ldyBFVnQoTSxkKSx2YShvLG4pKSl9ZnVuY3Rpb24gaGJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtyZXR1cm4gdz1udWxsLE09dCxDPW51bGwsKE1kZSBpbiBNLmF8fElkZSBpbiBNLmF8fHdIIGluIE0uYSkmJihrPW51bGwsRj13eXQoZSksaD1QQyhNLE1kZSksbj1uZXcgc3p0KEYpLEJsbihuLmEsaCksZD1QQyhNLElkZSkscj1uZXcgcHp0KEYpLEZsbihyLmEsZCksbz1VdihNLHdIKSxzPW5ldyB3enQoRiksaz0oZ2RuKHMuYSxvKSxvKSxDPWspLHc9Qyx3fWZ1bmN0aW9uIGZibih0LGUpe3ZhciBuLHIscztpZihlPT09dClyZXR1cm4hMDtpZihFdChlLDU0Mykpe2lmKHM9dShlLDgzNSksdC5hLmQhPXMuYS5kfHxZMyh0KS5nYygpIT1ZMyhzKS5nYygpKXJldHVybiExO2ZvcihyPVkzKHMpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDQxNiksTlF0KHQsbi5hLmNkKCkpIT11KG4uYS5kZCgpLDE0KS5nYygpKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGRibih0KXt2YXIgZSxuLHIscztyZXR1cm4gcj11KHQuYSwxOSkuYSxzPXUodC5iLDE5KS5hLGU9cixuPXMscj09MCYmcz09MD9uLT0xOnI9PS0xJiZzPD0wPyhlPTAsbi09Mik6cjw9MCYmcz4wPyhlLT0xLG4tPTEpOnI+PTAmJnM8MD8oZSs9MSxuKz0xKTpyPjAmJnM+PTA/KGUtPTEsbis9MSk6KGUrPTEsbi09MSksbmV3IGxhKGRlKGUpLGRlKG4pKX1mdW5jdGlvbiBnYm4odCxlKXtyZXR1cm4gdC5jPGUuYz8tMTp0LmM+ZS5jPzE6dC5iPGUuYj8tMTp0LmI+ZS5iPzE6dC5hIT1lLmE/SGkodC5hKS1IaShlLmEpOnQuZD09KEJDKCksTlMpJiZlLmQ9PU9TPy0xOnQuZD09T1MmJmUuZD09TlM/MTowfWZ1bmN0aW9uIHVjZSh0LGUpe3ZhciBuLHIscyxvLGg7cmV0dXJuIG89ZS5hLG8uYy5pPT1lLmI/aD1vLmQ6aD1vLmMsby5jLmk9PWUuYj9yPW8uYzpyPW8uZCxzPXFsbih0LmEsaCxyKSxzPjAmJnM8RkU/KG49ZWJuKHQuYSxyLmkscyx0LmMpLG1lZSh0LmEsci5pLC1uKSxuPjApOnM8MCYmLXM8RkU/KG49bmJuKHQuYSxyLmksLXMsdC5jKSxtZWUodC5hLHIuaSxuKSxuPjApOiExfWZ1bmN0aW9uIHBibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO2ZvcihzPShlLXQuZCkvdC5jLmMubGVuZ3RoLG89MCx0LmErPW4sdC5kPWUsTT1uZXcgUyh0LmMpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDMzKSxrPUMuZyx3PUMuZix5dShDLEMuaStvKnMpLHh1KEMsQy5qK3IqbiksUXYoQyxDLmcrcyksWHYoQyx0LmEpLCsrbyxkPUMuZyxoPUMuZixyb2UoQyxuZXcgJGUoZCxoKSxuZXcgJGUoayx3KSl9ZnVuY3Rpb24gYmJuKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGQ9dC5sZW5ndGgscz0oZCsxKS8yfDAsaD1QdChIdSxONCwyNSxzLDE1LDEpLGQlMiE9MCYmKGhbLS1zXT1SNXQoKFJyKGQtMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQtMSkpKSksbj0wLHI9MDtuPHM7KytuKWU9UjV0KGJhKHQscisrKSksbz1SNXQoYmEodCxyKyspKSxoW25dPShlPDw0fG8pPDwyND4+MjQ7cmV0dXJuIGh9ZnVuY3Rpb24gdmJuKHQpe2lmKHQucGUoKSl7dmFyIGU9dC5jO2UucWUoKT90Lm89IlsiK2UubjplLnBlKCk/dC5vPSJbIitlLm5lKCk6dC5vPSJbTCIrZS5uZSgpKyI7Iix0LmI9ZS5tZSgpKyJbXSIsdC5rPWUub2UoKSsiW10iO3JldHVybn12YXIgbj10Lmoscj10LmQ7cj1yLnNwbGl0KCIvIiksdC5vPVlpdCgiLiIsW24sWWl0KCIkIixyKV0pLHQuYj1ZaXQoIi4iLFtuLFlpdCgiLiIscildKSx0Lms9cltyLmxlbmd0aC0xXX1mdW5jdGlvbiB3Ym4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPW51bGwsbz1uZXcgUyh0LmUuYSk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMTIxKSxzLmIuYS5jLmxlbmd0aD09cy5nLmEuYy5sZW5ndGgpe2ZvcihyPXMuZSxoPWVnbihzKSxuPXMuZS11KGguYSwxOSkuYSsxO248cy5lK3UoaC5iLDE5KS5hO24rKyllW25dPGVbcl0mJihyPW4pO2Vbcl08ZVtzLmVdJiYoLS1lW3MuZV0sKytlW3JdLHMuZT1yKX19ZnVuY3Rpb24gV3N0KHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHM9c3Mscj1UcyxuPW5ldyBTKHQuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IoZT11KEoobiksMjkpLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksdz1YdCh0LnBbby5wXSksZD13K1h0KHQuYlt0Lmdbby5wXS5wXSkscz1iLk1hdGgubWluKHMsdykscj1iLk1hdGgubWF4KHIsZCk7cmV0dXJuIHItc31mdW5jdGlvbiB3NXQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iocz1WNXQodCxlKSxkPTAsdz1zLmdjKCk7ZDx3OysrZClpZihvPXUocy5YYihkKSwxNzApLGhuKHIsazgoRW8odCxvKSkpKXtpZihoPVpNKEVvKHQsbykpLG49PW51bGwpe2lmKGg9PW51bGwpcmV0dXJuIG99ZWxzZSBpZihobihuLGgpKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIG01dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2ZvcihzPW9hdCh0LGUpLGQ9MCx3PXMuZ2MoKTtkPHc7KytkKWlmKG89dShzLlhiKGQpLDE3MCksaG4ocixrOChFbyh0LG8pKSkpe2lmKGg9Wk0oRW8odCxvKSksbj09bnVsbCl7aWYoaD09bnVsbClyZXR1cm4gb31lbHNlIGlmKGhuKG4saCkpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gbWJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoaD1uZXcgdHgsZD1hdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpZm9yKG89MDtvPHQuaTsrK28pcz1yW29dLGQucmwocy5haygpKSYmTXIoaCxzKTtlbHNlIGZvcihvPTA7bzx0Lmk7KytvKXM9cltvXSxkLnJsKHMuYWsoKSkmJih3PXMuZGQoKSxNcihoLG4/ZF8odCxlLG8saC5pLHcpOncpKTtyZXR1cm4gSnd0KGgpfWZ1bmN0aW9uIHlibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49bmV3IGVfKGM3KSxzPShpNigpLGN0KG90KGM3LDEpLGFlLDIyNywwLFtvNyxkUyxhNyxPeSxINCxxNF0pKSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxaMnQobixyLG5ldyBsZSk7cmV0dXJuIHVzKHB1KFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgbkYpLG5ldyByRiksbmV3IG1nKGUpKSxuZXcgc2QobikpLG59ZnVuY3Rpb24gc3EodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihvPWUuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMzMpLEM9cy5pK3MuZy8yLEY9cy5qK3MuZi8yLHc9dC5mLGg9dy5pK3cuZy8yLGQ9dy5qK3cuZi8yLGs9Qy1oLE09Ri1kLHI9Yi5NYXRoLnNxcnQoayprK00qTSksayo9dC5lL3IsTSo9dC5lL3Isbj8oQy09ayxGLT1NKTooQys9ayxGKz1NKSx5dShzLEMtcy5nLzIpLHh1KHMsRi1zLmYvMil9ZnVuY3Rpb24gYjQodCl7dmFyIGUsbixyO2lmKCF0LmMmJnQuYiE9bnVsbCl7Zm9yKGU9dC5iLmxlbmd0aC00O2U+PTA7ZS09Milmb3Iobj0wO248PWU7bis9MikodC5iW25dPnQuYltuKzJdfHx0LmJbbl09PT10LmJbbisyXSYmdC5iW24rMV0+dC5iW24rM10pJiYocj10LmJbbisyXSx0LmJbbisyXT10LmJbbl0sdC5iW25dPXIscj10LmJbbiszXSx0LmJbbiszXT10LmJbbisxXSx0LmJbbisxXT1yKTt0LmM9ITB9fWZ1bmN0aW9uIGxjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKGg9ZT09MT9RdXQ6WHV0LG89aC5hLmVjKCkuS2MoKTtvLk9iKCk7KWZvcihzPXUoby5QYigpLDEwMyksdz11KEFpKHQuZi5jLHMpLDIxKS5LYygpO3cuT2IoKTspc3dpdGNoKGQ9dSh3LlBiKCksNDYpLHI9dShkLmIsODEpLGs9dShkLmEsMTg5KSxuPWsuYyxzLmcpe2Nhc2UgMjpjYXNlIDE6ci5nLmQrPW47YnJlYWs7Y2FzZSA0OmNhc2UgMzpyLmcuYys9bn19ZnVuY3Rpb24geGJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihrPS0xLEM9MCxoPXQsZD0wLHc9aC5sZW5ndGg7ZDx3OysrZCl7Zm9yKG89aFtkXSxuPW5ldyBPS3Qoaz09LTE/dFswXTp0W2tdLGUsKFlDKCksdVYpKSxyPTA7cjxvLmxlbmd0aDtyKyspZm9yKHM9cisxO3M8by5sZW5ndGg7cysrKVZzKG9bcl0sKHNlKCksVGMpKSYmVnMob1tzXSxUYykmJkloZShuLG9bcl0sb1tzXSk+MCYmKytDOysra31yZXR1cm4gQ31mdW5jdGlvbiBiZih0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBJbChBcCh0LmdtKSksbi5hKz0iQCIsVnIobiwoZT1IaSh0KT4+PjAsZS50b1N0cmluZygxNikpKSx0LmtoKCk/KG4uYSs9IiAoZVByb3h5VVJJOiAiLGhjKG4sdC5xaCgpKSx0LiRnKCkmJihuLmErPSIgZUNsYXNzOiAiLGhjKG4sdC4kZygpKSksbi5hKz0iKSIpOnQuJGcoKSYmKG4uYSs9IiAoZUNsYXNzOiAiLGhjKG4sdC4kZygpKSxuLmErPSIpIiksbi5hfWZ1bmN0aW9uIHBfKHQpe3ZhciBlLG4scixzO2lmKHQuZSl0aHJvdyBydChuZXcgRm8oKEwwKE11dCksYm90K011dC5rK3ZvdCkpKTtmb3IodC5kPT0oYW8oKSxjMCkmJl9xKHQsamgpLG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDMwNyksZS5nPWUuaTtmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksNTcpLHIuaT1UcztyZXR1cm4gdC5iLkxlKHQpLHR9ZnVuY3Rpb24ga2JuKHQsZSl7dmFyIG4scixzLG8saDtpZihlPDIqdC5iKXRocm93IHJ0KG5ldyBQbigiVGhlIGtub3QgdmVjdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gdGltZSB0aGUgZGltZW5zaW9uIGVsZW1lbnRzLiIpKTtmb3IodC5mPTEscz0wO3M8dC5iO3MrKyl1ZSh0LmUsMCk7Zm9yKGg9ZSsxLTIqdC5iLG49aCxvPTE7bzxoO28rKyl1ZSh0LmUsby9uKTtpZih0LmQpZm9yKHI9MDtyPHQuYjtyKyspdWUodC5lLDEpfWZ1bmN0aW9uIGhjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZihrPWUsQz11KHR6KEtudCh0LmkpLGspLDMzKSwhQyl0aHJvdyBzPU8wKGssQ2QpLGQ9IlVuYWJsZSB0byBmaW5kIGVsayBub2RlIGZvciBqc29uIG9iamVjdCAnIitzLHc9ZCsiJyBQYW5pYyEiLHJ0KG5ldyBhZCh3KSk7bz1VdihrLCJlZGdlcyIpLG49bmV3IHBWdCh0LEMpLGlwbihuLmEsbi5iLG8pLGg9VXYoayxHY3QpLHI9bmV3IFEkdCh0KSxiMW4oci5hLGgpfWZ1bmN0aW9uIGZjZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2lmKHIhPW51bGwpe2lmKHM9dC5kW2VdLHMpe2ZvcihvPXMuZyx3PXMuaSxkPTA7ZDx3OysrZClpZihoPXUob1tkXSwxMzMpLGguU2goKT09biYmeWkocixoLmNkKCkpKXJldHVybiBkfX1lbHNlIGlmKHM9dC5kW2VdLHMpe2ZvcihvPXMuZyx3PXMuaSxkPTA7ZDx3OysrZClpZihoPXUob1tkXSwxMzMpLEd0KGguY2QoKSk9PT1HdChyKSlyZXR1cm4gZH1yZXR1cm4tMX1mdW5jdGlvbiB3RSh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lPT1udWxsP2VjKEFvKHQuZixudWxsKSk6VTkodC5nLGUpLEV0KG4sMjM1KT8ocz11KG4sMjM1KSxzLlFoKCk9PW51bGwscyk6RXQobiw0OTgpPyhyPXUobiwxOTM4KSxzPXIuYSxzJiYocy55Yj09bnVsbHx8KGU9PW51bGw/c3UodC5mLG51bGwscyk6bncodC5nLGUscykpKSxzKTpudWxsfWZ1bmN0aW9uIEVibih0KXtQNXQoKTt2YXIgZSxuLHIscyxvLGgsZDtpZih0PT1udWxsfHwocz10Lmxlbmd0aCxzJTIhPTApKXJldHVybiBudWxsO2ZvcihlPVIkKHQpLG89cy8yfDAsbj1QdChIdSxONCwyNSxvLDE1LDEpLHI9MDtyPG87cisrKXtpZihoPWxBW2VbcioyXV0saD09LTF8fChkPWxBW2VbcioyKzFdXSxkPT0tMSkpcmV0dXJuIG51bGw7bltyXT0oaDw8NHxkKTw8MjQ+PjI0fXJldHVybiBufWZ1bmN0aW9uIFRibih0LGUsbil7dmFyIHIscyxvO2lmKHM9dShnbyh0LmksZSksMzA2KSwhcylpZihzPW5ldyBoZWUodC5kLGUsbiksTngodC5pLGUscyksUzN0KGUpKSRYZSh0LmEsZS5jLGUuYixzKTtlbHNlIHN3aXRjaChvPWhnbihlKSxyPXUoZ28odC5wLG8pLDI0NCksby5nKXtjYXNlIDE6Y2FzZSAzOnMuaj0hMCxKdHQocixlLmIscyk7YnJlYWs7Y2FzZSA0OmNhc2UgMjpzLms9ITAsSnR0KHIsZS5jLHMpfXJldHVybiBzfWZ1bmN0aW9uIENibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYoZD1uZXcgdHgsdz1hdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpZm9yKGg9MDtoPHQuaTsrK2gpbz1zW2hdLHcucmwoby5haygpKSYmTXIoZCxvKTtlbHNlIGZvcihoPTA7aDx0Lmk7KytoKW89c1toXSx3LnJsKG8uYWsoKSkmJihrPW8uZGQoKSxNcihkLHI/ZF8odCxlLGgsZC5pLGspOmspKTtyZXR1cm4gbTN0KGQsbil9ZnVuY3Rpb24gZGNlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztpZihzPXQuYltlLnBdLHM+PTApcmV0dXJuIHM7Zm9yKG89MSxkPW5ldyBTKGUuaik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDExKSxyPW5ldyBTKGguZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLGs9bi5kLmksZSE9ayYmKHc9ZGNlKHQsayksbz1iLk1hdGgubWF4KG8sdysxKSk7cmV0dXJuIENsbih0LGUsbyksb31mdW5jdGlvbiBnY2UodCxlLG4pe3ZhciByLHMsbztmb3Iocj0xO3I8dC5jLmxlbmd0aDtyKyspe2ZvcihvPShBbihyLHQuYy5sZW5ndGgpLHUodC5jW3JdLDEwKSkscz1yO3M+MCYmZS51ZSgoQW4ocy0xLHQuYy5sZW5ndGgpLHUodC5jW3MtMV0sMTApKSxvKT4wOylhaCh0LHMsKEFuKHMtMSx0LmMubGVuZ3RoKSx1KHQuY1tzLTFdLDEwKSkpLC0tcztBbihzLHQuYy5sZW5ndGgpLHQuY1tzXT1vfW4uYT1uZXcgQ3Isbi5iPW5ldyBDcn1mdW5jdGlvbiBfYm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKEM9KHI9dShlLmUmJmUuZSgpLDkpLG5ldyByaChyLHUodWYocixyLmxlbmd0aCksOSksMCkpLHc9cHkobiwiW1xcW1xcXVxccyxdKyIpLG89dyxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKWlmKHM9b1toXSx1eShzKS5sZW5ndGghPTApe2lmKGs9U29lKHQscyksaz09bnVsbClyZXR1cm4gbnVsbDtwZihDLHUoaywyMikpfXJldHVybiBDfWZ1bmN0aW9uIFNibih0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLHI9KE9uKDApLDApLHI+MCYmKCEoT3AodC5hLmMpJiZlLm4uZCkmJiEoYzgodC5hLmMpJiZlLm4uYikmJihlLmcuZC09Yi5NYXRoLm1heCgwLHIvMi0uNSkpLCEoT3AodC5hLmMpJiZlLm4uYSkmJiEoYzgodC5hLmMpJiZlLm4uYykmJihlLmcuYSs9Yi5NYXRoLm1heCgwLHItMSkpKX1mdW5jdGlvbiBwY2UodCxlLG4pe3ZhciByLHM7aWYoKHQuYy10LmImdC5hLmxlbmd0aC0xKT09MillPT0oYmUoKSxObil8fGU9PUhuPyhWJCh1KEtDKHQpLDE1KSwoamwoKSx1MCkpLFYkKHUoS0ModCksMTUpLHdiKSk6KFYkKHUoS0ModCksMTUpLChqbCgpLHdiKSksViQodShLQyh0KSwxNSksdTApKTtlbHNlIGZvcihzPW5ldyBNQyh0KTtzLmEhPXMuYjspcj11KG16KHMpLDE1KSxWJChyLG4pfWZ1bmN0aW9uIEFibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPWQ4KG5ldyB2cHQodCkpLGQ9bmV3IGhhKHMscy5jLmxlbmd0aCksbz1kOChuZXcgdnB0KGUpKSx3PW5ldyBoYShvLG8uYy5sZW5ndGgpLGg9bnVsbDtkLmI+MCYmdy5iPjAmJihuPShRbihkLmI+MCksdShkLmEuWGIoZC5jPS0tZC5iKSwzMykpLHI9KFFuKHcuYj4wKSx1KHcuYS5YYih3LmM9LS13LmIpLDMzKSksbj09cik7KWg9bjtyZXR1cm4gaH1mdW5jdGlvbiBvbCh0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gbz10LmEqZm90K3QuYioxNTAyLGQ9dC5iKmZvdCsxMSxuPWIuTWF0aC5mbG9vcihkKlBEKSxvKz1uLGQtPW4qUnh0LG8lPVJ4dCx0LmE9byx0LmI9ZCxlPD0yND9iLk1hdGguZmxvb3IodC5hKlRFdFtlXSk6KHM9dC5hKigxPDxlLTI0KSxoPWIuTWF0aC5mbG9vcih0LmIqQ0V0W2VdKSxyPXMraCxyPj0yMTQ3NDgzNjQ4JiYoci09Y290KSxyKX1mdW5jdGlvbiBiY2UodCxlLG4pe3ZhciByLHMsbyxoOyRRdCh0LGUpPiRRdCh0LG4pPyhyPVlvKG4sKGJlKCksSG4pKSx0LmQ9ci5kYygpPzA6Q250KHUoci5YYigwKSwxMSkpLGg9WW8oZSxCbiksdC5iPWguZGMoKT8wOkNudCh1KGguWGIoMCksMTEpKSk6KHM9WW8obiwoYmUoKSxCbikpLHQuZD1zLmRjKCk/MDpDbnQodShzLlhiKDApLDExKSksbz1ZbyhlLEhuKSx0LmI9by5kYygpPzA6Q250KHUoby5YYigwKSwxMSkpKX1mdW5jdGlvbiB2Y2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYodCYmKGU9dC5IaChQaCksZSYmKGg9QnIoWWYoKCFlLmImJihlLmI9bmV3IHlsKChkbigpLFFhKSxjYyxlKSksZS5iKSwiY29udmVyc2lvbkRlbGVnYXRlcyIpKSxoIT1udWxsKSkpe2ZvcihkPW5ldyBsZSxyPXB5KGgsIlxcdysiKSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxkLmNbZC5jLmxlbmd0aF09bjtyZXR1cm4gZH1yZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIHdjZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPXQuby5hLG89dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExMSkscy5lLmE9bipYdCh5ZShzLmIuV2UoWkgpKSkscy5lLmI9KHI9cy5iLHIuWGUoKGNpKCksaGwpKT9yLkhmKCk9PShiZSgpLE5uKT8tci5yZigpLmItWHQoeWUoci5XZShobCkpKTpYdCh5ZShyLldlKGhsKSkpOnIuSGYoKT09KGJlKCksTm4pPy1yLnJmKCkuYjowKX1mdW5jdGlvbiBMYm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztlPSEwLHM9bnVsbCxvPW51bGw7dDpmb3Iodz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSwxMCkscj1uZXcgYXIobHIoam8oZCkuYS5LYygpLG5ldyB6KSk7enIocik7KXtpZihuPXUoTHIociksMTcpLHMmJnMhPWQpe2U9ITE7YnJlYWsgdH1pZihzPWQsaD1uLmMuaSxvJiZvIT1oKXtlPSExO2JyZWFrIHR9bz1ofXJldHVybiBlfWZ1bmN0aW9uIE1ibih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihvPS0xLGQ9LTEsaD0wO2g8ZS5jLmxlbmd0aCYmKHM9KEFuKGgsZS5jLmxlbmd0aCksdShlLmNbaF0sMzI5KSksIShzLmM+dC5jKSk7aCsrKXMuYT49dC5zJiYobzwwJiYobz1oKSxkPWgpO3JldHVybiB3PSh0LnMrdC5jKS8yLG8+PTAmJihyPWh3bih0LGUsbyxkKSx3PXlZZSgoQW4ocixlLmMubGVuZ3RoKSx1KGUuY1tyXSwzMjkpKSkseHBuKGUscixuKSksd31mdW5jdGlvbiBLc3QoKXtLc3Q9WixXeWU9bmV3IGVvKChjaSgpLCQ2KSwxLjMpLFJfdD1SU3QsVl90PW5ldyBNdigxNSksdDNlPW5ldyBlbyhxMixWX3QpLG4zZT1uZXcgZW8oSDIsMTUpLEt5ZT1CVixReWU9ejIsWnllPWE1LEp5ZT12YixYeWU9czUscV90PVlPLGUzZT1LeSxHX3Q9KGQ1dCgpLEd5ZSksel90PXF5ZSxIX3Q9SHllLFVfdD1WeWUsal90PXp5ZSwkX3Q9UlYsWXllPSRTdCxSTz0keWUsQl90PWp5ZSxXX3Q9VXllfWZ1bmN0aW9uIElyKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztmb3IoaD0obz1uZXcgSkYsbyksdHl0KGgsKE9uKGUpLGUpKSxrPSghaC5iJiYoaC5iPW5ldyB5bCgoZG4oKSxRYSksY2MsaCkpLGguYiksdz0xO3c8bi5sZW5ndGg7dys9MilZeihrLG5bdy0xXSxuW3ddKTtmb3Iocj0oIXQuQWImJih0LkFiPW5ldyBoZShacix0LDAsMykpLHQuQWIpLGQ9MDtkPDA7KytkKXM9TmVuKHUoU3QocixyLmktMSksNTkwKSkscj1zO01yKHIsaCl9ZnVuY3Rpb24gbWNlKHQsZSxuKXt2YXIgcixzLG87Zm9yKGtRZS5jYWxsKHRoaXMsbmV3IGxlKSx0aGlzLmE9ZSx0aGlzLmI9bix0aGlzLmU9dCxyPSh0LmImJmJhdCh0KSx0LmEpLHRoaXMuZD1DWHQoci5hLHRoaXMuYSksdGhpcy5jPUNYdChyLmIsdGhpcy5iKSxzbG4odGhpcyx0aGlzLmQsdGhpcy5jKSxRZ24odGhpcyksbz10aGlzLmUuZS5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMjY2KSxzLmMuYy5sZW5ndGg+MCYmaTNuKHRoaXMscyl9ZnVuY3Rpb24geTV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHc7aWYoIXNbZS5iXSl7Zm9yKHNbZS5iXT0hMCxoPXIsIWgmJihoPW5ldyBfJCksdWUoaC5lLGUpLHc9b1tlLmJdLktjKCk7dy5PYigpOylkPXUody5QYigpLDI4MiksIShkLmQ9PW58fGQuYz09bikmJihkLmMhPWUmJnk1dCh0LGQuYyxlLGgscyxvKSxkLmQhPWUmJnk1dCh0LGQuZCxlLGgscyxvKSx1ZShoLmMsZCksQXMoaC5kLGQuYikpO3JldHVybiBofXJldHVybiBudWxsfWZ1bmN0aW9uIElibih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT0wLHM9bmV3IFModC5lKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksbj1BOChuZXcgVG4obnVsbCxuZXcgX24oci5iLDE2KSksbmV3IHdZKSxuJiYrK2U7Zm9yKGg9bmV3IFModC5nKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksZD1BOChuZXcgVG4obnVsbCxuZXcgX24oby5iLDE2KSksbmV3IG1ZKSxkJiYrK2U7cmV0dXJuIGU+PTJ9ZnVuY3Rpb24gRGJuKHQsZSl7dmFyIG4scixzLG87Zm9yKHdyKGUsIlNlbGYtTG9vcCBwcmUtcHJvY2Vzc2luZyIsMSkscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxnbG4obikmJihzPShvPW5ldyBQaWUobiksSnQobiwoc2UoKSxkNyksbyksWHduKG8pLG8pLHVzKHB1KFdvKG5ldyBUbihudWxsLG5ldyBfbihzLmQsMTYpKSxuZXcgZEYpLG5ldyB0WCksbmV3IGVYKSxWMm4ocykpO29yKGUpfWZ1bmN0aW9uIE9ibih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQztmb3Iobz10LmMuZC5qLGg9dShRZihuLDApLDgpLEM9MTtDPG4uYjtDKyspaz11KFFmKG4sQyksOCksaHMocixoLHIuYy5iLHIuYyksZD11ZChMaShuZXcgeW8oaCksayksLjUpLHc9dWQobmV3IGJydChJeXQobykpLHMpLExpKGQsdyksaHMocixkLHIuYy5iLHIuYyksaD1rLG89ZT09MD9reihvKTp0M3Qobyk7bmkociwoUW4obi5iIT0wKSx1KG4uYy5iLmMsOCkpKX1mdW5jdGlvbiBOYm4odCl7ZnkoKTt2YXIgZSxuLHI7cmV0dXJuIG49amkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbQ2ZdKSksIShBSShoJChuLHQpKT4xfHwoZT1qaShFZixjdChvdChsbywxKSxhZSw5MywwLFtKMCxUZl0pKSxBSShoJChlLHQpKT4xKXx8KHI9amkoX2YsY3Qob3QobG8sMSksYWUsOTMsMCxbbDAsemhdKSksQUkoaCQocix0KSk+MSkpfWZ1bmN0aW9uIFBibih0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lLkhoKHQuYSksbiYmKHM9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSwiYWZmaWxpYXRpb24iKSkscyE9bnVsbCk/KHI9ZGoocyxFdSgzNSkpLHI9PS0xP1BpdCh0LGtDKHQsRmwoZS5IaigpKSkscyk6cj09MD9QaXQodCxudWxsLHMuc3Vic3RyKDEpKTpQaXQodCxzLnN1YnN0cigwLHIpLHMuc3Vic3RyKHIrMSkpKTpudWxsfWZ1bmN0aW9uIEZibih0KXt2YXIgZSxuLHI7dHJ5e3JldHVybiB0PT1udWxsP1R1OiRvKHQpfWNhdGNoKHMpe2lmKHM9V2kocyksRXQocywxMDIpKXJldHVybiBlPXMscj1BcChzbCh0KSkrIkAiKyhuPShxZCgpLE8zdCh0KT4+PjApLG4udG9TdHJpbmcoMTYpKSxUaG4oRWNuKCksKHM4KCksIkV4Y2VwdGlvbiBkdXJpbmcgbGVuaWVudEZvcm1hdCBmb3IgIityKSxlKSwiPCIrcisiIHRocmV3ICIrQXAoZS5nbSkrIj4iO3Rocm93IHJ0KHMpfX1mdW5jdGlvbiB5Y2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgR0o7Y2FzZSAxOnJldHVybiBuZXcgSUI7Y2FzZSAyOnJldHVybiBuZXcga0d0O2Nhc2UgMzpyZXR1cm4gbmV3IERMO2Nhc2UgNDpyZXR1cm4gbmV3IEhXdDtjYXNlIDU6cmV0dXJuIG5ldyBWSjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5ZXJlciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24geDV0KHQsZSxuKXt2YXIgcixzLG87Zm9yKG89bmV3IFModC50KTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwyNjgpLHIuYi5zPDAmJnIuYz4wJiYoci5iLm4tPXIuYyxyLmIubjw9MCYmci5iLnU+MCYmbmkoZSxyLmIpKTtmb3Iocz1uZXcgUyh0LmkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI2OCksci5hLnM8MCYmci5jPjAmJihyLmEudS09ci5jLHIuYS51PD0wJiZyLmEubj4wJiZuaShuLHIuYSkpfWZ1bmN0aW9uIGFxKHQpe3ZhciBlLG4scixzLG87aWYodC5nPT1udWxsJiYodC5kPXQuc2kodC5mKSxNcih0LHQuZCksdC5jKSlyZXR1cm4gbz10LmYsbztpZihlPXUodC5nW3QuaS0xXSw0Nykscz1lLlBiKCksdC5lPWUsbj10LnNpKHMpLG4uT2IoKSl0LmQ9bixNcih0LG4pO2Vsc2UgZm9yKHQuZD1udWxsOyFlLk9iKCkmJihKaSh0LmcsLS10LmksbnVsbCksdC5pIT0wKTspcj11KHQuZ1t0LmktMV0sNDcpLGU9cjtyZXR1cm4gc31mdW5jdGlvbiBCYm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYocj1lLHM9ci5haygpLFYwKHQuZSxzKSl7aWYocy5oaSgpJiZrJCh0LHMsci5kZCgpKSlyZXR1cm4hMX1lbHNlIGZvcihkPWF1KHQuZS5UZygpLHMpLG49dSh0LmcsMTE5KSxvPTA7bzx0Lmk7KytvKWlmKGg9bltvXSxkLnJsKGguYWsoKSkpcmV0dXJuIHlpKGgscik/ITE6KHUodTQodCxvLGUpLDcyKSwhMCk7cmV0dXJuIE1yKHQsZSl9ZnVuY3Rpb24gUmJuKHQsZSxuLHIpe3ZhciBzLG8saCxkO2ZvcihzPW5ldyBIMCh0KSxfMChzLChHbigpLFNsKSksSnQocywoc2UoKSxfaSksZSksSnQocyxUTyxyKSxKdChzLChUZSgpLG9zKSwob2EoKSxWYykpLEp0KHMsbjEsZS5jKSxKdChzLFJoLGUuZCksVWNlKGUscyksZD1iLk1hdGguZmxvb3Iobi8yKSxoPW5ldyBTKHMuaik7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTEpLG8ubi5iPWQ7cmV0dXJuIHN9ZnVuY3Rpb24gamJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2Zvcih3PUhkKHQuYy10LmImdC5hLmxlbmd0aC0xKSxrPW51bGwsQz1udWxsLG89bmV3IE1DKHQpO28uYSE9by5iOylzPXUobXoobyksMTApLG49KGQ9dShRKHMsKHNlKCksbjEpKSwxMSksZD9kLmk6bnVsbCkscj0oaD11KFEocyxSaCksMTEpLGg/aC5pOm51bGwpLChrIT1ufHxDIT1yKSYmKG9jZSh3LGUpLGs9bixDPXIpLHcuY1t3LmMubGVuZ3RoXT1zO29jZSh3LGUpfWZ1bmN0aW9uIHhjZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT0wLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMTApLG89bmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLHQ9PXMuZC5pLmMmJnMuYy5qPT0oYmUoKSxCbikmJihoPVQxKHMuYykuYixkPVQxKHMuZCkuYixlPWIuTWF0aC5tYXgoZSxiLk1hdGguYWJzKGQtaCkpKTtyZXR1cm4gZX1mdW5jdGlvbiAkYm4odCxlLG4pe3ZhciByLHMsbzt3cihuLCJSZW1vdmUgb3ZlcmxhcHMiLDEpLG4ubiYmZSYmaGYobixmZihlKSwoQ2woKSxZbCkpLHI9dShxZShlLChiQygpLCRTKSksMzMpLHQuZj1yLHQuYT1pc3QodShxZShlLChheSgpLEJPKSksMjkzKSkscz15ZShxZShlLChjaSgpLEgyKSkpLGs5KHQsKE9uKHMpLHMpKSxvPWd5KHIpLGhoZSh0LGUsbyxuKSxuLm4mJmUmJmhmKG4sZmYoZSksKENsKCksWWwpKX1mdW5jdGlvbiBrNXQodCxlLG4pe3N3aXRjaChuLmcpe2Nhc2UgMTpyZXR1cm4gbmV3ICRlKGUuYSxiLk1hdGgubWluKHQuZC5iLGUuYikpO2Nhc2UgMjpyZXR1cm4gbmV3ICRlKGIuTWF0aC5tYXgodC5jLmEsZS5hKSxlLmIpO2Nhc2UgMzpyZXR1cm4gbmV3ICRlKGUuYSxiLk1hdGgubWF4KHQuYy5iLGUuYikpO2Nhc2UgNDpyZXR1cm4gbmV3ICRlKGIuTWF0aC5taW4oZS5hLHQuZC5hKSxlLmIpfXJldHVybiBuZXcgJGUoZS5hLGUuYil9ZnVuY3Rpb24gemJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRjtmb3IoTT1yPyhiZSgpLEJuKTooYmUoKSxIbikscz0hMSx3PWVbbl0saz0wLEM9dy5sZW5ndGg7azxDOysraylkPXdba10sIUR4KHUoUShkLChUZSgpLG9zKSksOTgpKSYmKGg9ZC5lLEY9IVlvKGQsTSkuZGMoKSYmISFoLEYmJihvPW00dChoKSx0LmI9bmV3IHk0dChvLHI/MDpvLmxlbmd0aC0xKSkscz1zfGp3bih0LGQsTSxGKSk7cmV0dXJuIHN9ZnVuY3Rpb24gZkQodCl7dmFyIGUsbixyO2ZvcihlPUhkKDErKCF0LmMmJih0LmM9bmV3IGhlKGZsLHQsOSw5KSksdC5jKS5pKSx1ZShlLCghdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHQuZCkpLHI9bmV3IGVyKCghdC5jJiYodC5jPW5ldyBoZShmbCx0LDksOSkpLHQuYykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxMTgpLHVlKGUsKCFuLmQmJihuLmQ9bmV3IENuKFdzLG4sOCw1KSksbi5kKSk7cmV0dXJuIEFyKGUpLG5ldyB1QyhlKX1mdW5jdGlvbiBHMCh0KXt2YXIgZSxuLHI7Zm9yKGU9SGQoMSsoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpLmkpLHVlKGUsKCF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lKSkscj1uZXcgZXIoKCF0LmMmJih0LmM9bmV3IGhlKGZsLHQsOSw5KSksdC5jKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDExOCksdWUoZSwoIW4uZSYmKG4uZT1uZXcgQ24oV3Msbiw3LDQpKSxuLmUpKTtyZXR1cm4gQXIoZSksbmV3IHVDKGUpfWZ1bmN0aW9uIHFibih0KXt2YXIgZSxuLHIscztpZih0PT1udWxsKXJldHVybiBudWxsO2lmKHI9JGModCwhMCkscz1uTy5sZW5ndGgsaG4oci5zdWJzdHIoci5sZW5ndGgtcyxzKSxuTykpe2lmKG49ci5sZW5ndGgsbj09NCl7aWYoZT0oUnIoMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApKSxlPT00MylyZXR1cm4gdkx0O2lmKGU9PTQ1KXJldHVybiBTNWV9ZWxzZSBpZihuPT0zKXJldHVybiB2THR9cmV0dXJuIGx5KHIpfWZ1bmN0aW9uIEhibih0KXt2YXIgZSxuLHIscztmb3IoZT0wLG49MCxzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KEoocyksMTEpLGU9U3IoT2EoZSxOSnQoUmkobmV3IFRuKG51bGwsbmV3IF9uKHIuZSwxNikpLG5ldyBtUSkpKSksbj1TcihPYShuLE5KdChSaShuZXcgVG4obnVsbCxuZXcgX24oci5nLDE2KSksbmV3IHlRKSkpKSxlPjF8fG4+MSlyZXR1cm4gMjtyZXR1cm4gZStuPT0xPzI6MH1mdW5jdGlvbiBrY2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKHdyKG4sIkVMSyBGb3JjZSIsMSksamUoUmUocWUoZSwoWmYoKSxkN3QpKSkpfHx1JCgocj1uZXcgcnIoKEltKCksbmV3IFNtKGUpKSkscikpLGQ9Wm5lKGUpLGMxbihkKSx6Y24odCx1KFEoZCxmN3QpLDQyNCkpLGg9aGxlKHQuYSxkKSxvPWguS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMjMxKSxFd24odC5iLHMsUmMobiwxL2guZ2MoKSkpO2Q9VGhlKGgpLHhoZShkKSxvcihuKX1mdW5jdGlvbiBHYm4odCxlKXt2YXIgbixyLHMsbyxoO2lmKHdyKGUsIkJyZWFraW5nIFBvaW50IFByb2Nlc3NvciIsMSksbDRuKHQpLGplKFJlKFEodCwoVGUoKSx5Q3QpKSkpKXtmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksbj0wLGg9bmV3IFMoci5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksby5wPW4rKztmeW4odCksVmNlKHQsITApLFZjZSh0LCExKX1vcihlKX1mdW5jdGlvbiBWYm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3IoZD10LmMsaD0obi5xP24ucToodm4oKSx2bigpLGEwKSkudmMoKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0Mikscj0hajkoUmkobmV3IFRuKG51bGwsbmV3IF9uKGQsMTYpKSxuZXcgWnQobmV3IGFWdChlLG8pKSkpLnNkKChXYigpLEpFKSksciYmKHc9by5kZCgpLEV0KHcsNCkmJihzPV8zdCh3KSxzIT1udWxsJiYodz1zKSksZS5ZZSh1KG8uY2QoKSwxNDYpLHcpKX1mdW5jdGlvbiBvcSh0LGUpe3ZhciBuLHIscyxvLGg7aWYoZSl7Zm9yKG89RXQodC5DYiw4OCl8fEV0KHQuQ2IsOTkpLGg9IW8mJkV0KHQuQ2IsMzIyKSxyPW5ldyBlcigoIWUuYSYmKGUuYT1uZXcgeEMoZSxobyxlKSksZS5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDg3KSxzPXdxKG4pLG8/RXQocyw4OCk6aD9FdChzLDE0OCk6cylyZXR1cm4gcztyZXR1cm4gbz8oZG4oKSxXaCk6KGRuKCksVjEpfWVsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gVWJuKHQsZSl7dmFyIG4scixzLG8saCxkO2Zvcih3cihlLCJDb25zdHJhaW50cyBQb3N0cHJvY2Vzc29yIiwxKSxoPTAsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLGQ9MCxyPW5ldyBTKHMuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLG4uaz09KEduKCksRHMpJiYoSnQobiwoVGUoKSx0ViksZGUoaCkpLEp0KG4sWEcsZGUoZCkpLCsrZCk7KytofW9yKGUpfWZ1bmN0aW9uIFdibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQztmb3Iodz1uZXcgJGUobixyKSxuYSh3LHUoUShlLChmYygpLEJTKSksOCkpLEM9ZWkoZS5iLDApO0MuYiE9Qy5kLmM7KWs9dSh0aShDKSw4NiksTGkoay5lLHcpLG5pKHQuYixrKTtmb3IoZD1laShlLmEsMCk7ZC5iIT1kLmQuYzspe2ZvcihoPXUodGkoZCksMTg4KSxvPWVpKGguYSwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksOCksTGkocyx3KTtuaSh0LmEsaCl9fWZ1bmN0aW9uIEU1dCh0LGUsbil7dmFyIHIscyxvO2lmKG89RTQoKFJ1KCksbWEpLHQuVGcoKSxlKSxvKXtpZih0bygpLCF1KG8sNjYpLk9qKCkmJihvPXF4KEVvKG1hLG8pKSwhbykpdGhyb3cgcnQobmV3IFBuKGFiK2UubmUoKStXXykpO3M9KHI9dC5ZZyhvKSx1KHI+PTA/dC5fZyhyLCEwLCEwKTpsdyh0LG8sITApLDE1MykpLHUocywyMTUpLm1sKGUsbil9ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK1dfKSl9ZnVuY3Rpb24gS2JuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgbGUscz1XbyhuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyB6USksbz1XbyhuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyBxUSksaD14YW4oRnNuKEpqKFMybihjdChvdChyeG4sMSksSWUsODMzLDAsW3Msb10pKSxuZXcgSFEpKSkscj0xO3I8aC5sZW5ndGg7cisrKWhbcl0taFtyLTFdPj0yKmUmJnVlKG4sbmV3IHludChoW3ItMV0rZSxoW3JdLWUpKTtyZXR1cm4gbn1mdW5jdGlvbiBZYm4odCxlLG4pe3dyKG4sIkVhZGVzIHJhZGlhbCIsMSksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSksdC5kPXUocWUoZSwoYkMoKSwkUykpLDMzKSx0LmM9WHQoeWUocWUoZSwoYXkoKSxTVikpKSksdC5lPWlzdCh1KHFlKGUsQk8pLDI5MykpLHQuYT1BbG4odShxZShlLFRfdCksNDI2KSksdC5iPVgxbih1KHFlKGUsRV90KSwzNDApKSxNMW4odCksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSl9ZnVuY3Rpb24gWGJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKG4pZm9yKG89bi5hLmxlbmd0aCxyPW5ldyBRYihvKSxkPShyLmItci5hKSpyLmM8MD8oSXAoKSxBYik6bmV3IFBwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1fOChuLGguYSkscyYmKHc9S2luKHQsKGs9KFR2KCksQz1uZXcgUnB0LEMpLGUmJlQ1dChrLGUpLGspLHMpLHFDKHcsTzAocyxDZCkpLEp6KHMsdyksSzR0KHMsdyksd2l0KHQscyx3KSl9ZnVuY3Rpb24gY3EodCl7dmFyIGUsbixyLHMsbyxoO2lmKCF0Lmope2lmKGg9bmV3IFFULGU9YUEsbz1lLmEuemModCxlKSxvPT1udWxsKXtmb3Iocj1uZXcgZXIoU28odCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwyNikscz1jcShuKSxycyhoLHMpLE1yKGgsbik7ZS5hLkJjKHQpIT1udWxsfWV5KGgpLHQuaj1uZXcgcTMoKHUoU3QoV3QoKGpwKCksTG4pLm8pLDExKSwxOCksaC5pKSxoLmcpLHJsKHQpLmImPS0zM31yZXR1cm4gdC5qfWZ1bmN0aW9uIFFibih0KXt2YXIgZSxuLHIscztpZih0PT1udWxsKXJldHVybiBudWxsO2lmKHI9JGModCwhMCkscz1uTy5sZW5ndGgsaG4oci5zdWJzdHIoci5sZW5ndGgtcyxzKSxuTykpe2lmKG49ci5sZW5ndGgsbj09NCl7aWYoZT0oUnIoMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApKSxlPT00MylyZXR1cm4gd0x0O2lmKGU9PTQ1KXJldHVybiBBNWV9ZWxzZSBpZihuPT0zKXJldHVybiB3THR9cmV0dXJuIG5ldyBTcHQocil9ZnVuY3Rpb24gWmJuKHQpe3ZhciBlLG4scjtyZXR1cm4gbj10LmwsbiZuLTF8fChyPXQubSxyJnItMSl8fChlPXQuaCxlJmUtMSl8fGU9PTAmJnI9PTAmJm49PTA/LTE6ZT09MCYmcj09MCYmbiE9MD9XbXQobik6ZT09MCYmciE9MCYmbj09MD9XbXQocikrMjI6ZSE9MCYmcj09MCYmbj09MD9XbXQoZSkrNDQ6LTF9ZnVuY3Rpb24gSmJuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iod3IoZSwiRWRnZSBqb2luaW5nIiwxKSxuPWplKFJlKFEodCwoVGUoKSxuaHQpKSkpLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9bmV3IGhhKHIuYSwwKTtoLmI8aC5kLmdjKCk7KW89KFFuKGguYjxoLmQuZ2MoKSksdShoLmQuWGIoaC5jPWguYisrKSwxMCkpLG8uaz09KEduKCksWnMpJiYoX2F0KG8sbiksRWwoaCkpO29yKGUpfWZ1bmN0aW9uIHQybih0LGUsbil7dmFyIHIscztpZih3JCh0LmIpLFVkKHQuYiwoR0koKSxBViksKEg5KCksak8pKSxVZCh0LmIsTFYsZS5nKSxVZCh0LmIsTVYsZS5hKSx0LmE9VHEodC5iLGUpLHdyKG4sIkNvbXBhY3Rpb24gYnkgc2hyaW5raW5nIGEgdHJlZSIsdC5hLmMubGVuZ3RoKSxlLmkuYy5sZW5ndGg+MSlmb3Iocz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDUxKSxyLnBmKGUsUmMobiwxKSk7b3Iobil9ZnVuY3Rpb24gdjQodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihzPWUuYSZ0LmYsbz1udWxsLHI9dC5iW3NdOztyPXIuYil7aWYocj09ZSl7bz9vLmI9ZS5iOnQuYltzXT1lLmI7YnJlYWt9bz1yfWZvcihoPWUuZiZ0LmYsbz1udWxsLG49dC5jW2hdOztuPW4uZCl7aWYobj09ZSl7bz9vLmQ9ZS5kOnQuY1toXT1lLmQ7YnJlYWt9bz1ufWUuZT9lLmUuYz1lLmM6dC5hPWUuYyxlLmM/ZS5jLmU9ZS5lOnQuZT1lLmUsLS10LmksKyt0Lmd9ZnVuY3Rpb24gZTJuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihuPXQubyxlPXQucCxoPXZpLHM9X2EsZD12aSxvPV9hLGs9MDtrPG47KytrKWZvcihDPTA7QzxlOysrQylsNCh0LGssQykmJihoPWIuTWF0aC5taW4oaCxrKSxzPWIuTWF0aC5tYXgocyxrKSxkPWIuTWF0aC5taW4oZCxDKSxvPWIuTWF0aC5tYXgobyxDKSk7cmV0dXJuIHc9cy1oKzEscj1vLWQrMSxuZXcgVFh0KGRlKGgpLGRlKGQpLGRlKHcpLGRlKHIpKX1mdW5jdGlvbiBZc3QodCxlKXt2YXIgbixyLHMsbztmb3Iobz1uZXcgaGEodCwwKSxuPShRbihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMTQwKSk7by5iPG8uZC5nYygpOylyPShRbihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMTQwKSkscz1uZXcgT3Z0KHIuYyxuLmQsZSksUW4oby5iPjApLG8uYS5YYihvLmM9LS1vLmIpLFJtKG8scyksUW4oby5iPG8uZC5nYygpKSxvLmQuWGIoby5jPW8uYisrKSxzLmE9ITEsbj1yfWZ1bmN0aW9uIEVjZSh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHM9dShRKHQsKHNlKCksekcpKSwxMSksaD1uZXcgUyh0LmopO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMTEpLHI9bmV3IFMoby5nKTtyLmE8ci5jLmMubGVuZ3RoOylyZXR1cm4gZT11KEoociksMTcpLHNhKGUscyksbztmb3Iobj1uZXcgUyhvLmUpO24uYTxuLmMuYy5sZW5ndGg7KXJldHVybiBlPXUoSihuKSwxNyksRGEoZSxzKSxvfXJldHVybiBudWxsfWZ1bmN0aW9uIG4ybih0LGUsbil7dmFyIHIscztyPWt1KG4ucS5nZXRUaW1lKCkpLHljKHIsMCk8MD8ocz0kZy1TcihVSShPOChyKSwkZykpLHM9PSRnJiYocz0wKSk6cz1TcihVSShyLCRnKSksZT09MT8ocz1iLk1hdGgubWluKChzKzUwKS8xMDB8MCw5KSxScCh0LDQ4K3MmbXMpKTplPT0yPyhzPWIuTWF0aC5taW4oKHMrNSkvMTB8MCw5OSksWGQodCxzLDIpKTooWGQodCxzLDMpLGU+MyYmWGQodCwwLGUtMykpfWZ1bmN0aW9uIHIybih0KXt2YXIgZSxuLHIscztyZXR1cm4gR3QoUSh0LChUZSgpLGp5KSkpPT09R3QoKCQwKCksWmcpKT8hdC5lJiZHdChRKHQsX08pKSE9PUd0KChXOCgpLG1PKSk6KHI9dShRKHQsR2x0KSwyOTIpLHM9amUoUmUoUSh0LFZsdCkpKXx8R3QoUSh0LEVTKSk9PT1HdCgoWXgoKSx3TykpLGU9dShRKHQsQjl0KSwxOSkuYSxuPXQuYS5jLmxlbmd0aCwhcyYmciE9KFc4KCksbU8pJiYoZT09MHx8ZT5uKSl9ZnVuY3Rpb24gaTJuKHQpe3ZhciBlLG47Zm9yKG49MDtuPHQuYy5sZW5ndGgmJiEoV0t0KChBbihuLHQuYy5sZW5ndGgpLHUodC5jW25dLDExMykpKT4wKTtuKyspO2lmKG4+MCYmbjx0LmMubGVuZ3RoLTEpcmV0dXJuIG47Zm9yKGU9MDtlPHQuYy5sZW5ndGgmJiEoV0t0KChBbihlLHQuYy5sZW5ndGgpLHUodC5jW2VdLDExMykpKT4wKTtlKyspO3JldHVybiBlPjAmJm48dC5jLmxlbmd0aC0xP2U6dC5jLmxlbmd0aC8yfDB9ZnVuY3Rpb24gVGNlKHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9NiYmZSl7aWYobEUodCxlKSl0aHJvdyBydChuZXcgUG4oS18rcW9lKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/WDN0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPWU2KGUsdCw2LHIpKSxyPUsydCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSw2LGUsZSkpfWZ1bmN0aW9uIFQ1dCh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTkmJmUpe2lmKGxFKHQsZSkpdGhyb3cgcnQobmV3IFBuKEtfK1R1ZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP1ozdCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj1lNihlLHQsOSxyKSkscj1ZMnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsOSxlLGUpKX1mdW5jdGlvbiBYc3QodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT0zJiZlKXtpZihsRSh0LGUpKXRocm93IHJ0KG5ldyBQbihLXytFbGUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD90NHQodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9ZTYoZSx0LDEyLHIpKSxyPVcydCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLGUsZSkpfWZ1bmN0aW9uIG1FKHQpe3ZhciBlLG4scixzLG87aWYocj1MaCh0KSxvPXQuaixvPT1udWxsJiZyKXJldHVybiB0LiRqKCk/bnVsbDpyLnpqKCk7aWYoRXQociwxNDgpKXtpZihuPXIuQWooKSxuJiYocz1uLk5oKCkscyE9dC5pKSl7aWYoZT11KHIsMTQ4KSxlLkVqKCkpdHJ5e3QuZz1zLktoKGUsbyl9Y2F0Y2goaCl7aWYoaD1XaShoKSxFdChoLDc4KSl0Lmc9bnVsbDtlbHNlIHRocm93IHJ0KGgpfXQuaT1zfXJldHVybiB0Lmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2NlKHQpe3ZhciBlO3JldHVybiBlPW5ldyBsZSx1ZShlLG5ldyBUeChuZXcgJGUodC5jLHQuZCksbmV3ICRlKHQuYyt0LmIsdC5kKSkpLHVlKGUsbmV3IFR4KG5ldyAkZSh0LmMsdC5kKSxuZXcgJGUodC5jLHQuZCt0LmEpKSksdWUoZSxuZXcgVHgobmV3ICRlKHQuYyt0LmIsdC5kK3QuYSksbmV3ICRlKHQuYyt0LmIsdC5kKSkpLHVlKGUsbmV3IFR4KG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLG5ldyAkZSh0LmMsdC5kK3QuYSkpKSxlfWZ1bmN0aW9uIF9jZSh0LGUsbixyKXt2YXIgcyxvLGg7aWYoaD1jNHQoZSxuKSxyLmNbci5jLmxlbmd0aF09ZSx0LmpbaC5wXT09LTF8fHQualtoLnBdPT0yfHx0LmFbZS5wXSlyZXR1cm4gcjtmb3IodC5qW2gucF09LTEsbz1uZXcgYXIobHIoejAoaCkuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShMcihvKSwxNyksISghKCFWYShzKSYmISghVmEocykmJnMuYy5pLmM9PXMuZC5pLmMpKXx8cz09ZSkpcmV0dXJuIF9jZSh0LHMsaCxyKTtyZXR1cm4gcn1mdW5jdGlvbiBzMm4odCxlLG4pe3ZhciByLHMsbztmb3Iobz1lLmEuZWMoKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSw3OSkscj11KEpuKHQuYixzKSwyNjYpLCFyJiYodHMoWmQocykpPT10cyhYcChzKSk/eXZuKHQscyxuKTpaZChzKT09dHMoWHAocykpP0puKHQuYyxzKT09bnVsbCYmSm4odC5iLFhwKHMpKSE9bnVsbCYmc2hlKHQscyxuLCExKTpKbih0LmQscyk9PW51bGwmJkpuKHQuYixaZChzKSkhPW51bGwmJnNoZSh0LHMsbiwhMCkpfWZ1bmN0aW9uIGEybih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPXQuS2MoKTtzLk9iKCk7KWZvcihyPXUocy5QYigpLDEwKSxkPW5ldyBNYyxVbyhkLHIpLEZzKGQsKGJlKCksSG4pKSxKdChkLChzZSgpLFZHKSwoRm4oKSwhMCkpLGg9ZS5LYygpO2guT2IoKTspbz11KGguUGIoKSwxMCksdz1uZXcgTWMsVW8odyxvKSxGcyh3LEJuKSxKdCh3LFZHLCEwKSxuPW5ldyB6dixKdChuLFZHLCEwKSxEYShuLGQpLHNhKG4sdyl9ZnVuY3Rpb24gbzJuKHQsZSxuLHIpe3ZhciBzLG8saCxkO3M9eGllKHQsZSxuKSxvPXhpZSh0LG4sZSksaD11KEpuKHQuYyxlKSwxMTIpLGQ9dShKbih0LmMsbiksMTEyKSxzPG8/bmV3IHQyKChWZigpLFV5KSxoLGQsby1zKTpvPHM/bmV3IHQyKChWZigpLFV5KSxkLGgscy1vKToocyE9MHx8ISghZS5pfHwhbi5pKSYmcltlLmkuY11bbi5pLmNdKSYmKG5ldyB0MigoVmYoKSxVeSksaCxkLDApLG5ldyB0MihVeSxkLGgsMCkpfWZ1bmN0aW9uIFNjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPTAsaD1uZXcgUyhlLmEpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwxMCkscys9by5vLmIrby5kLmErby5kLmQrdC5lLHI9bmV3IGFyKGxyKGpvKG8pLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLG4uYy5pLms9PShHbigpLEhjKSYmKHc9bi5jLmksZD11KFEodywoc2UoKSxfaSkpLDEwKSxzKz1kLm8uYitkLmQuYStkLmQuZCk7cmV0dXJuIHN9ZnVuY3Rpb24gQWNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztmb3Iobz1uZXcgbGUsaz1uZXcgUWksaD1uZXcgUWksWG1uKHQsayxoLGUpLGE0bih0LGssaCxlLG4pLHc9bmV3IFModCk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHcpLDExMikscz1uZXcgUyhkLmspO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyOSksKCFlfHxyLmM9PShWZigpLHBiKSkmJmQuZz5yLmIuZyYmKG8uY1tvLmMubGVuZ3RoXT1yKTtyZXR1cm4gb31mdW5jdGlvbiB5RSgpe3lFPVosbjU9bmV3IF9NKCJDQU5ESURBVEVfUE9TSVRJT05fTEFTVF9QTEFDRURfUklHSFQiLDApLFI2PW5ldyBfTSgiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX0JFTE9XIiwxKSxxUz1uZXcgX00oIkNBTkRJREFURV9QT1NJVElPTl9XSE9MRV9EUkFXSU5HX1JJR0hUIiwyKSx6Uz1uZXcgX00oIkNBTkRJREFURV9QT1NJVElPTl9XSE9MRV9EUkFXSU5HX0JFTE9XIiwzKSxIUz1uZXcgX00oIldIT0xFX0RSQVdJTkciLDQpfWZ1bmN0aW9uIGMybih0LGUpe2lmKEV0KGUsMjM5KSlyZXR1cm4gUnVuKHQsdShlLDMzKSk7aWYoRXQoZSwxODYpKXJldHVybiBRdW4odCx1KGUsMTE4KSk7aWYoRXQoZSwzNTQpKXJldHVybiBsbm4odCx1KGUsMTM3KSk7aWYoRXQoZSwzNTIpKXJldHVybiBObW4odCx1KGUsNzkpKTtpZihlKXJldHVybiBudWxsO3Rocm93IHJ0KG5ldyBQbihrOHQrUXAobmV3IHdsKGN0KG90KFhuLDEpLEllLDEsNSxbZV0pKSkpKX1mdW5jdGlvbiB1Mm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG89bmV3IFFpLHM9bmV3IFModC5kLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyMSksci5iLmEuYy5sZW5ndGg9PTAmJmhzKG8scixvLmMuYixvLmMpO2lmKG8uYj4xKWZvcihlPUR2KChuPW5ldyBVYiwrK3QuYixuKSx0LmQpLGQ9ZWkobywwKTtkLmIhPWQuZC5jOyloPXUodGkoZCksMTIxKSx2ZihvZihhZihjZihzZihuZXcgRWgsMSksMCksZSksaCkpfWZ1bmN0aW9uIEM1dCh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTExJiZlKXtpZihsRSh0LGUpKXRocm93IHJ0KG5ldyBQbihLXytINXQodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9lNHQodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9ZTYoZSx0LDEwLHIpKSxyPXJ2dCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwxMSxlLGUpKX1mdW5jdGlvbiBsMm4odCl7dmFyIGUsbixyLHM7Zm9yKHI9bmV3IGgyKG5ldyB3Zyh0LmIpLmEpO3IuYjspbj1ZdihyKSxzPXUobi5jZCgpLDExKSxlPXUobi5kZCgpLDEwKSxKdChlLChzZSgpLF9pKSxzKSxKdChzLFp1LGUpLEp0KHMsa08sKEZuKCksITApKSxGcyhzLHUoUShlLG9jKSw2MSkpLFEoZSxvYyksSnQocy5pLChUZSgpLG9zKSwob2EoKSxMNykpLHUoUShGYShzLmkpLEdjKSwyMSkuRmMoKG9vKCksZjcpKX1mdW5jdGlvbiBoMm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihvPTAsaD0wLHQuYylmb3Iodz1uZXcgUyh0LmQuaS5qKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxMSksbys9ZC5lLmMubGVuZ3RoO2Vsc2Ugbz0xO2lmKHQuZClmb3Iodz1uZXcgUyh0LmMuaS5qKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxMSksaCs9ZC5nLmMubGVuZ3RoO2Vsc2UgaD0xO3JldHVybiBzPXBzKEtNKGgtbykpLHI9KG4rZSkvMisobi1lKSooLjQqcykscn1mdW5jdGlvbiBmMm4odCl7ZzQoKTt2YXIgZSxuO2lmKHQuSGMoKGJlKCksWm8pKSl0aHJvdyBydChuZXcgUG4oIlBvcnQgc2lkZXMgbXVzdCBub3QgY29udGFpbiBVTkRFRklORUQiKSk7c3dpdGNoKHQuZ2MoKSl7Y2FzZSAxOnJldHVybiBMRztjYXNlIDI6cmV0dXJuIGU9dC5IYyhIbikmJnQuSGMoQm4pLG49dC5IYyhObikmJnQuSGMobXIpLGV8fG4/REc6SUc7Y2FzZSAzOnJldHVybiBNRztjYXNlIDQ6cmV0dXJuIEFHO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGQybih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iod3IobiwiQnJlYWtpbmcgUG9pbnQgUmVtb3ZpbmciLDEpLHQuYT11KFEoZSwoVGUoKSxYMCkpLDIxOCksbz1uZXcgUyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhHdihzLmEpKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCkscmVlKGgpJiYocj11KFEoaCwoc2UoKSxMdykpLDMwNSksIXIuZCYmQ2hlKHQscikpO29yKG4pfWZ1bmN0aW9uIFFzdCh0LGUsbil7cmV0dXJuIHk0KCksSDgodCxlKSYmSDgodCxuKT8hMTpBYXQobmV3ICRlKHQuYyx0LmQpLG5ldyAkZSh0LmMrdC5iLHQuZCksZSxuKXx8QWF0KG5ldyAkZSh0LmMrdC5iLHQuZCksbmV3ICRlKHQuYyt0LmIsdC5kK3QuYSksZSxuKXx8QWF0KG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLG5ldyAkZSh0LmMsdC5kK3QuYSksZSxuKXx8QWF0KG5ldyAkZSh0LmMsdC5kK3QuYSksbmV3ICRlKHQuYyx0LmQpLGUsbil9ZnVuY3Rpb24gXzV0KHQsZSl7dmFyIG4scixzLG87aWYoIXQuZGMoKSl7Zm9yKG49MCxyPXQuZ2MoKTtuPHI7KytuKWlmKG89QnIodC5YYihuKSksbz09bnVsbD9lPT1udWxsOmhuKG8uc3Vic3RyKDAsMyksIiEjIyIpP2UhPW51bGwmJihzPWUubGVuZ3RoLCFobihvLnN1YnN0cihvLmxlbmd0aC1zLHMpLGUpfHxvLmxlbmd0aCE9ZS5sZW5ndGgrMykmJiFobihMMixlKTpobihvLGl1dCkmJiFobihMMixlKXx8aG4obyxlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBnMm4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihoPXQuai5jLmxlbmd0aCx3PVB0KGF4bixLeHQsMzA2LGgsMCwxKSxkPTA7ZDxoO2QrKylvPXUoRmUodC5qLGQpLDExKSxvLnA9ZCx3W2RdPXlwbihKb2UobyksbixyKTtmb3IoUjJuKHQsdyxuLGUsciksaz1uZXcgQ3Iscz0wO3M8dy5sZW5ndGg7cysrKXdbc10mJmtpKGssdShGZSh0LmoscyksMTEpLHdbc10pO2suZi5jK2suZy5jIT0wJiYoSnQodCwoc2UoKSxtUyksaykscTBuKHQsdykpfWZ1bmN0aW9uIHAybih0LGUsbil7dmFyIHIscyxvO2ZvcihzPW5ldyBTKHQuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylpZihyPXUoSihzKSw1Nyksbz1aMyhyKSxvJiZvLms9PShHbigpLHhzKSlzd2l0Y2godShRKG8sKHNlKCksb2MpKSw2MSkuZyl7Y2FzZSA0Om8ubi5hPWUuYTticmVhaztjYXNlIDI6by5uLmE9bi5hLShvLm8uYStvLmQuYyk7YnJlYWs7Y2FzZSAxOm8ubi5iPWUuYjticmVhaztjYXNlIDM6by5uLmI9bi5iLShvLm8uYitvLmQuYSl9fWZ1bmN0aW9uIHc0KCl7dzQ9WixoVj1uZXcgQ3goSzAsMCksTU89bmV3IEN4KCJOSUtPTE9WIiwxKSxJTz1uZXcgQ3goIk5JS09MT1ZfUElYRUwiLDIpLElDdD1uZXcgQ3goIk5JS09MT1ZfSU1QUk9WRUQiLDMpLERDdD1uZXcgQ3goIk5JS09MT1ZfSU1QUk9WRURfUElYRUwiLDQpLE1DdD1uZXcgQ3goIkRVTU1ZTk9ERV9QRVJDRU5UQUdFIiw1KSxPQ3Q9bmV3IEN4KCJOT0RFQ09VTlRfUEVSQ0VOVEFHRSIsNiksZlY9bmV3IEN4KCJOT19CT1VOREFSWSIsNyl9ZnVuY3Rpb24gYjJuKHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBzPXUocWUoZSwoZXEoKSxBU3QpKSwxOSksIXMmJihzPWRlKDApKSxvPXUocWUobixBU3QpLDE5KSwhbyYmKG89ZGUoMCkpLHMuYT5vLmE/LTE6cy5hPG8uYT8xOnQuYSYmKHI9THMoZS5qLG4uaiksciE9MHx8KHI9THMoZS5pLG4uaSksciE9MCkpP3I6KGg9ZS5nKmUuZixkPW4uZypuLmYsTHMoaCxkKSl9ZnVuY3Rpb24gdjJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07aWYoKyt0LmUsdz10LmQ9PW51bGw/MDp0LmQubGVuZ3RoLGU+dyl7Zm9yKEM9dC5kLHQuZD1QdChIQXQsSTh0LDYzLDIqdys0LDAsMSksbz0wO288dzsrK28paWYoaz1DW29dLGspZm9yKHI9ay5nLE09ay5pLGQ9MDtkPE07KytkKXM9dShyW2RdLDEzMyksaD1YMnQodCxzLlNoKCkpLG49dC5kW2hdLCFuJiYobj10LmRbaF09dC51aigpKSxuLkZjKHMpO3JldHVybiEwfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gdzJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYocz1uLG89cy5haygpLFYwKHQuZSxvKSl7aWYoby5oaSgpKXtmb3Iocj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHlpKGQscykmJmghPWUpdGhyb3cgcnQobmV3IFBuKFhEKSl9fWVsc2UgZm9yKHc9YXUodC5lLlRnKCksbykscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHcucmwoZC5haygpKSl0aHJvdyBydChuZXcgUG4oZU8pKTtKQyh0LGUsbil9ZnVuY3Rpb24gTGNlKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihuPXUoUShlLChzZSgpLE55KSksMjEpLGg9dShBaSgoSWF0KCksTmkpLG4pLDIxKSxkPXUoQWkoUXIsbiksMjEpLG89aC5LYygpO28uT2IoKTspaWYocj11KG8uUGIoKSwyMSksIXUoQWkodC5iLHIpLDE1KS5kYygpKXJldHVybiExO2ZvcihzPWQuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMjEpLCF1KEFpKHQuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBtMm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHdyKGUsIlBhcnRpdGlvbiBwb3N0cHJvY2Vzc2luZyIsMSkscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCksZD1uZXcgUyhzLmopO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDExKSxqZShSZShRKGgsKHNlKCksVkcpKSkpJiZfQyhkKTtvcihlKX1mdW5jdGlvbiBNY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYodC5hLmMubGVuZ3RoPT0xKXJldHVybiBOYWUodShGZSh0LmEsMCksMTg3KSxlKTtmb3IoaD1rdW4odCksdz0wLGs9dC5kLG89aCxDPXQuZCxkPShrLW8pLzIrbztvKzE8azspe2Zvcih3PTAscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4Nyksdys9KHM9RV8obixkLCExKSxzLmEpO3c8ZT8oQz1kLGs9ZCk6bz1kLGQ9KGstbykvMitvfXJldHVybiBDfWZ1bmN0aW9uIHkybih0KXt2YXIgZSxuLHIscyxvO3JldHVybiBpc05hTih0KT8oTjgoKSx0RXQpOnQ8LTkyMjMzNzIwMzY4NTQ3NzZlMz8oTjgoKSx4Z2UpOnQ+PTkyMjMzNzIwMzY4NTQ3NzZlMz8oTjgoKSxaOHQpOihzPSExLHQ8MCYmKHM9ITAsdD0tdCkscj0wLHQ+PXgyJiYocj1wcyh0L3gyKSx0LT1yKngyKSxuPTAsdD49ZjYmJihuPXBzKHQvZjYpLHQtPW4qZjYpLGU9cHModCksbz1ydShlLG4scikscyYmdml0KG8pLG8pfWZ1bmN0aW9uIHgybih0LGUpe3ZhciBuLHIscyxvO2ZvcihuPSFlfHwhdC51LkhjKChRdSgpLHRnKSksbz0wLHM9bmV3IFModC5lLkNmKCkpO3MuYTxzLmMuYy5sZW5ndGg7KXtpZihyPXUoSihzKSw4MzgpLHIuSGYoKT09KGJlKCksWm8pKXRocm93IHJ0KG5ldyBQbigiTGFiZWwgYW5kIG5vZGUgc2l6ZSBjYWxjdWxhdG9yIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBwb3J0cyB0aGF0IGhhdmUgcG9ydCBzaWRlcyBhc3NpZ25lZC4iKSk7ci52ZihvKyspLG11bih0LHIsbil9fWZ1bmN0aW9uIGsybih0LGUpe3ZhciBuLHIscyxvLGg7cmV0dXJuIHM9ZS5IaCh0LmEpLHMmJihyPSghcy5iJiYocy5iPW5ldyB5bCgoZG4oKSxRYSksY2MscykpLHMuYiksbj1CcihZZihyLFNhKSksbiE9bnVsbCYmKG89bi5sYXN0SW5kZXhPZigiIyIpLGg9bz09LTE/JDJ0KHQsZS5BaigpLG4pOm89PTA/cEkodCxudWxsLG4uc3Vic3RyKDEpKTpwSSh0LG4uc3Vic3RyKDAsbyksbi5zdWJzdHIobysxKSksRXQoaCwxNDgpKSk/dShoLDE0OCk6bnVsbH1mdW5jdGlvbiBFMm4odCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiByPWUuSGgodC5hKSxyJiYobj0oIXIuYiYmKHIuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHIpKSxyLmIpLG89QnIoWWYobixydXQpKSxvIT1udWxsJiYocz1vLmxhc3RJbmRleE9mKCIjIiksaD1zPT0tMT8kMnQodCxlLkFqKCksbyk6cz09MD9wSSh0LG51bGwsby5zdWJzdHIoMSkpOnBJKHQsby5zdWJzdHIoMCxzKSxvLnN1YnN0cihzKzEpKSxFdChoLDE0OCkpKT91KGgsMTQ4KTpudWxsfWZ1bmN0aW9uIFM1dCh0KXt2YXIgZSxuLHIscyxvO2ZvcihuPW5ldyBTKHQuYS5hKTtuLmE8bi5jLmMubGVuZ3RoOyl7Zm9yKGU9dShKKG4pLDMwNyksZS5qPW51bGwsbz1lLmEuYS5lYygpLktjKCk7by5PYigpOylyPXUoby5QYigpLDU3KSxHZihyLmIpLCghZS5qfHxyLmQuYzxlLmouZC5jKSYmKGUuaj1yKTtmb3Iocz1lLmEuYS5lYygpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDU3KSxyLmIuYT1yLmQuYy1lLmouZC5jLHIuYi5iPXIuZC5kLWUuai5kLmR9cmV0dXJuIHR9ZnVuY3Rpb24gdXEodCl7dmFyIGUsbixyLHMsbztmb3Iobj1uZXcgUyh0LmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwxODkpLGUuZj1udWxsLG89ZS5hLmEuZWMoKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSw4MSksR2Yoci5lKSwoIWUuZnx8ci5nLmM8ZS5mLmcuYykmJihlLmY9cik7Zm9yKHM9ZS5hLmEuZWMoKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw4MSksci5lLmE9ci5nLmMtZS5mLmcuYyxyLmUuYj1yLmcuZC1lLmYuZy5kfXJldHVybiB0fWZ1bmN0aW9uIFQybih0KXt2YXIgZSxuLHI7cmV0dXJuIG49dSh0LmEsMTkpLmEscj11KHQuYiwxOSkuYSxlPWIuTWF0aC5tYXgoYi5NYXRoLmFicyhuKSxiLk1hdGguYWJzKHIpKSxuPGUmJnI9PS1lP25ldyBsYShkZShuKzEpLGRlKHIpKTpuPT1lJiZyPGU/bmV3IGxhKGRlKG4pLGRlKHIrMSkpOm4+PS1lJiZyPT1lP25ldyBsYShkZShuLTEpLGRlKHIpKTpuZXcgbGEoZGUobiksZGUoci0xKSl9ZnVuY3Rpb24gSWNlKCl7cmV0dXJuIHJvKCksY3Qob3QoaHhuLDEpLGFlLDc3LDAsW1U3dCxIN3QsaFMscmx0LGhUdCxnRyxURyxyNyx1VHQsdFR0LG9UdCxuNyxsVHQsUTd0LGZUdCxCN3Qsd0csaWx0LGZHLHhHLGdUdCx5RyxSN3QsY1R0LHBUdCxrRyxkVHQsZEcsSzd0LHNUdCxpVHQsQ0csejd0LGhHLGJHLCQ3dCxlNyxuVHQsWjd0LGFUdCxmUyxHN3QscTd0LHJUdCxKN3QsdkcsRUcsajd0LG1HLGVUdCxwRyxZN3QsVzd0LGJPLGxHLFg3dCxWN3RdKX1mdW5jdGlvbiBDMm4odCxlLG4pe3QuZD0wLHQuYj0wLGUuaz09KEduKCksSGMpJiZuLms9PUhjJiZ1KFEoZSwoc2UoKSxfaSkpLDEwKT09dShRKG4sX2kpLDEwKSYmKEdydChlKS5qPT0oYmUoKSxObik/YmNlKHQsZSxuKTpiY2UodCxuLGUpKSxlLms9PUhjJiZuLms9PVpzP0dydChlKS5qPT0oYmUoKSxObik/dC5kPTE6dC5iPTE6bi5rPT1IYyYmZS5rPT1acyYmKEdydChuKS5qPT0oYmUoKSxObik/dC5iPTE6dC5kPTEpLGZmbih0LGUsbil9ZnVuY3Rpb24gXzJuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE07cmV0dXJuIE09VDR0KHQpLGU9dC5hLHc9ZSE9bnVsbCx3JiZwOChNLCJjYXRlZ29yeSIsdC5hKSxzPWZNKG5ldyBUbSh0LmQpKSxoPSFzLGgmJihrPW5ldyBiZyxXZihNLCJrbm93bk9wdGlvbnMiLGspLG49bmV3IG16dChrKSx2YShuZXcgVG0odC5kKSxuKSksbz1mTSh0LmcpLGQ9IW8sZCYmKEM9bmV3IGJnLFdmKE0sInN1cHBvcnRlZEZlYXR1cmVzIixDKSxyPW5ldyB5enQoQyksdmEodC5nLHIpKSxNfWZ1bmN0aW9uIFMybih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7Zm9yKHI9ITEsZT0zMzYsbj0wLG89bmV3IE9XdCh0Lmxlbmd0aCksZD10LHc9MCxrPWQubGVuZ3RoO3c8azsrK3cpaD1kW3ddLHI9cnwoZDIoaCksITEpLHM9KCRwKGgpLGguYSksdWUoby5hLEFyKHMpKSxlJj1zLnFkKCksbj1udW4obixzLnJkKCkpO3JldHVybiB1KHUoall0KG5ldyBUbihudWxsLE1zdChuZXcgX24oKEdtKCksYjN0KG8uYSkpLDE2KSxuZXcgWCxlLG4pKSxuZXcgYnR0KHQpKSw2NzApLDgzMyl9ZnVuY3Rpb24gQTJuKHQsZSl7dmFyIG47dC5kJiYoZS5jIT10LmUuY3x8Um9uKHQuZS5iLGUuYikpJiYodWUodC5mLHQuZCksdC5hPXQuZC5jK3QuZC5iLHQuZD1udWxsLHQuZT1udWxsKSxXWWUoZS5iKT90LmM9ZTp0LmI9ZSwoZS5iPT0oSzgoKSxfdykmJiFlLmF8fGUuYj09SXkmJmUuYXx8ZS5iPT1qNCYmZS5hfHxlLmI9PUR5JiYhZS5hKSYmdC5jJiZ0LmImJihuPW5ldyBpaCh0LmEsdC5jLmQsZS5jLXQuYSx0LmIuZC10LmMuZCksdC5kPW4sdC5lPWUpfWZ1bmN0aW9uIGREKHQpe3ZhciBlO2lmKElxdC5jYWxsKHRoaXMpLHRoaXMuaT1uZXcgdlosdGhpcy5nPXQsdGhpcy5mPXUodC5lJiZ0LmUoKSw5KS5sZW5ndGgsdGhpcy5mPT0wKXRocm93IHJ0KG5ldyBQbigiVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgcGhhc2UgaW4gdGhlIHBoYXNlIGVudW1lcmF0aW9uLiIpKTt0aGlzLmM9KGU9dShIZih0aGlzLmcpLDkpLG5ldyByaChlLHUodWYoZSxlLmxlbmd0aCksOSksMCkpLHRoaXMuYT1uZXcgSHMsdGhpcy5iPW5ldyBDcn1mdW5jdGlvbiBBNXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT03JiZlKXtpZihsRSh0LGUpKXRocm93IHJ0KG5ldyBQbihLXytSYWUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9RM3QodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9dShlLDQ5KS5naCh0LDEsc04scikpLHI9WXZ0KHQsZSxyKSxyJiZyLkZpKCl9ZWxzZSB0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDcsZSxlKSl9ZnVuY3Rpb24gRGNlKHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9MyYmZSl7aWYobEUodCxlKSl0aHJvdyBydChuZXcgUG4oS18rV3JlKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/SjN0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPXUoZSw0OSkuZ2godCwwLG9OLHIpKSxyPVh2dCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLGUsZSkpfWZ1bmN0aW9uIFpzdCh0LGUpe2JFKCk7dmFyIG4scixzLG8saCxkLHcsayxDO3JldHVybiBlLmQ+dC5kJiYoZD10LHQ9ZSxlPWQpLGUuZDw2Mz92dm4odCxlKTooaD0odC5kJi0yKTw8NCxrPXVtdCh0LGgpLEM9dW10KGUsaCkscj1nYXQodCxHeChrLGgpKSxzPWdhdChlLEd4KEMsaCkpLHc9WnN0KGssQyksbj1ac3QocixzKSxvPVpzdChnYXQoayxyKSxnYXQocyxDKSksbz1rYXQoa2F0KG8sdyksbiksbz1HeChvLGgpLHc9R3godyxoPDwxKSxrYXQoa2F0KHcsbyksbikpfWZ1bmN0aW9uIEwybih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IoaD1RQyh0LG4pLGQ9UHQobzAsemcsMTAsZS5sZW5ndGgsMCwxKSxyPTAsbz1oLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSxqZShSZShRKHMsKHNlKCksa08pKSkpJiYoZFtyKytdPXUoUShzLFp1KSwxMCkpO2lmKHI8ZS5sZW5ndGgpdGhyb3cgcnQobmV3IEZvKCJFeHBlY3RlZCAiK2UubGVuZ3RoKyIgaGllcmFyY2hpY2FsIHBvcnRzLCBidXQgZm91bmQgb25seSAiK3IrIi4iKSk7cmV0dXJuIGR9ZnVuY3Rpb24gTTJuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKCF0LnRiKXtmb3Iobz0oIXQucmImJih0LnJiPW5ldyBxbSh0LGkxLHQpKSx0LnJiKSxkPW5ldyBreChvLmkpLHM9bmV3IGVyKG8pO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwxMzgpLGg9ci5uZSgpLG49dShoPT1udWxsP3N1KGQuZixudWxsLHIpOm53KGQuZyxoLHIpLDEzOCksbiYmKGg9PW51bGw/c3UoZC5mLG51bGwsbik6bncoZC5nLGgsbikpO3QudGI9ZH1yZXR1cm4gdShGYyh0LnRiLGUpLDEzOCl9ZnVuY3Rpb24gZ0QodCxlKXt2YXIgbixyLHMsbyxoO2lmKCh0Lmk9PW51bGwmJnBkKHQpLHQuaSkubGVuZ3RoLCF0LnApe2ZvcihoPW5ldyBreCgoMyp0LmcuaS8yfDApKzEpLHM9bmV3IE14KHQuZyk7cy5lIT1zLmkuZ2MoKTspcj11KG5zdChzKSwxNzApLG89ci5uZSgpLG49dShvPT1udWxsP3N1KGguZixudWxsLHIpOm53KGguZyxvLHIpLDE3MCksbiYmKG89PW51bGw/c3UoaC5mLG51bGwsbik6bncoaC5nLG8sbikpO3QucD1ofXJldHVybiB1KEZjKHQucCxlKSwxNzApfWZ1bmN0aW9uIEw1dCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGs7Zm9yKGRobihyK2NydChuLG4uJGQoKSkscyksZVh0KGUsamxuKG4pKSxvPW4uZixvJiZMNXQodCxlLG8sIkNhdXNlZCBieTogIiwhMSksZD0obi5rPT1udWxsJiYobi5rPVB0KHl1dCx0ZSw3OCwwLDAsMSkpLG4uayksdz0wLGs9ZC5sZW5ndGg7dzxrOysrdyloPWRbd10sTDV0KHQsZSxoLCJTdXBwcmVzc2VkOiAiLCExKTtjb25zb2xlLmdyb3VwRW5kIT1udWxsJiZjb25zb2xlLmdyb3VwRW5kLmNhbGwoY29uc29sZSl9ZnVuY3Rpb24gcEQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iodz1lLmUsZD13Lmxlbmd0aCxoPWUucS5fZih3LG4/MDpkLTEsbikscz13W24/MDpkLTFdLGg9aHx2dWUodCxzLG4sciksbz1uPzE6ZC0yO24/bzxkOm8+PTA7bys9bj8xOi0xKWg9aHxlLmMuU2YodyxvLG4sciYmIWplKFJlKFEoZS5qLChzZSgpLE13KSkpKSYmIWplKFJlKFEoZS5qLChzZSgpLEs0KSkpKSksaD1ofGUucS5fZih3LG8sbiksaD1ofHZ1ZSh0LHdbb10sbixyKTtyZXR1cm4gTnModC5jLGUpLGh9ZnVuY3Rpb24gbHEodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihDPWJadCh0LmopLE09MCxGPUMubGVuZ3RoO008RjsrK00pe2lmKGs9Q1tNXSxuPT0oc28oKSxKdSl8fG49PU1TKWZvcih3PWdkKGsuZykscz13LG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHowbihlLHIpJiZkdyhyLCEwKTtpZihuPT1ldXx8bj09TVMpZm9yKGQ9Z2Qoay5lKSxzPWQsbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sJDBuKGUscikmJmR3KHIsITApfX1mdW5jdGlvbiBJMm4odCl7dmFyIGUsbjtzd2l0Y2goZT1udWxsLG49bnVsbCx0ZG4odCkuZyl7Y2FzZSAxOmU9KGJlKCksSG4pLG49Qm47YnJlYWs7Y2FzZSAyOmU9KGJlKCksbXIpLG49Tm47YnJlYWs7Y2FzZSAzOmU9KGJlKCksQm4pLG49SG47YnJlYWs7Y2FzZSA0OmU9KGJlKCksTm4pLG49bXJ9S0IodCx1KE92KEhqKHUoQWkodC5rLGUpLDE1KS5PYygpLHo0KSksMTEzKSksV0IodCx1KE92KHFqKHUoQWkodC5rLG4pLDE1KS5PYygpLHo0KSksMTEzKSl9ZnVuY3Rpb24gRDJuKHQpe3ZhciBlLG4scixzLG8saDtpZihzPXUoRmUodC5qLDApLDExKSxzLmUuYy5sZW5ndGgrcy5nLmMubGVuZ3RoPT0wKXQubi5hPTA7ZWxzZXtmb3IoaD0wLHI9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbbmV3IFlzKHMpLG5ldyBFcihzKV0pKSk7enIocik7KW49dShMcihyKSwxMSksaCs9bi5pLm4uYStuLm4uYStuLmEuYTtlPXUoUSh0LChUZSgpLFB3KSksOCksbz1lP2UuYTowLHQubi5hPWgvKHMuZS5jLmxlbmd0aCtzLmcuYy5sZW5ndGgpLW99fWZ1bmN0aW9uIE9jZSh0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgUyhlLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIyMSksSW50KHUobi5iLDY1KSxuYShuYyh1KGUuYiw2NSkuYyksdShlLmIsNjUpLmEpKSxzPVh1ZSh1KGUuYiw2NSkuYix1KG4uYiw2NSkuYikscz4xJiYodC5hPSEwKSxWdG4odShuLmIsNjUpLExpKG5jKHUoZS5iLDY1KS5jKSx1ZChuYShuYyh1KG4uYiw2NSkuYSksdShlLmIsNjUpLmEpLHMpKSksTVF0KHQsZSksT2NlKHQsbil9ZnVuY3Rpb24gTmNlKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBTKHQuYS5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxODkpLHIuZT0wLHIuZC5hLiRiKCk7Zm9yKHM9bmV3IFModC5hLmEpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwxODkpLG49ci5hLmEuZWMoKS5LYygpO24uT2IoKTspZm9yKGU9dShuLlBiKCksODEpLGQ9ZS5mLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDgxKSxoLmQhPXImJihOcyhyLmQsaCksKytoLmQuZSl9ZnVuY3Rpb24gTzJuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHc9dC5qLmMubGVuZ3RoLG49MCxlPXcscz0yKncsZD1uZXcgUyh0LmopO2QuYTxkLmMuYy5sZW5ndGg7KXN3aXRjaChoPXUoSihkKSwxMSksaC5qLmcpe2Nhc2UgMjpjYXNlIDQ6aC5wPS0xO2JyZWFrO2Nhc2UgMTpjYXNlIDM6cj1oLmUuYy5sZW5ndGgsbz1oLmcuYy5sZW5ndGgscj4wJiZvPjA/aC5wPWUrKzpyPjA/aC5wPW4rKzpvPjA/aC5wPXMrKzpoLnA9bisrfXZuKCksWHModC5qLG5ldyBfTCl9ZnVuY3Rpb24gTjJuKHQpe3ZhciBlLG47bj1udWxsLGU9dShGZSh0LmcsMCksMTcpO2Rve2lmKG49ZS5kLmksVnMobiwoc2UoKSxSaCkpKXJldHVybiB1KFEobixSaCksMTEpLmk7aWYobi5rIT0oR24oKSxEcykmJnpyKG5ldyBhcihscihNcyhuKS5hLktjKCksbmV3IHopKSkpZT11KExyKG5ldyBhcihscihNcyhuKS5hLktjKCksbmV3IHopKSksMTcpO2Vsc2UgaWYobi5rIT1EcylyZXR1cm4gbnVsbH13aGlsZShuJiZuLmshPShHbigpLERzKSk7cmV0dXJuIG59ZnVuY3Rpb24gUDJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihkPWUuaixoPWUuZyx3PXUoRmUoZCxkLmMubGVuZ3RoLTEpLDExMyksQz0oQW4oMCxkLmMubGVuZ3RoKSx1KGQuY1swXSwxMTMpKSxrPXZzdCh0LGgsdyxDKSxvPTE7bzxkLmMubGVuZ3RoO28rKyluPShBbihvLTEsZC5jLmxlbmd0aCksdShkLmNbby0xXSwxMTMpKSxzPShBbihvLGQuYy5sZW5ndGgpLHUoZC5jW29dLDExMykpLHI9dnN0KHQsaCxuLHMpLHI+ayYmKHc9bixDPXMsaz1yKTtlLmE9QyxlLmM9d31mdW5jdGlvbiBGMm4odCxlKXt2YXIgbixyO2lmKHI9WU0odC5iLGUuYiksIXIpdGhyb3cgcnQobmV3IEZvKCJJbnZhbGlkIGhpdGJveGVzIGZvciBzY2FubGluZSBjb25zdHJhaW50IGNhbGN1bGF0aW9uLiIpKTsoem5lKGUuYix1KEZRZSh0LmIsZS5iKSw1NykpfHx6bmUoZS5iLHUoUFFlKHQuYixlLmIpLDU3KSkpJiYocWQoKSxlLmIrIiIpLHQuYVtlLmIuZl09dShnbnQodC5iLGUuYiksNTcpLG49dShkbnQodC5iLGUuYiksNTcpLG4mJih0LmFbbi5mXT1lLmIpfWZ1bmN0aW9uIHZmKHQpe2lmKCF0LmEuZHx8IXQuYS5lKXRocm93IHJ0KG5ldyBGbygoTDAoWWdlKSxZZ2UuaysiIG11c3QgaGF2ZSBhIHNvdXJjZSBhbmQgdGFyZ2V0ICIrKEwwKEpFdCksSkV0LmspKyIgc3BlY2lmaWVkLiIpKSk7aWYodC5hLmQ9PXQuYS5lKXRocm93IHJ0KG5ldyBGbygiTmV0d29yayBzaW1wbGV4IGRvZXMgbm90IHN1cHBvcnQgc2VsZi1sb29wczogIit0LmErIiAiK3QuYS5kKyIgIit0LmEuZSkpO3JldHVybiBwaih0LmEuZC5nLHQuYSkscGoodC5hLmUuYix0LmEpLHQuYX1mdW5jdGlvbiBCMm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2ZvcihrPW5ldyBMcChuZXcgdyR0KHQpKSxoPWN0KG90KEZiZSwxKSxLZmUsMTEsMCxbZSxuXSksZD0wLHc9aC5sZW5ndGg7ZDx3OysrZClmb3Iobz1oW2RdLHB6KGsuYSxvLChGbigpLEkyKSk9PW51bGwscz1uZXcgUzEoby5iKTtWbyhzLmEpfHxWbyhzLmIpOylyPXUoVm8ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxyLmM9PXIuZHx8WU0oayxvPT1yLmM/ci5kOnIuYyk7cmV0dXJuIEFyKGspLG5ldyBQdShrKX1mdW5jdGlvbiBQY2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihyPTAsZS5iIT0wJiZuLmIhPTApe289ZWkoZSwwKSxoPWVpKG4sMCksZD1YdCh5ZSh0aShvKSkpLHc9WHQoeWUodGkoaCkpKSxzPSEwO2Rve2lmKGQ+dy10LmImJmQ8dyt0LmIpcmV0dXJuLTE7ZD53LXQuYSYmZDx3K3QuYSYmKytyLGQ8PXcmJm8uYiE9by5kLmM/ZD1YdCh5ZSh0aShvKSkpOnc8PWQmJmguYiE9aC5kLmM/dz1YdCh5ZSh0aShoKSkpOnM9ITF9d2hpbGUocyl9cmV0dXJuIHJ9ZnVuY3Rpb24gUjJuKHQsZSxuLHIscyl7dmFyIG8saCxkLHc7Zm9yKHc9KG89dShIZihYYSksOSksbmV3IHJoKG8sdSh1ZihvLG8ubGVuZ3RoKSw5KSwwKSksZD1uZXcgUyh0LmopO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDExKSxlW2gucF0mJihRNG4oaCxlW2gucF0scikscGYodyxoLmopKTtzPyhfc3QodCxlLChiZSgpLEhuKSwyKm4sciksX3N0KHQsZSxCbiwyKm4scikpOihfc3QodCxlLChiZSgpLE5uKSwyKm4sciksX3N0KHQsZSxtciwyKm4scikpfWZ1bmN0aW9uIGoybih0KXt2YXIgZSxuLHIscyxvO2lmKG89bmV3IGxlLG11KHQuYixuZXcgS24obykpLHQuYi5jPVB0KFhuLEllLDEsMCw1LDEpLG8uYy5sZW5ndGghPTApe2ZvcihlPShBbigwLG8uYy5sZW5ndGgpLHUoby5jWzBdLDc4KSksbj0xLHI9by5jLmxlbmd0aDtuPHI7KytuKXM9KEFuKG4sby5jLmxlbmd0aCksdShvLmNbbl0sNzgpKSxzIT1lJiZRZG4oZSxzKTtpZihFdChlLDYwKSl0aHJvdyBydCh1KGUsNjApKTtpZihFdChlLDI4OSkpdGhyb3cgcnQodShlLDI4OSkpfX1mdW5jdGlvbiAkMm4odCxlKXt2YXIgbixyLHMsbztmb3IodD10PT1udWxsP1R1OihPbih0KSx0KSxuPW5ldyBMbSxvPTAscj0wO3I8ZS5sZW5ndGgmJihzPXQuaW5kZXhPZigiJXMiLG8pLHMhPS0xKTspVnIobix0LnN1YnN0cihvLHMtbykpLGhjKG4sZVtyKytdKSxvPXMrMjtpZihWcihuLHQuc3Vic3RyKG8pKSxyPGUubGVuZ3RoKXtmb3Iobi5hKz0iIFsiLGhjKG4sZVtyKytdKTtyPGUubGVuZ3RoOyluLmErPUthLGhjKG4sZVtyKytdKTtuLmErPSJdIn1yZXR1cm4gbi5hfWZ1bmN0aW9uIHoybih0KXt2YXIgZSxuLHIscztmb3IoZT0wLHI9dC5sZW5ndGgscz1yLTQsbj0wO248czspZT0oUnIobiszLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobiszKSsoUnIobisyLHQubGVuZ3RoKSwzMSoodC5jaGFyQ29kZUF0KG4rMikrKFJyKG4rMSx0Lmxlbmd0aCksMzEqKHQuY2hhckNvZGVBdChuKzEpKyhScihuLHQubGVuZ3RoKSwzMSoodC5jaGFyQ29kZUF0KG4pKzMxKmUpKSkpKSkpLGU9ZXwwLG4rPTQ7Zm9yKDtuPHI7KWU9ZSozMStiYSh0LG4rKyk7cmV0dXJuIGU9ZXwwLGV9ZnVuY3Rpb24gcTJuKHQpe3ZhciBlLG47Zm9yKG49bmV3IGFyKGxyKE1zKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTHIobiksMTcpLGUuZC5pLmshPShHbigpLFNsKSl0aHJvdyBydChuZXcgRjMoUm90K1pJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gTEFTVCwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgb3V0Z29pbmcgZWRnZSB0aGF0ICBkb2VzIG5vdCBnbyB0byBhIExBU1RfU0VQQVJBVEUgbm9kZS4gVGhhdCBtdXN0IG5vdCBoYXBwZW4uIikpfWZ1bmN0aW9uIEgybih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEY7Zm9yKHc9MCxDPW5ldyBTKHQuYSk7Qy5hPEMuYy5jLmxlbmd0aDspe2ZvcihrPXUoSihDKSwxMCksZD0wLG89bmV3IGFyKGxyKGpvKGspLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLE09VDEocy5jKS5iLEY9VDEocy5kKS5iLGQ9Yi5NYXRoLm1heChkLGIuTWF0aC5hYnMoRi1NKSk7dz1iLk1hdGgubWF4KHcsZCl9cmV0dXJuIGg9cipiLk1hdGgubWluKDEsZS9uKSp3LGh9ZnVuY3Rpb24gTTV0KHQpe3ZhciBlO3JldHVybiBlPW5ldyBCOSx0JjI1NiYmKGUuYSs9IkYiKSx0JjEyOCYmKGUuYSs9IkgiKSx0JjUxMiYmKGUuYSs9IlgiKSx0JjImJihlLmErPSJpIiksdCY4JiYoZS5hKz0ibSIpLHQmNCYmKGUuYSs9InMiKSx0JjMyJiYoZS5hKz0idSIpLHQmNjQmJihlLmErPSJ3IiksdCYxNiYmKGUuYSs9IngiKSx0JndmJiYoZS5hKz0iLCIpLFdwdChlLmEpfWZ1bmN0aW9uIEcybih0LGUpe3ZhciBuLHIscyxvO2Zvcih3cihlLCJSZXNpemUgY2hpbGQgZ3JhcGggdG8gZml0IHBhcmVudC4iLDEpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyOSksQXModC5hLG4uYSksbi5hLmM9UHQoWG4sSWUsMSwwLDUsMSk7Zm9yKG89bmV3IFModC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksa28ocyxudWxsKTt0LmIuYz1QdChYbixJZSwxLDAsNSwxKSxkdm4odCksdC5lJiZKd24odC5lLHQpLG9yKGUpfWZ1bmN0aW9uIFYybih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7aWYocj10LmIsbz1yLmUsaD1EeCh1KFEociwoVGUoKSxvcykpLDk4KSksbj0hIW8mJnUoUShvLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSksIShofHxuKSlmb3Ioaz0oZD1uZXcgYjEodC5lKS5hLnZjKCkuS2MoKSxuZXcgdjEoZCkpO2suYS5PYigpOyl3PShlPXUoay5hLlBiKCksNDIpLHUoZS5kZCgpLDExMykpLHcuYSYmKHM9dy5kLFVvKHMsbnVsbCksdy5jPSEwLHQuYT0hMCl9ZnVuY3Rpb24gVTJuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixIO2ZvcihGPS0xLEg9MCxrPXQsQz0wLE09ay5sZW5ndGg7QzxNOysrQyl7Zm9yKHc9a1tDXSxvPXcsaD0wLGQ9by5sZW5ndGg7aDxkOysraClmb3Iocz1vW2hdLGU9bmV3IFhHdChGPT0tMT90WzBdOnRbRl0sRnNlKHMpKSxuPTA7bjxzLmouYy5sZW5ndGg7bisrKWZvcihyPW4rMTtyPHMuai5jLmxlbmd0aDtyKyspQVl0KGUsdShGZShzLmosbiksMTEpLHUoRmUocy5qLHIpLDExKSk+MCYmKytIOysrRn1yZXR1cm4gSH1mdW5jdGlvbiBXMm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPXUoUShlLChodygpLGFfdCkpLDQyNSksbz1laShlLmIsMCk7by5iIT1vLmQuYzspaWYocz11KHRpKG8pLDg2KSx0LmJbcy5nXT09MCl7c3dpdGNoKGguZyl7Y2FzZSAwOmNzZSh0LHMpO2JyZWFrO2Nhc2UgMTpZcG4odCxzKX10LmJbcy5nXT0yfWZvcihyPWVpKHQuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksMTg4KSxyeShuLmIuZCxuLCEwKSxyeShuLmMuYixuLCEwKTtKdChlLChmYygpLEpDdCksdC5hKX1mdW5jdGlvbiBhdSh0LGUpe3RvKCk7dmFyIG4scixzLG87cmV0dXJuIGU/ZT09KERpKCksXzVlKXx8KGU9PWc1ZXx8ZT09VTJ8fGU9PWQ1ZSkmJnQhPWJMdD9uZXcgeHh0KHQsZSk6KHI9dShlLDY3Nyksbj1yLnBrKCksbnx8KGs4KEVvKChSdSgpLG1hKSxlKSksbj1yLnBrKCkpLG89KCFuLmkmJihuLmk9bmV3IENyKSxuLmkpLHM9dShlYyhBbyhvLmYsdCkpLDE5NDIpLCFzJiZraShvLHQscz1uZXcgeHh0KHQsZSkpLHMpOmw1ZX1mdW5jdGlvbiBLMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7Zm9yKHc9dShRKHQsKHNlKCksX2kpKSwxMSksaz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW3cuaS5uLHcubix3LmFdKSkuYSxDPXQuaS5uLmIsbj1nZCh0LmUpLHM9bixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxzYShyLHcpLEtiKHIuYSxuZXcgJGUoayxDKSksZSYmKGQ9dShRKHIsKFRlKCksX28pKSw3NCksZHx8KGQ9bmV3IER1LEp0KHIsX28sZCkpLG5pKGQsbmV3ICRlKGssQykpKX1mdW5jdGlvbiBZMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7Zm9yKHM9dShRKHQsKHNlKCksX2kpKSwxMSksaz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYSxDPXQuaS5uLmIsbj1nZCh0LmcpLGg9bixkPTAsdz1oLmxlbmd0aDtkPHc7KytkKW89aFtkXSxEYShvLHMpLHFWdChvLmEsbmV3ICRlKGssQykpLGUmJihyPXUoUShvLChUZSgpLF9vKSksNzQpLHJ8fChyPW5ldyBEdSxKdChvLF9vLHIpKSxuaShyLG5ldyAkZShrLEMpKSl9ZnVuY3Rpb24gWDJuKHQsZSl7dmFyIG4scixzLG8saCxkO2Zvcih0LmI9bmV3IGxlLHQuZD11KFEoZSwoc2UoKSxPNikpLDIzMCksdC5lPWFpbih0LmQpLG89bmV3IFFpLHM9XzEoY3Qob3QoT2JlLDEpLFVmZSwzNywwLFtlXSkpLGg9MDtoPHMuYy5sZW5ndGg7KXI9KEFuKGgscy5jLmxlbmd0aCksdShzLmNbaF0sMzcpKSxyLnA9aCsrLG49bmV3IEtsZShyLHQuYSx0LmIpLEFzKHMsbi5iKSx1ZSh0LmIsbiksbi5zJiYoZD1laShvLDApLFhNKGQsbikpO3JldHVybiB0LmM9bmV3IHFzLG99ZnVuY3Rpb24gUTJuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihoPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO2guT2IoKTspbz11KGguUGIoKSwxMTEpLG49by5jP0J2dChvLmMpOjAsbj4wP28uYT8oZD1vLmIucmYoKS5hLG4+ZCYmKHM9KG4tZCkvMixvLmQuYj1zLG8uZC5jPXMpKTpvLmQuYz10LnMrbjpUQyh0LnUpJiYocj1DNHQoby5iKSxyLmM8MCYmKG8uZC5iPS1yLmMpLHIuYytyLmI+by5iLnJmKCkuYSYmKG8uZC5jPXIuYytyLmItby5iLnJmKCkuYSkpfWZ1bmN0aW9uIFoybih0LGUpe3ZhciBuLHIscyxvO2Zvcih3cihlLCJTZW1pLUludGVyYWN0aXZlIENyb3NzaW5nIE1pbmltaXphdGlvbiBQcm9jZXNzb3IiLDEpLG49ITEscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI5KSxvPXFJKEckKFJpKFJpKG5ldyBUbihudWxsLG5ldyBfbihyLmEsMTYpKSxuZXcgUlQpLG5ldyBNTCksbmV3IGdGKSxuZXcgcEYpLG49bnxvLmEhPW51bGw7biYmSnQodCwoc2UoKSxaVHQpLChGbigpLCEwKSksb3IoZSl9ZnVuY3Rpb24gSjJuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHM9biwhcyYmKHM9bmV3IFlrKSx3cihzLCJMYXlvdXQiLHQuYS5jLmxlbmd0aCksamUoUmUoUShlLChodygpLHJfdCkpKSkpZm9yKHFkKCkscj0wO3I8dC5hLmMubGVuZ3RoO3IrKylkPShyPDEwPyIwIjoiIikrcisrLCIiK2QrQXAoc2wodShGZSh0LmEsciksNTEpKSk7Zm9yKGg9bmV3IFModC5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw1MSksby5wZihlLFJjKHMsMSkpO29yKHMpfWZ1bmN0aW9uIHR2bih0KXt2YXIgZSxuO2lmKGU9dSh0LmEsMTkpLmEsbj11KHQuYiwxOSkuYSxlPj0wKXtpZihlPT1uKXJldHVybiBuZXcgbGEoZGUoLWUtMSksZGUoLWUtMSkpO2lmKGU9PS1uKXJldHVybiBuZXcgbGEoZGUoLWUpLGRlKG4rMSkpfXJldHVybiBiLk1hdGguYWJzKGUpPmIuTWF0aC5hYnMobik/ZTwwP25ldyBsYShkZSgtZSksZGUobikpOm5ldyBsYShkZSgtZSksZGUobisxKSk6bmV3IGxhKGRlKGUrMSksZGUobikpfWZ1bmN0aW9uIGV2bih0KXt2YXIgZSxuO249dShRKHQsKFRlKCksY3UpKSwxNjMpLGU9dShRKHQsKHNlKCksTzIpKSwzMDMpLG49PShoaCgpLGZiKT8oSnQodCxjdSxDTyksSnQodCxPMiwoQjAoKSxVNCkpKTpuPT1GeT8oSnQodCxjdSxDTyksSnQodCxPMiwoQjAoKSxBNikpKTplPT0oQjAoKSxVNCk/KEp0KHQsY3UsZmIpLEp0KHQsTzIseU8pKTplPT1BNiYmKEp0KHQsY3UsRnkpLEp0KHQsTzIseU8pKX1mdW5jdGlvbiBocSgpe2hxPVosTk89bmV3IEFRLFBtZT1iaShuZXcgSHMsKFdhKCksb3UpLChybygpLGZHKSksUm1lPUt1KGJpKG5ldyBIcyxvdSx5RyksSW8sbUcpLGptZT1hdyhhdyhPUihLdShiaShuZXcgSHMsQWQsVEcpLElvLEVHKSxxYyksa0cpLENHKSxGbWU9S3UoYmkoYmkoYmkobmV3IEhzLGxiLGdHKSxxYyxiRykscWMsZTcpLElvLHBHKSxCbWU9S3UoYmkoYmkobmV3IEhzLHFjLGU3KSxxYyxoRyksSW8sbEcpfWZ1bmN0aW9uIGJfKCl7Yl89WixxbWU9YmkoS3UobmV3IEhzLChXYSgpLElvKSwocm8oKSxZN3QpKSxvdSxmRyksVW1lPWF3KGF3KE9SKEt1KGJpKG5ldyBIcyxBZCxURyksSW8sRUcpLHFjKSxrRyksQ0cpLEhtZT1LdShiaShiaShiaShuZXcgSHMsbGIsZ0cpLHFjLGJHKSxxYyxlNyksSW8scEcpLFZtZT1iaShiaShuZXcgSHMsb3UseUcpLElvLG1HKSxHbWU9S3UoYmkoYmkobmV3IEhzLHFjLGU3KSxxYyxoRyksSW8sbEcpfWZ1bmN0aW9uIG52bih0LGUsbixyLHMpe3ZhciBvLGg7KCFWYShlKSYmZS5jLmkuYz09ZS5kLmkuY3x8IVllZShLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSksbikpJiYhVmEoZSkmJihlLmM9PXM/aDgoZS5hLDAsbmV3IHlvKG4pKTpuaShlLmEsbmV3IHlvKG4pKSxyJiYhUzAodC5hLG4pJiYoaD11KFEoZSwoVGUoKSxfbykpLDc0KSxofHwoaD1uZXcgRHUsSnQoZSxfbyxoKSksbz1uZXcgeW8obiksaHMoaCxvLGguYy5iLGguYyksTnModC5hLG8pKSl9ZnVuY3Rpb24gcnZuKHQpe3ZhciBlLG47Zm9yKG49bmV3IGFyKGxyKGpvKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTHIobiksMTcpLGUuYy5pLmshPShHbigpLFNsKSl0aHJvdyBydChuZXcgRjMoUm90K1pJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgY29tZSBmcm9tIGEgRklSU1RfU0VQQVJBVEUgbm9kZS4gVGhhdCBtdXN0IG5vdCBoYXBwZW4uIikpfWZ1bmN0aW9uIGl2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7aWYocz1KcmUodC5EYiYyNTQpLHM9PTApdC5FYj1uO2Vsc2V7aWYocz09MSlkPVB0KFhuLEllLDEsMiw1LDEpLG89YnN0KHQsZSksbz09MD8oZFswXT1uLGRbMV09dC5FYik6KGRbMF09dC5FYixkWzFdPW4pO2Vsc2UgZm9yKGQ9UHQoWG4sSWUsMSxzKzEsNSwxKSxoPXMyKHQuRWIpLHI9Mix3PTAsaz0wO3I8PTEyODtyPDw9MSlyPT1lP2RbaysrXT1uOnQuRGImciYmKGRbaysrXT1oW3crK10pO3QuRWI9ZH10LkRifD1lfWZ1bmN0aW9uIEZjZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHRoaXMuYj1uZXcgbGUscz0wLHI9MCxoPW5ldyBTKHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE2NyksbiYmcnluKG8pLHVlKHRoaXMuYixvKSxzKz1vLm8scis9by5wO3RoaXMuYi5jLmxlbmd0aD4wJiYobz11KEZlKHRoaXMuYiwwKSwxNjcpLHMrPW8ubyxyKz1vLnApLHMqPTIscio9MixlPjE/cz1wcyhiLk1hdGguY2VpbChzKmUpKTpyPXBzKGIuTWF0aC5jZWlsKHIvZSkpLHRoaXMuYT1uZXcgdzN0KHMscil9ZnVuY3Rpb24gQmNlKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3IoQz1yLGUuaiYmZS5vPyhIPXUoSm4odC5mLGUuQSksNTcpLFk9SC5kLmMrSC5kLmIsLS1DKTpZPWUuYS5jK2UuYS5iLE09cyxuLnEmJm4ubz8oSD11KEpuKHQuZixuLkMpLDU3KSxrPUguZC5jLCsrTSk6az1uLmEuYyx0dD1rLVksdz1iLk1hdGgubWF4KDIsTS1DKSxkPXR0L3csVj1ZK2QsRj1DO0Y8TTsrK0YpaD11KG8uWGIoRiksMTI4KSxndD1oLmEuYixoLmEuYz1WLWd0LzIsVis9ZH1mdW5jdGlvbiBJNXQodCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEMsTTtmb3Ioaz1uLmMubGVuZ3RoLG8mJih0LmM9UHQoVHIsWHIsMjUsZS5sZW5ndGgsMTUsMSkpLGg9cz8wOmUubGVuZ3RoLTE7cz9oPGUubGVuZ3RoOmg+PTA7aCs9cz8xOi0xKXtmb3IoZD1lW2hdLHc9cj09KGJlKCksSG4pP3M/WW8oZCxyKTphMihZbyhkLHIpKTpzP2EyKFlvKGQscikpOllvKGQsciksbyYmKHQuY1tkLnBdPXcuZ2MoKSksTT13LktjKCk7TS5PYigpOylDPXUoTS5QYigpLDExKSx0LmRbQy5wXT1rKys7QXMobix3KX19ZnVuY3Rpb24gUmNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2ZvcihvPVh0KHllKHQuYi5LYygpLlBiKCkpKSxrPVh0KHllKGRjbihlLmIpKSkscj11ZChuYyh0LmEpLGstbikscz11ZChuYyhlLmEpLG4tbyksQz1MaShyLHMpLHVkKEMsMS8oay1vKSksdGhpcy5hPUMsdGhpcy5iPW5ldyBsZSxkPSEwLGg9dC5iLktjKCksaC5QYigpO2guT2IoKTspdz1YdCh5ZShoLlBiKCkpKSxkJiZ3LW4+d2N0JiYodGhpcy5iLkZjKG4pLGQ9ITEpLHRoaXMuYi5GYyh3KTtkJiZ0aGlzLmIuRmMobil9ZnVuY3Rpb24gc3ZuKHQpe3ZhciBlLG4scixzO2lmKGJ3bih0LHQubiksdC5kLmMubGVuZ3RoPjApe2ZvcihQOSh0LmMpO2w1dCh0LHUoSihuZXcgUyh0LmUuYSkpLDEyMSkpPHQuZS5hLmMubGVuZ3RoOyl7Zm9yKGU9WGZuKHQpLHM9ZS5lLmUtZS5kLmUtZS5hLGUuZS5qJiYocz0tcykscj1uZXcgUyh0LmUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTIxKSxuLmomJihuLmUrPXMpO1A5KHQuYyl9UDkodC5jKSxKNHQodCx1KEoobmV3IFModC5lLmEpKSwxMjEpKSxWbGUodCl9fWZ1bmN0aW9uIGF2bih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHM9dShBaSh0LmEsKGc0KCksTEcpKSwxNSkuS2MoKTtzLk9iKCk7KXN3aXRjaChyPXUocy5QYigpLDEwMSksbj11KEZlKHIuaiwwKSwxMTMpLmQuaixvPW5ldyBQdShyLmopLFhzKG8sbmV3IERYKSxlLmcpe2Nhc2UgMTpDc3QodCxvLG4sKEp2KCksaGIpLDEpO2JyZWFrO2Nhc2UgMDpoPWkybihvKSxDc3QodCxuZXcgS2QobywwLGgpLG4sKEp2KCksaGIpLDApLENzdCh0LG5ldyBLZChvLGgsby5jLmxlbmd0aCksbixoYiwxKX19ZnVuY3Rpb24gb3ZuKHQsZSl7UXgoKTt2YXIgbixyO2lmKG49RHJ0KHo4KCksZS50ZygpKSxuKXtpZihyPW4uaixFdCh0LDIzOSkpcmV0dXJuIGdybih1KHQsMzMpKT9OdShyLChYZigpLEpzKSl8fE51KHIscW4pOk51KHIsKFhmKCksSnMpKTtpZihFdCh0LDM1MikpcmV0dXJuIE51KHIsKFhmKCksSWQpKTtpZihFdCh0LDE4NikpcmV0dXJuIE51KHIsKFhmKCksJDIpKTtpZihFdCh0LDM1NCkpcmV0dXJuIE51KHIsKFhmKCksWGcpKX1yZXR1cm4hMH1mdW5jdGlvbiBjdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihzPW4sbz1zLmFrKCksVjAodC5lLG8pKXtpZihvLmhpKCkpe2ZvcihyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihkPXJbaF0seWkoZCxzKSYmaCE9ZSl0aHJvdyBydChuZXcgUG4oWEQpKX19ZWxzZSBmb3Iodz1hdSh0LmUuVGcoKSxvKSxyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihkPXJbaF0sdy5ybChkLmFrKCkpJiZoIT1lKXRocm93IHJ0KG5ldyBQbihlTykpO3JldHVybiB1KHU0KHQsZSxuKSw3Mil9ZnVuY3Rpb24gamNlKHQsZSl7aWYoZSBpbnN0YW5jZW9mIE9iamVjdCl0cnl7aWYoZS5fX2phdmEkZXhjZXB0aW9uPXQsbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zaWUiKSE9LTEmJiRkb2MuZG9jdW1lbnRNb2RlPDkpcmV0dXJuO3ZhciBuPXQ7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7Y2F1c2U6e2dldDpmdW5jdGlvbigpe3ZhciByPW4uWmQoKTtyZXR1cm4gciYmci5YZCgpfX0sc3VwcHJlc3NlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uWWQoKX19fSl9Y2F0Y2h7fX1mdW5jdGlvbiAkY2UodCxlKXt2YXIgbixyLHMsbyxoO2lmKHI9ZT4+NSxlJj0zMSxyPj10LmQpcmV0dXJuIHQuZTwwPyhKcCgpLF91dCk6KEpwKCksUUUpO2lmKG89dC5kLXIscz1QdChUcixYciwyNSxvKzEsMTUsMSksWjBuKHMsbyx0LmEscixlKSx0LmU8MCl7Zm9yKG49MDtuPHImJnQuYVtuXT09MDtuKyspO2lmKG48cnx8ZT4wJiZ0LmFbbl08PDMyLWUpe2ZvcihuPTA7bjxvJiZzW25dPT0tMTtuKyspc1tuXT0wO249PW8mJisrbywrK3Nbbl19fXJldHVybiBoPW5ldyBLMyh0LmUsbyxzKSxPQyhoKSxofWZ1bmN0aW9uIHpjZSh0KXt2YXIgZSxuLHIscztyZXR1cm4gcz1rMSh0KSxuPW5ldyB3aShzKSxyPW5ldyBLcyhzKSxlPW5ldyBsZSxBcyhlLCghdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHQuZCkpLEFzKGUsKCF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lKSksdShQbChwdShSaShuZXcgVG4obnVsbCxuZXcgX24oZSwxNikpLG4pLHIpLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksTHkpLEdsXSkpKSwyMSl9ZnVuY3Rpb24gcWNlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYoZD0odG8oKSx1KGUsNjYpLk9qKCkpLFYwKHQuZSxlKSl7aWYoZS5oaSgpJiZtcSh0LGUscixFdChlLDk5KSYmKHUoZSwxOCkuQmImWWEpIT0wKSl0aHJvdyBydChuZXcgUG4oWEQpKX1lbHNlIGZvcih3PWF1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx3LnJsKG8uYWsoKSkpdGhyb3cgcnQobmV3IFBuKGVPKSk7SkModCwkNHQodCxlLG4pLGQ/dShyLDcyKTpZZChlLHIpKX1mdW5jdGlvbiBWMCh0LGUpe3RvKCk7dmFyIG4scixzO3JldHVybiBlLiRqKCk/ITA6ZS5aaigpPT0tMj9lPT0oYTYoKSxXNil8fGU9PVU2fHxlPT1NZnR8fGU9PUlmdD8hMDoocz10LlRnKCksVmkocyxlKT49MD8hMToobj1FNCgoUnUoKSxtYSkscyxlKSxuPyhyPW4uWmooKSwocj4xfHxyPT0tMSkmJiR2KEVvKG1hLG4pKSE9Myk6ITApKTohMX1mdW5jdGlvbiB1dm4odCxlLG4scil7dmFyIHMsbyxoLGQsdztyZXR1cm4gZD1Nbyh1KFN0KCghZS5iJiYoZS5iPW5ldyBDbihicixlLDQsNykpLGUuYiksMCksODIpKSx3PU1vKHUoU3QoKCFlLmMmJihlLmM9bmV3IENuKGJyLGUsNSw4KSksZS5jKSwwKSw4MikpLHRzKGQpPT10cyh3KXx8Wm0odyxkKT9udWxsOihoPXJJKGUpLGg9PW4/cjoobz11KEpuKHQuYSxoKSwxMCksbyYmKHM9by5lLHMpP3M6bnVsbCkpfWZ1bmN0aW9uIGx2bih0LGUpe3ZhciBuO3N3aXRjaChuPXUoUSh0LChUZSgpLFpHKSksMjc2KSx3cihlLCJMYWJlbCBzaWRlIHNlbGVjdGlvbiAoIituKyIpIiwxKSxuLmcpe2Nhc2UgMDpuY2UodCwoamwoKSx1MCkpO2JyZWFrO2Nhc2UgMTpuY2UodCwoamwoKSx3YikpO2JyZWFrO2Nhc2UgMjp2bGUodCwoamwoKSx1MCkpO2JyZWFrO2Nhc2UgMzp2bGUodCwoamwoKSx3YikpO2JyZWFrO2Nhc2UgNDpaY2UodCwoamwoKSx1MCkpO2JyZWFrO2Nhc2UgNTpaY2UodCwoamwoKSx3YikpfW9yKGUpfWZ1bmN0aW9uIEQ1dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKHI9WUtlKG4sdC5sZW5ndGgpLGg9dFtyXSxoWzBdLms9PShHbigpLHhzKSlmb3Iobz1uSHQobixoLmxlbmd0aCksdz1lLmoscz0wO3M8dy5jLmxlbmd0aDtzKyspZD0oQW4ocyx3LmMubGVuZ3RoKSx1KHcuY1tzXSwxMSkpLChuP2Quaj09KGJlKCksSG4pOmQuaj09KGJlKCksQm4pKSYmamUoUmUoUShkLChzZSgpLGtPKSkpKSYmKGFoKHcscyx1KFEoaFtvXSwoc2UoKSxfaSkpLDExKSksbys9bj8xOi0xKX1mdW5jdGlvbiBodm4odCxlKXt2YXIgbixyLHMsbyxoO2g9bmV3IGxlLG49ZTtkbyBvPXUoSm4odC5iLG4pLDEyOCksby5CPW4uYyxvLkQ9bi5kLGguY1toLmMubGVuZ3RoXT1vLG49dShKbih0LmssbiksMTcpO3doaWxlKG4pO3JldHVybiByPShBbigwLGguYy5sZW5ndGgpLHUoaC5jWzBdLDEyOCkpLHIuaj0hMCxyLkE9dShyLmQuYS5lYygpLktjKCkuUGIoKSwxNykuYy5pLHM9dShGZShoLGguYy5sZW5ndGgtMSksMTI4KSxzLnE9ITAscy5DPXUocy5kLmEuZWMoKS5LYygpLlBiKCksMTcpLmQuaSxofWZ1bmN0aW9uIEhjZSh0KXtpZih0Lmc9PW51bGwpc3dpdGNoKHQucCl7Y2FzZSAwOnQuZz1wcm4odCk/KEZuKCksWUUpOihGbigpLEkyKTticmVhaztjYXNlIDE6dC5nPUVJKFlpbih0KSk7YnJlYWs7Y2FzZSAyOnQuZz1ESShuaW4odCkpO2JyZWFrO2Nhc2UgMzp0Lmc9amVuKHQpO2JyZWFrO2Nhc2UgNDp0Lmc9bmV3IEQzKFJlbih0KSk7YnJlYWs7Y2FzZSA2OnQuZz1nMigkZW4odCkpO2JyZWFrO2Nhc2UgNTp0Lmc9ZGUoaXJuKHQpKTticmVhaztjYXNlIDc6dC5nPWVFKFppbih0KSl9cmV0dXJuIHQuZ31mdW5jdGlvbiBPNXQodCl7aWYodC5uPT1udWxsKXN3aXRjaCh0LnApe2Nhc2UgMDp0Lm49YnJuKHQpPyhGbigpLFlFKTooRm4oKSxJMik7YnJlYWs7Y2FzZSAxOnQubj1FSShYaW4odCkpO2JyZWFrO2Nhc2UgMjp0Lm49REkocmluKHQpKTticmVhaztjYXNlIDM6dC5uPXFlbih0KTticmVhaztjYXNlIDQ6dC5uPW5ldyBEMyhIZW4odCkpO2JyZWFrO2Nhc2UgNjp0Lm49ZzIoemVuKHQpKTticmVhaztjYXNlIDU6dC5uPWRlKHNybih0KSk7YnJlYWs7Y2FzZSA3OnQubj1lRShRaW4odCkpfXJldHVybiB0Lm59ZnVuY3Rpb24gR2NlKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBTKHQuYS5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwzMDcpLHIuZz0wLHIuaT0wLHIuZS5hLiRiKCk7Zm9yKHM9bmV3IFModC5hLmEpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwzMDcpLG49ci5hLmEuZWMoKS5LYygpO24uT2IoKTspZm9yKGU9dShuLlBiKCksNTcpLGQ9ZS5jLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDU3KSxoLmEhPXImJihOcyhyLmUsaCksKytoLmEuZywrK2guYS5pKX1mdW5jdGlvbiBmdm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYoZD1ZTSh0LmEsZS5iKSwhZCl0aHJvdyBydChuZXcgRm8oIkludmFsaWQgaGl0Ym94ZXMgZm9yIHNjYW5saW5lIG92ZXJsYXAgY2FsY3VsYXRpb24uIikpO2ZvcihoPSExLG89KHI9bmV3IHZDKG5ldyBnQyhuZXcgeSh0LmEuYSkuYSkuYiksbmV3IGcocikpO21NKG8uYS5hKTspaWYocz0obj13aihvLmEpLHUobi5jZCgpLDY1KSksTWNuKGUuYixzKSl0WWUodC5iLmEsZS5iLHMpLGg9ITA7ZWxzZSBpZihoKWJyZWFrfWZ1bmN0aW9uIGR2bih0KXt2YXIgZSxuLHIscyxvO3M9dShRKHQsKFRlKCksRjIpKSwyMSksbz11KFEodCxpViksMjEpLG49bmV3ICRlKHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxlPW5ldyB5byhuKSxzLkhjKChfbCgpLFh5KSkmJihyPXUoUSh0LHA3KSw4KSxvLkhjKChjbCgpLE03KSkmJihyLmE8PTAmJihyLmE9MjApLHIuYjw9MCYmKHIuYj0yMCkpLGUuYT1iLk1hdGgubWF4KG4uYSxyLmEpLGUuYj1iLk1hdGgubWF4KG4uYixyLmIpKSxheW4odCxuLGUpfWZ1bmN0aW9uIFZjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7cz1lP25ldyBLWDpuZXcgWVgsbz0hMTtkbyBmb3Iobz0hMSxrPWU/YTIodC5iKTp0LmIsdz1rLktjKCk7dy5PYigpOylmb3IoZD11KHcuUGIoKSwyOSksRj1HdihkLmEpLGV8fG5ldyBtdihGKSxNPW5ldyBTKEYpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDEwKSxzLk1iKEMpJiYocj1DLG49dShRKEMsKHNlKCksTHcpKSwzMDUpLGg9ZT9uLmI6bi5rLG89ZnVlKHIsaCxlLCExKSk7d2hpbGUobyl9ZnVuY3Rpb24gZ3ZuKHQsZSxuKXt2YXIgcixzLG8saCxkO2Zvcih3cihuLCJMb25nZXN0IHBhdGggbGF5ZXJpbmciLDEpLHQuYT1lLGQ9dC5hLmEsdC5iPVB0KFRyLFhyLDI1LGQuYy5sZW5ndGgsMTUsMSkscj0wLGg9bmV3IFMoZCk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksMTApLHMucD1yLHQuYltyXT0tMSwrK3I7Zm9yKG89bmV3IFMoZCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLGRjZSh0LHMpO2QuYz1QdChYbixJZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBwdm4odCxlKXt2YXIgbixyLHM7ZS5hPyhZTSh0LmIsZS5iKSx0LmFbZS5iLmldPXUoZ250KHQuYixlLmIpLDgxKSxuPXUoZG50KHQuYixlLmIpLDgxKSxuJiYodC5hW24uaV09ZS5iKSk6KHI9dShnbnQodC5iLGUuYiksODEpLHImJnI9PXQuYVtlLmIuaV0mJnIuZCYmci5kIT1lLmIuZCYmci5mLkZjKGUuYikscz11KGRudCh0LmIsZS5iKSw4MSkscyYmdC5hW3MuaV09PWUuYiYmcy5kJiZzLmQhPWUuYi5kJiZlLmIuZi5GYyhzKSxlbnQodC5iLGUuYikpfWZ1bmN0aW9uIFVjZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gbz10LmQsZD1YdCh5ZShRKHQsKFRlKCksVWcpKSkpLGQ8MCYmKGQ9MCxKdCh0LFVnLGQpKSxlLm8uYj1kLGg9Yi5NYXRoLmZsb29yKGQvMikscj1uZXcgTWMsRnMociwoYmUoKSxCbikpLFVvKHIsZSksci5uLmI9aCxzPW5ldyBNYyxGcyhzLEhuKSxVbyhzLGUpLHMubi5iPWgsc2EodCxyKSxuPW5ldyB6dixMbyhuLHQpLEp0KG4sX28sbnVsbCksRGEobixzKSxzYShuLG8pLHhtbihlLHQsbiksVGduKHQsbiksbn1mdW5jdGlvbiBidm4odCl7dmFyIGUsbjtyZXR1cm4gbj11KFEodCwoc2UoKSxHYykpLDIxKSxlPW5ldyBIcyxuLkhjKChvbygpLHZTKSkmJihSbChlLEltZSksUmwoZSxRQ3QpKSwobi5IYyhmNyl8fGplKFJlKFEodCwoVGUoKSxZbHQpKSkpKSYmKFJsKGUsUUN0KSxuLkhjKFY0KSYmUmwoZSxPbWUpKSxuLkhjKGJoKSYmUmwoZSxNbWUpLG4uSGMod1MpJiZSbChlLE5tZSksbi5IYyhqRykmJlJsKGUsRG1lKSxuLkhjKGw3KSYmUmwoZSxBbWUpLG4uSGMoaDcpJiZSbChlLExtZSksZX1mdW5jdGlvbiB2dm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO3JldHVybiByPXQuZCxvPWUuZCxkPXIrbyx3PXQuZSE9ZS5lPy0xOjEsZD09Mj8oQz1DYShQcyh0LmFbMF0sY28pLFBzKGUuYVswXSxjbykpLEY9U3IoQyksTT1Tcih6bShDLDMyKSksTT09MD9uZXcgTGcodyxGKTpuZXcgSzModywyLGN0KG90KFRyLDEpLFhyLDI1LDE1LFtGLE1dKSkpOihuPXQuYSxzPWUuYSxoPVB0KFRyLFhyLDI1LGQsMTUsMSksT3VuKG4scixzLG8saCksaz1uZXcgSzModyxkLGgpLE9DKGspLGspfWZ1bmN0aW9uIFdjZSh0LGUsbixyKXt2YXIgcyxvO2lmKGUpe2lmKHM9dC5hLnVlKG4uZCxlLmQpLHM9PTApcmV0dXJuIHIuZD1KMnQoZSxuLmUpLHIuYj0hMCxlO289czwwPzA6MSxlLmFbb109V2NlKHQsZS5hW29dLG4sciksQW0oZS5hW29dKSYmKEFtKGUuYVsxLW9dKT8oZS5iPSEwLGUuYVswXS5iPSExLGUuYVsxXS5iPSExKTpBbShlLmFbb10uYVtvXSk/ZT1ueihlLDEtbyk6QW0oZS5hW29dLmFbMS1vXSkmJihlPXVadChlLDEtbykpKX1lbHNlIHJldHVybiBuO3JldHVybiBlfWZ1bmN0aW9uIEtjZSh0LGUsbil7dmFyIHIscyxvLGg7cz10Lmkscj10Lm4saG10KHQsKEtmKCksc2MpLHMuYytyLmIsbiksaG10KHQsYWMscy5jK3MuYi1yLmMtblsyXSxuKSxoPXMuYi1yLmItci5jLG5bMF0+MCYmKG5bMF0rPXQuZCxoLT1uWzBdKSxuWzJdPjAmJihuWzJdKz10LmQsaC09blsyXSksbz1iLk1hdGgubWF4KDAsaCksblsxXT1iLk1hdGgubWF4KG5bMV0saCksaG10KHQsdHUscy5jK3IuYituWzBdLShuWzFdLWgpLzIsbiksZT09dHUmJih0LmMuYj1vLHQuYy5jPXMuYytyLmIrKG8taCkvMil9ZnVuY3Rpb24gWWNlKCl7dGhpcy5jPVB0KGlhLHZvLDI1LChiZSgpLGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSkpLmxlbmd0aCwxNSwxKSx0aGlzLmI9UHQoaWEsdm8sMjUsY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKS5sZW5ndGgsMTUsMSksdGhpcy5hPVB0KGlhLHZvLDI1LGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSkubGVuZ3RoLDE1LDEpLHhidCh0aGlzLmMsc3MpLHhidCh0aGlzLmIsVHMpLHhidCh0aGlzLmEsVHMpfWZ1bmN0aW9uIGpjKHQsZSxuKXt2YXIgcixzLG8saDtpZihlPD1uPyhzPWUsbz1uKToocz1uLG89ZSkscj0wLHQuYj09bnVsbCl0LmI9UHQoVHIsWHIsMjUsMiwxNSwxKSx0LmJbMF09cyx0LmJbMV09byx0LmM9ITA7ZWxzZXtpZihyPXQuYi5sZW5ndGgsdC5iW3ItMV0rMT09cyl7dC5iW3ItMV09bztyZXR1cm59aD1QdChUcixYciwyNSxyKzIsMTUsMSksSWModC5iLDAsaCwwLHIpLHQuYj1oLHQuYltyLTFdPj1zJiYodC5jPSExLHQuYT0hMSksdC5iW3IrK109cyx0LmJbcl09byx0LmN8fGI0KHQpfX1mdW5jdGlvbiB3dm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2ZvcihrPWUuZCx0LmE9bmV3IFljKGsuYy5sZW5ndGgpLHQuYz1uZXcgQ3IsZD1uZXcgUyhrKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMDEpLG89bmV3IExJKG51bGwpLHVlKHQuYSxvKSxraSh0LmMsaCxvKTtmb3IodC5iPW5ldyBDcixTZ24odCxlKSxyPTA7cjxrLmMubGVuZ3RoLTE7cisrKWZvcih3PXUoRmUoZS5kLHIpLDEwMSkscz1yKzE7czxrLmMubGVuZ3RoO3MrKylvMm4odCx3LHUoRmUoZS5kLHMpLDEwMSksbil9ZnVuY3Rpb24gWGNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoIVM4KGUpKXtmb3Iodz1SYyhuLChFdChlLDE0KT91KGUsMTQpLmdjKCk6TjAoZS5LYygpKSkvdC5hfDApLHdyKHcsTTFlLDEpLGQ9bmV3IFdRLGg9MCxvPWUuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksODYpLGQ9TDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbZCxuZXcgQ3AocildKSksaDxyLmYuYiYmKGg9ci5mLmIpO2ZvcihzPWUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksODYpLEp0KHIsKGZjKCkseFYpLGgpO29yKHcpLFhjZSh0LGQsbil9fWZ1bmN0aW9uIG12bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihuPVRzLGQ9KEduKCksRHMpLHM9bmV3IFMoZS5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMCksbz1yLmssbyE9RHMmJihoPXllKFEociwoc2UoKSx0OXQpKSksaD09bnVsbD8obj1iLk1hdGgubWF4KG4sMCksci5uLmI9bitNMnQodC5hLG8sZCkpOnIubi5iPShPbihoKSxoKSksdz1NMnQodC5hLG8sZCksci5uLmI8bit3K3IuZC5kJiYoci5uLmI9bit3K3IuZC5kKSxuPXIubi5iK3Iuby5iK3IuZC5hLGQ9b31mdW5jdGlvbiB5dm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtmb3Iobz1tNChlLCExLCExKSxrPXNEKG8pLE09WHQoeWUocWUoZSwoaV8oKSwkdXQpKSkpLHM9UmhlKGssTSt0LmEpLEM9bmV3IFZzdChzKSxMbyhDLGUpLGtpKHQuYixlLEMpLG4uY1tuLmMubGVuZ3RoXT1DLHc9KCFlLm4mJihlLm49bmV3IGhlKHFvLGUsMSw3KSksZS5uKSxkPW5ldyBlcih3KTtkLmUhPWQuaS5nYygpOyloPXUoZHIoZCksMTM3KSxyPWJEKHQsaCwhMCwwLDApLG4uY1tuLmMubGVuZ3RoXT1yO3JldHVybiBDfWZ1bmN0aW9uIFFjZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQztpZih0LmQmJnQuZC5sZyhzKSxvPXUocy5YYigwKSwzMyksaXNlKHQsbixvLCExKXx8KGg9dShzLlhiKHMuZ2MoKS0xKSwzMyksaXNlKHQscixoLCEwKSl8fEk0dCh0LHMpKXJldHVybiEwO2ZvcihDPXMuS2MoKTtDLk9iKCk7KWZvcihrPXUoQy5QYigpLDMzKSx3PWUuS2MoKTt3Lk9iKCk7KWlmKGQ9dSh3LlBiKCksMzMpLGRxKHQsayxkKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB4dm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO0Y9ZS5jLmxlbmd0aCxNPShrPXQuWWcobiksdShrPj0wP3QuX2coaywhMSwhMCk6bHcodCxuLCExKSw1OCkpO3Q6Zm9yKG89TS5LYygpO28uT2IoKTspe2ZvcihzPXUoby5QYigpLDU2KSxDPTA7QzxGOysrQylpZihoPShBbihDLGUuYy5sZW5ndGgpLHUoZS5jW0NdLDcyKSksdz1oLmRkKCksZD1oLmFrKCkscj1zLmJoKGQsITEpLHc9PW51bGw/ciE9bnVsbDoheWkodyxyKSljb250aW51ZSB0O3JldHVybiBzfXJldHVybiBudWxsfWZ1bmN0aW9uIGt2bih0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3Iocz11KFJnKGUsKGJlKCksQm4pKS5LYygpLlBiKCksMTEpLG89dShSZyhlLEhuKS5LYygpLlBiKCksMTEpLGQ9bmV3IFModC5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKGQpLDExKTtoLmUuYy5sZW5ndGghPTA7KXNhKHUoRmUoaC5lLDApLDE3KSxzKTtmb3IoO2guZy5jLmxlbmd0aCE9MDspRGEodShGZShoLmcsMCksMTcpLG8pfW58fEp0KGUsKHNlKCksbjEpLG51bGwpLHJ8fEp0KGUsKHNlKCksUmgpLG51bGwpfWZ1bmN0aW9uIG00KHQsZSxuKXt2YXIgcixzO2lmKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaT09MClyZXR1cm4gd3l0KHQpO2lmKHI9dShTdCgoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLDApLDIwMiksZSYmKHhyKCghci5hJiYoci5hPW5ldyBTcyhIaCxyLDUpKSxyLmEpKSxCOChyLDApLGo4KHIsMCksRjgociwwKSxSOChyLDApKSxuKWZvcihzPSghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSk7cy5pPjE7KWR5KHMscy5pLTEpO3JldHVybiByfWZ1bmN0aW9uIEV2bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2Zvcih3cihlLCJDb21tZW50IHBvc3QtcHJvY2Vzc2luZyIsMSksbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLHI9bmV3IGxlLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCksdz11KFEoaCwoc2UoKSxONikpLDE1KSxuPXUoUShoLEw2KSwxNSksKHd8fG4pJiYoVDRuKGgsdyxuKSx3JiZBcyhyLHcpLG4mJkFzKHIsbikpO0FzKHMuYSxyKX1vcihlKX1mdW5jdGlvbiBaY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iobj1uZXcgUDMsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLHc9ITAscj0wLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOylzd2l0Y2goaD11KEooZCksMTApLGguay5nKXtjYXNlIDQ6KytyO2Nhc2UgMTpRd3QobixoKTticmVhaztjYXNlIDA6RWduKGgsZSk7ZGVmYXVsdDpuLmI9PW4uY3x8enVlKG4scix3LCExLGUpLHc9ITEscj0wfW4uYj09bi5jfHx6dWUobixyLHcsITAsZSl9fWZ1bmN0aW9uIFR2bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPW5ldyBsZSxuPTA7bjw9dC5pO24rKylyPW5ldyBDaChlKSxyLnA9dC5pLW4scy5jW3MuYy5sZW5ndGhdPXI7Zm9yKGQ9bmV3IFModC5vKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCksa28oaCx1KEZlKHMsdC5pLXQuZltoLnBdKSwyOSkpO2ZvcihvPW5ldyBTKHMpO28uYTxvLmMuYy5sZW5ndGg7KXc9dShKKG8pLDI5KSx3LmEuYy5sZW5ndGg9PTAmJl9DKG8pO2UuYi5jPVB0KFhuLEllLDEsMCw1LDEpLEFzKGUuYixzKX1mdW5jdGlvbiBONXQodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKG49MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KXtmb3IoaD11KEooZCksMTEpLEJ5dCh0LmIsdC5kW2gucF0pLHM9bmV3IFMxKGguYik7Vm8ocy5hKXx8Vm8ocy5iKTspcj11KFZvKHMuYSk/SihzLmEpOkoocy5iKSwxNyksbz11YnQodCxoPT1yLmM/ci5kOnIuYyksbz50LmRbaC5wXSYmKG4rPXNtdCh0LmIsbykscXAodC5hLGRlKG8pKSk7Zm9yKDshTjkodC5hKTspRm10KHQuYix1KEZ4KHQuYSksMTkpLmEpfXJldHVybiBufWZ1bmN0aW9uIEpjZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89KCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpLmkscz1uZXcgZXIoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMzMpLCghci5hJiYoci5hPW5ldyBoZShucyxyLDEwLDExKSksci5hKS5pPT0wfHwobys9SmNlKHQsciwhMSkpO2lmKG4pZm9yKGg9dHMoZSk7aDspbys9KCFoLmEmJihoLmE9bmV3IGhlKG5zLGgsMTAsMTEpKSxoLmEpLmksaD10cyhoKTtyZXR1cm4gb31mdW5jdGlvbiBkeSh0LGUpe3ZhciBuLHIscyxvO3JldHVybiB0LmVqKCk/KHI9bnVsbCxzPXQuZmooKSx0LmlqKCkmJihyPXQua2oodC5waShlKSxudWxsKSksbj10LlppKDQsbz1yNih0LGUpLG51bGwsZSxzKSx0LmJqKCkmJm8hPW51bGwmJihyPXQuZGoobyxyKSkscj8oci5FaShuKSxyLkZpKCkpOnQuJGkobiksbyk6KG89cjYodCxlKSx0LmJqKCkmJm8hPW51bGwmJihyPXQuZGoobyxudWxsKSxyJiZyLkZpKCkpLG8pfWZ1bmN0aW9uIEN2bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQztmb3Ioaz10LmEsZT1uZXcgcXMsdz0wLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShKKHIpLDIyMiksQz0wLGU0KG4uYixuZXcgTGwpLGg9ZWkobi5iLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSwyMjIpLGUuYS5fYihvKSYmKHM9bi5jLGQ9by5jLEM8ZC5kK2QuYStrJiZDK3MuYStrPmQuZCYmKEM9ZC5kK2QuYStrKSk7bi5jLmQ9QyxlLmEuemMobixlKSx3PWIuTWF0aC5tYXgodyxuLmMuZCtuLmMuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gb28oKXtvbz1aLFJHPW5ldyBEbSgiQ09NTUVOVFMiLDApLGJoPW5ldyBEbSgiRVhURVJOQUxfUE9SVFMiLDEpLHZTPW5ldyBEbSgiSFlQRVJFREdFUyIsMiksakc9bmV3IERtKCJIWVBFUk5PREVTIiwzKSxmNz1uZXcgRG0oIk5PTl9GUkVFX1BPUlRTIiw0KSxWND1uZXcgRG0oIk5PUlRIX1NPVVRIX1BPUlRTIiw1KSx3Uz1uZXcgRG0oZDFlLDYpLGw3PW5ldyBEbSgiQ0VOVEVSX0xBQkVMUyIsNyksaDc9bmV3IERtKCJFTkRfTEFCRUxTIiw4KSwkRz1uZXcgRG0oIlBBUlRJVElPTlMiLDkpfWZ1bmN0aW9uIGd5KHQpe3ZhciBlLG4scixzLG87Zm9yKHM9bmV3IGxlLGU9bmV3IHlDKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSkscj1uZXcgYXIobHIoRzAodCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSw3OSksRXQoU3QoKCFuLmImJihuLmI9bmV3IENuKGJyLG4sNCw3KSksbi5iKSwwKSwxODYpfHwobz1Nbyh1KFN0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSxlLmEuX2Iobyl8fChzLmNbcy5jLmxlbmd0aF09bykpO3JldHVybiBzfWZ1bmN0aW9uIF92bih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG89bmV3IHFzLGU9bmV3IHlDKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSkscz1uZXcgYXIobHIoRzAodCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSw3OSksRXQoU3QoKCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksci5iKSwwKSwxODYpfHwoaD1Nbyh1KFN0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSxlLmEuX2IoaCl8fChuPW8uYS56YyhoLG8pLG49PW51bGwpKTtyZXR1cm4gb31mdW5jdGlvbiBTdm4odCxlLG4scixzKXtyZXR1cm4gcjwwPyhyPXA0KHQscyxjdChvdChBZSwxKSx0ZSwyLDYsWyRhdCx6YXQscWF0LEhhdCxsNixHYXQsVmF0LFVhdCxXYXQsS2F0LFlhdCxYYXRdKSxlKSxyPDAmJihyPXA0KHQscyxjdChvdChBZSwxKSx0ZSwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLGw2LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSksZSkpLHI8MD8hMToobi5rPXIsITApKTpyPjA/KG4uaz1yLTEsITApOiExfWZ1bmN0aW9uIEF2bih0LGUsbixyLHMpe3JldHVybiByPDA/KHI9cDQodCxzLGN0KG90KEFlLDEpLHRlLDIsNixbJGF0LHphdCxxYXQsSGF0LGw2LEdhdCxWYXQsVWF0LFdhdCxLYXQsWWF0LFhhdF0pLGUpLHI8MCYmKHI9cDQodCxzLGN0KG90KEFlLDEpLHRlLDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsbDYsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKSxlKSkscjwwPyExOihuLms9ciwhMCkpOnI+MD8obi5rPXItMSwhMCk6ITF9ZnVuY3Rpb24gTHZuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsaztpZihkPTMyLHI8MCl7aWYoZVswXT49dC5sZW5ndGh8fChkPWJhKHQsZVswXSksZCE9NDMmJmQhPTQ1KXx8KCsrZVswXSxyPXJxKHQsZSkscjwwKSlyZXR1cm4hMTtkPT00NSYmKHI9LXIpfXJldHVybiBkPT0zMiYmZVswXS1uPT0yJiZzLmI9PTImJih3PW5ldyBfUixrPXcucS5nZXRGdWxsWWVhcigpLW5iK25iLTgwLGg9ayUxMDAsby5hPXI9PWgscis9KGsvMTAwfDApKjEwMCsocjxoPzEwMDowKSksby5wPXIsITB9ZnVuY3Rpb24gdHVlKHQsZSl7dmFyIG4scixzLG8saDt0cyh0KSYmKGg9dShRKGUsKFRlKCksRjIpKSwxNzQpLEd0KHFlKHQsb3MpKT09PUd0KChvYSgpLHliKSkmJmJvKHQsb3MsSDEpLHI9KEltKCksbmV3IFNtKHRzKHQpKSksbz1uZXcgcm50KHRzKHQpP25ldyBTbSh0cyh0KSk6bnVsbCx0KSxzPWxoZShyLG8sITEsITApLHBmKGgsKF9sKCksWHkpKSxuPXUoUShlLHA3KSw4KSxuLmE9Yi5NYXRoLm1heChzLmEsbi5hKSxuLmI9Yi5NYXRoLm1heChzLmIsbi5iKSl9ZnVuY3Rpb24gTXZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKGg9dShRKHQsKHNlKCksTmx0KSksMTUpLktjKCk7aC5PYigpOyl7c3dpdGNoKG89dShoLlBiKCksMTApLHUoUShvLChUZSgpLGN1KSksMTYzKS5nKXtjYXNlIDI6a28obyxlKTticmVhaztjYXNlIDQ6a28obyxuKX1mb3Iocz1uZXcgYXIobHIoejAobykuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksIShyLmMmJnIuZCkmJihkPSFyLmQsdz11KFEocixuOXQpLDExKSxkP3NhKHIsdyk6RGEocix3KSl9fWZ1bmN0aW9uIGZxKCl7ZnE9WixsbHQ9bmV3IFJ4KFJxLDAsKGJlKCksTm4pLE5uKSxkbHQ9bmV3IFJ4KGtvdCwxLG1yLG1yKSx1bHQ9bmV3IFJ4KHhvdCwyLEhuLEhuKSxibHQ9bmV3IFJ4KEVvdCwzLEJuLEJuKSxmbHQ9bmV3IFJ4KCJOT1JUSF9XRVNUX0NPUk5FUiIsNCxCbixObiksaGx0PW5ldyBSeCgiTk9SVEhfRUFTVF9DT1JORVIiLDUsTm4sSG4pLHBsdD1uZXcgUngoIlNPVVRIX1dFU1RfQ09STkVSIiw2LG1yLEJuKSxnbHQ9bmV3IFJ4KCJTT1VUSF9FQVNUX0NPUk5FUiIsNyxIbixtcil9ZnVuY3Rpb24geTQoKXt5ND1aLHlTdD1jdChvdChMYiwxKSxhb3QsMjUsMTQsWzEsMSwyLDYsMjQsMTIwLDcyMCw1MDQwLDQwMzIwLDM2Mjg4MCwzNjI4ODAwLDM5OTE2ODAwLDQ3OTAwMTYwMCw2MjI3MDIwODAwLDg3MTc4MjkxMjAwLDEzMDc2NzQzNjhlMyx7bDozNTA2MTc2LG06Nzk0MDc3LGg6MX0se2w6ODg0NzM2LG06OTE2NDExLGg6MjB9LHtsOjMzNDIzMzYsbTozOTEyNDg5LGg6MzYzfSx7bDo1ODk4MjQsbTozMDM0MTM4LGg6NjkxNH0se2w6MzQwNzg3MixtOjE5NjI1MDYsaDoxMzgyOTR9XSksYi5NYXRoLnBvdygyLC02NSl9ZnVuY3Rpb24gZXVlKHQsZSl7dmFyIG4scixzLG8saDtpZih0LmMubGVuZ3RoPT0wKXJldHVybiBuZXcgbGEoZGUoMCksZGUoMCkpO2ZvcihuPShBbigwLHQuYy5sZW5ndGgpLHUodC5jWzBdLDExKSkuaixoPTAsbz1lLmcscj1lLmcrMTtoPHQuYy5sZW5ndGgtMSYmbi5nPG87KSsraCxuPShBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDExKSkuajtmb3Iocz1oO3M8dC5jLmxlbmd0aC0xJiZuLmc8cjspKytzLG49KEFuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMTEpKS5qO3JldHVybiBuZXcgbGEoZGUoaCksZGUocykpfWZ1bmN0aW9uIEl2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKG89ZS5jLmxlbmd0aCxoPShBbihuLGUuYy5sZW5ndGgpLHUoZS5jW25dLDI4NikpLGQ9aC5hLm8uYSxNPWguYyxGPTAsaz1oLmM7azw9aC5mO2srKyl7aWYoZDw9dC5hW2tdKXJldHVybiBrO2ZvcihDPXQuYVtrXSx3PW51bGwscz1uKzE7czxvO3MrKylyPShBbihzLGUuYy5sZW5ndGgpLHUoZS5jW3NdLDI4NikpLHIuYzw9ayYmci5mPj1rJiYodz1yKTt3JiYoQz1iLk1hdGgubWF4KEMsdy5hLm8uYSkpLEM+RiYmKE09ayxGPUMpfXJldHVybiBNfWZ1bmN0aW9uIER2bih0LGUsbil7dmFyIHIscyxvO2lmKHQuZT1uLHQuZD0wLHQuYj0wLHQuZj0xLHQuaT1lLCh0LmUmMTYpPT0xNiYmKHQuaT13d24odC5pKSksdC5qPXQuaS5sZW5ndGgsZmkodCksbz1zdyh0KSx0LmQhPXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUGRlKSkpKTtpZih0Lmcpe2ZvcihyPTA7cjx0LmcuYS5jLmxlbmd0aDtyKyspaWYocz11KFJ2KHQuZyxyKSw1ODQpLHQuZjw9cy5hKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxGZGUpKSkpO3QuZy5hLmM9UHQoWG4sSWUsMSwwLDUsMSl9cmV0dXJuIG99ZnVuY3Rpb24gT3ZuKHQsZSl7dmFyIG4scixzO2lmKGU9PW51bGwpe2ZvcihyPSghdC5hJiYodC5hPW5ldyBoZShlZyx0LDksNSkpLG5ldyBlcih0LmEpKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNjc4KSxzPW4uYywocz8/bi56Yik9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iocj0oIXQuYSYmKHQuYT1uZXcgaGUoZWcsdCw5LDUpKSxuZXcgZXIodC5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDY3OCksaG4oZSwocz1uLmMscz8/bi56YikpKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIEpzdCh0LGUpe3ZhciBuO3N3aXRjaChuPW51bGwsZS5nKXtjYXNlIDE6dC5lLlhlKChjaSgpLG9mdCkpJiYobj11KHQuZS5XZShvZnQpLDI0OSkpO2JyZWFrO2Nhc2UgMzp0LmUuWGUoKGNpKCksY2Z0KSkmJihuPXUodC5lLldlKGNmdCksMjQ5KSk7YnJlYWs7Y2FzZSAyOnQuZS5YZSgoY2koKSxhZnQpKSYmKG49dSh0LmUuV2UoYWZ0KSwyNDkpKTticmVhaztjYXNlIDQ6dC5lLlhlKChjaSgpLHVmdCkpJiYobj11KHQuZS5XZSh1ZnQpLDI0OSkpfXJldHVybiFuJiYobj11KHQuZS5XZSgoY2koKSxRU3QpKSwyNDkpKSxufWZ1bmN0aW9uIG51ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNO2ZvcihlLnA9MSxvPWUuYyxNPWl3KGUsKHNvKCksZXUpKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLHM9bmV3IFMoQy5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksaz1yLmQuaSxlIT1rJiYoaD1rLmMsaC5wPD1vLnAmJihkPW8ucCsxLGQ9PW4uYi5jLmxlbmd0aD8odz1uZXcgQ2gobiksdy5wPWQsdWUobi5iLHcpLGtvKGssdykpOih3PXUoRmUobi5iLGQpLDI5KSxrbyhrLHcpKSxudWUodCxrLG4pKSl9ZnVuY3Rpb24gcnVlKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKHM9bixvPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwzMyksYm8oaCwoYXkoKSxfViksZGUocysrKSksdz1neShoKSxyPWIuTWF0aC5hdGFuMihoLmoraC5mLzIsaC5pK2guZy8yKSxyKz1yPDA/STQ6MCxyPC43ODUzOTgxNjMzOTc0NDgzfHxyPkYxZT9Ycyh3LHQuYik6cjw9RjFlJiZyPkIxZT9Ycyh3LHQuZCk6cjw9QjFlJiZyPlIxZT9Ycyh3LHQuYyk6cjw9UjFlJiZYcyh3LHQuYSksbz1ydWUodCx3LG8pO3JldHVybiBzfWZ1bmN0aW9uIEpwKCl7SnA9Wjt2YXIgdDtmb3IoR0g9bmV3IExnKDEsMSksU3V0PW5ldyBMZygxLDEwKSxRRT1uZXcgTGcoMCwwKSxfdXQ9bmV3IExnKC0xLDEpLHdFdD1jdChvdChCNCwxKSx0ZSw5MSwwLFtRRSxHSCxuZXcgTGcoMSwyKSxuZXcgTGcoMSwzKSxuZXcgTGcoMSw0KSxuZXcgTGcoMSw1KSxuZXcgTGcoMSw2KSxuZXcgTGcoMSw3KSxuZXcgTGcoMSw4KSxuZXcgTGcoMSw5KSxTdXRdKSxWSD1QdChCNCx0ZSw5MSwzMiwwLDEpLHQ9MDt0PFZILmxlbmd0aDt0KyspVkhbdF09S0koTTAoMSx0KSl9ZnVuY3Rpb24gTnZuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsaztmb3IoZD0hajkoUmkodC5PYygpLG5ldyBadChuZXcgUFkpKSkuc2QoKFdiKCksSkUpKSxoPXQsbz09KGFvKCksWjApJiYoaD1FdChoLDE1Mik/VngodShoLDE1MikpOkV0KGgsMTMxKT91KGgsMTMxKS5hOkV0KGgsNTQpP25ldyBtdihoKTpuZXcgTW0oaCkpLGs9aC5LYygpO2suT2IoKTspdz11KGsuUGIoKSw3MCksdy5uLmE9ZS5hLGQ/dy5uLmI9ZS5iKyhyLmItdy5vLmIpLzI6cz93Lm4uYj1lLmI6dy5uLmI9ZS5iK3IuYi13Lm8uYixlLmErPXcuby5hK259ZnVuY3Rpb24gaXVlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3Iocz0oci5jK3IuYSkvMixfaChlLmopLG5pKGUuaixzKSxfaChuLmUpLG5pKG4uZSxzKSxrPW5ldyB1SHQsZD1uZXcgUyh0LmYpO2QuYTxkLmMuYy5sZW5ndGg7KW89dShKKGQpLDEyOSksdz1vLmEsRXN0KGssZSx3KSxFc3QoayxuLHcpO2ZvcihoPW5ldyBTKHQuayk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTI5KSx3PW8uYixFc3QoayxlLHcpLEVzdChrLG4sdyk7cmV0dXJuIGsuYis9MixrLmErPVJYdChlLHQucSksay5hKz1SWHQodC5xLG4pLGt9ZnVuY3Rpb24gc3VlKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKCFTOChlKSl7Zm9yKGQ9UmMobiwoRXQoZSwxNCk/dShlLDE0KS5nYygpOk4wKGUuS2MoKSkpL3QuYXwwKSx3cihkLE0xZSwxKSxoPW5ldyAkRixvPW51bGwscz1lLktjKCk7cy5PYigpOylyPXUocy5QYigpLDg2KSxoPUwxKGN0KG90KEIxLDEpLEllLDIwLDAsW2gsbmV3IENwKHIpXSkpLG8mJihKdChvLChmYygpLEptZSksciksSnQocixTaHQsbyksenJ0KHIpPT16cnQobykmJihKdChvLEFodCxyKSxKdChyLHlWLG8pKSksbz1yO29yKGQpLHN1ZSh0LGgsbil9fWZ1bmN0aW9uIGF1ZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj10LmksZT10Lm4sZD1uLmQsdC5mPT0od3UoKSx1Yik/ZCs9KG4uYS10LmUuYikvMjp0LmY9PXlmJiYoZCs9bi5hLXQuZS5iKSxzPW5ldyBTKHQuZCk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxODEpLGg9ci5yZigpLG89bmV3IFRhLG8uYj1kLGQrPWguYit0LmEsdC5iLmcpe2Nhc2UgMDpvLmE9bi5jK2UuYjticmVhaztjYXNlIDE6by5hPW4uYytlLmIrKG4uYi1oLmEpLzI7YnJlYWs7Y2FzZSAyOm8uYT1uLmMrbi5iLWUuYy1oLmF9ci50ZihvKX19ZnVuY3Rpb24gb3VlKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihuPXQuaSxlPXQubixkPW4uYyx0LmI9PShYdSgpLGNiKT9kKz0obi5iLXQuZS5hKS8yOnQuYj09bWYmJihkKz1uLmItdC5lLmEpLHM9bmV3IFModC5kKTtzLmE8cy5jLmMubGVuZ3RoOyl7c3dpdGNoKHI9dShKKHMpLDE4MSksaD1yLnJmKCksbz1uZXcgVGEsby5hPWQsZCs9aC5hK3QuYSx0LmYuZyl7Y2FzZSAwOm8uYj1uLmQrZS5kO2JyZWFrO2Nhc2UgMTpvLmI9bi5kK2UuZCsobi5hLWguYikvMjticmVhaztjYXNlIDI6by5iPW4uZCtuLmEtZS5hLWguYn1yLnRmKG8pfX1mdW5jdGlvbiBQdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtDPW4uYS5jLGg9bi5hLmMrbi5hLmIsbz11KEpuKG4uYyxlKSw0NTkpLEg9by5mLFY9by5hLHc9bmV3ICRlKEMsSCksTT1uZXcgJGUoaCxWKSxzPUMsbi5wfHwocys9dC5jKSxzKz1uLkYrbi52KnQuYixrPW5ldyAkZShzLEgpLEY9bmV3ICRlKHMsViksekMoZS5hLGN0KG90KFVzLDEpLHRlLDgsMCxbdyxrXSkpLGQ9bi5kLmEuZ2MoKT4xLGQmJihyPW5ldyAkZShzLG4uYiksbmkoZS5hLHIpKSx6QyhlLmEsY3Qob3QoVXMsMSksdGUsOCwwLFtGLE1dKSl9ZnVuY3Rpb24gY3VlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyx2SCksIkVMSyBSYW5kb21pemVyIiksJ0Rpc3RyaWJ1dGVzIHRoZSBub2RlcyByYW5kb21seSBvbiB0aGUgcGxhbmUsIGxlYWRpbmcgdG8gdmVyeSBvYmZ1c2NhdGluZyBsYXlvdXRzLiBDYW4gYmUgdXNlZnVsIHRvIGRlbW9uc3RyYXRlIHRoZSBwb3dlciBvZiAicmVhbCIgbGF5b3V0IGFsZ29yaXRobXMuJyksbmV3IHpaKSkpLHhlKHQsdkgsd3csQUF0KSx4ZSh0LHZILGt5LDE1KSx4ZSh0LHZILEhxLGRlKDApKSx4ZSh0LHZILGI2LEJFKX1mdW5jdGlvbiBQNXQoKXtQNXQ9Wjt2YXIgdCxlLG4scixzLG87Zm9yKGxBPVB0KEh1LE40LDI1LDI1NSwxNSwxKSx1VT1QdChtaCx2ZCwyNSwxNiwxNSwxKSxlPTA7ZTwyNTU7ZSsrKWxBW2VdPS0xO2ZvcihuPTU3O24+PTQ4O24tLSlsQVtuXT1uLTQ4PDwyND4+MjQ7Zm9yKHI9NzA7cj49NjU7ci0tKWxBW3JdPXItNjUrMTA8PDI0Pj4yNDtmb3Iocz0xMDI7cz49OTc7cy0tKWxBW3NdPXMtOTcrMTA8PDI0Pj4yNDtmb3Iobz0wO288MTA7bysrKXVVW29dPTQ4K28mbXM7Zm9yKHQ9MTA7dDw9MTU7dCsrKXVVW3RdPTY1K3QtMTAmbXN9ZnVuY3Rpb24gZHEodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7cmV0dXJuIGQ9ZS5pLXQuZy8yLHc9bi5pLXQuZy8yLGs9ZS5qLXQuZy8yLEM9bi5qLXQuZy8yLG89ZS5nK3QuZy8yLGg9bi5nK3QuZy8yLHI9ZS5mK3QuZy8yLHM9bi5mK3QuZy8yLGQ8dytoJiZ3PGQmJms8QytzJiZDPGt8fHc8ZCtvJiZkPHcmJkM8aytyJiZrPEN8fGQ8dytoJiZ3PGQmJms8QyYmQzxrK3I/ITA6dzxkK28mJmQ8dyYmazxDK3MmJkM8a31mdW5jdGlvbiBGdm4odCl7dmFyIGUsbixyLHMsbztzPXUoUSh0LChUZSgpLEYyKSksMjEpLG89dShRKHQsaVYpLDIxKSxuPW5ldyAkZSh0LmYuYSt0LmQuYit0LmQuYyx0LmYuYit0LmQuZCt0LmQuYSksZT1uZXcgeW8obikscy5IYygoX2woKSxYeSkpJiYocj11KFEodCxwNyksOCksby5IYygoY2woKSxNNykpJiYoci5hPD0wJiYoci5hPTIwKSxyLmI8PTAmJihyLmI9MjApKSxlLmE9Yi5NYXRoLm1heChuLmEsci5hKSxlLmI9Yi5NYXRoLm1heChuLmIsci5iKSksamUoUmUoUSh0LFpsdCkpKXx8c3luKHQsbixlKX1mdW5jdGlvbiBCdm4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1ZbyhlLChiZSgpLG1yKSkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTEpLG49dShRKHIsKHNlKCksWnUpKSwxMCksbiYmdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLC4xKSx0LmlbZS5wXS5kKSx0Lmlbbi5wXS5hKSk7Zm9yKHM9WW8oZSxObikuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLG49dShRKHIsKHNlKCksWnUpKSwxMCksbiYmdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLC4xKSx0Lmlbbi5wXS5kKSx0LmlbZS5wXS5hKSl9ZnVuY3Rpb24gdGF0KHQpe3ZhciBlLG4scixzLG8saDtpZighdC5jKXtpZihoPW5ldyBueCxlPWFBLG89ZS5hLnpjKHQsZSksbz09bnVsbCl7Zm9yKHI9bmV3IGVyKExjKHQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksODcpLHM9d3EobiksRXQocyw4OCkmJnJzKGgsdGF0KHUocywyNikpKSxNcihoLG4pO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1SbG4oaCksZXkoaCksdC5jPW5ldyBxMygodShTdChXdCgoanAoKSxMbikubyksMTUpLDE4KSxoLmkpLGguZykscmwodCkuYiY9LTMzfXJldHVybiB0LmN9ZnVuY3Rpb24gRjV0KHQpe3ZhciBlO2lmKHQuYyE9MTApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGtIKSkpKTtzd2l0Y2goZT10LmEsZSl7Y2FzZSAxMTA6ZT0xMDticmVhaztjYXNlIDExNDplPTEzO2JyZWFrO2Nhc2UgMTE2OmU9OTticmVhaztjYXNlIDkyOmNhc2UgMTI0OmNhc2UgNDY6Y2FzZSA5NDpjYXNlIDQ1OmNhc2UgNjM6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDkxOmNhc2UgOTM6YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfXJldHVybiBlfWZ1bmN0aW9uIHV1ZSh0KXt2YXIgZSxuLHIscyxvO2lmKHQubD09MCYmdC5tPT0wJiZ0Lmg9PTApcmV0dXJuIjAiO2lmKHQuaD09SUQmJnQubT09MCYmdC5sPT0wKXJldHVybiItOTIyMzM3MjAzNjg1NDc3NTgwOCI7aWYodC5oPj4xOSlyZXR1cm4iLSIrdXVlKFk4KHQpKTtmb3Iobj10LHI9IiI7IShuLmw9PTAmJm4ubT09MCYmbi5oPT0wKTspe2lmKHM9T3J0KE5xKSxuPWR4dChuLHMsITApLGU9IiIreEh0KG9iKSwhKG4ubD09MCYmbi5tPT0wJiZuLmg9PTApKWZvcihvPTktZS5sZW5ndGg7bz4wO28tLSllPSIwIitlO3I9ZStyfXJldHVybiByfWZ1bmN0aW9uIFJ2bigpe2lmKCFPYmplY3QuY3JlYXRlfHwhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuITE7dmFyIHQ9Il9fcHJvdG9fXyIsZT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGVbdF0hPT12b2lkIDApcmV0dXJuITE7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7cmV0dXJuIShuLmxlbmd0aCE9MHx8KGVbdF09NDIsZVt0XSE9PTQyKXx8T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubGVuZ3RoPT0wKX1mdW5jdGlvbiBqdm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9ITEsbj0wLHM9bmV3IFModC5kLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksci5wPW4rKyxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLCFlJiYhUzgoejAobykpJiYoZT0hMCk7ZD1qaSgoYW8oKSxjMCksY3Qob3QoV1MsMSksYWUsMTAzLDAsW2poLGtmXSkpLGV8fChwZihkLFowKSxwZihkLFEwKSksdC5hPW5ldyB1ZWUoZCksWXUodC5mKSxZdSh0LmIpLFl1KHQuZSksWXUodC5nKX1mdW5jdGlvbiAkdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtmb3Iocj1uLmMscz1uLmQsZD1UMShlLmMpLHc9VDEoZS5kKSxyPT1lLmM/KGQ9azV0KHQsZCxzKSx3PWJhZShlLmQpKTooZD1iYWUoZS5jKSx3PWs1dCh0LHcscykpLGs9bmV3IHlSKGUuYSksaHMoayxkLGsuYSxrLmEuYSksaHMoayx3LGsuYy5iLGsuYyksaD1lLmM9PXIsTT1uZXcgdHF0LG89MDtvPGsuYi0xOysrbylDPW5ldyBsYSh1KFFmKGssbyksOCksdShRZihrLG8rMSksOCkpLGgmJm89PTB8fCFoJiZvPT1rLmItMj9NLmI9Qzp1ZShNLmEsQyk7cmV0dXJuIE19ZnVuY3Rpb24genZuKHQsZSl7dmFyIG4scixzLG87aWYobz10LmouZy1lLmouZyxvIT0wKXJldHVybiBvO2lmKG49dShRKHQsKFRlKCksV2cpKSwxOSkscj11KFEoZSxXZyksMTkpLG4mJnImJihzPW4uYS1yLmEscyE9MCkpcmV0dXJuIHM7c3dpdGNoKHQuai5nKXtjYXNlIDE6cmV0dXJuIExzKHQubi5hLGUubi5hKTtjYXNlIDI6cmV0dXJuIExzKHQubi5iLGUubi5iKTtjYXNlIDM6cmV0dXJuIExzKGUubi5hLHQubi5hKTtjYXNlIDQ6cmV0dXJuIExzKGUubi5iLHQubi5iKTtkZWZhdWx0OnRocm93IHJ0KG5ldyBGbyhiNnQpKX19ZnVuY3Rpb24gQjV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYoTjAoKEdNKCksbmV3IGFyKGxyKHowKGUpLmEuS2MoKSxuZXcgeikpKSk+PXQuYXx8IWs0dChlLG4pKXJldHVybi0xO2lmKFM4KHUoci5LYihlKSwyMCkpKXJldHVybiAxO2ZvcihzPTAsaD11KHIuS2IoZSksMjApLktjKCk7aC5PYigpOylpZihvPXUoaC5QYigpLDE3KSx3PW8uYy5pPT1lP28uZC5pOm8uYy5pLGQ9QjV0KHQsdyxuLHIpLGQ9PS0xfHwocz1iLk1hdGgubWF4KHMsZCkscz50LmMtMSkpcmV0dXJuLTE7cmV0dXJuIHMrMX1mdW5jdGlvbiBsdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYoR3QoZSk9PT1HdCh0KSlyZXR1cm4hMDtpZighRXQoZSwxNSl8fChyPXUoZSwxNSksZD10LmdjKCksci5nYygpIT1kKSlyZXR1cm4hMTtpZihoPXIuS2MoKSx0Lm5pKCkpe2ZvcihuPTA7bjxkOysrbilpZihzPXQua2kobiksbz1oLlBiKCkscz09bnVsbD9vIT1udWxsOiF5aShzLG8pKXJldHVybiExfWVsc2UgZm9yKG49MDtuPGQ7KytuKWlmKHM9dC5raShuKSxvPWguUGIoKSxHdChzKSE9PUd0KG8pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGh1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZih0LmY+MCl7aWYodC5xaigpLGUhPW51bGwpe2ZvcihvPTA7bzx0LmQubGVuZ3RoOysrbylpZihuPXQuZFtvXSxuKXtmb3Iocj11KG4uZywzNjcpLGQ9bi5pLGg9MDtoPGQ7KytoKWlmKHM9cltoXSx5aShlLHMuZGQoKSkpcmV0dXJuITB9fWVsc2UgZm9yKG89MDtvPHQuZC5sZW5ndGg7KytvKWlmKG49dC5kW29dLG4pe2ZvcihyPXUobi5nLDM2NyksZD1uLmksaD0wO2g8ZDsrK2gpaWYocz1yW2hdLEd0KGUpPT09R3Qocy5kZCgpKSlyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gcXZuKHQsZSxuKXt2YXIgcixzLG8saDt3cihuLCJPcnRob2dvbmFsbHkgcm91dGluZyBoaWVyYXJjaGljYWwgcG9ydCBlZGdlcyIsMSksdC5hPTAscj1NeW4oZSksTjNuKGUscikscDNuKHQsZSxyKSxPNG4oZSkscz11KFEoZSwoVGUoKSxvcykpLDk4KSxvPWUuYixjaGUoKEFuKDAsby5jLmxlbmd0aCksdShvLmNbMF0sMjkpKSxzLGUpLGNoZSh1KEZlKG8sby5jLmxlbmd0aC0xKSwyOSkscyxlKSxoPWUuYix5bGUoKEFuKDAsaC5jLmxlbmd0aCksdShoLmNbMF0sMjkpKSkseWxlKHUoRmUoaCxoLmMubGVuZ3RoLTEpLDI5KSksb3Iobil9ZnVuY3Rpb24gUjV0KHQpe3N3aXRjaCh0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB0LTQ4PDwyND4+MjQ7Y2FzZSA5NzpjYXNlIDk4OmNhc2UgOTk6Y2FzZSAxMDA6Y2FzZSAxMDE6Y2FzZSAxMDI6cmV0dXJuIHQtOTcrMTA8PDI0Pj4yNDtjYXNlIDY1OmNhc2UgNjY6Y2FzZSA2NzpjYXNlIDY4OmNhc2UgNjk6Y2FzZSA3MDpyZXR1cm4gdC02NSsxMDw8MjQ+PjI0O2RlZmF1bHQ6dGhyb3cgcnQobmV3IG9kKCJJbnZhbGlkIGhleGFkZWNpbWFsIikpfX1mdW5jdGlvbiBIdm4odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih3cihuLCJQcm9jZXNzb3Igb3JkZXIgbm9kZXMiLDIpLHQuYT1YdCh5ZShRKGUsKGh3KCksb190KSkpKSxzPW5ldyBRaSxoPWVpKGUuYiwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksODYpLGplKFJlKFEobywoZmMoKSxXeSkpKSkmJmhzKHMsbyxzLmMuYixzLmMpO3I9KFFuKHMuYiE9MCksdShzLmEuYS5jLDg2KSksTWxlKHQsciksIW4uYiYmaWl0KG4sMSkscTV0KHQsciwwLVh0KHllKFEociwoZmMoKSx4VikpKSkvMiwwKSwhbi5iJiZpaXQobiwxKSxvcihuKX1mdW5jdGlvbiBncSgpe2dxPVosUUV0PW5ldyBqMygiU1BJUkFMIiwwKSxXRXQ9bmV3IGozKCJMSU5FX0JZX0xJTkUiLDEpLEtFdD1uZXcgajMoIk1BTkhBVFRBTiIsMiksVUV0PW5ldyBqMygiSklUVEVSIiwzKSxPdXQ9bmV3IGozKCJRVUFEUkFOVFNfTElORV9CWV9MSU5FIiw0KSxYRXQ9bmV3IGozKCJRVUFEUkFOVFNfTUFOSEFUVEFOIiw1KSxZRXQ9bmV3IGozKCJRVUFEUkFOVFNfSklUVEVSIiw2KSxWRXQ9bmV3IGozKCJDT01CSU5FX0xJTkVfQllfTElORV9NQU5IQVRUQU4iLDcpLEdFdD1uZXcgajMoIkNPTUJJTkVfSklUVEVSX01BTkhBVFRBTiIsOCl9ZnVuY3Rpb24gZnVlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3Iodz1rc3QodCxuKSxrPWtzdChlLG4pLHM9ITE7dyYmayYmKHJ8fGpmbih3LGssbikpOyloPWtzdCh3LG4pLGQ9a3N0KGssbiksdkkoZSksdkkodCksbz13LmMsX2F0KHcsITEpLF9hdChrLCExKSxuPyhveShlLGsucCxvKSxlLnA9ay5wLG95KHQsdy5wKzEsbyksdC5wPXcucCk6KG95KHQsdy5wLG8pLHQucD13LnAsb3koZSxrLnArMSxvKSxlLnA9ay5wKSxrbyh3LG51bGwpLGtvKGssbnVsbCksdz1oLGs9ZCxzPSEwO3JldHVybiBzfWZ1bmN0aW9uIEd2bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2ZvcihzPSExLG89ITEsZD1uZXcgUyhyLmopO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDExKSxHdChRKGgsKHNlKCksX2kpKSk9PT1HdChuKSYmKGguZy5jLmxlbmd0aD09MD9oLmUuYy5sZW5ndGg9PTB8fChzPSEwKTpvPSEwKTtyZXR1cm4gdz0wLHMmJnNebz93PW4uaj09KGJlKCksTm4pPy10LmVbci5jLnBdW3IucF06ZS10LmVbci5jLnBdW3IucF06byYmc15vP3c9dC5lW3IuYy5wXVtyLnBdKzE6cyYmbyYmKHc9bi5qPT0oYmUoKSxObik/MDplLzIpLHd9ZnVuY3Rpb24gZWF0KHQsZSxuLHIscyxvLGgsZCl7dmFyIHcsayxDO2Zvcih3PTAsZSE9bnVsbCYmKHdePUJnKGUudG9Mb3dlckNhc2UoKSkpLG4hPW51bGwmJih3Xj1CZyhuKSksciE9bnVsbCYmKHdePUJnKHIpKSxoIT1udWxsJiYod149QmcoaCkpLGQhPW51bGwmJih3Xj1CZyhkKSksaz0wLEM9by5sZW5ndGg7azxDO2srKyl3Xj1CZyhvW2tdKTt0P3d8PTI1Njp3Jj0tMjU3LHM/d3w9MTY6dyY9LTE3LHRoaXMuZj13LHRoaXMuaT1lPT1udWxsP251bGw6KE9uKGUpLGUpLHRoaXMuYT1uLHRoaXMuZD1yLHRoaXMuaj1vLHRoaXMuZz1oLHRoaXMuZT1kfWZ1bmN0aW9uIGo1dCh0LGUsbil7dmFyIHIscztzd2l0Y2gocz1udWxsLGUuZyl7Y2FzZSAxOnM9KEJ1KCksRDd0KTticmVhaztjYXNlIDI6cz0oQnUoKSxON3QpfXN3aXRjaChyPW51bGwsbi5nKXtjYXNlIDE6cj0oQnUoKSxPN3QpO2JyZWFrO2Nhc2UgMjpyPShCdSgpLEk3dCk7YnJlYWs7Y2FzZSAzOnI9KEJ1KCksUDd0KTticmVhaztjYXNlIDQ6cj0oQnUoKSxGN3QpfXJldHVybiBzJiZyP094KHQuaixuZXcgYjkobmV3IHdsKGN0KG90KFk1biwxKSxJZSwxNjksMCxbdShBcihzKSwxNjkpLHUoQXIociksMTY5KV0pKSkpOih2bigpLHZuKCksaW8pfWZ1bmN0aW9uIFZ2bih0KXt2YXIgZSxuLHI7c3dpdGNoKGU9dShRKHQsKFRlKCkscDcpKSw4KSxKdCh0LHA3LG5ldyAkZShlLmIsZS5hKSksdShRKHQsTGQpLDI0OCkuZyl7Y2FzZSAxOkp0KHQsTGQsKFFkKCksRlYpKTticmVhaztjYXNlIDI6SnQodCxMZCwoUWQoKSxOVikpO2JyZWFrO2Nhc2UgMzpKdCh0LExkLChRZCgpLCRPKSk7YnJlYWs7Y2FzZSA0Okp0KHQsTGQsKFFkKCksek8pKX0odC5xP3QucToodm4oKSx2bigpLGEwKSkuX2IoSHkpJiYobj11KFEodCxIeSksOCkscj1uLmEsbi5hPW4uYixuLmI9cil9ZnVuY3Rpb24gZHVlKHQsZSxuLHIscyxvKXtpZih0aGlzLmI9bix0aGlzLmQ9cyx0Pj1lLmxlbmd0aCl0aHJvdyBydChuZXcgbW8oIkdyZWVkeSBTd2l0Y2hEZWNpZGVyOiBGcmVlIGxheWVyIG5vdCBpbiBncmFwaC4iKSk7dGhpcy5jPWVbdF0sdGhpcy5lPW5ldyBITShyKSxjaXQodGhpcy5lLHRoaXMuYywoYmUoKSxCbikpLHRoaXMuaT1uZXcgSE0ociksY2l0KHRoaXMuaSx0aGlzLmMsSG4pLHRoaXMuZj1uZXcgbFl0KHRoaXMuYyksdGhpcy5hPSFvJiZzLmkmJiFzLnMmJnRoaXMuY1swXS5rPT0oR24oKSx4cyksdGhpcy5hJiZvZ24odGhpcyx0LGUubGVuZ3RoKX1mdW5jdGlvbiBndWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7bz0hdC5CLkhjKChjbCgpLHJOKSksaD10LkIuSGModmZ0KSx0LmE9bmV3IHVpZShoLG8sdC5jKSx0Lm4mJlN3dCh0LmEubix0Lm4pLEp0dCh0LmcsKEtmKCksdHUpLHQuYSksZXx8KHI9bmV3IHJfKDEsbyx0LmMpLHIubi5hPXQuayxOeCh0LnAsKGJlKCksTm4pLHIpLHM9bmV3IHJfKDEsbyx0LmMpLHMubi5kPXQuayxOeCh0LnAsbXIscyksZD1uZXcgcl8oMCxvLHQuYyksZC5uLmM9dC5rLE54KHQucCxCbixkKSxuPW5ldyByXygwLG8sdC5jKSxuLm4uYj10LmssTngodC5wLEhuLG4pKX1mdW5jdGlvbiBVdm4odCl7dmFyIGUsbixyO3N3aXRjaChlPXUoUSh0LmQsKFRlKCksWDApKSwyMTgpLGUuZyl7Y2FzZSAyOm49azVuKHQpO2JyZWFrO2Nhc2UgMzpuPShyPW5ldyBsZSx1cyhSaShwdShXbyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5kLmIsMTYpKSxuZXcgQ1gpLG5ldyBfWCksbmV3ICRUKSxuZXcgcFgpLG5ldyBQdHQocikpLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgcnQobmV3IEZvKCJDb21wYWN0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yICIrZSsiIGVkZ2VzLiIpKX1HeW4odCxuKSx2YShuZXcgVG0odC5nKSxuZXcgT3R0KHQpKX1mdW5jdGlvbiBXdm4odCxlKXt2YXIgbjtyZXR1cm4gbj1uZXcgeGEsZSYmTG8obix1KEpuKHQuYSxzTiksOTQpKSxFdChlLDQ3MCkmJkxvKG4sdShKbih0LmEsYU4pLDk0KSksRXQoZSwzNTQpPyhMbyhuLHUoSm4odC5hLHFvKSw5NCkpLG4pOihFdChlLDgyKSYmTG8obix1KEpuKHQuYSxiciksOTQpKSxFdChlLDIzOSk/KExvKG4sdShKbih0LmEsbnMpLDk0KSksbik6RXQoZSwxODYpPyhMbyhuLHUoSm4odC5hLGZsKSw5NCkpLG4pOihFdChlLDM1MikmJkxvKG4sdShKbih0LmEsV3MpLDk0KSksbikpfWZ1bmN0aW9uIFpmKCl7WmY9Wix0Nz1uZXcgZW8oKGNpKCkselYpLGRlKDEpKSxzRz1uZXcgZW8oSDIsODApLHNiZT1uZXcgZW8oc0F0LDUpLFhwZT1uZXcgZW8oJDYsQkUpLHJiZT1uZXcgZW8oZmZ0LGRlKDEpKSxpYmU9bmV3IGVvKGRmdCwoRm4oKSwhMCkpLGc3dD1uZXcgTXYoNTApLGViZT1uZXcgZW8ocTIsZzd0KSxoN3Q9UlYscDd0PVVTLFFwZT1uZXcgZW8ocmZ0LCExKSxkN3Q9WU8sdGJlPXZiLEpwZT16MixacGU9czUsbmJlPUt5LGY3dD0oUDR0KCksSHBlKSxWdXQ9V3BlLGlHPXFwZSxHdXQ9R3BlLGI3dD1VcGV9ZnVuY3Rpb24gS3ZuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHc9bmV3IGJKdCxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTApLGguayE9KEduKCkseHMpKXtmb3IoS3BuKHcsaCxuZXcgVGEpLG89bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylpZihzPXUoTHIobyksMTcpLCEocy5jLmkuaz09eHN8fHMuZC5pLms9PXhzKSlmb3Iocj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLGU9bixsXyh3LG5ldyBhOChlLmEsZS5iKSl9cmV0dXJuIHd9ZnVuY3Rpb24gbmF0KCl7bmF0PVosbFN0PW5ldyBHaShfY3QpLHVTdD0oSDkoKSxqTyksY1N0PW5ldyBtbihMY3QsdVN0KSxvU3Q9KE5JKCksT1YpLEUzZT1uZXcgbW4odDh0LG9TdCksYVN0PShpRCgpLFZodCksazNlPW5ldyBtbihlOHQsYVN0KSxtM2U9bmV3IG1uKFNjdCxudWxsKSxzU3Q9KGhJKCksSVYpLHgzZT1uZXcgbW4oQWN0LHNTdCksaVN0PShNUigpLHFodCkscDNlPW5ldyBtbihuOHQsaVN0KSxiM2U9bmV3IG1uKHI4dCwoRm4oKSwhMSkpLHYzZT1uZXcgbW4oaTh0LGRlKDY0KSksdzNlPW5ldyBtbihzOHQsITApLHkzZT1HaHR9ZnVuY3Rpb24gcHVlKHQpe3ZhciBlLG4scixzLG8saDtpZih0LmE9PW51bGwpaWYodC5hPVB0KGRsLGkwLDI1LHQuYy5iLmMubGVuZ3RoLDE2LDEpLHQuYVswXT0hMSxWcyh0LmMsKFRlKCksaWh0KSkpZm9yKHI9dShRKHQuYyxpaHQpLDE1KSxuPXIuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksMTkpLmEsZT4wJiZlPHQuYS5sZW5ndGgmJih0LmFbZV09ITEpO2Vsc2UgZm9yKGg9bmV3IFModC5jLmIpLGguYTxoLmMuYy5sZW5ndGgmJkooaCkscz0xO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDI5KSx0LmFbcysrXT1MYm4obyl9ZnVuY3Rpb24gYnVlKHQsZSl7dmFyIG4scixzLG87c3dpdGNoKHM9dC5iLGUpe2Nhc2UgMTp7dC5ifD0xLHQuYnw9NCx0LmJ8PTg7YnJlYWt9Y2FzZSAyOnt0LmJ8PTIsdC5ifD00LHQuYnw9ODticmVha31jYXNlIDQ6e3QuYnw9MSx0LmJ8PTIsdC5ifD00LHQuYnw9ODticmVha31jYXNlIDM6e3QuYnw9MTYsdC5ifD04O2JyZWFrfWNhc2UgMDp7dC5ifD0zMix0LmJ8PTE2LHQuYnw9OCx0LmJ8PTEsdC5ifD0yLHQuYnw9NDticmVha319aWYodC5iIT1zJiZ0LmMpZm9yKHI9bmV3IGVyKHQuYyk7ci5lIT1yLmkuZ2MoKTspbz11KGRyKHIpLDQ3Myksbj1ybChvKSxoeShuLGUpfWZ1bmN0aW9uIHZ1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihzPSExLGg9ZSxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKW89aFtkXSxqZSgoRm4oKSwhIW8uZSkpJiYhdShGZSh0LmIsby5lLnApLDIxNCkucyYmKHM9c3woaz1vLmUsQz11KEZlKHQuYixrLnApLDIxNCksTT1DLmUsRj1uSHQobixNLmxlbmd0aCksSD1NW0ZdWzBdLEguaz09KEduKCkseHMpP01bRl09TDJuKG8sTVtGXSxuPyhiZSgpLEJuKTooYmUoKSxIbikpOkMuYy5UZihNLG4pLFY9cEQodCxDLG4sciksRDV0KEMuZSxDLm8sbiksVikpO3JldHVybiBzfWZ1bmN0aW9uIHd1ZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89KCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpLmkscz1uZXcgZXIoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMzMpLEd0KHFlKHIsKGNpKCkscjUpKSkhPT1HdCgoJDAoKSxZUykpJiYoaD11KHFlKGUsQzcpLDE0OSksbj11KHFlKHIsQzcpLDE0OSksKGg9PW58fGgmJm9tdChoLG4pKSYmKCFyLmEmJihyLmE9bmV3IGhlKG5zLHIsMTAsMTEpKSxyLmEpLmkhPTAmJihvKz13dWUodCxyKSkpO3JldHVybiBvfWZ1bmN0aW9uIFl2bih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iocj0wLGQ9MCxoPW5ldyBTKHQuZCk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTAxKSxzPXUoUGwoUmkobmV3IFRuKG51bGwsbmV3IF9uKG8uaiwxNikpLG5ldyBxVCksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLG49bnVsbCxyPD1kPyhuPShiZSgpLE5uKSxyKz1zLmdjKCkpOmQ8ciYmKG49KGJlKCksbXIpLGQrPXMuZ2MoKSksZT1uLHVzKHB1KHMuT2MoKSxuZXcgQUYpLG5ldyBSdHQoZSkpfWZ1bmN0aW9uIFh2bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2Zvcih0LmI9bmV3IE5vZShuZXcgd2woKGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkpLG5ldyB3bCgoSnYoKSxjdChvdChjbHQsMSksYWUsMzYxLDAsW0F3LGhiLFN3XSkpKSksaD1jdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pLGQ9MCx3PWgubGVuZ3RoO2Q8dzsrK2QpZm9yKG89aFtkXSxuPWN0KG90KGNsdCwxKSxhZSwzNjEsMCxbQXcsaGIsU3ddKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxRMW4odC5iLG8sZSxuZXcgbGUpfWZ1bmN0aW9uIG11ZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKGg9dSh1KEFpKHQucixlKSwyMSksODQpLGQ9dC51LkhjKChRdSgpLHhiKSksbj10LnUuSGMoSlMpLHI9dC51LkhjKFpTKSxrPXQudS5IYyhHNiksTT10LkIuSGMoKGNsKCksS1YpKSxDPSFuJiYhciYmKGt8fGguZ2MoKT09MiksUTJuKHQsZSkscz1udWxsLHc9bnVsbCxkKXtmb3Iobz1oLktjKCkscz11KG8uUGIoKSwxMTEpLHc9cztvLk9iKCk7KXc9dShvLlBiKCksMTExKTtzLmQuYj0wLHcuZC5jPTAsQyYmIXMuYSYmKHMuZC5jPTApfU0mJihZZG4oaCksZCYmKHMuZC5iPTAsdy5kLmM9MCkpfWZ1bmN0aW9uIHl1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKGg9dSh1KEFpKHQucixlKSwyMSksODQpLGQ9dC51LkhjKChRdSgpLHhiKSksbj10LnUuSGMoSlMpLHI9dC51LkhjKFpTKSx3PXQudS5IYyhHNiksTT10LkIuSGMoKGNsKCksS1YpKSxrPSFuJiYhciYmKHd8fGguZ2MoKT09MiksZm1uKHQsZSksQz1udWxsLHM9bnVsbCxkKXtmb3Iobz1oLktjKCksQz11KG8uUGIoKSwxMTEpLHM9QztvLk9iKCk7KXM9dShvLlBiKCksMTExKTtDLmQuZD0wLHMuZC5hPTAsayYmIUMuYSYmKEMuZC5hPTApfU0mJihYZG4oaCksZCYmKEMuZC5kPTAscy5kLmE9MCkpfWZ1bmN0aW9uIHh1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztpZihzPWUuayxlLnA+PTApcmV0dXJuITE7aWYoZS5wPW4uYix1ZShuLmUsZSkscz09KEduKCksWnMpfHxzPT1IYyl7Zm9yKGg9bmV3IFMoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTEpLEM9KHI9bmV3IFMobmV3IEVyKG8pLmEuZyksbmV3IFF0KHIpKTtWbyhDLmEpOylpZihrPXUoSihDLmEpLDE3KS5kLGQ9ay5pLHc9ZC5rLGUuYyE9ZC5jJiYodz09WnN8fHc9PUhjKSYmeHVlKHQsZCxuKSlyZXR1cm4hMH1yZXR1cm4hMH1mdW5jdGlvbiBwcSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9zNXQodCk6KGU9bmV3IFRoKHM1dCh0KSksZS5hKz0iIChjaGFuZ2VhYmxlOiAiLGtnKGUsKHQuQmImd2YpIT0wKSxlLmErPSIsIHZvbGF0aWxlOiAiLGtnKGUsKHQuQmImQXkpIT0wKSxlLmErPSIsIHRyYW5zaWVudDogIixrZyhlLCh0LkJiJnl5KSE9MCksZS5hKz0iLCBkZWZhdWx0VmFsdWVMaXRlcmFsOiAiLGZvKGUsdC5qKSxlLmErPSIsIHVuc2V0dGFibGU6ICIsa2coZSwodC5CYiZ6dSkhPTApLGUuYSs9IiwgZGVyaXZlZDogIixrZyhlLCh0LkJiJmJkKSE9MCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBRdm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihzPWUybih0LmQpLGg9dShRKHQuYiwoaV8oKSxvN3QpKSwxMTYpLGQ9aC5iK2guYyx3PWguZCtoLmEsQz1zLmQuYSp0LmUrZCxrPXMuYi5hKnQuZit3LGlwdCh0LmIsbmV3ICRlKEMsaykpLEY9bmV3IFModC5nKTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSw1NjIpLGU9TS5nLXMuYS5hLG49TS5pLXMuYy5hLHI9TGkoaFFlKG5ldyAkZShlLG4pLE0uYSxNLmIpLHVkKEJNKG5jKHMydChNLmUpKSxNLmQqTS5hLE0uYypNLmIpLC0uNSkpLG89YTJ0KE0uZSksektlKE0uZSxuYShyLG8pKX1mdW5jdGlvbiBadm4odCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iodz1QdChpYSx0ZSwxMDQsKGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkubGVuZ3RoLDAsMiksbz1jdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLHdbcy5nXT1QdChpYSx2bywyNSx0LmNbcy5nXSwxNSwxKTtyZXR1cm4gcXNlKHcsdCxObikscXNlKHcsdCxtcikscHN0KHcsdCxObixlLG4scikscHN0KHcsdCxIbixlLG4scikscHN0KHcsdCxtcixlLG4scikscHN0KHcsdCxCbixlLG4sciksd31mdW5jdGlvbiBKdm4odCxlLG4pe2lmKGtsKHQuYSxlKSl7aWYoUzAodShKbih0LmEsZSksNTMpLG4pKXJldHVybiAxfWVsc2Uga2kodC5hLGUsbmV3IHFzKTtpZihrbCh0LmEsbikpe2lmKFMwKHUoSm4odC5hLG4pLDUzKSxlKSlyZXR1cm4tMX1lbHNlIGtpKHQuYSxuLG5ldyBxcyk7aWYoa2wodC5iLGUpKXtpZihTMCh1KEpuKHQuYixlKSw1MyksbikpcmV0dXJuLTF9ZWxzZSBraSh0LmIsZSxuZXcgcXMpO2lmKGtsKHQuYixuKSl7aWYoUzAodShKbih0LmIsbiksNTMpLGUpKXJldHVybiAxfWVsc2Uga2kodC5iLG4sbmV3IHFzKTtyZXR1cm4gMH1mdW5jdGlvbiAkNXQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2lmKG49PW51bGwpe2ZvcihzPXUodC5nLDExOSksZD0wO2Q8dC5pOysrZClpZihoPXNbZF0saC5haygpPT1lKXJldHVybiBCYSh0LGgscil9cmV0dXJuIG89KHRvKCksdShlLDY2KS5PaigpP3Uobiw3Mik6WWQoZSxuKSksbWwodC5lKT8oaz0hVkkodCxlKSxyPVFjKHQsbyxyKSx3PWUuJGooKT96cCh0LDMsZSxudWxsLG4sRUUodCxlLG4sRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCksayk6enAodCwxLGUsZS56aigpLG4sLTEsaykscj9yLkVpKHcpOnI9dyk6cj1RYyh0LG8scikscn1mdW5jdGlvbiB0d24odCl7dmFyIGUsbixyLHMsbyxoO3QucT09KG9hKCksaDApfHx0LnE9PVZjfHwocz10LmYubi5kK0xqKHUoZ28odC5iLChiZSgpLE5uKSksMTI0KSkrdC5jLGU9dC5mLm4uYStMaih1KGdvKHQuYixtciksMTI0KSkrdC5jLHI9dShnbyh0LmIsSG4pLDEyNCksaD11KGdvKHQuYixCbiksMTI0KSxvPWIuTWF0aC5tYXgoMCxyLm4uZC1zKSxvPWIuTWF0aC5tYXgobyxoLm4uZC1zKSxuPWIuTWF0aC5tYXgoMCxyLm4uYS1lKSxuPWIuTWF0aC5tYXgobixoLm4uYS1lKSxyLm4uZD1vLGgubi5kPW8sci5uLmE9bixoLm4uYT1uKX1mdW5jdGlvbiBld24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO2Zvcih3cihlLCJSZXN0b3JpbmcgcmV2ZXJzZWQgZWRnZXMiLDEpLHc9bmV3IFModC5iKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZD11KEoodyksMjkpLEM9bmV3IFMoZC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTApLEY9bmV3IFMoay5qKTtGLmE8Ri5jLmMubGVuZ3RoOylmb3IoTT11KEooRiksMTEpLGg9Z2QoTS5nKSxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10samUoUmUoUShuLChzZSgpLCQxKSkpKSYmZHcobiwhMSk7b3IoZSl9ZnVuY3Rpb24ga3VlKCl7dGhpcy5iPW5ldyBuMix0aGlzLmQ9bmV3IG4yLHRoaXMuZT1uZXcgbjIsdGhpcy5jPW5ldyBuMix0aGlzLmE9bmV3IENyLHRoaXMuZj1uZXcgQ3IsUTMoVXMsbmV3IHhaLG5ldyBrWiksUTMoeFN0LG5ldyB0YyxuZXcgS2MpLFEzKEw3dCxuZXcgemksbmV3IEZMKSxRMyhNN3QsbmV3IERaLG5ldyBPWiksUTMoRTRlLG5ldyBaNSxuZXcgbW0pLFEzKFg1bixuZXcgRVosbmV3IFRaKSxRMyhKNW4sbmV3IENaLG5ldyBfWiksUTMoUTVuLG5ldyBTWixuZXcgQVopLFEzKFo1bixuZXcgTFosbmV3IEFjKSxRMyhueG4sbmV3IE1aLG5ldyBLVCl9ZnVuY3Rpb24gRXVlKHQpe3ZhciBlLG4scixzLG8saDtyZXR1cm4gbz0wLGU9TGgodCksZS5CaigpJiYob3w9NCksdC5CYiZ6dSYmKG98PTIpLEV0KHQsOTkpPyhuPXUodCwxOCkscz1ubyhuKSxuLkJiJmRjJiYob3w9MzIpLHMmJihabihWbShzKSksb3w9OCxoPXMudCwoaD4xfHxoPT0tMSkmJihvfD0xNikscy5CYiZkYyYmKG98PTY0KSksbi5CYiZZYSYmKG98PUF5KSxvfD13Zik6RXQoZSw0NTcpP298PTUxMjoocj1lLkJqKCksciYmci5pJjEmJihvfD0yNTYpKSx0LkJiJjUxMiYmKG98PTEyOCksb31mdW5jdGlvbiB2Xyh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHQ9dD09bnVsbD9UdTooT24odCksdCkscz0wO3M8ZS5sZW5ndGg7cysrKWVbc109RmJuKGVbc10pO2ZvcihuPW5ldyBMbSxoPTAscj0wO3I8ZS5sZW5ndGgmJihvPXQuaW5kZXhPZigiJXMiLGgpLG8hPS0xKTspbi5hKz0iIitEbCh0PT1udWxsP1R1OihPbih0KSx0KSxoLG8pLGhjKG4sZVtyKytdKSxoPW8rMjtpZihzWnQobix0LGgsdC5sZW5ndGgpLHI8ZS5sZW5ndGgpe2ZvcihuLmErPSIgWyIsaGMobixlW3IrK10pO3I8ZS5sZW5ndGg7KW4uYSs9S2EsaGMobixlW3IrK10pO24uYSs9Il0ifXJldHVybiBuLmF9ZnVuY3Rpb24gbnduKHQpe3ZhciBlLG4scixzLG87Zm9yKG89bmV3IFljKHQuYS5jLmxlbmd0aCkscz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj11KEoocyksMTApLG49dShRKHIsKFRlKCksY3UpKSwxNjMpLGU9bnVsbCxuLmcpe2Nhc2UgMTpjYXNlIDI6ZT0odTIoKSxHNCk7YnJlYWs7Y2FzZSAzOmNhc2UgNDplPSh1MigpLHU3KX1lPyhKdChyLChzZSgpLEhHKSwodTIoKSxHNCkpLGU9PXU3P2xxKHIsbiwoc28oKSxKdSkpOmU9PUc0JiZscShyLG4sKHNvKCksZXUpKSk6by5jW28uYy5sZW5ndGhdPXJ9cmV0dXJuIG99ZnVuY3Rpb24gejV0KHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG49MCx3PW5ldyBTKGUpO3cuYTx3LmMuYy5sZW5ndGg7KXtmb3IoZD11KEoodyksMTEpLEJ5dCh0LmIsdC5kW2QucF0pLGg9MCxzPW5ldyBTMShkLmIpO1ZvKHMuYSl8fFZvKHMuYik7KXI9dShWbyhzLmEpP0oocy5hKTpKKHMuYiksMTcpLG9YdChyKT8obz11YnQodCxkPT1yLmM/ci5kOnIuYyksbz50LmRbZC5wXSYmKG4rPXNtdCh0LmIsbykscXAodC5hLGRlKG8pKSkpOisraDtmb3Iobis9dC5iLmQqaDshTjkodC5hKTspRm10KHQuYix1KEZ4KHQuYSksMTkpLmEpfXJldHVybiBufWZ1bmN0aW9uIHJ3bih0LGUpe3ZhciBuO3JldHVybiB0LmY9PUxmdD8obj0kdihFbygoUnUoKSxtYSksZSkpLHQuZT9uPT00JiZlIT0oYTYoKSxXNikmJmUhPShhNigpLFU2KSYmZSE9KGE2KCksTWZ0KSYmZSE9KGE2KCksSWZ0KTpuPT0yKTp0LmQmJih0LmQuSGMoZSl8fHQuZC5IYyhxeChFbygoUnUoKSxtYSksZSkpKXx8dC5kLkhjKEU0KChSdSgpLG1hKSx0LmIsZSkpKT8hMDp0LmYmJl81dCgoUnUoKSx0LmYpLFpNKEVvKG1hLGUpKSk/KG49JHYoRW8obWEsZSkpLHQuZT9uPT00Om49PTIpOiExfWZ1bmN0aW9uIGl3bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO3JldHVybiBoPXUocWUobiwoY2koKSx6NikpLDgpLHc9aC5hLEM9aC5iK3Qscz1iLk1hdGguYXRhbjIoQyx3KSxzPDAmJihzKz1JNCkscys9ZSxzPkk0JiYocy09STQpLGQ9dShxZShyLHo2KSw4KSxrPWQuYSxNPWQuYit0LG89Yi5NYXRoLmF0YW4yKE0sayksbzwwJiYobys9STQpLG8rPWUsbz5JNCYmKG8tPUk0KSx5MSgpLGdmKDFlLTEwKSxiLk1hdGguYWJzKHMtbyk8PTFlLTEwfHxzPT1vfHxpc05hTihzKSYmaXNOYU4obyk/MDpzPG8/LTE6cz5vPzE6THYoaXNOYU4ocyksaXNOYU4obykpfWZ1bmN0aW9uIHJhdCh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgQ3Iscj1uZXcgUyh0LmEuYik7ci5hPHIuYy5jLmxlbmd0aDspZT11KEoociksNTcpLGtpKGQsZSxuZXcgbGUpO2ZvcihzPW5ldyBTKHQuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3IoZT11KEoocyksNTcpLGUuaT1UcyxoPWUuYy5LYygpO2guT2IoKTspbz11KGguUGIoKSw1NyksdShlYyhBbyhkLmYsbykpLDE1KS5GYyhlKTtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLGUuYy4kYigpLGUuYz11KGVjKEFvKGQuZixlKSksMTUpO0djZSh0KX1mdW5jdGlvbiBpYXQodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9bmV3IENyLHI9bmV3IFModC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWU9dShKKHIpLDgxKSxraShkLGUsbmV3IGxlKTtmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKGU9dShKKHMpLDgxKSxlLm89VHMsaD1lLmYuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksODEpLHUoZWMoQW8oZC5mLG8pKSwxNSkuRmMoZSk7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxlLmYuJGIoKSxlLmY9dShlYyhBbyhkLmYsZSkpLDE1KTtOY2UodCl9ZnVuY3Rpb24gc3duKHQsZSxuLHIpe3ZhciBzLG87Zm9yKG0xbih0LGUsbixyKSxzcHQoZSx0LmotZS5qK24pLGFwdChlLHQuay1lLmsrciksbz1uZXcgUyhlLmYpO28uYTxvLmMuYy5sZW5ndGg7KXN3aXRjaChzPXUoSihvKSwzMjQpLHMuYS5nKXtjYXNlIDA6WDgodCxlLmcrcy5iLmEsMCxlLmcrcy5jLmEsZS5pLTEpO2JyZWFrO2Nhc2UgMTpYOCh0LGUuZytlLm8sZS5pK3MuYi5hLHQuby0xLGUuaStzLmMuYSk7YnJlYWs7Y2FzZSAyOlg4KHQsZS5nK3MuYi5hLGUuaStlLnAsZS5nK3MuYy5hLHQucC0xKTticmVhaztkZWZhdWx0Olg4KHQsMCxlLmkrcy5iLmEsZS5nLTEsZS5pK3MuYy5hKX19ZnVuY3Rpb24gYnEodCxlLG4scixzKXt2YXIgbyxoLGQ7dHJ5e2lmKGU+PXQubyl0aHJvdyBydChuZXcgX3B0KTtkPWU+PjUsaD1lJjMxLG89TTAoMSxTcihNMChoLDEpKSkscz90Lm5bbl1bZF09QzEodC5uW25dW2RdLG8pOnQubltuXVtkXT1Qcyh0Lm5bbl1bZF0sSXZ0KG8pKSxvPU0wKG8sMSkscj90Lm5bbl1bZF09QzEodC5uW25dW2RdLG8pOnQubltuXVtkXT1Qcyh0Lm5bbl1bZF0sSXZ0KG8pKX1jYXRjaCh3KXt0aHJvdyB3PVdpKHcpLEV0KHcsMzIwKT9ydChuZXcgbW8oVG90K3QubysiKiIrdC5wK0NvdCtlK0thK24rX290KSk6cnQodyl9fWZ1bmN0aW9uIHE1dCh0LGUsbixyKXt2YXIgcyxvLGg7ZSYmKG89WHQoeWUoUShlLChmYygpLFlnKSkpKStyLGg9bitYdCh5ZShRKGUseFYpKSkvMixKdChlLExodCxkZShTcihrdShiLk1hdGgucm91bmQobykpKSkpLEp0KGUsdF90LGRlKFNyKGt1KGIuTWF0aC5yb3VuZChoKSkpKSksZS5kLmI9PTB8fHE1dCh0LHUobGooKHM9ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngocykpKSw4NiksbitYdCh5ZShRKGUseFYpKSkrdC5hLHIrWHQoeWUoUShlLGs3KSkpKSxRKGUsQWh0KSE9bnVsbCYmcTV0KHQsdShRKGUsQWh0KSw4NiksbixyKSl9ZnVuY3Rpb24gYXduKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtmb3Iodz1GYShlLmEpLHM9WHQoeWUoUSh3LChUZSgpLFIyKSkpKSoyLEM9WHQoeWUoUSh3LFo0KSkpLGs9Yi5NYXRoLm1heChzLEMpLG89UHQoaWEsdm8sMjUsZS5mLWUuYysxLDE1LDEpLHI9LWssbj0wLGQ9ZS5iLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxyKz10LmFbaC5jLnBdK2ssb1tuKytdPXI7Zm9yKHIrPXQuYVtlLmEuYy5wXStrLG9bbisrXT1yLEY9bmV3IFMoZS5lKTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSwxMCkscis9dC5hW00uYy5wXStrLG9bbisrXT1yO3JldHVybiBvfWZ1bmN0aW9uIG93bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEY7Zm9yKEY9bmV3IExwKG5ldyB2JHQodCkpLGQ9Y3Qob3QobzAsMSksemcsMTAsMCxbZSxuXSksdz0wLGs9ZC5sZW5ndGg7dzxrOysrdylmb3IoaD1kW3ddLE09UUMoaCxyKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLG89bmV3IFMxKEMuYik7Vm8oby5hKXx8Vm8oby5iKTspcz11KFZvKG8uYSk/SihvLmEpOkooby5iKSwxNyksVmEocyl8fChweihGLmEsQywoRm4oKSxJMikpPT1udWxsLG9YdChzKSYmWU0oRixDPT1zLmM/cy5kOnMuYykpO3JldHVybiBBcihGKSxuZXcgUHUoRil9ZnVuY3Rpb24gY3duKHQsZSl7dmFyIG4scixzLG87aWYobz11KHFlKHQsKGNpKCksbzUpKSw2MSkuZy11KHFlKGUsbzUpLDYxKS5nLG8hPTApcmV0dXJuIG87aWYobj11KHFlKHQsbGZ0KSwxOSkscj11KHFlKGUsbGZ0KSwxOSksbiYmciYmKHM9bi5hLXIuYSxzIT0wKSlyZXR1cm4gcztzd2l0Y2godShxZSh0LG81KSw2MSkuZyl7Y2FzZSAxOnJldHVybiBMcyh0LmksZS5pKTtjYXNlIDI6cmV0dXJuIExzKHQuaixlLmopO2Nhc2UgMzpyZXR1cm4gTHMoZS5pLHQuaSk7Y2FzZSA0OnJldHVybiBMcyhlLmosdC5qKTtkZWZhdWx0OnRocm93IHJ0KG5ldyBGbyhiNnQpKX19ZnVuY3Rpb24gSDV0KHQpe3ZhciBlLG4scjtyZXR1cm4gdC5EYiY2ND9Pc3QodCk6KGU9bmV3IElsKGY4dCksbj10Lmssbj9WcihWcigoZS5hKz0nICInLGUpLG4pLCciJyk6KCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdC5uLmk+MCYmKHI9KCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdShTdCh0Lm4sMCksMTM3KSkuYSwhcnx8VnIoVnIoKGUuYSs9JyAiJyxlKSxyKSwnIicpKSksVnIoQ3YoVnIoQ3YoVnIoQ3YoVnIoQ3YoKGUuYSs9IiAoIixlKSx0LmkpLCIsIiksdC5qKSwiIHwgIiksdC5nKSwiLCIpLHQuZiksIikiKSxlLmEpfWZ1bmN0aW9uIFR1ZSh0KXt2YXIgZSxuLHI7cmV0dXJuIHQuRGImNjQ/T3N0KHQpOihlPW5ldyBJbChkOHQpLG49dC5rLG4/VnIoVnIoKGUuYSs9JyAiJyxlKSxuKSwnIicpOighdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHQubi5pPjAmJihyPSghdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHUoU3QodC5uLDApLDEzNykpLmEsIXJ8fFZyKFZyKChlLmErPScgIicsZSksciksJyInKSkpLFZyKEN2KFZyKEN2KFZyKEN2KFZyKEN2KChlLmErPSIgKCIsZSksdC5pKSwiLCIpLHQuaiksIiB8ICIpLHQuZyksIiwiKSx0LmYpLCIpIiksZS5hKX1mdW5jdGlvbiBzYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZihlPT1udWxsfHxlLmxlbmd0aD09MClyZXR1cm4gbnVsbDtpZihzPXUoRmModC5hLGUpLDE0OSksIXMpe2ZvcihyPShkPW5ldyBiMSh0LmIpLmEudmMoKS5LYygpLG5ldyB2MShkKSk7ci5hLk9iKCk7KWlmKG49KG89dShyLmEuUGIoKSw0MiksdShvLmRkKCksMTQ5KSksaD1uLmMsdz1lLmxlbmd0aCxobihoLnN1YnN0cihoLmxlbmd0aC13LHcpLGUpJiYoZS5sZW5ndGg9PWgubGVuZ3RofHxiYShoLGgubGVuZ3RoLWUubGVuZ3RoLTEpPT00Nikpe2lmKHMpcmV0dXJuIG51bGw7cz1ufXMmJnhvKHQuYSxlLHMpfXJldHVybiBzfWZ1bmN0aW9uIHV3bih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPW5ldyBKbCxyPXUoUGwocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuZiwxNikpLG4pLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksTHkpLEdsXSkpKSwyMSkscz1yLmdjKCkscj11KFBsKHB1KG5ldyBUbihudWxsLG5ldyBfbihlLmYsMTYpKSxuKSxZbShuZXcgY24sbmV3IGxpLG5ldyBkaSxuZXcgRWUsY3Qob3QobGwsMSksYWUsMTMyLDAsW0x5LEdsXSkpKSwyMSksbz1yLmdjKCksczxvPy0xOnM9PW8/MDoxfWZ1bmN0aW9uIEN1ZSh0KXt2YXIgZSxuLHI7VnModCwoVGUoKSxPdykpJiYocj11KFEodCxPdyksMjEpLCFyLmRjKCkmJihuPShlPXUoSGYobG8pLDkpLG5ldyByaChlLHUodWYoZSxlLmxlbmd0aCksOSksMCkpLHIuSGMoKGZ5KCksVWwpKT9wZihuLFVsKTpwZihuLENmKSxyLkhjKCRoKXx8cGYobiwkaCksci5IYyhFZik/cGYobixfZik6ci5IYyhKMCk/cGYobixsMCk6ci5IYyhUZikmJnBmKG4semgpLHIuSGMoX2YpP3BmKG4sRWYpOnIuSGMobDApP3BmKG4sSjApOnIuSGMoemgpJiZwZihuLFRmKSxKdCh0LE93LG4pKSl9ZnVuY3Rpb24gbHduKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihzPXUoUSh0LChzZSgpLEl3KSksMTApLHI9dC5qLG49KEFuKDAsci5jLmxlbmd0aCksdShyLmNbMF0sMTEpKSxoPW5ldyBTKHMuaik7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTEpLEd0KG8pPT09R3QoUShuLF9pKSkpe28uaj09KGJlKCksTm4pJiZ0LnA+cy5wPyhGcyhvLG1yKSxvLmQmJihkPW8uby5iLGU9by5hLmIsby5hLmI9ZC1lKSk6by5qPT1tciYmcy5wPnQucCYmKEZzKG8sTm4pLG8uZCYmKGQ9by5vLmIsZT1vLmEuYixvLmEuYj0tKGQtZSkpKTticmVha31yZXR1cm4gc31mdW5jdGlvbiBod24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihvPW4sbjxyKWZvcihGPShIPW5ldyBMSSh0LnApLFY9bmV3IExJKHQucCksVWEoSC5lLHQuZSksSC5xPXQucSxILnI9VixLaihIKSxVYShWLmosdC5qKSxWLnI9SCxLaihWKSxuZXcgbGEoSCxWKSksTT11KEYuYSwxMTIpLEM9dShGLmIsMTEyKSxzPShBbihvLGUuYy5sZW5ndGgpLHUoZS5jW29dLDMyOSkpLGg9aXVlKHQsTSxDLHMpLGs9bisxO2s8PXI7aysrKWQ9KEFuKGssZS5jLmxlbmd0aCksdShlLmNba10sMzI5KSksdz1pdWUodCxNLEMsZCksVmhuKGQsdyxzLGgpJiYocz1kLGg9dyk7cmV0dXJuIG99ZnVuY3Rpb24gYkQodCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTTtpZighKEV0KGUsMjM5KXx8RXQoZSwzNTQpfHxFdChlLDE4NikpKXRocm93IHJ0KG5ldyBQbigiTWV0aG9kIG9ubHkgd29ya3MgZm9yIEVsa05vZGUtLCBFbGtMYWJlbCBhbmQgRWxrUG9ydC1vYmplY3RzLiIpKTtyZXR1cm4gaD10LmEvMix3PWUuaStyLWgsQz1lLmorcy1oLGs9dytlLmcrdC5hLE09QytlLmYrdC5hLG89bmV3IER1LG5pKG8sbmV3ICRlKHcsQykpLG5pKG8sbmV3ICRlKHcsTSkpLG5pKG8sbmV3ICRlKGssTSkpLG5pKG8sbmV3ICRlKGssQykpLGQ9bmV3IFZzdChvKSxMbyhkLGUpLG4mJmtpKHQuYixlLGQpLGR9ZnVuY3Rpb24gd18odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihvPW5ldyAkZShlLG4pLEM9bmV3IFModC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTApLExpKGsubixvKSxGPW5ldyBTKGsuaik7Ri5hPEYuYy5jLmxlbmd0aDspZm9yKE09dShKKEYpLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDE3KSxKbShyLmEsbyksaD11KFEociwoVGUoKSxfbykpLDc0KSxoJiZKbShoLG8pLHc9bmV3IFMoci5iKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSw3MCksTGkoZC5uLG8pfWZ1bmN0aW9uIGZ3bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKG89bmV3ICRlKGUsbiksQz1uZXcgUyh0LmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMCksTGkoay5uLG8pLEY9bmV3IFMoay5qKTtGLmE8Ri5jLmMubGVuZ3RoOylmb3IoTT11KEooRiksMTEpLHM9bmV3IFMoTS5nKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMTcpLEptKHIuYSxvKSxoPXUoUShyLChUZSgpLF9vKSksNzQpLGgmJkptKGgsbyksdz1uZXcgUyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDcwKSxMaShkLm4sbyl9ZnVuY3Rpb24gX3VlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MCl0aHJvdyBydChuZXcgRjkoIkVkZ2VzIG11c3QgaGF2ZSBhIHNvdXJjZS4iKSk7aWYoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pPT0wKXRocm93IHJ0KG5ldyBGOSgiRWRnZXMgbXVzdCBoYXZlIGEgdGFyZ2V0LiIpKTtpZighdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLCEodC5iLmk8PTEmJighdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYy5pPD0xKSkpdGhyb3cgcnQobmV3IEY5KCJIeXBlcmVkZ2VzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKX1mdW5jdGlvbiBTdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoTT0wLG89bmV3IFAzLHFwKG8sZSk7by5iIT1vLmM7KWZvcih3PXUoRngobyksMjE0KSxrPTAsQz11KFEoZS5qLChUZSgpLGRiKSksMzM5KSxoPVh0KHllKFEoZS5qLFlHKSkpLGQ9WHQoeWUoUShlLmosUDl0KSkpLEMhPShqMCgpLGdiKSYmKGsrPWgqeGJuKHcuZSxDKSxrKz1kKlUybih3LmUpKSxNKz1fc2Uody5kLHcuZSkrayxzPW5ldyBTKHcuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMzcpLG49dShGZSh0LmIsci5wKSwyMTQpLG4uc3x8KE0rPVJzdCh0LG4pKTtyZXR1cm4gTX1mdW5jdGlvbiBkd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihIPWUubGVuZ3RoLHc9SCxScigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQ1PyhNPS0xLEY9MSwtLUgpOihNPTEsRj0wKSxvPSh3YXQoKSxfZ2UpWzEwXSxzPUgvb3wwLHR0PUglbyx0dCE9MCYmKytzLGQ9UHQoVHIsWHIsMjUscywxNSwxKSxuPUNnZVs4XSxoPTAsVj1GKyh0dD09MD9vOnR0KSxZPUY7WTx3O1k9VixWPVkrbylyPSRsKGUuc3Vic3RyKFksVi1ZKSxfYSx2aSksaz0oYkUoKSxQM3QoZCxkLGgsbikpLGsrPUhsbihkLGgsciksZFtoKytdPWs7Qz1oLHQuZT1NLHQuZD1DLHQuYT1kLE9DKHQpfWZ1bmN0aW9uIEF1ZSh0LGUsbixyLHMsbyxoKXtpZih0LmM9ci5xZigpLmEsdC5kPXIucWYoKS5iLHMmJih0LmMrPXMucWYoKS5hLHQuZCs9cy5xZigpLmIpLHQuYj1lLnJmKCkuYSx0LmE9ZS5yZigpLmIsIXMpbj90LmMtPWgrZS5yZigpLmE6dC5jKz1yLnJmKCkuYStoO2Vsc2Ugc3dpdGNoKHMuSGYoKS5nKXtjYXNlIDA6Y2FzZSAyOnQuYys9cy5yZigpLmEraCtvLmEraDticmVhaztjYXNlIDQ6dC5jLT1oK28uYStoK2UucmYoKS5hO2JyZWFrO2Nhc2UgMTp0LmMrPXMucmYoKS5hK2gsdC5kLT1oK28uYitoK2UucmYoKS5iO2JyZWFrO2Nhc2UgMzp0LmMrPXMucmYoKS5hK2gsdC5kKz1zLnJmKCkuYitoK28uYitofX1mdW5jdGlvbiBMdWUodCxlKXt2YXIgbixyO2Zvcih0aGlzLmI9bmV3IGxlLHRoaXMuZT1uZXcgbGUsdGhpcy5hPXQsdGhpcy5kPWUsemhuKHRoaXMpLFhsbih0aGlzKSx0aGlzLmIuZGMoKT90aGlzLmM9dC5jLnA6dGhpcy5jPXUodGhpcy5iLlhiKDApLDEwKS5jLnAsdGhpcy5lLmMubGVuZ3RoPT0wP3RoaXMuZj10LmMucDp0aGlzLmY9dShGZSh0aGlzLmUsdGhpcy5lLmMubGVuZ3RoLTEpLDEwKS5jLnAscj11KFEodCwoc2UoKSxUTykpLDE1KS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw3MCksVnMobiwoVGUoKSxRRykpKXt0aGlzLmQ9dShRKG4sUUcpLDIyNyk7YnJlYWt9fWZ1bmN0aW9uIHhFKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2ZvcihyPXUoSm4odC5hLGUpLDUzKSxvPXUoSm4odC5hLG4pLDUzKSxzPXUoSm4odC5lLGUpLDUzKSxoPXUoSm4odC5lLG4pLDUzKSxyLmEuemMobixyKSxoLmEuemMoZSxoKSxDPW8uYS5lYygpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDEwKSxyLmEuemMoayxyKSxOcyh1KEpuKHQuZSxrKSw1MyksZSksVWEodShKbih0LmUsayksNTMpLHMpO2Zvcih3PXMuYS5lYygpLktjKCk7dy5PYigpOylkPXUody5QYigpLDEwKSxoLmEuemMoZCxoKSxOcyh1KEpuKHQuYSxkKSw1MyksbiksVWEodShKbih0LmEsZCksNTMpLG8pfWZ1bmN0aW9uIHZEKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2ZvcihyPXUoSm4odC5hLGUpLDUzKSxvPXUoSm4odC5hLG4pLDUzKSxzPXUoSm4odC5iLGUpLDUzKSxoPXUoSm4odC5iLG4pLDUzKSxyLmEuemMobixyKSxoLmEuemMoZSxoKSxDPW8uYS5lYygpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDEwKSxyLmEuemMoayxyKSxOcyh1KEpuKHQuYixrKSw1MyksZSksVWEodShKbih0LmIsayksNTMpLHMpO2Zvcih3PXMuYS5lYygpLktjKCk7dy5PYigpOylkPXUody5QYigpLDEwKSxoLmEuemMoZCxoKSxOcyh1KEpuKHQuYSxkKSw1MyksbiksVWEodShKbih0LmEsZCksNTMpLG8pfWZ1bmN0aW9uIGd3bih0LGUpe3ZhciBuLHIscztzd2l0Y2god3IoZSwiQnJlYWtpbmcgUG9pbnQgSW5zZXJ0aW9uIiwxKSxyPW5ldyBmNXQodCksdShRKHQsKFRlKCkscmh0KSksMzM3KS5nKXtjYXNlIDI6cz1uZXcgUEY7Y2FzZSAwOnM9bmV3IERGO2JyZWFrO2RlZmF1bHQ6cz1uZXcgRkZ9aWYobj1zLlZmKHQsciksamUoUmUoUSh0LG1DdCkpKSYmKG49czNuKHQsbikpLCFzLldmKCkmJlZzKHQsYVYpKXN3aXRjaCh1KFEodCxhViksMzM4KS5nKXtjYXNlIDI6bj1nb2UocixuKTticmVhaztjYXNlIDE6bj1kYWUocixuKX1pZihuLmRjKCkpe29yKGUpO3JldHVybn1zNW4odCxuKSxvcihlKX1mdW5jdGlvbiBwd24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2lmKEM9bnVsbCxGPWUsTT1QWnQodCxJWnQobiksRikscUMoTSxPMChGLENkKSksaD1VdihGLHA4dCkscj1uZXcgYlZ0KHQsTSkscWduKHIuYSxyLmIsaCksZD1VdihGLFZjdCkscz1uZXcgdlZ0KHQsTSksSGduKHMuYSxzLmIsZCksKCFNLmImJihNLmI9bmV3IENuKGJyLE0sNCw3KSksTS5iKS5pPT0wfHwoIU0uYyYmKE0uYz1uZXcgQ24oYnIsTSw1LDgpKSxNLmMpLmk9PTApdGhyb3cgbz1PMChGLENkKSx3PVNkZStvLGs9dytWRSxydChuZXcgYWQoaykpO3JldHVybiBKeihGLE0pLGg1bih0LEYsTSksQz13aXQodCxGLE0pLEN9ZnVuY3Rpb24gYnduKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHM9UHQoVHIsWHIsMjUsdC5lLmEuYy5sZW5ndGgsMTUsMSksaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTIxKSxzW28uZF0rPW8uYi5hLmMubGVuZ3RoO2ZvcihkPVVNKGUpO2QuYiE9MDspZm9yKG89dShkLmI9PTA/bnVsbDooUW4oZC5iIT0wKSxjaChkLGQuYS5hKSksMTIxKSxyPUt4KG5ldyBTKG8uZy5hKSk7ci5PYigpOyluPXUoci5QYigpLDIxMyksdz1uLmUsdy5lPWIuTWF0aC5tYXgody5lLG8uZStuLmEpLC0tc1t3LmRdLHNbdy5kXT09MCYmaHMoZCx3LGQuYy5iLGQuYyl9ZnVuY3Rpb24gTXVlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE07Zm9yKG49X2Escz12aSxkPW5ldyBTKHQuZS5hKTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxMjEpLHM9Yi5NYXRoLm1pbihzLG8uZSksbj1iLk1hdGgubWF4KG4sby5lKTtmb3IoZT1QdChUcixYciwyNSxuLXMrMSwxNSwxKSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMjEpLG8uZS09cywrK2Vbby5lXTtpZihyPTAsdC5rIT1udWxsKWZvcihrPXQuayxDPTAsTT1rLmxlbmd0aDtDPE0mJih3PWtbQ10sZVtyKytdKz13LGUubGVuZ3RoIT1yKTsrK0MpO3JldHVybiBlfWZ1bmN0aW9uIEl1ZSh0KXtzd2l0Y2godC5kKXtjYXNlIDk6Y2FzZSA4OnJldHVybiEwO2Nhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjpyZXR1cm4hMTtjYXNlIDc6cmV0dXJuIHUoTzV0KHQpLDE5KS5hPT10Lm87Y2FzZSAxOmNhc2UgMjp7aWYodC5vPT0tMilyZXR1cm4hMTtzd2l0Y2godC5wKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDY6Y2FzZSA1OmNhc2UgNzpyZXR1cm4gQXYodC5rLHQuZik7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gdC5qPT10LmU7ZGVmYXVsdDpyZXR1cm4gdC5uPT1udWxsP3QuZz09bnVsbDp5aSh0Lm4sdC5nKX19ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gRHVlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyxWXyksIkVMSyBGaXhlZCIpLCJLZWVwcyB0aGUgY3VycmVudCBsYXlvdXQgYXMgaXQgaXMsIHdpdGhvdXQgYW55IGF1dG9tYXRpYyBtb2RpZmljYXRpb24uIE9wdGlvbmFsIGNvb3JkaW5hdGVzIGNhbiBiZSBnaXZlbiBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuIiksbmV3IEJMKSkpLHhlKHQsVl8sd3csRUF0KSx4ZSh0LFZfLHVILERlKEtTKSkseGUodCxWXyxjOHQsRGUobUF0KSkseGUodCxWXyxMNCxEZSh5QXQpKSx4ZSh0LFZfLHc2LERlKGtBdCkpLHhlKHQsVl8sZmN0LERlKHhBdCkpfWZ1bmN0aW9uIHZxKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHI9U3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSksZD1TcihDYShlMCxXZChTcihDYShuPT1udWxsPzA6SGkobiksbjApKSwxNSkpKSxvPUhDKHQsZSxyKSxvJiZkPT1vLmYmJmZkKG4sby5pKSlyZXR1cm4gbjtpZihoPUdDKHQsbixkKSxoKXRocm93IHJ0KG5ldyBQbigidmFsdWUgYWxyZWFkeSBwcmVzZW50OiAiK24pKTtyZXR1cm4gcz1uZXcgWGooZSxyLG4sZCksbz8odjQodCxvKSxvRCh0LHMsbyksby5lPW51bGwsby5jPW51bGwsby5pKToob0QodCxzLG51bGwpLEhzZSh0KSxudWxsKX1mdW5jdGlvbiB2d24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtDPW4uYS5jLGg9bi5hLmMrbi5hLmIsbz11KEpuKG4uYyxlKSw0NTkpLEg9by5mLFY9by5hLG8uYj93PW5ldyAkZShoLEgpOnc9bmV3ICRlKEMsSCksby5jP009bmV3ICRlKEMsVik6TT1uZXcgJGUoaCxWKSxzPUMsbi5wfHwocys9dC5jKSxzKz1uLkYrbi52KnQuYixrPW5ldyAkZShzLEgpLEY9bmV3ICRlKHMsViksekMoZS5hLGN0KG90KFVzLDEpLHRlLDgsMCxbdyxrXSkpLGQ9bi5kLmEuZ2MoKT4xLGQmJihyPW5ldyAkZShzLG4uYiksbmkoZS5hLHIpKSx6QyhlLmEsY3Qob3QoVXMsMSksdGUsOCwwLFtGLE1dKSl9ZnVuY3Rpb24gYWF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoZSlpZihuPD0tMSl7aWYocj15bihlLlRnKCksLTEtbiksRXQociw5OSkpcmV0dXJuIHUociwxOCk7Zm9yKGg9dShlLmFoKHIpLDE1MyksZD0wLHc9aC5nYygpO2Q8dzsrK2QpaWYoR3QoaC5qbChkKSk9PT1HdCh0KSYmKHM9aC5pbChkKSxFdChzLDk5KSYmKG89dShzLDE4KSxvLkJiJmRjKSkpcmV0dXJuIG87dGhyb3cgcnQobmV3IEZvKCJUaGUgY29udGFpbm1lbnQgZmVhdHVyZSBjb3VsZCBub3QgYmUgbG9jYXRlZCIpKX1lbHNlIHJldHVybiBubyh1KHluKHQuVGcoKSxuKSwxOCkpO2Vsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gd3duKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9dC5sZW5ndGgsZT1uZXcgQjksbz0wO288cjspaWYobj1iYSh0LG8rKyksIShuPT05fHxuPT0xMHx8bj09MTJ8fG49PTEzfHxuPT0zMikpe2lmKG49PTM1KXtmb3IoO288ciYmKG49YmEodCxvKyspLCEobj09MTN8fG49PTEwKSk7KTtjb250aW51ZX1uPT05MiYmbzxyPyhzPShScihvLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobykpKT09MzV8fHM9PTl8fHM9PTEwfHxzPT0xMnx8cz09MTN8fHM9PTMyPyhtOChlLHMmbXMpLCsrbyk6KGUuYSs9IlxcIixtOChlLHMmbXMpLCsrbyk6bTgoZSxuJm1zKX1yZXR1cm4gZS5hfWZ1bmN0aW9uIG13bih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMyksbG4odC5hLG4sbiksbG4odC5iLG4sbikscz1neShuKSxzLmMubGVuZ3RoIT0wKWZvcih0LmQmJnQuZC5sZyhzKSxsbih0LmEsbiwoQW4oMCxzLmMubGVuZ3RoKSx1KHMuY1swXSwzMykpKSxsbih0LmIsbix1KEZlKHMscy5jLmxlbmd0aC0xKSwzMykpO2dpdChzKS5jLmxlbmd0aCE9MDspcz1naXQocyksdC5kJiZ0LmQubGcocyksbG4odC5hLG4sKEFuKDAscy5jLmxlbmd0aCksdShzLmNbMF0sMzMpKSksbG4odC5iLG4sdShGZShzLHMuYy5sZW5ndGgtMSksMzMpKX1mdW5jdGlvbiB5d24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEM7Zm9yKG49MCxkPW5ldyBTKHQuZCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTAxKSxoLmkmJihoLmkuYz1uKyspO2ZvcihlPVhiKGRsLFt0ZSxpMF0sWzE3NywyNV0sMTYsW24sbl0sMiksQz10LmQscz0wO3M8Qy5jLmxlbmd0aDtzKyspaWYodz0oQW4ocyxDLmMubGVuZ3RoKSx1KEMuY1tzXSwxMDEpKSx3LmkpZm9yKG89cysxO288Qy5jLmxlbmd0aDtvKyspaz0oQW4obyxDLmMubGVuZ3RoKSx1KEMuY1tvXSwxMDEpKSxrLmkmJihyPXMwbih3LGspLGVbdy5pLmNdW2suaS5jXT1yLGVbay5pLmNdW3cuaS5jXT1yKTtyZXR1cm4gZX1mdW5jdGlvbiBHNXQodCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBoPW5ldyBKSHQoZSxuKSx0LmE/cj8ocz11KEpuKHQuYixlKSwyODMpLCsrcy5hLGguZD1yLmQsaC5lPXIuZSxoLmI9cixoLmM9cixyLmU/ci5lLmM9aDp1KEpuKHQuYixlKSwyODMpLmI9aCxyLmQ/ci5kLmI9aDp0LmE9aCxyLmQ9aCxyLmU9aCk6KHQuZS5iPWgsaC5kPXQuZSx0LmU9aCxzPXUoSm4odC5iLGUpLDI4Mykscz8oKytzLmEsbz1zLmMsby5jPWgsaC5lPW8scy5jPWgpOihraSh0LmIsZSxzPW5ldyBJd3QoaCkpLCsrdC5jKSk6KHQuYT10LmU9aCxraSh0LmIsZSxuZXcgSXd0KGgpKSwrK3QuYyksKyt0LmQsaH1mdW5jdGlvbiBweSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKG49bmV3IFJlZ0V4cChlLCJnIiksdz1QdChBZSx0ZSwyLDAsNiwxKSxyPTAsaz10LG89bnVsbDs7KWlmKGQ9bi5leGVjKGspLGQ9PW51bGx8fGs9PSIiKXt3W3JdPWs7YnJlYWt9ZWxzZSBoPWQuaW5kZXgsd1tyXT1rLnN1YnN0cigwLGgpLGs9RGwoayxoK2RbMF0ubGVuZ3RoLGsubGVuZ3RoKSxuLmxhc3RJbmRleD0wLG89PWsmJih3W3JdPWsuc3Vic3RyKDAsMSksaz1rLnN1YnN0cigxKSksbz1rLCsrcjtpZih0Lmxlbmd0aD4wKXtmb3Iocz13Lmxlbmd0aDtzPjAmJndbcy0xXT09IiI7KS0tcztzPHcubGVuZ3RoJiYody5sZW5ndGg9cyl9cmV0dXJuIHd9ZnVuY3Rpb24gVjV0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKE09U28oZSksaz1udWxsLHM9ITEsZD0wLEM9TGMoTS5hKS5pO2Q8QzsrK2QpaD11KEVEKE0sZCwobz11KFN0KExjKE0uYSksZCksODcpLHc9by5jLEV0KHcsODgpP3UodywyNik6KGRuKCksV2gpKSksMjYpLG49VjV0KHQsaCksbi5kYygpfHwoaz8oc3x8KHM9ITAsaz1uZXcgTmooaykpLGsuR2MobikpOms9bik7cmV0dXJuIHI9c3BuKHQsZSksci5kYygpP2t8fCh2bigpLHZuKCksaW8pOms/KHN8fChrPW5ldyBOaihrKSksay5HYyhyKSxrKTpyfWZ1bmN0aW9uIG9hdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2ZvcihNPVNvKGUpLGs9bnVsbCxyPSExLGQ9MCxDPUxjKE0uYSkuaTtkPEM7KytkKW89dShFRChNLGQsKHM9dShTdChMYyhNLmEpLGQpLDg3KSx3PXMuYyxFdCh3LDg4KT91KHcsMjYpOihkbigpLFdoKSkpLDI2KSxuPW9hdCh0LG8pLG4uZGMoKXx8KGs/KHJ8fChyPSEwLGs9bmV3IE5qKGspKSxrLkdjKG4pKTprPW4pO3JldHVybiBoPU5wbih0LGUpLGguZGMoKT9rfHwodm4oKSx2bigpLGlvKTprPyhyfHwoaz1uZXcgTmooaykpLGsuR2MoaCksayk6aH1mdW5jdGlvbiB3RCh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKEV0KGUsNzIpKXJldHVybiBCYSh0LGUsbik7Zm9yKGQ9bnVsbCxvPW51bGwscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYocz1yW2hdLHlpKGUscy5kZCgpKSYmKG89cy5haygpLEV0KG8sOTkpJiZ1KG8sMTgpLkJiJmRjKSl7ZD1zO2JyZWFrfXJldHVybiBkJiYobWwodC5lKSYmKHc9by4kaigpP3pwKHQsNCxvLGUsbnVsbCxFRSh0LG8sZSxFdChvLDk5KSYmKHUobywxOCkuQmImWWEpIT0wKSwhMCk6enAodCxvLktqKCk/MjoxLG8sZSxvLnpqKCksLTEsITApLG4/bi5FaSh3KTpuPXcpLG49d0QodCxkLG4pKSxufWZ1bmN0aW9uIHh3bih0KXt2YXIgZSxuLHIscztyPXQubyxCbSgpLHQuQS5kYygpfHx5aSh0LkEsdDd0KT9zPXIuYToocz11RCh0LmYpLHQuQS5IYygoX2woKSxlTikpJiYhdC5CLkhjKChjbCgpLGVBKSkmJihzPWIuTWF0aC5tYXgocyx1RCh1KGdvKHQucCwoYmUoKSxObikpLDI0NCkpKSxzPWIuTWF0aC5tYXgocyx1RCh1KGdvKHQucCxtciksMjQ0KSkpKSxlPUFuZSh0KSxlJiYocz1iLk1hdGgubWF4KHMsZS5hKSkpLGplKFJlKHQuZS55ZigpLldlKChjaSgpLGpWKSkpKT9yLmE9Yi5NYXRoLm1heChyLmEscyk6ci5hPXMsbj10LmYuaSxuLmM9MCxuLmI9cyxmYXQodC5mKX1mdW5jdGlvbiBrd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYobj1lLkhoKHQuYSksbiYmKHc9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSwibWVtYmVyVHlwZXMiKSksdyE9bnVsbCkpe2ZvcihrPW5ldyBsZSxvPXB5KHcsIlxcdyIpLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLHI9cy5sYXN0SW5kZXhPZigiIyIpLEM9cj09LTE/JDJ0KHQsZS5BaigpLHMpOnI9PTA/cEkodCxudWxsLHMuc3Vic3RyKDEpKTpwSSh0LHMuc3Vic3RyKDAscikscy5zdWJzdHIocisxKSksRXQoQywxNDgpJiZ1ZShrLHUoQywxNDgpKTtyZXR1cm4ga31yZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIEV3bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztmb3Iod3IobiwkZmUsMSksdC5iZihlKSxvPTA7dC5kZihvKTspe2ZvcihDPW5ldyBTKGUuZSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKHc9dShKKEMpLDE0NCksZD1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtlLmUsZS5kLGUuYl0pKSk7enIoZCk7KWg9dShMcihkKSwzNTcpLGghPXcmJihzPXQuYWYoaCx3KSxzJiZMaSh3LmEscykpO2ZvcihrPW5ldyBTKGUuZSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTQ0KSxyPXcuYSxQYWUociwtdC5kLC10LmQsdC5kLHQuZCksTGkody5kLHIpLEdmKHIpO3QuY2YoKSwrK299b3Iobil9ZnVuY3Rpb24gVHduKHQsZSxuKXt2YXIgcixzLG8saDtpZihoPWF1KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKG89MDtvPHQuaTsrK28paWYocz1yW29dLGgucmwocy5haygpKSYmeWkocyxuKSlyZXR1cm4gZHkodCxvKSwhMH1lbHNlIGlmKG4hPW51bGwpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJnlpKG4scy5kZCgpKSlyZXR1cm4gZHkodCxvKSwhMH1lbHNlIGZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJnMuZGQoKT09bnVsbClyZXR1cm4gZHkodCxvKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBDd24odCxlKXt2YXIgbixyLHMsbyxoO2Zvcih0LmM9PW51bGx8fHQuYy5sZW5ndGg8ZS5jLmxlbmd0aD90LmM9UHQoZGwsaTAsMjUsZS5jLmxlbmd0aCwxNiwxKTpQOSh0LmMpLHQuYT1uZXcgbGUscj0wLGg9bmV3IFMoZSk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksMTApLHMucD1yKys7Zm9yKG49bmV3IFFpLG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLHQuY1tzLnBdfHwoeW9lKHQscyksbi5iPT0wfHwoUW4obi5iIT0wKSx1KG4uYS5hLmMsMTUpKS5nYygpPHQuYS5jLmxlbmd0aD9xVnQobix0LmEpOktiKG4sdC5hKSx0LmE9bmV3IGxlKTtyZXR1cm4gbn1mdW5jdGlvbiBfd24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoaD11KFN0KGUsMCksMzMpLHl1KGgsMCkseHUoaCwwKSxGPW5ldyBsZSxGLmNbRi5jLmxlbmd0aF09aCxkPWgsbz1uZXcgVG50KHQuYSxoLmcsaC5mLCh5RSgpLEhTKSksSD0xO0g8ZS5pO0grKylWPXUoU3QoZSxIKSwzMyksdz12YXQodCxuNSxWLGQsbyxGLG4pLGs9dmF0KHQsUjYsVixkLG8sRixuKSxDPXZhdCh0LHFTLFYsZCxvLEYsbiksTT12YXQodCx6UyxWLGQsbyxGLG4pLHM9anluKHQsdyxrLEMsTSxWLGQscikseXUoVixzLmQpLHh1KFYscy5lKSxHayhzLEhTKSxvPXMsZD1WLEYuY1tGLmMubGVuZ3RoXT1WO3JldHVybiBvfWZ1bmN0aW9uIE91ZSh0KXtTdih0LG5ldyB3MihFdih5dihrdih4dihuZXcgcGcsJEUpLCJFTEsgU1BPckUgT3ZlcmxhcCBSZW1vdmFsIiksJ0Egbm9kZSBvdmVybGFwIHJlbW92YWwgYWxnb3JpdGhtIHByb3Bvc2VkIGJ5IE5hY2htYW5zb24gZXQgYWwuIGluICJOb2RlIG92ZXJsYXAgcmVtb3ZhbCBieSBncm93aW5nIGEgdHJlZSIuJyksbmV3IGNaKSkpLHhlKHQsJEUsX2N0LERlKGdTdCkpLHhlKHQsJEUsd3csZFN0KSx4ZSh0LCRFLGt5LDgpLHhlKHQsJEUsTGN0LERlKEMzZSkpLHhlKHQsJEUsaTh0LERlKGhTdCkpLHhlKHQsJEUsczh0LERlKGZTdCkpLHhlKHQsJEUsS0QsKEZuKCksITEpKX1mdW5jdGlvbiBOdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKGg9Rm0oZS5jLG4sciksTT1uZXcgUyhlLmEpO00uYTxNLmMuYy5sZW5ndGg7KXtmb3IoQz11KEooTSksMTApLExpKEMubixoKSxIPW5ldyBTKEMuaik7SC5hPEguYy5jLmxlbmd0aDspZm9yKEY9dShKKEgpLDExKSxvPW5ldyBTKEYuZyk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDE3KSxKbShzLmEsaCksZD11KFEocywoVGUoKSxfbykpLDc0KSxkJiZKbShkLGgpLGs9bmV3IFMocy5iKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSw3MCksTGkody5uLGgpO3VlKHQuYSxDKSxDLmE9dH19ZnVuY3Rpb24gU3duKHQsZSl7dmFyIG4scixzLG8saDtpZih3cihlLCJOb2RlIGFuZCBQb3J0IExhYmVsIFBsYWNlbWVudCBhbmQgTm9kZSBTaXppbmciLDEpLGJVdCgoejkoKSxuZXcgdHJ0KHQsITAsITAsbmV3IE5ZKSkpLHUoUSh0LChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkpZm9yKG89dShRKHQsKFRlKCkscXkpKSwyMSkscz1vLkhjKChRdSgpLHROKSksaD1qZShSZShRKHQsbEN0KSkpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyOSksdXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKG4uYSwxNikpLG5ldyBqZCksbmV3IHdLdChvLHMsaCkpO29yKGUpfWZ1bmN0aW9uIEF3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihuPWUuSGgodC5hKSxuJiYoZD1CcihZZigoIW4uYiYmKG4uYj1uZXcgeWwoKGRuKCksUWEpLGNjLG4pKSxuLmIpLG1IKSksZCE9bnVsbCkpc3dpdGNoKHM9ZGooZCxFdSgzNSkpLHI9ZS5IaigpLHM9PS0xPyhoPWtDKHQsRmwocikpLG89ZCk6cz09MD8oaD1udWxsLG89ZC5zdWJzdHIoMSkpOihoPWQuc3Vic3RyKDAscyksbz1kLnN1YnN0cihzKzEpKSwkdihFbyh0LGUpKSl7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gRmNuKHQscixoLG8pO2Nhc2UgMDpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gQmNuKHQscixoLG8pfXJldHVybiBudWxsfWZ1bmN0aW9uIFU1dCh0LGUsbil7dmFyIHIscyxvLGgsZDtpZihoPSh0bygpLHUoZSw2NikuT2ooKSksVjAodC5lLGUpKXtpZihlLmhpKCkmJm1xKHQsZSxuLEV0KGUsOTkpJiYodShlLDE4KS5CYiZZYSkhPTApKXJldHVybiExfWVsc2UgZm9yKGQ9YXUodC5lLlRnKCksZSkscj11KHQuZywxMTkpLG89MDtvPHQuaTsrK28paWYocz1yW29dLGQucmwocy5haygpKSlyZXR1cm4oaD95aShzLG4pOm49PW51bGw/cy5kZCgpPT1udWxsOnlpKG4scy5kZCgpKSk/ITE6KHUodTQodCxvLGg/dShuLDcyKTpZZChlLG4pKSw3MiksITApO3JldHVybiBNcih0LGg/dShuLDcyKTpZZChlLG4pKX1mdW5jdGlvbiBtRCh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2lmKHQuZCl0aHJvdyBydChuZXcgRm8oKEwwKFp1dCksYm90K1p1dC5rK3ZvdCkpKTtmb3IodC5jPT0oYW8oKSxjMCkmJlQ0KHQsamgpLG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE4OSksZS5lPTA7Zm9yKGg9bmV3IFModC5hLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSw4MSksby5vPVRzLHM9by5mLktjKCk7cy5PYigpOylyPXUocy5QYigpLDgxKSwrK3IuZC5lO2Zvcih4NG4odCksdz1uZXcgUyh0LmEuYik7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksODEpLGQuaz0hMDtyZXR1cm4gdH1mdW5jdGlvbiBMd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2ZvcihkPW5ldyBHYWUodCksbj1uZXcgUWksaHMobixlLG4uYy5iLG4uYyk7bi5iIT0wOyl7Zm9yKHI9dShuLmI9PTA/bnVsbDooUW4obi5iIT0wKSxjaChuLG4uYS5hKSksMTEzKSxyLmQucD0xLGg9bmV3IFMoci5lKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSw0MDkpLGhhZShkLHMpLGs9cy5kLGsuZC5wPT0wJiZocyhuLGssbi5jLmIsbi5jKTtmb3Iobz1uZXcgUyhyLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDQwOSksaGFlKGQscyksdz1zLmMsdy5kLnA9PTAmJmhzKG4sdyxuLmMuYixuLmMpfXJldHVybiBkfWZ1bmN0aW9uIFB1ZSh0KXt2YXIgZSxuLHIscyxvO2lmKHI9WHQoeWUocWUodCwoY2koKSxRM2UpKSkpLHIhPTEpZm9yKHNqKHQscip0Lmcscip0LmYpLG49R1llKGV0bigoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpLG5ldyBOWikpLG89QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbKCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdC5uKSwoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpLG5dKSkpO3pyKG8pOylzPXUoTHIobyksNDcwKSxzLkdnKHIqcy5EZygpLHIqcy5FZygpKSxzLkZnKHIqcy5DZygpLHIqcy5CZygpKSxlPXUocy5XZShKU3QpLDgpLGUmJihlLmEqPXIsZS5iKj1yKX1mdW5jdGlvbiBNd24odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGO2ZvcihoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSxGPXNJKG8uYSksaz1GLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpc3dpdGNoKHc9a1tDXSx1KFEodywoVGUoKSxjdSkpLDE2MykuZyl7Y2FzZSAxOnJ2bih3KSxrbyh3LGUpLG5zZSh3LCEwLHIpO2JyZWFrO2Nhc2UgMzpxMm4odyksa28odyxuKSxuc2UodywhMSxzKX1mb3IoZD1uZXcgaGEodC5iLDApO2QuYjxkLmQuZ2MoKTspKFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpLmEuYy5sZW5ndGg9PTAmJkVsKGQpfWZ1bmN0aW9uIEl3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKG49ZS5IaCh0LmEpLG4mJih3PUJyKFlmKCghbi5iJiYobi5iPW5ldyB5bCgoZG4oKSxRYSksY2MsbikpLG4uYiksQjh0KSksdyE9bnVsbCkpe2ZvcihyPW5ldyBsZSxvPXB5KHcsIlxcdyIpLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLGhuKHMsIiMjb3RoZXIiKT91ZShyLCIhIyMiK2tDKHQsRmwoZS5IaigpKSkpOmhuKHMsIiMjbG9jYWwiKT9yLmNbci5jLmxlbmd0aF09bnVsbDpobihzLHRPKT91ZShyLGtDKHQsRmwoZS5IaigpKSkpOnIuY1tyLmMubGVuZ3RoXT1zO3JldHVybiByfXJldHVybiB2bigpLHZuKCksaW99ZnVuY3Rpb24gRHduKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49bmV3IHRmLHI9dShQbChwdShuZXcgVG4obnVsbCxuZXcgX24odC5mLDE2KSksbiksWW0obmV3IGNuLG5ldyBsaSxuZXcgZGksbmV3IEVlLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxMeSksR2xdKSkpLDIxKSxzPXIuZ2MoKSxyPXUoUGwocHUobmV3IFRuKG51bGwsbmV3IF9uKGUuZiwxNikpLG4pLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbTHksR2xdKSkpLDIxKSxvPXIuZ2MoKSxzPXM9PTE/MTowLG89bz09MT8xOjAsczxvPy0xOnM9PW8/MDoxfWZ1bmN0aW9uIE93bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKGQ9dC5pLHM9amUoUmUoUShkLChUZSgpLCR5KSkpKSxDPTAscj0wLGs9bmV3IFModC5nKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxNyksaD1WYSh3KSxvPWgmJnMmJmplKFJlKFEodyxQMikpKSxGPXcuZC5pLGgmJm8/KytyOmgmJiFvPysrQzpGYShGKS5lPT1kPysrcjorK0M7Zm9yKG49bmV3IFModC5lKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxNyksaD1WYShlKSxvPWgmJnMmJmplKFJlKFEoZSxQMikpKSxNPWUuYy5pLGgmJm8/KytDOmgmJiFvPysrcjpGYShNKS5lPT1kPysrQzorK3I7cmV0dXJuIEMtcn1mdW5jdGlvbiB4NCh0LGUsbixyKXt0aGlzLmU9dCx0aGlzLms9dShRKHQsKHNlKCksWTQpKSwzMDQpLHRoaXMuZz1QdChvMCx6ZywxMCxlLDAsMSksdGhpcy5iPVB0KGNhLHRlLDMzMyxlLDcsMSksdGhpcy5hPVB0KG8wLHpnLDEwLGUsMCwxKSx0aGlzLmQ9UHQoY2EsdGUsMzMzLGUsNywxKSx0aGlzLmo9UHQobzAsemcsMTAsZSwwLDEpLHRoaXMuaT1QdChjYSx0ZSwzMzMsZSw3LDEpLHRoaXMucD1QdChjYSx0ZSwzMzMsZSw3LDEpLHRoaXMubj1QdChCcyx0ZSw0NzYsZSw4LDEpLHlNKHRoaXMubiwoRm4oKSwhMSkpLHRoaXMuZj1QdChCcyx0ZSw0NzYsZSw4LDEpLHlNKHRoaXMuZiwhMCksdGhpcy5vPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gRnVlKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKCFlLmRjKCkpaWYodShlLlhiKDApLDI4NikuZD09KGk2KCksT3kpKWgxbih0LGUpO2Vsc2UgZm9yKHI9ZS5LYygpO3IuT2IoKTspe3N3aXRjaChuPXUoci5QYigpLDI4Niksbi5kLmcpe2Nhc2UgNTpwRSh0LG4seGxuKHQsbikpO2JyZWFrO2Nhc2UgMDpwRSh0LG4sKGg9bi5mLW4uYysxLGQ9KGgtMSkvMnwwLG4uYytkKSk7YnJlYWs7Y2FzZSA0OnBFKHQsbixQYW4odCxuKSk7YnJlYWs7Y2FzZSAyOmNpZShuKSxwRSh0LG4sKG89YjR0KG4pLG8/bi5jOm4uZikpO2JyZWFrO2Nhc2UgMTpjaWUobikscEUodCxuLChzPWI0dChuKSxzP24uZjpuLmMpKX1jMG4obi5hKX19ZnVuY3Rpb24gTnduKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYoIWUuZSl7Zm9yKGUuZT0hMCxyPWUuZC5hLmVjKCkuS2MoKTtyLk9iKCk7KXtpZihuPXUoci5QYigpLDE3KSxlLm8mJmUuZC5hLmdjKCk8PTEpe2g9ZS5hLmMsZD1lLmEuYytlLmEuYix3PW5ldyAkZShoKyhkLWgpLzIsZS5iKSxuaSh1KGUuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5hLHcpO2NvbnRpbnVlfWlmKHM9dShKbihlLmMsbiksNDU5KSxzLmJ8fHMuYyl7dnduKHQsbixlKTtjb250aW51ZX1vPXQuZD09KHRFKCksSVMpJiYocy5kfHxzLmUpJiZBcG4odCxlKSYmZS5kLmEuZ2MoKTw9MSxvP3Q0bihuLGUpOlB2bih0LG4sZSl9ZS5rJiZ2YShlLmQsbmV3IEUzKX19ZnVuY3Rpb24gVzV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3IoRj1vLGQ9KHIrcykvMitGLHR0PW4qYi5NYXRoLmNvcyhkKSxndD1uKmIuTWF0aC5zaW4oZCksTHQ9dHQtZS5nLzIsX3Q9Z3QtZS5mLzIseXUoZSxMdCkseHUoZSxfdCksTT10LmEuamcoZSksWT0yKmIuTWF0aC5hY29zKG4vbit0LmMpLFk8cy1yPyhIPVkvTSxoPShyK3MtWSkvMik6KEg9KHMtcikvTSxoPXIpLFY9Z3koZSksdC5lJiYodC5lLmtnKHQuZCksdC5lLmxnKFYpKSxrPW5ldyBTKFYpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDMzKSxDPXQuYS5qZyh3KSxXNXQodCx3LG4rdC5jLGgsaCtIKkMsbyksaCs9SCpDfWZ1bmN0aW9uIFB3bih0LGUsbil7dmFyIHI7c3dpdGNoKHI9bi5xLmdldE1vbnRoKCksZSl7Y2FzZSA1OlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0pW3JdKTticmVhaztjYXNlIDQ6VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyRhdCx6YXQscWF0LEhhdCxsNixHYXQsVmF0LFVhdCxXYXQsS2F0LFlhdCxYYXRdKVtyXSk7YnJlYWs7Y2FzZSAzOlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixsNiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pW3JdKTticmVhaztkZWZhdWx0OlhkKHQscisxLGUpfX1mdW5jdGlvbiBjYXQodCxlKXt2YXIgbixyLHMsbyxoO2lmKHdyKGUsIk5ldHdvcmsgc2ltcGxleCIsMSksdC5lLmEuYy5sZW5ndGg8MSl7b3IoZSk7cmV0dXJufWZvcihvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMjEpLHMuZT0wO2ZvcihoPXQuZS5hLmMubGVuZ3RoPj00MCxoJiZrbW4odCksX3luKHQpLHN2bih0KSxuPVlyZSh0KSxyPTA7biYmcjx0LmY7KVJ3bih0LG4saWJuKHQsbikpLG49WXJlKHQpLCsrcjtoJiZBZG4odCksdC5hP3dibih0LE11ZSh0KSk6TXVlKHQpLHQuYj1udWxsLHQuZD1udWxsLHQucD1udWxsLHQuYz1udWxsLHQuZz1udWxsLHQuaT1udWxsLHQubj1udWxsLHQubz1udWxsLG9yKGUpfWZ1bmN0aW9uIEZ3bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEY7Zm9yKHc9bmV3ICRlKG4sciksbmEodyx1KFEoZSwoR3AoKSxsUykpLDgpKSxGPW5ldyBTKGUuZSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTQ0KSxMaShNLmQsdyksdWUodC5lLE0pO2ZvcihkPW5ldyBTKGUuYyk7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwyODIpLG89bmV3IFMoaC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw1NTkpLExpKHMuZCx3KTt1ZSh0LmMsaCl9Zm9yKEM9bmV3IFMoZS5kKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw0NDcpLExpKGsuZCx3KSx1ZSh0LmQsayl9ZnVuY3Rpb24gSzV0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iodz1uZXcgUyhlLmopO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSwxMSkscz1uZXcgUzEoZC5iKTtWbyhzLmEpfHxWbyhzLmIpOylyPXUoVm8ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxuPXIuYz09ZD9yLmQ6ci5jLG89bi5pLGUhPW8mJihrPXUoUShyLChUZSgpLHc3KSksMTkpLmEsazwwJiYoaz0wKSxoPW8ucCx0LmJbaF09PTAmJihyLmQ9PW4/KHQuYVtoXS09aysxLHQuYVtoXTw9MCYmdC5jW2hdPjAmJm5pKHQuZixvKSk6KHQuY1toXS09aysxLHQuY1toXTw9MCYmdC5hW2hdPjAmJm5pKHQuZSxvKSkpKX1mdW5jdGlvbiBCd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2ZvcihkPW5ldyBMcCh1KEFyKG5ldyBGZCksNjIpKSxrPVRzLG49bmV3IFModC5kKTtuLmE8bi5jLmMubGVuZ3RoOyl7Zm9yKGU9dShKKG4pLDIyMiksaz1lLmMuYztkLmEuYyE9MCYmKHc9dShoZW4ocGFuKGQuYSkpLDIyMiksdy5jLmMrdy5jLmI8ayk7KUlDKGQuYSx3KSE9bnVsbDtmb3IoaD0ocz1uZXcgdkMobmV3IGdDKG5ldyB5KGQuYSkuYSkuYiksbmV3IGcocykpO21NKGguYS5hKTspbz0ocj13aihoLmEpLHUoci5jZCgpLDIyMikpLG5pKG8uYixlKSxuaShlLmIsbyk7cHooZC5hLGUsKEZuKCksSTIpKT09bnVsbH19ZnVuY3Rpb24gQnVlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKG89bmV3IFljKGUuYy5sZW5ndGgpLGs9bmV3IFMoZSk7ay5hPGsuYy5jLmxlbmd0aDspaD11KEooayksMTApLHVlKG8sdC5iW2guYy5wXVtoLnBdKTtmb3IoVXluKHQsbyxuKSxNPW51bGw7TT1XM24obyk7KUJtbih0LHUoTS5hLDIzMyksdShNLmIsMjMzKSxvKTtmb3IoZS5jPVB0KFhuLEllLDEsMCw1LDEpLHM9bmV3IFMobyk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDIzMyksZD1yLmQsdz0wLEM9ZC5sZW5ndGg7dzxDOysrdyloPWRbd10sZS5jW2UuYy5sZW5ndGhdPWgsdC5hW2guYy5wXVtoLnBdLmE9eDEoci5nLHIuZFswXSkuYX1mdW5jdGlvbiBZNXQodCxlKXt2YXIgbixyLHMsbztpZigwPChFdCh0LDE0KT91KHQsMTQpLmdjKCk6TjAodC5LYygpKSkpe2lmKHM9ZSwxPHMpe2ZvcigtLXMsbz1uZXcgRlEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDg2KSxvPUwxKGN0KG90KEIxLDEpLEllLDIwLDAsW28sbmV3IENwKG4pXSkpO3JldHVybiBZNXQobyxzKX1pZihzPDApe2ZvcihvPW5ldyBCUSxyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksODYpLG89TDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbbyxuZXcgQ3AobildKSk7aWYoMDwoRXQobywxNCk/dShvLDE0KS5nYygpOk4wKG8uS2MoKSkpKXJldHVybiBZNXQobyxzKX19cmV0dXJuIHUobGoodC5LYygpKSw4Nil9ZnVuY3Rpb24gY2woKXtjbD1aLE03PW5ldyB6MygiREVGQVVMVF9NSU5JTVVNX1NJWkUiLDApLGlOPW5ldyB6MygiTUlOSU1VTV9TSVpFX0FDQ09VTlRTX0ZPUl9QQURESU5HIiwxKSxWVj1uZXcgejMoIkNPTVBVVEVfUEFERElORyIsMiksZUE9bmV3IHozKCJPVVRTSURFX05PREVfTEFCRUxTX09WRVJIQU5HIiwzKSxVVj1uZXcgejMoIlBPUlRTX09WRVJIQU5HIiw0KSxLVj1uZXcgejMoIlVOSUZPUk1fUE9SVF9TUEFDSU5HIiw1KSxXVj1uZXcgejMoIlNQQUNFX0VGRklDSUVOVF9QT1JUX0xBQkVMUyIsNiksdmZ0PW5ldyB6MygiRk9SQ0VfVEFCVUxBUl9OT0RFX0xBQkVMUyIsNyksck49bmV3IHozKCJBU1lNTUVUUklDQUwiLDgpfWZ1bmN0aW9uIHVhdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYoZSl7aWYobj0obz1lLlRnKCksbz9GbChvKS5OaCgpLkpoKG8pOm51bGwpLG4pe2ZvcihwMih0LGUsbikscz1lLlRnKCksdz0wLGs9KHMuaT09bnVsbCYmcGQocykscy5pKS5sZW5ndGg7dzxrOysrdylkPShyPShzLmk9PW51bGwmJnBkKHMpLHMuaSksdz49MCYmdzxyLmxlbmd0aD9yW3ddOm51bGwpLGQuSWooKSYmIWQuSmooKSYmKEV0KGQsMzIyKT9XaG4odCx1KGQsMzQpLGUsbik6KGg9dShkLDE4KSxoLkJiJmRjJiZyZG4odCxoLGUsbikpKTtlLmtoKCkmJnUobiw0OSkudmgodShlLDQ5KS5xaCgpKX1yZXR1cm4gbn1lbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIFJ3bih0LGUsbil7dmFyIHIscyxvO2lmKCFlLmYpdGhyb3cgcnQobmV3IFBuKCJHaXZlbiBsZWF2ZSBlZGdlIGlzIG5vIHRyZWUgZWRnZS4iKSk7aWYobi5mKXRocm93IHJ0KG5ldyBQbigiR2l2ZW4gZW50ZXIgZWRnZSBpcyBhIHRyZWUgZWRnZSBhbHJlYWR5LiIpKTtmb3IoZS5mPSExLGYydCh0LnAsZSksbi5mPSEwLE5zKHQucCxuKSxyPW4uZS5lLW4uZC5lLW4uYSwkc3QodCxuLmUsZSl8fChyPS1yKSxvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMjEpLCRzdCh0LHMsZSl8fChzLmUrPXIpO3Quaj0xLFA5KHQuYyksSjR0KHQsdShKKG5ldyBTKHQuZS5hKSksMTIxKSksVmxlKHQpfWZ1bmN0aW9uIFJ1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihkPXUoUShlLChUZSgpLG9zKSksOTgpLGQ9PShvYSgpLGgwKXx8ZD09VmMpZm9yKHM9bmV3ICRlKGUuZi5hK2UuZC5iK2UuZC5jLGUuZi5iK2UuZC5kK2UuZC5hKS5iLGg9bmV3IFModC5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksby5rPT0oR24oKSx4cykmJihuPXUoUShvLChzZSgpLG9jKSksNjEpLCEobiE9KGJlKCksSG4pJiZuIT1CbikmJihyPVh0KHllKFEobyxEdykpKSxkPT1oMCYmKHIqPXMpLG8ubi5iPXItdShRKG8sUHcpLDgpLmIsZnoobywhMSwhMCkpKX1mdW5jdGlvbiBqdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYocm9uKHQsZSxuKSxvPWVbbl0sSD1yPyhiZSgpLEJuKTooYmUoKSxIbiksUlhlKGUubGVuZ3RoLG4scikpe2ZvcihzPWVbcj9uLTE6bisxXSxtbXQodCxzLHI/KHNvKCksZXUpOihzbygpLEp1KSksdz1vLEM9MCxGPXcubGVuZ3RoO0M8RjsrK0MpaD13W0NdLFIzdCh0LGgsSCk7Zm9yKG1tdCh0LG8scj8oc28oKSxKdSk6KHNvKCksZXUpKSxkPXMsaz0wLE09ZC5sZW5ndGg7azxNOysrayloPWRba10saC5lfHxSM3QodCxoLEhJKEgpKX1lbHNlIGZvcihkPW8saz0wLE09ZC5sZW5ndGg7azxNOysrayloPWRba10sUjN0KHQsaCxIKTtyZXR1cm4hMX1mdW5jdGlvbiBqd24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7dz1ZbyhlLG4pLChuPT0oYmUoKSxtcil8fG49PUJuKSYmKHc9RXQodywxNTIpP1Z4KHUodywxNTIpKTpFdCh3LDEzMSk/dSh3LDEzMSkuYTpFdCh3LDU0KT9uZXcgbXYodyk6bmV3IE1tKHcpKSxoPSExO2RvIGZvcihzPSExLG89MDtvPHcuZ2MoKS0xO28rKylrPXUody5YYihvKSwxMSksZD11KHcuWGIobysxKSwxMSksYjBuKHQsayxkLHIpJiYoaD0hMCx4cnQodC5hLHUody5YYihvKSwxMSksdSh3LlhiKG8rMSksMTEpKSxDPXUody5YYihvKzEpLDExKSx3Ll9jKG8rMSx1KHcuWGIobyksMTEpKSx3Ll9jKG8sQykscz0hMCk7d2hpbGUocyk7cmV0dXJuIGh9ZnVuY3Rpb24gJHduKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFY7aWYobWwodC5lKSl7aWYoZSE9biYmKHM9dSh0LmcsMTE5KSxIPXNbbl0saD1ILmFrKCksVjAodC5lLGgpKSl7Zm9yKFY9YXUodC5lLlRnKCksaCksdz0tMSxkPS0xLHI9MCxrPTAsTT1lPm4/ZTpuO2s8PU07KytrKWs9PW4/ZD1yKys6KG89c1trXSxDPVYucmwoby5haygpKSxrPT1lJiYodz1rPT1NJiYhQz9yLTE6ciksQyYmKytyKTtyZXR1cm4gRj11KHRfKHQsZSxuKSw3MiksZCE9dyYmS2sodCxuZXcgZ0kodC5lLDcsaCxkZShkKSxILmRkKCksdykpLEZ9fWVsc2UgcmV0dXJuIHUocXN0KHQsZSxuKSw3Mik7cmV0dXJuIHUodF8odCxlLG4pLDcyKX1mdW5jdGlvbiB6d24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iod3IoZSwiUG9ydCBvcmRlciBwcm9jZXNzaW5nIiwxKSx3PXUoUSh0LChUZSgpLGhDdCkpLDQyMSkscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxoPXUoUShzLG9zKSw5OCksZD1zLmosaD09KG9hKCksRzIpfHxoPT1oMHx8aD09VmM/KHZuKCksWHMoZCx2VHQpKTpoIT1IMSYmaCE9eWImJih2bigpLFhzKGQsV2JlKSxuZm4oZCksdz09KHlJKCksZ2h0KSYmWHMoZCxVYmUpKSxzLmk9ITAsWDR0KHMpO29yKGUpfWZ1bmN0aW9uIHF3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2Zvcih3PW5ldyBDcixlPW5ldyBHdHQsaD10LktjKCk7aC5PYigpOylzPXUoaC5QYigpLDEwKSxkPUR2KGJNKG5ldyBVYixzKSxlKSxzdSh3LmYscyxkKTtmb3Iobz10LktjKCk7by5PYigpOylmb3Iocz11KG8uUGIoKSwxMCkscj1uZXcgYXIobHIoTXMocykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSwxNyksIVZhKG4pJiZ2ZihvZihhZihzZihjZihuZXcgRWgsYi5NYXRoLm1heCgxLHUoUShuLChUZSgpLGZDdCkpLDE5KS5hKSksMSksdShKbih3LG4uYy5pKSwxMjEpKSx1KEpuKHcsbi5kLmkpLDEyMSkpKTtyZXR1cm4gZX1mdW5jdGlvbiAkdWUoKXskdWU9WixJbWU9YmkobmV3IEhzLChXYSgpLHFjKSwocm8oKSxuVHQpKSxRQ3Q9YmkobmV3IEhzLG91LGZHKSxPbWU9S3UoYmkobmV3IEhzLG91LHlHKSxJbyxtRyksTW1lPUt1KGJpKGJpKG5ldyBIcyxvdSxRN3QpLHFjLFo3dCksSW8sSjd0KSxObWU9YXcoYXcoT1IoS3UoYmkobmV3IEhzLEFkLFRHKSxJbyxFRykscWMpLGtHKSxDRyksRG1lPUt1KG5ldyBIcyxJbyxyVHQpLEFtZT1LdShiaShiaShiaShuZXcgSHMsbGIsZ0cpLHFjLGJHKSxxYyxlNyksSW8scEcpLExtZT1LdShiaShiaShuZXcgSHMscWMsZTcpLHFjLGhHKSxJbyxsRyl9ZnVuY3Rpb24gSHduKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRjtmb3Ioaz1lcmUoZSktZXJlKHQpLGg9TWFlKGUsayksdz1ydSgwLDAsMCk7az49MCYmKGQ9R2ZuKHQsaCksIShkJiYoazwyMj93Lmx8PTE8PGs6azw0ND93Lm18PTE8PGstMjI6dy5ofD0xPDxrLTQ0LHQubD09MCYmdC5tPT0wJiZ0Lmg9PTApKSk7KUM9aC5tLE09aC5oLEY9aC5sLGguaD1NPj4+MSxoLm09Qz4+PjF8KE0mMSk8PDIxLGgubD1GPj4+MXwoQyYxKTw8MjEsLS1rO3JldHVybiBuJiZ2aXQodyksbyYmKHI/KG9iPVk4KHQpLHMmJihvYj1CbmUob2IsKE44KCksSjh0KSkpKTpvYj1ydSh0LmwsdC5tLHQuaCkpLHd9ZnVuY3Rpb24gR3duKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKGs9dC5lW2UuYy5wXVtlLnBdKzEsdz1lLmMuYS5jLmxlbmd0aCsxLGQ9bmV3IFModC5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKGQpLDExKSxNPTAsbz0wLHM9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbbmV3IFlzKGgpLG5ldyBFcihoKV0pKSk7enIocyk7KXI9dShMcihzKSwxMSksci5pLmM9PWUuYyYmKE0rPURYZSh0LHIuaSkrMSwrK28pO249TS9vLEM9aC5qLEM9PShiZSgpLEhuKT9uPGs/dC5mW2gucF09dC5jLW46dC5mW2gucF09dC5iKyh3LW4pOkM9PUJuJiYobjxrP3QuZltoLnBdPXQuYituOnQuZltoLnBdPXQuYy0ody1uKSl9fWZ1bmN0aW9uICRsKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHQ9PW51bGwpdGhyb3cgcnQobmV3IG9kKFR1KSk7Zm9yKG89dC5sZW5ndGgsaD1vPjAmJihScigwLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoMCk9PTQ1fHwoUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00MykpPzE6MCxyPWg7cjxvO3IrKylpZihNaWUoKFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSkpPT0tMSl0aHJvdyBydChuZXcgb2QodncrdCsnIicpKTtpZihkPXBhcnNlSW50KHQsMTApLHM9ZDxlLGlzTmFOKGQpKXRocm93IHJ0KG5ldyBvZCh2dyt0KyciJykpO2lmKHN8fGQ+bil0aHJvdyBydChuZXcgb2QodncrdCsnIicpKTtyZXR1cm4gZH1mdW5jdGlvbiBWd24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGg9bmV3IFFpLG89bmV3IFModC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMTIpLG5NKHMscy5mLmMubGVuZ3RoKSx4OShzLHMuay5jLmxlbmd0aCkscy5pPT0wJiYocy5vPTAsaHMoaCxzLGguYy5iLGguYykpO2Zvcig7aC5iIT0wOylmb3Iocz11KGguYj09MD9udWxsOihRbihoLmIhPTApLGNoKGgsaC5hLmEpKSwxMTIpLHI9cy5vKzEsbj1uZXcgUyhzLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksZD1lLmEsWUIoZCxiLk1hdGgubWF4KGQubyxyKSkseDkoZCxkLmktMSksZC5pPT0wJiZocyhoLGQsaC5jLmIsaC5jKX1mdW5jdGlvbiBVd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3IoaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDc5KSxyPU1vKHUoU3QoKCFvLmImJihvLmI9bmV3IENuKGJyLG8sNCw3KSksby5iKSwwKSw4MikpLGQ9ci5pLHc9ci5qLHM9dShTdCgoIW8uYSYmKG8uYT1uZXcgaGUoWmksbyw2LDYpKSxvLmEpLDApLDIwMiksb2oocyxzLmorZCxzLmsrdyksYWoocyxzLmIrZCxzLmMrdyksbj1uZXcgZXIoKCFzLmEmJihzLmE9bmV3IFNzKEhoLHMsNSkpLHMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw0NjkpLG4ydChlLGUuYStkLGUuYit3KTtheXQodShxZShvLChjaSgpLGk1KSksNzQpLGQsdyl9fWZ1bmN0aW9uIGtFKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlIDEwMDpyZXR1cm4gQzQoaVMsITApO2Nhc2UgNjg6cmV0dXJuIEM0KGlTLCExKTtjYXNlIDExOTpyZXR1cm4gQzQob3V0LCEwKTtjYXNlIDg3OnJldHVybiBDNChvdXQsITEpO2Nhc2UgMTE1OnJldHVybiBDNChjdXQsITApO2Nhc2UgODM6cmV0dXJuIEM0KGN1dCwhMSk7Y2FzZSA5OTpyZXR1cm4gQzQodXV0LCEwKTtjYXNlIDY3OnJldHVybiBDNCh1dXQsITEpO2Nhc2UgMTA1OnJldHVybiBDNChsdXQsITApO2Nhc2UgNzM6cmV0dXJuIEM0KGx1dCwhMSk7ZGVmYXVsdDp0aHJvdyBydChuZXcgR28oKGU9dCx0Z2UrZS50b1N0cmluZygxNikpKSl9fWZ1bmN0aW9uIFd3bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChzPXUoRmUodC5hLDApLDEwKSxlPW5ldyBIMCh0KSx1ZSh0LmEsZSksZS5vLmE9Yi5NYXRoLm1heCgxLHMuby5hKSxlLm8uYj1iLk1hdGgubWF4KDEscy5vLmIpLGUubi5hPXMubi5hLGUubi5iPXMubi5iLHUoUShzLChzZSgpLG9jKSksNjEpLmcpe2Nhc2UgNDplLm4uYSs9MjticmVhaztjYXNlIDE6ZS5uLmIrPTI7YnJlYWs7Y2FzZSAyOmUubi5hLT0yO2JyZWFrO2Nhc2UgMzplLm4uYi09Mn1yZXR1cm4gcj1uZXcgTWMsVW8ocixlKSxuPW5ldyB6dixvPXUoRmUocy5qLDApLDExKSxEYShuLG8pLHNhKG4sciksTGkoR2Yoci5uKSxvLm4pLExpKEdmKHIuYSksby5hKSxlfWZ1bmN0aW9uIHp1ZSh0LGUsbixyLHMpe24mJighcnx8KHQuYy10LmImdC5hLmxlbmd0aC0xKT4xKSYmZT09MSYmdSh0LmFbdC5iXSwxMCkuaz09KEduKCksU2wpP2M2KHUodC5hW3QuYl0sMTApLChqbCgpLHUwKSk6ciYmKCFufHwodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPjEpJiZlPT0xJiZ1KHQuYVt0LmMtMSZ0LmEubGVuZ3RoLTFdLDEwKS5rPT0oR24oKSxTbCk/YzYodSh0LmFbdC5jLTEmdC5hLmxlbmd0aC0xXSwxMCksKGpsKCksd2IpKToodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPT0yPyhjNih1KEtDKHQpLDEwKSwoamwoKSx1MCkpLGM2KHUoS0ModCksMTApLHdiKSk6amJuKHQscykscm10KHQpfWZ1bmN0aW9uIEt3bih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz0wLHM9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxoPSIiLCghci5uJiYoci5uPW5ldyBoZShxbyxyLDEsNykpLHIubikuaT09MHx8KGg9dShTdCgoIXIubiYmKHIubj1uZXcgaGUocW8sciwxLDcpKSxyLm4pLDApLDEzNykuYSksZD1uZXcgeWl0KG8rKyxlLGgpLExvKGQsciksSnQoZCwoZmMoKSxqUyksciksZC5lLmI9ci5qK3IuZi8yLGQuZi5hPWIuTWF0aC5tYXgoci5nLDEpLGQuZS5hPXIuaStyLmcvMixkLmYuYj1iLk1hdGgubWF4KHIuZiwxKSxuaShlLmIsZCksc3Uobi5mLHIsZCl9ZnVuY3Rpb24gWXduKHQpe3ZhciBlLG4scixzLG87cj11KFEodCwoc2UoKSxfaSkpLDMzKSxvPXUocWUociwoVGUoKSxGMikpLDE3NCkuSGMoKF9sKCksVjIpKSx0LmV8fChzPXUoUSh0LEdjKSwyMSksZT1uZXcgJGUodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLHMuSGMoKG9vKCksYmgpKT8oYm8ocixvcywob2EoKSxWYykpLGd3KHIsZS5hLGUuYiwhMSwhMCkpOmplKFJlKHFlKHIsWmx0KSkpfHxndyhyLGUuYSxlLmIsITAsITApKSxvP2JvKHIsRjIsdW4oVjIpKTpibyhyLEYyLChuPXUoSGYodEEpLDkpLG5ldyByaChuLHUodWYobixuLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBYNXQodCxlLG4pe3ZhciByLHMsbyxoO2lmKGVbMF0+PXQubGVuZ3RoKXJldHVybiBuLm89MCwhMDtzd2l0Y2goYmEodCxlWzBdKSl7Y2FzZSA0MzpzPTE7YnJlYWs7Y2FzZSA0NTpzPS0xO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG4ubz0wLCEwfWlmKCsrZVswXSxvPWVbMF0saD1ycSh0LGUpLGg9PTAmJmVbMF09PW8pcmV0dXJuITE7aWYoZVswXTx0Lmxlbmd0aCYmYmEodCxlWzBdKT09NTgpe2lmKHI9aCo2MCwrK2VbMF0sbz1lWzBdLGg9cnEodCxlKSxoPT0wJiZlWzBdPT1vKXJldHVybiExO3IrPWh9ZWxzZSByPWgscjwyNCYmZVswXS1vPD0yP3IqPTYwOnI9ciUxMDArKHIvMTAwfDApKjYwO3JldHVybiByKj1zLG4ubz0tciwhMH1mdW5jdGlvbiBYd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2ZvcihoPW5ldyBsZSxyPW5ldyBhcihscihNcyh0LmIpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLFZhKG4pJiZ1ZShoLG5ldyBBSnQobixkdGUodCxuLmMpLGR0ZSh0LG4uZCkpKTtmb3Ioaz0obz1uZXcgYjEodC5lKS5hLnZjKCkuS2MoKSxuZXcgdjEobykpO2suYS5PYigpOylkPShlPXUoay5hLlBiKCksNDIpLHUoZS5kZCgpLDExMykpLGQuZC5wPTA7Zm9yKHc9KHM9bmV3IGIxKHQuZSkuYS52YygpLktjKCksbmV3IHYxKHMpKTt3LmEuT2IoKTspZD0oZT11KHcuYS5QYigpLDQyKSx1KGUuZGQoKSwxMTMpKSxkLmQucD09MCYmdWUodC5kLEx3bih0LGQpKX1mdW5jdGlvbiBRd24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG89azEodCkscz1uZXcgZXIoKCF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lKSk7cy5lIT1zLmkuZ2MoKTspaWYocj11KGRyKHMpLDc5KSxkPU1vKHUoU3QoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSwwKSw4MikpLCFabShkLG8pKXJldHVybiEwO2ZvcihuPW5ldyBlcigoIXQuZCYmKHQuZD1uZXcgQ24oV3MsdCw4LDUpKSx0LmQpKTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksNzkpLGg9TW8odShTdCgoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLDApLDgyKSksIVptKGgsbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWnduKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHc9bmV3IER1LGU9ZWkodCwwKSxkPW51bGwsbj11KHRpKGUpLDgpLHM9dSh0aShlKSw4KTtlLmIhPWUuZC5jOylkPW4sbj1zLHM9dSh0aShlKSw4KSxvPWFlZShuYShuZXcgJGUoZC5hLGQuYiksbikpLGg9YWVlKG5hKG5ldyAkZShzLmEscy5iKSxuKSkscj0xMCxyPWIuTWF0aC5taW4ocixiLk1hdGguYWJzKG8uYStvLmIpLzIpLHI9Yi5NYXRoLm1pbihyLGIuTWF0aC5hYnMoaC5hK2guYikvMiksby5hPUtNKG8uYSkqcixvLmI9S00oby5iKSpyLGguYT1LTShoLmEpKnIsaC5iPUtNKGguYikqcixuaSh3LExpKG8sbikpLG5pKHcsTGkoaCxuKSk7cmV0dXJuIHd9ZnVuY3Rpb24gemwodCxlLG4scil7dmFyIHMsbyxoLGQsdztyZXR1cm4gaD10LmVoKCksdz10LlpnKCkscz1udWxsLHc/ZSYmIShhYXQodCxlLG4pLkJiJllhKT8ocj1CYSh3LlZrKCksdCxyKSx0LnVoKG51bGwpLHM9ZS5maCgpKTp3PW51bGw6KGgmJih3PWguZmgoKSksZSYmKHM9ZS5maCgpKSksdyE9cyYmdyYmdy5aayh0KSxkPXQuVmcoKSx0LlJnKGUsbiksdyE9cyYmcyYmcy5Zayh0KSx0LkxnKCkmJnQuTWcoKSYmKGgmJmQ+PTAmJmQhPW4mJihvPW5ldyBRcyh0LDEsZCxoLG51bGwpLHI/ci5FaShvKTpyPW8pLG4+PTAmJihvPW5ldyBRcyh0LDEsbixkPT1uP2g6bnVsbCxlKSxyP3IuRWkobyk6cj1vKSkscn1mdW5jdGlvbiBxdWUodCl7dmFyIGUsbixyO2lmKHQuYj09bnVsbCl7aWYocj1uZXcgeGcsdC5pIT1udWxsJiYoZm8ocix0LmkpLHIuYSs9IjoiKSx0LmYmMjU2KXtmb3IodC5mJjI1NiYmdC5hIT1udWxsJiYoaG5uKHQuaSl8fChyLmErPSIvLyIpLGZvKHIsdC5hKSksdC5kIT1udWxsJiYoci5hKz0iLyIsZm8ocix0LmQpKSx0LmYmMTYmJihyLmErPSIvIiksZT0wLG49dC5qLmxlbmd0aDtlPG47ZSsrKWUhPTAmJihyLmErPSIvIiksZm8ocix0LmpbZV0pO3QuZyE9bnVsbCYmKHIuYSs9Ij8iLGZvKHIsdC5nKSl9ZWxzZSBmbyhyLHQuYSk7dC5lIT1udWxsJiYoci5hKz0iIyIsZm8ocix0LmUpKSx0LmI9ci5hfXJldHVybiB0LmJ9ZnVuY3Rpb24gSnduKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihzPW5ldyBTKGUuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLG89UShyLChzZSgpLF9pKSksRXQobywxMSkmJihoPXUobywxMSksZD1vbGUoZSxyLGguby5hLGguby5iKSxoLm4uYT1kLmEsaC5uLmI9ZC5iLEZzKGgsdShRKHIsb2MpLDYxKSkpO249bmV3ICRlKGUuZi5hK2UuZC5iK2UuZC5jLGUuZi5iK2UuZC5kK2UuZC5hKSx1KFEoZSwoc2UoKSxHYykpLDIxKS5IYygob28oKSxiaCkpPyhKdCh0LChUZSgpLG9zKSwob2EoKSxWYykpLHUoUShGYSh0KSxHYyksMjEpLkZjKGY3KSxHbGUodCxuLCExKSk6R2xlKHQsbiwhMCl9ZnVuY3Rpb24gdG1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYod3IobiwiTWluaW1pemUgQ3Jvc3NpbmdzICIrdC5hLDEpLHI9ZS5iLmMubGVuZ3RoPT0wfHwhajkoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBadChuZXcgRWspKSkuc2QoKFdiKCksSkUpKSx3PWUuYi5jLmxlbmd0aD09MSYmdShGZShlLmIsMCksMjkpLmEuYy5sZW5ndGg9PTEsbz1HdChRKGUsKFRlKCksankpKSk9PT1HdCgoJDAoKSxaZykpLHJ8fHcmJiFvKXtvcihuKTtyZXR1cm59cz1YMm4odCxlKSxoPShkPXUoUWYocywwKSwyMTQpLGQuYy5SZigpP2QuYy5MZigpP25ldyBmJHQodCk6bmV3IGQkdCh0KTpuZXcgaCR0KHQpKSxRY24ocyxoKSxFdW4odCksb3Iobil9ZnVuY3Rpb24gZW1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYodz1TcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSxzPVNyKENhKGUwLFdkKFNyKENhKG49PW51bGw/MDpIaShuKSxuMCkpLDE1KSkpLGQ9R0ModCxlLHcpLGg9SEModCxuLHMpLGQmJnM9PWQuYSYmZmQobixkLmcpKXJldHVybiBuO2lmKGgmJiFyKXRocm93IHJ0KG5ldyBQbigia2V5IGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIGQmJnY0KHQsZCksaCYmdjQodCxoKSxvPW5ldyBYaihuLHMsZSx3KSxvRCh0LG8saCksaCYmKGguZT1udWxsLGguYz1udWxsKSxkJiYoZC5lPW51bGwsZC5jPW51bGwpLEhzZSh0KSxkP2QuZzpudWxsfWZ1bmN0aW9uIEh1ZSh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz0wO288ZTtvKyspe2ZvcihyPTAsZD1vKzE7ZDxlO2QrKylyPU9hKE9hKENhKFBzKHRbb10sY28pLFBzKHRbZF0sY28pKSxQcyhuW28rZF0sY28pKSxQcyhTcihyKSxjbykpLG5bbytkXT1TcihyKSxyPXptKHIsMzIpO25bbytlXT1TcihyKX1mb3IoRG9uKG4sbixlPDwxKSxyPTAscz0wLGg9MDtzPGU7KytzLGgrKylyPU9hKE9hKENhKFBzKHRbc10sY28pLFBzKHRbc10sY28pKSxQcyhuW2hdLGNvKSksUHMoU3IociksY28pKSxuW2hdPVNyKHIpLHI9em0ociwzMiksKytoLHI9T2EocixQcyhuW2hdLGNvKSksbltoXT1TcihyKSxyPXptKHIsMzIpO3JldHVybiBufWZ1bmN0aW9uIEd1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztpZighUzgoZSkpe2Zvcih3PVh0KHllKGl5KG4uYywoVGUoKSxfUykpKSksaz11KGl5KG4uYyxMTyksMTQyKSwhayYmKGs9bmV3IE05KSxyPW4uYSxzPW51bGwsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSxDPTAscz8oQz13LEMrPXMuby5iKTpDPWsuZCxvPUR2KGJNKG5ldyBVYixoKSx0LmYpLGtpKHQuayxoLG8pLHZmKG9mKGFmKHNmKGNmKG5ldyBFaCwwKSxwcyhiLk1hdGguY2VpbChDKSkpLHIpLG8pKSxzPWgscj1vO3ZmKG9mKGFmKHNmKGNmKG5ldyBFaCwwKSxwcyhiLk1hdGguY2VpbChrLmErcy5vLmIpKSksciksbi5kKSl9fWZ1bmN0aW9uIG5tbih0LGUsbixyLHMsbyxoLGQpe3ZhciB3LGssQyxNLEYsSDtyZXR1cm4gSD0hMSxGPW8tbi5zLEM9bi50LWUuZisoaz1FXyhuLEYsITEpLGsuYSksci5nK2Q+Rj8hMTooTT0odz1FXyhyLEYsITEpLHcuYSksQytkK008PWUuYiYmKGRJKG4sby1uLnMpLG4uYz0hMCxkSShyLG8tbi5zKSxZSShyLG4ucyxuLnQrbi5kK2QpLHIuaz0hMCxjeXQobi5xLHIpLEg9ITAscyYmKFkkKGUsciksci5qPWUsdC5jLmxlbmd0aD5oJiYodEQoKEFuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMjAwKSksciksKEFuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMjAwKSkuYS5jLmxlbmd0aD09MCYmQWcodCxoKSkpKSxIKX1mdW5jdGlvbiBybW4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYod3IoZSwiUGFydGl0aW9uIG1pZHByb2Nlc3NpbmciLDEpLHM9bmV3IEh2LHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEsMTYpKSxuZXcgUlkpLG5ldyBidihzKSkscy5kIT0wKXtmb3IoZD11KFBsKFBRdCgobz1zLmksbmV3IFRuKG51bGwsKG98fChzLmk9bmV3IFczKHMscy5jKSkpLk5jKCkpKSksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLHI9ZC5LYygpLG49dShyLlBiKCksMTkpO3IuT2IoKTspaD11KHIuUGIoKSwxOSksYTJuKHUoQWkocyxuKSwyMSksdShBaShzLGgpLDIxKSksbj1oO29yKGUpfX1mdW5jdGlvbiBWdWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7aWYoZS5wPT0wKXtmb3IoZS5wPTEsaD1uLGh8fChzPW5ldyBsZSxvPShyPXUoSGYoWGEpLDkpLG5ldyByaChyLHUodWYocixyLmxlbmd0aCksOSksMCkpLGg9bmV3IGxhKHMsbykpLHUoaC5hLDE1KS5GYyhlKSxlLms9PShHbigpLHhzKSYmdShoLmIsMjEpLkZjKHUoUShlLChzZSgpLG9jKSksNjEpKSx3PW5ldyBTKGUuaik7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHcpLDExKSxDPUJwKEwxKGN0KG90KEIxLDEpLEllLDIwLDAsW25ldyBZcyhkKSxuZXcgRXIoZCldKSkpO3pyKEMpOylrPXUoTHIoQyksMTEpLFZ1ZSh0LGsuaSxoKTtyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtXyh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5BYil7aWYodC5BYil7aWYoaD10LkFiLmksaD4wKXtpZihzPXUodC5BYi5nLDE5MzQpLGU9PW51bGwpe2ZvcihvPTA7bzxoOysrbylpZihuPXNbb10sbi5kPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG89MDtvPGg7KytvKWlmKG49c1tvXSxobihlLG4uZCkpcmV0dXJuIG59fWVsc2UgaWYoZT09bnVsbCl7Zm9yKHI9bmV3IGVyKHQuQWIpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw1OTApLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihyPW5ldyBlcih0LkFiKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNTkwKSxobihlLG4uZCkpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gaW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztpZihrPVJlKFEoZSwoaHcoKSx1eWUpKSksaz09bnVsbHx8KE9uKGspLGspKXtmb3IoTXBuKHQsZSkscz1uZXcgbGUsdz1laShlLmIsMCk7dy5iIT13LmQuYzspaD11KHRpKHcpLDg2KSxuPXE0dCh0LGgsbnVsbCksbiYmKExvKG4sZSkscy5jW3MuYy5sZW5ndGhdPW4pO2lmKHQuYT1udWxsLHQuYj1udWxsLHMuYy5sZW5ndGg+MSlmb3Iocj1uZXcgUyhzKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMTM1KSxvPTAsZD1laShuLmIsMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDg2KSxoLmc9bysrO3JldHVybiBzfXJldHVybiBfMShjdChvdChweG4sMSksaTZ0LDEzNSwwLFtlXSkpfWZ1bmN0aW9uIHNtbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7SD1XaW4odCx3eXQoZSkscyksbnl0KEgsTzAocyxDZCkpLEU9bnVsbCxWPXMsWT1QQyhWLF9kZSksdHQ9bmV3IFgkdChIKSxfMG4odHQuYSxZKSxndD1QQyhWLCJlbmRQb2ludCIpLEx0PW5ldyB0enQoSCksQzBuKEx0LmEsZ3QpLF90PVV2KFYsd0gpLEJ0PW5ldyByenQoSCksZGRuKEJ0LmEsX3QpLE09TzAocyx3OHQpLG89bmV3IHdWdCh0LEgpLFJRZShvLmEsby5iLE0pLEY9TzAocyx2OHQpLGg9bmV3IG1WdCh0LEgpLGpRZShoLmEsaC5iLEYpLGs9VXYocyx5OHQpLGQ9bmV3IHlWdChuLEgpLFFmbihkLmIsZC5hLGspLEM9VXYocyxtOHQpLHc9bmV3IHhWdChyLEgpLFpmbih3LmIsdy5hLEMpfWZ1bmN0aW9uIFE1dCh0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2goZD1udWxsLGUuZyl7Y2FzZSAxOmZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KEoocyksMTEpLGplKFJlKFEociwoc2UoKSxQbHQpKSkpKXJldHVybiByO2Q9bmV3IE1jLEp0KGQsKHNlKCksUGx0KSwoRm4oKSwhMCkpO2JyZWFrO2Nhc2UgMjpmb3IoaD1uZXcgUyh0LmopO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDExKSxqZShSZShRKG8sKHNlKCksQmx0KSkpKSlyZXR1cm4gbztkPW5ldyBNYyxKdChkLChzZSgpLEJsdCksKEZuKCksITApKX1yZXR1cm4gZCYmKFVvKGQsdCksRnMoZCxuKSxaaG4oZC5uLHQubyxuKSksZH1mdW5jdGlvbiBVdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKGQ9LTEsaD1uZXcgUWkscj1uZXcgUzEodC5iKTtWbyhyLmEpfHxWbyhyLmIpOyl7Zm9yKG49dShWbyhyLmEpP0ooci5hKTpKKHIuYiksMTcpLGQ9Yi5NYXRoLm1heChkLFh0KHllKFEobiwoVGUoKSxVZykpKSkpLG4uYz09dD91cyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5iLDE2KSksbmV3IHBZKSxuZXcgTmMoaCkpOnVzKFJpKG5ldyBUbihudWxsLG5ldyBfbihuLmIsMTYpKSxuZXcgYlkpLG5ldyBaYShoKSksbz1laShoLDApO28uYiE9by5kLmM7KXM9dSh0aShvKSw3MCksVnMocywoc2UoKSxNNikpfHxKdChzLE02LG4pO0FzKGUsaCksX2goaCl9cmV0dXJuIGR9ZnVuY3Rpb24gYW1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHc7bz1uZXcgSDAodCksXzAobywoR24oKSxIYykpLEp0KG8sKFRlKCksb3MpLChvYSgpLFZjKSksSnQobywoc2UoKSxfaSksZS5jLmkpLGg9bmV3IE1jLEp0KGgsX2ksZS5jKSxGcyhoLHMpLFVvKGgsbyksSnQoZS5jLFp1LG8pLGQ9bmV3IEgwKHQpLF8wKGQsSGMpLEp0KGQsb3MsVmMpLEp0KGQsX2ksZS5kLmkpLHc9bmV3IE1jLEp0KHcsX2ksZS5kKSxGcyh3LHMpLFVvKHcsZCksSnQoZS5kLFp1LGQpLERhKGUsaCksc2EoZSx3KSxVbSgwLG4uYy5sZW5ndGgpLFc5KG4uYywwLG8pLHIuY1tyLmMubGVuZ3RoXT1kLEp0KG8scUcsZGUoMSkpLEp0KGQscUcsZGUoMSkpfWZ1bmN0aW9uIGZ3KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsaztkPXM/ci5iOnIuYSwhUzAodC5hLHIpJiYoaz1kPm4ucyYmZDxuLmMsdz0hMSxuLmUuYiE9MCYmbi5qLmIhPTAmJih3PXd8KGIuTWF0aC5hYnMoZC1YdCh5ZShhbnQobi5lKSkpKTx5ZCYmYi5NYXRoLmFicyhkLVh0KHllKGFudChuLmopKSkpPHlkKSx3PXd8KGIuTWF0aC5hYnMoZC1YdCh5ZSh2aihuLmUpKSkpPHlkJiZiLk1hdGguYWJzKGQtWHQoeWUodmoobi5qKSkpKTx5ZCkpLChrfHx3KSYmKGg9dShRKGUsKFRlKCksX28pKSw3NCksaHx8KGg9bmV3IER1LEp0KGUsX28saCkpLG89bmV3IHlvKHIpLGhzKGgsbyxoLmMuYixoLmMpLE5zKHQuYSxvKSkpfWZ1bmN0aW9uIG9tbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQztpZihkcG4odCxlLG4scikpcmV0dXJuITA7Zm9yKGg9bmV3IFMoZS5mKTtoLmE8aC5jLmMubGVuZ3RoOyl7c3dpdGNoKG89dShKKGgpLDMyNCksZD0hMSx3PXQuai1lLmorbixrPXcrZS5vLEM9dC5rLWUuaytyLHM9QytlLnAsby5hLmcpe2Nhc2UgMDpkPUNpdCh0LHcrby5iLmEsMCx3K28uYy5hLEMtMSk7YnJlYWs7Y2FzZSAxOmQ9Q2l0KHQsayxDK28uYi5hLHQuby0xLEMrby5jLmEpO2JyZWFrO2Nhc2UgMjpkPUNpdCh0LHcrby5iLmEscyx3K28uYy5hLHQucC0xKTticmVhaztkZWZhdWx0OmQ9Q2l0KHQsMCxDK28uYi5hLHctMSxDK28uYy5hKX1pZihkKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGNtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztmb3IoaD1uZXcgUyhlLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksaz1uZXcgUyhvLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtmb3Iodz11KEooayksMTApLEM9bmV3IGxlLGQ9MCxyPW5ldyBhcihscihqbyh3KS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSwhKFZhKG4pfHwhVmEobikmJm4uYy5pLmM9PW4uZC5pLmMpJiYocz11KFEobiwoVGUoKSxGNikpLDE5KS5hLHM+ZCYmKGQ9cyxDLmM9UHQoWG4sSWUsMSwwLDUsMSkpLHM9PWQmJnVlKEMsbmV3IGxhKG4uYy5pLG4pKSk7dm4oKSxYcyhDLHQuYyksJG0odC5iLHcucCxDKX19ZnVuY3Rpb24gdW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihoPW5ldyBTKGUuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSxrPW5ldyBTKG8uYSk7ay5hPGsuYy5jLmxlbmd0aDspe2Zvcih3PXUoSihrKSwxMCksQz1uZXcgbGUsZD0wLHI9bmV3IGFyKGxyKE1zKHcpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLCEoVmEobil8fCFWYShuKSYmbi5jLmkuYz09bi5kLmkuYykmJihzPXUoUShuLChUZSgpLEY2KSksMTkpLmEscz5kJiYoZD1zLEMuYz1QdChYbixJZSwxLDAsNSwxKSkscz09ZCYmdWUoQyxuZXcgbGEobi5kLmksbikpKTt2bigpLFhzKEMsdC5jKSwkbSh0LmYsdy5wLEMpfX1mdW5jdGlvbiBXdWUodCl7U3YodCxuZXcgdzIoRXYoeXYoa3YoeHYobmV3IHBnLHh3KSwiRUxLIEJveCIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIiksbmV3IElaKSkpLHhlKHQseHcsd3csU1N0KSx4ZSh0LHh3LGt5LDE1KSx4ZSh0LHh3LGpELGRlKDApKSx4ZSh0LHh3LGdILERlKFRTdCkpLHhlKHQseHcsTDQsRGUoUjNlKSkseGUodCx4dyx2NixEZShqM2UpKSx4ZSh0LHh3LGI2LFYxZSkseGUodCx4dywkRCxEZShDU3QpKSx4ZSh0LHh3LHc2LERlKF9TdCkpLHhlKHQseHcsbzh0LERlKEpodCkpLHhlKHQseHcsY0gsRGUoQjNlKSl9ZnVuY3Rpb24gS3VlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKHM9dC5pLGg9cy5vLmEsbz1zLm8uYixoPD0wJiZvPD0wKXJldHVybiBiZSgpLFpvO3N3aXRjaChrPXQubi5hLEM9dC5uLmIsZD10Lm8uYSxuPXQuby5iLGUuZyl7Y2FzZSAyOmNhc2UgMTppZihrPDApcmV0dXJuIGJlKCksQm47aWYoaytkPmgpcmV0dXJuIGJlKCksSG47YnJlYWs7Y2FzZSA0OmNhc2UgMzppZihDPDApcmV0dXJuIGJlKCksTm47aWYoQytuPm8pcmV0dXJuIGJlKCksbXJ9cmV0dXJuIHc9KGsrZC8yKS9oLHI9KEMrbi8yKS9vLHcrcjw9MSYmdy1yPD0wPyhiZSgpLEJuKTp3K3I+PTEmJnctcj49MD8oYmUoKSxIbik6cjwuNT8oYmUoKSxObik6KGJlKCksbXIpfWZ1bmN0aW9uIGxtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKG49ITEsQz1YdCh5ZShRKGUsKFRlKCksQncpKSkpLFY9ZWIqQyxzPW5ldyBTKGUuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxrPW5ldyBTKHIuYSksbz11KEooayksMTApLE09c3d0KHQuYVtvLnBdKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoSihrKSwxMCksRj1zd3QodC5hW2QucF0pLE0hPUYmJihIPVYzKHQuYixvLGQpLGg9by5uLmIrby5vLmIrby5kLmErTS5hK0gsdz1kLm4uYi1kLmQuZCtGLmEsaD53K1YmJihZPU0uZytGLmcsRi5hPShGLmcqRi5hK00uZypNLmEpL1ksRi5nPVksTS5mPUYsbj0hMCkpLG89ZCxNPUY7cmV0dXJuIG59ZnVuY3Rpb24gWXVlKHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxDLE0sRjtmb3IoRj1uZXcgQXgsaz1lLktjKCk7ay5PYigpOylmb3IoZD11KGsuUGIoKSw4MzkpLE09bmV3IFMoZC53ZigpKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxODEpLEd0KEMuV2UoKGNpKCksaWZ0KSkpPT09R3QoKEExKCksUzcpKSYmKEF1ZShGLEMsITEscixzLG8saCksaF8odCxGKSk7Zm9yKHc9bi5LYygpO3cuT2IoKTspZm9yKGQ9dSh3LlBiKCksODM5KSxNPW5ldyBTKGQud2YoKSk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTgxKSxHdChDLldlKChjaSgpLGlmdCkpKT09PUd0KChBMSgpLFl5KSkmJihBdWUoRixDLCEwLHIscyxvLGgpLGhfKHQsRikpfWZ1bmN0aW9uIGhtbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7Zm9yKGg9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7aC5lIT1oLmkuZ2MoKTspZm9yKG89dShkcihoKSwzMykscz1uZXcgYXIobHIoRzAobykuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSw3OSksIWdfKHIpJiYhZ18ocikmJiF1dyhyKSYmKHc9dShlYyhBbyhuLmYsbykpLDg2KSxrPXUoSm4obixNbyh1KFN0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSksODYpLHcmJmsmJihkPW5ldyBMd3QodyxrKSxKdChkLChmYygpLGpTKSxyKSxMbyhkLHIpLG5pKHcuZCxkKSxuaShrLmIsZCksbmkoZS5hLGQpKSl9ZnVuY3Rpb24gZm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iodz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTExKSxzPWQuYz9xS3QoZC5jKTowLHM+MD9kLmE/KGs9ZC5iLnJmKCkuYixzPmsmJih0LnZ8fGQuYy5kLmMubGVuZ3RoPT0xPyhoPShzLWspLzIsZC5kLmQ9aCxkLmQuYT1oKToobj11KEZlKGQuYy5kLDApLDE4MSkucmYoKS5iLHI9KG4taykvMixkLmQuZD1iLk1hdGgubWF4KDAsciksZC5kLmE9cy1yLWspKSk6ZC5kLmE9dC50K3M6VEModC51KSYmKG89QzR0KGQuYiksby5kPDAmJihkLmQuZD0tby5kKSxvLmQrby5hPmQuYi5yZigpLmImJihkLmQuYT1vLmQrby5hLWQuYi5yZigpLmIpKX1mdW5jdGlvbiBkbW4odCxlKXt2YXIgbjtzd2l0Y2goeEkodCkpe2Nhc2UgNjpyZXR1cm4gZWEoZSk7Y2FzZSA3OnJldHVybiBObShlKTtjYXNlIDg6cmV0dXJuIE9tKGUpO2Nhc2UgMzpyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKG49eEkoZSksIShuPj0xNCYmbjw9MTYpKTtjYXNlIDExOnJldHVybiBlIT1udWxsJiZ0eXBlb2YgZT09PU5hdDtjYXNlIDEyOnJldHVybiBlIT1udWxsJiYodHlwZW9mIGU9PT1DRHx8dHlwZW9mIGU9PU5hdCk7Y2FzZSAwOnJldHVybiByc3QoZSx0Ll9fZWxlbWVudFR5cGVJZCQpO2Nhc2UgMjpyZXR1cm4gem50KGUpJiZlLmltIT09Q3Q7Y2FzZSAxOnJldHVybiB6bnQoZSkmJmUuaW0hPT1DdHx8cnN0KGUsdC5fX2VsZW1lbnRUeXBlSWQkKTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiBYdWUodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcj1iLk1hdGgubWluKGIuTWF0aC5hYnModC5jLShlLmMrZS5iKSksYi5NYXRoLmFicyh0LmMrdC5iLWUuYykpLG89Yi5NYXRoLm1pbihiLk1hdGguYWJzKHQuZC0oZS5kK2UuYSkpLGIuTWF0aC5hYnModC5kK3QuYS1lLmQpKSxuPWIuTWF0aC5hYnModC5jK3QuYi8yLShlLmMrZS5iLzIpKSxuPnQuYi8yK2UuYi8yfHwocz1iLk1hdGguYWJzKHQuZCt0LmEvMi0oZS5kK2UuYS8yKSkscz50LmEvMitlLmEvMik/MTpuPT0wJiZzPT0wPzA6bj09MD9vL3MrMTpzPT0wP3IvbisxOmIuTWF0aC5taW4oci9uLG8vcykrMX1mdW5jdGlvbiBRdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIHM9VW10KHQpLGQ9VW10KGUpLHM9PWQ/dC5lPT1lLmUmJnQuYTw1NCYmZS5hPDU0P3QuZjxlLmY/LTE6dC5mPmUuZj8xOjA6KHI9dC5lLWUuZSxuPSh0LmQ+MD90LmQ6Yi5NYXRoLmZsb29yKCh0LmEtMSkqY2ZlKSsxKS0oZS5kPjA/ZS5kOmIuTWF0aC5mbG9vcigoZS5hLTEpKmNmZSkrMSksbj5yKzE/czpuPHItMT8tczoobz0oIXQuYyYmKHQuYz1qSSh0LmYpKSx0LmMpLGg9KCFlLmMmJihlLmM9akkoZS5mKSksZS5jKSxyPDA/bz1KMyhvLG1sZSgtcikpOnI+MCYmKGg9SjMoaCxtbGUocikpKSxMaWUobyxoKSkpOnM8ZD8tMToxfWZ1bmN0aW9uIGdtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihvPTAsZD0wLHc9MCxzPW5ldyBTKHQuZi5lKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNDQpLGUhPXImJihoPXQuaVtlLmJdW3IuYl0sbys9aCxuPUhwKGUuZCxyLmQpLG4+MCYmdC5kIT0oakMoKSxLdXQpJiYoZCs9aCooci5kLmErdC5hW2UuYl1bci5iXSooZS5kLmEtci5kLmEpL24pKSxuPjAmJnQuZCE9KGpDKCksVXV0KSYmKHcrPWgqKHIuZC5iK3QuYVtlLmJdW3IuYl0qKGUuZC5iLXIuZC5iKS9uKSkpO3N3aXRjaCh0LmQuZyl7Y2FzZSAxOnJldHVybiBuZXcgJGUoZC9vLGUuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyAkZShlLmQuYSx3L28pO2RlZmF1bHQ6cmV0dXJuIG5ldyAkZShkL28sdy9vKX19ZnVuY3Rpb24gWnVlKHQsZSl7SjgoKTt2YXIgbixyLHMsbyxoO2lmKGg9dShRKHQuaSwoVGUoKSxvcykpLDk4KSxvPXQuai5nLWUuai5nLG8hPTB8fCEoaD09KG9hKCksRzIpfHxoPT1oMHx8aD09VmMpKXJldHVybiAwO2lmKGg9PShvYSgpLEcyKSYmKG49dShRKHQsV2cpLDE5KSxyPXUoUShlLFdnKSwxOSksbiYmciYmKHM9bi5hLXIuYSxzIT0wKSkpcmV0dXJuIHM7c3dpdGNoKHQuai5nKXtjYXNlIDE6cmV0dXJuIExzKHQubi5hLGUubi5hKTtjYXNlIDI6cmV0dXJuIExzKHQubi5iLGUubi5iKTtjYXNlIDM6cmV0dXJuIExzKGUubi5hLHQubi5hKTtjYXNlIDQ6cmV0dXJuIExzKGUubi5iLHQubi5iKTtkZWZhdWx0OnRocm93IHJ0KG5ldyBGbyhiNnQpKX19ZnVuY3Rpb24gSnVlKHQpe3ZhciBlLG4scixzLG8saDtmb3Iobj0oIXQuYSYmKHQuYT1uZXcgU3MoSGgsdCw1KSksdC5hKS5pKzIsaD1uZXcgWWMobiksdWUoaCxuZXcgJGUodC5qLHQuaykpLHVzKG5ldyBUbihudWxsLCghdC5hJiYodC5hPW5ldyBTcyhIaCx0LDUpKSxuZXcgX24odC5hLDE2KSkpLG5ldyBXJHQoaCkpLHVlKGgsbmV3ICRlKHQuYix0LmMpKSxlPTE7ZTxoLmMubGVuZ3RoLTE7KXI9KEFuKGUtMSxoLmMubGVuZ3RoKSx1KGguY1tlLTFdLDgpKSxzPShBbihlLGguYy5sZW5ndGgpLHUoaC5jW2VdLDgpKSxvPShBbihlKzEsaC5jLmxlbmd0aCksdShoLmNbZSsxXSw4KSksci5hPT1zLmEmJnMuYT09by5hfHxyLmI9PXMuYiYmcy5iPT1vLmI/QWcoaCxlKTorK2U7cmV0dXJuIGh9ZnVuY3Rpb24gdGxlKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG49bld0KGJHdChnR3QocEd0KG5ldyBEcHQsZSksbmV3IG8kKGUuZSkpLFhiZSksdC5hKSxlLmouYy5sZW5ndGg9PTB8fHZ0ZSh1KEZlKGUuaiwwKSw1NykuYSxuKSx3PW5ldyBxdHQsa2kodC5lLG4sdyksaD1uZXcgcXMsZD1uZXcgcXMsbz1uZXcgUyhlLmspO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDE3KSxOcyhoLHMuYyksTnMoZCxzLmQpO3I9aC5hLmdjKCktZC5hLmdjKCkscjwwPyhQSSh3LCEwLChhbygpLGpoKSksUEkodywhMSxrZikpOnI+MCYmKFBJKHcsITEsKGFvKCksamgpKSxQSSh3LCEwLGtmKSksbXUoZS5nLG5ldyBHR3QodCxuKSksa2kodC5nLGUsbil9ZnVuY3Rpb24gZWxlKCl7ZWxlPVo7dmFyIHQ7Zm9yKG9FdD1jdChvdChUciwxKSxYciwyNSwxNSxbLTEsLTEsMzAsMTksMTUsMTMsMTEsMTEsMTAsOSw5LDgsOCw4LDgsNyw3LDcsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNV0pLFR1dD1QdChUcixYciwyNSwzNywxNSwxKSxFZ2U9Y3Qob3QoVHIsMSksWHIsMjUsMTUsWy0xLC0xLDYzLDQwLDMyLDI4LDI1LDIzLDIxLDIwLDE5LDE5LDE4LDE4LDE3LDE3LDE2LDE2LDE2LDE1LDE1LDE1LDE1LDE0LDE0LDE0LDE0LDE0LDE0LDEzLDEzLDEzLDEzLDEzLDEzLDEzLDEzXSksY0V0PVB0KExiLGFvdCwyNSwzNywxNCwxKSx0PTI7dDw9MzY7dCsrKVR1dFt0XT1wcyhiLk1hdGgucG93KHQsb0V0W3RdKSksY0V0W3RdPWVEKElxLFR1dFt0XSl9ZnVuY3Rpb24gcG1uKHQpe3ZhciBlO2lmKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSE9MSl0aHJvdyBydChuZXcgUG4obGRlKyghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSkpO3JldHVybiBlPW5ldyBEdSxPSSh1KFN0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSYmVWEoZSxCaGUodCxPSSh1KFN0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSwhMSkpLE9JKHUoU3QoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKSwwKSw4MikpJiZVYShlLEJoZSh0LE9JKHUoU3QoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKSwwKSw4MikpLCEwKSksZX1mdW5jdGlvbiBubGUodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihlLmQ/cz10LmEuYz09KGRkKCksUncpP2pvKGUuYik6TXMoZS5iKTpzPXQuYS5jPT0oZGQoKSxLZyk/am8oZS5iKTpNcyhlLmIpLG89ITEscj1uZXcgYXIobHIocy5hLktjKCksbmV3IHopKTt6cihyKTspaWYobj11KExyKHIpLDE3KSxoPWplKHQuYS5mW3QuYS5nW2UuYi5wXS5wXSksISghaCYmIVZhKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmIShqZSh0LmEublt0LmEuZ1tlLmIucF0ucF0pfHxqZSh0LmEublt0LmEuZ1tlLmIucF0ucF0pKSYmKG89ITAsUzAodC5iLHQuYS5nW0NmbihuLGUuYikucF0pKSlyZXR1cm4gZS5jPSEwLGUuYT1uLGU7cmV0dXJuIGUuYz1vLGUuYT1udWxsLGV9ZnVuY3Rpb24gYm1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE07Zm9yKHZuKCksWHModCxuZXcgalopLGQ9bmV3IGhhKHQsMCksTT1uZXcgbGUsbz0wO2QuYjxkLmQuZ2MoKTspaD0oUW4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDE1NykpLE0uYy5sZW5ndGghPTAmJkZ1KGgpKnhsKGgpPm8qMj8oQz1uZXcgVSQoTSksaz1GdShoKS94bChoKSx3PU1hdChDLGUsbmV3IHd4LG4scixzLGspLExpKEdmKEMuZSksdyksTS5jPVB0KFhuLEllLDEsMCw1LDEpLG89MCxNLmNbTS5jLmxlbmd0aF09QyxNLmNbTS5jLmxlbmd0aF09aCxvPUZ1KEMpKnhsKEMpK0Z1KGgpKnhsKGgpKTooTS5jW00uYy5sZW5ndGhdPWgsbys9RnUoaCkqeGwoaCkpO3JldHVybiBNfWZ1bmN0aW9uIFo1dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7aWYocj1uLmdjKCkscj09MClyZXR1cm4hMTtpZih0LmVqKCkpaWYodz10LmZqKCksZDN0KHQsZSxuKSxoPXI9PTE/dC5aaSgzLG51bGwsbi5LYygpLlBiKCksZSx3KTp0LlppKDUsbnVsbCxuLGUsdyksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBTcChyKSxvPWUrcixzPWU7czxvOysrcylrPXQuT2kocyksZD10LmNqKGssZCksZD1kO2Q/KGQuRWkoaCksZC5GaSgpKTp0LiRpKGgpfWVsc2UgdC4kaShoKTtlbHNlIGlmKGQzdCh0LGUsbiksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBTcChyKSxvPWUrcixzPWU7czxvOysrcylkPXQuY2oodC5PaShzKSxkKTtkJiZkLkZpKCl9cmV0dXJuITB9ZnVuY3Rpb24gcmxlKHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiB0LmVqKCk/KHM9bnVsbCxvPXQuZmooKSxyPXQuWmkoMSxkPShoPXQuVWkoZSx0Lm9pKGUsbikpLGgpLG4sZSxvKSx0LmJqKCkmJiEodC5uaSgpJiZkP3lpKGQsbik6R3QoZCk9PT1HdChuKSkmJihkJiYocz10LmRqKGQscykpLHM9dC5jaihuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSxkKTooZD0oaD10LlVpKGUsdC5vaShlLG4pKSxoKSx0LmJqKCkmJiEodC5uaSgpJiZkP3lpKGQsbik6R3QoZCk9PT1HdChuKSkmJihzPW51bGwsZCYmKHM9dC5kaihkLG51bGwpKSxzPXQuY2oobixzKSxzJiZzLkZpKCkpLGQpfWZ1bmN0aW9uIEo1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZih0LmU9ZSx0LmY9dShRKGUsKEdwKCksYUcpKSwyMzApLEpkbihlKSx0LmQ9Yi5NYXRoLm1heChlLmUuYy5sZW5ndGgqMTYrZS5jLmMubGVuZ3RoLDI1NiksIWplKFJlKFEoZSwoWmYoKSxoN3QpKSkpKWZvcihDPXQuZS5lLmMubGVuZ3RoLHc9bmV3IFMoZS5lKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxNDQpLGs9ZC5kLGsuYT1WdnQodC5mKSpDLGsuYj1WdnQodC5mKSpDO2ZvcihuPWUuYixvPW5ldyBTKGUuYyk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMjgyKSxyPXUoUShzLGI3dCksMTkpLmEscj4wKXtmb3IoaD0wO2g8cjtoKyspdWUobixuZXcgSFl0KHMpKTtmb2Uocyl9fWZ1bmN0aW9uIGM2KHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHQuaz09KEduKCksU2wpJiYobj1qOShSaSh1KFEodCwoc2UoKSxUTykpLDE1KS5PYygpLG5ldyBadChuZXcgVEwpKSkuc2QoKFdiKCksSkUpKT9lOihqbCgpLFFPKSxKdCh0LEQ2LG4pLG4hPShqbCgpLHdiKSkpZm9yKHI9dShRKHQsX2kpLDE3KSxkPVh0KHllKFEociwoVGUoKSxVZykpKSksaD0wLG49PXUwP2g9dC5vLmItYi5NYXRoLmNlaWwoZC8yKTpuPT1RTyYmKHQuby5iLT1YdCh5ZShRKEZhKHQpLEI2KSkpLGg9KHQuby5iLWIuTWF0aC5jZWlsKGQpKS8yKSxvPW5ldyBTKHQuaik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTEpLHMubi5iPWh9ZnVuY3Rpb24gdHh0KCl7dHh0PVosZGV0KCksUjVlPW5ldyBBQixjdChvdChWNiwyKSx0ZSwzNjgsMCxbY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTShHMGUpXSldKSxjdChvdChWNiwyKSx0ZSwzNjgsMCxbY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTSh6OHQpXSldKSxjdChvdChWNiwyKSx0ZSwzNjgsMCxbY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTShWMGUpXSksY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTSh6OHQpXSldKSxuZXcgTnAoIi0xIiksY3Qob3QoVjYsMiksdGUsMzY4LDAsW2N0KG90KFY2LDEpLEZILDU5MiwwLFtuZXcgaE0oIlxcYysiKV0pXSksbmV3IE5wKCIwIiksbmV3IE5wKCIwIiksbmV3IE5wKCIxIiksbmV3IE5wKCIwIiksbmV3IE5wKFEwZSl9ZnVuY3Rpb24gd3EodCl7dmFyIGUsbjtyZXR1cm4gdC5jJiZ0LmMua2goKSYmKG49dSh0LmMsNDkpLHQuYz11KEtwKHQsbiksMTM4KSx0LmMhPW4mJih0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCw5LDIsbix0LmMpKSxFdCh0LkNiLDM5OSk/dC5EYj4+MTY9PS0xNSYmdC5DYi5uaCgpJiZVcnQobmV3IHFydCh0LkNiLDksMTMsbix0LmMsRmcoaWwodSh0LkNiLDU5KSksdCkpKTpFdCh0LkNiLDg4KSYmdC5EYj4+MTY9PS0yMyYmdC5DYi5uaCgpJiYoZT10LmMsRXQoZSw4OCl8fChlPShkbigpLFdoKSksRXQobiw4OCl8fChuPShkbigpLFdoKSksVXJ0KG5ldyBxcnQodC5DYiw5LDEwLG4sZSxGZyhMYyh1KHQuQ2IsMjYpKSx0KSkpKSkpLHQuY31mdW5jdGlvbiB2bW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtmb3Iod3IoZSwiSHlwZXJub2RlcyBwcm9jZXNzaW5nIiwxKSxzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxkPW5ldyBTKHIuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTApLGplKFJlKFEoaCwoVGUoKSxKRykpKSkmJmguai5jLmxlbmd0aDw9Mil7Zm9yKE09MCxDPTAsbj0wLG89MCxrPW5ldyBTKGguaik7ay5hPGsuYy5jLmxlbmd0aDspc3dpdGNoKHc9dShKKGspLDExKSx3LmouZyl7Y2FzZSAxOisrTTticmVhaztjYXNlIDI6KytDO2JyZWFrO2Nhc2UgMzorK247YnJlYWs7Y2FzZSA0Oisrb31NPT0wJiZuPT0wJiZ5NW4odCxoLG88PUMpfW9yKGUpfWZ1bmN0aW9uIHdtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztmb3Iod3IoZSwiTGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwyOSksQz0tMSxuPW5ldyBsZSxrPXNJKG8uYSkscz0wO3M8ay5sZW5ndGg7cysrKXI9dShRKGtbc10sKHNlKCksTzIpKSwzMDMpLEM9PS0xP3IhPShCMCgpLFU0KSYmKEM9cyk6cj09KEIwKCksVTQpJiYoa28oa1tzXSxudWxsKSxveShrW3NdLEMrKyxvKSkscj09KEIwKCksQTYpJiZ1ZShuLGtbc10pO2Zvcih3PW5ldyBTKG4pO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxrbyhkLG51bGwpLGtvKGQsbyl9b3IoZSl9ZnVuY3Rpb24gbW1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKHdyKG4sIkh5cGVyZWRnZSBtZXJnaW5nIiwxKSxXcG4odCxlKSx3PW5ldyBoYShlLmIsMCk7dy5iPHcuZC5nYygpOylpZihkPShRbih3LmI8dy5kLmdjKCkpLHUody5kLlhiKHcuYz13LmIrKyksMjkpKSxDPWQuYSxDLmMubGVuZ3RoIT0wKWZvcihyPW51bGwscz1udWxsLG89bnVsbCxoPW51bGwsaz0wO2s8Qy5jLmxlbmd0aDtrKyspcj0oQW4oayxDLmMubGVuZ3RoKSx1KEMuY1trXSwxMCkpLHM9ci5rLHM9PShHbigpLFpzKSYmaD09WnMmJihNPWR5bihyLG8pLE0uYSYmKGt2bihyLG8sTS5iLE0uYyksQW4oayxDLmMubGVuZ3RoKSxsYnQoQy5jLGssMSksLS1rLHI9byxzPWgpKSxvPXIsaD1zO29yKG4pfWZ1bmN0aW9uIHltbih0LGUpe3ZhciBuLHIscztyPW9sKHQuZCwxKSE9MCwhamUoUmUoUShlLmosKHNlKCksTXcpKSkpJiYhamUoUmUoUShlLmosSzQpKSl8fEd0KFEoZS5qLChUZSgpLGRiKSkpPT09R3QoKGowKCksZ2IpKT9lLmMuVGYoZS5lLHIpOnI9amUoUmUoUShlLmosTXcpKSkscEQodCxlLHIsITApLGplKFJlKFEoZS5qLEs0KSkpJiZKdChlLmosSzQsKEZuKCksITEpKSxqZShSZShRKGUuaixNdykpKSYmKEp0KGUuaixNdywoRm4oKSwhMSkpLEp0KGUuaixLNCwhMCkpLG49U3VlKHQsZSk7ZG97aWYoaXl0KHQpLG49PTApcmV0dXJuIDA7cj0hcixzPW4scEQodCxlLHIsITEpLG49U3VlKHQsZSl9d2hpbGUocz5uKTtyZXR1cm4gc31mdW5jdGlvbiBpbGUodCxlKXt2YXIgbixyLHM7cj1vbCh0LmQsMSkhPTAsIWplKFJlKFEoZS5qLChzZSgpLE13KSkpKSYmIWplKFJlKFEoZS5qLEs0KSkpfHxHdChRKGUuaiwoVGUoKSxkYikpKT09PUd0KChqMCgpLGdiKSk/ZS5jLlRmKGUuZSxyKTpyPWplKFJlKFEoZS5qLE13KSkpLHBEKHQsZSxyLCEwKSxqZShSZShRKGUuaixLNCkpKSYmSnQoZS5qLEs0LChGbigpLCExKSksamUoUmUoUShlLmosTXcpKSkmJihKdChlLmosTXcsKEZuKCksITEpKSxKdChlLmosSzQsITApKSxuPVJzdCh0LGUpO2Rve2lmKGl5dCh0KSxuPT0wKXJldHVybiAwO3I9IXIscz1uLHBEKHQsZSxyLCExKSxuPVJzdCh0LGUpfXdoaWxlKHM+bik7cmV0dXJuIHN9ZnVuY3Rpb24gc2xlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFY7aWYoZT09bilyZXR1cm4hMDtpZihlPWM1dCh0LGUpLG49YzV0KHQsbikscj1sc3QoZSkscil7aWYoQz1sc3QobiksQyE9cilyZXR1cm4gQz8odz1yLkRqKCksVj1DLkRqKCksdz09ViYmdyE9bnVsbCk6ITE7aWYoaD0oIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxvPWguaSxGPSghbi5kJiYobi5kPW5ldyBTcyhobyxuLDEpKSxuLmQpLG89PUYuaSl7Zm9yKGs9MDtrPG87KytrKWlmKHM9dShTdChoLGspLDg3KSxNPXUoU3QoRixrKSw4NyksIXNsZSh0LHMsTSkpcmV0dXJuITF9cmV0dXJuITB9ZWxzZSByZXR1cm4gZD1lLmUsSD1uLmUsZD09SH1mdW5jdGlvbiBhbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTTtpZihWMCh0LmUsZSkpe2ZvcihNPWF1KHQuZS5UZygpLGUpLG89dSh0LmcsMTE5KSxDPW51bGwsdz0tMSxkPS0xLHM9MCxrPTA7azx0Lmk7KytrKWg9b1trXSxNLnJsKGguYWsoKSkmJihzPT1uJiYodz1rKSxzPT1yJiYoZD1rLEM9aC5kZCgpKSwrK3MpO2lmKHc9PS0xKXRocm93IHJ0KG5ldyBtbyhXY3QrbitTMitzKSk7aWYoZD09LTEpdGhyb3cgcnQobmV3IG1vKEtjdCtyK1MyK3MpKTtyZXR1cm4gdF8odCx3LGQpLG1sKHQuZSkmJktrKHQsenAodCw3LGUsZGUociksQyxuLCEwKSksQ31lbHNlIHRocm93IHJ0KG5ldyBQbigiVGhlIGZlYXR1cmUgbXVzdCBiZSBtYW55LXZhbHVlZCB0byBzdXBwb3J0IG1vdmUiKSl9ZnVuY3Rpb24gb2xlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7c3dpdGNoKHc9bmV3IHlvKGUubiksdy5hKz1lLm8uYS8yLHcuYis9ZS5vLmIvMixkPVh0KHllKFEoZSwoVGUoKSx6eSkpKSksbz10LmYsaD10LmQscz10LmMsdShRKGUsKHNlKCksb2MpKSw2MSkuZyl7Y2FzZSAxOncuYSs9aC5iK3MuYS1uLzIsdy5iPS1yLWQsZS5uLmI9LShoLmQrZCtzLmIpO2JyZWFrO2Nhc2UgMjp3LmE9by5hK2guYitoLmMrZCx3LmIrPWguZCtzLmItci8yLGUubi5hPW8uYStoLmMrZC1zLmE7YnJlYWs7Y2FzZSAzOncuYSs9aC5iK3MuYS1uLzIsdy5iPW8uYitoLmQraC5hK2QsZS5uLmI9by5iK2guYStkLXMuYjticmVhaztjYXNlIDQ6dy5hPS1uLWQsdy5iKz1oLmQrcy5iLXIvMixlLm4uYT0tKGguYitkK3MuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gY2xlKHQpe3ZhciBlLG4scixzLG8saDtyZXR1cm4gcj1uZXcgS210LExvKHIsdCksR3QoUShyLChUZSgpLFZsKSkpPT09R3QoKGFvKCksYzApKSYmSnQocixWbCxFeihyKSksUShyLChMJCgpLEdTKSk9PW51bGwmJihoPXUoRWFlKHQpLDE2MCksSnQocixHUyxuaihoLldlKEdTKSkpKSxKdChyLChzZSgpLF9pKSx0KSxKdChyLEdjLChlPXUoSGYoQWx0KSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSkscz1jNG4oKHRzKHQpJiYoSW0oKSxuZXcgU20odHModCkpKSxJbSgpLG5ldyBybnQodHModCk/bmV3IFNtKHRzKHQpKTpudWxsLHQpKSxrZiksbz11KFEocixhQ3QpLDExNiksbj1yLmQscFF0KG4sbykscFF0KG4scykscn1mdW5jdGlvbiB4bW4odCxlLG4pe3ZhciByLHM7cj1lLmMuaSxzPW4uZC5pLHIuaz09KEduKCksWnMpPyhKdCh0LChzZSgpLG4xKSx1KFEocixuMSksMTEpKSxKdCh0LFJoLHUoUShyLFJoKSwxMSkpLEp0KHQsUHksUmUoUShyLFB5KSkpKTpyLms9PVNsPyhKdCh0LChzZSgpLG4xKSx1KFEocixuMSksMTEpKSxKdCh0LFJoLHUoUShyLFJoKSwxMSkpLEp0KHQsUHksKEZuKCksITApKSk6cy5rPT1TbD8oSnQodCwoc2UoKSxuMSksdShRKHMsbjEpLDExKSksSnQodCxSaCx1KFEocyxSaCksMTEpKSxKdCh0LFB5LChGbigpLCEwKSkpOihKdCh0LChzZSgpLG4xKSxlLmMpLEp0KHQsUmgsbi5kKSl9ZnVuY3Rpb24ga21uKHQpe3ZhciBlLG4scixzLG8saCxkO2Zvcih0Lm89bmV3IFAzLHI9bmV3IFFpLGg9bmV3IFModC5lLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEyMSksbzQobykuYy5sZW5ndGg9PTEmJmhzKHIsbyxyLmMuYixyLmMpO2Zvcig7ci5iIT0wOylvPXUoci5iPT0wP251bGw6KFFuKHIuYiE9MCksY2gocixyLmEuYSkpLDEyMSksbzQobykuYy5sZW5ndGghPTAmJihlPXUoRmUobzQobyksMCksMjEzKSxuPW8uZy5hLmMubGVuZ3RoPjAsZD1feihlLG8pLEwydChuP2QuYjpkLmcsZSksbzQoZCkuYy5sZW5ndGg9PTEmJmhzKHIsZCxyLmMuYixyLmMpLHM9bmV3IGxhKG8sZSkscXAodC5vLHMpLHZ1KHQuZS5hLG8pKX1mdW5jdGlvbiB1bGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdztyZXR1cm4gcj1iLk1hdGguYWJzKEdqKHQuYikuYS1HaihlLmIpLmEpLGQ9Yi5NYXRoLmFicyhHaih0LmIpLmItR2ooZS5iKS5iKSxzPTAsdz0wLG49MSxoPTEscj50LmIuYi8yK2UuYi5iLzImJihzPWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmIuYy0oZS5iLmMrZS5iLmIpKSxiLk1hdGguYWJzKHQuYi5jK3QuYi5iLWUuYi5jKSksbj0xLXMvciksZD50LmIuYS8yK2UuYi5hLzImJih3PWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmIuZC0oZS5iLmQrZS5iLmEpKSxiLk1hdGguYWJzKHQuYi5kK3QuYi5hLWUuYi5kKSksaD0xLXcvZCksbz1iLk1hdGgubWluKG4saCksKDEtbykqYi5NYXRoLnNxcnQocipyK2QqZCl9ZnVuY3Rpb24gRW1uKHQpe3ZhciBlLG4scixzO2ZvcihMYXQodCx0LmUsdC5mLChxdigpLGJiKSwhMCx0LmMsdC5pKSxMYXQodCx0LmUsdC5mLGJiLCExLHQuYyx0LmkpLExhdCh0LHQuZSx0LmYsZTUsITAsdC5jLHQuaSksTGF0KHQsdC5lLHQuZixlNSwhMSx0LmMsdC5pKSxDbW4odCx0LmMsdC5lLHQuZix0LmkpLHI9bmV3IGhhKHQuaSwwKTtyLmI8ci5kLmdjKCk7KWZvcihlPShRbihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMTI4KSkscz1uZXcgaGEodC5pLHIuYik7cy5iPHMuZC5nYygpOyluPShRbihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMTI4KSkscjNuKGUsbik7QzVuKHQuaSx1KFEodC5kLChzZSgpLE82KSksMjMwKSksJDNuKHQuaSl9ZnVuY3Rpb24gbGF0KHQsZSl7dmFyIG4scjtpZihlIT1udWxsKXtpZihyPWN3KHQpLHIpaWYoci5pJjEpe2lmKHI9PWRsKXJldHVybiBPbShlKTtpZihyPT1UcilyZXR1cm4gRXQoZSwxOSk7aWYocj09cjMpcmV0dXJuIEV0KGUsMTU1KTtpZihyPT1IdSlyZXR1cm4gRXQoZSwyMTcpO2lmKHI9PW1oKXJldHVybiBFdChlLDE3Mik7aWYocj09aWEpcmV0dXJuIE5tKGUpO2lmKHI9PWY1KXJldHVybiBFdChlLDE4NCk7aWYocj09TGIpcmV0dXJuIEV0KGUsMTYyKX1lbHNlIHJldHVybiBOUigpLG49dShKbihuVSxyKSw1NSksIW58fG4ud2ooZSk7ZWxzZSBpZihFdChlLDU2KSlyZXR1cm4gdC51ayh1KGUsNTYpKX1yZXR1cm4hMX1mdW5jdGlvbiBleHQoKXtleHQ9Wjt2YXIgdCxlLG4scixzLG8saCxkLHc7Zm9yKFUxPVB0KEh1LE40LDI1LDI1NSwxNSwxKSxycD1QdChtaCx2ZCwyNSw2NCwxNSwxKSxlPTA7ZTwyNTU7ZSsrKVUxW2VdPS0xO2ZvcihuPTkwO24+PTY1O24tLSlVMVtuXT1uLTY1PDwyND4+MjQ7Zm9yKHI9MTIyO3I+PTk3O3ItLSlVMVtyXT1yLTk3KzI2PDwyND4+MjQ7Zm9yKHM9NTc7cz49NDg7cy0tKVUxW3NdPXMtNDgrNTI8PDI0Pj4yNDtmb3IoVTFbNDNdPTYyLFUxWzQ3XT02MyxvPTA7bzw9MjU7bysrKXJwW29dPTY1K28mbXM7Zm9yKGg9MjYsdz0wO2g8PTUxOysraCx3KyspcnBbaF09OTcrdyZtcztmb3IodD01MixkPTA7dDw9NjE7Kyt0LGQrKylycFt0XT00OCtkJm1zO3JwWzYyXT00MyxycFs2M109NDd9ZnVuY3Rpb24gVG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKHQuZGMoKSlyZXR1cm4gbmV3IFRhO2ZvcihrPTAsTT0wLHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzNyksbz1yLmYsaz1iLk1hdGgubWF4KGssby5hKSxNKz1vLmEqby5iO2ZvcihrPWIuTWF0aC5tYXgoayxiLk1hdGguc3FydChNKSpYdCh5ZShRKHUodC5LYygpLlBiKCksMzcpLChUZSgpLFVHKSkpKSksRj0wLEg9MCx3PTAsbj1lLGQ9dC5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwzNyksQz1oLmYsRitDLmE+ayYmKEY9MCxIKz13K2Usdz0wKSx3XyhoLEYsSCksbj1iLk1hdGgubWF4KG4sRitDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksRis9Qy5hK2U7cmV0dXJuIG5ldyAkZShuK2UsSCt3K2UpfWZ1bmN0aW9uIENtbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNO2ZvcihoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KXtpZihvPXUoSihoKSwxNyksdz1vLmMsbi5hLl9iKHcpKWs9KHF2KCksYmIpO2Vsc2UgaWYoci5hLl9iKHcpKWs9KHF2KCksZTUpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKCJTb3VyY2UgcG9ydCBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcG9ydCBzZXRzLiIpKTtpZihDPW8uZCxuLmEuX2IoQykpTT0ocXYoKSxiYik7ZWxzZSBpZihyLmEuX2IoQykpTT0ocXYoKSxlNSk7ZWxzZSB0aHJvdyBydChuZXcgUG4oIlRhcmdldCBwb3J0IG11c3QgYmUgaW4gb25lIG9mIHRoZSBwb3J0IHNldHMuIikpO2Q9bmV3IGVvZShvLGssTSksa2kodC5iLG8sZCkscy5jW3MuYy5sZW5ndGhdPWR9fWZ1bmN0aW9uIG54dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKCFrMSh0KSl0aHJvdyBydChuZXcgRm8odWRlKSk7aWYocj1rMSh0KSxvPXIuZyxzPXIuZixvPD0wJiZzPD0wKXJldHVybiBiZSgpLFpvO3N3aXRjaChkPXQuaSx3PXQuaixlLmcpe2Nhc2UgMjpjYXNlIDE6aWYoZDwwKXJldHVybiBiZSgpLEJuO2lmKGQrdC5nPm8pcmV0dXJuIGJlKCksSG47YnJlYWs7Y2FzZSA0OmNhc2UgMzppZih3PDApcmV0dXJuIGJlKCksTm47aWYodyt0LmY+cylyZXR1cm4gYmUoKSxtcn1yZXR1cm4gaD0oZCt0LmcvMikvbyxuPSh3K3QuZi8yKS9zLGgrbjw9MSYmaC1uPD0wPyhiZSgpLEJuKTpoK24+PTEmJmgtbj49MD8oYmUoKSxIbik6bjwuNT8oYmUoKSxObik6KGJlKCksbXIpfWZ1bmN0aW9uIF9tbih0LGUsbixyLHMpe3ZhciBvLGg7aWYobz1PYShQcyhlWzBdLGNvKSxQcyhyWzBdLGNvKSksdFswXT1TcihvKSxvPUZwKG8sMzIpLG4+PXMpe2ZvcihoPTE7aDxzO2grKylvPU9hKG8sT2EoUHMoZVtoXSxjbyksUHMocltoXSxjbykpKSx0W2hdPVNyKG8pLG89RnAobywzMik7Zm9yKDtoPG47aCsrKW89T2EobyxQcyhlW2hdLGNvKSksdFtoXT1TcihvKSxvPUZwKG8sMzIpfWVsc2V7Zm9yKGg9MTtoPG47aCsrKW89T2EobyxPYShQcyhlW2hdLGNvKSxQcyhyW2hdLGNvKSkpLHRbaF09U3Iobyksbz1GcChvLDMyKTtmb3IoO2g8cztoKyspbz1PYShvLFBzKHJbaF0sY28pKSx0W2hdPVNyKG8pLG89RnAobywzMil9eWMobywwKSE9MCYmKHRbaF09U3IobykpfWZ1bmN0aW9uIGJ5KHQpe2dpKCk7dmFyIGUsbixyLHMsbyxoO2lmKHQuZSE9NCYmdC5lIT01KXRocm93IHJ0KG5ldyBQbigiVG9rZW4jY29tcGxlbWVudFJhbmdlcygpOiBtdXN0IGJlIFJBTkdFOiAiK3QuZSkpO2ZvcihvPXQsYjQobyksVF8obykscj1vLmIubGVuZ3RoKzIsby5iWzBdPT0wJiYoci09Miksbj1vLmJbby5iLmxlbmd0aC0xXSxuPT1XRSYmKHItPTIpLHM9bmV3IE5sKDQpLHMuYj1QdChUcixYciwyNSxyLDE1LDEpLGg9MCxvLmJbMF0+MCYmKHMuYltoKytdPTAscy5iW2grK109by5iWzBdLTEpLGU9MTtlPG8uYi5sZW5ndGgtMjtlKz0yKXMuYltoKytdPW8uYltlXSsxLHMuYltoKytdPW8uYltlKzFdLTE7cmV0dXJuIG4hPVdFJiYocy5iW2grK109bisxLHMuYltoXT1XRSkscy5hPSEwLHN9ZnVuY3Rpb24gaGF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYodC5laigpKWlmKGs9dC5maigpLExzdCh0LGUsbiksaD1yPT0xP3QuWmkoMyxudWxsLG4uS2MoKS5QYigpLGUsayk6dC5aaSg1LG51bGwsbixlLGspLHQuYmooKSl7Zm9yKGQ9cjwxMDA/bnVsbDpuZXcgU3Aociksbz1lK3Iscz1lO3M8bzsrK3MpQz10Lmdbc10sZD10LmNqKEMsZCksZD10LmpqKEMsZCk7ZD8oZC5FaShoKSxkLkZpKCkpOnQuJGkoaCl9ZWxzZSB0LiRpKGgpO2Vsc2UgaWYoTHN0KHQsZSxuKSx0LmJqKCkpe2ZvcihkPXI8MTAwP251bGw6bmV3IFNwKHIpLG89ZStyLHM9ZTtzPG87KytzKXc9dC5nW3NdLGQ9dC5jaih3LGQpO2QmJmQuRmkoKX1yZXR1cm4hMH1mdW5jdGlvbiByeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3IoaD1uZXcgUyh0LmspO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEyOSksKCFyfHxzLmM9PShWZigpLHBiKSkmJih3PXMuYix3Lmc8MCYmcy5kPjAmJihuTSh3LHcuZC1zLmQpLHMuYz09KFZmKCkscGIpJiZ1cHQodyx3LmEtcy5kKSx3LmQ8PTAmJncuaT4wJiZocyhlLHcsZS5jLmIsZS5jKSkpO2ZvcihvPW5ldyBTKHQuZik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTI5KSwoIXJ8fHMuYz09KFZmKCkscGIpKSYmKGQ9cy5hLGQuZzwwJiZzLmQ+MCYmKHg5KGQsZC5pLXMuZCkscy5jPT0oVmYoKSxwYikmJmd2KGQsZC5iLXMuZCksZC5pPD0wJiZkLmQ+MCYmaHMobixkLG4uYy5iLG4uYykpKX1mdW5jdGlvbiBTbW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKHdyKG4sIlByb2Nlc3NvciBjb21wdXRlIGZhbm91dCIsMSksWXUodC5iKSxZdSh0LmEpLGQ9bnVsbCxvPWVpKGUuYiwwKTshZCYmby5iIT1vLmQuYzspaz11KHRpKG8pLDg2KSxqZShSZShRKGssKGZjKCksV3kpKSkpJiYoZD1rKTtmb3Iodz1uZXcgUWksaHModyxkLHcuYy5iLHcuYykseWhlKHQsdyksQz1laShlLmIsMCk7Qy5iIT1DLmQuYzspaz11KHRpKEMpLDg2KSxoPUJyKFEoaywoZmMoKSxSUykpKSxzPUZjKHQuYixoKSE9bnVsbD91KEZjKHQuYixoKSwxOSkuYTowLEp0KGssbVYsZGUocykpLHI9MSsoRmModC5hLGgpIT1udWxsP3UoRmModC5hLGgpLDE5KS5hOjApLEp0KGssWm1lLGRlKHIpKTtvcihuKX1mdW5jdGlvbiBBbW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoRj1oZG4odCxuKSx3PTA7dzxlO3crKyl7Zm9yKFJtKHMsbiksSD1uZXcgbGUsVj0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDQwNykpLEM9Rit3O0M8dC5iO0MrKylkPVYsVj0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDQwNykpLHVlKEgsbmV3IFJjZShkLFYsbikpO2ZvcihNPUYrdztNPHQuYjtNKyspUW4oci5iPjApLHIuYS5YYihyLmM9LS1yLmIpLE0+Rit3JiZFbChyKTtmb3IoaD1uZXcgUyhIKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw0MDcpLFJtKHIsbyk7aWYodzxlLTEpZm9yKGs9Rit3O2s8dC5iO2srKylRbihyLmI+MCksci5hLlhiKHIuYz0tLXIuYil9fWZ1bmN0aW9uIExtbigpe2dpKCk7dmFyIHQsZSxuLHIscyxvO2lmKE9mdClyZXR1cm4gT2Z0O2Zvcih0PW5ldyBObCg0KSx2eSh0LHRiKGh1dCwhMCkpLF9fKHQsdGIoIk0iLCEwKSksX18odCx0YigiQyIsITApKSxvPW5ldyBObCg0KSxyPTA7cjwxMTtyKyspamMobyxyLHIpO3JldHVybiBlPW5ldyBObCg0KSx2eShlLHRiKCJNIiwhMCkpLGpjKGUsNDQ0OCw0NjA3KSxqYyhlLDY1NDM4LDY1NDM5KSxzPW5ldyBsQygyKSxtMihzLHQpLG0yKHMsZkEpLG49bmV3IGxDKDIpLG4uJGwoQmoobyx0YigiTCIsITApKSksbi4kbChlKSxuPW5ldyBXbSgzLG4pLG49bmV3IGZ3dChzLG4pLE9mdD1uLE9mdH1mdW5jdGlvbiBNbW4odCl7dmFyIGUsbjtpZihlPUJyKHFlKHQsKGNpKCksVlMpKSksIUNuZShlLHQpJiYhcjIodCxDNykmJigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkuaSE9MHx8amUoUmUocWUodCxXTykpKSkpaWYoZT09bnVsbHx8dXkoZSkubGVuZ3RoPT0wKXtpZighQ25lKFZuLHQpKXRocm93IG49VnIoVnIobmV3IElsKCJVbmFibGUgdG8gbG9hZCBkZWZhdWx0IGxheW91dCBhbGdvcml0aG0gIiksVm4pLCIgZm9yIHVuY29uZmlndXJlZCBub2RlICIpLENxKHQsbikscnQobmV3IEYzKG4uYSkpfWVsc2UgdGhyb3cgbj1WcihWcihuZXcgSWwoIkxheW91dCBhbGdvcml0aG0gJyIpLGUpLCInIG5vdCBmb3VuZCBmb3IgIiksQ3EodCxuKSxydChuZXcgRjMobi5hKSl9ZnVuY3Rpb24gZmF0KHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKG49dC5pLGU9dC5uLHQuYj09MClmb3IoSD1uLmMrZS5iLEY9bi5iLWUuYi1lLmMsaD10LmEsdz0wLEM9aC5sZW5ndGg7dzxDOysrdylzPWhbd10samoocyxILEYpO2Vsc2Ugcj1vc2UodCwhMSksamoodC5hWzBdLG4uYytlLmIsclswXSksamoodC5hWzJdLG4uYytuLmItZS5jLXJbMl0sclsyXSksTT1uLmItZS5iLWUuYyxyWzBdPjAmJihNLT1yWzBdK3QuYyxyWzBdKz10LmMpLHJbMl0+MCYmKE0tPXJbMl0rdC5jKSxyWzFdPWIuTWF0aC5tYXgoclsxXSxNKSxqaih0LmFbMV0sbi5jK2UuYityWzBdLShyWzFdLU0pLzIsclsxXSk7Zm9yKG89dC5hLGQ9MCxrPW8ubGVuZ3RoO2Q8azsrK2Qpcz1vW2RdLEV0KHMsMzI2KSYmdShzLDMyNikuVGUoKX1mdW5jdGlvbiBJbW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoTT1uZXcgX1EsTS5kPTAsaD1uZXcgUyh0LmIpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDI5KSxNLmQrPW8uYS5jLmxlbmd0aDtmb3Iocj0wLHM9MCxNLmE9UHQoVHIsWHIsMjUsdC5iLmMubGVuZ3RoLDE1LDEpLGs9MCxDPTAsTS5lPVB0KFRyLFhyLDI1LE0uZCwxNSwxKSxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKGU9dShKKG4pLDI5KSxlLnA9cisrLE0uYVtlLnBdPXMrKyxDPTAsdz1uZXcgUyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxkLnA9aysrLE0uZVtkLnBdPUMrKztyZXR1cm4gTS5jPW5ldyBJJHQoTSksTS5iPUhkKE0uZCksY21uKE0sdCksTS5mPUhkKE0uZCksdW1uKE0sdCksTX1mdW5jdGlvbiBsbGUodCxlKXt2YXIgbixyLHMsbztmb3Iobz11KEZlKHQubix0Lm4uYy5sZW5ndGgtMSksMjExKS5kLHQucD1iLk1hdGgubWluKHQucCxlLmcpLHQucj1iLk1hdGgubWF4KHQucixvKSx0Lmc9Yi5NYXRoLm1heCh0LmcsZS5nKyh0LmIuYy5sZW5ndGg9PTE/MDp0LmkpKSx0Lm89Yi5NYXRoLm1pbih0Lm8sZS5mKSx0LmUrPWUuZisodC5iLmMubGVuZ3RoPT0xPzA6dC5pKSx0LmY9Yi5NYXRoLm1heCh0LmYsZS5mKSxzPXQubi5jLmxlbmd0aD4wPyh0Lm4uYy5sZW5ndGgtMSkqdC5pOjAscj1uZXcgUyh0Lm4pO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxMSkscys9bi5hO3QuZD1zLHQuYT10LmUvdC5iLmMubGVuZ3RoLXQuaSooKHQuYi5jLmxlbmd0aC0xKS90LmIuYy5sZW5ndGgpLEczdCh0LmopfWZ1bmN0aW9uIGhsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKEM9UmUoUShlLChaZigpLGliZSkpKSxDPT1udWxsfHwoT24oQyksQykpe2ZvcihNPVB0KGRsLGkwLDI1LGUuZS5jLmxlbmd0aCwxNiwxKSxoPUVwbihlKSxzPW5ldyBRaSxrPW5ldyBTKGUuZSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTQ0KSxuPXk1dCh0LGQsbnVsbCxudWxsLE0saCksbiYmKExvKG4sZSksaHMocyxuLHMuYy5iLHMuYykpO2lmKHMuYj4xKWZvcihyPWVpKHMsMCk7ci5iIT1yLmQuYzspZm9yKG49dSh0aShyKSwyMzEpLG89MCx3PW5ldyBTKG4uZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTQ0KSxkLmI9bysrO3JldHVybiBzfXJldHVybiBfMShjdChvdChjeG4sMSksaTZ0LDIzMSwwLFtlXSkpfWZ1bmN0aW9uIHBkKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKCF0Lmcpe2lmKGQ9bmV3IHFiLGU9YUEsaD1lLmEuemModCxlKSxoPT1udWxsKXtmb3Iocj1uZXcgZXIoU28odCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwyNikscnMoZCxwZChuKSk7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfWZvcihzPWQuaSxvPSghdC5zJiYodC5zPW5ldyBoZShBdSx0LDIxLDE3KSksbmV3IGVyKHQucykpO28uZSE9by5pLmdjKCk7KytzKUV0dCh1KGRyKG8pLDQ0OSkscyk7cnMoZCwoIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLHQucykpLGV5KGQpLHQuZz1uZXcgdHJlKHQsZCksdC5pPXUoZC5nLDI0NyksdC5pPT1udWxsJiYodC5pPV9mdCksdC5wPW51bGwscmwodCkuYiY9LTV9cmV0dXJuIHQuZ31mdW5jdGlvbiBkYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihyPXQuaSxuPXQubix0LmI9PTApZT1hc2UodCwhMSksJGoodC5hWzBdLHIuZCtuLmQsZVswXSksJGoodC5hWzJdLHIuZCtyLmEtbi5hLWVbMl0sZVsyXSksRj1yLmEtbi5kLW4uYSxNPUYsZVswXT4wJiYoZVswXSs9dC5jLE0tPWVbMF0pLGVbMl0+MCYmKE0tPWVbMl0rdC5jKSxlWzFdPWIuTWF0aC5tYXgoZVsxXSxNKSwkaih0LmFbMV0sci5kK24uZCtlWzBdLShlWzFdLU0pLzIsZVsxXSk7ZWxzZSBmb3IoVj1yLmQrbi5kLEg9ci5hLW4uZC1uLmEsaD10LmEsdz0wLEM9aC5sZW5ndGg7dzxDOysrdylzPWhbd10sJGoocyxWLEgpO2ZvcihvPXQuYSxkPTAsaz1vLmxlbmd0aDtkPGs7KytkKXM9b1tkXSxFdChzLDMyNikmJnUocywzMjYpLlVlKCl9ZnVuY3Rpb24gRG1uKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihDPVB0KFRyLFhyLDI1LHQuYi5jLmxlbmd0aCsxLDE1LDEpLGs9bmV3IHFzLHI9MCxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoSihvKSwyOSksQ1tyKytdPWsuYS5nYygpLHc9bmV3IFMocy5hKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoaD11KEoodyksMTApLG49bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKG4pOyllPXUoTHIobiksMTcpLGsuYS56YyhlLGspO2ZvcihkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDEwKSxuPW5ldyBhcihscihqbyhoKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDE3KSxrLmEuQmMoZSkhPW51bGx9cmV0dXJuIEN9ZnVuY3Rpb24gbXEodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZih3PWF1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLHcucmwoby5haygpKSYmeWkobyxuKSlyZXR1cm4hMH1lbHNlIGlmKG4hPW51bGwpe2ZvcihkPTA7ZDx0Lmk7KytkKWlmKG89c1tkXSx3LnJsKG8uYWsoKSkmJnlpKG4sby5kZCgpKSlyZXR1cm4hMDtpZihyKXtmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0sdy5ybChvLmFrKCkpJiZHdChuKT09PUd0KGNudCh0LHUoby5kZCgpLDU2KSkpKXJldHVybiEwfX1lbHNlIGZvcihoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx3LnJsKG8uYWsoKSkmJm8uZGQoKT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMX1mdW5jdGlvbiBmbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2lmKGs9YXUodC5lLlRnKCksZSksaD11KHQuZywxMTkpLFYwKHQuZSxlKSl7aWYoZS5oaSgpJiYobz1FRSh0LGUscixFdChlLDk5KSYmKHUoZSwxOCkuQmImWWEpIT0wKSxvPj0wJiZvIT1uKSl0aHJvdyBydChuZXcgUG4oWEQpKTtmb3Iocz0wLHc9MDt3PHQuaTsrK3cpaWYoZD1oW3ddLGsucmwoZC5haygpKSl7aWYocz09bilyZXR1cm4gdSh1NCh0LHcsKHRvKCksdShlLDY2KS5PaigpP3Uociw3Mik6WWQoZSxyKSkpLDcyKTsrK3N9dGhyb3cgcnQobmV3IG1vKFhfK24rUzIrcykpfWVsc2V7Zm9yKHc9MDt3PHQuaTsrK3cpaWYoZD1oW3ddLGsucmwoZC5haygpKSlyZXR1cm4gdG8oKSx1KGUsNjYpLk9qKCk/ZDpkLmRkKCk7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGRsZSh0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3IoZD1uLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7aWYobz11KEooaCksMjIxKSxzPXUoby5iLDY1KSxydyh0LmIuYyxzLmIuYytzLmIuYik8PTAmJnJ3KHMuYi5jLHQuYi5jK3QuYi5iKTw9MCYmcncodC5iLmQscy5iLmQrcy5iLmEpPD0wJiZydyhzLmIuZCx0LmIuZCt0LmIuYSk8PTApe2lmKHJ3KHMuYi5jLHQuYi5jK3QuYi5iKT09MCYmci5hPDB8fHJ3KHMuYi5jK3MuYi5iLHQuYi5jKT09MCYmci5hPjB8fHJ3KHMuYi5kLHQuYi5kK3QuYi5hKT09MCYmci5iPDB8fHJ3KHMuYi5kK3MuYi5hLHQuYi5kKT09MCYmci5iPjApe2Q9MDticmVha319ZWxzZSBkPWIuTWF0aC5taW4oZCxkb2UodCxzLHIpKTtkPWIuTWF0aC5taW4oZCxkbGUodCxvLGQscikpfXJldHVybiBkfWZ1bmN0aW9uIHlEKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYodC5iPDIpdGhyb3cgcnQobmV3IFBuKCJUaGUgdmVjdG9yIGNoYWluIG11c3QgY29udGFpbiBhdCBsZWFzdCBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgcG9pbnQuIikpO2ZvcihzPShRbih0LmIhPTApLHUodC5hLmEuYyw4KSksb2ooZSxzLmEscy5iKSx3PW5ldyBMeCgoIWUuYSYmKGUuYT1uZXcgU3MoSGgsZSw1KSksZS5hKSksaD1laSh0LDEpO2guYTx0LmItMTspZD11KHRpKGgpLDgpLHcuZSE9dy5pLmdjKCk/bj11KGRyKHcpLDQ2OSk6KG49KFR2KCkscj1uZXcgdnAsciksZ2llKHcsbikpLG4ydChuLGQuYSxkLmIpO2Zvcig7dy5lIT13LmkuZ2MoKTspZHIodyksdV8odyk7bz0oUW4odC5iIT0wKSx1KHQuYy5iLmMsOCkpLGFqKGUsby5hLG8uYil9ZnVuY3Rpb24gZ2xlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihuPTAscz1uZXcgUygoQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMDEpKS5nLmIuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEpLHIucD1uKys7Zm9yKGU9PShiZSgpLE5uKT9Ycyh0LG5ldyBOWCk6WHModCxuZXcgUFgpLGQ9MCxDPXQuYy5sZW5ndGgtMTtkPEM7KWg9KEFuKGQsdC5jLmxlbmd0aCksdSh0LmNbZF0sMTAxKSksaz0oQW4oQyx0LmMubGVuZ3RoKSx1KHQuY1tDXSwxMDEpKSxvPWU9PU5uP2guYzpoLmEsdz1lPT1Obj9rLmE6ay5jLF9nKGgsZSwoTTEoKSxzNyksbyksX2coayxlLGk3LHcpLCsrZCwtLUM7ZD09QyYmX2coKEFuKGQsdC5jLmxlbmd0aCksdSh0LmNbZF0sMTAxKSksZSwoTTEoKSxfNiksbnVsbCl9ZnVuY3Rpb24gT21uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtyZXR1cm4gTT10LmEuaSt0LmEuZy8yLEY9dC5hLmkrdC5hLmcvMixWPWUuaStlLmcvMix0dD1lLmorZS5mLzIsZD1uZXcgJGUoVix0dCksaz11KHFlKGUsKGNpKCksejYpKSw4KSxrLmE9ay5hK00say5iPWsuYitGLG89KGQuYi1rLmIpLyhkLmEtay5hKSxyPWQuYi1vKmQuYSxZPW4uaStuLmcvMixndD1uLmorbi5mLzIsdz1uZXcgJGUoWSxndCksQz11KHFlKG4sejYpLDgpLEMuYT1DLmErTSxDLmI9Qy5iK0YsaD0ody5iLUMuYikvKHcuYS1DLmEpLHM9dy5iLWgqdy5hLEg9KHItcykvKGgtbyksay5hPEgmJmQuYTxIfHxIPGsuYSYmSDxkLmE/ITE6IShDLmE8SCYmdy5hPEh8fEg8Qy5hJiZIPHcuYSl9ZnVuY3Rpb24gTm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKEY9dShKbih0LmMsZSksMTgzKSwhRil0aHJvdyBydChuZXcgYWQoIkVkZ2UgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGs9b0UoRiksbz1mTSgoIWUuYSYmKGUuYT1uZXcgaGUoWmksZSw2LDYpKSxlLmEpKSxkPSFvLGQmJihIPW5ldyBiZyxuPW5ldyB5S3QodCxrLEgpLGpZZSgoIWUuYSYmKGUuYT1uZXcgaGUoWmksZSw2LDYpKSxlLmEpLG4pLFdmKEYsYjh0LEgpKSxzPXIyKGUsKGNpKCksaTUpKSxzJiYoQz11KHFlKGUsaTUpLDc0KSxoPSFDfHxzWHQoQyksdz0haCx3JiYoTT1uZXcgYmcscj1uZXcgZHp0KE0pLHZhKEMsciksV2YoRiwianVuY3Rpb25Qb2ludHMiLE0pKSkscDgoRiwiY29udGFpbmVyIixySShlKS5rKSxudWxsfWZ1bmN0aW9uIGl4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQzt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLmU9XzEoY3Qob3Qoc3huLDEpLEllLDE2OCwwLFtuZXcgVHgodCxlKSxuZXcgVHgoZSxuKSxuZXcgVHgobix0KV0pKSx0aGlzLmY9XzEoY3Qob3QoVXMsMSksdGUsOCwwLFt0LGUsbl0pKSx0aGlzLmQ9KHI9bmEobmModGhpcy5iKSx0aGlzLmEpLHM9bmEobmModGhpcy5jKSx0aGlzLmEpLG89bmEobmModGhpcy5jKSx0aGlzLmIpLGg9ci5hKih0aGlzLmEuYSt0aGlzLmIuYSkrci5iKih0aGlzLmEuYit0aGlzLmIuYiksZD1zLmEqKHRoaXMuYS5hK3RoaXMuYy5hKStzLmIqKHRoaXMuYS5iK3RoaXMuYy5iKSx3PTIqKHIuYSpvLmItci5iKm8uYSksaz0ocy5iKmgtci5iKmQpL3csQz0oci5hKmQtcy5hKmgpL3csbmV3ICRlKGssQykpfWZ1bmN0aW9uIHBsZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWO2lmKEY9bmV3IEhtKHQucCksV2YoZSxvaSxGKSxuJiYhKHQuZj9KTSh0LmYpOm51bGwpLmEuZGMoKSlmb3IoQz1uZXcgYmcsV2YoZSwibG9ncyIsQyksZD0wLFY9bmV3IEEoKHQuZj9KTSh0LmYpOm51bGwpLmIuS2MoKSk7Vi5iLk9iKCk7KUg9QnIoVi5iLlBiKCkpLE09bmV3IEhtKEgpLFhtKEMsZCksX3J0KEMsZCxNKSwrK2Q7aWYociYmKGs9bmV3IHk5KHQucSksV2YoZSwiZXhlY3V0aW9uVGltZSIsaykpLCFKTSh0LmEpLmEuZGMoKSlmb3IoaD1uZXcgYmcsV2YoZSxHY3QsaCksZD0wLG89bmV3IEEoSk0odC5hKS5iLktjKCkpO28uYi5PYigpOylzPXUoby5iLlBiKCksMTk0OSksdz1uZXcgbXgsWG0oaCxkKSxfcnQoaCxkLHcpLHBsZShzLHcsbixyKSwrK2R9ZnVuY3Rpb24gZHcodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKG89dC5jLGg9dC5kLERhKHQsbnVsbCksc2EodCxudWxsKSxlJiZqZShSZShRKGgsKHNlKCksUGx0KSkpKT9EYSh0LFE1dChoLmksKHNvKCksZXUpLChiZSgpLEhuKSkpOkRhKHQsaCksZSYmamUoUmUoUShvLChzZSgpLEJsdCkpKSk/c2EodCxRNXQoby5pLChzbygpLEp1KSwoYmUoKSxCbikpKTpzYSh0LG8pLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw3MCkscz11KFEobiwoVGUoKSxNZCkpLDI3Mikscz09KEExKCksUzcpP0p0KG4sTWQsWXkpOnM9PVl5JiZKdChuLE1kLFM3KTtkPWplKFJlKFEodCwoc2UoKSwkMSkpKSksSnQodCwkMSwoRm4oKSwhZCkpLHQuYT1CSSh0LmEpfWZ1bmN0aW9uIFBtbih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihyPTAsbz1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtvLmUhPW8uaS5nYygpOylzPXUoZHIobyksMzMpLGg9IiIsKCFzLm4mJihzLm49bmV3IGhlKHFvLHMsMSw3KSkscy5uKS5pPT0wfHwoaD11KFN0KCghcy5uJiYocy5uPW5ldyBoZShxbyxzLDEsNykpLHMubiksMCksMTM3KS5hKSxkPW5ldyBRWXQoaCksTG8oZCxzKSxKdChkLChHcCgpLEM2KSxzKSxkLmI9cisrLGQuZC5hPXMuaStzLmcvMixkLmQuYj1zLmorcy5mLzIsZC5lLmE9Yi5NYXRoLm1heChzLmcsMSksZC5lLmI9Yi5NYXRoLm1heChzLmYsMSksdWUoZS5lLGQpLHN1KG4uZixzLGQpLHc9dShxZShzLChaZigpLHA3dCkpLDk4KSx3PT0ob2EoKSx5YikmJih3PUgxKX1mdW5jdGlvbiBGbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O249RHYobmV3IFViLHQuZiksaz10LmlbZS5jLmkucF0sSD10LmlbZS5kLmkucF0sdz1lLmMsRj1lLmQsZD13LmEuYixNPUYuYS5iLGsuYnx8KGQrPXcubi5iKSxILmJ8fChNKz1GLm4uYiksQz1wcyhiLk1hdGgubWF4KDAsZC1NKSksaD1wcyhiLk1hdGgubWF4KDAsTS1kKSksVj0oWT1iLk1hdGgubWF4KDEsdShRKGUsKFRlKCksRjYpKSwxOSkuYSksdHQ9dG10KGUuYy5pLmssZS5kLmkuayksWSp0dCkscz12ZihvZihhZihzZihjZihuZXcgRWgsViksaCksbiksdShKbih0LmssZS5jKSwxMjEpKSksbz12ZihvZihhZihzZihjZihuZXcgRWgsViksQyksbiksdShKbih0LmssZS5kKSwxMjEpKSkscj1uZXcgSkd0KHMsbyksdC5jW2UucF09cn1mdW5jdGlvbiBCbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihoPW5ldyBxbGUodCxlLG4pLHc9bmV3IGhhKHIsMCkscz0hMTt3LmI8dy5kLmdjKCk7KWQ9KFFuKHcuYjx3LmQuZ2MoKSksdSh3LmQuWGIody5jPXcuYisrKSwyMzMpKSxkPT1lfHxkPT1uP0VsKHcpOiFzJiZYdCh4MShkLmcsZC5kWzBdKS5hKT5YdCh4MShoLmcsaC5kWzBdKS5hKT8oUW4ody5iPjApLHcuYS5YYih3LmM9LS13LmIpLFJtKHcsaCkscz0hMCk6ZC5lJiZkLmUuZ2MoKT4wJiYobz0oIWQuZSYmKGQuZT1uZXcgbGUpLGQuZSkuTWMoZSksaz0oIWQuZSYmKGQuZT1uZXcgbGUpLGQuZSkuTWMobiksKG98fGspJiYoKCFkLmUmJihkLmU9bmV3IGxlKSxkLmUpLkZjKGgpLCsraC5jKSk7c3x8KHIuY1tyLmMubGVuZ3RoXT1oKX1mdW5jdGlvbiBibGUodCl7dmFyIGUsbixyO2lmKEgzKHUoUSh0LChUZSgpLG9zKSksOTgpKSlmb3Iobj1uZXcgUyh0LmopO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDExKSxlLmo9PShiZSgpLFpvKSYmKHI9dShRKGUsKHNlKCksWnUpKSwxMCkscj9GcyhlLHUoUShyLG9jKSw2MSkpOmUuZS5jLmxlbmd0aC1lLmcuYy5sZW5ndGg8MD9GcyhlLEhuKTpGcyhlLEJuKSk7ZWxzZXtmb3Iobj1uZXcgUyh0LmopO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDExKSxyPXUoUShlLChzZSgpLFp1KSksMTApLHI/RnMoZSx1KFEocixvYyksNjEpKTplLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RoPDA/RnMoZSwoYmUoKSxIbikpOkZzKGUsKGJlKCksQm4pKTtKdCh0LG9zLChvYSgpLEw3KSl9fWZ1bmN0aW9uIHhEKHQpe3ZhciBlLG4scjtzd2l0Y2godCl7Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDU6Y2FzZSA5NDpjYXNlIDQ0OmNhc2UgOTI6cj0iXFwiK1N0cmluZy5mcm9tQ2hhckNvZGUodCZtcyk7YnJlYWs7Y2FzZSAxMjpyPSJcXGYiO2JyZWFrO2Nhc2UgMTA6cj0iXFxuIjticmVhaztjYXNlIDEzOnI9IlxcciI7YnJlYWs7Y2FzZSA5OnI9IlxcdCI7YnJlYWs7Y2FzZSAyNzpyPSJcXGUiO2JyZWFrO2RlZmF1bHQ6dDwzMj8obj0oZT10Pj4+MCwiMCIrZS50b1N0cmluZygxNikpLHI9IlxceCIrRGwobixuLmxlbmd0aC0yLG4ubGVuZ3RoKSk6dD49WWE/KG49KGU9dD4+PjAsIjAiK2UudG9TdHJpbmcoMTYpKSxyPSJcXHYiK0RsKG4sbi5sZW5ndGgtNixuLmxlbmd0aCkpOnI9IiIrU3RyaW5nLmZyb21DaGFyQ29kZSh0Jm1zKX1yZXR1cm4gcn1mdW5jdGlvbiBnYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtpZihoPXQuZSx3PWUuZSx3PT0wKXJldHVybiB0O2lmKGg9PTApcmV0dXJuIGUuZT09MD9lOm5ldyBLMygtZS5lLGUuZCxlLmEpO2lmKG89dC5kLGQ9ZS5kLG8rZD09MilyZXR1cm4gbj1Qcyh0LmFbMF0sY28pLHI9UHMoZS5hWzBdLGNvKSxoPDAmJihuPU84KG4pKSx3PDAmJihyPU84KHIpKSxLSShZcChuLHIpKTtpZihzPW8hPWQ/bz5kPzE6LTE6UHl0KHQuYSxlLmEsbykscz09LTEpTT0tdyxDPWg9PXc/RnJ0KGUuYSxkLHQuYSxvKTpScnQoZS5hLGQsdC5hLG8pO2Vsc2UgaWYoTT1oLGg9PXcpe2lmKHM9PTApcmV0dXJuIEpwKCksUUU7Qz1GcnQodC5hLG8sZS5hLGQpfWVsc2UgQz1ScnQodC5hLG8sZS5hLGQpO3JldHVybiBrPW5ldyBLMyhNLEMubGVuZ3RoLEMpLE9DKGspLGt9ZnVuY3Rpb24gc3h0KHQpe3ZhciBlLG4scixzLG8saDtmb3IodGhpcy5lPW5ldyBsZSx0aGlzLmE9bmV3IGxlLG49dC5iLTE7bjwzO24rKyloOCh0LDAsdShRZih0LDApLDgpKTtpZih0LmI8NCl0aHJvdyBydChuZXcgUG4oIkF0IChsZWFzdCBkaW1lbnNpb24gKyAxKSBjb250cm9sIHBvaW50cyBhcmUgbmVjZXNzYXJ5ISIpKTtmb3IodGhpcy5iPTMsdGhpcy5kPSEwLHRoaXMuYz0hMSxrYm4odGhpcyx0LmIrdGhpcy5iLTEpLGg9bmV3IGxlLG89bmV3IFModGhpcy5lKSxlPTA7ZTx0aGlzLmItMTtlKyspdWUoaCx5ZShKKG8pKSk7Zm9yKHM9ZWkodCwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksOCksdWUoaCx5ZShKKG8pKSksdWUodGhpcy5hLG5ldyByUXQocixoKSksQW4oMCxoLmMubGVuZ3RoKSxoLmMuc3BsaWNlKDAsMSl9ZnVuY3Rpb24gdmxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDI5KSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDEwKSxoLms9PShHbigpLFNsKSYmKHc9KGs9dShMcihuZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSkpLDE3KSxDPXUoTHIobmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpKSwxNyksIWplKFJlKFEoaywoc2UoKSwkMSkpKSl8fCFqZShSZShRKEMsJDEpKSk/ZTpVbmUoZSkpLGM2KGgsdykpLHI9bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLHc9amUoUmUoUShuLChzZSgpLCQxKSkpKT9VbmUoZSk6ZSxqbmUobix3KX1mdW5jdGlvbiBSbW4odCxlLG4scixzKXt2YXIgbyxoLGQ7aWYobi5mPj1lLm8mJm4uZjw9ZS5mfHxlLmEqLjU8PW4uZiYmZS5hKjEuNT49bi5mKXtpZihoPXUoRmUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLGguZStoLmQrbi5nK3M8PXImJihvPXUoRmUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLG8uZi10LmYrbi5mPD10LmJ8fHQuYS5jLmxlbmd0aD09MSkpcmV0dXJuIGkzdChlLG4pLCEwO2lmKGUucytuLmc8PXImJihlLnQrZS5kK24uZitzPD10LmJ8fHQuYS5jLmxlbmd0aD09MSkpcmV0dXJuIHVlKGUuYixuKSxkPXUoRmUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLHVlKGUubixuZXcgZiQoZS5zLGQuZitkLmErZS5pLGUuaSkpLCQzdCh1KEZlKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxuKSxsbGUoZSxuKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiB3bGUodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiB0LmVqKCk/KHM9bnVsbCxvPXQuZmooKSxyPXQuWmkoMSxoPUtydCh0LGUsbiksbixlLG8pLHQuYmooKSYmISh0Lm5pKCkmJmghPW51bGw/eWkoaCxuKTpHdChoKT09PUd0KG4pKT8oaCE9bnVsbCYmKHM9dC5kaihoLHMpKSxzPXQuY2oobixzKSx0LmlqKCkmJihzPXQubGooaCxuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6KHQuaWooKSYmKHM9dC5saihoLG4scykpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKSxoKTooaD1LcnQodCxlLG4pLHQuYmooKSYmISh0Lm5pKCkmJmghPW51bGw/eWkoaCxuKTpHdChoKT09PUd0KG4pKSYmKHM9bnVsbCxoIT1udWxsJiYocz10LmRqKGgsbnVsbCkpLHM9dC5jaihuLHMpLHMmJnMuRmkoKSksaCl9ZnVuY3Rpb24geV8odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2UlPTI0LHQucS5nZXRIb3VycygpIT1lJiYocj1uZXcgYi5EYXRlKHQucS5nZXRUaW1lKCkpLHIuc2V0RGF0ZShyLmdldERhdGUoKSsxKSxkPXQucS5nZXRUaW1lem9uZU9mZnNldCgpLXIuZ2V0VGltZXpvbmVPZmZzZXQoKSxkPjAmJih3PWQvNjB8MCxrPWQlNjAscz10LnEuZ2V0RGF0ZSgpLG49dC5xLmdldEhvdXJzKCksbit3Pj0yNCYmKytzLG89bmV3IGIuRGF0ZSh0LnEuZ2V0RnVsbFllYXIoKSx0LnEuZ2V0TW9udGgoKSxzLGUrdyx0LnEuZ2V0TWludXRlcygpK2ssdC5xLmdldFNlY29uZHMoKSx0LnEuZ2V0TWlsbGlzZWNvbmRzKCkpLHQucS5zZXRUaW1lKG8uZ2V0VGltZSgpKSkpLGg9dC5xLmdldFRpbWUoKSx0LnEuc2V0VGltZShoKzM2ZTUpLHQucS5nZXRIb3VycygpIT1lJiZ0LnEuc2V0VGltZShoKX1mdW5jdGlvbiBqbW4odCxlKXt2YXIgbixyLHMsbyxoO2lmKHdyKGUsIlBhdGgtTGlrZSBHcmFwaCBXcmFwcGluZyIsMSksdC5iLmMubGVuZ3RoPT0wKXtvcihlKTtyZXR1cm59aWYocz1uZXcgZjV0KHQpLGg9KHMuaT09bnVsbCYmKHMuaT1zeXQocyxuZXcgT0YpKSxYdChzLmkpKnMuZiksbj1oLyhzLmk9PW51bGwmJihzLmk9c3l0KHMsbmV3IE9GKSksWHQocy5pKSkscy5iPm4pe29yKGUpO3JldHVybn1zd2l0Y2godShRKHQsKFRlKCkscmh0KSksMzM3KS5nKXtjYXNlIDI6bz1uZXcgUEY7YnJlYWs7Y2FzZSAwOm89bmV3IERGO2JyZWFrO2RlZmF1bHQ6bz1uZXcgRkZ9aWYocj1vLlZmKHQscyksIW8uV2YoKSlzd2l0Y2godShRKHQsYVYpLDMzOCkuZyl7Y2FzZSAyOnI9Z29lKHMscik7YnJlYWs7Y2FzZSAxOnI9ZGFlKHMscil9RnluKHQscyxyKSxvcihlKX1mdW5jdGlvbiAkbW4odCxlKXt2YXIgbixyLHMsbztpZihUcm4odC5kLHQuZSksdC5jLmEuJGIoKSxYdCh5ZShRKGUuaiwoVGUoKSxZRykpKSkhPTB8fFh0KHllKFEoZS5qLFlHKSkpIT0wKWZvcihuPUZFLEd0KFEoZS5qLGRiKSkhPT1HdCgoajAoKSxnYikpJiZKdChlLmosKHNlKCksTXcpLChGbigpLCEwKSksbz11KFEoZS5qLFNTKSwxOSkuYSxzPTA7czxvJiYocj15bW4odCxlKSwhKHI8biYmKG49cixpbmUodCksbj09MCkpKTtzKyspO2Vsc2UgZm9yKG49dmksR3QoUShlLmosZGIpKSE9PUd0KChqMCgpLGdiKSkmJkp0KGUuaiwoc2UoKSxNdyksKEZuKCksITApKSxvPXUoUShlLmosU1MpLDE5KS5hLHM9MDtzPG8mJihyPWlsZSh0LGUpLCEocjxuJiYobj1yLGluZSh0KSxuPT0wKSkpO3MrKyk7fWZ1bmN0aW9uIHptbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKGg9bmV3IGxlLGQ9MCxuPTAsdz0wO2Q8ZS5jLmxlbmd0aC0xJiZuPHQuZ2MoKTspe2ZvcihyPXUodC5YYihuKSwxOSkuYSt3OyhBbihkKzEsZS5jLmxlbmd0aCksdShlLmNbZCsxXSwxOSkpLmE8cjspKytkO2ZvcihrPTAsbz1yLShBbihkLGUuYy5sZW5ndGgpLHUoZS5jW2RdLDE5KSkuYSxzPShBbihkKzEsZS5jLmxlbmd0aCksdShlLmNbZCsxXSwxOSkpLmEtcixvPnMmJisrayx1ZShoLChBbihkK2ssZS5jLmxlbmd0aCksdShlLmNbZCtrXSwxOSkpKSx3Kz0oQW4oZCtrLGUuYy5sZW5ndGgpLHUoZS5jW2Qra10sMTkpKS5hLXIsKytuO248dC5nYygpJiZ1KHQuWGIobiksMTkpLmErdzw9KEFuKGQrayxlLmMubGVuZ3RoKSx1KGUuY1tkK2tdLDE5KSkuYTspKytuO2QrPTEra31yZXR1cm4gaH1mdW5jdGlvbiBwYXQodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuZCl7aWYoZD1uZXcgUzMsZT1hQSxvPWUuYS56Yyh0LGUpLG89PW51bGwpe2ZvcihyPW5ldyBlcihTbyh0KSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDI2KSxycyhkLHBhdChuKSk7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfWZvcihoPWQuaSxzPSghdC5xJiYodC5xPW5ldyBoZShWaCx0LDExLDEwKSksbmV3IGVyKHQucSkpO3MuZSE9cy5pLmdjKCk7KytoKXUoZHIocyksMzk5KTtycyhkLCghdC5xJiYodC5xPW5ldyBoZShWaCx0LDExLDEwKSksdC5xKSksZXkoZCksdC5kPW5ldyBxMygodShTdChXdCgoanAoKSxMbikubyksOSksMTgpLGQuaSksZC5nKSx0LmU9dShkLmcsNjczKSx0LmU9PW51bGwmJih0LmU9czVlKSxybCh0KS5iJj0tMTd9cmV0dXJuIHQuZH1mdW5jdGlvbiBFRSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYoaz1hdSh0LmUuVGcoKSxlKSx3PTAscz11KHQuZywxMTkpLHRvKCksdShlLDY2KS5PaigpKXtmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0say5ybChvLmFrKCkpKXtpZih5aShvLG4pKXJldHVybiB3Oysrd319ZWxzZSBpZihuIT1udWxsKXtmb3IoZD0wO2Q8dC5pOysrZClpZihvPXNbZF0say5ybChvLmFrKCkpKXtpZih5aShuLG8uZGQoKSkpcmV0dXJuIHc7Kyt3fWlmKHIpe2Zvcih3PTAsaD0wO2g8dC5pOysraClpZihvPXNbaF0say5ybChvLmFrKCkpKXtpZihHdChuKT09PUd0KGNudCh0LHUoby5kZCgpLDU2KSkpKXJldHVybiB3Oysrd319fWVsc2UgZm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGsucmwoby5haygpKSl7aWYoby5kZCgpPT1udWxsKXJldHVybiB3Oysrd31yZXR1cm4tMX1mdW5jdGlvbiBxbW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKHZuKCksWHModCxuZXcgUlopLGg9VU0odCksSD1uZXcgbGUsRj1uZXcgbGUsZD1udWxsLHc9MDtoLmIhPTA7KW89dShoLmI9PTA/bnVsbDooUW4oaC5iIT0wKSxjaChoLGguYS5hKSksMTU3KSwhZHx8RnUoZCkqeGwoZCkvMjxGdShvKSp4bChvKT8oZD1vLEguY1tILmMubGVuZ3RoXT1vKToodys9RnUobykqeGwobyksRi5jW0YuYy5sZW5ndGhdPW8sRi5jLmxlbmd0aD4xJiYodz5GdShkKSp4bChkKS8yfHxoLmI9PTApJiYoTT1uZXcgVSQoRiksQz1GdShkKS94bChkKSxrPU1hdChNLGUsbmV3IHd4LG4scixzLEMpLExpKEdmKE0uZSksayksZD1NLEguY1tILmMubGVuZ3RoXT1NLHc9MCxGLmM9UHQoWG4sSWUsMSwwLDUsMSkpKTtyZXR1cm4gQXMoSCxGKSxIfWZ1bmN0aW9uIEhtbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7aWYobi5taChlKSYmKEM9KEg9ZSxIP3Uociw0OSkueGgoSCk6bnVsbCksQykpaWYoWT1uLmJoKGUsdC5hKSxWPWUudCxWPjF8fFY9PS0xKWlmKE09dShZLDY5KSxGPXUoQyw2OSksTS5kYygpKUYuJGIoKTtlbHNlIGZvcihoPSEhbm8oZSksbz0wLGQ9dC5hP00uS2MoKTpNLlpoKCk7ZC5PYigpOylrPXUoZC5QYigpLDU2KSxzPXUoV3YodCxrKSw1Nikscz8oaD8odz1GLlhjKHMpLHc9PS0xP0YuWGgobyxzKTpvIT13JiZGLmppKG8scykpOkYuWGgobyxzKSwrK28pOnQuYiYmIWgmJihGLlhoKG8sayksKytvKTtlbHNlIFk9PW51bGw/Qy5XYihudWxsKToocz1Xdih0LFkpLHM9PW51bGw/dC5iJiYhbm8oZSkmJkMuV2IoWSk6Qy5XYihzKSl9ZnVuY3Rpb24gR21uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iobj1uZXcgQ1kscz1uZXcgYXIobHIoam8oZSkuYS5LYygpLG5ldyB6KSk7enIocyk7KWlmKHI9dShMcihzKSwxNyksIVZhKHIpJiYoZD1yLmMuaSxrNHQoZCx1RykpKXtpZihrPUI1dCh0LGQsdUcsY0cpLGs9PS0xKWNvbnRpbnVlO24uYj1iLk1hdGgubWF4KG4uYixrKSwhbi5hJiYobi5hPW5ldyBsZSksdWUobi5hLGQpfWZvcihoPW5ldyBhcihscihNcyhlKS5hLktjKCksbmV3IHopKTt6cihoKTspaWYobz11KExyKGgpLDE3KSwhVmEobykmJih3PW8uZC5pLGs0dCh3LGNHKSkpe2lmKGs9QjV0KHQsdyxjRyx1Ryksaz09LTEpY29udGludWU7bi5kPWIuTWF0aC5tYXgobi5kLGspLCFuLmMmJihuLmM9bmV3IGxlKSx1ZShuLmMsdyl9cmV0dXJuIG59ZnVuY3Rpb24gbWxlKHQpe2JFKCk7dmFyIGUsbixyLHM7aWYoZT1wcyh0KSx0PG9TLmxlbmd0aClyZXR1cm4gb1NbZV07aWYodDw9NTApcmV0dXJuIGhEKChKcCgpLFN1dCksZSk7aWYodDw9JGcpcmV0dXJuIEd4KGhEKFQ2WzFdLGUpLGUpO2lmKHQ+MWU2KXRocm93IHJ0KG5ldyBwUigicG93ZXIgb2YgdGVuIHRvbyBiaWciKSk7aWYodDw9dmkpcmV0dXJuIEd4KGhEKFQ2WzFdLGUpLGUpO2ZvcihyPWhEKFQ2WzFdLHZpKSxzPXIsbj1rdSh0LXZpKSxlPXBzKHQldmkpO3ljKG4sdmkpPjA7KXM9SjMocyxyKSxuPVlwKG4sdmkpO2ZvcihzPUozKHMsaEQoVDZbMV0sZSkpLHM9R3gocyx2aSksbj1rdSh0LXZpKTt5YyhuLHZpKT4wOylzPUd4KHMsdmkpLG49WXAobix2aSk7cmV0dXJuIHM9R3gocyxlKSxzfWZ1bmN0aW9uIFZtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztmb3Iod3IoZSwiSGllcmFyY2hpY2FsIHBvcnQgZHVtbXkgc2l6ZSBwcm9jZXNzaW5nIiwxKSx3PW5ldyBsZSxDPW5ldyBsZSxyPVh0KHllKFEodCwoVGUoKSxRNCkpKSksbj1yKjIsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLHcuYz1QdChYbixJZSwxLDAsNSwxKSxDLmM9UHQoWG4sSWUsMSwwLDUsMSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwKSxoLms9PShHbigpLHhzKSYmKGs9dShRKGgsKHNlKCksb2MpKSw2MSksaz09KGJlKCksTm4pP3cuY1t3LmMubGVuZ3RoXT1oOms9PW1yJiYoQy5jW0MuYy5sZW5ndGhdPWgpKTtWb2UodywhMCxuKSxWb2UoQywhMSxuKX1vcihlKX1mdW5jdGlvbiBVbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdzt3cihlLCJMYXllciBjb25zdHJhaW50IHBvc3Rwcm9jZXNzaW5nIiwxKSx3PXQuYix3LmMubGVuZ3RoIT0wJiYocj0oQW4oMCx3LmMubGVuZ3RoKSx1KHcuY1swXSwyOSkpLGg9dShGZSh3LHcuYy5sZW5ndGgtMSksMjkpLG49bmV3IENoKHQpLG89bmV3IENoKHQpLE13bih0LHIsaCxuLG8pLG4uYS5jLmxlbmd0aD09MHx8KFVtKDAsdy5jLmxlbmd0aCksVzkody5jLDAsbikpLG8uYS5jLmxlbmd0aD09MHx8KHcuY1t3LmMubGVuZ3RoXT1vKSksVnModCwoc2UoKSxObHQpKSYmKHM9bmV3IENoKHQpLGQ9bmV3IENoKHQpLE12bih0LHMsZCkscy5hLmMubGVuZ3RoPT0wfHwoVW0oMCx3LmMubGVuZ3RoKSxXOSh3LmMsMCxzKSksZC5hLmMubGVuZ3RoPT0wfHwody5jW3cuYy5sZW5ndGhdPWQpKSxvcihlKX1mdW5jdGlvbiB5bGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEM7Zm9yKHc9bmV3IFModC5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihkPXUoSih3KSwxMCksZC5rPT0oR24oKSx4cykmJihzPXUoUShkLChzZSgpLG9jKSksNjEpLHM9PShiZSgpLEhuKXx8cz09Qm4pKWZvcihyPW5ldyBhcihscih6MChkKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSxlPW4uYSxlLmIhPTAmJihrPW4uYyxrLmk9PWQmJihvPShRbihlLmIhPTApLHUoZS5hLmEuYyw4KSksby5iPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbay5pLm4say5uLGsuYV0pKS5iKSxDPW4uZCxDLmk9PWQmJihoPShRbihlLmIhPTApLHUoZS5jLmIuYyw4KSksaC5iPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbQy5pLm4sQy5uLEMuYV0pKS5iKSl9ZnVuY3Rpb24gV21uKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHdyKGUsIlNvcnQgQnkgSW5wdXQgTW9kZWwgIitRKHQsKFRlKCksZGIpKSwxKSxzPTAscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj11KEoociksMjkpLHc9cz09MD8wOnMtMSxkPXUoRmUodC5iLHcpLDI5KSxoPW5ldyBTKG4uYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLEd0KFEobyxvcykpIT09R3QoKG9hKCksRzIpKSYmR3QoUShvLG9zKSkhPT1HdChWYykmJih2bigpLFhzKG8uaixuZXcgUnRlKGQsRnNlKG8pKSksWWIoZSwiTm9kZSAiK28rIiBwb3J0czogIitvLmopKTt2bigpLFhzKG4uYSxuZXcgb25lKGQsdShRKHQsZGIpLDMzOSksdShRKHQsRjl0KSwzNzgpKSksWWIoZSwiTGF5ZXIgIitzKyI6ICIrbiksKytzfW9yKGUpfWZ1bmN0aW9uIEttbih0LGUpe3ZhciBuLHIscyxvO2lmKG89Y2xlKGUpLHVzKG5ldyBUbihudWxsLCghZS5jJiYoZS5jPW5ldyBoZShmbCxlLDksOSkpLG5ldyBfbihlLmMsMTYpKSksbmV3IGpuKG8pKSxzPXUoUShvLChzZSgpLEdjKSksMjEpLFkzbihlLHMpLHMuSGMoKG9vKCksYmgpKSlmb3Iocj1uZXcgZXIoKCFlLmMmJihlLmM9bmV3IGhlKGZsLGUsOSw5KSksZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDExOCksXzRuKHQsZSxvLG4pO3JldHVybiB1KHFlKGUsKFRlKCksRjIpKSwxNzQpLmdjKCkhPTAmJnR1ZShlLG8pLGplKFJlKFEobyxjQ3QpKSkmJnMuRmMoJEcpLFZzKG8sU08pJiZqcXQobmV3IGwzdChYdCh5ZShRKG8sU08pKSkpLG8pLEd0KHFlKGUsankpKT09PUd0KCgkMCgpLFpnKSk/ajVuKHQsZSxvKTphNW4odCxlLG8pLG99ZnVuY3Rpb24geF8odCxlLG4scil7dmFyIHMsbyxoO2lmKHRoaXMuaj1uZXcgbGUsdGhpcy5rPW5ldyBsZSx0aGlzLmI9bmV3IGxlLHRoaXMuYz1uZXcgbGUsdGhpcy5lPW5ldyBBeCx0aGlzLmk9bmV3IER1LHRoaXMuZj1uZXcgcXR0LHRoaXMuZD1uZXcgbGUsdGhpcy5nPW5ldyBsZSx1ZSh0aGlzLmIsdCksdWUodGhpcy5iLGUpLHRoaXMuZS5jPWIuTWF0aC5taW4odC5hLGUuYSksdGhpcy5lLmQ9Yi5NYXRoLm1pbih0LmIsZS5iKSx0aGlzLmUuYj1iLk1hdGguYWJzKHQuYS1lLmEpLHRoaXMuZS5hPWIuTWF0aC5hYnModC5iLWUuYikscz11KFEociwoVGUoKSxfbykpLDc0KSxzKWZvcihoPWVpKHMsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDgpLGptdChvLmEsdC5hKSYmbmkodGhpcy5pLG8pO24mJnVlKHRoaXMuaixuKSx1ZSh0aGlzLmsscil9ZnVuY3Rpb24gWW1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3IoQz1uZXcgVmoobmV3IENpKG4pKSxkPVB0KGRsLGkwLDI1LHQuZi5lLmMubGVuZ3RoLDE2LDEpLGF3dChkLGQubGVuZ3RoKSxuW2UuYl09MCxrPW5ldyBTKHQuZi5lKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxNDQpLHcuYiE9ZS5iJiYoblt3LmJdPXZpKSxNOChkRShDLHcpKTtmb3IoO0MuYi5jLmxlbmd0aCE9MDspZm9yKE09dShRcnQoQyksMTQ0KSxkW00uYl09ITAsbz10V3QobmV3IGhldCh0LmIsTSksMCk7by5jOylzPXUoQnd0KG8pLDI4MiksRj1UZm4ocyxNKSwhZFtGLmJdJiYoVnMocywoSkkoKSxvRykpP2g9WHQoeWUoUShzLG9HKSkpOmg9dC5jLHI9bltNLmJdK2gscjxuW0YuYl0mJihuW0YuYl09cixRZWUoQyxGKSxNOChkRShDLEYpKSkpfWZ1bmN0aW9uIHhsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNO2ZvcihzPSEwLGg9bmV3IFModC5iKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDI5KSxrPVRzLEM9bnVsbCx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspaWYoZD11KEoodyksMTApLE09WHQoZS5wW2QucF0pK1h0KGUuZFtkLnBdKS1kLmQuZCxyPVh0KGUucFtkLnBdKStYdChlLmRbZC5wXSkrZC5vLmIrZC5kLmEsTT5rJiZyPmspQz1kLGs9WHQoZS5wW2QucF0pK1h0KGUuZFtkLnBdKStkLm8uYitkLmQuYTtlbHNle3M9ITEsbi5uJiZZYihuLCJiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gIitkKyIgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAiK0MpO2JyZWFrfWlmKCFzKWJyZWFrfXJldHVybiBuLm4mJlliKG4sZSsiIGlzIGZlYXNpYmxlOiAiK3MpLHN9ZnVuY3Rpb24gWG1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDO2ZvcihkPS0xLEM9bmV3IFModCk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTEyKSxrLmc9ZC0tLHM9U3IobSQodCQoUmkobmV3IFRuKG51bGwsbmV3IF9uKGsuZiwxNikpLG5ldyBMUSksbmV3IE1RKSkuZCksbz1TcihtJCh0JChSaShuZXcgVG4obnVsbCxuZXcgX24oay5rLDE2KSksbmV3IElRKSxuZXcgWDUpKS5kKSxoPXMsdz1vLHJ8fChoPVNyKG0kKHQkKG5ldyBUbihudWxsLG5ldyBfbihrLmYsMTYpKSxuZXcgRFEpKS5kKSx3PVNyKG0kKHQkKG5ldyBUbihudWxsLG5ldyBfbihrLmssMTYpKSxuZXcgT1EpKS5kKSksay5kPWgsay5hPXMsay5pPXcsay5iPW8sdz09MD9ocyhuLGssbi5jLmIsbi5jKTpoPT0wJiZocyhlLGssZS5jLmIsZS5jKX1mdW5jdGlvbiBRbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYobi5kLmkhPWUuaSl7Zm9yKHM9bmV3IEgwKHQpLF8wKHMsKEduKCksWnMpKSxKdChzLChzZSgpLF9pKSxuKSxKdChzLChUZSgpLG9zKSwob2EoKSxWYykpLHIuY1tyLmMubGVuZ3RoXT1zLGg9bmV3IE1jLFVvKGgscyksRnMoaCwoYmUoKSxCbikpLGQ9bmV3IE1jLFVvKGQscyksRnMoZCxIbiksQz1uLmQsc2EobixoKSxvPW5ldyB6dixMbyhvLG4pLEp0KG8sX28sbnVsbCksRGEobyxkKSxzYShvLEMpLGs9bmV3IGhhKG4uYiwwKTtrLmI8ay5kLmdjKCk7KXc9KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSw3MCkpLEd0KFEodyxNZCkpPT09R3QoKEExKCksWXkpKSYmKEp0KHcsTTYsbiksRWwoayksdWUoby5iLHcpKTt0Y2UocyxoLGQpfX1mdW5jdGlvbiBabW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYobi5jLmkhPWUuaSlmb3Iocz1uZXcgSDAodCksXzAocywoR24oKSxacykpLEp0KHMsKHNlKCksX2kpLG4pLEp0KHMsKFRlKCksb3MpLChvYSgpLFZjKSksci5jW3IuYy5sZW5ndGhdPXMsaD1uZXcgTWMsVW8oaCxzKSxGcyhoLChiZSgpLEJuKSksZD1uZXcgTWMsVW8oZCxzKSxGcyhkLEhuKSxzYShuLGgpLG89bmV3IHp2LExvKG8sbiksSnQobyxfbyxudWxsKSxEYShvLGQpLHNhKG8sZSksdGNlKHMsaCxkKSxrPW5ldyBoYShuLmIsMCk7ay5iPGsuZC5nYygpOyl3PShRbihrLmI8ay5kLmdjKCkpLHUoay5kLlhiKGsuYz1rLmIrKyksNzApKSxDPXUoUSh3LE1kKSwyNzIpLEM9PShBMSgpLFl5KSYmKFZzKHcsTTYpfHxKdCh3LE02LG4pLEVsKGspLHVlKG8uYix3KSl9ZnVuY3Rpb24gSm1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3IoRj1uZXcgbGUsZ3Q9RSQociksdHQ9ZSp0LmEsTT0wLFY9MCxvPW5ldyBxcyxoPW5ldyBxcyxkPW5ldyBsZSxMdD0wLF90PTAsSD0wLFk9MCxrPTAsQz0wO2d0LmEuZ2MoKSE9MDspdz1ybG4oZ3QscyxoKSx3JiYoZ3QuYS5CYyh3KSE9bnVsbCxkLmNbZC5jLmxlbmd0aF09dyxvLmEuemModyxvKSxWPXQuZlt3LnBdLEx0Kz10LmVbdy5wXS1WKnQuYixNPXQuY1t3LnBdLF90Kz1NKnQuYixDKz1WKnQuYixZKz10LmVbdy5wXSksKCF3fHxndC5hLmdjKCk9PTB8fEx0Pj10dCYmdC5lW3cucF0+Vip0LmJ8fF90Pj1uKnR0KSYmKEYuY1tGLmMubGVuZ3RoXT1kLGQ9bmV3IGxlLFVhKGgsbyksby5hLiRiKCksay09QyxIPWIuTWF0aC5tYXgoSCxrKnQuYitZKSxrKz1fdCxMdD1fdCxfdD0wLEM9MCxZPTApO3JldHVybiBuZXcgbGEoSCxGKX1mdW5jdGlvbiB0eW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKG49KGs9bmV3IGIxKHQuYy5iKS5hLnZjKCkuS2MoKSxuZXcgdjEoaykpO24uYS5PYigpOyllPShkPXUobi5hLlBiKCksNDIpLHUoZC5kZCgpLDE0OSkpLHM9ZS5hLHM9PW51bGwmJihzPSIiKSxyPV9RZSh0LmMscyksIXImJnMubGVuZ3RoPT0wJiYocj1TdW4odCkpLHImJiFyeShyLmMsZSwhMSkmJm5pKHIuYyxlKTtmb3IoaD1laSh0LmEsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDQ3OCksQz1EcnQodC5jLG8uYSksSD1EcnQodC5jLG8uYiksQyYmSCYmbmkoQy5jLG5ldyBsYShILG8uYykpO2ZvcihfaCh0LmEpLEY9ZWkodC5iLDApO0YuYiE9Ri5kLmM7KU09dSh0aShGKSw0NzgpLGU9Q1FlKHQuYyxNLmEpLHc9RHJ0KHQuYyxNLmIpLGUmJncmJnBZZShlLHcsTS5jKTtfaCh0LmIpfWZ1bmN0aW9uIGV5bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSDtvPW5ldyBIayh0KSxoPW5ldyBqc2Uscz0oY0koaC5nKSxjSShoLmopLFl1KGguYiksY0koaC5kKSxjSShoLmkpLFl1KGguayksWXUoaC5jKSxZdShoLmUpLEg9a29lKGgsbyxudWxsKSxoY2UoaCxvKSxIKSxlJiYoaz1uZXcgSGsoZSksZD1oeW4oayksTjR0KHMsY3Qob3Qod1N0LDEpLEllLDUyNywwLFtkXSkpKSxGPSExLE09ITEsbiYmKGs9bmV3IEhrKG4pLHhIIGluIGsuYSYmKEY9RDAoayx4SCkuZ2UoKS5hKSxOZGUgaW4gay5hJiYoTT1EMChrLE5kZSkuZ2UoKS5hKSksQz1ySHQoRGVlKG5ldyBZayxGKSxNKSxLMG4obmV3IGdaLHMsQykseEggaW4gby5hJiZXZihvLHhILG51bGwpLChGfHxNKSYmKHc9bmV3IG14LHBsZShDLHcsRixNKSxXZihvLHhILHcpKSxyPW5ldyBsenQoaCkscWNuKG5ldyByMnQocykscil9ZnVuY3Rpb24gbnluKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKGg9bmV3IEdzZSxrPWN0KG90KFRyLDEpLFhyLDI1LDE1LFswXSkscz0tMSxvPTAscj0wLHc9MDt3PHQuYi5jLmxlbmd0aDsrK3cpaWYoQz11KEZlKHQuYix3KSw0MzQpLEMuYj4wKXtpZihzPDAmJkMuYSYmKHM9dyxvPWtbMF0scj0wKSxzPj0wKXtpZihkPUMuYix3PT1zJiYoZC09cisrLGQ9PTApKXJldHVybiAwO2lmKCFraGUoZSxrLEMsZCxoKSl7dz1zLTEsa1swXT1vO2NvbnRpbnVlfX1lbHNlIGlmKHM9LTEsIWtoZShlLGssQywwLGgpKXJldHVybiAwfWVsc2V7aWYocz0tMSxiYShDLmMsMCk9PTMyKXtpZihNPWtbMF0sSHRlKGUsayksa1swXT5NKWNvbnRpbnVlfWVsc2UgaWYoRm5uKGUsQy5jLGtbMF0pKXtrWzBdKz1DLmMubGVuZ3RoO2NvbnRpbnVlfXJldHVybiAwfXJldHVybiBGNG4oaCxuKT9rWzBdOjB9ZnVuY3Rpb24ga18odCl7dmFyIGUsbixyLHMsbyxoLGQsdztpZighdC5mKXtpZih3PW5ldyBDMCxkPW5ldyBDMCxlPWFBLGg9ZS5hLnpjKHQsZSksaD09bnVsbCl7Zm9yKG89bmV3IGVyKFNvKHQpKTtvLmUhPW8uaS5nYygpOylzPXUoZHIobyksMjYpLHJzKHcsa18ocykpO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1mb3Iocj0oIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLG5ldyBlcih0LnMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMTcwKSxFdChuLDk5KSYmTXIoZCx1KG4sMTgpKTtleShkKSx0LnI9bmV3IFBLdCh0LCh1KFN0KFd0KChqcCgpLExuKS5vKSw2KSwxOCksZC5pKSxkLmcpLHJzKHcsdC5yKSxleSh3KSx0LmY9bmV3IHEzKCh1KFN0KFd0KExuLm8pLDUpLDE4KSx3LmkpLHcuZykscmwodCkuYiY9LTN9cmV0dXJuIHQuZn1mdW5jdGlvbiByeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoaD10Lm8scj1QdChUcixYciwyNSxoLDE1LDEpLHM9UHQoVHIsWHIsMjUsaCwxNSwxKSxuPXQucCxlPVB0KFRyLFhyLDI1LG4sMTUsMSksbz1QdChUcixYciwyNSxuLDE1LDEpLGs9MDtrPGg7aysrKXtmb3IoTT0wO008biYmIWw0KHQsayxNKTspKytNO3Jba109TX1mb3IoQz0wO0M8aDtDKyspe2ZvcihNPW4tMTtNPj0wJiYhbDQodCxDLE0pOyktLU07c1tDXT1NfWZvcihIPTA7SDxuO0grKyl7Zm9yKGQ9MDtkPGgmJiFsNCh0LGQsSCk7KSsrZDtlW0hdPWR9Zm9yKFY9MDtWPG47VisrKXtmb3IoZD1oLTE7ZD49MCYmIWw0KHQsZCxWKTspLS1kO29bVl09ZH1mb3Iodz0wO3c8aDt3KyspZm9yKEY9MDtGPG47RisrKXc8b1tGXSYmdz5lW0ZdJiZGPHNbd10mJkY+clt3XSYmYnEodCx3LEYsITEsITApfWZ1bmN0aW9uIGF4dCh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O249amUoUmUoUSh0LChaZigpLFFwZSkpKSksbz10LmEuYy5kLGQ9dC5hLmQuZCxuPyhoPXVkKG5hKG5ldyAkZShkLmEsZC5iKSxvKSwuNSksdz11ZChuYyh0LmUpLC41KSxlPW5hKExpKG5ldyAkZShvLmEsby5iKSxoKSx3KSxGMnQodC5kLGUpKToocz1YdCh5ZShRKHQuYSxzYmUpKSkscj10LmQsby5hPj1kLmE/by5iPj1kLmI/KHIuYT1kLmErKG8uYS1kLmEpLzIrcyxyLmI9ZC5iKyhvLmItZC5iKS8yLXMtdC5lLmIpOihyLmE9ZC5hKyhvLmEtZC5hKS8yK3Msci5iPW8uYisoZC5iLW8uYikvMitzKTpvLmI+PWQuYj8oci5hPW8uYSsoZC5hLW8uYSkvMitzLHIuYj1kLmIrKG8uYi1kLmIpLzIrcyk6KHIuYT1vLmErKGQuYS1vLmEpLzIrcyxyLmI9by5iKyhkLmItby5iKS8yLXMtdC5lLmIpKX1mdW5jdGlvbiAkYyh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYobz10Lmxlbmd0aCxvPT0wKXJldHVybiIiO2Zvcih3PVB0KG1oLHZkLDI1LG8sMTUsMSksa210KDAsbyx0Lmxlbmd0aCksa210KDAsbyx3Lmxlbmd0aCksell0KHQsMCxvLHcsMCksbj1udWxsLGQ9ZSxzPTAsaD0wO3M8bztzKyspcj13W3NdLHFoZSgpLHI8PTMyJiZ2dFtyXSYyP2Q/KCFuJiYobj1uZXcgVGgodCkpLE1ubihuLHMtaCsrKSk6KGQ9ZSxyIT0zMiYmKCFuJiYobj1uZXcgVGgodCkpLFFlbihuLHMtaCxzLWgrMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSkpKTpkPSExO3JldHVybiBkP24/KG89bi5hLmxlbmd0aCxvPjA/RGwobi5hLDAsby0xKToiIik6dC5zdWJzdHIoMCxvLTEpOm4/bi5hOnR9ZnVuY3Rpb24ga2xlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyxUMiksIkVMSyBEaXNDbyIpLCJMYXlvdXRlciBmb3IgYXJyYW5naW5nIHVuY29ubmVjdGVkIHN1YmdyYXBocy4gVGhlIHN1YmdyYXBocyB0aGVtc2VsdmVzIGFyZSwgYnkgZGVmYXVsdCwgbm90IGxhaWQgb3V0LiIpLG5ldyBkZykpKSx4ZSh0LFQyLEFvdCxEZShjN3QpKSx4ZSh0LFQyLExvdCxEZSgkdXQpKSx4ZSh0LFQyLGI2LERlKEZwZSkpLHhlKHQsVDIsd3csRGUobzd0KSkseGUodCxUMixWeHQsRGUoJHBlKSkseGUodCxUMixVeHQsRGUoanBlKSkseGUodCxUMixHeHQsRGUoenBlKSkseGUodCxUMixXeHQsRGUoUnBlKSkseGUodCxUMix0NnQsRGUoQnBlKSkseGUodCxUMixlNnQsRGUoanV0KSkseGUodCxUMixuNnQsRGUoYTd0KSkseGUodCxUMixyNnQsRGUoZUcpKX1mdW5jdGlvbiBveHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGO2lmKG89bmV3IEgwKHQpLF8wKG8sKEduKCksSGMpKSxKdChvLChUZSgpLG9zKSwob2EoKSxWYykpLHM9MCxlKXtmb3IoaD1uZXcgTWMsSnQoaCwoc2UoKSxfaSksZSksSnQobyxfaSxlLmkpLEZzKGgsKGJlKCksQm4pKSxVbyhoLG8pLEY9Z2QoZS5lKSxrPUYsQz0wLE09ay5sZW5ndGg7QzxNOysrQyl3PWtbQ10sc2EodyxoKTtKdChlLFp1LG8pLCsrc31pZihuKXtmb3IoZD1uZXcgTWMsSnQobywoc2UoKSxfaSksbi5pKSxKdChkLF9pLG4pLEZzKGQsKGJlKCksSG4pKSxVbyhkLG8pLEY9Z2Qobi5nKSxrPUYsQz0wLE09ay5sZW5ndGg7QzxNOysrQyl3PWtbQ10sRGEodyxkKTtKdChuLFp1LG8pLCsrc31yZXR1cm4gSnQobywoc2UoKSxxRyksZGUocykpLHIuY1tyLmMubGVuZ3RoXT1vLG99ZnVuY3Rpb24geXEoKXt5cT1aLHpBdD1jdChvdChtaCwxKSx2ZCwyNSwxNSxbNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjUsNjYsNjcsNjgsNjksNzBdKSxQNGU9bmV3IFJlZ0V4cChgWyAJClxyXGZdK2ApO3RyeXtyQT1jdChvdChreG4sMSksSWUsMjAxNSwwLFtuZXcgb00oKG8ydCgpLE16KCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIix6TSgoYlIoKSxiUigpLHNTKSkpKSksbmV3IG9NKE16KCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1MiLHpNKHNTKSkpLG5ldyBvTShNeigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzIix6TShzUykpKSxuZXcgb00oTXooInl5eXktTU0tZGQnVCdISDptbSIsek0oc1MpKSksbmV3IG9NKE16KCJ5eXl5LU1NLWRkIix6TShzUykpKV0pfWNhdGNoKHQpe2lmKHQ9V2kodCksIUV0KHQsNzgpKXRocm93IHJ0KHQpfX1mdW5jdGlvbiBpeW4odCl7dmFyIGUsbixyLHM7aWYocj1EYXQoKCF0LmMmJih0LmM9akkodC5mKSksdC5jKSwwKSx0LmU9PTB8fHQuYT09MCYmdC5mIT0tMSYmdC5lPDApcmV0dXJuIHI7aWYoZT1VbXQodCk8MD8xOjAsbj10LmUscz0oci5sZW5ndGgrMStiLk1hdGguYWJzKHBzKHQuZSkpLG5ldyBMbSksZT09MSYmKHMuYSs9Ii0iKSx0LmU+MClpZihuLT1yLmxlbmd0aC1lLG4+PTApe2ZvcihzLmErPSIwLiI7bj5EMi5sZW5ndGg7bi09RDIubGVuZ3RoKXRZdChzLEQyKTtGV3QocyxEMixwcyhuKSksVnIocyxyLnN1YnN0cihlKSl9ZWxzZSBuPWUtbixWcihzLERsKHIsZSxwcyhuKSkpLHMuYSs9Ii4iLFZyKHMsT00ocixwcyhuKSkpO2Vsc2V7Zm9yKFZyKHMsci5zdWJzdHIoZSkpO248LUQyLmxlbmd0aDtuKz1EMi5sZW5ndGgpdFl0KHMsRDIpO0ZXdChzLEQyLHBzKC1uKSl9cmV0dXJuIHMuYX1mdW5jdGlvbiBjeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGO3JldHVybiB3PW5hKG5ldyAkZShuLmEsbi5iKSx0KSxrPXcuYSplLmItdy5iKmUuYSxDPWUuYSpyLmItZS5iKnIuYSxNPSh3LmEqci5iLXcuYipyLmEpL0MsRj1rL0MsQz09MD9rPT0wPyhzPUxpKG5ldyAkZShuLmEsbi5iKSx1ZChuZXcgJGUoci5hLHIuYiksLjUpKSxvPUhwKHQscyksaD1IcChMaShuZXcgJGUodC5hLHQuYiksZSkscyksZD1iLk1hdGguc3FydChyLmEqci5hK3IuYipyLmIpKi41LG88aCYmbzw9ZD9uZXcgJGUodC5hLHQuYik6aDw9ZD9MaShuZXcgJGUodC5hLHQuYiksZSk6bnVsbCk6bnVsbDpNPj0wJiZNPD0xJiZGPj0wJiZGPD0xP0xpKG5ldyAkZSh0LmEsdC5iKSx1ZChuZXcgJGUoZS5hLGUuYiksTSkpOm51bGx9ZnVuY3Rpb24gc3luKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHI9dShRKHQsKFRlKCksSGx0KSksMjEpLG4uYT5lLmEmJihyLkhjKChjeSgpLHFPKSk/dC5jLmErPShuLmEtZS5hKS8yOnIuSGMoSE8pJiYodC5jLmErPW4uYS1lLmEpKSxuLmI+ZS5iJiYoci5IYygoY3koKSxWTykpP3QuYy5iKz0obi5iLWUuYikvMjpyLkhjKEdPKSYmKHQuYy5iKz1uLmItZS5iKSksdShRKHQsKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKSYmKG4uYT5lLmF8fG4uYj5lLmIpKWZvcihkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLGguaz09KEduKCkseHMpJiYocz11KFEoaCxvYyksNjEpLHM9PShiZSgpLEhuKT9oLm4uYSs9bi5hLWUuYTpzPT1tciYmKGgubi5iKz1uLmItZS5iKSk7bz10LmQsdC5mLmE9bi5hLW8uYi1vLmMsdC5mLmI9bi5iLW8uZC1vLmF9ZnVuY3Rpb24gYXluKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHI9dShRKHQsKFRlKCksSGx0KSksMjEpLG4uYT5lLmEmJihyLkhjKChjeSgpLHFPKSk/dC5jLmErPShuLmEtZS5hKS8yOnIuSGMoSE8pJiYodC5jLmErPW4uYS1lLmEpKSxuLmI+ZS5iJiYoci5IYygoY3koKSxWTykpP3QuYy5iKz0obi5iLWUuYikvMjpyLkhjKEdPKSYmKHQuYy5iKz1uLmItZS5iKSksdShRKHQsKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKSYmKG4uYT5lLmF8fG4uYj5lLmIpKWZvcihoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8uaz09KEduKCkseHMpJiYocz11KFEobyxvYyksNjEpLHM9PShiZSgpLEhuKT9vLm4uYSs9bi5hLWUuYTpzPT1tciYmKG8ubi5iKz1uLmItZS5iKSk7ZD10LmQsdC5mLmE9bi5hLWQuYi1kLmMsdC5mLmI9bi5iLWQuZC1kLmF9ZnVuY3Rpb24gb3luKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtmb3IoZT16b2UodCksQz0oZD1uZXcgVG0oZSkuYS52YygpLktjKCksbmV3IHJNKGQpKTtDLmEuT2IoKTspe2ZvcihrPShzPXUoQy5hLlBiKCksNDIpLHUocy5jZCgpLDEwKSksTT0wLEY9MCxNPWsuZC5kLEY9ay5vLmIray5kLmEsdC5kW2sucF09MCxuPWs7KG89dC5hW24ucF0pIT1rOylyPW1obihuLG8pLHc9MCx0LmM9PShkZCgpLEtnKT93PXIuZC5uLmIrci5kLmEuYi1yLmMubi5iLXIuYy5hLmI6dz1yLmMubi5iK3IuYy5hLmItci5kLm4uYi1yLmQuYS5iLGg9WHQodC5kW24ucF0pK3csdC5kW28ucF09aCxNPWIuTWF0aC5tYXgoTSxvLmQuZC1oKSxGPWIuTWF0aC5tYXgoRixoK28uby5iK28uZC5hKSxuPW87bj1rO2RvIHQuZFtuLnBdPVh0KHQuZFtuLnBdKStNLG49dC5hW24ucF07d2hpbGUobiE9ayk7dC5iW2sucF09TStGfX1mdW5jdGlvbiBiYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGO2Zvcih0LmI9ITEsTT1zcyx3PVRzLEY9c3Msaz1UcyxyPXQuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPXUoci5QYigpLDI2Nikscz1uLmEsTT1iLk1hdGgubWluKE0scy5jKSx3PWIuTWF0aC5tYXgodyxzLmMrcy5iKSxGPWIuTWF0aC5taW4oRixzLmQpLGs9Yi5NYXRoLm1heChrLHMuZCtzLmEpLGg9bmV3IFMobi5jKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwzOTUpLGU9by5hLGUuYT8oQz1zLmQrby5iLmIsZD1DK28uYyxGPWIuTWF0aC5taW4oRixDKSxrPWIuTWF0aC5tYXgoayxkKSk6KEM9cy5jK28uYi5hLGQ9QytvLmMsTT1iLk1hdGgubWluKE0sQyksdz1iLk1hdGgubWF4KHcsZCkpO3QuYT1uZXcgJGUody1NLGstRiksdC5jPW5ldyAkZShNK3QuZC5hLEYrdC5kLmIpfWZ1bmN0aW9uIGN5bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNO2ZvcihNPW5ldyBsZSxDPW5ldyBWd3QoMCxuKSxvPTAsWSQoQyxuZXcgeGl0KDAsMCxDLG4pKSxzPTAsaz1uZXcgZXIodCk7ay5lIT1rLmkuZ2MoKTspdz11KGRyKGspLDMzKSxyPXUoRmUoQy5hLEMuYS5jLmxlbmd0aC0xKSwxODcpLGQ9cyt3LmcrKHUoRmUoQy5hLDApLDE4NykuYi5jLmxlbmd0aD09MD8wOm4pLGQ+ZSYmKHM9MCxvKz1DLmIrbixNLmNbTS5jLmxlbmd0aF09QyxDPW5ldyBWd3QobyxuKSxyPW5ldyB4aXQoMCxDLmYsQyxuKSxZJChDLHIpLHM9MCksci5iLmMubGVuZ3RoPT0wfHx3LmY+PXIubyYmdy5mPD1yLmZ8fHIuYSouNTw9dy5mJiZyLmEqMS41Pj13LmY/aTN0KHIsdyk6KGg9bmV3IHhpdChyLnMrci5yK24sQy5mLEMsbiksWSQoQyxoKSxpM3QoaCx3KSkscz13Lmkrdy5nO3JldHVybiBNLmNbTS5jLmxlbmd0aF09QyxNfWZ1bmN0aW9uIGs0KHQpe3ZhciBlLG4scixzLG8saCxkLHc7aWYoIXQuYSl7aWYodC5vPW51bGwsdz1uZXcgTXp0KHQpLGU9bmV3IG1wLG49YUEsZD1uLmEuemModCxuKSxkPT1udWxsKXtmb3IoaD1uZXcgZXIoU28odCkpO2guZSE9aC5pLmdjKCk7KW89dShkcihoKSwyNikscnModyxrNChvKSk7bi5hLkJjKHQpIT1udWxsLG4uYS5nYygpPT0wfWZvcihzPSghdC5zJiYodC5zPW5ldyBoZShBdSx0LDIxLDE3KSksbmV3IGVyKHQucykpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwxNzApLEV0KHIsMzIyKSYmTXIoZSx1KHIsMzQpKTtleShlKSx0Lms9bmV3IE5LdCh0LCh1KFN0KFd0KChqcCgpLExuKS5vKSw3KSwxOCksZS5pKSxlLmcpLHJzKHcsdC5rKSxleSh3KSx0LmE9bmV3IHEzKCh1KFN0KFd0KExuLm8pLDQpLDE4KSx3LmkpLHcuZykscmwodCkuYiY9LTJ9cmV0dXJuIHQuYX1mdW5jdGlvbiB1eW4odCxlLG4scixzLG8saCl7dmFyIGQsdyxrLEMsTSxGO3JldHVybiBNPSExLHc9TWNlKG4ucSxlLmYrZS5iLW4ucS5mKSxGPXMtKG4ucS5lK3ctaCksRjxyLmd8fChrPW89PXQuYy5sZW5ndGgtMSYmRj49KEFuKG8sdC5jLmxlbmd0aCksdSh0LmNbb10sMjAwKSkuZSxDPShkPUVfKHIsRiwhMSksZC5hKSxDPmUuYiYmIWspPyExOigoa3x8Qzw9ZS5iKSYmKGsmJkM+ZS5iPyhuLmQ9QyxkSShuLE5hZShuLEMpKSk6KEpzZShuLnEsdyksbi5jPSEwKSxkSShyLHMtKG4ucytuLnIpKSxZSShyLG4ucS5lK24ucS5kLGUuZiksWSQoZSxyKSx0LmMubGVuZ3RoPm8mJih0RCgoQW4obyx0LmMubGVuZ3RoKSx1KHQuY1tvXSwyMDApKSxyKSwoQW4obyx0LmMubGVuZ3RoKSx1KHQuY1tvXSwyMDApKS5hLmMubGVuZ3RoPT0wJiZBZyh0LG8pKSxNPSEwKSxNKX1mdW5jdGlvbiB1eHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYoQz1hdSh0LmUuVGcoKSxlKSxzPTAsbz11KHQuZywxMTkpLHc9bnVsbCx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLEMucmwoaC5haygpKSl7aWYoeWkoaCxuKSl7dz1oO2JyZWFrfSsrc319ZWxzZSBpZihuIT1udWxsKXtmb3IoZD0wO2Q8dC5pOysrZClpZihoPW9bZF0sQy5ybChoLmFrKCkpKXtpZih5aShuLGguZGQoKSkpe3c9aDticmVha30rK3N9fWVsc2UgZm9yKGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLEMucmwoaC5haygpKSl7aWYoaC5kZCgpPT1udWxsKXt3PWg7YnJlYWt9KytzfXJldHVybiB3JiYobWwodC5lKSYmKGs9ZS4kaigpP25ldyBBcnQodC5lLDQsZSxuLG51bGwscywhMCk6enAodCxlLktqKCk/MjoxLGUsbixlLnpqKCksLTEsITApLHI/ci5FaShrKTpyPWspLHI9d0QodCx3LHIpKSxyfWZ1bmN0aW9uIHZhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssQyxNLEYsSCxWLFk7c3dpdGNoKFY9MCxZPTAsdz1zLmMsZD1zLmIsQz1uLmYsSD1uLmcsZS5nKXtjYXNlIDA6Vj1yLmkrci5nK2gsdC5jP1k9UmRuKFYsbyxyLGgpOlk9ci5qLEY9Yi5NYXRoLm1heCh3LFYrSCksaz1iLk1hdGgubWF4KGQsWStDKTticmVhaztjYXNlIDE6WT1yLmorci5mK2gsdC5jP1Y9QmRuKFksbyxyLGgpOlY9ci5pLEY9Yi5NYXRoLm1heCh3LFYrSCksaz1iLk1hdGgubWF4KGQsWStDKTticmVhaztjYXNlIDI6Vj13K2gsWT0wLEY9dytoK0gsaz1iLk1hdGgubWF4KGQsQyk7YnJlYWs7Y2FzZSAzOlY9MCxZPWQraCxGPWIuTWF0aC5tYXgodyxIKSxrPWQraCtDO2JyZWFrO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKCJJbGxlZ2FsUGxhY2VtZW50T3B0aW9uLiIpKX1yZXR1cm4gTT1uZXcgdTN0KHQuYSxGLGssZSxWLFkpLE19ZnVuY3Rpb24gbHluKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtpZihkPXQuZCxNPXUoUSh0LChzZSgpLE42KSksMTUpLGU9dShRKHQsTDYpLDE1KSwhKCFNJiYhZSkpe2lmKG89WHQoeWUoaXkodCwoVGUoKSxKbHQpKSkpLGg9WHQoeWUoaXkodCxkQ3QpKSksRj0wLE0pe2ZvcihrPTAscz1NLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxrPWIuTWF0aC5tYXgoayxyLm8uYiksRis9ci5vLmE7Ris9byooTS5nYygpLTEpLGQuZCs9aytofWlmKG49MCxlKXtmb3Ioaz0wLHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMCksaz1iLk1hdGgubWF4KGssci5vLmIpLG4rPXIuby5hO24rPW8qKGUuZ2MoKS0xKSxkLmErPWsraH13PWIuTWF0aC5tYXgoRixuKSx3PnQuby5hJiYoQz0ody10Lm8uYSkvMixkLmI9Yi5NYXRoLm1heChkLmIsQyksZC5jPWIuTWF0aC5tYXgoZC5jLEMpKX19ZnVuY3Rpb24gaHluKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKG89bmV3IGVadCxZWWUobywoUXgoKSxBM2UpKSxyPShzPXVpdCh0LFB0KEFlLHRlLDIsMCw2LDEpKSxuZXcgZngobmV3IHdsKG5ldyBmZXQodCxzKS5iKSkpO3IuYjxyLmQuZ2MoKTspbj0oUW4oci5iPHIuZC5nYygpKSxCcihyLmQuWGIoci5jPXIuYisrKSkpLGg9Ynh0KFRiLG4pLGgmJihlPUQwKHQsbiksZS5qZSgpP2Q9ZS5qZSgpLmE6ZS5nZSgpP2Q9IiIrZS5nZSgpLmE6ZS5oZSgpP2Q9IiIrZS5oZSgpLmE6ZD1lLkliKCksdz1neHQoaCxkKSx3IT1udWxsJiYoKE51KGguaiwoWGYoKSxKcykpfHxOdShoLmoscW4pKSYmRkkoWnJ0KG8sbnMpLGgsdyksTnUoaC5qLElkKSYmRkkoWnJ0KG8sV3MpLGgsdyksTnUoaC5qLCQyKSYmRkkoWnJ0KG8sZmwpLGgsdyksTnUoaC5qLFhnKSYmRkkoWnJ0KG8scW8pLGgsdykpKTtyZXR1cm4gb31mdW5jdGlvbiB4cSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYodz1hdSh0LmUuVGcoKSxlKSxvPXUodC5nLDExOSksVjAodC5lLGUpKXtmb3Iocz0wLGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLHcucmwoaC5haygpKSl7aWYocz09bilyZXR1cm4gdG8oKSx1KGUsNjYpLk9qKCk/aDooaz1oLmRkKCksayE9bnVsbCYmciYmRXQoZSw5OSkmJnUoZSwxOCkuQmImWWEmJihrPWRfKHQsZSxkLHMsaykpLGspOysrc310aHJvdyBydChuZXcgbW8oWF8rbitTMitzKSl9ZWxzZXtmb3Iocz0wLGQ9MDtkPHQuaTsrK2Qpe2lmKGg9b1tkXSx3LnJsKGguYWsoKSkpcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP2g6KGs9aC5kZCgpLGshPW51bGwmJnImJkV0KGUsOTkpJiZ1KGUsMTgpLkJiJllhJiYoaz1kXyh0LGUsZCxzLGspKSxrKTsrK3N9cmV0dXJuIGUuemooKX19ZnVuY3Rpb24ga0QodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7aWYocz11KHQuZywxMTkpLFYwKHQuZSxlKSlyZXR1cm4gdG8oKSx1KGUsNjYpLk9qKCk/bmV3IElqKGUsdCk6bmV3IERNKGUsdCk7Zm9yKGs9YXUodC5lLlRnKCksZSkscj0wLGQ9MDtkPHQuaTsrK2Qpe2lmKG89c1tkXSxoPW8uYWsoKSxrLnJsKGgpKXtpZih0bygpLHUoZSw2NikuT2ooKSlyZXR1cm4gbztpZihoPT0oYTYoKSxXNil8fGg9PVU2KXtmb3Iodz1uZXcgSWwoJG8oby5kZCgpKSk7KytkPHQuaTspbz1zW2RdLGg9by5haygpLChoPT1XNnx8aD09VTYpJiZWcih3LCRvKG8uZGQoKSkpO3JldHVybiBvdnQodShlLllqKCksMTQ4KSx3LmEpfWVsc2UgcmV0dXJuIEM9by5kZCgpLEMhPW51bGwmJm4mJkV0KGUsOTkpJiZ1KGUsMTgpLkJiJllhJiYoQz1kXyh0LGUsZCxyLEMpKSxDfSsrcn1yZXR1cm4gZS56aigpfWZ1bmN0aW9uIEVfKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3Iobz0wLGg9dC50LHM9MCxyPTAsdz0wLEY9MCxNPTAsbiYmKHQubi5jPVB0KFhuLEllLDEsMCw1LDEpLHVlKHQubixuZXcgZiQodC5zLHQudCx0LmkpKSksZD0wLEM9bmV3IFModC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSwzMyksbytrLmcrKGQ+MD90Lmk6MCk+ZSYmdz4wJiYobz0wLGgrPXcrdC5pLHM9Yi5NYXRoLm1heChzLEYpLHIrPXcrdC5pLHc9MCxGPTAsbiYmKCsrTSx1ZSh0Lm4sbmV3IGYkKHQucyxoLHQuaSkpKSxkPTApLEYrPWsuZysoZD4wP3QuaTowKSx3PWIuTWF0aC5tYXgodyxrLmYpLG4mJiQzdCh1KEZlKHQubixNKSwyMTEpLGspLG8rPWsuZysoZD4wP3QuaTowKSwrK2Q7cmV0dXJuIHM9Yi5NYXRoLm1heChzLEYpLHIrPXcsbiYmKHQucj1zLHQuZD1yLEczdCh0LmopKSxuZXcgaWgodC5zLHQudCxzLHIpfWZ1bmN0aW9uIEljKHQsZSxuLHIscyl7cWQoKTt2YXIgbyxoLGQsdyxrLEMsTSxGLEg7aWYodXd0KHQsInNyYyIpLHV3dChuLCJkZXN0IiksRj1zbCh0KSx3PXNsKG4pLER2dCgoRi5pJjQpIT0wLCJzcmNUeXBlIGlzIG5vdCBhbiBhcnJheSIpLER2dCgody5pJjQpIT0wLCJkZXN0VHlwZSBpcyBub3QgYW4gYXJyYXkiKSxNPUYuYyxoPXcuYyxEdnQoTS5pJjE/TT09aDooaC5pJjEpPT0wLCJBcnJheSB0eXBlcyBkb24ndCBtYXRjaCIpLEg9dC5sZW5ndGgsaz1uLmxlbmd0aCxlPDB8fHI8MHx8czwwfHxlK3M+SHx8citzPmspdGhyb3cgcnQobmV3IFRwdCk7aWYoIShNLmkmMSkmJkYhPXcpaWYoQz1zMih0KSxvPXMyKG4pLEd0KHQpPT09R3QobikmJmU8cilmb3IoZSs9cyxkPXIrcztkLS0gPnI7KUppKG8sZCxDWy0tZV0pO2Vsc2UgZm9yKGQ9citzO3I8ZDspSmkobyxyKyssQ1tlKytdKTtlbHNlIHM+MCYmWTR0KHQsZSxuLHIscywhMCl9ZnVuY3Rpb24gd2F0KCl7d2F0PVosQ2dlPWN0KG90KFRyLDEpLFhyLDI1LDE1LFtfYSwxMTYyMjYxNDY3LEFfLDEyMjA3MDMxMjUsMzYyNzk3MDU2LDE5NzczMjY3NDMsQV8sMzg3NDIwNDg5LE5xLDIxNDM1ODg4MSw0Mjk5ODE2OTYsODE1NzMwNzIxLDE0NzU3ODkwNTYsMTcwODU5Mzc1LDI2ODQzNTQ1Niw0MTAzMzg2NzMsNjEyMjIwMDMyLDg5Mzg3MTczOSwxMjhlNywxODAxMDg4NTQxLDExMzM3OTkwNCwxNDgwMzU4ODksMTkxMTAyOTc2LDI0NDE0MDYyNSwzMDg5MTU3NzYsMzg3NDIwNDg5LDQ4MTg5MDMwNCw1OTQ4MjMzMjEsNzI5ZTYsODg3NTAzNjgxLEFfLDEyOTE0Njc5NjksMTU0NDgwNDQxNiwxODM4MjY1NjI1LDYwNDY2MTc2XSksX2dlPWN0KG90KFRyLDEpLFhyLDI1LDE1LFstMSwtMSwzMSwxOSwxNSwxMywxMSwxMSwxMCw5LDksOCw4LDgsOCw3LDcsNyw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw1XSl9ZnVuY3Rpb24gZnluKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9bmV3IFMoR3Yoci5hKSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLGllZShvKSYmKG49dShRKG8sKHNlKCksTHcpKSwzMDUpLCFuLmcmJm4uZCkpZm9yKGU9bix3PW4uZDt3OylmdWUody5pLHcuaywhMSwhMCksdkkoZS5hKSx2SSh3LmkpLHZJKHcuayksdkkody5iKSxzYSh3LmMsZS5jLmQpLHNhKGUuYyxudWxsKSxrbyhlLmEsbnVsbCksa28ody5pLG51bGwpLGtvKHcuayxudWxsKSxrbyh3LmIsbnVsbCksZD1uZXcgWnd0KGUuaSx3LmEsZS5lLHcuaix3LmYpLGQuaz1lLmssZC5uPWUubixkLmI9ZS5iLGQuYz13LmMsZC5nPWUuZyxkLmQ9dy5kLEp0KGUuaSxMdyxkKSxKdCh3LmEsTHcsZCksdz13LmQsZT1kfWZ1bmN0aW9uIHZ5KHQsZSl7dmFyIG4scixzLG8saDtpZihoPXUoZSwxMzYpLGI0KHQpLGI0KGgpLGguYiE9bnVsbCl7aWYodC5jPSEwLHQuYj09bnVsbCl7dC5iPVB0KFRyLFhyLDI1LGguYi5sZW5ndGgsMTUsMSksSWMoaC5iLDAsdC5iLDAsaC5iLmxlbmd0aCk7cmV0dXJufWZvcihvPVB0KFRyLFhyLDI1LHQuYi5sZW5ndGgraC5iLmxlbmd0aCwxNSwxKSxuPTAscj0wLHM9MDtuPHQuYi5sZW5ndGh8fHI8aC5iLmxlbmd0aDspbj49dC5iLmxlbmd0aD8ob1tzKytdPWguYltyKytdLG9bcysrXT1oLmJbcisrXSk6cj49aC5iLmxlbmd0aD8ob1tzKytdPXQuYltuKytdLG9bcysrXT10LmJbbisrXSk6aC5iW3JdPHQuYltuXXx8aC5iW3JdPT09dC5iW25dJiZoLmJbcisxXTx0LmJbbisxXT8ob1tzKytdPWguYltyKytdLG9bcysrXT1oLmJbcisrXSk6KG9bcysrXT10LmJbbisrXSxvW3MrK109dC5iW24rK10pO3QuYj1vfX1mdW5jdGlvbiBkeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtyZXR1cm4gbj1qZShSZShRKHQsKHNlKCksUHkpKSkpLGQ9amUoUmUoUShlLFB5KSkpLHI9dShRKHQsbjEpLDExKSx3PXUoUShlLG4xKSwxMSkscz11KFEodCxSaCksMTEpLGs9dShRKGUsUmgpLDExKSxDPSEhciYmcj09dyxNPSEhcyYmcz09aywhbiYmIWQ/bmV3IHd2dCh1KEoobmV3IFModC5qKSksMTEpLnA9PXUoSihuZXcgUyhlLmopKSwxMSkucCxDLE0pOihvPSghamUoUmUoUSh0LFB5KSkpfHxqZShSZShRKHQsRU8pKSkpJiYoIWplKFJlKFEoZSxQeSkpKXx8amUoUmUoUShlLEVPKSkpKSxoPSghamUoUmUoUSh0LFB5KSkpfHwhamUoUmUoUSh0LEVPKSkpKSYmKCFqZShSZShRKGUsUHkpKSl8fCFqZShSZShRKGUsRU8pKSkpLG5ldyB3dnQoQyYmb3x8TSYmaCxDLE0pKX1mdW5jdGlvbiBneW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iocj0wLG49MCx3PW5ldyBRaSxlPTAsZD1uZXcgUyh0Lm4pO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDIxMSksaC5jLmMubGVuZ3RoPT0wP2hzKHcsaCx3LmMuYix3LmMpOihyPWIuTWF0aC5tYXgocixoLmQpLG4rPWguYSsoZT4wP3QuaTowKSksKytlO2ZvcihUbG4odC5uLHcpLHQuZD1uLHQucj1yLHQuZz0wLHQuZj0wLHQuZT0wLHQubz1zcyx0LnA9c3Msbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDMzKSx0LnA9Yi5NYXRoLm1pbih0LnAscy5nKSx0Lmc9Yi5NYXRoLm1heCh0Lmcscy5nKSx0LmY9Yi5NYXRoLm1heCh0LmYscy5mKSx0Lm89Yi5NYXRoLm1pbih0Lm8scy5mKSx0LmUrPXMuZit0Lmk7dC5hPXQuZS90LmIuYy5sZW5ndGgtdC5pKigodC5iLmMubGVuZ3RoLTEpL3QuYi5jLmxlbmd0aCksRzN0KHQuail9ZnVuY3Rpb24gRWxlKHQpe3ZhciBlLG4scixzO3JldHVybiB0LkRiJjY0P2ppdCh0KTooZT1uZXcgSWwobDh0KSxyPXQuayxyP1ZyKFZyKChlLmErPScgIicsZSksciksJyInKTooIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx0Lm4uaT4wJiYocz0oIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx1KFN0KHQubiwwKSwxMzcpKS5hLCFzfHxWcihWcigoZS5hKz0nICInLGUpLHMpLCciJykpKSxuPSghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLCEodC5iLmk8PTEmJighdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYy5pPD0xKSkpLG4/ZS5hKz0iIFsiOmUuYSs9IiAiLFZyKGUsbTJ0KG5ldyBhZXQsbmV3IGVyKHQuYikpKSxuJiYoZS5hKz0iXSIpLGUuYSs9UG90LG4mJihlLmErPSJbIiksVnIoZSxtMnQobmV3IGFldCxuZXcgZXIodC5jKSkpLG4mJihlLmErPSJdIiksZS5hKX1mdW5jdGlvbiBtYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZih0LmEpe2lmKGQ9dC5hLm5lKCksdz1udWxsLGQhPW51bGw/ZS5hKz0iIitkOihoPXQuYS5EaigpLGghPW51bGwmJihvPWNkKGgsRXUoOTEpKSxvIT0tMT8odz1oLnN1YnN0cihvKSxlLmErPSIiK0RsKGg9PW51bGw/VHU6KE9uKGgpLGgpLDAsbykpOmUuYSs9IiIraCkpLHQuZCYmdC5kLmkhPTApe2ZvcihzPSEwLGUuYSs9IjwiLHI9bmV3IGVyKHQuZCk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDg3KSxzP3M9ITE6ZS5hKz1LYSxtYXQobixlKTtlLmErPSI+In13IT1udWxsJiYoZS5hKz0iIit3KX1lbHNlIHQuZT8oZD10LmUuemIsZCE9bnVsbCYmKGUuYSs9IiIrZCkpOihlLmErPSI/Iix0LmI/KGUuYSs9IiBzdXBlciAiLG1hdCh0LmIsZSkpOnQuZiYmKGUuYSs9IiBleHRlbmRzICIsbWF0KHQuZixlKSkpfWZ1bmN0aW9uIHB5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm47Zm9yKFl0PXQuYyxjZT1lLmMsbj1SbyhZdC5hLHQsMCkscj1SbyhjZS5hLGUsMCksX3Q9dShpdyh0LChzbygpLEp1KSkuS2MoKS5QYigpLDExKSxRZT11KGl3KHQsZXUpLktjKCkuUGIoKSwxMSksQnQ9dShpdyhlLEp1KS5LYygpLlBiKCksMTEpLFJuPXUoaXcoZSxldSkuS2MoKS5QYigpLDExKSxndD1nZChfdC5lKSxTZT1nZChRZS5nKSxMdD1nZChCdC5lKSxXZT1nZChSbi5nKSxveSh0LHIsY2UpLGg9THQsQz0wLFY9aC5sZW5ndGg7QzxWOysrQylzPWhbQ10sc2EocyxfdCk7Zm9yKGQ9V2UsTT0wLFk9ZC5sZW5ndGg7TTxZOysrTSlzPWRbTV0sRGEocyxRZSk7Zm9yKG95KGUsbixZdCksdz1ndCxGPTAsdHQ9dy5sZW5ndGg7Rjx0dDsrK0Ypcz13W0ZdLHNhKHMsQnQpO2ZvcihvPVNlLGs9MCxIPW8ubGVuZ3RoO2s8SDsrK2spcz1vW2tdLERhKHMsUm4pfWZ1bmN0aW9uIFRsZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQztpZihvPUV6KHIpLGQ9amUoUmUoUShyLChUZSgpLG5DdCkpKSksKGR8fGplKFJlKFEodCxKRykpKSkmJiFIMyh1KFEodCxvcyksOTgpKSlzPUp4KG8pLHc9UTV0KHQsbixuPT0oc28oKSxldSk/czpISShzKSk7ZWxzZSBzd2l0Y2godz1uZXcgTWMsVW8odyx0KSxlPyhDPXcubixDLmE9ZS5hLXQubi5hLEMuYj1lLmItdC5uLmIsUGFlKEMsMCwwLHQuby5hLHQuby5iKSxGcyh3LEt1ZSh3LG8pKSk6KHM9SngobyksRnModyxuPT0oc28oKSxldSk/czpISShzKSkpLGg9dShRKHIsKHNlKCksR2MpKSwyMSksaz13Lmosby5nKXtjYXNlIDI6Y2FzZSAxOihrPT0oYmUoKSxObil8fGs9PW1yKSYmaC5GYygob28oKSxWNCkpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KGs9PShiZSgpLEhuKXx8az09Qm4pJiZoLkZjKChvbygpLFY0KSl9cmV0dXJuIHd9ZnVuY3Rpb24gbHh0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO3JldHVybiBiLk1hdGguYWJzKGUucy1lLmMpPHlkfHxiLk1hdGguYWJzKG4ucy1uLmMpPHlkPzA6KHI9UGNlKHQsZS5qLG4uZSkscz1QY2UodCxuLmosZS5lKSxvPXI9PS0xfHxzPT0tMSxoPTAsbz8ocj09LTEmJihuZXcgdDIoKFZmKCkscGIpLG4sZSwxKSwrK2gpLHM9PS0xJiYobmV3IHQyKChWZigpLHBiKSxlLG4sMSksKytoKSk6KGQ9YTQoZS5qLG4ucyxuLmMpLGQrPWE0KG4uZSxlLnMsZS5jKSx3PWE0KG4uaixlLnMsZS5jKSx3Kz1hNChlLmUsbi5zLG4uYyksaz1yKzE2KmQsQz1zKzE2KncsazxDP25ldyB0MigoVmYoKSxVeSksZSxuLEMtayk6az5DP25ldyB0MigoVmYoKSxVeSksbixlLGstQyk6az4wJiZDPjAmJihuZXcgdDIoKFZmKCksVXkpLGUsbiwwKSxuZXcgdDIoVXksbixlLDApKSksaCl9ZnVuY3Rpb24gQ2xlKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihoPW5ldyBoMihuZXcgd2codC5mLmIpLmEpO2guYjspe2lmKG89WXYoaCkscz11KG8uY2QoKSw1OTQpLGU9PTEpe2lmKHMuZ2YoKSE9KGFvKCksWjApJiZzLmdmKCkhPVEwKWNvbnRpbnVlfWVsc2UgaWYocy5nZigpIT0oYW8oKSxqaCkmJnMuZ2YoKSE9a2YpY29udGludWU7c3dpdGNoKHI9dSh1KG8uZGQoKSw0NikuYiw4MSksZD11KHUoby5kZCgpLDQ2KS5hLDE4OSksbj1kLmMscy5nZigpLmcpe2Nhc2UgMjpyLmcuYz10LmUuYSxyLmcuYj1iLk1hdGgubWF4KDEsci5nLmIrbik7YnJlYWs7Y2FzZSAxOnIuZy5jPXIuZy5jK24sci5nLmI9Yi5NYXRoLm1heCgxLHIuZy5iLW4pO2JyZWFrO2Nhc2UgNDpyLmcuZD10LmUuYixyLmcuYT1iLk1hdGgubWF4KDEsci5nLmErbik7YnJlYWs7Y2FzZSAzOnIuZy5kPXIuZy5kK24sci5nLmE9Yi5NYXRoLm1heCgxLHIuZy5hLW4pfX19ZnVuY3Rpb24gYnluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3IoZD1QdChUcixYciwyNSxlLmIuYy5sZW5ndGgsMTUsMSksaz1QdChlbHQsYWUsMjY3LGUuYi5jLmxlbmd0aCwwLDEpLHc9UHQobzAsemcsMTAsZS5iLmMubGVuZ3RoLDAsMSksTT10LmEsRj0wLEg9TS5sZW5ndGg7RjxIOysrRil7Zm9yKEM9TVtGXSxZPTAsaD1uZXcgUyhDLmUpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxyPXQydChzLmMpLCsrZFtyXSxWPVh0KHllKFEoZSwoVGUoKSx4ZikpKSksZFtyXT4wJiZ3W3JdJiYoVj1WMyh0LmIsd1tyXSxzKSksWT1iLk1hdGgubWF4KFkscy5jLmMuYitWKTtmb3Iobz1uZXcgUyhDLmUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxzLm4uYj1ZK3MuZC5kLG49cy5jLG4uYy5iPVkrcy5kLmQrcy5vLmIrcy5kLmEsa1tSbyhuLmIuYixuLDApXT1zLmssd1tSbyhuLmIuYixuLDApXT1zfX1mdW5jdGlvbiBfbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihyPW5ldyBhcihscihHMChlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDc5KSxFdChTdCgoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIpLDApLDE4Nil8fCh3PU1vKHUoU3QoKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jKSwwKSw4MikpLGdfKG4pfHwoaD1lLmkrZS5nLzIsZD1lLmorZS5mLzIsQz13Lmkrdy5nLzIsTT13Lmordy5mLzIsRj1uZXcgVGEsRi5hPUMtaCxGLmI9TS1kLG89bmV3ICRlKEYuYSxGLmIpLGhFKG8sZS5nLGUuZiksRi5hLT1vLmEsRi5iLT1vLmIsaD1DLUYuYSxkPU0tRi5iLGs9bmV3ICRlKEYuYSxGLmIpLGhFKGssdy5nLHcuZiksRi5hLT1rLmEsRi5iLT1rLmIsQz1oK0YuYSxNPWQrRi5iLHM9bTQobiwhMCwhMCksQjgocyxoKSxqOChzLGQpLEY4KHMsQyksUjgocyxNKSxfbGUodCx3KSkpfWZ1bmN0aW9uIFNsZSh0KXtTdih0LG5ldyB3MihFdih5dihrdih4dihuZXcgcGcsbXcpLCJFTEsgU1BPckUgQ29tcGFjdGlvbiIpLCJTaHJpbmtUcmVlIGlzIGEgY29tcGFjdGlvbiBhbGdvcml0aG0gdGhhdCBtYWludGFpbnMgdGhlIHRvcG9sb2d5IG9mIGEgbGF5b3V0LiBUaGUgcmVsb2NhdGlvbiBvZiBkaWFncmFtIGVsZW1lbnRzIGlzIGJhc2VkIG9uIGNvbnRyYWN0aW5nIGEgc3Bhbm5pbmcgdHJlZS4iKSxuZXcgUEwpKSkseGUodCxtdyxfY3QsRGUoRFYpKSx4ZSh0LG13LHQ4dCxEZShZaHQpKSx4ZSh0LG13LGU4dCxEZShLaHQpKSx4ZSh0LG13LFNjdCxEZShyU3QpKSx4ZSh0LG13LEFjdCxEZShXaHQpKSx4ZSh0LG13LHd3LG5TdCkseGUodCxtdyxreSw4KSx4ZSh0LG13LExjdCxEZShnM2UpKSx4ZSh0LG13LG44dCxEZSh0U3QpKSx4ZSh0LG13LHI4dCxEZShlU3QpKSx4ZSh0LG13LEtELChGbigpLCExKSl9ZnVuY3Rpb24gdnluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKHdyKGUsIlNpbXBsZSBub2RlIHBsYWNlbWVudCIsMSksTT11KFEodCwoc2UoKSxZNCkpLDMwNCksZD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHI9dShKKG8pLDI5KSxoPXIuYyxoLmI9MCxuPW51bGwsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSxuJiYoaC5iKz1FM3QodyxuLE0uYykpLGguYis9dy5kLmQrdy5vLmIrdy5kLmEsbj13O2Q9Yi5NYXRoLm1heChkLGguYil9Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9ci5jLEM9KGQtaC5iKS8yLG49bnVsbCxrPW5ldyBTKHIuYSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTApLG4mJihDKz1FM3QodyxuLE0uYykpLEMrPXcuZC5kLHcubi5iPUMsQys9dy5vLmIrdy5kLmEsbj13O29yKGUpfWZ1bmN0aW9uIHd5bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO2lmKHIuZ2MoKT09MClyZXR1cm4hMTtpZih3PSh0bygpLHUoZSw2NikuT2ooKSksaD13P3I6bmV3IEt2KHIuZ2MoKSksVjAodC5lLGUpKXtpZihlLmhpKCkpZm9yKEM9ci5LYygpO0MuT2IoKTspaz1DLlBiKCksbXEodCxlLGssRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl8fChvPVlkKGUsayksaC5GYyhvKSk7ZWxzZSBpZighdylmb3IoQz1yLktjKCk7Qy5PYigpOylrPUMuUGIoKSxvPVlkKGUsayksaC5GYyhvKX1lbHNle2ZvcihNPWF1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxkPTA7ZDx0Lmk7KytkKWlmKG89c1tkXSxNLnJsKG8uYWsoKSkpdGhyb3cgcnQobmV3IFBuKGVPKSk7aWYoci5nYygpPjEpdGhyb3cgcnQobmV3IFBuKGVPKSk7d3x8KG89WWQoZSxyLktjKCkuUGIoKSksaC5GYyhvKSl9cmV0dXJuIHl5dCh0LCQ0dCh0LGUsbiksaCl9ZnVuY3Rpb24gbXluKHQsZSl7dmFyIG4scixzLG87Zm9yKG5vbihlLmIuaiksdXMocHUobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyBqWCksbmV3ICRYKSxvPW5ldyBTKGUuZCk7by5hPG8uYy5jLmxlbmd0aDspe3N3aXRjaChzPXUoSihvKSwxMDEpLHMuZS5nKXtjYXNlIDA6bj11KEZlKHMuaiwwKSwxMTMpLmQuaixLQihzLHUoT3YoSGoodShBaShzLmssbiksMTUpLk9jKCksejQpKSwxMTMpKSxXQihzLHUoT3YocWoodShBaShzLmssbiksMTUpLk9jKCksejQpKSwxMTMpKTticmVhaztjYXNlIDE6cj1XM3QocyksS0Iocyx1KE92KEhqKHUoQWkocy5rLHJbMF0pLDE1KS5PYygpLHo0KSksMTEzKSksV0Iocyx1KE92KHFqKHUoQWkocy5rLHJbMV0pLDE1KS5PYygpLHo0KSksMTEzKSk7YnJlYWs7Y2FzZSAyOnBnbih0LHMpO2JyZWFrO2Nhc2UgMzpJMm4ocyk7YnJlYWs7Y2FzZSA0OlAybih0LHMpfWVvbihzKX10LmE9bnVsbH1mdW5jdGlvbiB5YXQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7cmV0dXJuIHI9dC5hLm89PShFMSgpLHoxKT9zczpUcyxkPW5sZSh0LG5ldyByVnQoZSxuKSksIWQuYSYmZC5jPyhuaSh0LmQsZCkscik6ZC5hPyhzPWQuYS5jLHc9ZC5hLmQsbj8oaz10LmEuYz09KGRkKCksUncpP3c6cyxvPXQuYS5jPT1Sdz9zOncsaD10LmEuZ1tvLmkucF0sQz1YdCh0LmEucFtoLnBdKStYdCh0LmEuZFtvLmkucF0pK28ubi5iK28uYS5iLVh0KHQuYS5kW2suaS5wXSktay5uLmItay5hLmIpOihrPXQuYS5jPT0oZGQoKSxLZyk/dzpzLG89dC5hLmM9PUtnP3M6dyxDPVh0KHQuYS5wW3QuYS5nW28uaS5wXS5wXSkrWHQodC5hLmRbby5pLnBdKStvLm4uYitvLmEuYi1YdCh0LmEuZFtrLmkucF0pLWsubi5iLWsuYS5iKSx0LmEublt0LmEuZ1tzLmkucF0ucF09KEZuKCksITApLHQuYS5uW3QuYS5nW3cuaS5wXS5wXT0hMCxDKTpyfWZ1bmN0aW9uIGtxKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKFYwKHQuZSxlKSl3PSh0bygpLHUoZSw2NikuT2ooKT9uZXcgSWooZSx0KTpuZXcgRE0oZSx0KSksaXEody5jLHcuYiksaEModyx1KG4sMTQpKTtlbHNle2ZvcihDPWF1KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKHM9cltoXSxvPXMuYWsoKSxDLnJsKG8pKXtpZihvPT0oYTYoKSxXNil8fG89PVU2KXtmb3Ioaz1CM3QodCxlLG4pLGQ9aCxrP2R5KHQsaCk6KytoO2g8dC5pOylzPXJbaF0sbz1zLmFrKCksbz09VzZ8fG89PVU2P2R5KHQsaCk6KytoO2t8fHUodTQodCxkLFlkKGUsbikpLDcyKX1lbHNlIEIzdCh0LGUsbik/ZHkodCxoKTp1KHU0KHQsaCwodG8oKSx1KGUsNjYpLk9qKCk/dShuLDcyKTpZZChlLG4pKSksNzIpO3JldHVybn1CM3QodCxlLG4pfHxNcih0LCh0bygpLHUoZSw2NikuT2ooKT91KG4sNzIpOllkKGUsbikpKX19ZnVuY3Rpb24gQWxlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO3JldHVybiB5aShuLHQuYil8fCh0LmI9bixvPW5ldyBFcyxoPXUoUGwocHUobmV3IFRuKG51bGwsbmV3IF9uKG4uZiwxNikpLG8pLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksTHkpLEdsXSkpKSwyMSksdC5lPSEwLHQuZj0hMCx0LmM9ITAsdC5kPSEwLHM9aC5IYygobjYoKSxjTykpLHI9aC5IYyh1TykscyYmIXImJih0LmY9ITEpLCFzJiZyJiYodC5kPSExKSxzPWguSGMob08pLHI9aC5IYyhsTykscyYmIXImJih0LmM9ITEpLCFzJiZyJiYodC5lPSExKSksQz11KHQuYS5DZShlLG4pLDQ2KSx3PXUoQy5hLDE5KS5hLGs9dShDLmIsMTkpLmEsZD0hMSx3PDA/dC5jfHwoZD0hMCk6dC5lfHwoZD0hMCksazwwP3QuZHx8KGQ9ITApOnQuZnx8KGQ9ITApLGQ/QWxlKHQsQyxuKTpDfWZ1bmN0aW9uIHl5bih0KXt2YXIgZSxuLHIscztzPXQubyxCbSgpLHQuQS5kYygpfHx5aSh0LkEsdDd0KT9lPXMuYjooZT1jRCh0LmYpLHQuQS5IYygoX2woKSxlTikpJiYhdC5CLkhjKChjbCgpLGVBKSkmJihlPWIuTWF0aC5tYXgoZSxjRCh1KGdvKHQucCwoYmUoKSxIbikpLDI0NCkpKSxlPWIuTWF0aC5tYXgoZSxjRCh1KGdvKHQucCxCbiksMjQ0KSkpKSxuPUFuZSh0KSxuJiYoZT1iLk1hdGgubWF4KGUsbi5iKSksdC5BLkhjKG5OKSYmKHQucT09KG9hKCksaDApfHx0LnE9PVZjKSYmKGU9Yi5NYXRoLm1heChlLExqKHUoZ28odC5iLChiZSgpLEhuKSksMTI0KSkpLGU9Yi5NYXRoLm1heChlLExqKHUoZ28odC5iLEJuKSwxMjQpKSkpKSxqZShSZSh0LmUueWYoKS5XZSgoY2koKSxqVikpKSk/cy5iPWIuTWF0aC5tYXgocy5iLGUpOnMuYj1lLHI9dC5mLmksci5kPTAsci5hPWUsZGF0KHQuZil9ZnVuY3Rpb24gTGxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3IoTT0wO008ZS5sZW5ndGg7TSsrKXtmb3IoZD10LktjKCk7ZC5PYigpOylvPXUoZC5QYigpLDIyNSksby5PZihNLGUpO2ZvcihGPTA7RjxlW01dLmxlbmd0aDtGKyspe2Zvcih3PXQuS2MoKTt3Lk9iKCk7KW89dSh3LlBiKCksMjI1KSxvLlBmKE0sRixlKTtmb3IoWT1lW01dW0ZdLmosSD0wO0g8WS5jLmxlbmd0aDtIKyspe2ZvcihrPXQuS2MoKTtrLk9iKCk7KW89dShrLlBiKCksMjI1KSxvLlFmKE0sRixILGUpO2ZvcihWPShBbihILFkuYy5sZW5ndGgpLHUoWS5jW0hdLDExKSksbj0wLHM9bmV3IFMxKFYuYik7Vm8ocy5hKXx8Vm8ocy5iKTspZm9yKHI9dShWbyhzLmEpP0oocy5hKTpKKHMuYiksMTcpLEM9dC5LYygpO0MuT2IoKTspbz11KEMuUGIoKSwyMjUpLG8uTmYoTSxGLEgsbisrLHIsZSl9fX1mb3IoaD10LktjKCk7aC5PYigpOylvPXUoaC5QYigpLDIyNSksby5NZigpfWZ1bmN0aW9uIHh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2Zvcih0LmI9WHQoeWUoUShlLChUZSgpLFE0KSkpKSx0LmM9WHQoeWUoUShlLFIyKSkpLHQuZD11KFEoZSxLbHQpLDMzNiksdC5hPXUoUShlLEtHKSwyNzUpLGdmbihlKSxkPXUoUGwoUmkoUmkoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyB4WSksbmV3IE5UKSxuZXcgeEwpLG5ldyBaUCksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLHM9ZC5LYygpO3MuT2IoKTspbj11KHMuUGIoKSwxNyksaD11KFEobiwoc2UoKSxOMikpLDE1KSxoLkpjKG5ldyBtYyh0KSksSnQobixOMixudWxsKTtmb3Iocj1kLktjKCk7ci5PYigpOyluPXUoci5QYigpLDE3KSx3PXUoUShuLChzZSgpLGk5dCkpLDE3KSxvPXUoUShuLFg0KSwxNSksTDVuKHQsbyx3KSxKdChuLFg0LG51bGwpfWZ1bmN0aW9uIGt5bih0KXt0LmI9bnVsbCx0LmE9bnVsbCx0Lm89bnVsbCx0LnE9bnVsbCx0LnY9bnVsbCx0Lnc9bnVsbCx0LkI9bnVsbCx0LnA9bnVsbCx0LlE9bnVsbCx0LlI9bnVsbCx0LlM9bnVsbCx0LlQ9bnVsbCx0LlU9bnVsbCx0LlY9bnVsbCx0Llc9bnVsbCx0LmJiPW51bGwsdC5lYj1udWxsLHQuYWI9bnVsbCx0Lkg9bnVsbCx0LmRiPW51bGwsdC5jPW51bGwsdC5kPW51bGwsdC5mPW51bGwsdC5uPW51bGwsdC5yPW51bGwsdC5zPW51bGwsdC51PW51bGwsdC5HPW51bGwsdC5KPW51bGwsdC5lPW51bGwsdC5qPW51bGwsdC5pPW51bGwsdC5nPW51bGwsdC5rPW51bGwsdC50PW51bGwsdC5GPW51bGwsdC5JPW51bGwsdC5MPW51bGwsdC5NPW51bGwsdC5PPW51bGwsdC5QPW51bGwsdC4kPW51bGwsdC5OPW51bGwsdC5aPW51bGwsdC5jYj1udWxsLHQuSz1udWxsLHQuRD1udWxsLHQuQT1udWxsLHQuQz1udWxsLHQuXz1udWxsLHQuZmI9bnVsbCx0Llg9bnVsbCx0Llk9bnVsbCx0LmdiPSExLHQuaGI9ITF9ZnVuY3Rpb24geGF0KHQpe3ZhciBlLG4scixzLG8saCxkLHcsaztyZXR1cm4hKHQuayE9KEduKCksRHMpfHx0LmouYy5sZW5ndGg8PTF8fChvPXUoUSh0LChUZSgpLG9zKSksOTgpLG89PShvYSgpLFZjKSl8fChzPShzeSgpLCh0LnE/dC5xOih2bigpLHZuKCksYTApKS5fYihOdyk/cj11KFEodCxOdyksMTk3KTpyPXUoUShGYSh0KSxDUyksMTk3KSxyKSxzPT1sVil8fCEocz09dDV8fHM9PUo0KSYmKGg9WHQoeWUoaXkodCxfUykpKSxlPXUoUSh0LExPKSwxNDIpLCFlJiYoZT1uZXcgbnZ0KGgsaCxoLGgpKSxrPVlvKHQsKGJlKCksQm4pKSx3PWUuZCtlLmErKGsuZ2MoKS0xKSpoLHc+dC5vLmJ8fChuPVlvKHQsSG4pLGQ9ZS5kK2UuYSsobi5nYygpLTEpKmgsZD50Lm8uYikpKX1mdW5jdGlvbiBrYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihoPXQuZSx3PWUuZSxoPT0wKXJldHVybiBlO2lmKHc9PTApcmV0dXJuIHQ7aWYobz10LmQsZD1lLmQsbytkPT0yKXJldHVybiBuPVBzKHQuYVswXSxjbykscj1QcyhlLmFbMF0sY28pLGg9PXc/KEM9T2EobixyKSxWPVNyKEMpLEg9U3Ioem0oQywzMikpLEg9PTA/bmV3IExnKGgsVik6bmV3IEszKGgsMixjdChvdChUciwxKSxYciwyNSwxNSxbVixIXSkpKTpLSShoPDA/WXAocixuKTpZcChuLHIpKTtpZihoPT13KUY9aCxNPW8+PWQ/UnJ0KHQuYSxvLGUuYSxkKTpScnQoZS5hLGQsdC5hLG8pO2Vsc2V7aWYocz1vIT1kP28+ZD8xOi0xOlB5dCh0LmEsZS5hLG8pLHM9PTApcmV0dXJuIEpwKCksUUU7cz09MT8oRj1oLE09RnJ0KHQuYSxvLGUuYSxkKSk6KEY9dyxNPUZydChlLmEsZCx0LmEsbykpfXJldHVybiBrPW5ldyBLMyhGLE0ubGVuZ3RoLE0pLE9DKGspLGt9ZnVuY3Rpb24gRWF0KHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxDLE0sRixIO3JldHVybiBNPWplKFJlKFEoZSwoVGUoKSxyQ3QpKSkpLEY9bnVsbCxvPT0oc28oKSxKdSkmJnIuYy5pPT1uP0Y9ci5jOm89PWV1JiZyLmQuaT09biYmKEY9ci5kKSxrPWgsIWt8fCFNfHxGPyhDPShiZSgpLFpvKSxGP0M9Ri5qOkgzKHUoUShuLG9zKSw5OCkpJiYoQz1vPT1KdT9CbjpIbiksdz1FeW4odCxlLG4sbyxDLHIpLGQ9TnJ0KChGYShuKSxyKSksbz09SnU/KERhKGQsdShGZSh3LmosMCksMTEpKSxzYShkLHMpKTooRGEoZCxzKSxzYShkLHUoRmUody5qLDApLDExKSkpLGs9bmV3IEdyZShyLGQsdyx1KFEodywoc2UoKSxfaSkpLDExKSxvLCFGKSk6KHVlKGsuZSxyKSxIPWIuTWF0aC5tYXgoWHQoeWUoUShrLmQsVWcpKSksWHQoeWUoUShyLFVnKSkpKSxKdChrLmQsVWcsSCkpLGxuKHQuYSxyLG5ldyBUaihrLmQsZSxvKSksa31mdW5jdGlvbiBFcSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKEM9bnVsbCx0LmQmJihDPXUoRmModC5kLGUpLDEzOCkpLCFDKXtpZihvPXQuYS5NaCgpLE09by5pLCF0LmR8fCQ5KHQuZCkhPU0pe2Zvcih3PW5ldyBDcix0LmQmJlZDKHcsdC5kKSxrPXcuZi5jK3cuZy5jLGQ9aztkPE07KytkKXI9dShTdChvLGQpLDEzOCkscz1PZyh0LmUscikubmUoKSxuPXUocz09bnVsbD9zdSh3LmYsbnVsbCxyKTpudyh3LmcscyxyKSwxMzgpLG4mJm4hPXImJihzPT1udWxsP3N1KHcuZixudWxsLG4pOm53KHcuZyxzLG4pKTtpZih3LmYuYyt3LmcuYyE9TSlmb3IoaD0wO2g8azsrK2gpcj11KFN0KG8saCksMTM4KSxzPU9nKHQuZSxyKS5uZSgpLG49dShzPT1udWxsP3N1KHcuZixudWxsLHIpOm53KHcuZyxzLHIpLDEzOCksbiYmbiE9ciYmKHM9PW51bGw/c3Uody5mLG51bGwsbik6bncody5nLHMsbikpO3QuZD13fUM9dShGYyh0LmQsZSksMTM4KX1yZXR1cm4gQ31mdW5jdGlvbiBFeW4odCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEMsTTtyZXR1cm4gaD1udWxsLGs9cj09KHNvKCksSnUpP28uYzpvLmQsdz1FeihlKSxrLmk9PW4/KGg9dShKbih0LmIsayksMTApLGh8fChoPVREKGssdShRKG4sKFRlKCksb3MpKSw5OCkscyxPd24oayksbnVsbCxrLm4say5vLHcsZSksSnQoaCwoc2UoKSxfaSksayksa2kodC5iLGssaCkpKTooaD1URCgoQz1uZXcgeGEsTT1YdCh5ZShRKGUsKFRlKCkseGYpKSkpLzIsRkkoQyx6eSxNKSxDKSx1KFEobixvcyksOTgpLHMscj09SnU/LTE6MSxudWxsLG5ldyBUYSxuZXcgJGUoMCwwKSx3LGUpLGQ9dmRuKGgsbixyKSxKdChoLChzZSgpLF9pKSxkKSxraSh0LmIsZCxoKSksdShRKGUsKHNlKCksR2MpKSwyMSkuRmMoKG9vKCksYmgpKSxIMyh1KFEoZSwoVGUoKSxvcykpLDk4KSk/SnQoZSxvcywob2EoKSxMNykpOkp0KGUsb3MsKG9hKCksSDEpKSxofWZ1bmN0aW9uIFR5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7d3IoZSwiT3J0aG9nb25hbCBlZGdlIHJvdXRpbmciLDEpLGs9WHQoeWUoUSh0LChUZSgpLFo0KSkpKSxuPVh0KHllKFEodCxRNCkpKSxyPVh0KHllKFEodCxSMikpKSxGPW5ldyBHbnQoMCxuKSx0dD0wLGg9bmV3IGhhKHQuYiwwKSxkPW51bGwsQz1udWxsLHc9bnVsbCxNPW51bGw7ZG8gQz1oLmI8aC5kLmdjKCk/KFFuKGguYjxoLmQuZ2MoKSksdShoLmQuWGIoaC5jPWguYisrKSwyOSkpOm51bGwsTT1DP0MuYTpudWxsLGQmJihmeHQoZCx0dCksdHQrPWQuYy5hKSxZPWQ/dHQrcjp0dCxWPXZ4dChGLHQsdyxNLFkpLHM9IWR8fGVqKHcsKGhxKCksTk8pKSxvPSFDfHxlaihNLChocSgpLE5PKSksVj4wPyhIPShWLTEpKm4sZCYmKEgrPXIpLEMmJihIKz1yKSxIPGsmJiFzJiYhbyYmKEg9ayksdHQrPUgpOiFzJiYhbyYmKHR0Kz1rKSxkPUMsdz1NO3doaWxlKEMpO3QuZi5hPXR0LG9yKGUpfWZ1bmN0aW9uIFRhdCgpe1RhdD1aO3ZhciB0O1FBdD1uZXcgbXF0LEc0ZT1QdChBZSx0ZSwyLDAsNiwxKSxxNGU9QzEoWngoMzMsNTgpLFp4KDEsMjYpKSxINGU9QzEoWngoOTcsMTIyKSxaeCg2NSw5MCkpLFVBdD1aeCg0OCw1NyksJDRlPUMxKHE0ZSwwKSx6NGU9QzEoSDRlLFVBdCksV0F0PUMxKEMxKDAsWngoMSw2KSksWngoMzMsMzgpKSxLQXQ9QzEoQzEoVUF0LFp4KDY1LDcwKSksWngoOTcsMTAyKSksVjRlPUMxKCQ0ZSxQeigiLV8uIX4qJygpIikpLFU0ZT1DMSh6NGUsTHooIi1fLiF+KicoKSIpKSxQeih1MGUpLEx6KHUwZSksQzEoVjRlLFB6KCI7OkAmPSskLCIpKSxDMShVNGUsTHooIjs6QCY9KyQsIikpLFlBdD1QeigiOi8/IyIpLFhBdD1MeigiOi8/IyIpLGlBPVB6KCIvPyMiKSxzQT1MeigiLz8jIiksdD1uZXcgcXMsdC5hLnpjKCJqYXIiLHQpLHQuYS56YygiemlwIix0KSx0LmEuemMoImFyY2hpdmUiLHQpLHJVPSh2bigpLG5ldyBRayh0KSl9ZnVuY3Rpb24gTWxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07aWYoSnQoZSwoZmMoKSxrNyksMCksdz11KFEoZSx5ViksODYpLGUuZC5iPT0wKXc/KEM9WHQoeWUoUSh3LFlnKSkpK3QuYStjbXQodyxlKSxKdChlLFlnLEMpKTpKdChlLFlnLDApO2Vsc2V7Zm9yKHI9KG89ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngobykpO2tSKHIuYSk7KW49dSh0aShyLmEpLDE4OCkuYyxNbGUodCxuKTtkPXUobGooKGg9ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngoaCkpKSw4NiksTT11KFZYZSgocz1laShuZXcgQ3AoZSkuYS5kLDApLG5ldyBieChzKSkpLDg2KSxrPShYdCh5ZShRKE0sWWcpKSkrWHQoeWUoUShkLFlnKSkpKS8yLHc/KEM9WHQoeWUoUSh3LFlnKSkpK3QuYStjbXQodyxlKSxKdChlLFlnLEMpLEp0KGUsazcsWHQoeWUoUShlLFlnKSkpLWspLEQzbih0LGUpKTpKdChlLFlnLGspfX1mdW5jdGlvbiBURSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO2Q9MCxWPTAsdz1sJCh0LmYsdC5mLmxlbmd0aCksbz10LmQsaD10Lmkscj10LmEscz10LmI7ZG97Zm9yKEg9MCxDPW5ldyBTKHQucCk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTApLEY9WWxlKHQsayksbj0hMCwodC5xPT0odzQoKSxNTyl8fHQucT09SU8pJiYobj1qZShSZShGLmIpKSksdShGLmEsMTkpLmE8MCYmbj8oKytILHc9bCQodC5mLHQuZi5sZW5ndGgpLHQuZD10LmQrdShGLmEsMTkpLmEsVis9by10LmQsbz10LmQrdShGLmEsMTkpLmEsaD10Lmkscj1Hdih0LmEpLHM9R3YodC5iKSk6KHQuZj1sJCh3LHcubGVuZ3RoKSx0LmQ9byx0LmE9KEFyKHIpLHI/bmV3IFB1KHIpOmQ4KG5ldyBTKHIpKSksdC5iPShBcihzKSxzP25ldyBQdShzKTpkOChuZXcgUyhzKSkpLHQuaT1oKTsrK2QsTT1IIT0wJiZqZShSZShlLktiKG5ldyBsYShkZShWKSxkZShkKSkpKSl9d2hpbGUoTSl9ZnVuY3Rpb24gQ3luKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZTtyZXR1cm4gaD10LmYsRj1lLmYsZD1oPT0oeUUoKSxSNil8fGg9PXpTLEg9Rj09UjZ8fEY9PXpTLHc9aD09bjV8fGg9PXFTLFY9Rj09bjV8fEY9PXFTLGs9aD09bjV8fGg9PVI2LFk9Rj09bjV8fEY9PVI2LGQmJkg/dC5mPT16Uz90OmU6dyYmVj90LmY9PXFTP3Q6ZTprJiZZPyhoPT1uNT8oTT10LEM9ZSk6KE09ZSxDPXQpLG89KHR0PW4uaituLmYsZ3Q9TS5lK3IuZixMdD1iLk1hdGgubWF4KHR0LGd0KSxfdD1MdC1iLk1hdGgubWluKG4uaixNLmUpLEJ0PU0uZCtyLmctbi5pLEJ0Kl90KSxzPShZdD1uLmkrbi5nLGNlPUMuZCtyLmcsU2U9Yi5NYXRoLm1heChZdCxjZSksV2U9U2UtYi5NYXRoLm1pbihuLmksQy5kKSxRZT1DLmUrci5mLW4uaixXZSpRZSksbzw9cz90LmY9PW41P3Q6ZTp0LmY9PVI2P3Q6ZSk6dH1mdW5jdGlvbiBfeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoQz10LmUuYS5jLmxlbmd0aCxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMjEpLG8uaj0hMTtmb3IodC5pPVB0KFRyLFhyLDI1LEMsMTUsMSksdC5nPVB0KFRyLFhyLDI1LEMsMTUsMSksdC5uPW5ldyBsZSxzPTAsTT1uZXcgbGUsdz1uZXcgUyh0LmUuYSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTIxKSxkLmQ9cysrLGQuYi5hLmMubGVuZ3RoPT0wJiZ1ZSh0Lm4sZCksQXMoTSxkLmcpO2ZvcihlPTAscj1uZXcgUyhNKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLG4uYz1lKyssbi5mPSExO2s9TS5jLmxlbmd0aCx0LmI9PW51bGx8fHQuYi5sZW5ndGg8az8odC5iPVB0KGlhLHZvLDI1LGssMTUsMSksdC5jPVB0KGRsLGkwLDI1LGssMTYsMSkpOlA5KHQuYyksdC5kPU0sdC5wPW5ldyBubnQoUW0odC5kLmMubGVuZ3RoKSksdC5qPTF9ZnVuY3Rpb24gU3luKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKCEoZS5lLmMubGVuZ3RoPD0xKSl7Zm9yKHQuZj1lLHQuZD11KFEodC5mLChKSSgpLHc3dCkpLDM3OSksdC5nPXUoUSh0LmYsazd0KSwxOSkuYSx0LmU9WHQoeWUoUSh0LmYsbTd0KSkpLHQuYz1YdCh5ZShRKHQuZixvRykpKSxxWXQodC5iKSxzPW5ldyBTKHQuZi5jKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyODIpLEc1dCh0LmIsci5jLHIsbnVsbCksRzV0KHQuYixyLmQscixudWxsKTtmb3IoZD10LmYuZS5jLmxlbmd0aCx0LmE9WGIoaWEsW3RlLHZvXSxbMTA0LDI1XSwxNSxbZCxkXSwyKSxrPW5ldyBTKHQuZi5lKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxNDQpLFltbih0LHcsdC5hW3cuYl0pO2Zvcih0Lmk9WGIoaWEsW3RlLHZvXSxbMTA0LDI1XSwxNSxbZCxkXSwyKSxvPTA7bzxkOysrbylmb3IoaD0wO2g8ZDsrK2gpbj10LmFbb11baF0sQz0xLyhuKm4pLHQuaVtvXVtoXT1DfX1mdW5jdGlvbiBUXyh0KXt2YXIgZSxuLHIscztpZighKHQuYj09bnVsbHx8dC5iLmxlbmd0aDw9MikmJiF0LmEpe2ZvcihlPTAscz0wO3M8dC5iLmxlbmd0aDspe2ZvcihlIT1zPyh0LmJbZV09dC5iW3MrK10sdC5iW2UrMV09dC5iW3MrK10pOnMrPTIsbj10LmJbZSsxXTtzPHQuYi5sZW5ndGgmJiEobisxPHQuYltzXSk7KWlmKG4rMT09dC5iW3NdKXQuYltlKzFdPXQuYltzKzFdLG49dC5iW2UrMV0scys9MjtlbHNlIGlmKG4+PXQuYltzKzFdKXMrPTI7ZWxzZSBpZihuPHQuYltzKzFdKXQuYltlKzFdPXQuYltzKzFdLG49dC5iW2UrMV0scys9MjtlbHNlIHRocm93IHJ0KG5ldyBHbygiVG9rZW4jY29tcGFjdFJhbmdlcygpOiBJbnRlcm5lbCBFcnJvcjogWyIrdC5iW2VdKyIsIit0LmJbZSsxXSsiXSBbIit0LmJbc10rIiwiK3QuYltzKzFdKyJdIikpO2UrPTJ9ZSE9dC5iLmxlbmd0aCYmKHI9UHQoVHIsWHIsMjUsZSwxNSwxKSxJYyh0LmIsMCxyLDAsZSksdC5iPXIpLHQuYT0hMH19ZnVuY3Rpb24gQXluKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKGg9UHgodC5hKS5LYygpO2guT2IoKTspe2lmKG89dShoLlBiKCksMTcpLG8uYi5jLmxlbmd0aD4wKWZvcihyPW5ldyBQdSh1KEFpKHQuYSxvKSwyMSkpLHZuKCksWHMocixuZXcgU2koZSkpLHM9bmV3IGhhKG8uYiwwKTtzLmI8cy5kLmdjKCk7KXtzd2l0Y2gobj0oUW4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDcwKSksZD0tMSx1KFEobiwoVGUoKSxNZCkpLDI3MikuZyl7Y2FzZSAxOmQ9ci5jLmxlbmd0aC0xO2JyZWFrO2Nhc2UgMDpkPVoxbihyKTticmVhaztjYXNlIDI6ZD0wfWQhPS0xJiYodz0oQW4oZCxyLmMubGVuZ3RoKSx1KHIuY1tkXSwyNDMpKSx1ZSh3LmIuYixuKSx1KFEoRmEody5iLmMuaSksKHNlKCksR2MpKSwyMSkuRmMoKG9vKCksaDcpKSx1KFEoRmEody5iLmMuaSksR2MpLDIxKS5GYyhsNyksRWwocyksSnQobixlOXQsbykpfURhKG8sbnVsbCksc2EobyxudWxsKX19ZnVuY3Rpb24gTHluKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49bmV3IEJkLHI9dShQbChwdShuZXcgVG4obnVsbCxuZXcgX24odC5mLDE2KSksbiksWW0obmV3IGNuLG5ldyBsaSxuZXcgZGksbmV3IEVlLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxMeSksR2xdKSkpLDIxKSxzPXIuZ2MoKSxzPXM9PTI/MTowLHM9PTEmJkF2KFVJKHUoUGwoUmkoci5MYygpLG5ldyBFMCksVG5lKGcyKDApLG5ldyBEcikpLDE2MikuYSwyKSwwKSYmKHM9MCkscj11KFBsKHB1KG5ldyBUbihudWxsLG5ldyBfbihlLmYsMTYpKSxuKSxZbShuZXcgY24sbmV3IGxpLG5ldyBkaSxuZXcgRWUsY3Qob3QobGwsMSksYWUsMTMyLDAsW0x5LEdsXSkpKSwyMSksbz1yLmdjKCksbz1vPT0yPzE6MCxvPT0xJiZBdihVSSh1KFBsKFJpKHIuTGMoKSxuZXcgQmkpLFRuZShnMigwKSxuZXcgRHIpKSwxNjIpLmEsMiksMCkmJihvPTApLHM8bz8tMTpzPT1vPzA6MX1mdW5jdGlvbiBNeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYoaz1uZXcgbGUsIVZzKHQsKHNlKCksT2x0KSkpcmV0dXJuIGs7Zm9yKHI9dShRKHQsT2x0KSwxNSkuS2MoKTtyLk9iKCk7KWU9dShyLlBiKCksMTApLEh5bihlLHQpLGsuY1trLmMubGVuZ3RoXT1lO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDI5KSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLGguaz09KEduKCkseHMpJiYodz11KFEoaCxHRyksMTApLHcmJihDPW5ldyBNYyxVbyhDLGgpLE09dShRKGgsb2MpLDYxKSxGcyhDLE0pLEY9dShGZSh3LmosMCksMTEpLEg9bmV3IHp2LERhKEgsQyksc2EoSCxGKSkpO2ZvcihuPW5ldyBTKGspO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxrbyhlLHUoRmUodC5iLHQuYi5jLmxlbmd0aC0xKSwyOSkpO3JldHVybiBrfWZ1bmN0aW9uIElsZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKGU9azEodCksbz1qZShSZShxZShlLChUZSgpLCR5KSkpKSxDPTAscz0wLGs9bmV3IGVyKCghdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLHQuZSkpO2suZSE9ay5pLmdjKCk7KXc9dShkcihrKSw3OSksZD11dyh3KSxoPWQmJm8mJmplKFJlKHFlKHcsUDIpKSksRj1Nbyh1KFN0KCghdy5jJiYody5jPW5ldyBDbihicix3LDUsOCkpLHcuYyksMCksODIpKSxkJiZoPysrczpkJiYhaD8rK0M6dHMoRik9PWV8fEY9PWU/KytzOisrQztmb3Iocj1uZXcgZXIoKCF0LmQmJih0LmQ9bmV3IENuKFdzLHQsOCw1KSksdC5kKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDc5KSxkPXV3KG4pLGg9ZCYmbyYmamUoUmUocWUobixQMikpKSxNPU1vKHUoU3QoKCFuLmImJihuLmI9bmV3IENuKGJyLG4sNCw3KSksbi5iKSwwKSw4MikpLGQmJmg/KytDOmQmJiFoPysrczp0cyhNKT09ZXx8TT09ZT8rK0M6KytzO3JldHVybiBDLXN9ZnVuY3Rpb24gSXluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKHdyKGUsIkVkZ2Ugc3BsaXR0aW5nIiwxKSx0LmIuYy5sZW5ndGg8PTIpe29yKGUpO3JldHVybn1mb3Iobz1uZXcgaGEodC5iLDApLGg9KFFuKG8uYjxvLmQuZ2MoKSksdShvLmQuWGIoby5jPW8uYisrKSwyOSkpO28uYjxvLmQuZ2MoKTspZm9yKHM9aCxoPShRbihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMjkpKSx3PW5ldyBTKHMuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHcpLDEwKSxDPW5ldyBTKGQuaik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxyPW5ldyBTKGsuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLEY9bi5kLE09Ri5pLmMsTSE9cyYmTSE9aCYmVWNlKG4sKEg9bmV3IEgwKHQpLF8wKEgsKEduKCksWnMpKSxKdChILChzZSgpLF9pKSxuKSxKdChILChUZSgpLG9zKSwob2EoKSxWYykpLGtvKEgsaCksSCkpO29yKGUpfWZ1bmN0aW9uIERsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSDtpZihkPWUucCE9bnVsbCYmIWUuYixkfHx3cihlLCRmZSwxKSxuPXUoUSh0LChzZSgpLFJsdCkpLDE1KSxoPTEvbi5nYygpLGUubilmb3IoWWIoZSwiRUxLIExheWVyZWQgdXNlcyB0aGUgZm9sbG93aW5nICIrbi5nYygpKyIgbW9kdWxlczoiKSxIPTAsRj1uLktjKCk7Ri5PYigpOylDPXUoRi5QYigpLDUxKSxyPShIPDEwPyIwIjoiIikrSCsrLFliKGUsIiAgIFNsb3QgIityKyI6ICIrQXAoc2woQykpKTtmb3IoTT1uLktjKCk7TS5PYigpOylDPXUoTS5QYigpLDUxKSxDLnBmKHQsUmMoZSxoKSk7Zm9yKG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwyOSksQXModC5hLHMuYSkscy5hLmM9UHQoWG4sSWUsMSwwLDUsMSk7Zm9yKGs9bmV3IFModC5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxMCksa28odyxudWxsKTt0LmIuYz1QdChYbixJZSwxLDAsNSwxKSxkfHxvcihlKX1mdW5jdGlvbiBEeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlO3I9WHQoeWUoUShlLChUZSgpLHNDdCkpKSksWXQ9dShRKGUsU1MpLDE5KS5hLEY9NCxzPTMsY2U9MjAvWXQsSD0hMSx3PTAsaD12aTtkb3tmb3Iobz13IT0xLE09dyE9MCxTZT0wLHR0PXQuYSxMdD0wLEJ0PXR0Lmxlbmd0aDtMdDxCdDsrK0x0KVY9dHRbTHRdLFYuZj1udWxsLG00bih0LFYsbyxNLHIpLFNlKz1iLk1hdGguYWJzKFYuYSk7ZG8gZD1sbW4odCxlKTt3aGlsZShkKTtmb3IoWT10LmEsZ3Q9MCxfdD1ZLmxlbmd0aDtndDxfdDsrK2d0KWlmKFY9WVtndF0sbj1zd3QoVikuYSxuIT0wKWZvcihDPW5ldyBTKFYuZSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTApLGsubi5iKz1uO3c9PTB8fHc9PTE/KC0tRixGPD0wJiYoU2U8aHx8LUY+WXQpPyh3PTIsaD12aSk6dz09MD8odz0xLGg9U2UpOih3PTAsaD1TZSkpOihIPVNlPj1ofHxoLVNlPGNlLGg9U2UsSCYmLS1zKX13aGlsZSghKEgmJnM8PTApKX1mdW5jdGlvbiBDYXQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoVj1uZXcgQ3Isbz10LmEuZWMoKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSwxNjgpLGtpKFYscixuLkplKHIpKTtmb3IoaD0oQXIodCksdD9uZXcgUHUodCk6ZDgodC5hLmVjKCkuS2MoKSkpLFhzKGgsbmV3IFduKFYpKSxkPUUkKGgpLHc9bmV3IGNqKGUpLEg9bmV3IENyLHN1KEguZixlLHcpO2QuYS5nYygpIT0wOyl7Zm9yKGs9bnVsbCxDPW51bGwsTT1udWxsLHM9ZC5hLmVjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMTY4KSxYdCh5ZShlYyhBbyhWLmYscikpKSk8PXNzKXtpZihrbChILHIuYSkmJiFrbChILHIuYikpe0M9ci5iLE09ci5hLGs9cjticmVha31pZihrbChILHIuYikmJiFrbChILHIuYSkpe0M9ci5hLE09ci5iLGs9cjticmVha319aWYoIWspYnJlYWs7Rj1uZXcgY2ooQyksdWUodShlYyhBbyhILmYsTSkpLDIyMSkuYSxGKSxzdShILmYsQyxGKSxkLmEuQmMoaykhPW51bGx9cmV0dXJuIHd9ZnVuY3Rpb24gT3luKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixIO2Zvcih3cihuLCJEZXB0aC1maXJzdCBjeWNsZSByZW1vdmFsIiwxKSxNPWUuYSxDPU0uYy5sZW5ndGgsdC5jPW5ldyBsZSx0LmQ9UHQoZGwsaTAsMjUsQywxNiwxKSx0LmE9UHQoZGwsaTAsMjUsQywxNiwxKSx0LmI9bmV3IGxlLGg9MCxrPW5ldyBTKE0pO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSx3LnA9aCxTOChqbyh3KSkmJnVlKHQuYyx3KSwrK2g7Zm9yKEg9bmV3IFModC5jKTtILmE8SC5jLmMubGVuZ3RoOylGPXUoSihIKSwxMCksSDR0KHQsRik7Zm9yKG89MDtvPEM7bysrKXQuZFtvXXx8KGQ9KEFuKG8sTS5jLmxlbmd0aCksdShNLmNbb10sMTApKSxINHQodCxkKSk7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksZHcociwhMCksSnQoZSwoc2UoKSx4TyksKEZuKCksITApKTt0LmM9bnVsbCx0LmQ9bnVsbCx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBOeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3IodC5hLmM9UHQoWG4sSWUsMSwwLDUsMSkscj1laShlLmIsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDg2KSxuLmIuYj09MCYmKEp0KG4sKGZjKCksV3kpLChGbigpLCEwKSksdWUodC5hLG4pKTtzd2l0Y2godC5hLmMubGVuZ3RoKXtjYXNlIDA6cz1uZXcgeWl0KDAsZSwiRFVNTVlfUk9PVCIpLEp0KHMsKGZjKCksV3kpLChGbigpLCEwKSksSnQocyxfaHQsITApLG5pKGUuYixzKTticmVhaztjYXNlIDE6YnJlYWs7ZGVmYXVsdDpmb3Iobz1uZXcgeWl0KDAsZSwiU1VQRVJfUk9PVCIpLGQ9bmV3IFModC5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSw4Niksdz1uZXcgTHd0KG8saCksSnQodywoZmMoKSxfaHQpLChGbigpLCEwKSksbmkoby5hLmEsdyksbmkoby5kLHcpLG5pKGguYix3KSxKdChoLFd5LCExKTtKdChvLChmYygpLFd5KSwoRm4oKSwhMCkpLEp0KG8sX2h0LCEwKSxuaShlLmIsbyl9fWZ1bmN0aW9uIFB5bih0LGUpe3k0KCk7dmFyIG4scixzLG8saCxkO3JldHVybiBvPWUuYy0odC5jK3QuYikscz10LmMtKGUuYytlLmIpLGg9dC5kLShlLmQrZS5hKSxuPWUuZC0odC5kK3QuYSkscj1iLk1hdGgubWF4KHMsbyksZD1iLk1hdGgubWF4KGgsbikseTEoKSxnZihFZCksKGIuTWF0aC5hYnMocik8PUVkfHxyPT0wfHxpc05hTihyKSYmaXNOYU4oMCk/MDpyPDA/LTE6cj4wPzE6THYoaXNOYU4ociksaXNOYU4oMCkpKT49MF4oZ2YoRWQpLChiLk1hdGguYWJzKGQpPD1FZHx8ZD09MHx8aXNOYU4oZCkmJmlzTmFOKDApPzA6ZDwwPy0xOmQ+MD8xOkx2KGlzTmFOKGQpLGlzTmFOKDApKSk+PTApP2IuTWF0aC5tYXgoZCxyKTooZ2YoRWQpLChiLk1hdGguYWJzKHIpPD1FZHx8cj09MHx8aXNOYU4ocikmJmlzTmFOKDApPzA6cjwwPy0xOnI+MD8xOkx2KGlzTmFOKHIpLGlzTmFOKDApKSk+MD9iLk1hdGguc3FydChkKmQrcipyKTotYi5NYXRoLnNxcnQoZCpkK3IqcikpfWZ1bmN0aW9uIG0yKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpe2lmKCF0LmEmJih0LmE9bmV3IGZSKSx0LmU9PTIpe2hSKHQuYSxlKTtyZXR1cm59aWYoZS5lPT0xKXtmb3Iocz0wO3M8ZS5lbSgpO3MrKyltMih0LGUuYW0ocykpO3JldHVybn1pZihkPXQuYS5hLmMubGVuZ3RoLGQ9PTApe2hSKHQuYSxlKTtyZXR1cm59aWYoaD11KFJ2KHQuYSxkLTEpLDExNyksISgoaC5lPT0wfHxoLmU9PTEwKSYmKGUuZT09MHx8ZS5lPT0xMCkpKXtoUih0LmEsZSk7cmV0dXJufW89ZS5lPT0wPzI6ZS5ibSgpLmxlbmd0aCxoLmU9PTA/KG49bmV3IEI5LHI9aC5fbCgpLHI+PVlhP2ZvKG4scjN0KHIpKTptOChuLHImbXMpLGg9bmV3IGhydCgxMCxudWxsLDApLGxlbih0LmEsaCxkLTEpKToobj0oaC5ibSgpLmxlbmd0aCtvLG5ldyBCOSksZm8obixoLmJtKCkpKSxlLmU9PTA/KHI9ZS5fbCgpLHI+PVlhP2ZvKG4scjN0KHIpKTptOChuLHImbXMpKTpmbyhuLGUuYm0oKSksdShoLDUyMSkuYj1uLmF9fWZ1bmN0aW9uIE9sZSh0KXt2YXIgZSxuLHIscyxvO3JldHVybiB0LmchPW51bGw/dC5nOnQuYTwzMj8odC5nPUs0bihrdSh0LmYpLHBzKHQuZSkpLHQuZyk6KHM9RGF0KCghdC5jJiYodC5jPWpJKHQuZikpLHQuYyksMCksdC5lPT0wP3M6KGU9KCF0LmMmJih0LmM9akkodC5mKSksdC5jKS5lPDA/MjoxLG49cy5sZW5ndGgscj0tdC5lK24tZSxvPW5ldyBfcCxvLmErPSIiK3MsdC5lPjAmJnI+PS02P3I+PTA/aUkobyxuLXBzKHQuZSksU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpOihvLmE9RGwoby5hLDAsZS0xKSsiMC4iK09NKG8uYSxlLTEpLGlJKG8sZSsxLEFoKEQyLDAsLXBzKHIpLTEpKSk6KG4tZT49MSYmKGlJKG8sZSxTdHJpbmcuZnJvbUNoYXJDb2RlKDQ2KSksKytuKSxpSShvLG4sU3RyaW5nLmZyb21DaGFyQ29kZSg2OSkpLHI+MCYmaUkobywrK24sU3RyaW5nLmZyb21DaGFyQ29kZSg0MykpLGlJKG8sKytuLCIiK0VDKGt1KHIpKSkpLHQuZz1vLmEsdC5nKSl9ZnVuY3Rpb24gRnluKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZighbi5kYygpKXtmb3IoZD0wLEY9MCxyPW4uS2MoKSxWPXUoci5QYigpLDE5KS5hO2Q8ZS5mOyl7aWYoZD09ViYmKEY9MCxyLk9iKCk/Vj11KHIuUGIoKSwxOSkuYTpWPWUuZisxKSxkIT1GKXtmb3IodHQ9dShGZSh0LmIsZCksMjkpLEg9dShGZSh0LmIsRiksMjkpLFk9R3YodHQuYSksTT1uZXcgUyhZKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwxMCksb3koQyxILmEuYy5sZW5ndGgsSCksRj09MClmb3IoaD1HdihqbyhDKSksbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksZHcocywhMCksSnQodCwoc2UoKSx4TyksKEZuKCksITApKSxqbGUodCxzLDEpfSsrRiwrK2R9Zm9yKHc9bmV3IGhhKHQuYiwwKTt3LmI8dy5kLmdjKCk7KWs9KFFuKHcuYjx3LmQuZ2MoKSksdSh3LmQuWGIody5jPXcuYisrKSwyOSkpLGsuYS5jLmxlbmd0aD09MCYmRWwodyl9fWZ1bmN0aW9uIEJ5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKGg9ZS5iLEM9aC5vLHc9aC5kLHI9WHQoeWUoRnooaCwoVGUoKSx4ZikpKSkscz1YdCh5ZShGeihoLEI2KSkpLGs9WHQoeWUoRnooaCxlaHQpKSksZD1uZXcgVnR0LEF2dChkLHcuZCx3LmMsdy5hLHcuYiksRj1adm4oZSxyLHMsayksZ3Q9bmV3IFMoZS5kKTtndC5hPGd0LmMuYy5sZW5ndGg7KXtmb3IodHQ9dShKKGd0KSwxMDEpLFY9dHQuZi5hLmVjKCkuS2MoKTtWLk9iKCk7KUg9dShWLlBiKCksNDA5KSxvPUguYSxNPUhkbihIKSxuPShMdD1uZXcgRHUsbGFlKEgsSC5jLEYsTHQpLHAwbihILE0sRixMdCksbGFlKEgsSC5kLEYsTHQpLEx0KSxuPXQuVWYoSCxNLG4pLF9oKG8uYSksVWEoby5hLG4pLHVzKG5ldyBUbihudWxsLG5ldyBfbihuLDE2KSksbmV3IEtHdChDLGQpKTtZPXR0LmksWSYmKElkbih0dCxZLEYscyksX3Q9bmV3IHlvKFkuZyksQTN0KEMsZCxfdCksTGkoX3QsWS5qKSxBM3QoQyxkLF90KSl9QXZ0KHcsZC5kLGQuYyxkLmEsZC5iKX1mdW5jdGlvbiBSeW4odCxlLG4pe3ZhciByLHMsbztpZihzPXUoUShlLChUZSgpLEtHKSksMjc1KSxzIT0oZ0UoKSxiUykpe3N3aXRjaCh3cihuLCJIb3Jpem9udGFsIENvbXBhY3Rpb24iLDEpLHQuYT1lLG89bmV3IEJ0ZSxyPW5ldyBGb2UoKG8uZD1lLG8uYz11KFEoby5kLFgwKSwyMTgpLGp2bihvKSxNM24obyksVXZuKG8pLG8uYSkpLEJLZShyLHQuYiksdShRKGUsTjl0KSw0MjIpLmcpe2Nhc2UgMTplSHQocixuZXcgWmVlKHQuYSkpO2JyZWFrO2RlZmF1bHQ6ZUh0KHIsKEF3dCgpLEdnZSkpfXN3aXRjaChzLmcpe2Nhc2UgMTpwXyhyKTticmVhaztjYXNlIDI6cF8oX3EociwoYW8oKSxrZikpKTticmVhaztjYXNlIDM6cF8odEh0KF9xKHBfKHIpLChhbygpLGtmKSksbmV3IGpUKSk7YnJlYWs7Y2FzZSA0OnBfKHRIdChfcShwXyhyKSwoYW8oKSxrZikpLG5ldyB6ZChvKSkpO2JyZWFrO2Nhc2UgNTpwXyhGS2UocixLYmUpKX1fcShyLChhbygpLGpoKSksci5lPSEwLGQ0bihvKSxvcihuKX19ZnVuY3Rpb24ganluKHQsZSxuLHIscyxvLGgsZCl7dmFyIHcsayxDLE07c3dpdGNoKHc9XzEoY3Qob3QodnhuLDEpLEllLDIyMCwwLFtlLG4scixzXSkpLE09bnVsbCx0LmIuZyl7Y2FzZSAxOk09XzEoY3Qob3QoRF90LDEpLEllLDUyNiwwLFtuZXcgV1QsbmV3IFVULG5ldyBOTF0pKTticmVhaztjYXNlIDA6TT1fMShjdChvdChEX3QsMSksSWUsNTI2LDAsW25ldyBOTCxuZXcgVVQsbmV3IFdUXSkpO2JyZWFrO2Nhc2UgMjpNPV8xKGN0KG90KERfdCwxKSxJZSw1MjYsMCxbbmV3IFVULG5ldyBXVCxuZXcgTkxdKSl9Zm9yKEM9bmV3IFMoTSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksNTI2KSx3LmMubGVuZ3RoPjEmJih3PWsubWcodyx0LmEsZCkpO3JldHVybiB3LmMubGVuZ3RoPT0xP3UoRmUodyx3LmMubGVuZ3RoLTEpLDIyMCk6dy5jLmxlbmd0aD09Mj9DeW4oKEFuKDAsdy5jLmxlbmd0aCksdSh3LmNbMF0sMjIwKSksKEFuKDEsdy5jLmxlbmd0aCksdSh3LmNbMV0sMjIwKSksaCxvKTpudWxsfWZ1bmN0aW9uIE5sZSh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG11KHQuYSxuZXcgeGkpLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwyMjEpLHI9bmEobmModSh0LmIsNjUpLmMpLHUoZS5iLDY1KS5jKSxMcGU/KGg9dSh0LmIsNjUpLmIsbz11KGUuYiw2NSkuYixiLk1hdGguYWJzKHIuYSk+PWIuTWF0aC5hYnMoci5iKT8oci5iPTAsby5kK28uYT5oLmQmJm8uZDxoLmQraC5hJiZBaihyLGIuTWF0aC5tYXgoaC5jLShvLmMrby5iKSxvLmMtKGguYytoLmIpKSkpOihyLmE9MCxvLmMrby5iPmguYyYmby5jPGguYytoLmImJkFqKHIsYi5NYXRoLm1heChoLmQtKG8uZCtvLmEpLG8uZC0oaC5kK2guYSkpKSkpOkFqKHIsdWxlKHUodC5iLDY1KSx1KGUuYiw2NSkpKSxzPWIuTWF0aC5zcXJ0KHIuYSpyLmErci5iKnIuYikscz1zYWUoY1MsZSxzLHIpLEFqKHIscyksSW50KHUoZS5iLDY1KSxyKSxtdShlLmEsbmV3IEpyKHIpKSx1KGNTLmIsNjUpLHhtdChjUyxlN3QsZSl9ZnVuY3Rpb24gJHluKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFY7Zm9yKHQuZj1uZXcgR3R0LGs9MCxzPTAsaD1uZXcgUyh0LmUuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihkPXUoSih3KSwxMCksZC5wPWsrKyxyPW5ldyBhcihscihNcyhkKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSxuLnA9cysrO2ZvcihlPXhhdChkKSxGPW5ldyBTKGQuaik7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTEpLGUmJihWPU0uYS5iLFYhPWIuTWF0aC5mbG9vcihWKSYmKEM9Vi1WdihrdShiLk1hdGgucm91bmQoVikpKSxNLmEuYi09QykpLEg9TS5uLmIrTS5hLmIsSCE9Yi5NYXRoLmZsb29yKEgpJiYoQz1ILVZ2KGt1KGIuTWF0aC5yb3VuZChIKSkpLE0ubi5iLT1DKX10Lmc9ayx0LmI9cyx0Lmk9UHQoZ3huLEllLDQwMSxrLDAsMSksdC5jPVB0KGR4bixJZSw2NDkscywwLDEpLHQuZC5hLiRiKCl9ZnVuY3Rpb24geHIodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2lmKHQuZWooKSlpZih3PXQuZmooKSx0Lmk+MCl7aWYoZT1uZXcgWWJ0KHQuaSx0LmcpLG49dC5pLG89bjwxMDA/bnVsbDpuZXcgU3AobiksdC5paigpKWZvcihyPTA7cjx0Lmk7KytyKWg9dC5nW3JdLG89dC5raihoLG8pO2lmKFJDKHQpLHM9bj09MT90LlppKDQsU3QoZSwwKSxudWxsLDAsdyk6dC5aaSg2LGUsbnVsbCwtMSx3KSx0LmJqKCkpe2ZvcihyPW5ldyBNeChlKTtyLmUhPXIuaS5nYygpOylvPXQuZGoobnN0KHIpLG8pO28/KG8uRWkocyksby5GaSgpKTp0LiRpKHMpfWVsc2Ugbz8oby5FaShzKSxvLkZpKCkpOnQuJGkocyl9ZWxzZSBSQyh0KSx0LiRpKHQuWmkoNiwodm4oKSxpbyksbnVsbCwtMSx3KSk7ZWxzZSBpZih0LmJqKCkpaWYodC5pPjApe2ZvcihkPXQuZyxrPXQuaSxSQyh0KSxvPWs8MTAwP251bGw6bmV3IFNwKGspLHI9MDtyPGs7KytyKWg9ZFtyXSxvPXQuZGooaCxvKTtvJiZvLkZpKCl9ZWxzZSBSQyh0KTtlbHNlIFJDKHQpfWZ1bmN0aW9uIGh4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKE9uZSh0aGlzKSxuPT0ocXYoKSxiYik/TnModGhpcy5yLHQpOk5zKHRoaXMudyx0KSxDPXNzLGs9VHMsaD1lLmEuZWMoKS5LYygpO2guT2IoKTspcz11KGguUGIoKSw0NiksZD11KHMuYSw0NTUpLHI9dShzLmIsMTcpLHc9ci5jLHc9PXQmJih3PXIuZCksZD09YmI/TnModGhpcy5yLHcpOk5zKHRoaXMudyx3KSxGPShiZSgpLF91KS5IYyh3LmopP1h0KHllKFEodywoc2UoKSxnNykpKSk6S28oY3Qob3QoVXMsMSksdGUsOCwwLFt3Lmkubix3Lm4sdy5hXSkpLmIsQz1iLk1hdGgubWluKEMsRiksaz1iLk1hdGgubWF4KGssRik7Zm9yKE09KGJlKCksX3UpLkhjKHQuaik/WHQoeWUoUSh0LChzZSgpLGc3KSkpKTpLbyhjdChvdChVcywxKSx0ZSw4LDAsW3QuaS5uLHQubix0LmFdKSkuYixTYWUodGhpcyxNLEMsayksbz1lLmEuZWMoKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSw0NiksQmFlKHRoaXMsdShzLmIsMTcpKTt0aGlzLm89ITF9ZnVuY3Rpb24genluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocjtyZXR1cm4gbj10LmwmODE5MSxyPXQubD4+MTN8KHQubSYxNSk8PDkscz10Lm0+PjQmODE5MSxvPXQubT4+MTd8KHQuaCYyNTUpPDw1LGg9KHQuaCYxMDQ4MzIwKT4+OCxkPWUubCY4MTkxLHc9ZS5sPj4xM3woZS5tJjE1KTw8OSxrPWUubT4+NCY4MTkxLEM9ZS5tPj4xN3woZS5oJjI1NSk8PDUsTT0oZS5oJjEwNDgzMjApPj44LFdlPW4qZCxRZT1yKmQsUm49cypkLHpuPW8qZCxocj1oKmQsdyE9MCYmKFFlKz1uKncsUm4rPXIqdyx6bis9cyp3LGhyKz1vKncpLGshPTAmJihSbis9biprLHpuKz1yKmssaHIrPXMqayksQyE9MCYmKHpuKz1uKkMsaHIrPXIqQyksTSE9MCYmKGhyKz1uKk0pLEg9V2UmdWwsVj0oUWUmNTExKTw8MTMsRj1IK1YsdHQ9V2U+PjIyLGd0PVFlPj45LEx0PShSbiYyNjIxNDMpPDw0LF90PSh6biYzMSk8PDE3LFk9dHQrZ3QrTHQrX3QsWXQ9Um4+PjE4LGNlPXpuPj41LFNlPShociY0MDk1KTw8OCxCdD1ZdCtjZStTZSxZKz1GPj4yMixGJj11bCxCdCs9WT4+MjIsWSY9dWwsQnQmPVcwLHJ1KEYsWSxCdCl9ZnVuY3Rpb24gUGxlKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKGQ9dShGZSh0LmosMCksMTEpLGQuZy5jLmxlbmd0aCE9MCYmZC5lLmMubGVuZ3RoIT0wKXRocm93IHJ0KG5ldyBGbygiSW50ZXJhY3RpdmUgbGF5b3V0IGRvZXMgbm90IHN1cHBvcnQgTk9SVEgvU09VVEggcG9ydHMgd2l0aCBpbmNvbWluZyBfYW5kXyBvdXRnb2luZyBlZGdlcy4iKSk7aWYoZC5nLmMubGVuZ3RoIT0wKXtmb3Iobz1zcyxuPW5ldyBTKGQuZyk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLGg9ZS5kLmkscj11KFEoaCwoVGUoKSxlVikpLDE0Miksbz1iLk1hdGgubWluKG8saC5uLmEtci5iKTtyZXR1cm4gbmV3IGprKEFyKG8pKX1pZihkLmUuYy5sZW5ndGghPTApe2ZvcihzPVRzLG49bmV3IFMoZC5lKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxNyksaD1lLmMuaSxyPXUoUShoLChUZSgpLGVWKSksMTQyKSxzPWIuTWF0aC5tYXgocyxoLm4uYStoLm8uYStyLmMpO3JldHVybiBuZXcgamsoQXIocykpfXJldHVybiBJOSgpLEk5KCksZ3V0fWZ1bmN0aW9uIEZsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHQuRmsoKSl7aWYodC5pPjQpaWYodC53aihlKSl7aWYodC5yaygpKXtpZihzPXUoZSw0OSkscj1zLlVnKCksdz1yPT10LmUmJih0LkRrKCk/cy5PZyhzLlZnKCksdC56aygpKT09dC5BaygpOi0xLXMuVmcoKT09dC5haigpKSx0LkVrKCkmJiF3JiYhciYmcy5aZygpKXtmb3Iobz0wO288dC5pOysrbylpZihuPXQuR2sodSh0Lmdbb10sNTYpKSxHdChuKT09PUd0KGUpKXJldHVybiEwfXJldHVybiB3fWVsc2UgaWYodC5EaygpJiYhdC5DaygpKXtpZihoPXUoZSw1NikuYWgobm8odSh0LmFrKCksMTgpKSksR3QoaCk9PT1HdCh0LmUpKXJldHVybiEwO2lmKGg9PW51bGx8fCF1KGgsNTYpLmtoKCkpcmV0dXJuITF9fWVsc2UgcmV0dXJuITE7aWYoZD1mRSh0LGUpLHQuRWsoKSYmIWQpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKHM9dC5Hayh1KHQuZ1tvXSw1NikpLEd0KHMpPT09R3QoZSkpcmV0dXJuITB9cmV0dXJuIGR9ZWxzZSByZXR1cm4gZkUodCxlKX1mdW5jdGlvbiBxeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihDPW5ldyBsZSxGPW5ldyBxcyxoPWUuYixzPTA7czxoLmMubGVuZ3RoO3MrKyl7Zm9yKGs9KEFuKHMsaC5jLmxlbmd0aCksdShoLmNbc10sMjkpKS5hLEMuYz1QdChYbixJZSwxLDAsNSwxKSxvPTA7bzxrLmMubGVuZ3RoO28rKylkPXQuYVtzXVtvXSxkLnA9byxkLms9PShHbigpLEhjKSYmKEMuY1tDLmMubGVuZ3RoXT1kKSxhaCh1KEZlKGUuYixzKSwyOSkuYSxvLGQpLGQuai5jPVB0KFhuLEllLDEsMCw1LDEpLEFzKGQuaix1KHUoRmUodC5iLHMpLDE1KS5YYihvKSwxNCkpLER4KHUoUShkLChUZSgpLG9zKSksOTgpKXx8SnQoZCxvcywob2EoKSxHMikpO2ZvcihyPW5ldyBTKEMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxNPWx3bihuKSxGLmEuemMoTSxGKSxGLmEuemMobixGKX1mb3Iodz1GLmEuZWMoKS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMCksdm4oKSxYcyhkLmosKEo4KCksdlR0KSksZC5pPSEwLFg0dChkKX1mdW5jdGlvbiBIeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtpZihDPXUoUSh0LChzZSgpLG9jKSksNjEpLHI9dShGZSh0LmosMCksMTEpLEM9PShiZSgpLE5uKT9GcyhyLG1yKTpDPT1tciYmRnMocixObiksdShRKGUsKFRlKCksRjIpKSwxNzQpLkhjKChfbCgpLFYyKSkpe2lmKHc9WHQoeWUoUSh0LG03KSkpLGs9WHQoeWUoUSh0LHk3KSkpLGg9WHQoeWUoUSh0LEd5KSkpLGQ9dShRKGUscXkpLDIxKSxkLkhjKChRdSgpLHRnKSkpZm9yKG49ayxNPXQuby5hLzItci5uLmEsbz1uZXcgUyhyLmYpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDcwKSxzLm4uYj1uLHMubi5hPU0tcy5vLmEvMixuKz1zLm8uYitoO2Vsc2UgaWYoZC5IYyh4YikpZm9yKG89bmV3IFMoci5mKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw3MCkscy5uLmE9dyt0Lm8uYS1yLm4uYTtoaW4obmV3IHRyKCh6OSgpLG5ldyB0cnQoZSwhMSwhMSxuZXcgWVApKSksbmV3IENqKG51bGwsdCwhMSkpfX1mdW5jdGlvbiBHeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYoZS5jLmxlbmd0aCE9MCl7Zm9yKHZuKCksTG50KGUuYyxlLmMubGVuZ3RoLG51bGwpLHM9bmV3IFMoZSkscj11KEoocyksMTQ1KTtzLmE8cy5jLmMubGVuZ3RoOyluPXUoSihzKSwxNDUpLGptdChyLmUuYyxuLmUuYykmJiEoQzN0KENXdChyLmUpLmIsbi5lLmQpfHxDM3QoQ1d0KG4uZSkuYixyLmUuZCkpP3I9KEFzKHIuayxuLmspLEFzKHIuYixuLmIpLEFzKHIuYyxuLmMpLFVhKHIuaSxuLmkpLEFzKHIuZCxuLmQpLEFzKHIuaixuLmopLG89Yi5NYXRoLm1pbihyLmUuYyxuLmUuYyksaD1iLk1hdGgubWluKHIuZS5kLG4uZS5kKSxkPWIuTWF0aC5tYXgoci5lLmMrci5lLmIsbi5lLmMrbi5lLmIpLHc9ZC1vLGs9Yi5NYXRoLm1heChyLmUuZCtyLmUuYSxuLmUuZCtuLmUuYSksQz1rLWgsUkt0KHIuZSxvLGgsdyxDKSxzaW4oci5mLG4uZiksIXIuYSYmKHIuYT1uLmEpLEFzKHIuZyxuLmcpLHVlKHIuZyxuKSxyKToodGxlKHQscikscj1uKTt0bGUodCxyKX19ZnVuY3Rpb24gVnluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztpZihkPXQuaixkPT0oYmUoKSxabykmJmUhPShvYSgpLEgxKSYmZSE9KG9hKCkseWIpJiYoZD1LdWUodCxuKSxGcyh0LGQpLCEodC5xP3QucToodm4oKSx2bigpLGEwKSkuX2IoKFRlKCksenkpKSYmZCE9Wm8mJih0Lm4uYSE9MHx8dC5uLmIhPTApJiZKdCh0LHp5LHUxbih0LGQpKSksZT09KG9hKCksaDApKXtzd2l0Y2goaz0wLGQuZyl7Y2FzZSAxOmNhc2UgMzpvPXQuaS5vLmEsbz4wJiYoaz10Lm4uYS9vKTticmVhaztjYXNlIDI6Y2FzZSA0OnM9dC5pLm8uYixzPjAmJihrPXQubi5iL3MpfUp0KHQsKHNlKCksRHcpLGspfWlmKHc9dC5vLGg9dC5hLHIpaC5hPXIuYSxoLmI9ci5iLHQuZD0hMDtlbHNlIGlmKGUhPUgxJiZlIT15YiYmZCE9Wm8pc3dpdGNoKGQuZyl7Y2FzZSAxOmguYT13LmEvMjticmVhaztjYXNlIDI6aC5hPXcuYSxoLmI9dy5iLzI7YnJlYWs7Y2FzZSAzOmguYT13LmEvMixoLmI9dy5iO2JyZWFrO2Nhc2UgNDpoLmI9dy5iLzJ9ZWxzZSBoLmE9dy5hLzIsaC5iPXcuYi8yfWZ1bmN0aW9uIENfKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2lmKHQuZWooKSlpZihDPXQuVmkoKSx3PXQuZmooKSxDPjApaWYoZT1uZXcgb3l0KHQuR2koKSksbj1DLG89bjwxMDA/bnVsbDpuZXcgU3Aobiksak0odCxuLGUuZykscz1uPT0xP3QuWmkoNCxTdChlLDApLG51bGwsMCx3KTp0LlppKDYsZSxudWxsLC0xLHcpLHQuYmooKSl7Zm9yKHI9bmV3IGVyKGUpO3IuZSE9ci5pLmdjKCk7KW89dC5kaihkcihyKSxvKTtvPyhvLkVpKHMpLG8uRmkoKSk6dC4kaShzKX1lbHNlIG8/KG8uRWkocyksby5GaSgpKTp0LiRpKHMpO2Vsc2Ugak0odCx0LlZpKCksdC5XaSgpKSx0LiRpKHQuWmkoNiwodm4oKSxpbyksbnVsbCwtMSx3KSk7ZWxzZSBpZih0LmJqKCkpaWYoQz10LlZpKCksQz4wKXtmb3IoZD10LldpKCksaz1DLGpNKHQsQyxkKSxvPWs8MTAwP251bGw6bmV3IFNwKGspLHI9MDtyPGs7KytyKWg9ZFtyXSxvPXQuZGooaCxvKTtvJiZvLkZpKCl9ZWxzZSBqTSh0LHQuVmkoKSx0LldpKCkpO2Vsc2Ugak0odCx0LlZpKCksdC5XaSgpKX1mdW5jdGlvbiBVeW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMjMzKSxvLmU9bnVsbCxvLmM9MDtmb3Iodz1udWxsLGg9bmV3IFMoZSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMjMzKSxNPW8uZFswXSwhKG4mJk0uayE9KEduKCksRHMpKSl7Zm9yKEg9dShRKE0sKHNlKCksSTYpKSwxNSkuS2MoKTtILk9iKCk7KUY9dShILlBiKCksMTApLCghbnx8Ri5rPT0oR24oKSxEcykpJiYoKCFvLmUmJihvLmU9bmV3IGxlKSxvLmUpLkZjKHQuYltGLmMucF1bRi5wXSksKyt0LmJbRi5jLnBdW0YucF0uYyk7aWYoIW4mJk0uaz09KEduKCksRHMpKXtpZih3KWZvcihDPXUoQWkodC5kLHcpLDIxKS5LYygpO0MuT2IoKTspZm9yKGs9dShDLlBiKCksMTApLHM9dShBaSh0LmQsTSksMjEpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxpdG4odC5iW2suYy5wXVtrLnBdKS5GYyh0LmJbci5jLnBdW3IucF0pLCsrdC5iW3IuYy5wXVtyLnBdLmM7dz1NfX19ZnVuY3Rpb24gV3luKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihuPTAsQz1uZXcgbGUsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyl7c3dpdGNoKGg9dShKKGQpLDExKSxCeXQodC5iLHQuZFtoLnBdKSxDLmM9UHQoWG4sSWUsMSwwLDUsMSksaC5pLmsuZyl7Y2FzZSAwOnI9dShRKGgsKHNlKCksWnUpKSwxMCksbXUoci5qLG5ldyBtJHQoQykpO2JyZWFrO2Nhc2UgMTp2WGUobWl0KFJpKG5ldyBUbihudWxsLG5ldyBfbihoLmkuaiwxNikpLG5ldyB5JHQoaCkpKSxuZXcgeCR0KEMpKTticmVhaztjYXNlIDM6cz11KFEoaCwoc2UoKSxfaSkpLDExKSx1ZShDLG5ldyBsYShzLGRlKGguZS5jLmxlbmd0aCtoLmcuYy5sZW5ndGgpKSl9Zm9yKGs9bmV3IFMoQyk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksNDYpLG89dWJ0KHQsdSh3LmEsMTEpKSxvPnQuZFtoLnBdJiYobis9c210KHQuYixvKSp1KHcuYiwxOSkuYSxxcCh0LmEsZGUobykpKTtmb3IoOyFOOSh0LmEpOylGbXQodC5iLHUoRngodC5hKSwxOSkuYSl9cmV0dXJuIG59ZnVuY3Rpb24gS3luKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3IoTT1uZXcgeW8odShxZSh0LChlcSgpLF9TdCkpLDgpKSxNLmE9Yi5NYXRoLm1heChNLmEtbi5iLW4uYywwKSxNLmI9Yi5NYXRoLm1heChNLmItbi5kLW4uYSwwKSxzPXllKHFlKHQsRVN0KSksKHM9PW51bGx8fChPbihzKSxzPD0wKSkmJihzPTEuMyksZD1uZXcgbGUsVj1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtWLmUhPVYuaS5nYygpOylIPXUoZHIoViksMzMpLGg9bmV3IGZXdChIKSxkLmNbZC5jLmxlbmd0aF09aDtzd2l0Y2goRj11KHFlKHQsSmh0KSwzMTEpLEYuZyl7Y2FzZSAzOnR0PWJtbihkLGUsTS5hLE0uYiwoaz1yLE9uKHMpLGspKTticmVhaztjYXNlIDE6dHQ9cW1uKGQsZSxNLmEsTS5iLChDPXIsT24ocyksQykpO2JyZWFrO2RlZmF1bHQ6dHQ9UXluKGQsZSxNLmEsTS5iLCh3PXIsT24ocyksdykpfW89bmV3IFUkKHR0KSxZPU1hdChvLGUsbixNLmEsTS5iLHIsKE9uKHMpLHMpKSxndyh0LFkuYSxZLmIsITEsITApfWZ1bmN0aW9uIFl5bih0LGUpe3ZhciBuLHIscyxvO249ZS5iLG89bmV3IFB1KG4uaikscz0wLHI9bi5qLHIuYz1QdChYbixJZSwxLDAsNSwxKSxCdih1KG8yKHQuYiwoYmUoKSxObiksKEp2KCksQXcpKSwxNSksbikscz1RSShvLHMsbmV3IEFYLHIpLEJ2KHUobzIodC5iLE5uLGhiKSwxNSksbikscz1RSShvLHMsbmV3IHpULHIpLEJ2KHUobzIodC5iLE5uLFN3KSwxNSksbiksQnYodShvMih0LmIsSG4sQXcpLDE1KSxuKSxCdih1KG8yKHQuYixIbixoYiksMTUpLG4pLHM9UUkobyxzLG5ldyBFRixyKSxCdih1KG8yKHQuYixIbixTdyksMTUpLG4pLEJ2KHUobzIodC5iLG1yLEF3KSwxNSksbikscz1RSShvLHMsbmV3IFRGLHIpLEJ2KHUobzIodC5iLG1yLGhiKSwxNSksbikscz1RSShvLHMsbmV3IENGLHIpLEJ2KHUobzIodC5iLG1yLFN3KSwxNSksbiksQnYodShvMih0LmIsQm4sQXcpLDE1KSxuKSxzPVFJKG8scyxuZXcgSVgsciksQnYodShvMih0LmIsQm4saGIpLDE1KSxuKSxCdih1KG8yKHQuYixCbixTdyksMTUpLG4pfWZ1bmN0aW9uIFh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKHdyKGUsIkxheWVyIHNpemUgY2FsY3VsYXRpb24iLDEpLEM9c3Msaz1UcyxzPSExLGQ9bmV3IFModC5iKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwyOSksdz1oLmMsdy5hPTAsdy5iPTAsaC5hLmMubGVuZ3RoIT0wKXtmb3Iocz0hMCxGPW5ldyBTKGguYSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTApLFY9TS5vLEg9TS5kLHcuYT1iLk1hdGgubWF4KHcuYSxWLmErSC5iK0guYyk7cj11KEZlKGguYSwwKSwxMCksWT1yLm4uYi1yLmQuZCxyLms9PShHbigpLHhzKSYmKFktPXUoUSh0LChUZSgpLExPKSksMTQyKS5kKSxvPXUoRmUoaC5hLGguYS5jLmxlbmd0aC0xKSwxMCksbj1vLm4uYitvLm8uYitvLmQuYSxvLms9PXhzJiYobis9dShRKHQsKFRlKCksTE8pKSwxNDIpLmEpLHcuYj1uLVksQz1iLk1hdGgubWluKEMsWSksaz1iLk1hdGgubWF4KGssbil9c3x8KEM9MCxrPTApLHQuZi5iPWstQyx0LmMuYi09QyxvcihlKX1mdW5jdGlvbiBmeHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2ZvcihvPTAsaD0wLGs9bmV3IFModC5hKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoSihrKSwxMCksbz1iLk1hdGgubWF4KG8sZC5kLmIpLGg9Yi5NYXRoLm1heChoLGQuZC5jKTtmb3Iodz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KXtzd2l0Y2goZD11KEoodyksMTApLG49dShRKGQsKFRlKCksTGQpKSwyNDgpLG4uZyl7Y2FzZSAxOlY9MDticmVhaztjYXNlIDI6Vj0xO2JyZWFrO2Nhc2UgNTpWPS41O2JyZWFrO2RlZmF1bHQ6Zm9yKHI9MCxNPTAsSD1uZXcgUyhkLmopO0guYTxILmMuYy5sZW5ndGg7KUY9dShKKEgpLDExKSxGLmUuYy5sZW5ndGg9PTB8fCsrcixGLmcuYy5sZW5ndGg9PTB8fCsrTTtyK009PTA/Vj0uNTpWPU0vKHIrTSl9dHQ9dC5jLEM9ZC5vLmEsZ3Q9KHR0LmEtQykqVixWPi41P2d0LT1oKjIqKFYtLjUpOlY8LjUmJihndCs9byoyKiguNS1WKSkscz1kLmQuYixndDxzJiYoZ3Q9cyksWT1kLmQuYyxndD50dC5hLVktQyYmKGd0PXR0LmEtWS1DKSxkLm4uYT1lK2d0fX1mdW5jdGlvbiBReW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihkPVB0KGlhLHZvLDI1LHQuYy5sZW5ndGgsMTUsMSksRj1uZXcgVmoobmV3IEtGKSxLM3QoRix0KSxrPTAsWT1uZXcgbGU7Ri5iLmMubGVuZ3RoIT0wOylpZihoPXUoRi5iLmMubGVuZ3RoPT0wP251bGw6RmUoRi5iLDApLDE1Nyksaz4xJiZGdShoKSp4bChoKS8yPmRbMF0pe2ZvcihvPTA7bzxZLmMubGVuZ3RoLTEmJkZ1KGgpKnhsKGgpLzI+ZFtvXTspKytvO1Y9bmV3IEtkKFksMCxvKzEpLE09bmV3IFUkKFYpLEM9RnUoaCkveGwoaCksdz1NYXQoTSxlLG5ldyB3eCxuLHIscyxDKSxMaShHZihNLmUpLHcpLE04KGRFKEYsTSkpLEg9bmV3IEtkKFksbysxLFkuYy5sZW5ndGgpLEszdChGLEgpLFkuYz1QdChYbixJZSwxLDAsNSwxKSxrPTAsaFl0KGQsZC5sZW5ndGgsMCl9ZWxzZSB0dD1GLmIuYy5sZW5ndGg9PTA/bnVsbDpGZShGLmIsMCksdHQhPW51bGwmJm9pdChGLDApLGs+MCYmKGRba109ZFtrLTFdKSxkW2tdKz1GdShoKSp4bChoKSwrK2ssWS5jW1kuYy5sZW5ndGhdPWg7cmV0dXJuIFl9ZnVuY3Rpb24gWnluKHQpe3ZhciBlLG4scixzLG87aWYocj11KFEodCwoVGUoKSxjdSkpLDE2Mykscj09KGhoKCksZmIpKXtmb3Iobj1uZXcgYXIobHIoam8odCkuYS5LYygpLG5ldyB6KSk7enIobik7KWlmKGU9dShMcihuKSwxNyksIWtKdChlKSl0aHJvdyBydChuZXcgRjMoUm90K1pJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UuIEZJUlNUX1NFUEFSQVRFIG5vZGVzIG11c3Qgbm90IGhhdmUgaW5jb21pbmcgZWRnZXMuIikpfWVsc2UgaWYocj09Rnkpe2ZvcihvPW5ldyBhcihscihNcyh0KS5hLktjKCksbmV3IHopKTt6cihvKTspaWYocz11KExyKG8pLDE3KSwha0p0KHMpKXRocm93IHJ0KG5ldyBGMyhSb3QrWkkodCkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBMQVNUX1NFUEFSQVRFLCBidXQgaGFzIGF0IGxlYXN0IG9uZSBvdXRnb2luZyBlZGdlLiBMQVNUX1NFUEFSQVRFIG5vZGVzIG11c3Qgbm90IGhhdmUgb3V0Z29pbmcgZWRnZXMuIikpfX1mdW5jdGlvbiBKeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3Iod3IoZSwiTGFiZWwgZHVtbXkgcmVtb3ZhbCIsMSkscj1YdCh5ZShRKHQsKFRlKCksQjYpKSkpLHM9WHQoeWUoUSh0LEd5KSkpLGs9dShRKHQsVmwpLDEwMyksdz1uZXcgUyh0LmIpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSwyOSksTT1uZXcgaGEoZC5hLDApO00uYjxNLmQuZ2MoKTspQz0oUW4oTS5iPE0uZC5nYygpKSx1KE0uZC5YYihNLmM9TS5iKyspLDEwKSksQy5rPT0oR24oKSxTbCkmJihGPXUoUShDLChzZSgpLF9pKSksMTcpLFY9WHQoeWUoUShGLFVnKSkpLGg9R3QoUShDLEQ2KSk9PT1HdCgoamwoKSx3YikpLG49bmV3IHlvKEMubiksaCYmKG4uYis9VityKSxvPW5ldyAkZShDLm8uYSxDLm8uYi1WLXIpLEg9dShRKEMsVE8pLDE1KSxrPT0oYW8oKSxaMCl8fGs9PVEwP052bihILG4scyxvLGgsayk6cHVuKEgsbixzLG8pLEFzKEYuYixIKSxfYXQoQyxHdChRKHQsWDApKT09PUd0KChxMCgpLFhPKSkpLEVsKE0pKTtvcihlKX1mdW5jdGlvbiB0M24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0O2Zvcih3PW5ldyBsZSxvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxkPW5ldyBTKHMuaik7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwxMSksQz1udWxsLF90PWdkKGguZyksQnQ9MCxZdD1fdC5sZW5ndGg7QnQ8WXQ7KytCdClMdD1fdFtCdF0sVjgoTHQuZC5pLG4pfHwoZ3Q9RWF0KHQsZSxuLEx0LEx0LmMsKHNvKCksZXUpLEMpLGd0IT1DJiYody5jW3cuYy5sZW5ndGhdPWd0KSxndC5jJiYoQz1ndCkpO2ZvcihrPW51bGwsVj1nZChoLmUpLFk9MCx0dD1WLmxlbmd0aDtZPHR0OysrWSlIPVZbWV0sVjgoSC5jLmksbil8fChndD1FYXQodCxlLG4sSCxILmQsKHNvKCksSnUpLGspLGd0IT1rJiYody5jW3cuYy5sZW5ndGhdPWd0KSxndC5jJiYoaz1ndCkpfWZvcihGPW5ldyBTKHcpO0YuYTxGLmMuYy5sZW5ndGg7KU09dShKKEYpLDQ0MSksUm8oZS5hLE0uYSwwKSE9LTF8fHVlKGUuYSxNLmEpLE0uYyYmKHIuY1tyLmMubGVuZ3RoXT1NKX1mdW5jdGlvbiBlM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2Zvcih3cihuLCJJbnRlcmFjdGl2ZSBjeWNsZSBicmVha2luZyIsMSksTT1uZXcgbGUsSD1uZXcgUyhlLmEpO0guYTxILmMuYy5sZW5ndGg7KWZvcihGPXUoSihIKSwxMCksRi5wPTEsVj11NHQoRikuYSxDPWl3KEYsKHNvKCksZXUpKS5LYygpO0MuT2IoKTspZm9yKGs9dShDLlBiKCksMTEpLG89bmV3IFMoay5nKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxNyksWT1yLmQuaSxZIT1GJiYodHQ9dTR0KFkpLmEsdHQ8ViYmKE0uY1tNLmMubGVuZ3RoXT1yKSk7Zm9yKGg9bmV3IFMoTSk7aC5hPGguYy5jLmxlbmd0aDspcj11KEooaCksMTcpLGR3KHIsITApO2ZvcihNLmM9UHQoWG4sSWUsMSwwLDUsMSksdz1uZXcgUyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxkLnA+MCYmcWFlKHQsZCxNKTtmb3Iocz1uZXcgUyhNKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksZHcociwhMCk7TS5jPVB0KFhuLEllLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIEJsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztyZXR1cm4gaz0iIixlLmxlbmd0aD09MD90LmRlKE54dCxSYXQsLTEsLTEpOihDPXV5KGUpLGhuKEMuc3Vic3RyKDAsMyksImF0ICIpJiYoQz1DLnN1YnN0cigzKSksQz1DLnJlcGxhY2UoL1xbLio/XF0vZywiIiksaD1DLmluZGV4T2YoIigiKSxoPT0tMT8oaD1DLmluZGV4T2YoIkAiKSxoPT0tMT8oaz1DLEM9IiIpOihrPXV5KEMuc3Vic3RyKGgrMSkpLEM9dXkoQy5zdWJzdHIoMCxoKSkpKToobj1DLmluZGV4T2YoIikiLGgpLGs9Qy5zdWJzdHIoaCsxLG4tKGgrMSkpLEM9dXkoQy5zdWJzdHIoMCxoKSkpLGg9Y2QoQyxFdSg0NikpLGghPS0xJiYoQz1DLnN1YnN0cihoKzEpKSwoQy5sZW5ndGg9PTB8fGhuKEMsIkFub255bW91cyBmdW5jdGlvbiIpKSYmKEM9UmF0KSxkPWRqKGssRXUoNTgpKSxzPXV2dChrLEV1KDU4KSxkLTEpLHc9LTEscj0tMSxvPU54dCxkIT0tMSYmcyE9LTEmJihvPWsuc3Vic3RyKDAscyksdz1pV3Qoay5zdWJzdHIocysxLGQtKHMrMSkpKSxyPWlXdChrLnN1YnN0cihkKzEpKSksdC5kZShvLEMsdyxyKSl9ZnVuY3Rpb24gZHh0KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoZS5sPT0wJiZlLm09PTAmJmUuaD09MCl0aHJvdyBydChuZXcgcFIoImRpdmlkZSBieSB6ZXJvIikpO2lmKHQubD09MCYmdC5tPT0wJiZ0Lmg9PTApcmV0dXJuIG4mJihvYj1ydSgwLDAsMCkpLHJ1KDAsMCwwKTtpZihlLmg9PUlEJiZlLm09PTAmJmUubD09MClyZXR1cm4gYmxuKHQsbik7aWYodz0hMSxlLmg+PjE5JiYoZT1ZOChlKSx3PSF3KSxoPVpibihlKSxvPSExLHM9ITEscj0hMSx0Lmg9PUlEJiZ0Lm09PTAmJnQubD09MClpZihzPSEwLG89ITAsaD09LTEpdD1yVXQoKE44KCksWjh0KSkscj0hMCx3PSF3O2Vsc2UgcmV0dXJuIGQ9aDV0KHQsaCksdyYmdml0KGQpLG4mJihvYj1ydSgwLDAsMCkpLGQ7ZWxzZSB0Lmg+PjE5JiYobz0hMCx0PVk4KHQpLHI9ITAsdz0hdyk7cmV0dXJuIGghPS0xP2pjbih0LGgsdyxvLG4pOm40dCh0LGUpPDA/KG4mJihvP29iPVk4KHQpOm9iPXJ1KHQubCx0Lm0sdC5oKSkscnUoMCwwLDApKTpId24ocj90OnJ1KHQubCx0Lm0sdC5oKSxlLHcsbyxzLG4pfWZ1bmN0aW9uIFRxKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFY7aWYodC5lJiZ0LmMuYzx0LmYpdGhyb3cgcnQobmV3IEZvKCJFeHBlY3RlZCAiK3QuZisiIHBoYXNlcyB0byBiZSBjb25maWd1cmVkOyBvbmx5IGZvdW5kICIrdC5jLmMpKTtmb3IoQz11KEhmKHQuZyksOSksSD1IZCh0LmYpLG89QyxkPTAsaz1vLmxlbmd0aDtkPGs7KytkKXI9b1tkXSxNPXUod0kodCxyLmcpLDI0NiksTT91ZShILHUocmllKHQsTSksMTIzKSk6SC5jW0guYy5sZW5ndGhdPW51bGw7Zm9yKFY9bmV3IEhzLHVzKFJpKHB1KFJpKG5ldyBUbihudWxsLG5ldyBfbihILDE2KSksbmV3IHBaKSxuZXcgeiR0KGUpKSxuZXcgYlopLG5ldyBxJHQoVikpLFJsKFYsdC5hKSxuPW5ldyBsZSxzPUMsaD0wLHc9cy5sZW5ndGg7aDx3OysraClyPXNbaF0sQXMobixxbmUodCxzJCh1KHdJKFYsci5nKSwyMCkpKSksRj11KEZlKEgsci5nKSwxMjMpLEYmJihuLmNbbi5jLmxlbmd0aF09Rik7cmV0dXJuIEFzKG4scW5lKHQscyQodSh3SShWLENbQy5sZW5ndGgtMV0uZysxKSwyMCkpKSksbn1mdW5jdGlvbiBuM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2Zvcih3cihuLCJNb2RlbCBvcmRlciBjeWNsZSBicmVha2luZyIsMSksdC5hPTAsdC5iPTAsSD1uZXcgbGUsQz1lLmEuYy5sZW5ndGgsaz1uZXcgUyhlLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSxWcyh3LChzZSgpLFRjKSkmJihDPWIuTWF0aC5tYXgoQyx1KFEodyxUYyksMTkpLmErMSkpO2ZvcihZPW5ldyBTKGUuYSk7WS5hPFkuYy5jLmxlbmd0aDspZm9yKFY9dShKKFkpLDEwKSxoPVphZSh0LFYsQyksRj1pdyhWLChzbygpLGV1KSkuS2MoKTtGLk9iKCk7KWZvcihNPXUoRi5QYigpLDExKSxvPW5ldyBTKE0uZyk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTcpLHR0PXIuZC5pLGQ9WmFlKHQsdHQsQyksZDxoJiYoSC5jW0guYy5sZW5ndGhdPXIpO2ZvcihzPW5ldyBTKEgpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxkdyhyLCEwKSxKdChlLChzZSgpLHhPKSwoRm4oKSwhMCkpO0guYz1QdChYbixJZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiByM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZighKHQuZz5lLmZ8fGUuZz50LmYpKXtmb3Iobj0wLHI9MCxoPXQudy5hLmVjKCkuS2MoKTtoLk9iKCk7KXM9dShoLlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYixlLmcsZS5mKSYmKytuO2ZvcihkPXQuci5hLmVjKCkuS2MoKTtkLk9iKCk7KXM9dShkLlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYixlLmcsZS5mKSYmLS1uO2Zvcih3PWUudy5hLmVjKCkuS2MoKTt3Lk9iKCk7KXM9dSh3LlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYix0LmcsdC5mKSYmKytyO2ZvcihvPWUuci5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYix0LmcsdC5mKSYmLS1yO248cj9uZXcgUyQodCxlLHItbik6cjxuP25ldyBTJChlLHQsbi1yKToobmV3IFMkKGUsdCwwKSxuZXcgUyQodCxlLDApKX19ZnVuY3Rpb24gaTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdDtmb3Ioaz1lLmMscz1hMnQodC5lKSxNPXVkKEJNKG5jKHMydCh0LmUpKSx0LmQqdC5hLHQuYyp0LmIpLC0uNSksbj1zLmEtTS5hLHI9cy5iLU0uYixoPWUuYSxuPWguYy1uLHI9aC5kLXIsdz1uZXcgUyhrKTt3LmE8dy5jLmMubGVuZ3RoOyl7c3dpdGNoKGQ9dShKKHcpLDM5NSksRj1kLmIsSD1uK0YuYSx0dD1yK0YuYixWPXBzKEgvdC5hKSxndD1wcyh0dC90LmIpLG89ZC5hLG8uZyl7Y2FzZSAwOkM9KG42KCksY08pO2JyZWFrO2Nhc2UgMTpDPShuNigpLG9PKTticmVhaztjYXNlIDI6Qz0objYoKSx1Tyk7YnJlYWs7ZGVmYXVsdDpDPShuNigpLGxPKX1vLmE/KEx0PXBzKCh0dCtkLmMpL3QuYiksdWUodC5mLG5ldyB2dnQoQyxkZShndCksZGUoTHQpKSksbz09KHNfKCksZk8pP1g4KHQsMCxndCxWLEx0KTpYOCh0LFYsZ3QsdC5kLTEsTHQpKTooWT1wcygoSCtkLmMpL3QuYSksdWUodC5mLG5ldyB2dnQoQyxkZShWKSxkZShZKSkpLG89PShzXygpLGhPKT9YOCh0LFYsMCxZLGd0KTpYOCh0LFYsZ3QsWSx0LmMtMSkpfX1mdW5jdGlvbiBzM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2ZvcihGPW5ldyBsZSxzPW5ldyBsZSxZPW51bGwsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDE5KSxvPW5ldyBUcChoLmEpLHMuY1tzLmMubGVuZ3RoXT1vLFkmJihvLmQ9WSxZLmU9byksWT1vO2ZvcihfdD1EbW4odCksQz0wO0M8cy5jLmxlbmd0aDsrK0Mpe2ZvcihIPW51bGwsdHQ9d210KChBbigwLHMuYy5sZW5ndGgpLHUocy5jWzBdLDY1MikpKSxuPW51bGwscj1zcyxNPTE7TTx0LmIuYy5sZW5ndGg7KytNKWd0PXR0P2IuTWF0aC5hYnModHQuYi1NKTpiLk1hdGguYWJzKE0tSC5iKSsxLFY9SD9iLk1hdGguYWJzKE0tSC5iKTpndCsxLFY8Z3Q/KGs9SCx3PVYpOihrPXR0LHc9Z3QpLEx0PShCdD1YdCh5ZShRKHQsKFRlKCksd0N0KSkpKSxfdFtNXStiLk1hdGgucG93KHcsQnQpKSxMdDxyJiYocj1MdCxuPWssbi5jPU0pLHR0JiZNPT10dC5iJiYoSD10dCx0dD1yZW4odHQpKTtuJiYodWUoRixkZShuLmMpKSxuLmE9ITAsVXVuKG4pKX1yZXR1cm4gdm4oKSxMbnQoRi5jLEYuYy5sZW5ndGgsbnVsbCksRn1mdW5jdGlvbiBhM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEM7Zm9yKGU9bmV3IHFiLG49bmV3IHFiLGs9aG4oWkQsKHM9bV8odC5iLEtyKSxzP0JyKFlmKCghcy5iJiYocy5iPW5ldyB5bCgoZG4oKSxRYSksY2MscykpLHMuYiksTmgpKTpudWxsKSksdz0wO3c8dC5pOysrdylkPXUodC5nW3ddLDE3MCksRXQoZCw5OSk/KGg9dShkLDE4KSxoLkJiJmRjPyghKGguQmImYmQpfHwhayYmKG89bV8oaCxLciksKG8/QnIoWWYoKCFvLmImJihvLmI9bmV3IHlsKChkbigpLFFhKSxjYyxvKSksby5iKSxtSCkpOm51bGwpPT1udWxsKSkmJk1yKGUsaCk6KEM9bm8oaCksQyYmQy5CYiZkY3x8KCEoaC5CYiZiZCl8fCFrJiYocj1tXyhoLEtyKSwocj9CcihZZigoIXIuYiYmKHIuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHIpKSxyLmIpLG1IKSk6bnVsbCk9PW51bGwpKSYmTXIobixoKSkpOih0bygpLHUoZCw2NikuT2ooKSYmKGQuSmooKXx8KE1yKGUsZCksTXIobixkKSkpKTtleShlKSxleShuKSx0LmE9dShlLmcsMjQ3KSx1KG4uZywyNDcpfWZ1bmN0aW9uIG8zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7Zm9yKGs9VjBuKGUpLFk9dShRKGUsKFRlKCksRVMpKSwzMTQpLFkhPShZeCgpLFM2KSYmdmEoayxuZXcgZWQpLHR0PXUoUShlLF9PKSwyOTIpLHZhKGssbmV3IGhpKHR0KSksVj0wLEM9bmV3IGxlLG89bmV3IE1DKGspO28uYSE9by5iOylzPXUobXoobyksMzcpLFhsZSh0LmMscyksRj11KFEocywoc2UoKSxSbHQpKSwxNSksVis9Ri5nYygpLHI9Ri5LYygpLHVlKEMsbmV3IGxhKHMscikpO2Zvcih3cihuLCJSZWN1cnNpdmUgaGllcmFyY2hpY2FsIGxheW91dCIsViksSD11KHUoRmUoQyxDLmMubGVuZ3RoLTEpLDQ2KS5iLDQ3KTtILk9iKCk7KWZvcih3PW5ldyBTKEMpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSw0NiksRj11KGQuYiw0NyksaD11KGQuYSwzNyk7Ri5PYigpOylpZihNPXUoRi5QYigpLDUxKSxFdChNLDUwNykpe2lmKGguZSlicmVhaztNLnBmKGgsUmMobiwxKSk7YnJlYWt9ZWxzZSBNLnBmKGgsUmMobiwxKSk7b3Iobil9ZnVuY3Rpb24gUmxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07aWYodz1lLmxlbmd0aC0xLGQ9KFJyKHcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh3KSksZD09OTMpe2lmKGg9Y2QoZSxFdSg5MSkpLGg+PTApcmV0dXJuIHM9Y2xuKHQsZS5zdWJzdHIoMSxoLTEpKSxDPWUuc3Vic3RyKGgrMSx3LShoKzEpKSxyNW4odCxDLHMpfWVsc2V7aWYobj0tMSxyRXQ9PW51bGwmJihyRXQ9bmV3IFJlZ0V4cCgiXFxkIikpLHJFdC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZCkpJiYobj11dnQoZSxFdSg0Niksdy0xKSxuPj0wKSl7cj11KFBydCh0LGdlZSh0LGUuc3Vic3RyKDEsbi0xKSksITEpLDU4KSxrPTA7dHJ5e2s9JGwoZS5zdWJzdHIobisxKSxfYSx2aSl9Y2F0Y2goRil7dGhyb3cgRj1XaShGKSxFdChGLDEyNyk/KG89RixydChuZXcgRiQobykpKTpydChGKX1pZihrPHIuZ2MoKSlyZXR1cm4gTT1yLlhiKGspLEV0KE0sNzIpJiYoTT11KE0sNzIpLmRkKCkpLHUoTSw1Nil9aWYobjwwKXJldHVybiB1KFBydCh0LGdlZSh0LGUuc3Vic3RyKDEpKSwhMSksNTYpfXJldHVybiBudWxsfWZ1bmN0aW9uIEU0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07aWYoVmkoZSxuKT49MClyZXR1cm4gbjtzd2l0Y2goJHYoRW8odCxuKSkpe2Nhc2UgMjp7aWYoaG4oIiIsT2codCxuLkhqKCkpLm5lKCkpKXtpZih3PVpNKEVvKHQsbikpLGQ9azgoRW8odCxuKSksQz13NXQodCxlLHcsZCksQylyZXR1cm4gQztmb3Iocz1WNXQodCxlKSxoPTAsTT1zLmdjKCk7aDxNOysraClpZihDPXUocy5YYihoKSwxNzApLF81dChqbnQoRW8odCxDKSksdykpcmV0dXJuIEN9cmV0dXJuIG51bGx9Y2FzZSA0OntpZihobigiIixPZyh0LG4uSGooKSkubmUoKSkpe2ZvcihyPW47cjtyPWlpbihFbyh0LHIpKSlpZihrPVpNKEVvKHQscikpLGQ9azgoRW8odCxyKSksQz1tNXQodCxlLGssZCksQylyZXR1cm4gQztpZih3PVpNKEVvKHQsbikpLGhuKEwyLHcpKXJldHVybiBhNHQodCxlKTtmb3Iobz1vYXQodCxlKSxoPTAsTT1vLmdjKCk7aDxNOysraClpZihDPXUoby5YYihoKSwxNzApLF81dChqbnQoRW8odCxDKSksdykpcmV0dXJuIEN9cmV0dXJuIG51bGx9ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKG4uZ2MoKT09MClyZXR1cm4hMTtpZihkPSh0bygpLHUoZSw2NikuT2ooKSksbz1kP246bmV3IEt2KG4uZ2MoKSksVjAodC5lLGUpKXtpZihlLmhpKCkpZm9yKGs9bi5LYygpO2suT2IoKTspdz1rLlBiKCksbXEodCxlLHcsRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl8fChzPVlkKGUsdyksby5IYyhzKXx8by5GYyhzKSk7ZWxzZSBpZighZClmb3Ioaz1uLktjKCk7ay5PYigpOyl3PWsuUGIoKSxzPVlkKGUsdyksby5GYyhzKX1lbHNle2lmKG4uZ2MoKT4xKXRocm93IHJ0KG5ldyBQbihlTykpO2ZvcihDPWF1KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKHM9cltoXSxDLnJsKHMuYWsoKSkpe2lmKG4uSGMoZD9zOnMuZGQoKSkpcmV0dXJuITE7Zm9yKGs9bi5LYygpO2suT2IoKTspdz1rLlBiKCksdSh1NCh0LGgsZD91KHcsNzIpOllkKGUsdykpLDcyKTtyZXR1cm4hMH1kfHwocz1ZZChlLG4uS2MoKS5QYigpKSxvLkZjKHMpKX1yZXR1cm4gcnModCxvKX1mdW5jdGlvbiB1M24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7Zm9yKEM9bmV3IFFpLGQ9KGs9bmV3IGIxKHQuYykuYS52YygpLktjKCksbmV3IHYxKGspKTtkLmEuT2IoKTspbz0ocz11KGQuYS5QYigpLDQyKSx1KHMuZGQoKSw0NTgpKSxvLmI9PTAmJmhzKEMsbyxDLmMuYixDLmMpO2Zvcig7Qy5iIT0wOylmb3Iobz11KEMuYj09MD9udWxsOihRbihDLmIhPTApLGNoKEMsQy5hLmEpKSw0NTgpLG8uYT09bnVsbCYmKG8uYT0wKSxyPW5ldyBTKG8uZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNjU0KSxuLmIuYT09bnVsbD9uLmIuYT1YdChvLmEpK24uYTplLm89PShFMSgpLGoyKT9uLmIuYT1iLk1hdGgubWluKFh0KG4uYi5hKSxYdChvLmEpK24uYSk6bi5iLmE9Yi5NYXRoLm1heChYdChuLmIuYSksWHQoby5hKStuLmEpLC0tbi5iLmIsbi5iLmI9PTAmJm5pKEMsbi5iKTtmb3IoaD0odz1uZXcgYjEodC5jKS5hLnZjKCkuS2MoKSxuZXcgdjEodykpO2guYS5PYigpOylvPShzPXUoaC5hLlBiKCksNDIpLHUocy5kZCgpLDQ1OCkpLGUuaVtvLmMucF09by5hfWZ1bmN0aW9uIGZjKCl7ZmM9WixqUz1uZXcgR2kobDZ0KSxuZXcgT3MoIkRFUFRIIixkZSgwKSksbVY9bmV3IE9zKCJGQU4iLGRlKDApKSxabWU9bmV3IE9zKEkxZSxkZSgwKSksV3k9bmV3IE9zKCJST09UIiwoRm4oKSwhMSkpLFNodD1uZXcgT3MoIkxFRlRORUlHSEJPUiIsbnVsbCksSm1lPW5ldyBPcygiUklHSFRORUlHSEJPUiIsbnVsbCkseVY9bmV3IE9zKCJMRUZUU0lCTElORyIsbnVsbCksQWh0PW5ldyBPcygiUklHSFRTSUJMSU5HIixudWxsKSxfaHQ9bmV3IE9zKCJEVU1NWSIsITEpLG5ldyBPcygiTEVWRUwiLGRlKDApKSxKQ3Q9bmV3IE9zKCJSRU1PVkFCTEVfRURHRVMiLG5ldyBRaSksTGh0PW5ldyBPcygiWENPT1IiLGRlKDApKSx0X3Q9bmV3IE9zKCJZQ09PUiIsZGUoMCkpLHhWPW5ldyBPcygiTEVWRUxIRUlHSFQiLDApLFJTPW5ldyBPcygiSUQiLCIiKSxrVj1uZXcgT3MoIlBPU0lUSU9OIixkZSgwKSksWWc9bmV3IE9zKCJQUkVMSU0iLDApLGs3PW5ldyBPcygiTU9ESUZJRVIiLDApLEJTPW5ldyBHaShxZmUpLEZPPW5ldyBHaShIZmUpfWZ1bmN0aW9uIGwzbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihDPW4rZS5jLmMuYSxIPW5ldyBTKGUuaik7SC5hPEguYy5jLmxlbmd0aDspe2lmKEY9dShKKEgpLDExKSxzPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbRi5pLm4sRi5uLEYuYV0pKSxlLms9PShHbigpLEhjKSYmKGQ9dShRKEYsKHNlKCksX2kpKSwxMSkscy5hPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbZC5pLm4sZC5uLGQuYV0pKS5hLGUubi5hPXMuYSksaD1uZXcgJGUoMCxzLmIpLEYuaj09KGJlKCksSG4pKWguYT1DO2Vsc2UgaWYoRi5qPT1CbiloLmE9bjtlbHNlIGNvbnRpbnVlO2lmKFY9Yi5NYXRoLmFicyhzLmEtaC5hKSwhKFY8PXImJiFnMW4oZSkpKWZvcihvPUYuZy5jLmxlbmd0aCtGLmUuYy5sZW5ndGg+MSxrPW5ldyBTMShGLmIpO1ZvKGsuYSl8fFZvKGsuYik7KXc9dShWbyhrLmEpP0ooay5hKTpKKGsuYiksMTcpLE09dy5jPT1GP3cuZDp3LmMsYi5NYXRoLmFicyhLbyhjdChvdChVcywxKSx0ZSw4LDAsW00uaS5uLE0ubixNLmFdKSkuYi1oLmIpPjEmJm52bih0LHcsaCxvLEYpfX1mdW5jdGlvbiBoM24odCl7dmFyIGUsbixyLHMsbyxoO2lmKHM9bmV3IGhhKHQuZSwwKSxyPW5ldyBoYSh0LmEsMCksdC5kKWZvcihuPTA7bjx0LmI7bisrKVFuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKyk7ZWxzZSBmb3Iobj0wO248dC5iLTE7bisrKVFuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKyksRWwocyk7Zm9yKGU9WHQoKFFuKHMuYjxzLmQuZ2MoKSkseWUocy5kLlhiKHMuYz1zLmIrKykpKSk7dC5mLWU+d2N0Oyl7Zm9yKG89ZSxoPTA7Yi5NYXRoLmFicyhlLW8pPHdjdDspKytoLGU9WHQoKFFuKHMuYjxzLmQuZ2MoKSkseWUocy5kLlhiKHMuYz1zLmIrKykpKSksUW4oci5iPHIuZC5nYygpKSxyLmQuWGIoci5jPXIuYisrKTtoPHQuYiYmKFFuKHMuYj4wKSxzLmEuWGIocy5jPS0tcy5iKSxBbW4odCx0LmItaCxvLHIscyksUW4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSksUW4oci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfWlmKCF0LmQpZm9yKG49MDtuPHQuYi0xO24rKylRbihzLmI8cy5kLmdjKCkpLHMuZC5YYihzLmM9cy5iKyspLEVsKHMpO3QuZD0hMCx0LmM9ITB9ZnVuY3Rpb24gRGkoKXtEaT1aLGJMdD0oc2J0KCkscGMpLmIsZzVlPXUoU3QoV3QocGMuYiksMCksMzQpLFUyPXUoU3QoV3QocGMuYiksMSksMzQpLGQ1ZT11KFN0KFd0KHBjLmIpLDIpLDM0KSx1NT1wYy5iYix1KFN0KFd0KHBjLmJiKSwwKSwzNCksdShTdChXdChwYy5iYiksMSksMzQpLGw1PXBjLmZiLG9BPXUoU3QoV3QocGMuZmIpLDApLDM0KSx1KFN0KFd0KHBjLmZiKSwxKSwzNCksdShTdChXdChwYy5mYiksMiksMTgpLEd3PXBjLnFiLF81ZT11KFN0KFd0KHBjLnFiKSwwKSwzNCksdShTdChXdChwYy5xYiksMSksMTgpLHUoU3QoV3QocGMucWIpLDIpLDE4KSxnTj11KFN0KFd0KHBjLnFiKSwzKSwzNCkscE49dShTdChXdChwYy5xYiksNCksMzQpLHVBPXUoU3QoV3QocGMucWIpLDYpLDM0KSxjQT11KFN0KFd0KHBjLnFiKSw1KSwxOCkscDVlPXBjLmosYjVlPXBjLmssdjVlPXBjLnEsdzVlPXBjLncsbTVlPXBjLkIseTVlPXBjLkEseDVlPXBjLkMsazVlPXBjLkQsRTVlPXBjLl8sVDVlPXBjLmNiLEM1ZT1wYy5oYn1mdW5jdGlvbiBmM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEg7dC5jPTAsdC5iPTAscj0yKmUuYy5hLmMubGVuZ3RoKzE7dDpmb3IoTT1uLktjKCk7TS5PYigpOyl7aWYoQz11KE0uUGIoKSwxMSksZD1DLmo9PShiZSgpLE5uKXx8Qy5qPT1tcixIPTAsZCl7aWYoRj11KFEoQywoc2UoKSxadSkpLDEwKSwhRiljb250aW51ZTtIKz1Hdm4odCxyLEMsRil9ZWxzZXtmb3Ioaz1uZXcgUyhDLmcpO2suYTxrLmMuYy5sZW5ndGg7KWlmKHc9dShKKGspLDE3KSxzPXcuZCxzLmkuYz09ZS5jKXt1ZSh0LmEsQyk7Y29udGludWUgdH1lbHNlIEgrPXQuZ1tzLnBdO2ZvcihoPW5ldyBTKEMuZSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTcpLHM9by5jLHMuaS5jPT1lLmMpe3VlKHQuYSxDKTtjb250aW51ZSB0fWVsc2UgSC09dC5nW3MucF19Qy5lLmMubGVuZ3RoK0MuZy5jLmxlbmd0aD4wPyh0LmZbQy5wXT1ILyhDLmUuYy5sZW5ndGgrQy5nLmMubGVuZ3RoKSx0LmM9Yi5NYXRoLm1pbih0LmMsdC5mW0MucF0pLHQuYj1iLk1hdGgubWF4KHQuYix0LmZbQy5wXSkpOmQmJih0LmZbQy5wXT1IKX19ZnVuY3Rpb24gZDNuKHQpe3QuYj1udWxsLHQuYmI9bnVsbCx0LmZiPW51bGwsdC5xYj1udWxsLHQuYT1udWxsLHQuYz1udWxsLHQuZD1udWxsLHQuZT1udWxsLHQuZj1udWxsLHQubj1udWxsLHQuTT1udWxsLHQuTD1udWxsLHQuUT1udWxsLHQuUj1udWxsLHQuSz1udWxsLHQuZGI9bnVsbCx0LmViPW51bGwsdC5nPW51bGwsdC5pPW51bGwsdC5qPW51bGwsdC5rPW51bGwsdC5nYj1udWxsLHQubz1udWxsLHQucD1udWxsLHQucT1udWxsLHQucj1udWxsLHQuJD1udWxsLHQuaWI9bnVsbCx0LlM9bnVsbCx0LlQ9bnVsbCx0LnQ9bnVsbCx0LnM9bnVsbCx0LnU9bnVsbCx0LnY9bnVsbCx0Lnc9bnVsbCx0LkI9bnVsbCx0LkE9bnVsbCx0LkM9bnVsbCx0LkQ9bnVsbCx0LkY9bnVsbCx0Lkc9bnVsbCx0Lkg9bnVsbCx0Lkk9bnVsbCx0Lko9bnVsbCx0LlA9bnVsbCx0Llo9bnVsbCx0LlU9bnVsbCx0LlY9bnVsbCx0Llc9bnVsbCx0Llg9bnVsbCx0Llk9bnVsbCx0Ll89bnVsbCx0LmFiPW51bGwsdC5jYj1udWxsLHQuaGI9bnVsbCx0Lm5iPW51bGwsdC5sYj1udWxsLHQubWI9bnVsbCx0Lm9iPW51bGwsdC5wYj1udWxsLHQuamI9bnVsbCx0LmtiPW51bGwsdC5OPSExLHQuTz0hMX1mdW5jdGlvbiBnM24odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih3cihuLCJHcmFwaCB0cmFuc2Zvcm1hdGlvbiAoIit0LmErIikiLDEpLGg9R3YoZS5hKSxvPW5ldyBTKGUuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjkpLEFzKGgscy5hKTtpZihyPXUoUShlLChUZSgpLGo5dCkpLDQxOSkscj09KFRJKCksTkcpKXN3aXRjaCh1KFEoZSxWbCksMTAzKS5nKXtjYXNlIDI6TkMoZSxoKTticmVhaztjYXNlIDM6bl8oZSxoKTticmVhaztjYXNlIDQ6dC5hPT0ocTgoKSxwTyk/KG5fKGUsaCksQ3J0KGUsaCkpOihDcnQoZSxoKSxuXyhlLGgpKX1lbHNlIGlmKHQuYT09KHE4KCkscE8pKXN3aXRjaCh1KFEoZSxWbCksMTAzKS5nKXtjYXNlIDI6TkMoZSxoKSxDcnQoZSxoKTticmVhaztjYXNlIDM6bl8oZSxoKSxOQyhlLGgpO2JyZWFrO2Nhc2UgNDpOQyhlLGgpLG5fKGUsaCl9ZWxzZSBzd2l0Y2godShRKGUsVmwpLDEwMykuZyl7Y2FzZSAyOk5DKGUsaCksQ3J0KGUsaCk7YnJlYWs7Y2FzZSAzOk5DKGUsaCksbl8oZSxoKTticmVhaztjYXNlIDQ6bl8oZSxoKSxOQyhlLGgpfW9yKG4pfWZ1bmN0aW9uIHAzbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKGs9bmV3IEEwLEM9bmV3IEEwLFY9bmV3IEEwLFk9bmV3IEEwLHc9WHQoeWUoUShlLChUZSgpLEJ3KSkpKSxvPVh0KHllKFEoZSx4ZikpKSxkPW5ldyBTKG4pO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDEwKSxNPXUoUShoLChzZSgpLG9jKSksNjEpLE09PShiZSgpLE5uKSlmb3IoQy5hLnpjKGgsQykscz1uZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksTnMoayxyLmMuaSk7ZWxzZSBpZihNPT1tcilmb3IoWS5hLnpjKGgsWSkscz1uZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksTnMoVixyLmMuaSk7ay5hLmdjKCkhPTAmJihGPW5ldyBHbnQoMixvKSxIPXZ4dChGLGUsayxDLC13LWUuYy5iKSxIPjAmJih0LmE9dysoSC0xKSpvLGUuYy5iKz10LmEsZS5mLmIrPXQuYSkpLFYuYS5nYygpIT0wJiYoRj1uZXcgR250KDEsbyksSD12eHQoRixlLFYsWSxlLmYuYit3LWUuYy5iKSxIPjAmJihlLmYuYis9dysoSC0xKSpvKSl9ZnVuY3Rpb24gQ0UodCxlKXt2YXIgbixyLHMsbztvPXQuRixlPT1udWxsPyh0LkY9bnVsbCxaOCh0LG51bGwpKToodC5GPShPbihlKSxlKSxyPWNkKGUsRXUoNjApKSxyIT0tMT8ocz1lLnN1YnN0cigwLHIpLGNkKGUsRXUoNDYpKT09LTEmJiFobihzLHU2KSYmIWhuKHMsUV8pJiYhaG4ocyxUSCkmJiFobihzLFpfKSYmIWhuKHMsSl8pJiYhaG4ocyx0UykmJiFobihzLGVTKSYmIWhuKHMsblMpJiYocz1FMGUpLG49ZGooZSxFdSg2MikpLG4hPS0xJiYocys9IiIrZS5zdWJzdHIobisxKSksWjgodCxzKSk6KHM9ZSxjZChlLEV1KDQ2KSk9PS0xJiYocj1jZChlLEV1KDkxKSksciE9LTEmJihzPWUuc3Vic3RyKDAscikpLCFobihzLHU2KSYmIWhuKHMsUV8pJiYhaG4ocyxUSCkmJiFobihzLFpfKSYmIWhuKHMsSl8pJiYhaG4ocyx0UykmJiFobihzLGVTKSYmIWhuKHMsblMpPyhzPUUwZSxyIT0tMSYmKHMrPSIiK2Uuc3Vic3RyKHIpKSk6cz1lKSxaOCh0LHMpLHM9PWUmJih0LkY9dC5EKSkpLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNSxvLGUpKX1mdW5jdGlvbiBiM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2lmKFk9ZS5iLmMubGVuZ3RoLCEoWTwzKSl7Zm9yKEg9UHQoVHIsWHIsMjUsWSwxNSwxKSxNPTAsQz1uZXcgUyhlLmIpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDI5KSxIW00rK109ay5hLmMubGVuZ3RoO2ZvcihGPW5ldyBoYShlLmIsMikscj0xO3I8WS0xO3IrKylmb3Iobj0oUW4oRi5iPEYuZC5nYygpKSx1KEYuZC5YYihGLmM9Ri5iKyspLDI5KSksVj1uZXcgUyhuLmEpLG89MCxkPTAsdz0wO3c8SFtyKzFdO3crKylpZihfdD11KEooViksMTApLHc9PUhbcisxXS0xfHxSNHQodCxfdCxyKzEscikpe2ZvcihoPUhbcl0tMSxSNHQodCxfdCxyKzEscikmJihoPXQuYy5lW3UodSh1KEZlKHQuYy5iLF90LnApLDE1KS5YYigwKSw0NikuYSwxMCkucF0pO2Q8PXc7KXtpZihMdD11KEZlKG4uYSxkKSwxMCksIVI0dCh0LEx0LHIrMSxyKSlmb3IoZ3Q9dShGZSh0LmMuYixMdC5wKSwxNSkuS2MoKTtndC5PYigpOyl0dD11KGd0LlBiKCksNDYpLHM9dC5jLmVbdSh0dC5hLDEwKS5wXSwoczxvfHxzPmgpJiZOcyh0LmIsdSh0dC5iLDE3KSk7KytkfW89aH19fWZ1bmN0aW9uIGd4dCh0LGUpe3ZhciBuO2lmKGU9PW51bGx8fGhuKGUsVHUpfHxlLmxlbmd0aD09MCYmdC5rIT0oamcoKSxqNikpcmV0dXJuIG51bGw7c3dpdGNoKHQuay5nKXtjYXNlIDE6cmV0dXJuIE96KGUscUUpPyhGbigpLFlFKTpPeihlLE9jdCk/KEZuKCksSTIpOm51bGw7Y2FzZSAyOnRyeXtyZXR1cm4gZGUoJGwoZSxfYSx2aSkpfWNhdGNoKHIpe2lmKHI9V2kociksRXQociwxMjcpKXJldHVybiBudWxsO3Rocm93IHJ0KHIpfWNhc2UgNDp0cnl7cmV0dXJuIGx5KGUpfWNhdGNoKHIpe2lmKHI9V2kociksRXQociwxMjcpKXJldHVybiBudWxsO3Rocm93IHJ0KHIpfWNhc2UgMzpyZXR1cm4gZTtjYXNlIDU6cmV0dXJuIHhyZSh0KSxTb2UodCxlKTtjYXNlIDY6cmV0dXJuIHhyZSh0KSxfYm4odCx0LmEsZSk7Y2FzZSA3OnRyeXtyZXR1cm4gbj1ScG4odCksbi5KZihlKSxufWNhdGNoKHIpe2lmKHI9V2kociksRXQociwzMikpcmV0dXJuIG51bGw7dGhyb3cgcnQocil9ZGVmYXVsdDp0aHJvdyBydChuZXcgRm8oIkludmFsaWQgdHlwZSBzZXQgZm9yIHRoaXMgbGF5b3V0IG9wdGlvbi4iKSl9fWZ1bmN0aW9uIHYzbih0KXskQygpO3ZhciBlLG4scixzLG8saCxkO2ZvcihkPW5ldyBaenQsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxNDApLCghZC5ifHxlLmM+PWQuYi5jKSYmKGQuYj1lKSwoIWQuY3x8ZS5jPD1kLmMuYykmJihkLmQ9ZC5jLGQuYz1lKSwoIWQuZXx8ZS5kPj1kLmUuZCkmJihkLmU9ZSksKCFkLmZ8fGUuZDw9ZC5mLmQpJiYoZC5mPWUpO3JldHVybiByPW5ldyBCeigoSzgoKSxfdykpLGFJKHQsTGJlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbcl0pKSksaD1uZXcgQnooRHkpLGFJKHQsQWJlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbaF0pKSkscz1uZXcgQnooSXkpLGFJKHQsU2JlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbc10pKSksbz1uZXcgQnooajQpLGFJKHQsX2JlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbb10pKSksWXN0KHIuYyxfdyksWXN0KHMuYyxJeSksWXN0KG8uYyxqNCksWXN0KGguYyxEeSksZC5hLmM9UHQoWG4sSWUsMSwwLDUsMSksQXMoZC5hLHIuYyksQXMoZC5hLGEyKHMuYykpLEFzKGQuYSxvLmMpLEFzKGQuYSxhMihoLmMpKSxkfWZ1bmN0aW9uIHB4dCh0KXt2YXIgZTtzd2l0Y2godC5kKXtjYXNlIDE6e2lmKHQuaGooKSlyZXR1cm4gdC5vIT0tMjticmVha31jYXNlIDI6e2lmKHQuaGooKSlyZXR1cm4gdC5vPT0tMjticmVha31jYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6Y2FzZSA3OnJldHVybiB0Lm8+LTI7ZGVmYXVsdDpyZXR1cm4hMX1zd2l0Y2goZT10LmdqKCksdC5wKXtjYXNlIDA6cmV0dXJuIGUhPW51bGwmJmplKFJlKGUpKSE9YUModC5rLDApO2Nhc2UgMTpyZXR1cm4gZSE9bnVsbCYmdShlLDIxNykuYSE9U3IodC5rKTw8MjQ+PjI0O2Nhc2UgMjpyZXR1cm4gZSE9bnVsbCYmdShlLDE3MikuYSE9KFNyKHQuaykmbXMpO2Nhc2UgNjpyZXR1cm4gZSE9bnVsbCYmYUModShlLDE2MikuYSx0LmspO2Nhc2UgNTpyZXR1cm4gZSE9bnVsbCYmdShlLDE5KS5hIT1Tcih0LmspO2Nhc2UgNzpyZXR1cm4gZSE9bnVsbCYmdShlLDE4NCkuYSE9U3IodC5rKTw8MTY+PjE2O2Nhc2UgMzpyZXR1cm4gZSE9bnVsbCYmWHQoeWUoZSkpIT10Lmo7Y2FzZSA0OnJldHVybiBlIT1udWxsJiZ1KGUsMTU1KS5hIT10Lmo7ZGVmYXVsdDpyZXR1cm4gZT09bnVsbD90Lm4hPW51bGw6IXlpKGUsdC5uKX19ZnVuY3Rpb24gRUQodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiB0LkZrKCkmJnQuRWsoKSYmKGg9Rm50KHQsdShuLDU2KSksR3QoaCkhPT1HdChuKSk/KHQuT2koZSksdC5VaShlLHB0ZSh0LGUsaCkpLHQucmsoKSYmKG89KHM9dShuLDQ5KSx0LkRrKCk/dC5CaygpP3MuaWgodC5iLG5vKHUoeW4oYnUodC5iKSx0LmFqKCkpLDE4KSkubix1KHluKGJ1KHQuYiksdC5haigpKS5ZaigpLDI2KS5CaigpLG51bGwpOnMuaWgodC5iLFZpKHMuVGcoKSxubyh1KHluKGJ1KHQuYiksdC5haigpKSwxOCkpKSxudWxsLG51bGwpOnMuaWgodC5iLC0xLXQuYWooKSxudWxsLG51bGwpKSwhdShoLDQ5KS5laCgpJiYobz0ocj11KGgsNDkpLHQuRGsoKT90LkJrKCk/ci5naCh0LmIsbm8odSh5bihidSh0LmIpLHQuYWooKSksMTgpKS5uLHUoeW4oYnUodC5iKSx0LmFqKCkpLllqKCksMjYpLkJqKCksbyk6ci5naCh0LmIsVmkoci5UZygpLG5vKHUoeW4oYnUodC5iKSx0LmFqKCkpLDE4KSkpLG51bGwsbyk6ci5naCh0LmIsLTEtdC5haigpLG51bGwsbykpKSxvJiZvLkZpKCkpLG1sKHQuYikmJnQuJGkodC5aaSg5LG4saCxlLCExKSksaCk6bn1mdW5jdGlvbiBqbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2ZvcihDPVh0KHllKFEodCwoVGUoKSxGdykpKSkscj1YdCh5ZShRKHQsZ0N0KSkpLEY9bmV3IFd1LEp0KEYsRncsQytyKSxrPWUsZ3Q9ay5kLFk9ay5jLmksTHQ9ay5kLmksdHQ9dDJ0KFkuYyksX3Q9dDJ0KEx0LmMpLHM9bmV3IGxlLE09dHQ7TTw9X3Q7TSsrKWQ9bmV3IEgwKHQpLF8wKGQsKEduKCksWnMpKSxKdChkLChzZSgpLF9pKSxrKSxKdChkLG9zLChvYSgpLFZjKSksSnQoZCxzVixGKSxIPXUoRmUodC5iLE0pLDI5KSxNPT10dD9veShkLEguYS5jLmxlbmd0aC1uLEgpOmtvKGQsSCksQnQ9WHQoeWUoUShrLFVnKSkpLEJ0PDAmJihCdD0wLEp0KGssVWcsQnQpKSxkLm8uYj1CdCxWPWIuTWF0aC5mbG9vcihCdC8yKSxoPW5ldyBNYyxGcyhoLChiZSgpLEJuKSksVW8oaCxkKSxoLm4uYj1WLHc9bmV3IE1jLEZzKHcsSG4pLFVvKHcsZCksdy5uLmI9VixzYShrLGgpLG89bmV3IHp2LExvKG8sayksSnQobyxfbyxudWxsKSxEYShvLHcpLHNhKG8sZ3QpLHkxbihkLGssbykscy5jW3MuYy5sZW5ndGhdPW8saz1vO3JldHVybiBzfWZ1bmN0aW9uIF9hdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKHc9dShSZyh0LChiZSgpLEJuKSkuS2MoKS5QYigpLDExKS5lLEg9dShSZyh0LEhuKS5LYygpLlBiKCksMTEpLmcsZD13LmMubGVuZ3RoLF90PVQxKHUoRmUodC5qLDApLDExKSk7ZC0tID4wOyl7Zm9yKFk9KEFuKDAsdy5jLmxlbmd0aCksdSh3LmNbMF0sMTcpKSxzPShBbigwLEguYy5sZW5ndGgpLHUoSC5jWzBdLDE3KSksTHQ9cy5kLmUsbz1SbyhMdCxzLDApLFRpbihZLHMuZCxvKSxEYShzLG51bGwpLHNhKHMsbnVsbCksVj1ZLmEsZSYmbmkoVixuZXcgeW8oX3QpKSxyPWVpKHMuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksbmkoVixuZXcgeW8obikpO2ZvcihndD1ZLmIsRj1uZXcgUyhzLmIpO0YuYTxGLmMuYy5sZW5ndGg7KU09dShKKEYpLDcwKSxndC5jW2d0LmMubGVuZ3RoXT1NO2lmKHR0PXUoUShZLChUZSgpLF9vKSksNzQpLGg9dShRKHMsX28pLDc0KSxoKWZvcih0dHx8KHR0PW5ldyBEdSxKdChZLF9vLHR0KSksQz1laShoLDApO0MuYiE9Qy5kLmM7KWs9dSh0aShDKSw4KSxuaSh0dCxuZXcgeW8oaykpfX1mdW5jdGlvbiAkbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYobj11KGdvKHQuYixlKSwxMjQpLHc9dSh1KEFpKHQucixlKSwyMSksODQpLHcuZGMoKSl7bi5uLmI9MCxuLm4uYz0wO3JldHVybn1mb3Ioaz10LnUuSGMoKFF1KCksdGcpKSxoPTAsZD13LktjKCksQz1udWxsLE09MCxGPTA7ZC5PYigpOylyPXUoZC5QYigpLDExMSkscz1YdCh5ZShyLmIuV2UoKGdqKCksWkgpKSkpLG89ci5iLnJmKCkuYSx0LkEuSGMoKF9sKCksVjIpKSYmbXVlKHQsZSksQz8oSD1GK0MuZC5jK3QudytyLmQuYixoPWIuTWF0aC5tYXgoaCwoeTEoKSxnZihQMSksYi5NYXRoLmFicyhNLXMpPD1QMXx8TT09c3x8aXNOYU4oTSkmJmlzTmFOKHMpPzA6SC8ocy1NKSkpKTp0LkMmJnQuQy5iPjAmJihoPWIuTWF0aC5tYXgoaCxkbmUodC5DLmIrci5kLmIscykpKSxDPXIsTT1zLEY9bzt0LkMmJnQuQy5jPjAmJihIPUYrdC5DLmMsayYmKEgrPUMuZC5jKSxoPWIuTWF0aC5tYXgoaCwoeTEoKSxnZihQMSksYi5NYXRoLmFicyhNLTEpPD1QMXx8TT09MXx8aXNOYU4oTSkmJmlzTmFOKDEpPzA6SC8oMS1NKSkpKSxuLm4uYj0wLG4uYS5hPWh9ZnVuY3Rpb24gemxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKG49dShnbyh0LmIsZSksMTI0KSx3PXUodShBaSh0LnIsZSksMjEpLDg0KSx3LmRjKCkpe24ubi5kPTAsbi5uLmE9MDtyZXR1cm59Zm9yKGs9dC51LkhjKChRdSgpLHRnKSksaD0wLHQuQS5IYygoX2woKSxWMikpJiZ5dWUodCxlKSxkPXcuS2MoKSxDPW51bGwsRj0wLE09MDtkLk9iKCk7KXI9dShkLlBiKCksMTExKSxvPVh0KHllKHIuYi5XZSgoZ2ooKSxaSCkpKSkscz1yLmIucmYoKS5iLEM/KEg9TStDLmQuYSt0Lncrci5kLmQsaD1iLk1hdGgubWF4KGgsKHkxKCksZ2YoUDEpLGIuTWF0aC5hYnMoRi1vKTw9UDF8fEY9PW98fGlzTmFOKEYpJiZpc05hTihvKT8wOkgvKG8tRikpKSk6dC5DJiZ0LkMuZD4wJiYoaD1iLk1hdGgubWF4KGgsZG5lKHQuQy5kK3IuZC5kLG8pKSksQz1yLEY9byxNPXM7dC5DJiZ0LkMuYT4wJiYoSD1NK3QuQy5hLGsmJihIKz1DLmQuYSksaD1iLk1hdGgubWF4KGgsKHkxKCksZ2YoUDEpLGIuTWF0aC5hYnMoRi0xKTw9UDF8fEY9PTF8fGlzTmFOKEYpJiZpc05hTigxKT8wOkgvKDEtRikpKSksbi5uLmQ9MCxuLmEuYj1ofWZ1bmN0aW9uIHFsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2Zvcih0aGlzLmc9dCxkPWUuZC5sZW5ndGgsdz1uLmQubGVuZ3RoLHRoaXMuZD1QdChvMCx6ZywxMCxkK3csMCwxKSxoPTA7aDxkO2grKyl0aGlzLmRbaF09ZS5kW2hdO2ZvcihvPTA7bzx3O28rKyl0aGlzLmRbZCtvXT1uLmRbb107aWYoZS5lKXtpZih0aGlzLmU9VU0oZS5lKSx0aGlzLmUuTWMobiksbi5lKWZvcihzPW4uZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwyMzMpLHIhPWUmJih0aGlzLmUuSGMocik/LS1yLmM6dGhpcy5lLkZjKHIpKX1lbHNlIG4uZSYmKHRoaXMuZT1VTShuLmUpLHRoaXMuZS5NYyhlKSk7dGhpcy5mPWUuZituLmYsdGhpcy5hPWUuYStuLmEsdGhpcy5hPjA/SnJ0KHRoaXMsdGhpcy5mL3RoaXMuYSk6eDEoZS5nLGUuZFswXSkuYSE9bnVsbCYmeDEobi5nLG4uZFswXSkuYSE9bnVsbD9KcnQodGhpcywoWHQoeDEoZS5nLGUuZFswXSkuYSkrWHQoeDEobi5nLG4uZFswXSkuYSkpLzIpOngxKGUuZyxlLmRbMF0pLmEhPW51bGw/SnJ0KHRoaXMseDEoZS5nLGUuZFswXSkuYSk6eDEobi5nLG4uZFswXSkuYSE9bnVsbCYmSnJ0KHRoaXMseDEobi5nLG4uZFswXSkuYSl9ZnVuY3Rpb24gdzNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKHQuYT1uZXcgWFl0KFdvbihXUykpLHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShKKHIpLDg0MSksZD1uZXcgWGl0KGN0KG90KFl1dCwxKSxJZSw4MSwwLFtdKSksdWUodC5hLmEsZCksaz1uZXcgUyhuLmQpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDExMCksQz1uZXcgQTJ0KHQsdyksd3h0KEMsdShRKG4uYywoc2UoKSxOeSkpLDIxKSksa2wodC5nLG4pfHwoa2kodC5nLG4sbmV3ICRlKHcuYyx3LmQpKSxraSh0LmYsbixDKSksdWUodC5hLmIsQyksRXJ0KGQsQyk7Zm9yKGg9bmV3IFMobi5iKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw1OTQpLEM9bmV3IEEydCh0LG8ua2YoKSksa2kodC5iLG8sbmV3IGxhKGQsQykpLHd4dChDLHUoUShuLmMsKHNlKCksTnkpKSwyMSkpLG8uaGYoKSYmKE09bmV3IEwzdCh0LG8uaGYoKSwxKSx3eHQoTSx1KFEobi5jLE55KSwyMSkpLHM9bmV3IFhpdChjdChvdChZdXQsMSksSWUsODEsMCxbXSkpLEVydChzLE0pLGxuKHQuYyxvLmdmKCksbmV3IGxhKGQsTSkpKX1yZXR1cm4gdC5hfWZ1bmN0aW9uIEhsZSh0KXt2YXIgZTt0aGlzLmE9dCxlPShHbigpLGN0KG90KGVsdCwxKSxhZSwyNjcsMCxbRHMsWnMseHMsSGMsU2wsajFdKSkubGVuZ3RoLHRoaXMuYj1YYihRaHQsW3RlLE5rdF0sWzU5MywxNDZdLDAsW2UsZV0sMiksdGhpcy5jPVhiKFFodCxbdGUsTmt0XSxbNTkzLDE0Nl0sMCxbZSxlXSwyKSx1cnQodGhpcyxEcywoVGUoKSxCdyksWjQpLFdDKHRoaXMsRHMsWnMsRncsUjIpLGVJKHRoaXMsRHMsSGMsRncpLGVJKHRoaXMsRHMseHMsRncpLFdDKHRoaXMsRHMsU2wsQncsWjQpLHVydCh0aGlzLFpzLHhmLFE0KSxlSSh0aGlzLFpzLEhjLHhmKSxlSSh0aGlzLFpzLHhzLHhmKSxXQyh0aGlzLFpzLFNsLEZ3LFIyKSx2VXQodGhpcyxIYyx4ZiksZUkodGhpcyxIYyx4cyx4ZiksZUkodGhpcyxIYyxTbCx0aHQpLHZVdCh0aGlzLHhzLF9TKSxXQyh0aGlzLHhzLFNsLHk3LG03KSx1cnQodGhpcyxTbCx4Zix4ZiksdXJ0KHRoaXMsajEseGYsUTQpLFdDKHRoaXMsajEsRHMsRncsUjIpLFdDKHRoaXMsajEsU2wsRncsUjIpLFdDKHRoaXMsajEsWnMsRncsUjIpfWZ1bmN0aW9uIG0zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7aWYoaD1uLmFrKCksRXQoaCw5OSkmJnUoaCwxOCkuQmImWWEmJihGPXUobi5kZCgpLDQ5KSxZPUtwKHQuZSxGKSxZIT1GKSl7aWYoQz1ZZChoLFkpLGZDKHQsZSxTc3QodCxlLEMpKSxNPW51bGwsbWwodC5lKSYmKHI9RTQoKFJ1KCksbWEpLHQuZS5UZygpLGgpLHIhPXluKHQuZS5UZygpLHQuYykpKXtmb3IodHQ9YXUodC5lLlRnKCksaCksZD0wLG89dSh0LmcsMTE5KSx3PTA7dzxlOysrdylzPW9bd10sdHQucmwocy5haygpKSYmKytkO009bmV3IEFydCh0LmUsOSxyLEYsWSxkLCExKSxNLkVpKG5ldyBGMCh0LmUsOSx0LmMsbixDLGUsITEpKX1yZXR1cm4gVj11KGgsMTgpLEg9bm8oViksSD8oTT1GLmloKHQuZSxWaShGLlRnKCksSCksbnVsbCxNKSxNPXUoWSw0OSkuZ2godC5lLFZpKFkuVGcoKSxIKSxudWxsLE0pKTpWLkJiJmRjJiYoaz0tMS1WaSh0LmUuVGcoKSxWKSxNPUYuaWgodC5lLGssbnVsbCxudWxsKSwhdShZLDQ5KS5laCgpJiYoTT11KFksNDkpLmdoKHQuZSxrLG51bGwsTSkpKSxNJiZNLkZpKCksQ31yZXR1cm4gbn1mdW5jdGlvbiB5M24odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iobz1uZXcgUyh0LmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksODEpLHMuYi5jPXMuZy5jLHMuYi5kPXMuZy5kO2Zvcih3PW5ldyAkZShzcyxzcyksZT1uZXcgJGUoVHMsVHMpLHI9bmV3IFModC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDgxKSx3LmE9Yi5NYXRoLm1pbih3LmEsbi5nLmMpLHcuYj1iLk1hdGgubWluKHcuYixuLmcuZCksZS5hPWIuTWF0aC5tYXgoZS5hLG4uZy5jK24uZy5iKSxlLmI9Yi5NYXRoLm1heChlLmIsbi5nLmQrbi5nLmEpO2ZvcihkPVlqKHQuYykuYS5uYygpO2QuT2IoKTspaD11KGQuUGIoKSw0Niksbj11KGguYiw4MSksdy5hPWIuTWF0aC5taW4ody5hLG4uZy5jKSx3LmI9Yi5NYXRoLm1pbih3LmIsbi5nLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmcuYytuLmcuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZy5kK24uZy5hKTt0LmQ9bWoobmV3ICRlKHcuYSx3LmIpKSx0LmU9bmEobmV3ICRlKGUuYSxlLmIpLHcpLHQuYS5hLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5hLmIuYz1QdChYbixJZSwxLDAsNSwxKX1mdW5jdGlvbiB4M24odCl7dmFyIGUsbixyO2ZvcihzNChUYixjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IHlwXSkpLG49bmV3IGx4KHQpLHI9MDtyPG4uYS5sZW5ndGg7KytyKWU9WG0obixyKS5qZSgpLmEsaG4oZSwibGF5ZXJlZCIpP3M0KFRiLGN0KG90KFI0LDEpLEllLDEzMCwwLFtuZXcgVUpdKSk6aG4oZSwiZm9yY2UiKT9zNChUYixjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IERKXSkpOmhuKGUsInN0cmVzcyIpP3M0KFRiLGN0KG90KFI0LDEpLEllLDEzMCwwLFtuZXcgT0pdKSk6aG4oZSwibXJ0cmVlIik/czQoVGIsY3Qob3QoUjQsMSksSWUsMTMwLDAsW25ldyBMM10pKTpobihlLCJyYWRpYWwiKT9zNChUYixjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IFpKXSkpOmhuKGUsImRpc2NvIik/czQoVGIsY3Qob3QoUjQsMSksSWUsMTMwLDAsW25ldyBVTCxuZXcgSUpdKSk6aG4oZSwic3BvcmVPdmVybGFwIil8fGhuKGUsInNwb3JlQ29tcGFjdGlvbiIpP3M0KFRiLGN0KG90KFI0LDEpLEllLDEzMCwwLFtuZXcgQkJdKSk6aG4oZSwicmVjdHBhY2tpbmciKSYmczQoVGIsY3Qob3QoUjQsMSksSWUsMTMwLDAsW25ldyBqQl0pKX1mdW5jdGlvbiBHbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2lmKEY9bmV3IHlvKHQubyksZ3Q9ZS5hL0YuYSxkPWUuYi9GLmIsWT1lLmEtRi5hLG89ZS5iLUYuYixuKWZvcihzPUd0KFEodCwoVGUoKSxvcykpKT09PUd0KChvYSgpLFZjKSksVj1uZXcgUyh0LmopO1YuYTxWLmMuYy5sZW5ndGg7KXN3aXRjaChIPXUoSihWKSwxMSksSC5qLmcpe2Nhc2UgMTpzfHwoSC5uLmEqPWd0KTticmVhaztjYXNlIDI6SC5uLmErPVksc3x8KEgubi5iKj1kKTticmVhaztjYXNlIDM6c3x8KEgubi5hKj1ndCksSC5uLmIrPW87YnJlYWs7Y2FzZSA0OnN8fChILm4uYio9ZCl9Zm9yKGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSw3MCksQz13Lm4uYSt3Lm8uYS8yLE09dy5uLmIrdy5vLmIvMix0dD1DL0YuYSxoPU0vRi5iLHR0K2g+PTEmJih0dC1oPjAmJk0+PTA/KHcubi5hKz1ZLHcubi5iKz1vKmgpOnR0LWg8MCYmQz49MCYmKHcubi5hKz1ZKnR0LHcubi5iKz1vKSk7dC5vLmE9ZS5hLHQuby5iPWUuYixKdCh0LChUZSgpLEYyKSwoX2woKSxyPXUoSGYodEEpLDkpLG5ldyByaChyLHUodWYocixyLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBrM24odCxlLG4scixzLG8pe3ZhciBoO2lmKCEoZT09bnVsbHx8IUhpdChlLFlBdCxYQXQpKSl0aHJvdyBydChuZXcgUG4oImludmFsaWQgc2NoZW1lOiAiK2UpKTtpZighdCYmIShuIT1udWxsJiZjZChuLEV1KDM1KSk9PS0xJiZuLmxlbmd0aD4wJiYoUnIoMCxuLmxlbmd0aCksbi5jaGFyQ29kZUF0KDApIT00NykpKXRocm93IHJ0KG5ldyBQbigiaW52YWxpZCBvcGFxdWVQYXJ0OiAiK24pKTtpZih0JiYhKGUhPW51bGwmJnBNKHJVLGUudG9Mb3dlckNhc2UoKSkpJiYhKG49PW51bGx8fCFIaXQobixpQSxzQSkpKXRocm93IHJ0KG5ldyBQbihsMGUrbikpO2lmKHQmJmUhPW51bGwmJnBNKHJVLGUudG9Mb3dlckNhc2UoKSkmJiFwZG4obikpdGhyb3cgcnQobmV3IFBuKGwwZStuKSk7aWYoIW1sbihyKSl0aHJvdyBydChuZXcgUG4oImludmFsaWQgZGV2aWNlOiAiK3IpKTtpZighZnVuKHMpKXRocm93IGg9cz09bnVsbD8iaW52YWxpZCBzZWdtZW50czogbnVsbCI6ImludmFsaWQgc2VnbWVudDogIitjdW4ocykscnQobmV3IFBuKGgpKTtpZighKG89PW51bGx8fGNkKG8sRXUoMzUpKT09LTEpKXRocm93IHJ0KG5ldyBQbigiaW52YWxpZCBxdWVyeTogIitvKSl9ZnVuY3Rpb24gRTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3Iod3IoZSwiQ2FsY3VsYXRlIEdyYXBoIFNpemUiLDEpLGUubiYmdCYmaGYoZSxmZih0KSwoQ2woKSxZbCkpLGQ9RkUsdz1GRSxvPWprdCxoPWprdCxNPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO00uZSE9TS5pLmdjKCk7KWs9dShkcihNKSwzMyksVj1rLmksWT1rLmosZ3Q9ay5nLHI9ay5mLHM9dShxZShrLChjaSgpLEtPKSksMTQyKSxkPWIuTWF0aC5taW4oZCxWLXMuYiksdz1iLk1hdGgubWluKHcsWS1zLmQpLG89Yi5NYXRoLm1heChvLFYrZ3Qrcy5jKSxoPWIuTWF0aC5tYXgoaCxZK3Ircy5hKTtmb3IoSD11KHFlKHQsKGNpKCkscTIpKSwxMTYpLEY9bmV3ICRlKGQtSC5iLHctSC5kKSxDPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwzMykseXUoayxrLmktRi5hKSx4dShrLGsuai1GLmIpO3R0PW8tZCsoSC5iK0guYyksbj1oLXcrKEguZCtILmEpLFF2KHQsdHQpLFh2KHQsbiksZS5uJiZ0JiZoZihlLGZmKHQpLChDbCgpLFlsKSl9ZnVuY3Rpb24gVmxlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihyPW5ldyBsZSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKGgpLDEyMSksQz0wLHMuay5jPVB0KFhuLEllLDEsMCw1LDEpLG49bmV3IFMobzQocykpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDIxMyksZS5mJiYodWUocy5rLGUpLCsrQyk7Qz09MSYmKHIuY1tyLmMubGVuZ3RoXT1zKX1mb3Iobz1uZXcgUyhyKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTIxKTtzLmsuYy5sZW5ndGg9PTE7KXtmb3Ioaz11KEoobmV3IFMocy5rKSksMjEzKSx0LmJbay5jXT1rLmcsZD1rLmQsdz1rLmUsbj1uZXcgUyhvNChzKSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjEzKSx5aShlLGspfHwoZS5mP2Q9PWUuZHx8dz09ZS5lP3QuYltrLmNdLT10LmJbZS5jXS1lLmc6dC5iW2suY10rPXQuYltlLmNdLWUuZzpzPT1kP2UuZD09cz90LmJbay5jXSs9ZS5nOnQuYltrLmNdLT1lLmc6ZS5kPT1zP3QuYltrLmNdLT1lLmc6dC5iW2suY10rPWUuZyk7dnUoZC5rLGspLHZ1KHcuayxrKSxkPT1zP3M9ay5lOnM9ay5kfX1mdW5jdGlvbiBieHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihlPT1udWxsfHxlLmxlbmd0aD09MClyZXR1cm4gbnVsbDtpZihvPXUoRmModC5mLGUpLDIzKSwhbyl7Zm9yKHM9KEg9bmV3IGIxKHQuZCkuYS52YygpLktjKCksbmV3IHYxKEgpKTtzLmEuT2IoKTspaWYobj0oaD11KHMuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLGQ9bi5mLFY9ZS5sZW5ndGgsaG4oZC5zdWJzdHIoZC5sZW5ndGgtVixWKSxlKSYmKGUubGVuZ3RoPT1kLmxlbmd0aHx8YmEoZCxkLmxlbmd0aC1lLmxlbmd0aC0xKT09NDYpKXtpZihvKXJldHVybiBudWxsO289bn1pZighbyl7Zm9yKHI9KEY9bmV3IGIxKHQuZCkuYS52YygpLktjKCksbmV3IHYxKEYpKTtyLmEuT2IoKTspaWYobj0oaD11KHIuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLE09bi5nLE0hPW51bGwpe2Zvcih3PU0saz0wLEM9dy5sZW5ndGg7azxDOysraylpZihkPXdba10sVj1lLmxlbmd0aCxobihkLnN1YnN0cihkLmxlbmd0aC1WLFYpLGUpJiYoZS5sZW5ndGg9PWQubGVuZ3RofHxiYShkLGQubGVuZ3RoLWUubGVuZ3RoLTEpPT00Nikpe2lmKG8pcmV0dXJuIG51bGw7bz1ufX19byYmeG8odC5mLGUsbyl9cmV0dXJuIG99ZnVuY3Rpb24gVDNuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgTG0saD0hMSxvPTA7bzxlLmxlbmd0aDtvKyspe2lmKHI9KFJyKG8sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKSkscj09MzIpe2ZvcihSeih0LG4sMCksbi5hKz0iICIsUnoodCxuLDApO28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTMyKTspKytvO2NvbnRpbnVlfWlmKGgpe3I9PTM5P28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTM5KT8obi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLCsrbyk6aD0hMTpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocik7Y29udGludWV9aWYoY2QoIkd5TUxka0htc1NFY0RhaEt6WnYiLEV1KHIpKT4wKXtSeih0LG4sMCksbi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLHM9Y2huKGUsbyksUnoodCxuLHMpLG8rPXMtMTtjb250aW51ZX1yPT0zOT9vKzE8ZS5sZW5ndGgmJihScihvKzEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKzEpPT0zOSk/KG4uYSs9IiciLCsrbyk6aD0hMDpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocil9UnoodCxuLDApLGpkbih0KX1mdW5jdGlvbiBDM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2lmKHdyKG4sIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksdC5iPWUsZ3Q9dShRKGUsKFRlKCksU1MpKSwxOSkuYSo0LHR0PXQuYi5hLHR0LmMubGVuZ3RoPDEpe29yKG4pO3JldHVybn1mb3Iobz1Dd24odCx0dCksWT1udWxsLHM9ZWkobywwKTtzLmIhPXMuZC5jOyl7Zm9yKHI9dSh0aShzKSwxNSksZD1ndCpwcyhiLk1hdGguc3FydChyLmdjKCkpKSxoPXF3bihyKSxjYXQoSnB0KFJLZSh0YnQobW50KGgpLGQpLFkpLCEwKSxSYyhuLDEpKSxGPXQuYi5iLFY9bmV3IFMoaC5hKTtWLmE8Vi5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKFYpLDEyMSk7Ri5jLmxlbmd0aDw9SC5lOykkbShGLEYuYy5sZW5ndGgsbmV3IENoKHQuYikpO0M9dShILmYsMTApLGtvKEMsdShGZShGLEguZSksMjkpKX1pZihvLmI+MSlmb3IoWT1QdChUcixYciwyNSx0LmIuYi5jLmxlbmd0aCwxNSwxKSxNPTAsaz1uZXcgUyh0LmIuYik7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMjkpLFlbTSsrXT13LmEuYy5sZW5ndGh9dHQuYz1QdChYbixJZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmI9bnVsbCx0LmM9bnVsbCxvcihuKX1mdW5jdGlvbiBVbGUodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxvPW5ldyBTKHQuYi5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxODkpLHIuYj0wLHIuYz0wO2ZvcihJYWUodCwwKSxHaXQodCx0LmcpLHVxKHQuYyksS3B0KHQuYyksbj0oYW8oKSxqaCksbUQoSGV0KFQ0KG1EKEhldChUNChtRChUNCh0LmMsbikpLFhyZShuKSkpKSxuKSkpLFQ0KHQuYyxqaCksQml0KHQsdC5nKSxtYWUodCwwKSxDbGUodCwwKSxsY2UodCwxKSxJYWUodCwxKSxHaXQodCx0LmQpLHVxKHQuYyksaD1uZXcgUyh0LmIuYSk7aC5hPGguYy5jLmxlbmd0aDspcj11KEooaCksMTg5KSxlKz1iLk1hdGguYWJzKHIuYyk7Zm9yKGQ9bmV3IFModC5iLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXI9dShKKGQpLDE4OSksci5iPTAsci5jPTA7Zm9yKG49WjAsbUQoSGV0KFQ0KG1EKEhldChUNChtRChLcHQoVDQodC5jLG4pKSksWHJlKG4pKSkpLG4pKSksVDQodC5jLGpoKSxCaXQodCx0LmQpLG1hZSh0LDEpLENsZSh0LDEpLGxjZSh0LDApLEtwdCh0LmMpLHM9bmV3IFModC5iLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE4OSksZSs9Yi5NYXRoLmFicyhyLmMpO3JldHVybiBlfWZ1bmN0aW9uIFdsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZihrPWUsIShrLmI9PW51bGx8fHQuYj09bnVsbCkpe2ZvcihiNCh0KSxUXyh0KSxiNChrKSxUXyhrKSxuPVB0KFRyLFhyLDI1LHQuYi5sZW5ndGgray5iLmxlbmd0aCwxNSwxKSxDPTAscj0wLGg9MDtyPHQuYi5sZW5ndGgmJmg8ay5iLmxlbmd0aDspaWYocz10LmJbcl0sbz10LmJbcisxXSxkPWsuYltoXSx3PWsuYltoKzFdLG88ZClyKz0yO2Vsc2UgaWYobz49ZCYmczw9dylkPD1zJiZvPD13PyhuW0MrK109cyxuW0MrK109byxyKz0yKTpkPD1zPyhuW0MrK109cyxuW0MrK109dyx0LmJbcl09dysxLGgrPTIpOm88PXc/KG5bQysrXT1kLG5bQysrXT1vLHIrPTIpOihuW0MrK109ZCxuW0MrK109dyx0LmJbcl09dysxKTtlbHNlIGlmKHc8cyloKz0yO2Vsc2UgdGhyb3cgcnQobmV3IEdvKCJUb2tlbiNpbnRlcnNlY3RSYW5nZXMoKTogSW50ZXJuYWwgRXJyb3I6IFsiK3QuYltyXSsiLCIrdC5iW3IrMV0rIl0gJiBbIitrLmJbaF0rIiwiK2suYltoKzFdKyJdIikpO2Zvcig7cjx0LmIubGVuZ3RoOyluW0MrK109dC5iW3IrK10sbltDKytdPXQuYltyKytdO3QuYj1QdChUcixYciwyNSxDLDE1LDEpLEljKG4sMCx0LmIsMCxDKX19ZnVuY3Rpb24gXzNuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPW5ldyBsZSx0Lmc9bmV3IGxlLHQuZD1uZXcgbGUsaD1uZXcgaDIobmV3IHdnKHQuZi5iKS5hKTtoLmI7KW89WXYoaCksdWUoZSx1KHUoby5kZCgpLDQ2KS5iLDgxKSksT3AodShvLmNkKCksNTk0KS5nZigpKT91ZSh0LmQsdShvLmRkKCksNDYpKTp1ZSh0LmcsdShvLmRkKCksNDYpKTtmb3IoR2l0KHQsdC5kKSxHaXQodCx0LmcpLHQuYz1uZXcgTG9lKHQuYiksJEtlKHQuYywoZGJ0KCkseGJlKSksQml0KHQsdC5kKSxCaXQodCx0LmcpLEFzKGUsdC5jLmEuYiksdC5lPW5ldyAkZShzcyxzcyksdC5hPW5ldyAkZShUcyxUcykscj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksdC5lLmE9Yi5NYXRoLm1pbih0LmUuYSxuLmcuYyksdC5lLmI9Yi5NYXRoLm1pbih0LmUuYixuLmcuZCksdC5hLmE9Yi5NYXRoLm1heCh0LmEuYSxuLmcuYytuLmcuYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixuLmcuZCtuLmcuYSk7bmJ0KHQuYyxuZXcgcHApLGQ9MDtkbyBzPVVsZSh0KSwrK2Q7d2hpbGUoKGQ8Mnx8cz5lYikmJmQ8MTApO25idCh0LmMsbmV3ICQ1KSxVbGUodCksZmVuKHQuYykseTNuKHQuZil9ZnVuY3Rpb24gUzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZihqZShSZShRKG4sKFRlKCksJHkpKSkpKWZvcihkPW5ldyBTKG4uaik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDExKSxGPWdkKGguZyksaz1GLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdz1rW0NdLG89dy5kLmk9PW4scz1vJiZqZShSZShRKHcsUDIpKSkscyYmKFY9dy5jLEg9dShKbih0LmIsViksMTApLEh8fChIPVREKFYsKG9hKCksSDEpLFYuaiwtMSxudWxsLG51bGwsVi5vLHUoUShlLFZsKSwxMDMpLGUpLEp0KEgsKHNlKCksX2kpLFYpLGtpKHQuYixWLEgpLHVlKGUuYSxIKSksdHQ9dy5kLFk9dShKbih0LmIsdHQpLDEwKSxZfHwoWT1URCh0dCwob2EoKSxIMSksdHQuaiwxLG51bGwsbnVsbCx0dC5vLHUoUShlLFZsKSwxMDMpLGUpLEp0KFksKHNlKCksX2kpLHR0KSxraSh0LmIsdHQsWSksdWUoZS5hLFkpKSxyPU5ydCh3KSxEYShyLHUoRmUoSC5qLDApLDExKSksc2Eocix1KEZlKFkuaiwwKSwxMSkpLGxuKHQuYSx3LG5ldyBUaihyLGUsKHNvKCksZXUpKSksdShRKGUsKHNlKCksR2MpKSwyMSkuRmMoKG9vKCksYmgpKSl9ZnVuY3Rpb24gQTNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFY7Zm9yKHdyKG4sIkxhYmVsIGR1bW15IHN3aXRjaGluZyIsMSkscj11KFEoZSwoVGUoKSxRRykpLDIyNyksJG9uKGUpLHM9eWJuKGUsciksdC5hPVB0KGlhLHZvLDI1LGUuYi5jLmxlbmd0aCwxNSwxKSxkPShpNigpLGN0KG90KGM3LDEpLGFlLDIyNywwLFtvNyxkUyxhNyxPeSxINCxxNF0pKSxDPTAsSD1kLmxlbmd0aDtDPEg7KytDKWlmKG89ZFtDXSwobz09SDR8fG89PXE0fHxvPT1PeSkmJiF1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KS5kYygpKXtRb24odCxlKTticmVha31mb3Iodz1jdChvdChjNywxKSxhZSwyMjcsMCxbbzcsZFMsYTcsT3ksSDQscTRdKSxNPTAsVj13Lmxlbmd0aDtNPFY7KytNKW89d1tNXSxvPT1INHx8bz09cTR8fG89PU95fHxGdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7Zm9yKGg9Y3Qob3QoYzcsMSksYWUsMjI3LDAsW283LGRTLGE3LE95LEg0LHE0XSksaz0wLEY9aC5sZW5ndGg7azxGOysraylvPWhba10sKG89PUg0fHxvPT1xNHx8bz09T3kpJiZGdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7dC5hPW51bGwsb3Iobil9ZnVuY3Rpb24gTDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtzd2l0Y2godC5rLmcpe2Nhc2UgMTppZihyPXUoUSh0LChzZSgpLF9pKSksMTcpLG49dShRKHIsSlR0KSw3NCksbj9qZShSZShRKHIsJDEpKSkmJihuPUJJKG4pKTpuPW5ldyBEdSxrPXUoUSh0LG4xKSwxMSksayl7aWYoQz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW2suaS5uLGsubixrLmFdKSksZTw9Qy5hKXJldHVybiBDLmI7aHMobixDLG4uYSxuLmEuYSl9aWYoTT11KFEodCxSaCksMTEpLE0pe2lmKEY9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtNLmkubixNLm4sTS5hXSkpLEYuYTw9ZSlyZXR1cm4gRi5iO2hzKG4sRixuLmMuYixuLmMpfWlmKG4uYj49Mil7Zm9yKHc9ZWkobiwwKSxoPXUodGkodyksOCksZD11KHRpKHcpLDgpO2QuYTxlJiZ3LmIhPXcuZC5jOyloPWQsZD11KHRpKHcpLDgpO3JldHVybiBoLmIrKGUtaC5hKS8oZC5hLWguYSkqKGQuYi1oLmIpfWJyZWFrO2Nhc2UgMzpzd2l0Y2gobz11KFEodShGZSh0LmosMCksMTEpLChzZSgpLF9pKSksMTEpLHM9by5pLG8uai5nKXtjYXNlIDE6cmV0dXJuIHMubi5iO2Nhc2UgMzpyZXR1cm4gcy5uLmIrcy5vLmJ9fXJldHVybiB1NHQodCkuYn1mdW5jdGlvbiBNM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoaD1uZXcgUyh0LmQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2lmKGQ9dShKKHcpLDEwKSxqZShSZShRKGQsKFRlKCksa1MpKSkpJiYhUzgoejAoZCkpKXtyPXUoTG5uKHowKGQpKSwxNyksQz1yLmMuaSxDPT1kJiYoQz1yLmQuaSksTT1uZXcgbGEoQyxuYShuYyhkLm4pLEMubikpLGtpKHQuYixkLE0pO2NvbnRpbnVlfXM9bmV3IGloKGQubi5hLWQuZC5iLGQubi5iLWQuZC5kLGQuby5hK2QuZC5iK2QuZC5jLGQuby5iK2QuZC5kK2QuZC5hKSxlPW5XdChiR3QoZ0d0KHBHdChuZXcgRHB0LGQpLHMpLFliZSksdC5hKSxlV3QoZFllKE9lZShuZXcgSXB0LGN0KG90KFhILDEpLEllLDU3LDAsW2VdKSksZSksdC5hKSxrPW5ldyBxdHQsa2kodC5lLGUsayksbj1OMChuZXcgYXIobHIoam8oZCkuYS5LYygpLG5ldyB6KSkpLU4wKG5ldyBhcihscihNcyhkKS5hLktjKCksbmV3IHopKSksbjwwP1BJKGssITAsKGFvKCksamgpKTpuPjAmJlBJKGssITAsKGFvKCksa2YpKSxkLms9PShHbigpLHhzKSYmbVh0KGspLGtpKHQuZixkLGUpfX1mdW5jdGlvbiBJM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO3N3aXRjaCh3cihuLCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLHQuZz1lLEI0bih0KSx0LnE9dShRKGUsKFRlKCksWGx0KSksMjYwKSxDPXUoUSh0LmcsdEN0KSwxOSkuYSxvPW5ldyBpRix0LnEuZyl7Y2FzZSAyOmNhc2UgMTpURSh0LG8pO2JyZWFrO2Nhc2UgMzpmb3IodC5xPSh3NCgpLGZWKSxURSh0LG8pLHc9MCxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTkpLHc9Yi5NYXRoLm1heCh3LGguYSk7dz50LmomJih0LnE9TU8sVEUodCxvKSk7YnJlYWs7Y2FzZSA0OmZvcih0LnE9KHc0KCksZlYpLFRFKHQsbyksaz0wLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXllKEoocykpLGs9Yi5NYXRoLm1heChrLChPbihyKSxyKSk7az50LmsmJih0LnE9SU8sVEUodCxvKSk7YnJlYWs7Y2FzZSA2OkY9cHMoYi5NYXRoLmNlaWwodC5mLmxlbmd0aCpDLzEwMCkpLFRFKHQsbmV3IGtwKEYpKTticmVhaztjYXNlIDU6TT1wcyhiLk1hdGguY2VpbCh0LmQqQy8xMDApKSxURSh0LG5ldyBxZihNKSk7YnJlYWs7ZGVmYXVsdDpURSh0LG8pfVR2bih0LGUpLG9yKG4pfWZ1bmN0aW9uIEtsZSh0LGUsbil7dmFyIHIscyxvLGg7dGhpcy5qPXQsdGhpcy5lPW00dCh0KSx0aGlzLm89dGhpcy5qLmUsdGhpcy5pPSEhdGhpcy5vLHRoaXMucD10aGlzLmk/dShGZShuLEZhKHRoaXMubykucCksMjE0KTpudWxsLHM9dShRKHQsKHNlKCksR2MpKSwyMSksdGhpcy5nPXMuSGMoKG9vKCksYmgpKSx0aGlzLmI9bmV3IGxlLHRoaXMuZD1uZXcgYmllKHRoaXMuZSksaD11KFEodGhpcy5qLE82KSwyMzApLHRoaXMucT11Y24oZSxoLHRoaXMuZSksdGhpcy5rPW5ldyB2UXQodGhpcyksbz1fMShjdChvdChRYmUsMSksSWUsMjI1LDAsW3RoaXMsdGhpcy5kLHRoaXMuayx0aGlzLnFdKSksZT09KFp2KCksT08pJiYhamUoUmUoUSh0LChUZSgpLEJ5KSkpKT8ocj1uZXcgeDR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBYd3QocixoLHUodGhpcy5xLDQwMikpKTplPT1PTyYmamUoUmUoUSh0LChUZSgpLEJ5KSkpKT8ocj1uZXcgeDR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBKZWUocixoLHUodGhpcy5xLDQwMikpKTp0aGlzLmM9bmV3IFFHdChlLHRoaXMpLHVlKG8sdGhpcy5jKSxMbGUobyx0aGlzLmUpLHRoaXMucz1kNW4odGhpcy5rKX1mdW5jdGlvbiBEM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2ZvcihNPXUobGooKGg9ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngoaCkpKSw4NiksVj1NP3UoUShNLChmYygpLFNodCkpLDg2KTpudWxsLHM9MTtNJiZWOyl7Zm9yKHc9MCxCdD0wLG49TSxyPVYsZD0wO2Q8cztkKyspbj16cnQobikscj16cnQociksQnQrPVh0KHllKFEobiwoZmMoKSxrNykpKSksdys9WHQoeWUoUShyLGs3KSkpO2lmKF90PVh0KHllKFEoViwoZmMoKSxZZykpKSksTHQ9WHQoeWUoUShNLFlnKSkpLEY9Y210KE0sViksSD1fdCt3K3QuYStGLUx0LUJ0LDA8SCl7Zm9yKGs9ZSxDPTA7ayYmayE9cjspKytDLGs9dShRKGsseVYpLDg2KTtpZihrKWZvcihndD1IL0Msaz1lO2shPXI7KXR0PVh0KHllKFEoayxZZykpKStILEp0KGssWWcsdHQpLFk9WHQoeWUoUShrLGs3KSkpK0gsSnQoayxrNyxZKSxILT1ndCxrPXUoUShrLHlWKSw4Nik7ZWxzZSByZXR1cm59KytzLE0uZC5iPT0wP009WTV0KG5ldyBDcChlKSxzKTpNPXUobGooKG89ZWkobmV3IENwKE0pLmEuZCwwKSxuZXcgYngobykpKSw4NiksVj1NP3UoUShNLFNodCksODYpOm51bGx9fWZ1bmN0aW9uIFlsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2Zvcih3PSEwLHM9MCxrPXQuZltlLnBdLEM9ZS5vLmIrdC5uLG49dC5jW2UucF1bMl0sYWgodC5hLGssZGUodShGZSh0LmEsayksMTkpLmEtMStuKSksYWgodC5iLGssWHQoeWUoRmUodC5iLGspKSktQytuKnQuZSksKytrLGs+PXQuaT8oKyt0LmksdWUodC5hLGRlKDEpKSx1ZSh0LmIsQykpOihyPXQuY1tlLnBdWzFdLGFoKHQuYSxrLGRlKHUoRmUodC5hLGspLDE5KS5hKzEtcikpLGFoKHQuYixrLFh0KHllKEZlKHQuYixrKSkpK0Mtcip0LmUpKSwodC5xPT0odzQoKSxNTykmJih1KEZlKHQuYSxrKSwxOSkuYT50Lmp8fHUoRmUodC5hLGstMSksMTkpLmE+dC5qKXx8dC5xPT1JTyYmKFh0KHllKEZlKHQuYixrKSkpPnQua3x8WHQoeWUoRmUodC5iLGstMSkpKT50LmspKSYmKHc9ITEpLGg9bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKGgpOylvPXUoTHIoaCksMTcpLGQ9by5jLmksdC5mW2QucF09PWsmJihNPVlsZSh0LGQpLHM9cyt1KE0uYSwxOSkuYSx3PXcmJmplKFJlKE0uYikpKTtyZXR1cm4gdC5mW2UucF09ayxzPXMrdC5jW2UucF1bMF0sbmV3IGxhKGRlKHMpLChGbigpLCEhdykpfWZ1bmN0aW9uIHZ4dCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKE09bmV3IENyLGg9bmV3IGxlLHZvZSh0LG4sdC5kLmZnKCksaCxNKSx2b2UodCxyLHQuZC5nZygpLGgsTSksdC5iPS4yKihZPWFjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBHUSkpLHR0PWFjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBWUSkpLGIuTWF0aC5taW4oWSx0dCkpLG89MCxkPTA7ZDxoLmMubGVuZ3RoLTE7ZCsrKWZvcih3PShBbihkLGguYy5sZW5ndGgpLHUoaC5jW2RdLDExMikpLFY9ZCsxO1Y8aC5jLmxlbmd0aDtWKyspbys9bHh0KHQsdywoQW4oVixoLmMubGVuZ3RoKSx1KGguY1tWXSwxMTIpKSk7Zm9yKEY9dShRKGUsKHNlKCksTzYpKSwyMzApLG8+PTImJihndD1BY2UoaCwhMCxGKSwhdC5lJiYodC5lPW5ldyBEJHQodCkpLGxobih0LmUsZ3QsaCx0LmIpKSxjYWUoaCxGKSxLM24oaCksSD0tMSxDPW5ldyBTKGgpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDExMiksIShiLk1hdGguYWJzKGsucy1rLmMpPHlkKSYmKEg9Yi5NYXRoLm1heChILGsubyksdC5kLmRnKGsscyx0LmMpKTtyZXR1cm4gdC5kLmEuYS4kYigpLEgrMX1mdW5jdGlvbiBYbGUodCxlKXt2YXIgbixyLHMsbyxoO249WHQoeWUoUShlLChUZSgpLHhmKSkpKSxuPDImJkp0KGUseGYsMikscj11KFEoZSxWbCksMTAzKSxyPT0oYW8oKSxjMCkmJkp0KGUsVmwsRXooZSkpLHM9dShRKGUsRndlKSwxOSkscy5hPT0wP0p0KGUsKHNlKCksTzYpLG5ldyB6aXQpOkp0KGUsKHNlKCksTzYpLG5ldyBUJChzLmEpKSxvPVJlKFEoZSxUUykpLG89PW51bGwmJkp0KGUsVFMsKEZuKCksR3QoUShlLFgwKSk9PT1HdCgocTAoKSxBNykpKSksdXMobmV3IFRuKG51bGwsbmV3IF9uKGUuYSwxNikpLG5ldyBncyh0KSksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBSNSksbmV3IHFpKHQpKSxoPW5ldyBIbGUoZSksSnQoZSwoc2UoKSxZNCksaCksdyQodC5hKSxVZCh0LmEsKFdhKCksQWQpLHUoUShlLFJ5KSwyNDYpKSxVZCh0LmEsbGIsdShRKGUsZUN0KSwyNDYpKSxVZCh0LmEsb3UsdShRKGUsRVMpLDI0NikpLFVkKHQuYSxxYyx1KFEoZSxyViksMjQ2KSksVWQodC5hLElvLGFjbih1KFEoZSxYMCksMjE4KSkpLG9VdCh0LmEsXzVuKGUpKSxKdChlLFJsdCxUcSh0LmEsZSkpfWZ1bmN0aW9uIE8zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7cmV0dXJuIEY9dC5jW2VdLEg9dC5jW25dLFY9dShRKEYsKHNlKCksSTYpKSwxNSksISFWJiZWLmdjKCkhPTAmJlYuSGMoSCl8fChZPUYuayE9KEduKCksWnMpJiZILmshPVpzLHR0PXUoUShGLEl3KSwxMCksZ3Q9dShRKEgsSXcpLDEwKSxMdD10dCE9Z3QsX3Q9ISF0dCYmdHQhPUZ8fCEhZ3QmJmd0IT1ILEJ0PWZzdChGLChiZSgpLE5uKSksWXQ9ZnN0KEgsbXIpLF90PV90fChmc3QoRixtcil8fGZzdChILE5uKSksY2U9X3QmJkx0fHxCdHx8WXQsWSYmY2UpfHxGLms9PShHbigpLEhjKSYmSC5rPT1Ec3x8SC5rPT0oR24oKSxIYykmJkYuaz09RHM/ITE6KEM9dC5jW2VdLG89dC5jW25dLHM9V3NlKHQuZSxDLG8sKGJlKCksQm4pKSx3PVdzZSh0LmksQyxvLEhuKSxDMm4odC5mLEMsbyksaz1icmUodC5iLEMsbykrdShzLmEsMTkpLmErdSh3LmEsMTkpLmErdC5mLmQsZD1icmUodC5iLG8sQykrdShzLmIsMTkpLmErdSh3LmIsMTkpLmErdC5mLmIsdC5hJiYoTT11KFEoQyxfaSksMTEpLGg9dShRKG8sX2kpLDExKSxyPUlzZSh0LmcsTSxoKSxrKz11KHIuYSwxOSkuYSxkKz11KHIuYiwxOSkuYSksaz5kKX1mdW5jdGlvbiBOM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO2ZvcihuPXUoUSh0LChUZSgpLG9zKSksOTgpLGg9dC5mLG89dC5kLGQ9aC5hK28uYitvLmMsdz0wLW8uZC10LmMuYixDPWguYitvLmQrby5hLXQuYy5iLGs9bmV3IGxlLE09bmV3IGxlLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxMCksbi5nKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpEMm4ocik7YnJlYWs7Y2FzZSA0OkY9dShRKHIsUHcpLDgpLEg9Rj9GLmE6MCxyLm4uYT1kKlh0KHllKFEociwoc2UoKSxEdykpKSktSCxmeihyLCEwLCExKTticmVhaztjYXNlIDU6Vj11KFEocixQdyksOCksWT1WP1YuYTowLHIubi5hPVh0KHllKFEociwoc2UoKSxEdykpKSktWSxmeihyLCEwLCExKSxoLmE9Yi5NYXRoLm1heChoLmEsci5uLmErci5vLmEvMil9c3dpdGNoKHUoUShyLChzZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpyLm4uYj13LGsuY1trLmMubGVuZ3RoXT1yO2JyZWFrO2Nhc2UgMzpyLm4uYj1DLE0uY1tNLmMubGVuZ3RoXT1yfX1zd2l0Y2gobi5nKXtjYXNlIDE6Y2FzZSAyOnpyZShrLHQpLHpyZShNLHQpO2JyZWFrO2Nhc2UgMzpxcmUoayx0KSxxcmUoTSx0KX19ZnVuY3Rpb24gUDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKEM9bmV3IGxlLE09bmV3IFAzLG89bnVsbCxzPTAscj0wO3I8ZS5sZW5ndGg7KytyKXN3aXRjaChuPWVbcl0sdHVuKG8sbikmJihzPWszdCh0LE0sQyxnVixzKSksVnMobiwoc2UoKSxJdykpJiYobz11KFEobixJdyksMTApKSxuLmsuZyl7Y2FzZSAwOmZvcih3PWkydChPeChZbyhuLChiZSgpLE5uKSksbmV3IEJGKSk7c2l0KHcpOyloPXUoSW10KHcpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7Zm9yKHM9azN0KHQsTSxDLGdWLHMpLGs9aTJ0KE94KFlvKG4sbXIpLG5ldyBCRikpO3NpdChrKTspaD11KEltdChrKSwxMSksdC5kW2gucF09cysrLEMuY1tDLmMubGVuZ3RoXT1oO2JyZWFrO2Nhc2UgMzpZbyhuLFhDdCkuZGMoKXx8KGg9dShZbyhuLFhDdCkuWGIoMCksMTEpLHQuZFtoLnBdPXMrKyxDLmNbQy5jLmxlbmd0aF09aCksWW8obixnVikuZGMoKXx8cXAoTSxuKTticmVhaztjYXNlIDE6Zm9yKGQ9WW8obiwoYmUoKSxCbikpLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7WW8obixIbikuSmMobmV3IFpHdChNLG4pKX1yZXR1cm4gazN0KHQsTSxDLGdWLHMpLEN9ZnVuY3Rpb24gUWxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdDtmb3Ioaz1zcyxDPXNzLGQ9VHMsdz1UcyxGPW5ldyBTKGUuaSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksNjUpLHM9dSh1KEpuKHQuZyxNLmEpLDQ2KS5iLDMzKSxtMShzLE0uYi5jLE0uYi5kKSxrPWIuTWF0aC5taW4oayxzLmkpLEM9Yi5NYXRoLm1pbihDLHMuaiksZD1iLk1hdGgubWF4KGQscy5pK3MuZyksdz1iLk1hdGgubWF4KHcscy5qK3MuZik7Zm9yKEg9dShxZSh0LmMsKHJEKCksZjNlKSksMTE2KSxndyh0LmMsZC1rKyhILmIrSC5jKSx3LUMrKEguZCtILmEpLCEwLCEwKSxBNHQodC5jLC1rK0guYiwtQytILmQpLHI9bmV3IGVyKF9YdCh0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksNzkpLGg9bTQobiwhMCwhMCksVj1aZChuKSx0dD1YcChuKSxZPW5ldyAkZShWLmkrVi5nLzIsVi5qK1YuZi8yKSxvPW5ldyAkZSh0dC5pK3R0LmcvMix0dC5qK3R0LmYvMiksZ3Q9bmEobmV3ICRlKG8uYSxvLmIpLFkpLGhFKGd0LFYuZyxWLmYpLExpKFksZ3QpLEx0PW5hKG5ldyAkZShZLmEsWS5iKSxvKSxoRShMdCx0dC5nLHR0LmYpLExpKG8sTHQpLG9qKGgsWS5hLFkuYiksYWooaCxvLmEsby5iKX1mdW5jdGlvbiBGM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZih0LmM9dC5kLFY9UmUoUShlLChUZSgpLEJ3ZSkpKSxIPVY9PW51bGx8fChPbihWKSxWKSxvPXUoUShlLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkscz11KFEoZSxvcyksOTgpLG49IShzPT0ob2EoKSxHMil8fHM9PWgwfHxzPT1WYyksSCYmKG58fCFvKSl7Zm9yKE09bmV3IFMoZS5hKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMCksay5wPTA7Zm9yKEY9bmV3IGxlLEM9bmV3IFMoZS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylpZihrPXUoSihDKSwxMCkscj1WdWUodCxrLG51bGwpLHIpe2Zvcih3PW5ldyBLbXQsTG8odyxlKSxKdCh3LE55LHUoci5iLDIxKSksU3d0KHcuZCxlLmQpLEp0KHcscDcsbnVsbCksZD11KHIuYSwxNSkuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTApLHVlKHcuYSxoKSxoLmE9dztGLkZjKHcpfW8mJihHdChRKGUsUDYpKT09PUd0KChldygpLEp1dCkpP3QuYz10LmI6dC5jPXQuYSl9ZWxzZSBGPW5ldyB3bChjdChvdChPYmUsMSksVWZlLDM3LDAsW2VdKSk7cmV0dXJuIEd0KFEoZSxQNikpIT09R3QoKGV3KCksJDQpKSYmKHZuKCksRi5hZChuZXcgSkspKSxGfWZ1bmN0aW9uIFpsZSh0KXtTdih0LG5ldyB3MihyYnQobVIoRXYoeXYoa3YoeHYobmV3IHBnLEhnKSwiRUxLIE1yLiBUcmVlIiksIlRyZWUtYmFzZWQgYWxnb3JpdGhtIHByb3ZpZGVkIGJ5IHRoZSBFY2xpcHNlIExheW91dCBLZXJuZWwuIENvbXB1dGVzIGEgc3Bhbm5pbmcgdHJlZSBvZiB0aGUgaW5wdXQgZ3JhcGggYW5kIGFycmFuZ2VzIGFsbCBub2RlcyBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdGluZyBwYXJlbnQtY2hpbGRyZW4gaGllcmFyY2h5LiBJIHBpdHkgdGhlIGZvb2wgd2hvIGRvZXNuJ3QgdXNlIE1yLiBUcmVlIExheW91dC4iKSxuZXcgWVEpLEQxZSksdW4oKHZFKCkseWZ0KSkpKSkseGUodCxIZyx3dyxzX3QpLHhlKHQsSGcsa3ksMjApLHhlKHQsSGcsYjYsQkUpLHhlKHQsSGcsakQsZGUoMSkpLHhlKHQsSGcsUF8sKEZuKCksITApKSx4ZSh0LEhnLEtELERlKHJfdCkpLHhlKHQsSGcsTDQsRGUoaXllKSkseGUodCxIZyx3NixEZShzeWUpKSx4ZSh0LEhnLHY2LERlKGF5ZSkpLHhlKHQsSGcsUkUsRGUocnllKSkseGUodCxIZyxGXyxEZShpX3QpKSx4ZSh0LEhnLGpFLERlKGN5ZSkpLHhlKHQsSGcsRmt0LERlKGx5ZSkpLHhlKHQsSGcsQmt0LERlKGFfdCkpfWZ1bmN0aW9uIEIzbih0KXt0LnF8fCh0LnE9ITAsdC5wPWljKHQsMCksdC5hPWljKHQsMSksUGkodC5hLDApLHQuZj1pYyh0LDIpLFBpKHQuZiwxKSxlcyh0LmYsMiksdC5uPWljKHQsMyksZXModC5uLDMpLGVzKHQubiw0KSxlcyh0Lm4sNSksZXModC5uLDYpLHQuZz1pYyh0LDQpLFBpKHQuZyw3KSxlcyh0LmcsOCksdC5jPWljKHQsNSksUGkodC5jLDcpLFBpKHQuYyw4KSx0Lmk9aWModCw2KSxQaSh0LmksOSksUGkodC5pLDEwKSxQaSh0LmksMTEpLFBpKHQuaSwxMiksZXModC5pLDEzKSx0Lmo9aWModCw3KSxQaSh0LmosOSksdC5kPWljKHQsOCksUGkodC5kLDMpLFBpKHQuZCw0KSxQaSh0LmQsNSksUGkodC5kLDYpLGVzKHQuZCw3KSxlcyh0LmQsOCksZXModC5kLDkpLGVzKHQuZCwxMCksdC5iPWljKHQsOSksZXModC5iLDApLGVzKHQuYiwxKSx0LmU9aWModCwxMCksZXModC5lLDEpLGVzKHQuZSwyKSxlcyh0LmUsMyksZXModC5lLDQpLFBpKHQuZSw1KSxQaSh0LmUsNiksUGkodC5lLDcpLFBpKHQuZSw4KSxQaSh0LmUsOSksUGkodC5lLDEwKSxlcyh0LmUsMTEpLHQuaz1pYyh0LDExKSxlcyh0LmssMCksZXModC5rLDEpLHQubz1haSh0LDEyKSx0LnM9YWkodCwxMykpfWZ1bmN0aW9uIHd4dCh0LGUpe2UuZGMoKSYmR2QodC5qLCEwLCEwLCEwLCEwKSx5aShlLChiZSgpLFNmKSkmJkdkKHQuaiwhMCwhMCwhMCwhMSkseWkoZSx2aCkmJkdkKHQuaiwhMSwhMCwhMCwhMCkseWkoZSxXbCkmJkdkKHQuaiwhMCwhMCwhMSwhMCkseWkoZSxxaCkmJkdkKHQuaiwhMCwhMSwhMCwhMCkseWkoZSx0bCkmJkdkKHQuaiwhMSwhMCwhMCwhMSkseWkoZSx3aCkmJkdkKHQuaiwhMSwhMCwhMSwhMCkseWkoZSxLbCkmJkdkKHQuaiwhMCwhMSwhMSwhMCkseWkoZSxBZikmJkdkKHQuaiwhMCwhMSwhMCwhMSkseWkoZSxfdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSx1dSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxfdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxDdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxTdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxlbCkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxVYykmJkdkKHQuaiwhMCwhMCwhMCwhMCl9ZnVuY3Rpb24gUjNuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3Iobz1uZXcgbGUsaz1uZXcgUyhyKTtrLmE8ay5jLmMubGVuZ3RoOylpZihkPXUoSihrKSw0NDEpLGg9bnVsbCxkLmY9PShzbygpLGV1KSlmb3IoVj1uZXcgUyhkLmUpO1YuYTxWLmMuYy5sZW5ndGg7KUg9dShKKFYpLDE3KSx0dD1ILmQuaSxGYSh0dCk9PWU/ZGVlKHQsZSxkLEgsZC5iLEguZCk6IW58fFY4KHR0LG4pP3cwbih0LGUsZCxyLEgpOihGPUVhdCh0LGUsbixILGQuYixldSxoKSxGIT1oJiYoby5jW28uYy5sZW5ndGhdPUYpLEYuYyYmKGg9RikpO2Vsc2UgZm9yKE09bmV3IFMoZC5lKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwxNyksWT1DLmMuaSxGYShZKT09ZSlkZWUodCxlLGQsQyxDLmMsZC5iKTtlbHNle2lmKCFufHxWOChZLG4pKWNvbnRpbnVlO0Y9RWF0KHQsZSxuLEMsZC5iLEp1LGgpLEYhPWgmJihvLmNbby5jLmxlbmd0aF09RiksRi5jJiYoaD1GKX1mb3Iodz1uZXcgUyhvKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSw0NDEpLFJvKGUuYSxkLmEsMCkhPS0xfHx1ZShlLmEsZC5hKSxkLmMmJihzLmNbcy5jLmxlbmd0aF09ZCl9ZnVuY3Rpb24gajNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3Ioaz1uZXcgbGUsdz1uZXcgUyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihoPXUoSih3KSwxMCksRj1ZbyhoLChiZSgpLEhuKSkuS2MoKTtGLk9iKCk7KWZvcihNPXUoRi5QYigpLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCEoIVZhKHIpJiZyLmMuaS5jPT1yLmQuaS5jfHxWYShyKXx8ci5kLmkuYyE9bikmJihrLmNbay5jLmxlbmd0aF09cik7Zm9yKGQ9YTIobi5hKS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTApLEY9WW8oaCwoYmUoKSxCbikpLktjKCk7Ri5PYigpOylmb3IoTT11KEYuUGIoKSwxMSkscz1uZXcgUyhNLmUpO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDE3KSwhKCFWYShyKSYmci5jLmkuYz09ci5kLmkuY3x8VmEocil8fHIuYy5pLmMhPWUpKXtmb3IoQz1uZXcgaGEoayxrLmMubGVuZ3RoKSxvPShRbihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO28hPXImJkMuYj4wOyl0LmFbby5wXT0hMCx0LmFbci5wXT0hMCxvPShRbihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO0MuYj4wJiZFbChDKX19ZnVuY3Rpb24gSmxlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07aWYodC5hIT1lLkFqKCkpdGhyb3cgcnQobmV3IFBuKEhFK2UubmUoKStrdykpO2lmKHI9T2coKFJ1KCksbWEpLGUpLiRrKCkscilyZXR1cm4gci5BaigpLk5oKCkuSWgocixuKTtpZihoPU9nKG1hLGUpLmFsKCksaCl7aWYobj09bnVsbClyZXR1cm4gbnVsbDtpZihkPXUobiwxNSksZC5kYygpKXJldHVybiIiO2ZvcihNPW5ldyB4ZyxvPWQuS2MoKTtvLk9iKCk7KXM9by5QYigpLGZvKE0saC5BaigpLk5oKCkuSWgoaCxzKSksTS5hKz0iICI7cmV0dXJuIFdldChNLE0uYS5sZW5ndGgtMSl9aWYoQz1PZyhtYSxlKS5ibCgpLCFDLmRjKCkpe2ZvcihrPUMuS2MoKTtrLk9iKCk7KWlmKHc9dShrLlBiKCksMTQ4KSx3LndqKG4pKXRyeXtpZihNPXcuQWooKS5OaCgpLkloKHcsbiksTSE9bnVsbClyZXR1cm4gTX1jYXRjaChGKXtpZihGPVdpKEYpLCFFdChGLDEwMikpdGhyb3cgcnQoRil9dGhyb3cgcnQobmV3IFBuKCJJbnZhbGlkIHZhbHVlOiAnIituKyInIGZvciBkYXRhdHlwZSA6IitlLm5lKCkpKX1yZXR1cm4gdShlLDgzNCkuRmooKSxuPT1udWxsP251bGw6RXQobiwxNzIpPyIiK3UobiwxNzIpLmE6c2wobik9PUhIP1NVdChyQVswXSx1KG4sMTk5KSk6JG8obil9ZnVuY3Rpb24gJDNuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihrPW5ldyBRaSxkPW5ldyBRaSxvPW5ldyBTKHQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEyOCksci52PTAsci5uPXIuaS5jLmxlbmd0aCxyLnU9ci50LmMubGVuZ3RoLHIubj09MCYmaHMoayxyLGsuYy5iLGsuYyksci51PT0wJiZyLnIuYS5nYygpPT0wJiZocyhkLHIsZC5jLmIsZC5jKTtmb3IoaD0tMTtrLmIhPTA7KWZvcihyPXUoeXN0KGssMCksMTI4KSxuPW5ldyBTKHIudCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjY4KSxDPWUuYixDLnY9Yi5NYXRoLm1heChDLnYsci52KzEpLGg9Yi5NYXRoLm1heChoLEMudiksLS1DLm4sQy5uPT0wJiZocyhrLEMsay5jLmIsay5jKTtpZihoPi0xKXtmb3Iocz1laShkLDApO3MuYiE9cy5kLmM7KXI9dSh0aShzKSwxMjgpLHIudj1oO2Zvcig7ZC5iIT0wOylmb3Iocj11KHlzdChkLDApLDEyOCksbj1uZXcgUyhyLmkpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI2OCksdz1lLmEsdy5yLmEuZ2MoKT09MCYmKHcudj1iLk1hdGgubWluKHcudixyLnYtMSksLS13LnUsdy51PT0wJiZocyhkLHcsZC5jLmIsZC5jKSl9fWZ1bmN0aW9uIHRoZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx3O3JldHVybiB3PXNzLGg9ITEsZD1jeHQodCxuYShuZXcgJGUoZS5hLGUuYiksdCksTGkobmV3ICRlKG4uYSxuLmIpLHMpLG5hKG5ldyAkZShyLmEsci5iKSxuKSksbz0hIWQmJiEoYi5NYXRoLmFicyhkLmEtdC5hKTw9eXcmJmIuTWF0aC5hYnMoZC5iLXQuYik8PXl3fHxiLk1hdGguYWJzKGQuYS1lLmEpPD15dyYmYi5NYXRoLmFicyhkLmItZS5iKTw9eXcpLGQ9Y3h0KHQsbmEobmV3ICRlKGUuYSxlLmIpLHQpLG4scyksZCYmKChiLk1hdGguYWJzKGQuYS10LmEpPD15dyYmYi5NYXRoLmFicyhkLmItdC5iKTw9eXcpPT0oYi5NYXRoLmFicyhkLmEtZS5hKTw9eXcmJmIuTWF0aC5hYnMoZC5iLWUuYik8PXl3KXx8bz93PWIuTWF0aC5taW4odyxBQyhuYShkLG4pKSk6aD0hMCksZD1jeHQodCxuYShuZXcgJGUoZS5hLGUuYiksdCkscixzKSxkJiYoaHx8KGIuTWF0aC5hYnMoZC5hLXQuYSk8PXl3JiZiLk1hdGguYWJzKGQuYi10LmIpPD15dyk9PShiLk1hdGguYWJzKGQuYS1lLmEpPD15dyYmYi5NYXRoLmFicyhkLmItZS5iKTw9eXcpfHxvKSYmKHc9Yi5NYXRoLm1pbih3LEFDKG5hKGQscikpKSksd31mdW5jdGlvbiBlaGUodCl7U3YodCxuZXcgdzIobVIoRXYoeXYoa3YoeHYobmV3IHBnLHJiKSxHZmUpLCJNaW5pbWl6ZXMgdGhlIHN0cmVzcyB3aXRoaW4gYSBsYXlvdXQgdXNpbmcgc3RyZXNzIG1ham9yaXphdGlvbi4gU3RyZXNzIGV4aXN0cyBpZiB0aGUgZXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gYSBwYWlyIG9mIG5vZGVzIGRvZXNuJ3QgbWF0Y2ggdGhlaXIgZ3JhcGggdGhlb3JldGljIGRpc3RhbmNlLCB0aGF0IGlzLCB0aGUgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIHRoZSB0d28gbm9kZXMuIFRoZSBtZXRob2QgYWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBlZGdlIGxlbmd0aHMuIiksbmV3IGwxKSxxbCkpKSx4ZSh0LHJiLCRELERlKHg3dCkpLHhlKHQscmIsR3EsKEZuKCksITApKSx4ZSh0LHJiLEw0LERlKGZiZSkpLHhlKHQscmIsdzYsRGUoZGJlKSkseGUodCxyYix2NixEZShnYmUpKSx4ZSh0LHJiLFJFLERlKGhiZSkpLHhlKHQscmIsRl8sRGUoRTd0KSkseGUodCxyYixqRSxEZShwYmUpKSx4ZSh0LHJiLGg2dCxEZSh5N3QpKSx4ZSh0LHJiLGQ2dCxEZSh3N3QpKSx4ZSh0LHJiLGc2dCxEZShtN3QpKSx4ZSh0LHJiLHA2dCxEZShrN3QpKSx4ZSh0LHJiLGY2dCxEZShvRykpfWZ1bmN0aW9uIHozbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKHdyKGUsIkludGVyYWN0aXZlIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwyOSksci5wPWgrKztmb3IoRj1tNHQodCksdHQ9bmV3IGlidChGLmxlbmd0aCksTGxlKG5ldyB3bChjdChvdChRYmUsMSksSWUsMjI1LDAsW3R0XSkpLEYpLFk9MCxoPTAscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXtmb3Iocj11KEoocyksMjkpLG49MCxNPTAsQz1uZXcgUyhyLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih3PXUoSihDKSwxMCksdy5uLmE+MCYmKG4rPXcubi5hK3cuby5hLzIsKytNKSxWPW5ldyBTKHcuaik7Vi5hPFYuYy5jLmxlbmd0aDspSD11KEooViksMTEpLEgucD1ZKys7Zm9yKE0+MCYmKG4vPU0pLGd0PVB0KGlhLHZvLDI1LHIuYS5jLmxlbmd0aCwxNSwxKSxkPTAsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSx3LnA9ZCsrLGd0W3cucF09TDNuKHcsbiksdy5rPT0oR24oKSxacykmJkp0KHcsKHNlKCksdDl0KSxndFt3LnBdKTt2bigpLFhzKHIuYSxuZXcgbCR0KGd0KSksanVlKHR0LEYsaCwhMCksKytofW9yKGUpfWZ1bmN0aW9uIF9fKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKGUuZT09NSl7V2xlKHQsZSk7cmV0dXJufWlmKGs9ZSwhKGsuYj09bnVsbHx8dC5iPT1udWxsKSl7Zm9yKGI0KHQpLFRfKHQpLGI0KGspLFRfKGspLG49UHQoVHIsWHIsMjUsdC5iLmxlbmd0aCtrLmIubGVuZ3RoLDE1LDEpLEM9MCxyPTAsaD0wO3I8dC5iLmxlbmd0aCYmaDxrLmIubGVuZ3RoOylpZihzPXQuYltyXSxvPXQuYltyKzFdLGQ9ay5iW2hdLHc9ay5iW2grMV0sbzxkKW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107ZWxzZSBpZihvPj1kJiZzPD13KWQ8PXMmJm88PXc/cis9MjpkPD1zPyh0LmJbcl09dysxLGgrPTIpOm88PXc/KG5bQysrXT1zLG5bQysrXT1kLTEscis9Mik6KG5bQysrXT1zLG5bQysrXT1kLTEsdC5iW3JdPXcrMSxoKz0yKTtlbHNlIGlmKHc8cyloKz0yO2Vsc2UgdGhyb3cgcnQobmV3IEdvKCJUb2tlbiNzdWJ0cmFjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIrdC5iW3JdKyIsIit0LmJbcisxXSsiXSAtIFsiK2suYltoXSsiLCIray5iW2grMV0rIl0iKSk7Zm9yKDtyPHQuYi5sZW5ndGg7KW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107dC5iPVB0KFRyLFhyLDI1LEMsMTUsMSksSWMobiwwLHQuYiwwLEMpfX1mdW5jdGlvbiBxM24odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuQS5kYygpKXtpZih0LkEuSGMoKF9sKCksbk4pKSYmKHUoZ28odC5iLChiZSgpLE5uKSksMTI0KS5rPSEwLHUoZ28odC5iLG1yKSwxMjQpLms9ITAsZT10LnEhPShvYSgpLGgwKSYmdC5xIT1WYyxlTSh1KGdvKHQuYixIbiksMTI0KSxlKSxlTSh1KGdvKHQuYixCbiksMTI0KSxlKSxlTSh0LmcsZSksdC5BLkhjKFYyKSYmKHUoZ28odC5iLE5uKSwxMjQpLmo9ITAsdShnbyh0LmIsbXIpLDEyNCkuaj0hMCx1KGdvKHQuYixIbiksMTI0KS5rPSEwLHUoZ28odC5iLEJuKSwxMjQpLms9ITAsdC5nLms9ITApKSx0LkEuSGMoZU4pKWZvcih0LmEuaj0hMCx0LmEuaz0hMCx0Lmcuaj0hMCx0Lmcuaz0hMCxkPXQuQi5IYygoY2woKSxlQSkpLHM9Sml0KCksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sbj11KGdvKHQuaSxyKSwzMDYpLG4mJihTM3Qocik/KG4uaj0hMCxuLms9ITApOihuLmo9IWQsbi5rPSFkKSk7dC5BLkhjKFh5KSYmdC5CLkhjKChjbCgpLGlOKSkmJih0Lmcuaj0hMCx0Lmcuaj0hMCx0LmEuanx8KHQuYS5qPSEwLHQuYS5rPSEwLHQuYS5lPSEwKSl9fWZ1bmN0aW9uIEgzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKHI9bmV3IFModC5lLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWlmKHM9dShKKG8pLDEwKSxIPXQuaVtzLnBdLGs9SC5hLmUsdz1ILmQuZSxzLm4uYj1rLGd0PXctay1zLm8uYixlPXhhdChzKSxGPShzeSgpLChzLnE/cy5xOih2bigpLHZuKCksYTApKS5fYigoVGUoKSxOdykpP009dShRKHMsTncpLDE5Nyk6TT11KFEoRmEocyksQ1MpLDE5NyksTSksZSYmKEY9PXQ1fHxGPT1KNCkmJihzLm8uYis9Z3QpLGUmJihGPT1jaHR8fEY9PXQ1fHxGPT1KNCkpe2ZvcihZPW5ldyBTKHMuaik7WS5hPFkuYy5jLmxlbmd0aDspVj11KEooWSksMTEpLChiZSgpLHV1KS5IYyhWLmopJiYoQz11KEpuKHQuayxWKSwxMjEpLFYubi5iPUMuZS1rKTtmb3IoZD1uZXcgUyhzLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDcwKSx0dD11KFEocyxPdyksMjEpLHR0LkhjKChmeSgpLHpoKSk/aC5uLmIrPWd0OnR0LkhjKGwwKSYmKGgubi5iKz1ndC8yKTsoRj09dDV8fEY9PUo0KSYmWW8ocywoYmUoKSxtcikpLkpjKG5ldyBfJHQoZ3QpKX19ZnVuY3Rpb24gbmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixIO2lmKCF0LmIpcmV0dXJuITE7Zm9yKGg9bnVsbCxGPW51bGwsdz1uZXcgJHJ0KG51bGwsbnVsbCkscz0xLHcuYVsxXT10LmIsTT13O00uYVtzXTspaz1zLGQ9RixGPU0sTT1NLmFbc10scj10LmEudWUoZSxNLmQpLHM9cjwwPzA6MSxyPT0wJiYoIW4uY3x8UGMoTS5lLG4uZCkpJiYoaD1NKSwhKE0mJk0uYikmJiFBbShNLmFbc10pJiYoQW0oTS5hWzEtc10pP0Y9Ri5hW2tdPW56KE0scyk6QW0oTS5hWzEtc10pfHwoSD1GLmFbMS1rXSxIJiYoIUFtKEguYVsxLWtdKSYmIUFtKEguYVtrXSk/KEYuYj0hMSxILmI9ITAsTS5iPSEwKToobz1kLmFbMV09PUY/MTowLEFtKEguYVtrXSk/ZC5hW29dPXVadChGLGspOkFtKEguYVsxLWtdKSYmKGQuYVtvXT1ueihGLGspKSxNLmI9ZC5hW29dLmI9ITAsZC5hW29dLmFbMF0uYj0hMSxkLmFbb10uYVsxXS5iPSExKSkpKTtyZXR1cm4gaCYmKG4uYj0hMCxuLmQ9aC5lLE0hPWgmJihDPW5ldyAkcnQoTS5kLE0uZSksdTBuKHQsdyxoLEMpLEY9PWgmJihGPUMpKSxGLmFbRi5hWzFdPT1NPzE6MF09TS5hW00uYVswXT8wOjFdLC0tdC5jKSx0LmI9dy5hWzFdLHQuYiYmKHQuYi5iPSExKSxuLmJ9ZnVuY3Rpb24gRzNuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtmb3Iocz1uZXcgUyh0LmEuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksNTcpLHc9ci5jLktjKCk7dy5PYigpOylkPXUody5QYigpLDU3KSxyLmEhPWQuYSYmKE9wKHQuYS5kKT9NPXQuYS5nLk9lKHIsZCk6TT10LmEuZy5QZShyLGQpLG89ci5iLmErci5kLmIrTS1kLmIuYSxvPWIuTWF0aC5jZWlsKG8pLG89Yi5NYXRoLm1heCgwLG8pLFBtdChyLGQpPyhoPUR2KG5ldyBVYix0LmQpLGs9cHMoYi5NYXRoLmNlaWwoZC5iLmEtci5iLmEpKSxlPWstKGQuYi5hLXIuYi5hKSxDPUh4KHIpLmEsbj1yLEN8fChDPUh4KGQpLmEsZT0tZSxuPWQpLEMmJihuLmIuYS09ZSxDLm4uYS09ZSksdmYob2YoYWYoY2Yoc2YobmV3IEVoLGIuTWF0aC5tYXgoMCxrKSksMSksaCksdC5jW3IuYS5kXSkpLHZmKG9mKGFmKGNmKHNmKG5ldyBFaCxiLk1hdGgubWF4KDAsLWspKSwxKSxoKSx0LmNbZC5hLmRdKSkpOihGPTEsKEV0KHIuZywxNDUpJiZFdChkLmcsMTApfHxFdChkLmcsMTQ1KSYmRXQoci5nLDEwKSkmJihGPTIpLHZmKG9mKGFmKGNmKHNmKG5ldyBFaCxwcyhvKSksRiksdC5jW3IuYS5kXSksdC5jW2QuYS5kXSkpKSl9ZnVuY3Rpb24gcmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtpZihuKWZvcihyPS0xLEM9bmV3IGhhKGUsMCk7Qy5iPEMuZC5nYygpOyl7aWYoZD0oUW4oQy5iPEMuZC5nYygpKSx1KEMuZC5YYihDLmM9Qy5iKyspLDEwKSksTT10LmNbZC5jLnBdW2QucF0uYSxNPT1udWxsKXtmb3IoaD1yKzEsbz1uZXcgaGEoZSxDLmIpO28uYjxvLmQuZ2MoKTspaWYoRj1PWGUodCwoUW4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDEwKSkpLmEsRiE9bnVsbCl7aD0oT24oRiksRik7YnJlYWt9TT0ocitoKS8yLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9KE9uKE0pLE0pLHQuY1tkLmMucF1bZC5wXS5iPTF9cj0oT24oTSksTSl9ZWxzZXtmb3Iocz0wLGs9bmV3IFMoZSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLHQuY1tkLmMucF1bZC5wXS5hIT1udWxsJiYocz1iLk1hdGgubWF4KHMsWHQodC5jW2QuYy5wXVtkLnBdLmEpKSk7Zm9yKHMrPTIsdz1uZXcgUyhlKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxMCksdC5jW2QuYy5wXVtkLnBdLmE9PW51bGwmJihNPW9sKHQuaSwyNCkqUEQqcy0xLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9TSx0LmNbZC5jLnBdW2QucF0uYj0xKX19ZnVuY3Rpb24gVjNuKCl7cmkoWnksbmV3IG9CKSxyaShacixuZXcgZkIpLHJpKEdoLG5ldyBmSikscmkoaTEsbmV3IGpMKSxyaShDZnQsbmV3ICRMKSxyaShpVSxuZXcgcngpLHJpKGVnLG5ldyBkSikscmkobkEsbmV3IGdKKSxyaShvTixuZXcgUVopLHJpKG1mdCxuZXcgWlopLHJpKGtiLG5ldyBKWikscmkoVmgsbmV3IHRKKSxyaShyMSxuZXcgZUopLHJpKHp3LG5ldyBuSikscmkoSnksbmV3IGFCKSxyaShBdSxuZXcgckopLHJpKFF5LG5ldyBpSikscmkoY2MsbmV3IHNKKSxyaShobyxuZXcgSWspLHJpKGx1LG5ldyBaVCkscmkoQnMsbmV3IGNCKSxyaShvdChIdSwxKSxuZXcgYUopLHJpKEU2LG5ldyB1QikscmkoYVMsbmV3IGxCKSxyaShISCxuZXcgb0opLHJpKFNMdCxuZXcgSlQpLHJpKGNhLG5ldyBrbSkscmkocUF0LG5ldyBoQikscmkoVkF0LG5ldyBjSikscmkoZ0x0LG5ldyB1Sikscmkoc1UsbmV3IHQ5KSxyaShYRSxuZXcgZEIpLHJpKGphLG5ldyBnQikscmkoVTh0LG5ldyB1YykscmkoVHcsbmV3IGxKKSxyaShXOHQsbmV3IHBCKSxyaShsTHQsbmV3IGU5KSxyaShBTHQsbmV3IGhKKSxyaShDdyxuZXcgbjkpLHJpKEFlLG5ldyBiQikscmkoR0F0LG5ldyByOSkscmkoTEx0LG5ldyBpOSl9ZnVuY3Rpb24gVTNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKCFuJiYobj1BY24oZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkpKSxzPShlLnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1uLmEpKjZlNCxkPW5ldyBIMnQoT2Eoa3UoZS5xLmdldFRpbWUoKSkscykpLHc9ZCxkLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSE9ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkmJihzPjA/cy09ODY0ZTU6cys9ODY0ZTUsdz1uZXcgSDJ0KE9hKGt1KGUucS5nZXRUaW1lKCkpLHMpKSksQz1uZXcgTG0saz10LmEubGVuZ3RoLG89MDtvPGs7KWlmKHI9YmEodC5hLG8pLHI+PTk3JiZyPD0xMjJ8fHI+PTY1JiZyPD05MCl7Zm9yKGg9bysxO2g8ayYmYmEodC5hLGgpPT1yOysraCk7JDVuKEMscixoLW8sZCx3LG4pLG89aH1lbHNlIGlmKHI9PTM5KXtpZigrK28sbzxrJiZiYSh0LmEsbyk9PTM5KXtDLmErPSInIiwrK287Y29udGludWV9Zm9yKE09ITE7IU07KXtmb3IoaD1vO2g8ayYmYmEodC5hLGgpIT0zOTspKytoO2lmKGg+PWspdGhyb3cgcnQobmV3IFBuKCJNaXNzaW5nIHRyYWlsaW5nICciKSk7aCsxPGsmJmJhKHQuYSxoKzEpPT0zOT8rK2g6TT0hMCxWcihDLERsKHQuYSxvLGgpKSxvPWgrMX19ZWxzZSBDLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksKytvO3JldHVybiBDLmF9ZnVuY3Rpb24gVzNuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKGU9bnVsbCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIzMyksWHQoeDEobi5nLG4uZFswXSkuYSksbi5iPW51bGwsbi5lJiZuLmUuZ2MoKT4wJiZuLmM9PTAmJighZSYmKGU9bmV3IGxlKSxlLmNbZS5jLmxlbmd0aF09bik7aWYoZSlmb3IoO2UuYy5sZW5ndGghPTA7KXtpZihuPXUoQWcoZSwwKSwyMzMpLG4uYiYmbi5iLmMubGVuZ3RoPjApe2ZvcihvPSghbi5iJiYobi5iPW5ldyBsZSksbmV3IFMobi5iKSk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMjMzKSxsTSh4MShzLmcscy5kWzBdKS5hKT09bE0oeDEobi5nLG4uZFswXSkuYSkpe2lmKFJvKHQscywwKT5Sbyh0LG4sMCkpcmV0dXJuIG5ldyBsYShzLG4pfWVsc2UgaWYoWHQoeDEocy5nLHMuZFswXSkuYSk+WHQoeDEobi5nLG4uZFswXSkuYSkpcmV0dXJuIG5ldyBsYShzLG4pfWZvcihkPSghbi5lJiYobi5lPW5ldyBsZSksbi5lKS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwyMzMpLHc9KCFoLmImJihoLmI9bmV3IGxlKSxoLmIpLFVtKDAsdy5jLmxlbmd0aCksVzkody5jLDAsbiksaC5jPT13LmMubGVuZ3RoJiYoZS5jW2UuYy5sZW5ndGhdPWgpfXJldHVybiBudWxsfWZ1bmN0aW9uIGloZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZih0PT1udWxsKXJldHVybiBUdTtpZih3PWUuYS56Yyh0LGUpLHchPW51bGwpcmV0dXJuIlsuLi5dIjtmb3Iobj1uZXcgYzIoS2EsIlsiLCJdIikscz10LG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHIhPW51bGwmJnNsKHIpLmkmND9BcnJheS5pc0FycmF5KHIpJiYoQz14SShyKSwhKEM+PTE0JiZDPD0xNikpP2UuYS5fYihyKT8obi5hP1ZyKG4uYSxuLmIpOm4uYT1uZXcgSWwobi5kKSxjQyhuLmEsIlsuLi5dIikpOihkPXMyKHIpLGs9bmV3IHlDKGUpLFAwKG4saWhlKGQsaykpKTpFdChyLDE3Nyk/UDAobixCZ24odShyLDE3NykpKTpFdChyLDE5MCk/UDAobixfZG4odShyLDE5MCkpKTpFdChyLDE5NSk/UDAobixGMG4odShyLDE5NSkpKTpFdChyLDIwMTIpP1AwKG4sU2RuKHUociwyMDEyKSkpOkV0KHIsNDgpP1AwKG4sRmduKHUociw0OCkpKTpFdChyLDM2NCk/UDAobixYZ24odShyLDM2NCkpKTpFdChyLDgzMik/UDAobixQZ24odShyLDgzMikpKTpFdChyLDEwNCkmJlAwKG4sTmduKHUociwxMDQpKSk6UDAobixyPT1udWxsP1R1OiRvKHIpKTtyZXR1cm4gbi5hP24uZS5sZW5ndGg9PTA/bi5hLmE6bi5hLmErKCIiK24uZSk6bi5jfWZ1bmN0aW9uIHNoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKGQ9bTQoZSwhMSwhMSksZ3Q9c0QoZCksciYmKGd0PUJJKGd0KSksX3Q9WHQoeWUocWUoZSwoaV8oKSwkdXQpKSkpLHR0PShRbihndC5iIT0wKSx1KGd0LmEuYS5jLDgpKSxNPXUoUWYoZ3QsMSksOCksZ3QuYj4yPyhDPW5ldyBsZSxBcyhDLG5ldyBLZChndCwxLGd0LmIpKSxvPVJoZShDLF90K3QuYSksTHQ9bmV3IFZzdChvKSxMbyhMdCxlKSxuLmNbbi5jLmxlbmd0aF09THQpOnI/THQ9dShKbih0LmIsWmQoZSkpLDI2Nik6THQ9dShKbih0LmIsWHAoZSkpLDI2Niksdz1aZChlKSxyJiYodz1YcChlKSksaD1uZ24odHQsdyksaz1fdCt0LmEsaC5hPyhrKz1iLk1hdGguYWJzKHR0LmItTS5iKSxZPW5ldyAkZShNLmEsKE0uYit0dC5iKS8yKSk6KGsrPWIuTWF0aC5hYnModHQuYS1NLmEpLFk9bmV3ICRlKChNLmErdHQuYSkvMixNLmIpKSxyP2tpKHQuZCxlLG5ldyBxM3QoTHQsaCxZLGspKTpraSh0LmMsZSxuZXcgcTN0KEx0LGgsWSxrKSksa2kodC5iLGUsTHQpLFY9KCFlLm4mJihlLm49bmV3IGhlKHFvLGUsMSw3KSksZS5uKSxIPW5ldyBlcihWKTtILmUhPUguaS5nYygpOylGPXUoZHIoSCksMTM3KSxzPWJEKHQsRiwhMCwwLDApLG4uY1tuLmMubGVuZ3RoXT1zfWZ1bmN0aW9uIEszbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQztmb3Ioaz1uZXcgbGUsZD1uZXcgbGUsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMTIpLG5NKHMscy5mLmMubGVuZ3RoKSx4OShzLHMuay5jLmxlbmd0aCkscy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPXMpLHMuaT09MCYmcy5lLmI9PTAmJihkLmNbZC5jLmxlbmd0aF09cyk7Zm9yKHI9LTE7ay5jLmxlbmd0aCE9MDspZm9yKHM9dShBZyhrLDApLDExMiksbj1uZXcgUyhzLmspO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksQz1lLmIsWUIoQyxiLk1hdGgubWF4KEMubyxzLm8rMSkpLHI9Yi5NYXRoLm1heChyLEMubyksbk0oQyxDLmQtMSksQy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPUMpO2lmKHI+LTEpe2ZvcihvPW5ldyBTKGQpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExMikscy5vPXI7Zm9yKDtkLmMubGVuZ3RoIT0wOylmb3Iocz11KEFnKGQsMCksMTEyKSxuPW5ldyBTKHMuZik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTI5KSx3PWUuYSwhKHcuZS5iPjApJiYoWUIodyxiLk1hdGgubWluKHcubyxzLm8tMSkpLHg5KHcsdy5pLTEpLHcuaT09MCYmKGQuY1tkLmMubGVuZ3RoXT13KSl9fWZ1bmN0aW9uIF9FKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztpZihrPXQuYywhZSYmKGU9dEx0KSx0LmM9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHc9bmV3IFFzKHQsMSwyLGssdC5jKSxuP24uRWkodyk6bj13KSxrIT1lKXtpZihFdCh0LkNiLDI4NCkpdC5EYj4+MTY9PS0xMD9uPXUodC5DYiwyODQpLm5rKGUsbik6dC5EYj4+MTY9PS0xNSYmKCFlJiYoZT0oZG4oKSxWMSkpLCFrJiYoaz0oZG4oKSxWMSkpLHQuQ2IubmgoKSYmKHc9bmV3IEYwKHQuQ2IsMSwxMyxrLGUsRmcoaWwodSh0LkNiLDU5KSksdCksITEpLG4/bi5FaSh3KTpuPXcpKTtlbHNlIGlmKEV0KHQuQ2IsODgpKXQuRGI+PjE2PT0tMjMmJihFdChlLDg4KXx8KGU9KGRuKCksV2gpKSxFdChrLDg4KXx8KGs9KGRuKCksV2gpKSx0LkNiLm5oKCkmJih3PW5ldyBGMCh0LkNiLDEsMTAsayxlLEZnKExjKHUodC5DYiwyNikpLHQpLCExKSxuP24uRWkodyk6bj13KSk7ZWxzZSBpZihFdCh0LkNiLDQ0NCkpZm9yKGQ9dSh0LkNiLDgzNiksaD0oIWQuYiYmKGQuYj1uZXcgY1IobmV3IFl0dCkpLGQuYiksbz0ocj1uZXcgaDIobmV3IHdnKGguYSkuYSksbmV3IHVSKHIpKTtvLmEuYjspcz11KFl2KG8uYSkuY2QoKSw4Nyksbj1fRShzLG9xKHMsZCksbil9cmV0dXJuIG59ZnVuY3Rpb24gWTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtmb3IoaD1qZShSZShxZSh0LChUZSgpLCR5KSkpKSxGPXUocWUodCxxeSksMjEpLHc9ITEsaz0hMSxNPW5ldyBlcigoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpKTtNLmUhPU0uaS5nYygpJiYoIXd8fCFrKTspe2ZvcihvPXUoZHIoTSksMTE4KSxkPTAscz1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFsoIW8uZCYmKG8uZD1uZXcgQ24oV3Msbyw4LDUpKSxvLmQpLCghby5lJiYoby5lPW5ldyBDbihXcyxvLDcsNCkpLG8uZSldKSkpO3pyKHMpJiYocj11KExyKHMpLDc5KSxDPWgmJnV3KHIpJiZqZShSZShxZShyLFAyKSkpLG49RmxlKCghci5iJiYoci5iPW5ldyBDbihicixyLDQsNykpLHIuYiksbyk/dD09dHMoTW8odShTdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSkpOnQ9PXRzKE1vKHUoU3QoKCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksci5iKSwwKSw4MikpKSwhKChDfHxuKSYmKCsrZCxkPjEpKSk7KTsoZD4wfHxGLkhjKChRdSgpLHRnKSkmJighby5uJiYoby5uPW5ldyBoZShxbyxvLDEsNykpLG8ubikuaT4wKSYmKHc9ITApLGQ+MSYmKGs9ITApfXcmJmUuRmMoKG9vKCksYmgpKSxrJiZlLkZjKChvbygpLHZTKSl9ZnVuY3Rpb24gYWhlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtpZihGPXUocWUodCwoY2koKSx6MikpLDIxKSxGLmRjKCkpcmV0dXJuIG51bGw7aWYoZD0wLGg9MCxGLkhjKChfbCgpLG5OKSkpe2ZvcihDPXUocWUodCxVUyksOTgpLHI9MixuPTIscz0yLG89MixlPXRzKHQpP3UocWUodHModCksancpLDEwMyk6dShxZSh0LGp3KSwxMDMpLGs9bmV3IGVyKCghdC5jJiYodC5jPW5ldyBoZShmbCx0LDksOSkpLHQuYykpO2suZSE9ay5pLmdjKCk7KWlmKHc9dShkcihrKSwxMTgpLE09dShxZSh3LG81KSw2MSksTT09KGJlKCksWm8pJiYoTT1ueHQodyxlKSxibyh3LG81LE0pKSxDPT0ob2EoKSxWYykpc3dpdGNoKE0uZyl7Y2FzZSAxOnI9Yi5NYXRoLm1heChyLHcuaSt3LmcpO2JyZWFrO2Nhc2UgMjpuPWIuTWF0aC5tYXgobix3Lmordy5mKTticmVhaztjYXNlIDM6cz1iLk1hdGgubWF4KHMsdy5pK3cuZyk7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heChvLHcuait3LmYpfWVsc2Ugc3dpdGNoKE0uZyl7Y2FzZSAxOnIrPXcuZysyO2JyZWFrO2Nhc2UgMjpuKz13LmYrMjticmVhaztjYXNlIDM6cys9dy5nKzI7YnJlYWs7Y2FzZSA0Om8rPXcuZisyfWQ9Yi5NYXRoLm1heChyLHMpLGg9Yi5NYXRoLm1heChuLG8pfXJldHVybiBndyh0LGQsaCwhMCwhMCl9ZnVuY3Rpb24gU2F0KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdDtmb3IoTHQ9dShQbChHJChSaShuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IFVrKG4pKSxuZXcgc00obikpLGkyKG5ldyBfZSxuZXcgd2UsbmV3IG5yLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxHbCldKSkpLDE1KSxNPXZpLEM9X2Esdz1uZXcgUyhlLmIuaik7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTEpLGQuaj09biYmKE09Yi5NYXRoLm1pbihNLGQucCksQz1iLk1hdGgubWF4KEMsZC5wKSk7aWYoTT09dmkpZm9yKGg9MDtoPEx0LmdjKCk7aCsrKVNtdCh1KEx0LlhiKGgpLDEwMSksbixoKTtlbHNlIGZvcihfdD1QdChUcixYciwyNSxzLmxlbmd0aCwxNSwxKSxqdG4oX3QsX3QubGVuZ3RoKSxndD1MdC5LYygpO2d0Lk9iKCk7KXtmb3IodHQ9dShndC5QYigpLDEwMSksbz11KEpuKHQuYix0dCksMTc3KSxrPTAsWT1NO1k8PUM7WSsrKW9bWV0mJihrPWIuTWF0aC5tYXgoayxyW1ldKSk7aWYodHQuaSl7Zm9yKEg9dHQuaS5jLEJ0PW5ldyBxcyxGPTA7RjxzLmxlbmd0aDtGKyspc1tIXVtGXSYmTnMoQnQsZGUoX3RbRl0pKTtmb3IoO1MwKEJ0LGRlKGspKTspKytrfWZvcihTbXQodHQsbixrKSxWPU07Vjw9QztWKyspb1tWXSYmKHJbVl09aysxKTt0dC5pJiYoX3RbdHQuaS5jXT1rKX19ZnVuY3Rpb24gWDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3Iocz1udWxsLHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCkseGF0KG4pP289KGQ9RHYoYk0obmV3IFViLG4pLHQuZiksdz1EdihiTShuZXcgVWIsbiksdC5mKSxrPW5ldyBfd3QobiwhMCxkLHcpLEM9bi5vLmIsTT0oc3koKSwobi5xP24ucToodm4oKSx2bigpLGEwKSkuX2IoKFRlKCksTncpKT9GPXUoUShuLE53KSwxOTcpOkY9dShRKEZhKG4pLENTKSwxOTcpLEYpLEg9MWU0LE09PUo0JiYoSD0xKSxWPXZmKG9mKGFmKHNmKGNmKG5ldyBFaCxIKSxwcyhiLk1hdGguY2VpbChDKSkpLGQpLHcpKSxNPT10NSYmTnModC5kLFYpLEd1ZSh0LGEyKFlvKG4sKGJlKCksQm4pKSksayksR3VlKHQsWW8obixIbiksayksayk6bz0oWT1EdihiTShuZXcgVWIsbiksdC5mKSx1cyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IGhRKSxuZXcgdFZ0KHQsWSkpLG5ldyBfd3QobiwhMSxZLFkpKSx0Lmlbbi5wXT1vLHMmJihoPXMuYy5kLmErVjModC5uLHMuYyxuKStuLmQuZCxzLmJ8fChoKz1zLmMuby5iKSx2ZihvZihhZihjZihzZihuZXcgRWgscHMoYi5NYXRoLmNlaWwoaCkpKSwwKSxzLmQpLG8uYSkpKSxzPW99ZnVuY3Rpb24gUTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3Iod3IoZSwiTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucyIsMSksTT1uZXcgbGUsaD1YdCh5ZShRKHQsKFRlKCksQjYpKSkpLGs9WHQoeWUoUSh0LEd5KSkpLEM9dShRKHQsVmwpLDEwMyksSD1uZXcgUyh0LmEpO0guYTxILmMuYy5sZW5ndGg7KWZvcihGPXUoSihIKSwxMCksbz1uZXcgYXIobHIoTXMoRikuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShMcihvKSwxNykscy5jLmkhPXMuZC5pJiZKZXQocy5iLHFiZSkpe2ZvcihZPUhhbihzKSxWPUhkKHMuYi5jLmxlbmd0aCksbj1SYm4odCxzLFksViksTS5jW00uYy5sZW5ndGhdPW4scj1uLm8sZD1uZXcgaGEocy5iLDApO2QuYjxkLmQuZ2MoKTspdz0oUW4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDcwKSksR3QoUSh3LE1kKSk9PT1HdCgoQTEoKSxfNykpJiYoQz09KGFvKCksWjApfHxDPT1RMD8oci5hKz13Lm8uYStrLHIuYj1iLk1hdGgubWF4KHIuYix3Lm8uYikpOihyLmE9Yi5NYXRoLm1heChyLmEsdy5vLmEpLHIuYis9dy5vLmIrayksVi5jW1YuYy5sZW5ndGhdPXcsRWwoZCkpO0M9PShhbygpLFowKXx8Qz09UTA/KHIuYS09ayxyLmIrPWgrWSk6ci5iKz1oLWsrWX1Bcyh0LmEsTSksb3IoZSl9ZnVuY3Rpb24gWjNuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixIO2ZvcihvPW5ldyBJb2UoZSksTT0kdm4odCxlLG8pLEg9Yi5NYXRoLm1heChYdCh5ZShRKGUsKFRlKCksVWcpKSkpLDEpLEM9bmV3IFMoTS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw0Niksdz1qaWUodShrLmEsOCksdShrLmIsOCksSCksRT0hMCxFPUUmTnYobixuZXcgJGUody5jLHcuZCkpLEU9RSZOdihuLEZtKG5ldyAkZSh3LmMsdy5kKSx3LmIsMCkpLEU9RSZOdihuLEZtKG5ldyAkZSh3LmMsdy5kKSwwLHcuYSkpLEUmTnYobixGbShuZXcgJGUody5jLHcuZCksdy5iLHcuYSkpO3N3aXRjaChGPW8uZCxkPWppZSh1KE0uYi5hLDgpLHUoTS5iLmIsOCksSCksRj09KGJlKCksQm4pfHxGPT1Ibj8oci5jW0YuZ109Yi5NYXRoLm1pbihyLmNbRi5nXSxkLmQpLHIuYltGLmddPWIuTWF0aC5tYXgoci5iW0YuZ10sZC5kK2QuYSkpOihyLmNbRi5nXT1iLk1hdGgubWluKHIuY1tGLmddLGQuYyksci5iW0YuZ109Yi5NYXRoLm1heChyLmJbRi5nXSxkLmMrZC5iKSkscz1UcyxoPW8uYy5pLmQsRi5nKXtjYXNlIDQ6cz1oLmM7YnJlYWs7Y2FzZSAyOnM9aC5iO2JyZWFrO2Nhc2UgMTpzPWguYTticmVhaztjYXNlIDM6cz1oLmR9cmV0dXJuIHIuYVtGLmddPWIuTWF0aC5tYXgoci5hW0YuZ10scyksb31mdW5jdGlvbiBKM24odCl7dmFyIGUsbixyLHM7aWYobj10LkQhPW51bGw/dC5EOnQuQixlPWNkKG4sRXUoOTEpKSxlIT0tMSl7cj1uLnN1YnN0cigwLGUpLHM9bmV3IHhnO2RvIHMuYSs9IlsiO3doaWxlKChlPWw4KG4sOTEsKytlKSkhPS0xKTtobihyLHU2KT9zLmErPSJaIjpobihyLFFfKT9zLmErPSJCIjpobihyLFRIKT9zLmErPSJDIjpobihyLFpfKT9zLmErPSJEIjpobihyLEpfKT9zLmErPSJGIjpobihyLHRTKT9zLmErPSJJIjpobihyLGVTKT9zLmErPSJKIjpobihyLG5TKT9zLmErPSJTIjoocy5hKz0iTCIscy5hKz0iIityLHMuYSs9IjsiKTt0cnl7cmV0dXJuIG51bGx9Y2F0Y2gobyl7aWYobz1XaShvKSwhRXQobyw2MCkpdGhyb3cgcnQobyl9fWVsc2UgaWYoY2QobixFdSg0NikpPT0tMSl7aWYoaG4obix1NikpcmV0dXJuIGRsO2lmKGhuKG4sUV8pKXJldHVybiBIdTtpZihobihuLFRIKSlyZXR1cm4gbWg7aWYoaG4obixaXykpcmV0dXJuIGlhO2lmKGhuKG4sSl8pKXJldHVybiByMztpZihobihuLHRTKSlyZXR1cm4gVHI7aWYoaG4obixlUykpcmV0dXJuIExiO2lmKGhuKG4sblMpKXJldHVybiBmNX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBvaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKGs9bmV3IEgwKG4pLExvKGssZSksSnQoaywoc2UoKSxfaSksZSksay5vLmE9ZS5nLGsuby5iPWUuZixrLm4uYT1lLmksay5uLmI9ZS5qLHVlKG4uYSxrKSxraSh0LmEsZSxrKSwoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpLmkhPTB8fGplKFJlKHFlKGUsKFRlKCksJHkpKSkpKSYmSnQoayxLVHQsKEZuKCksITApKSx3PXUoUShuLEdjKSwyMSksQz11KFEoaywoVGUoKSxvcykpLDk4KSxDPT0ob2EoKSx5Yik/SnQoayxvcyxIMSk6QyE9SDEmJncuRmMoKG9vKCksZjcpKSxyPXUoUShuLFZsKSwxMDMpLGQ9bmV3IGVyKCghZS5jJiYoZS5jPW5ldyBoZShmbCxlLDksOSkpLGUuYykpO2QuZSE9ZC5pLmdjKCk7KWg9dShkcihkKSwxMTgpLGplKFJlKHFlKGgsQjIpKSl8fEE0bih0LGgsayx3LHIsQyk7Zm9yKG89bmV3IGVyKCghZS5uJiYoZS5uPW5ldyBoZShxbyxlLDEsNykpLGUubikpO28uZSE9by5pLmdjKCk7KXM9dShkcihvKSwxMzcpLCFqZShSZShxZShzLEIyKSkpJiZzLmEmJnVlKGsuYixPaXQocykpO3JldHVybiBqZShSZShRKGssa1MpKSkmJncuRmMoKG9vKCksUkcpKSxqZShSZShRKGssSkcpKSkmJih3LkZjKChvbygpLGpHKSksdy5GYyh2UyksSnQoayxvcyxIMSkpLGt9ZnVuY3Rpb24gdDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbjtkPXUoSm4oZS5jLHQpLDQ1OSksTHQ9ZS5hLmMsdz1lLmEuYytlLmEuYixRZT1kLmYsUm49ZC5hLGg9UWU8Um4sWT1uZXcgJGUoTHQsUWUpLF90PW5ldyAkZSh3LFJuKSxzPShMdCt3KS8yLHR0PW5ldyAkZShzLFFlKSxCdD1uZXcgJGUocyxSbiksbz1oMm4odCxRZSxSbiksY2U9VDEoZS5CKSxTZT1uZXcgJGUocyxvKSxXZT1UMShlLkQpLG49TmNuKGN0KG90KFVzLDEpLHRlLDgsMCxbY2UsU2UsV2VdKSksSD0hMSxndD1lLkIuaSxndCYmZ3QuYyYmZC5kJiYoaz1oJiZndC5wPGd0LmMuYS5jLmxlbmd0aC0xfHwhaCYmZ3QucD4wLGs/ayYmKEY9Z3QucCxoPysrRjotLUYsTT11KEZlKGd0LmMuYSxGKSwxMCkscj1RbmUoTSksSD0hKFFzdChyLGNlLG5bMF0pfHxMWXQocixjZSxuWzBdKSkpOkg9ITApLFY9ITEsWXQ9ZS5ELmksWXQmJll0LmMmJmQuZSYmKEM9aCYmWXQucD4wfHwhaCYmWXQucDxZdC5jLmEuYy5sZW5ndGgtMSxDPyhGPVl0LnAsaD8tLUY6KytGLE09dShGZShZdC5jLmEsRiksMTApLHI9UW5lKE0pLFY9IShRc3QocixuWzBdLFdlKXx8TFl0KHIsblswXSxXZSkpKTpWPSEwKSxIJiZWJiZuaSh0LmEsU2UpLEh8fHpDKHQuYSxjdChvdChVcywxKSx0ZSw4LDAsW1ksdHRdKSksVnx8ekModC5hLGN0KG90KFVzLDEpLHRlLDgsMCxbQnQsX3RdKSl9ZnVuY3Rpb24gQ3EodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2lmKEV0KHQuVWcoKSwxNjApPyhDcSh1KHQuVWcoKSwxNjApLGUpLGUuYSs9IiA+ICIpOmUuYSs9IlJvb3QgIixuPXQuVGcoKS56YixobihuLnN1YnN0cigwLDMpLCJFbGsiKT9WcihlLG4uc3Vic3RyKDMpKTplLmErPSIiK24scz10LnpnKCkscyl7VnIoKGUuYSs9IiAiLGUpLHMpO3JldHVybn1pZihFdCh0LDM1NCkmJihrPXUodCwxMzcpLmEsaykpe1ZyKChlLmErPSIgIixlKSxrKTtyZXR1cm59Zm9yKGg9bmV3IGVyKHQuQWcoKSk7aC5lIT1oLmkuZ2MoKTspaWYobz11KGRyKGgpLDEzNyksaz1vLmEsayl7VnIoKGUuYSs9IiAiLGUpLGspO3JldHVybn1pZihFdCh0LDM1MikmJihyPXUodCw3OSksIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIuaSE9MCYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmkhPTApKSl7Zm9yKGUuYSs9IiAoIixkPW5ldyBMeCgoIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIpKTtkLmUhPWQuaS5nYygpOylkLmU+MCYmKGUuYSs9S2EpLENxKHUoZHIoZCksMTYwKSxlKTtmb3IoZS5hKz1Qb3Qsdz1uZXcgTHgoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSk7dy5lIT13LmkuZ2MoKTspdy5lPjAmJihlLmErPUthKSxDcSh1KGRyKHcpLDE2MCksZSk7ZS5hKz0iKSJ9fWZ1bmN0aW9uIGU0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSDtpZihvPXUoUSh0LChzZSgpLF9pKSksNzkpLCEhbyl7Zm9yKHI9dC5hLHM9bmV3IHlvKG4pLExpKHMsVjFuKHQpKSxWOCh0LmQuaSx0LmMuaSk/KEY9dC5jLE09S28oY3Qob3QoVXMsMSksdGUsOCwwLFtGLm4sRi5hXSkpLG5hKE0sbikpOk09VDEodC5jKSxocyhyLE0sci5hLHIuYS5hKSxIPVQxKHQuZCksUSh0LCRsdCkhPW51bGwmJkxpKEgsdShRKHQsJGx0KSw4KSksaHMocixILHIuYy5iLHIuYyksSm0ocixzKSxoPW00KG8sITAsITApLFokKGgsdShTdCgoIW8uYiYmKG8uYj1uZXcgQ24oYnIsbyw0LDcpKSxvLmIpLDApLDgyKSksSiQoaCx1KFN0KCghby5jJiYoby5jPW5ldyBDbihicixvLDUsOCkpLG8uYyksMCksODIpKSx5RChyLGgpLEM9bmV3IFModC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCksZD11KFEoayxfaSksMTM3KSxRdihkLGsuby5hKSxYdihkLGsuby5iKSxtMShkLGsubi5hK3MuYSxrLm4uYitzLmIpLGJvKGQsKFh4KCksc2x0KSxSZShRKGssc2x0KSkpO3c9dShRKHQsKFRlKCksX28pKSw3NCksdz8oSm0odyxzKSxibyhvLF9vLHcpKTpibyhvLF9vLG51bGwpLGU9PShxMCgpLEg2KT9ibyhvLFgwLEg2KTpibyhvLFgwLG51bGwpfX1mdW5jdGlvbiBuNG4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O2ZvcihIPWUuYy5sZW5ndGgsRj0wLE09bmV3IFModC5iKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwyOSksZ3Q9Qy5hLGd0LmMubGVuZ3RoIT0wKXtmb3IodHQ9bmV3IFMoZ3QpLGs9MCxMdD1udWxsLHM9dShKKHR0KSwxMCksbz1udWxsO3M7KXtpZihvPXUoRmUoZSxzLnApLDI1Nyksby5jPj0wKXtmb3Iodz1udWxsLGQ9bmV3IGhhKEMuYSxrKzEpO2QuYjxkLmQuZ2MoKSYmKGg9KFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwxMCkpLHc9dShGZShlLGgucCksMjU3KSwhKHcuZD09by5kJiZ3LmM8by5jKSk7KXc9bnVsbDt3JiYoTHQmJihhaChyLHMucCxkZSh1KEZlKHIscy5wKSwxOSkuYS0xKSksdShGZShuLEx0LnApLDE1KS5NYyhvKSksbz1GZG4obyxzLEgrKyksZS5jW2UuYy5sZW5ndGhdPW8sdWUobixuZXcgbGUpLEx0Pyh1KEZlKG4sTHQucCksMTUpLkZjKG8pLHVlKHIsZGUoMSkpKTp1ZShyLGRlKDApKSl9Vj1udWxsLHR0LmE8dHQuYy5jLmxlbmd0aCYmKFY9dShKKHR0KSwxMCksWT11KEZlKGUsVi5wKSwyNTcpLHUoRmUobixzLnApLDE1KS5GYyhZKSxhaChyLFYucCxkZSh1KEZlKHIsVi5wKSwxOSkuYSsxKSkpLG8uZD1GLG8uYz1rKyssTHQ9cyxzPVZ9KytGfX1mdW5jdGlvbiBBYXQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O3JldHVybiB3PXQsQz1uYShuZXcgJGUoZS5hLGUuYiksdCksaz1uLE09bmEobmV3ICRlKHIuYSxyLmIpLG4pLEY9dy5hLHR0PXcuYixWPWsuYSxMdD1rLmIsSD1DLmEsZ3Q9Qy5iLFk9TS5hLF90PU0uYixzPVkqZ3QtSCpfdCx5MSgpLGdmKEVkKSxiLk1hdGguYWJzKDAtcyk8PUVkfHxzPT0wfHxpc05hTigwKSYmaXNOYU4ocyk/ITE6KGg9MS9zKigoRi1WKSpndC0odHQtTHQpKkgpLGQ9MS9zKi0oLShGLVYpKl90Kyh0dC1MdCkqWSksbz0oZ2YoRWQpLChiLk1hdGguYWJzKDAtaCk8PUVkfHxoPT0wfHxpc05hTigwKSYmaXNOYU4oaCk/MDowPGg/LTE6MD5oPzE6THYoaXNOYU4oMCksaXNOYU4oaCkpKTwwJiYoZ2YoRWQpLChiLk1hdGguYWJzKGgtMSk8PUVkfHxoPT0xfHxpc05hTihoKSYmaXNOYU4oMSk/MDpoPDE/LTE6aD4xPzE6THYoaXNOYU4oaCksaXNOYU4oMSkpKTwwKSYmKGdmKEVkKSwoYi5NYXRoLmFicygwLWQpPD1FZHx8ZD09MHx8aXNOYU4oMCkmJmlzTmFOKGQpPzA6MDxkPy0xOjA+ZD8xOkx2KGlzTmFOKDApLGlzTmFOKGQpKSk8MCkmJihnZihFZCksKGIuTWF0aC5hYnMoZC0xKTw9RWR8fGQ9PTF8fGlzTmFOKGQpJiZpc05hTigxKT8wOmQ8MT8tMTpkPjE/MTpMdihpc05hTihkKSxpc05hTigxKSkpPDApKSxvKX1mdW5jdGlvbiByNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlO2ZvcihNPW5ldyB5d3QobmV3IE10KHQpKTtNLmIhPU0uYy5hLmQ7KWZvcihDPWh0ZShNKSxkPXUoQy5kLDU2KSxlPXUoQy5lLDU2KSxoPWQuVGcoKSxZPTAsQnQ9KGguaT09bnVsbCYmcGQoaCksaC5pKS5sZW5ndGg7WTxCdDsrK1kpaWYoaz0obz0oaC5pPT1udWxsJiZwZChoKSxoLmkpLFk+PTAmJlk8by5sZW5ndGg/b1tZXTpudWxsKSxrLklqKCkmJiFrLkpqKCkpe2lmKEV0KGssOTkpKXc9dShrLDE4KSwhKHcuQmImZGMpJiYoY2U9bm8odyksIShjZSYmY2UuQmImZGMpKSYmSG1uKHQsdyxkLGUpO2Vsc2UgaWYodG8oKSx1KGssNjYpLk9qKCkmJihuPShZdD1rLHUoWXQ/dShlLDQ5KS54aChZdCk6bnVsbCwxNTMpKSxuKSlmb3IoSD11KGQuYWgoayksMTUzKSxyPW4uZ2MoKSx0dD0wLFY9SC5nYygpO3R0PFY7Kyt0dClpZihGPUguaWwodHQpLEV0KEYsOTkpKXtpZihfdD1ILmpsKHR0KSxzPVd2KHQsX3QpLHM9PW51bGwmJl90IT1udWxsKXtpZihMdD11KEYsMTgpLCF0LmJ8fEx0LkJiJmRjfHxubyhMdCkpY29udGludWU7cz1fdH1pZighbi5kbChGLHMpKXtmb3IoZ3Q9MDtndDxyOysrZ3QpaWYobi5pbChndCk9PUYmJkd0KG4uamwoZ3QpKT09PUd0KHMpKXtuLmlpKG4uZ2MoKS0xLGd0KSwtLXI7YnJlYWt9fX1lbHNlIG4uZGwoSC5pbCh0dCksSC5qbCh0dCkpfX1mdW5jdGlvbiBpNG4odCxlLG4scixzLG8saCl7dmFyIGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2lmKGd0PWN5bihlLG4sdC5nKSxzLm4mJnMubiYmbyYmaGYocyxmZihvKSwoQ2woKSxZbCkpLHQuYilmb3IodHQ9MDt0dDxndC5jLmxlbmd0aDt0dCsrKU09KEFuKHR0LGd0LmMubGVuZ3RoKSx1KGd0LmNbdHRdLDIwMCkpLHR0IT0wJiYoSD0oQW4odHQtMSxndC5jLmxlbmd0aCksdShndC5jW3R0LTFdLDIwMCkpLENyZShNLEguZitILmIrdC5nKSksdzVuKHR0LGd0LG4sdC5nKSx3MW4odCxNKSxzLm4mJm8mJmhmKHMsZmYobyksKENsKCksWWwpKTtlbHNlIGZvcihZPW5ldyBTKGd0KTtZLmE8WS5jLmMubGVuZ3RoOylmb3IoVj11KEooWSksMjAwKSxDPW5ldyBTKFYuYSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTg3KSxMdD1uZXcgUHd0KGsucyxrLnQsdC5nKSxjeXQoTHQsayksdWUoVi5kLEx0KTtyZXR1cm4gU2ZuKHQsZ3QpLHMubiYmcy5uJiZvJiZoZihzLGZmKG8pLChDbCgpLFlsKSksX3Q9Yi5NYXRoLm1heCh0LmQsci5hLShoLmIraC5jKSksRj1iLk1hdGgubWF4KHQuYyxyLmItKGguZCtoLmEpKSxkPUYtdC5jLHQuZSYmdC5mJiYodz1fdC9GLHc8dC5hP190PUYqdC5hOmQrPV90L3QuYS1GKSx0LmUmJkpsbihndCxfdCxkKSxzLm4mJnMubiYmbyYmaGYocyxmZihvKSwoQ2woKSxZbCkpLG5ldyBUbnQodC5hLF90LHQuYytkLCh5RSgpLEhTKSl9ZnVuY3Rpb24gczRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE07Zm9yKHQuaj1QdChUcixYciwyNSx0LmcsMTUsMSksdC5vPW5ldyBsZSx1cyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgWTUpLG5ldyBTJHQodCkpLHQuYT1QdChkbCxpMCwyNSx0LmIsMTYsMSkscUkobmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IEwkdCh0KSkscj0oTT1uZXcgbGUsdXMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IHdRKSxuZXcgQSR0KHQpKSxuZXcgZVZ0KHQsTSkpLE0pLHc9bmV3IFMocik7dy5hPHcuYy5jLmxlbmd0aDspaWYoZD11KEoodyksNTA4KSwhKGQuYy5sZW5ndGg8PTEpKXtpZihkLmMubGVuZ3RoPT0yKXtRcG4oZCkseGF0KChBbigwLGQuYy5sZW5ndGgpLHUoZC5jWzBdLDE3KSkuZC5pKXx8dWUodC5vLGQpO2NvbnRpbnVlfWlmKCEoRWRuKGQpfHxmZ24oZCxuZXcgUkYpKSlmb3Ioaz1uZXcgUyhkKSxzPW51bGw7ay5hPGsuYy5jLmxlbmd0aDspZT11KEooayksMTcpLG49dC5jW2UucF0sIXN8fGsuYT49ay5jLmMubGVuZ3RoP0M9dG10KChHbigpLERzKSxacyk6Qz10bXQoKEduKCksWnMpLFpzKSxDKj0yLG89bi5hLmcsbi5hLmc9Yi5NYXRoLm1heChvLG8rKEMtbykpLGg9bi5iLmcsbi5iLmc9Yi5NYXRoLm1heChoLGgrKEMtaCkpLHM9ZX19ZnVuY3Rpb24gYTRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdDtmb3IoWXQ9U0t0KHQpLEM9bmV3IGxlLGQ9dC5jLmxlbmd0aCxNPWQtMSxGPWQrMTtZdC5hLmMhPTA7KXtmb3IoO24uYiE9MDspX3Q9KFFuKG4uYiE9MCksdShjaChuLG4uYS5hKSwxMTIpKSxJQyhZdC5hLF90KSE9bnVsbCxfdC5nPU0tLSxyeHQoX3QsZSxuLHIpO2Zvcig7ZS5iIT0wOylCdD0oUW4oZS5iIT0wKSx1KGNoKGUsZS5hLmEpLDExMikpLElDKFl0LmEsQnQpIT1udWxsLEJ0Lmc9RisrLHJ4dChCdCxlLG4scik7Zm9yKGs9X2EsZ3Q9KGg9bmV3IHZDKG5ldyBnQyhuZXcgeShZdC5hKS5hKS5iKSxuZXcgZyhoKSk7bU0oZ3QuYS5hKTspe2lmKHR0PShvPXdqKGd0LmEpLHUoby5jZCgpLDExMikpLCFyJiZ0dC5iPjAmJnR0LmE8PTApe0MuYz1QdChYbixJZSwxLDAsNSwxKSxDLmNbQy5jLmxlbmd0aF09dHQ7YnJlYWt9WT10dC5pLXR0LmQsWT49ayYmKFk+ayYmKEMuYz1QdChYbixJZSwxLDAsNSwxKSxrPVkpLEMuY1tDLmMubGVuZ3RoXT10dCl9Qy5jLmxlbmd0aCE9MCYmKHc9dShGZShDLHp6KHMsQy5jLmxlbmd0aCkpLDExMiksSUMoWXQuYSx3KSE9bnVsbCx3Lmc9RisrLHJ4dCh3LGUsbixyKSxDLmM9UHQoWG4sSWUsMSwwLDUsMSkpfWZvcihMdD10LmMubGVuZ3RoKzEsVj1uZXcgUyh0KTtWLmE8Vi5jLmMubGVuZ3RoOylIPXUoSihWKSwxMTIpLEguZzxkJiYoSC5nPUguZytMdCl9ZnVuY3Rpb24gX3EodCxlKXt2YXIgbjtpZih0LmUpdGhyb3cgcnQobmV3IEZvKChMMChNdXQpLGJvdCtNdXQuayt2b3QpKSk7aWYoIUFZZSh0LmEsZSkpdGhyb3cgcnQobmV3IEdvKG1mZStlK3lmZSkpO2lmKGU9PXQuZClyZXR1cm4gdDtzd2l0Y2gobj10LmQsdC5kPWUsbi5nKXtjYXNlIDA6c3dpdGNoKGUuZyl7Y2FzZSAyOm93KHQpO2JyZWFrO2Nhc2UgMTpXcCh0KSxvdyh0KTticmVhaztjYXNlIDQ6ZjQodCksb3codCk7YnJlYWs7Y2FzZSAzOmY0KHQpLFdwKHQpLG93KHQpfWJyZWFrO2Nhc2UgMjpzd2l0Y2goZS5nKXtjYXNlIDE6V3AodCkscmF0KHQpO2JyZWFrO2Nhc2UgNDpmNCh0KSxvdyh0KTticmVhaztjYXNlIDM6ZjQodCksV3AodCksb3codCl9YnJlYWs7Y2FzZSAxOnN3aXRjaChlLmcpe2Nhc2UgMjpXcCh0KSxyYXQodCk7YnJlYWs7Y2FzZSA0OldwKHQpLGY0KHQpLG93KHQpO2JyZWFrO2Nhc2UgMzpXcCh0KSxmNCh0KSxXcCh0KSxvdyh0KX1icmVhaztjYXNlIDQ6c3dpdGNoKGUuZyl7Y2FzZSAyOmY0KHQpLG93KHQpO2JyZWFrO2Nhc2UgMTpmNCh0KSxXcCh0KSxvdyh0KTticmVhaztjYXNlIDM6V3AodCkscmF0KHQpfWJyZWFrO2Nhc2UgMzpzd2l0Y2goZS5nKXtjYXNlIDI6V3AodCksZjQodCksb3codCk7YnJlYWs7Y2FzZSAxOldwKHQpLGY0KHQpLFdwKHQpLG93KHQpO2JyZWFrO2Nhc2UgNDpXcCh0KSxyYXQodCl9fXJldHVybiB0fWZ1bmN0aW9uIFQ0KHQsZSl7dmFyIG47aWYodC5kKXRocm93IHJ0KG5ldyBGbygoTDAoWnV0KSxib3QrWnV0Lmsrdm90KSkpO2lmKCFMWWUodC5hLGUpKXRocm93IHJ0KG5ldyBHbyhtZmUrZSt5ZmUpKTtpZihlPT10LmMpcmV0dXJuIHQ7c3dpdGNoKG49dC5jLHQuYz1lLG4uZyl7Y2FzZSAwOnN3aXRjaChlLmcpe2Nhc2UgMjpsMih0KTticmVhaztjYXNlIDE6VXAodCksbDIodCk7YnJlYWs7Y2FzZSA0OmQ0KHQpLGwyKHQpO2JyZWFrO2Nhc2UgMzpkNCh0KSxVcCh0KSxsMih0KX1icmVhaztjYXNlIDI6c3dpdGNoKGUuZyl7Y2FzZSAxOlVwKHQpLGlhdCh0KTticmVhaztjYXNlIDQ6ZDQodCksbDIodCk7YnJlYWs7Y2FzZSAzOmQ0KHQpLFVwKHQpLGwyKHQpfWJyZWFrO2Nhc2UgMTpzd2l0Y2goZS5nKXtjYXNlIDI6VXAodCksaWF0KHQpO2JyZWFrO2Nhc2UgNDpVcCh0KSxkNCh0KSxsMih0KTticmVhaztjYXNlIDM6VXAodCksZDQodCksVXAodCksbDIodCl9YnJlYWs7Y2FzZSA0OnN3aXRjaChlLmcpe2Nhc2UgMjpkNCh0KSxsMih0KTticmVhaztjYXNlIDE6ZDQodCksVXAodCksbDIodCk7YnJlYWs7Y2FzZSAzOlVwKHQpLGlhdCh0KX1icmVhaztjYXNlIDM6c3dpdGNoKGUuZyl7Y2FzZSAyOlVwKHQpLGQ0KHQpLGwyKHQpO2JyZWFrO2Nhc2UgMTpVcCh0KSxkNCh0KSxVcCh0KSxsMih0KTticmVhaztjYXNlIDQ6VXAodCksaWF0KHQpfX1yZXR1cm4gdH1mdW5jdGlvbiBvNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKHc9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7dy5lIT13LmkuZ2MoKTspZm9yKGQ9dShkcih3KSwzMykscz1uZXcgYXIobHIoRzAoZCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXtpZihyPXUoTHIocyksNzkpLCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksIShyLmIuaTw9MSYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmk8PTEpKSl0aHJvdyBydChuZXcgRjkoIkdyYXBoIG11c3Qgbm90IGNvbnRhaW4gaHlwZXJlZGdlcy4iKSk7aWYoIWdfKHIpJiZkIT1Nbyh1KFN0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSlmb3Ioaz1uZXcgUld0LExvKGssciksSnQoaywoR3AoKSxDNiksciksd3R0KGssdShlYyhBbyhuLmYsZCkpLDE0NCkpLHAxKGssdShKbihuLE1vKHUoU3QoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSwwKSw4MikpKSwxNDQpKSx1ZShlLmMsayksaD1uZXcgZXIoKCFyLm4mJihyLm49bmV3IGhlKHFvLHIsMSw3KSksci5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz1uZXcgelp0KGssby5hKSxMbyhDLG8pLEp0KEMsQzYsbyksQy5lLmE9Yi5NYXRoLm1heChvLmcsMSksQy5lLmI9Yi5NYXRoLm1heChvLmYsMSksYXh0KEMpLHVlKGUuZCxDKX19ZnVuY3Rpb24gYzRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3IoTT1uZXcgeXh0KHQpLGFybihNLCEoZT09KGFvKCksWjApfHxlPT1RMCkpLEM9TS5hLEY9bmV3IHd4LHM9KEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpLGg9MCx3PXMubGVuZ3RoO2g8dzsrK2gpbj1zW2hdLGs9dG50KEMsc2MsbiksayYmKEYuZD1iLk1hdGgubWF4KEYuZCxrLlJlKCkpKTtmb3Iocj1jdChvdChNeSwxKSxhZSwyMzIsMCxbc2MsdHUsYWNdKSxvPTAsZD1yLmxlbmd0aDtvPGQ7KytvKW49cltvXSxrPXRudChDLGFjLG4pLGsmJihGLmE9Yi5NYXRoLm1heChGLmEsay5SZSgpKSk7Zm9yKFk9Y3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSksZ3Q9MCxfdD1ZLmxlbmd0aDtndDxfdDsrK2d0KUg9WVtndF0saz10bnQoQyxILHNjKSxrJiYoRi5iPWIuTWF0aC5tYXgoRi5iLGsuU2UoKSkpO2ZvcihWPWN0KG90KE15LDEpLGFlLDIzMiwwLFtzYyx0dSxhY10pLHR0PTAsTHQ9Vi5sZW5ndGg7dHQ8THQ7Kyt0dClIPVZbdHRdLGs9dG50KEMsSCxhYyksayYmKEYuYz1iLk1hdGgubWF4KEYuYyxrLlNlKCkpKTtyZXR1cm4gRi5kPjAmJihGLmQrPUMubi5kLEYuZCs9Qy5kKSxGLmE+MCYmKEYuYSs9Qy5uLmEsRi5hKz1DLmQpLEYuYj4wJiYoRi5iKz1DLm4uYixGLmIrPUMuZCksRi5jPjAmJihGLmMrPUMubi5jLEYuYys9Qy5kKSxGfWZ1bmN0aW9uIGNoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihGPW4uZCxNPW4uYyxvPW5ldyAkZShuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksaD1vLmIsaz1uZXcgUyh0LmEpO2suYTxrLmMuYy5sZW5ndGg7KWlmKGQ9dShKKGspLDEwKSxkLms9PShHbigpLHhzKSl7c3dpdGNoKHI9dShRKGQsKHNlKCksb2MpKSw2MSkscz11KFEoZCxRVHQpLDgpLEM9ZC5uLHIuZyl7Y2FzZSAyOkMuYT1uLmYuYStGLmMtTS5hO2JyZWFrO2Nhc2UgNDpDLmE9LU0uYS1GLmJ9c3dpdGNoKFY9MCxyLmcpe2Nhc2UgMjpjYXNlIDQ6ZT09KG9hKCksaDApPyhIPVh0KHllKFEoZCxEdykpKSxDLmI9by5iKkgtdShRKGQsKFRlKCksUHcpKSw4KS5iLFY9Qy5iK3MuYixmeihkLCExLCEwKSk6ZT09VmMmJihDLmI9WHQoeWUoUShkLER3KSkpLXUoUShkLChUZSgpLFB3KSksOCkuYixWPUMuYitzLmIsZnooZCwhMSwhMCkpfWg9Yi5NYXRoLm1heChoLFYpfWZvcihuLmYuYis9aC1vLmIsdz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGQ9dShKKHcpLDEwKSxkLms9PShHbigpLHhzKSlzd2l0Y2gocj11KFEoZCwoc2UoKSxvYykpLDYxKSxDPWQubixyLmcpe2Nhc2UgMTpDLmI9LU0uYi1GLmQ7YnJlYWs7Y2FzZSAzOkMuYj1uLmYuYitGLmEtTS5ifX1mdW5jdGlvbiB1NG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlO2ZvcihzPXUoUSh0LChmYygpLGpTKSksMzMpLGs9dmksQz12aSxkPV9hLHc9X2EsY2U9ZWkodC5iLDApO2NlLmIhPWNlLmQuYzspQnQ9dSh0aShjZSksODYpLFk9QnQuZSx0dD1CdC5mLGs9Yi5NYXRoLm1pbihrLFkuYS10dC5hLzIpLEM9Yi5NYXRoLm1pbihDLFkuYi10dC5iLzIpLGQ9Yi5NYXRoLm1heChkLFkuYSt0dC5hLzIpLHc9Yi5NYXRoLm1heCh3LFkuYit0dC5iLzIpO2ZvcihWPXUocWUocywoaHcoKSxveWUpKSwxMTYpLEg9bmV3ICRlKFYuYi1rLFYuZC1DKSxZdD1laSh0LmIsMCk7WXQuYiE9WXQuZC5jOylCdD11KHRpKFl0KSw4NiksRj1RKEJ0LGpTKSxFdChGLDIzOSkmJihvPXUoRiwzMyksTT1MaShCdC5lLEgpLG0xKG8sTS5hLW8uZy8yLE0uYi1vLmYvMikpO2ZvcihfdD1laSh0LmEsMCk7X3QuYiE9X3QuZC5jOylMdD11KHRpKF90KSwxODgpLHI9dShRKEx0LGpTKSw3OSksciYmKGU9THQuYSxndD1uZXcgeW8oTHQuYi5lKSxocyhlLGd0LGUuYSxlLmEuYSksU2U9bmV3IHlvKEx0LmMuZSksaHMoZSxTZSxlLmMuYixlLmMpLExhZShndCx1KFFmKGUsMSksOCksTHQuYi5mKSxMYWUoU2UsdShRZihlLGUuYi0yKSw4KSxMdC5jLmYpLG49bTQociwhMCwhMCkseUQoZSxuKSk7V2U9ZC1rKyhWLmIrVi5jKSxoPXctQysoVi5kK1YuYSksZ3cocyxXZSxoLCExLCExKX1mdW5jdGlvbiBsNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2ZvcihNPXQuYixDPW5ldyBoYShNLDApLFJtKEMsbmV3IENoKHQpKSxMdD0hMSxoPTE7Qy5iPEMuZC5nYygpOyl7Zm9yKGs9KFFuKEMuYjxDLmQuZ2MoKSksdShDLmQuWGIoQy5jPUMuYisrKSwyOSkpLFk9KEFuKGgsTS5jLmxlbmd0aCksdShNLmNbaF0sMjkpKSx0dD1HdihrLmEpLGd0PXR0LmMubGVuZ3RoLFY9bmV3IFModHQpO1YuYTxWLmMuYy5sZW5ndGg7KUY9dShKKFYpLDEwKSxrbyhGLFkpO2lmKEx0KXtmb3IoSD16d3QobmV3IG12KHR0KSwwKTtILmMuU2IoKTspZm9yKEY9dShnSnQoSCksMTApLG89bmV3IFMoR3Yoam8oRikpKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksZHcocywhMCksSnQodCwoc2UoKSx4TyksKEZuKCksITApKSxyPWpsZSh0LHMsZ3QpLG49dShRKEYsTHcpLDMwNSksX3Q9dShGZShyLHIuYy5sZW5ndGgtMSksMTcpLG4uaz1fdC5jLmksbi5uPV90LG4uYj1zLmQuaSxuLmM9cztMdD0hMX1lbHNlIHR0LmMubGVuZ3RoIT0wJiYoZT0oQW4oMCx0dC5jLmxlbmd0aCksdSh0dC5jWzBdLDEwKSksZS5rPT0oR24oKSxqMSkmJihMdD0hMCxoPS0xKSk7KytofWZvcihkPW5ldyBoYSh0LmIsMCk7ZC5iPGQuZC5nYygpOyl3PShRbihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksMjkpKSx3LmEuYy5sZW5ndGg9PTAmJkVsKGQpfWZ1bmN0aW9uIGg0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7aWYoQz11KHUoQWkodC5yLGUpLDIxKSw4NCksQy5nYygpPD0yfHxlPT0oYmUoKSxIbil8fGU9PShiZSgpLEJuKSl7QWhlKHQsZSk7cmV0dXJufWZvcihZPXQudS5IYygoUXUoKSxHNikpLG49ZT09KGJlKCksTm4pPyh0dygpLGFPKToodHcoKSxzTyksZ3Q9ZT09Tm4/KHd1KCkseWYpOih3dSgpLGUxKSxyPWVidChtdnQobiksdC5zKSx0dD1lPT1Obj9zczpUcyxrPUMuS2MoKTtrLk9iKCk7KWQ9dShrLlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSYmKFY9ZC5iLnJmKCksSD1kLmUsTT1kLmMsRj1NLmksRi5iPShvPU0ubixNLmUuYStvLmIrby5jKSxGLmE9KGg9TS5uLE0uZS5iK2guZCtoLmEpLFk/KEYuYz1ILmEtKHM9TS5uLE0uZS5hK3MuYitzLmMpLXQucyxZPSExKTpGLmM9SC5hK1YuYSt0LnMsdEkoZ3QsWXh0KSxNLmY9Z3QsVWYoTSwoWHUoKSxtZikpLHVlKHIuZCxuZXcgRG50KEYsSnl0KHIsRikpKSx0dD1lPT1Obj9iLk1hdGgubWluKHR0LEguYik6Yi5NYXRoLm1heCh0dCxILmIrZC5iLnJmKCkuYikpO2Zvcih0dCs9ZT09Tm4/LXQudDp0LnQscDN0KChyLmU9dHQscikpLHc9Qy5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMTEpLCEoIWQuY3x8ZC5jLmQuYy5sZW5ndGg8PTApJiYoRj1kLmMuaSxGLmMtPWQuZS5hLEYuZC09ZC5lLmIpfWZ1bmN0aW9uIGY0bih0LGUsbil7dmFyIHI7aWYod3IobiwiU3RyZXRjaFdpZHRoIGxheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IodC5jPWUsdC50PTAsdC51PTAsdC5pPXNzLHQuZz1Ucyx0LmQ9WHQoeWUoUShlLChUZSgpLHhmKSkpKSxxaG4odCksR3BuKHQpLEhwbih0KSxXMW4odCksWWxuKHQpLHQuaT1iLk1hdGgubWF4KDEsdC5pKSx0Lmc9Yi5NYXRoLm1heCgxLHQuZyksdC5kPXQuZC90LmksdC5mPXQuZy90LmksdC5zPXJmbih0KSxyPW5ldyBDaCh0LmMpLHVlKHQuYy5iLHIpLHQucj1Hdih0LnApLHQubj1sJCh0LmssdC5rLmxlbmd0aCk7dC5yLmMubGVuZ3RoIT0wOyl0Lm89dnVuKHQpLCF0Lm98fG5yZSh0KSYmdC5iLmEuZ2MoKSE9MD8od2RuKHQscikscj1uZXcgQ2godC5jKSx1ZSh0LmMuYixyKSxVYSh0LmEsdC5iKSx0LmIuYS4kYigpLHQudD10LnUsdC51PTApOm5yZSh0KT8odC5jLmIuYz1QdChYbixJZSwxLDAsNSwxKSxyPW5ldyBDaCh0LmMpLHVlKHQuYy5iLHIpLHQudD0wLHQudT0wLHQuYi5hLiRiKCksdC5hLmEuJGIoKSwrK3QuZix0LnI9R3YodC5wKSx0Lm49bCQodC5rLHQuay5sZW5ndGgpKTooa28odC5vLHIpLHZ1KHQucix0Lm8pLE5zKHQuYix0Lm8pLHQudD10LnQtdC5rW3Quby5wXSp0LmQrdC5qW3Quby5wXSx0LnUrPXQuZVt0Lm8ucF0qdC5kKTtlLmEuYz1QdChYbixJZSwxLDAsNSwxKSxCc3QoZS5iKSxvcihuKX1mdW5jdGlvbiBkNG4odCl7dmFyIGUsbixyLHM7Zm9yKHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEuYiwxNikpLG5ldyB2WCksbmV3IHdYKSxzZG4odCksdXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuYS5iLDE2KSksbmV3IG1YKSxuZXcgeVgpLHQuYz09KHEwKCksSDYpJiYodXMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKG5ldyBUbSh0LmYpLDEpKSxuZXcgeFgpLG5ldyBrWCksbmV3IER0dCh0KSksdXMoUmkocHUoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZC5iLDE2KSksbmV3IHhGKSxuZXcgRVgpLG5ldyBrRiksbmV3IFRYKSxuZXcgTnR0KHQpKSkscz1uZXcgJGUoc3Msc3MpLGU9bmV3ICRlKFRzLFRzKSxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw1Nykscy5hPWIuTWF0aC5taW4ocy5hLG4uZC5jKSxzLmI9Yi5NYXRoLm1pbihzLmIsbi5kLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmQuYytuLmQuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZC5kK24uZC5hKTtMaShHZih0LmQuYyksbWoobmV3ICRlKHMuYSxzLmIpKSksTGkoR2YodC5kLmYpLG5hKG5ldyAkZShlLmEsZS5iKSxzKSkscDJuKHQscyxlKSxZdSh0LmYpLFl1KHQuYiksWXUodC5nKSxZdSh0LmUpLHQuYS5hLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5hLmIuYz1QdChYbixJZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmQ9bnVsbH1mdW5jdGlvbiB1aGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2ZvcihzPW5ldyBsZSxZPW5ldyBTKGUuYSk7WS5hPFkuYy5jLmxlbmd0aDspaWYoVj11KEooWSksMTApLEg9Vi5lLEgmJihyPXVoZSh0LEgsViksQXMocyxyKSxTM24odCxILFYpLHUoUShILChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkpKWZvcihMdD11KFEoViwoVGUoKSxvcykpLDk4KSxGPXUoUShWLHF5KSwxNzQpLkhjKChRdSgpLHRnKSksZ3Q9bmV3IFMoVi5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KWZvcih0dD11KEooZ3QpLDExKSxvPXUoSm4odC5iLHR0KSwxMCksb3x8KG89VEQodHQsTHQsdHQuaiwtKHR0LmUuYy5sZW5ndGgtdHQuZy5jLmxlbmd0aCksbnVsbCxuZXcgVGEsdHQubyx1KFEoSCxWbCksMTAzKSxIKSxKdChvLF9pLHR0KSxraSh0LmIsdHQsbyksdWUoSC5hLG8pKSxoPXUoRmUoby5qLDApLDExKSxDPW5ldyBTKHR0LmYpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDcwKSxkPW5ldyBjSHQsZC5vLmE9ay5vLmEsZC5vLmI9ay5vLmIsdWUoaC5mLGQpLEZ8fChfdD10dC5qLE09MCxUQyh1KFEoVixxeSksMjEpKSYmKE09dDV0KGsubixrLm8sdHQubywwLF90KSksTHQ9PShvYSgpLEgxKXx8KGJlKCksdXUpLkhjKF90KT9kLm8uYT1NOmQuby5iPU0pO3JldHVybiB3PW5ldyBsZSxSM24odCxlLG4scyx3KSxuJiZ0M24odCxlLG4sdyksd31mdW5jdGlvbiBteHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtpZighdC5jW2UuYy5wXVtlLnBdLmUpe2Zvcih0LmNbZS5jLnBdW2UucF0uZT0hMCx0LmNbZS5jLnBdW2UucF0uYj0wLHQuY1tlLmMucF1bZS5wXS5kPTAsdC5jW2UuYy5wXVtlLnBdLmE9bnVsbCxDPW5ldyBTKGUuaik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxNPW4/bmV3IFlzKGspOm5ldyBFcihrKSx3PU0uS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTEpLGg9ZC5pLGguYz09ZS5jP2ghPWUmJihteHQodCxoLG4pLHQuY1tlLmMucF1bZS5wXS5iKz10LmNbaC5jLnBdW2gucF0uYix0LmNbZS5jLnBdW2UucF0uZCs9dC5jW2guYy5wXVtoLnBdLmQpOih0LmNbZS5jLnBdW2UucF0uZCs9dC5nW2QucF0sKyt0LmNbZS5jLnBdW2UucF0uYik7aWYobz11KFEoZSwoc2UoKSxXVHQpKSwxNSksbylmb3Iocz1vLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxlLmM9PXIuYyYmKG14dCh0LHIsbiksdC5jW2UuYy5wXVtlLnBdLmIrPXQuY1tyLmMucF1bci5wXS5iLHQuY1tlLmMucF1bZS5wXS5kKz10LmNbci5jLnBdW3IucF0uZCk7dC5jW2UuYy5wXVtlLnBdLmI+MCYmKHQuY1tlLmMucF1bZS5wXS5kKz1vbCh0LmksMjQpKlBEKi4wNzAwMDAwMDAyOTgwMjMyMi0uMDM1MDAwMDAwMTQ5MDExNjEsdC5jW2UuYy5wXVtlLnBdLmE9dC5jW2UuYy5wXVtlLnBdLmQvdC5jW2UuYy5wXVtlLnBdLmIpfX1mdW5jdGlvbiBnNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihWPW5ldyBTKHQpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3IoSD11KEooViksMTApLFRnKEgubiksVGcoSC5vKSx5bXQoSC5mKSxDdWUoSCksVnZuKEgpLHR0PW5ldyBTKEguaik7dHQuYTx0dC5jLmMubGVuZ3RoOyl7Zm9yKFk9dShKKHR0KSwxMSksVGcoWS5uKSxUZyhZLmEpLFRnKFkubyksRnMoWSxoc2UoWS5qKSksbz11KFEoWSwoVGUoKSxXZykpLDE5KSxvJiZKdChZLFdnLGRlKC1vLmEpKSxzPW5ldyBTKFkuZyk7cy5hPHMuYy5jLmxlbmd0aDspe2ZvcihyPXUoSihzKSwxNyksbj1laShyLmEsMCk7bi5iIT1uLmQuYzspZT11KHRpKG4pLDgpLFRnKGUpO2lmKHc9dShRKHIsX28pLDc0KSx3KWZvcihkPWVpKHcsMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDgpLFRnKGgpO2ZvcihNPW5ldyBTKHIuYik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksNzApLFRnKGsubiksVGcoay5vKX1mb3IoRj1uZXcgUyhZLmYpO0YuYTxGLmMuYy5sZW5ndGg7KWs9dShKKEYpLDcwKSxUZyhrLm4pLFRnKGsubyl9Zm9yKEguaz09KEduKCkseHMpJiYoSnQoSCwoc2UoKSxvYyksaHNlKHUoUShILG9jKSw2MSkpKSxldm4oSCkpLEM9bmV3IFMoSC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCksQ3VlKGspLFRnKGsubyksVGcoay5uKX19ZnVuY3Rpb24gcDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZTtmb3IodC5lPWUsZD1wcG4oZSksY2U9bmV3IGxlLHI9bmV3IFMoZCk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSwxNSksU2U9bmV3IGxlLGNlLmNbY2UuYy5sZW5ndGhdPVNlLHc9bmV3IHFzLFY9bi5LYygpO1YuT2IoKTspe2ZvcihIPXUoVi5QYigpLDMzKSxvPWJEKHQsSCwhMCwwLDApLFNlLmNbU2UuYy5sZW5ndGhdPW8sWT1ILmksdHQ9SC5qLEY9KCFILm4mJihILm49bmV3IGhlKHFvLEgsMSw3KSksSC5uKSxNPW5ldyBlcihGKTtNLmUhPU0uaS5nYygpOylrPXUoZHIoTSksMTM3KSxzPWJEKHQsaywhMSxZLHR0KSxTZS5jW1NlLmMubGVuZ3RoXT1zO2ZvcihZdD0oIUguYyYmKEguYz1uZXcgaGUoZmwsSCw5LDkpKSxILmMpLEx0PW5ldyBlcihZdCk7THQuZSE9THQuaS5nYygpOylmb3IoZ3Q9dShkcihMdCksMTE4KSxoPWJEKHQsZ3QsITEsWSx0dCksU2UuY1tTZS5jLmxlbmd0aF09aCxfdD1ndC5pK1ksQnQ9Z3Quait0dCxGPSghZ3QubiYmKGd0Lm49bmV3IGhlKHFvLGd0LDEsNykpLGd0Lm4pLEM9bmV3IGVyKEYpO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwxMzcpLHM9YkQodCxrLCExLF90LEJ0KSxTZS5jW1NlLmMubGVuZ3RoXT1zO1VhKHcscyQoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbRzAoSCksZkQoSCldKSkpKX1zMm4odCx3LFNlKX1yZXR1cm4gdC5mPW5ldyBzSHQoY2UpLExvKHQuZixlKSx0LmZ9ZnVuY3Rpb24gYjRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocjtSbj1Kbih0LmUsciksUm49PW51bGwmJihSbj1uZXcgbXgsSD11KFJuLDE4MyksTHQ9ZSsiX3MiLF90PUx0K3MsRj1uZXcgSG0oX3QpLFdmKEgsQ2QsRikpLFFlPXUoUm4sMTgzKSxCeChuLFFlKSxocj1uZXcgbXgsSmIoaHIsIngiLHIuaiksSmIoaHIsInkiLHIuayksV2YoUWUsX2RlLGhyKSxTZT1uZXcgbXgsSmIoU2UsIngiLHIuYiksSmIoU2UsInkiLHIuYyksV2YoUWUsImVuZFBvaW50IixTZSksTT1mTSgoIXIuYSYmKHIuYT1uZXcgU3MoSGgsciw1KSksci5hKSksVj0hTSxWJiYoY2U9bmV3IGJnLG89bmV3IGh6dChjZSksdmEoKCFyLmEmJihyLmE9bmV3IFNzKEhoLHIsNSkpLHIuYSksbyksV2YoUWUsd0gsY2UpKSx3PXNzdChyKSxCdD0hIXcsQnQmJlM0dCh0LmEsUWUsdzh0LEZzdCh0LHNzdChyKSkpLGd0PWFzdChyKSxZdD0hIWd0LFl0JiZTNHQodC5hLFFlLHY4dCxGc3QodCxhc3QocikpKSxrPSghci5lJiYoci5lPW5ldyBDbihaaSxyLDEwLDkpKSxyLmUpLmk9PTAsWT0hayxZJiYoV2U9bmV3IGJnLGg9bmV3IElWdCh0LFdlKSx2YSgoIXIuZSYmKHIuZT1uZXcgQ24oWmksciwxMCw5KSksci5lKSxoKSxXZihRZSx5OHQsV2UpKSxDPSghci5nJiYoci5nPW5ldyBDbihaaSxyLDksMTApKSxyLmcpLmk9PTAsdHQ9IUMsdHQmJih6bj1uZXcgYmcsZD1uZXcgRFZ0KHQsem4pLHZhKCghci5nJiYoci5nPW5ldyBDbihaaSxyLDksMTApKSxyLmcpLGQpLFdmKFFlLG04dCx6bikpfWZ1bmN0aW9uIHY0bih0KXtCbSgpO3ZhciBlLG4scixzLG8saCxkO2ZvcihyPXQuZi5uLGg9Z3d0KHQucikuYS5uYygpO2guT2IoKTspe2lmKG89dShoLlBiKCksMTExKSxzPTAsby5iLlhlKChjaSgpLGhsKSkmJihzPVh0KHllKG8uYi5XZShobCkpKSxzPDApKXN3aXRjaChvLmIuSGYoKS5nKXtjYXNlIDE6ci5kPWIuTWF0aC5tYXgoci5kLC1zKTticmVhaztjYXNlIDM6ci5hPWIuTWF0aC5tYXgoci5hLC1zKTticmVhaztjYXNlIDI6ci5jPWIuTWF0aC5tYXgoci5jLC1zKTticmVhaztjYXNlIDQ6ci5iPWIuTWF0aC5tYXgoci5iLC1zKX1pZihUQyh0LnUpKXN3aXRjaChlPXpvbihvLmIscyksZD0hdSh0LmUuV2UodmIpLDE3NCkuSGMoKGNsKCksck4pKSxuPSExLG8uYi5IZigpLmcpe2Nhc2UgMTpuPWU+ci5kLHIuZD1iLk1hdGgubWF4KHIuZCxlKSxkJiZuJiYoci5kPWIuTWF0aC5tYXgoci5kLHIuYSksci5hPXIuZCtzKTticmVhaztjYXNlIDM6bj1lPnIuYSxyLmE9Yi5NYXRoLm1heChyLmEsZSksZCYmbiYmKHIuYT1iLk1hdGgubWF4KHIuYSxyLmQpLHIuZD1yLmErcyk7YnJlYWs7Y2FzZSAyOm49ZT5yLmMsci5jPWIuTWF0aC5tYXgoci5jLGUpLGQmJm4mJihyLmM9Yi5NYXRoLm1heChyLmIsci5jKSxyLmI9ci5jK3MpO2JyZWFrO2Nhc2UgNDpuPWU+ci5iLHIuYj1iLk1hdGgubWF4KHIuYixlKSxkJiZuJiYoci5iPWIuTWF0aC5tYXgoci5iLHIuYyksci5jPXIuYitzKX19fWZ1bmN0aW9uIHc0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNO2ZvcihrPW5ldyBTKHQpO2suYTxrLmMuYy5sZW5ndGg7KXtzd2l0Y2godz11KEooayksMTApLGg9dShRKHcsKFRlKCksY3UpKSwxNjMpLG89bnVsbCxoLmcpe2Nhc2UgMTpjYXNlIDI6bz0odTIoKSxHNCk7YnJlYWs7Y2FzZSAzOmNhc2UgNDpvPSh1MigpLHU3KX1pZihvKUp0KHcsKHNlKCksSEcpLCh1MigpLEc0KSksbz09dTc/bHEodyxoLChzbygpLEp1KSk6bz09RzQmJmxxKHcsaCwoc28oKSxldSkpO2Vsc2UgaWYoSDModShRKHcsb3MpLDk4KSkmJncuai5jLmxlbmd0aCE9MCl7Zm9yKGU9ITAsTT1uZXcgUyh3LmopO00uYTxNLmMuYy5sZW5ndGg7KXtpZihDPXUoSihNKSwxMSksIShDLmo9PShiZSgpLEhuKSYmQy5lLmMubGVuZ3RoLUMuZy5jLmxlbmd0aD4wfHxDLmo9PUJuJiZDLmUuYy5sZW5ndGgtQy5nLmMubGVuZ3RoPDApKXtlPSExO2JyZWFrfWZvcihzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspaWYobj11KEoocyksMTcpLGQ9dShRKG4uZC5pLGN1KSwxNjMpLGQ9PShoaCgpLHhTKXx8ZD09Rnkpe2U9ITE7YnJlYWt9Zm9yKHI9bmV3IFMoQy5lKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwxNyksZD11KFEobi5jLmksY3UpLDE2MyksZD09KGhoKCkseVMpfHxkPT1mYil7ZT0hMTticmVha319ZSYmbHEodyxoLChzbygpLE1TKSl9fX1mdW5jdGlvbiBtNG4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlO2ZvcihjZT0wLEg9MCxNPW5ldyBTKGUuZSk7TS5hPE0uYy5jLmxlbmd0aDspe2ZvcihDPXUoSihNKSwxMCksRj0wLGQ9MCx3PW4/dShRKEMscFYpLDE5KS5hOl9hLGd0PXI/dShRKEMsYlYpLDE5KS5hOl9hLGs9Yi5NYXRoLm1heCh3LGd0KSxfdD1uZXcgUyhDLmopO190LmE8X3QuYy5jLmxlbmd0aDspe2lmKEx0PXUoSihfdCksMTEpLEJ0PUMubi5iK0x0Lm4uYitMdC5hLmIscilmb3IoaD1uZXcgUyhMdC5nKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksWT1vLmQsVj1ZLmksZSE9dC5hW1YucF0mJih0dD1iLk1hdGgubWF4KHUoUShWLHBWKSwxOSkuYSx1KFEoVixiViksMTkpLmEpLFl0PXUoUShvLChUZSgpLEY2KSksMTkpLmEsWXQ+PWsmJll0Pj10dCYmKEYrPVYubi5iK1kubi5iK1kuYS5iLUJ0LCsrZCkpO2lmKG4pZm9yKGg9bmV3IFMoTHQuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLFk9by5jLFY9WS5pLGUhPXQuYVtWLnBdJiYodHQ9Yi5NYXRoLm1heCh1KFEoVixwViksMTkpLmEsdShRKFYsYlYpLDE5KS5hKSxZdD11KFEobywoVGUoKSxGNikpLDE5KS5hLFl0Pj1rJiZZdD49dHQmJihGKz1WLm4uYitZLm4uYitZLmEuYi1CdCwrK2QpKX1kPjAmJihjZSs9Ri9kLCsrSCl9SD4wPyhlLmE9cypjZS9ILGUuZz1IKTooZS5hPTAsZS5nPTApfWZ1bmN0aW9uIHk0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihuPXUoSihzKSwyOSksdz1uZXcgUyhuLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxlLmpbZC5wXT1kLGUuaVtkLnBdPWUubz09KEUxKCksejEpP1RzOnNzO2ZvcihZdSh0LmMpLGg9dC5hLmIsZS5jPT0oZGQoKSxLZykmJihoPUV0KGgsMTUyKT9WeCh1KGgsMTUyKSk6RXQoaCwxMzEpP3UoaCwxMzEpLmE6RXQoaCw1NCk/bmV3IG12KGgpOm5ldyBNbShoKSksZGFuKHQuZSxlLHQuYikseU0oZS5wLG51bGwpLG89aC5LYygpO28uT2IoKTspZm9yKG49dShvLlBiKCksMjkpLGs9bi5hLGUubz09KEUxKCksejEpJiYoaz1FdChrLDE1Mik/VngodShrLDE1MikpOkV0KGssMTMxKT91KGssMTMxKS5hOkV0KGssNTQpP25ldyBtdihrKTpuZXcgTW0oaykpLEY9ay5LYygpO0YuT2IoKTspTT11KEYuUGIoKSwxMCksZS5nW00ucF09PU0mJk1oZSh0LE0sZSk7Zm9yKHUzbih0LGUpLHI9aC5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMjkpLEY9bmV3IFMobi5hKTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSwxMCksZS5wW00ucF09ZS5wW2UuZ1tNLnBdLnBdLE09PWUuZ1tNLnBdJiYoQz1YdChlLmlbZS5qW00ucF0ucF0pLChlLm89PShFMSgpLHoxKSYmQz5Uc3x8ZS5vPT1qMiYmQzxzcykmJihlLnBbTS5wXT1YdChlLnBbTS5wXSkrQykpO3QuZS5jZygpfWZ1bmN0aW9uIGxoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O3JldHVybiBkPW5ldyB5eHQoZSkseDJuKGQscikscz0hMCx0JiZ0LlhlKChjaSgpLGp3KSkmJihvPXUodC5XZSgoY2koKSxqdykpLDEwMykscz1vPT0oYW8oKSxjMCl8fG89PWpofHxvPT1rZiksZ3VlKGQsITEpLG11KGQuZS53ZigpLG5ldyBidnQoZCwhMSxzKSksZnJ0KGQsZC5mLChLZigpLHNjKSwoYmUoKSxObikpLGZydChkLGQuZixhYyxtciksZnJ0KGQsZC5nLHNjLEJuKSxmcnQoZCxkLmcsYWMsSG4pLFppZShkLE5uKSxaaWUoZCxtciksdlh0KGQsSG4pLHZYdChkLEJuKSxCbSgpLGg9ZC5BLkhjKChfbCgpLFh5KSkmJmQuQi5IYygoY2woKSxpTikpP2xpZShkKTpudWxsLGgmJnFLZShkLmEsaCksdjRuKGQpLE9mbihkKSxOZm4oZCkscTNuKGQpLHh3bihkKSxhMW4oZCksUWl0KGQsTm4pLFFpdChkLG1yKSx0d24oZCkseXluKGQpLG4mJih3bG4oZCksbzFuKGQpLFFpdChkLEhuKSxRaXQoZCxCbiksdz1kLkIuSGMoKGNsKCksZUEpKSx1b2UoZCx3LE5uKSx1b2UoZCx3LG1yKSxsb2UoZCx3LEhuKSxsb2UoZCx3LEJuKSx1cyhuZXcgVG4obnVsbCxuZXcgX24obmV3IGIxKGQuaSksMCkpLG5ldyBnYSksdXMoUmkobmV3IFRuKG51bGwsZ3d0KGQucikuYS5vYygpKSxuZXcgTWEpLG5ldyBIYSksa2RuKGQpLGQuZS51ZihkLm8pLHVzKG5ldyBUbihudWxsLGd3dChkLnIpLmEub2MoKSksbmV3IF9jKSksZC5vfWZ1bmN0aW9uIHg0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKGs9c3Mscj1uZXcgUyh0LmEuYik7ci5hPHIuYy5jLmxlbmd0aDspZT11KEoociksODEpLGs9Yi5NYXRoLm1pbihrLGUuZC5mLmcuYytlLmUuYSk7Zm9yKEg9bmV3IFFpLGg9bmV3IFModC5hLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4OSksby5pPWssby5lPT0wJiZocyhILG8sSC5jLmIsSC5jKTtmb3IoO0guYiE9MDspe2ZvcihvPXUoSC5iPT0wP251bGw6KFFuKEguYiE9MCksY2goSCxILmEuYSkpLDE4OSkscz1vLmYuZy5jLEY9by5hLmEuZWMoKS5LYygpO0YuT2IoKTspQz11KEYuUGIoKSw4MSksWT1vLmkrQy5lLmEsQy5kLmd8fEMuZy5jPFk/Qy5vPVk6Qy5vPUMuZy5jO2ZvcihzLT1vLmYubyxvLmIrPXMsdC5jPT0oYW8oKSxrZil8fHQuYz09UTA/by5jKz1zOm8uYy09cyxNPW8uYS5hLmVjKCkuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDgxKSx3PUMuZi5LYygpO3cuT2IoKTspZD11KHcuUGIoKSw4MSksT3AodC5jKT9WPXQuZi5lZihDLGQpOlY9dC5mLmZmKEMsZCksZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxDLm8rQy5nLmIrVi1kLmUuYSksZC5rfHwoZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxkLmcuYy1kLmUuYSkpLC0tZC5kLmUsZC5kLmU9PTAmJm5pKEgsZC5kKX1mb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLGUuZy5jPWUub31mdW5jdGlvbiBrNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztzd2l0Y2goZD10LmIsZT10LmEsdShRKHQsKEt6KCksJEV0KSksNDI3KS5nKXtjYXNlIDA6WHMoZCxuZXcgZnQobmV3IEVpKSk7YnJlYWs7Y2FzZSAxOmRlZmF1bHQ6WHMoZCxuZXcgZnQobmV3IEpvKSl9c3dpdGNoKHUoUSh0LFJFdCksNDI4KS5nKXtjYXNlIDE6WHMoZCxuZXcga3IpLFhzKGQsbmV3IHZjKSxYcyhkLG5ldyBKMSk7YnJlYWs7Y2FzZSAwOmRlZmF1bHQ6WHMoZCxuZXcga3IpLFhzKGQsbmV3IG9uKX1zd2l0Y2godShRKHQscUV0KSwyNTApLmcpe2Nhc2UgMDp3PW5ldyBYaTticmVhaztjYXNlIDE6dz1uZXcgZWY7YnJlYWs7Y2FzZSAyOnc9bmV3IG5mO2JyZWFrO2Nhc2UgMzp3PW5ldyBPYzticmVhaztjYXNlIDU6dz1uZXcgZnIobmV3IG5mKTticmVhaztjYXNlIDQ6dz1uZXcgZnIobmV3IGVmKTticmVhaztjYXNlIDc6dz1uZXcgRWJ0KG5ldyBmcihuZXcgZWYpLG5ldyBmcihuZXcgbmYpKTticmVhaztjYXNlIDg6dz1uZXcgRWJ0KG5ldyBmcihuZXcgT2MpLG5ldyBmcihuZXcgbmYpKTticmVhaztjYXNlIDY6ZGVmYXVsdDp3PW5ldyBmcihuZXcgT2MpfWZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMTY3KSxyPTAscz0wLG49bmV3IGxhKGRlKHIpLGRlKHMpKTtvbW4oZSxvLHIscyk7KW49dSh3LkNlKG4sbyksNDYpLHI9dShuLmEsMTkpLmEscz11KG4uYiwxOSkuYTtzd24oZSxvLHIscyl9fWZ1bmN0aW9uIEU0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2U7Zm9yKG89dC5mLmIsRj1vLmEsQz1vLmIsVj10LmUuZyxIPXQuZS5mLHNqKHQuZSxvLmEsby5iKSxjZT1GL1YsU2U9Qy9ILGs9bmV3IGVyKFpqKHQuZSkpO2suZSE9ay5pLmdjKCk7KXc9dShkcihrKSwxMzcpLHl1KHcsdy5pKmNlKSx4dSh3LHcuaipTZSk7Zm9yKEx0PW5ldyBlcihabnQodC5lKSk7THQuZSE9THQuaS5nYygpOylndD11KGRyKEx0KSwxMTgpLEJ0PWd0LmksWXQ9Z3QuaixCdD4wJiZ5dShndCxCdCpjZSksWXQ+MCYmeHUoZ3QsWXQqU2UpO2ZvcihVQyh0LmIsbmV3IGN2KSxlPW5ldyBsZSxkPW5ldyBoMihuZXcgd2codC5jKS5hKTtkLmI7KWg9WXYoZCkscj11KGguY2QoKSw3OSksbj11KGguZGQoKSwzOTUpLmEscz1tNChyLCExLCExKSxNPXVhZShaZChyKSxzRChzKSxuKSx5RChNLHMpLF90PXhhZShyKSxfdCYmUm8oZSxfdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09X3QsU1h0KF90LChRbihNLmIhPTApLHUoTS5hLmEuYyw4KSksbikpO2Zvcih0dD1uZXcgaDIobmV3IHdnKHQuZCkuYSk7dHQuYjspWT1Zdih0dCkscj11KFkuY2QoKSw3OSksbj11KFkuZGQoKSwzOTUpLmEscz1tNChyLCExLCExKSxNPXVhZShYcChyKSxCSShzRChzKSksbiksTT1CSShNKSx5RChNLHMpLF90PWthZShyKSxfdCYmUm8oZSxfdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09X3QsU1h0KF90LChRbihNLmIhPTApLHUoTS5jLmIuYyw4KSksbikpfWZ1bmN0aW9uIGhoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2U7aWYobi5jLmxlbmd0aCE9MCl7Zm9yKEg9bmV3IGxlLEY9bmV3IFMobik7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMzMpLHVlKEgsbmV3ICRlKE0uaSxNLmopKTtmb3Ioci5uJiZlJiZoZihyLGZmKGUpLChDbCgpLFlsKSk7STR0KHQsbik7KXNxKHQsbiwhMSk7Zm9yKHIubiYmZSYmaGYocixmZihlKSwoQ2woKSxZbCkpLGg9MCxkPTAscz1udWxsLG4uYy5sZW5ndGghPTAmJihzPShBbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDMzKSksaD1zLmktKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmEsZD1zLmotKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmIpLG89Yi5NYXRoLnNxcnQoaCpoK2QqZCksQz1EcmUobik7Qy5hLmdjKCkhPTA7KXtmb3Ioaz1DLmEuZWMoKS5LYygpO2suT2IoKTspdz11KGsuUGIoKSwzMyksVj10LmYsWT1WLmkrVi5nLzIsdHQ9Vi5qK1YuZi8yLGd0PXcuaSt3LmcvMixMdD13Lmordy5mLzIsX3Q9Z3QtWSxCdD1MdC10dCxZdD1iLk1hdGguc3FydChfdCpfdCtCdCpCdCksY2U9X3QvWXQsU2U9QnQvWXQseXUodyx3LmkrY2UqbykseHUodyx3LmorU2Uqbyk7ci5uJiZlJiZoZihyLGZmKGUpLChDbCgpLFlsKSksQz1EcmUobmV3IFB1KEMpKX10LmEmJnQuYS5sZyhuZXcgUHUoQykpLHIubiYmZSYmaGYocixmZihlKSwoQ2woKSxZbCkpLGhoZSh0LGUsbmV3IFB1KEMpLHIpfX1mdW5jdGlvbiBUNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2lmKFk9dC5uLHR0PXQubyxGPXQuZCxNPVh0KHllKGl5KHQsKFRlKCksSmx0KSkpKSxlKXtmb3IoQz1NKihlLmdjKCktMSksSD0wLHc9ZS5LYygpO3cuT2IoKTspaD11KHcuUGIoKSwxMCksQys9aC5vLmEsSD1iLk1hdGgubWF4KEgsaC5vLmIpO2ZvcihndD1ZLmEtKEMtdHQuYSkvMixvPVkuYi1GLmQrSCxyPXR0LmEvKGUuZ2MoKSsxKSxzPXIsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLWguby5iLGd0Kz1oLm8uYStNLGs9RWNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9aC5vLmIsVj11KFEoaCwoc2UoKSx6RykpLDExKSxWLmUuYy5sZW5ndGgrVi5nLmMubGVuZ3RoPT0xJiYoVi5uLmE9cy1WLmEuYSxWLm4uYj0wLFVvKFYsdCkpLHMrPXJ9aWYobil7Zm9yKEM9TSoobi5nYygpLTEpLEg9MCx3PW4uS2MoKTt3Lk9iKCk7KWg9dSh3LlBiKCksMTApLEMrPWguby5hLEg9Yi5NYXRoLm1heChILGguby5iKTtmb3IoZ3Q9WS5hLShDLXR0LmEpLzIsbz1ZLmIrdHQuYitGLmEtSCxyPXR0LmEvKG4uZ2MoKSsxKSxzPXIsZD1uLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLGd0Kz1oLm8uYStNLGs9RWNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9MCxWPXUoUShoLChzZSgpLHpHKSksMTEpLFYuZS5jLmxlbmd0aCtWLmcuYy5sZW5ndGg9PTEmJihWLm4uYT1zLVYuYS5hLFYubi5iPXR0LmIsVW8oVix0KSkscys9cn19ZnVuY3Rpb24gQzRuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHUoUShlLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkpe2ZvcihkPW5ldyBTKGUuYSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMTApLG8uaz09KEduKCksRHMpJiYocz11KFEobywoVGUoKSxlVikpLDE0MiksdC5jPWIuTWF0aC5taW4odC5jLG8ubi5hLXMuYiksdC5hPWIuTWF0aC5tYXgodC5hLG8ubi5hK28uby5hK3MuYyksdC5kPWIuTWF0aC5taW4odC5kLG8ubi5iLXMuZCksdC5iPWIuTWF0aC5tYXgodC5iLG8ubi5iK28uby5iK3MuYSkpO2ZvcihoPW5ldyBTKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLG8uayE9KEduKCksRHMpKXN3aXRjaChvLmsuZyl7Y2FzZSAyOmlmKHI9dShRKG8sKFRlKCksY3UpKSwxNjMpLHI9PShoaCgpLGZiKSl7by5uLmE9dC5jLTEwLE5zZShvLG5ldyBMWSkuSmIobmV3IEphKG8pKTticmVha31pZihyPT1GeSl7by5uLmE9dC5hKzEwLE5zZShvLG5ldyBNWSkuSmIobmV3IHZsKG8pKTticmVha31pZihuPXUoUShvLE8yKSwzMDMpLG49PShCMCgpLFU0KSl7UGxlKG8pLkpiKG5ldyB6ZihvKSksby5uLmI9dC5kLTEwO2JyZWFrfWlmKG49PUE2KXtQbGUobykuSmIobmV3IHhwKG8pKSxvLm4uYj10LmIrMTA7YnJlYWt9YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIlRoZSBub2RlIHR5cGUgIitvLmsrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAiK2x4bikpfX19ZnVuY3Rpb24gXzRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3Iodz1uZXcgJGUoci5pK3IuZy8yLHIuaityLmYvMiksSD1JbGUociksVj11KHFlKGUsKFRlKCksb3MpKSw5OCksdHQ9dShxZShyLHY3KSw2MSksJFZ0KFZpZShyKSx6eSl8fChyLmk9PTAmJnIuaj09MD9ZPTA6WT1pMG4ocix0dCksYm8ocix6eSxZKSksaz1uZXcgJGUoZS5nLGUuZikscz1URChyLFYsdHQsSCxrLHcsbmV3ICRlKHIuZyxyLmYpLHUoUShuLFZsKSwxMDMpLG4pLEp0KHMsKHNlKCksX2kpLHIpLG89dShGZShzLmosMCksMTEpLHl0dChvLFF3bihyKSksSnQocyxxeSwoUXUoKSx1bih4YikpKSxNPXUocWUoZSxxeSksMTc0KS5IYyh0ZyksZD1uZXcgZXIoKCFyLm4mJihyLm49bmV3IGhlKHFvLHIsMSw3KSksci5uKSk7ZC5lIT1kLmkuZ2MoKTspaWYoaD11KGRyKGQpLDEzNyksIWplKFJlKHFlKGgsQjIpKSkmJmguYSYmKEY9T2l0KGgpLHVlKG8uZixGKSwhTSkpc3dpdGNoKEM9MCxUQyh1KHFlKGUscXkpLDIxKSkmJihDPXQ1dChuZXcgJGUoaC5pLGguaiksbmV3ICRlKGguZyxoLmYpLG5ldyAkZShyLmcsci5mKSwwLHR0KSksdHQuZyl7Y2FzZSAyOmNhc2UgNDpGLm8uYT1DO2JyZWFrO2Nhc2UgMTpjYXNlIDM6Ri5vLmI9Q31KdChzLG03LHllKHFlKHRzKGUpLG03KSkpLEp0KHMseTcseWUocWUodHMoZSkseTcpKSksSnQocyxHeSx5ZShxZSh0cyhlKSxHeSkpKSx1ZShuLmEscyksa2kodC5hLHIscyl9ZnVuY3Rpb24gZmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdDtmb3Iod3IobiwiUHJvY2Vzc29yIGFycmFuZ2UgbGV2ZWwiLDEpLEM9MCx2bigpLGU0KGUsbmV3IGJwdCgoZmMoKSxtVikpKSxvPWUuYixkPWVpKGUsZS5iKSxrPSEwO2smJmQuYi5iIT1kLmQuYTspZ3Q9dShrcnQoZCksODYpLHUoUShndCxtViksMTkpLmE9PTA/LS1vOms9ITE7aWYoWXQ9bmV3IEtkKGUsMCxvKSxoPW5ldyBibnQoWXQpLFl0PW5ldyBLZChlLG8sZS5iKSx3PW5ldyBibnQoWXQpLGguYj09MClmb3IoVj1laSh3LDApO1YuYiE9Vi5kLmM7KUg9dSh0aShWKSw4NiksSnQoSCxrVixkZShDKyspKTtlbHNlIGZvcihNPWguYixCdD1laShoLDApO0J0LmIhPUJ0LmQuYzspe2ZvcihfdD11KHRpKEJ0KSw4NiksSnQoX3Qsa1YsZGUoQysrKSkscj1ieXQoX3QpLGZoZSh0LHIsUmMobiwxL018MCkpLGU0KHIsRXd0KG5ldyBicHQoa1YpKSksRj1uZXcgUWksTHQ9ZWkociwwKTtMdC5iIT1MdC5kLmM7KWZvcihndD11KHRpKEx0KSw4NiksdHQ9ZWkoX3QuZCwwKTt0dC5iIT10dC5kLmM7KVk9dSh0aSh0dCksMTg4KSxZLmM9PWd0JiZocyhGLFksRi5jLmIsRi5jKTtmb3IoX2goX3QuZCksVWEoX3QuZCxGKSxkPWVpKHcsdy5iKSxzPV90LmQuYixrPSEwOzA8cyYmayYmZC5iLmIhPWQuZC5hOylndD11KGtydChkKSw4NiksdShRKGd0LG1WKSwxOSkuYT09MD8oSnQoZ3Qsa1YsZGUoQysrKSksLS1zLEgkKGQpKTprPSExfW9yKG4pfWZ1bmN0aW9uIFM0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKHdyKGUsIkludmVydGVkIHBvcnQgcHJlcHJvY2Vzc2luZyIsMSksQz10LmIsaz1uZXcgaGEoQywwKSxuPW51bGwsX3Q9bmV3IGxlO2suYjxrLmQuZ2MoKTspe2ZvcihMdD1uLG49KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwyOSkpLEg9bmV3IFMoX3QpO0guYTxILmMuYy5sZW5ndGg7KU09dShKKEgpLDEwKSxrbyhNLEx0KTtmb3IoX3QuYz1QdChYbixJZSwxLDAsNSwxKSxWPW5ldyBTKG4uYSk7Vi5hPFYuYy5jLmxlbmd0aDspaWYoTT11KEooViksMTApLE0uaz09KEduKCksRHMpJiZIMyh1KFEoTSwoVGUoKSxvcykpLDk4KSkpe2ZvcihndD1qNXQoTSwoc28oKSxKdSksKGJlKCksSG4pKS5LYygpO2d0Lk9iKCk7KWZvcihZPXUoZ3QuUGIoKSwxMSksdz1ZLmUsZD11KEQxKHcsUHQodGx0LEZvdCwxNyx3LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFptbih0LFkscixfdCk7Zm9yKHR0PWo1dChNLGV1LEJuKS5LYygpO3R0Lk9iKCk7KWZvcihZPXUodHQuUGIoKSwxMSksdz1ZLmcsZD11KEQxKHcsUHQodGx0LEZvdCwxNyx3LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFFtbih0LFkscixfdCl9fWZvcihGPW5ldyBTKF90KTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSwxMCksa28oTSxuKTtvcihlKX1mdW5jdGlvbiBBNG4odCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEMsTTtmb3Ioaz1uZXcgTWMsTG8oayxlKSxGcyhrLHUocWUoZSwoVGUoKSx2NykpLDYxKSksSnQoaywoc2UoKSxfaSksZSksVW8oayxuKSxNPWsubyxNLmE9ZS5nLE0uYj1lLmYsQz1rLm4sQy5hPWUuaSxDLmI9ZS5qLGtpKHQuYSxlLGspLGg9QTgocHUoV28obmV3IFRuKG51bGwsKCFlLmUmJihlLmU9bmV3IENuKFdzLGUsNyw0KSksbmV3IF9uKGUuZSwxNikpKSxuZXcgWFApLG5ldyB6NSksbmV3IGlyKGUpKSxofHwoaD1BOChwdShXbyhuZXcgVG4obnVsbCwoIWUuZCYmKGUuZD1uZXcgQ24oV3MsZSw4LDUpKSxuZXcgX24oZS5kLDE2KSkpLG5ldyBiayksbmV3IERUKSxuZXcgc3IoZSkpKSxofHwoaD1BOChuZXcgVG4obnVsbCwoIWUuZSYmKGUuZT1uZXcgQ24oV3MsZSw3LDQpKSxuZXcgX24oZS5lLDE2KSkpLG5ldyByWSkpLEp0KGssa08sKEZuKCksISFoKSksVnluKGssbyxzLHUocWUoZSxQdyksOCkpLHc9bmV3IGVyKCghZS5uJiYoZS5uPW5ldyBoZShxbyxlLDEsNykpLGUubikpO3cuZSE9dy5pLmdjKCk7KWQ9dShkcih3KSwxMzcpLCFqZShSZShxZShkLEIyKSkpJiZkLmEmJnVlKGsuZixPaXQoZCkpO3N3aXRjaChzLmcpe2Nhc2UgMjpjYXNlIDE6KGsuaj09KGJlKCksTm4pfHxrLmo9PW1yKSYmci5GYygob28oKSxWNCkpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KGsuaj09KGJlKCksSG4pfHxrLmo9PUJuKSYmci5GYygob28oKSxWNCkpfXJldHVybiBrfWZ1bmN0aW9uIExhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKEY9bnVsbCxyPT0ocXYoKSxiYik/Rj1lOnI9PWU1JiYoRj1uKSxZPUYuYS5lYygpLktjKCk7WS5PYigpOyl7Zm9yKFY9dShZLlBiKCksMTEpLHR0PUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5iLF90PW5ldyBxcyxkPW5ldyBxcyxrPW5ldyBTMShWLmIpO1ZvKGsuYSl8fFZvKGsuYik7KWlmKHc9dShWbyhrLmEpP0ooay5hKTpKKGsuYiksMTcpLGplKFJlKFEodywoc2UoKSwkMSkpKSk9PXMmJlJvKG8sdywwKSE9LTEpe2lmKHcuZD09Vj9ndD13LmM6Z3Q9dy5kLEx0PUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbZ3QuaS5uLGd0Lm4sZ3QuYV0pKS5iLGIuTWF0aC5hYnMoTHQtdHQpPC4yKWNvbnRpbnVlO0x0PHR0P2UuYS5fYihndCk/TnMoX3QsbmV3IGxhKGJiLHcpKTpOcyhfdCxuZXcgbGEoZTUsdykpOmUuYS5fYihndCk/TnMoZCxuZXcgbGEoYmIsdykpOk5zKGQsbmV3IGxhKGU1LHcpKX1pZihfdC5hLmdjKCk+MSlmb3IoSD1uZXcgaHh0KFYsX3QsciksdmEoX3QsbmV3IGlWdCh0LEgpKSxoLmNbaC5jLmxlbmd0aF09SCxNPV90LmEuZWMoKS5LYygpO00uT2IoKTspQz11KE0uUGIoKSw0NiksdnUobyxDLmIpO2lmKGQuYS5nYygpPjEpZm9yKEg9bmV3IGh4dChWLGQsciksdmEoZCxuZXcgc1Z0KHQsSCkpLGguY1toLmMubGVuZ3RoXT1ILE09ZC5hLmVjKCkuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNDYpLHZ1KG8sQy5iKX19ZnVuY3Rpb24gZGhlKHQpe1N2KHQsbmV3IHcyKG1SKEV2KHl2KGt2KHh2KG5ldyBwZyxUZCksIkVMSyBSYWRpYWwiKSwnQSByYWRpYWwgbGF5b3V0IHByb3ZpZGVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gb2YgUGV0ZXIgRWFkZXMgcHVibGlzaGVkIGluICJEcmF3aW5nIGZyZWUgdHJlZXMuIiwgcHVibGlzaGVkIGJ5IEludGVybmF0aW9uYWwgSW5zdGl0dXRlIGZvciBBZHZhbmNlZCBTdHVkeSBvZiBTb2NpYWwgSW5mb3JtYXRpb24gU2NpZW5jZSwgRnVqaXRzdSBMaW1pdGVkIGluIDE5OTEuIFRoZSByYWRpYWwgbGF5b3V0ZXIgdGFrZXMgYSB0cmVlIGFuZCBwbGFjZXMgdGhlIG5vZGVzIGluIHJhZGlhbCBvcmRlciBhcm91bmQgdGhlIHJvb3QuIFRoZSBub2RlcyBvZiB0aGUgc2FtZSB0cmVlIGxldmVsIGFyZSBwbGFjZWQgb24gdGhlIHNhbWUgcmFkaXVzLicpLG5ldyBuWiksVGQpKSkseGUodCxUZCx1SCxEZShOeWUpKSx4ZSh0LFRkLGt5LERlKFB5ZSkpLHhlKHQsVGQsTDQsRGUoTXllKSkseGUodCxUZCx3NixEZShJeWUpKSx4ZSh0LFRkLHY2LERlKER5ZSkpLHhlKHQsVGQsUkUsRGUoTHllKSkseGUodCxUZCxGXyxEZShrX3QpKSx4ZSh0LFRkLGpFLERlKE95ZSkpLHhlKHQsVGQsRWN0LERlKEZodCkpLHhlKHQsVGQsa2N0LERlKEJodCkpLHhlKHQsVGQsVmt0LERlKEVfdCkpLHhlKHQsVGQsemt0LERlKF9WKSkseGUodCxUZCxxa3QsRGUoU1YpKSx4ZSh0LFRkLEhrdCxEZShCTykpLHhlKHQsVGQsR2t0LERlKFRfdCkpfWZ1bmN0aW9uIHl4dCh0KXt2YXIgZTtpZih0aGlzLnI9cm5uKG5ldyBiYyxuZXcgQ2MpLHRoaXMuYj1uZXcgZV8odShBcihYYSksMjkwKSksdGhpcy5wPW5ldyBlXyh1KEFyKFhhKSwyOTApKSx0aGlzLmk9bmV3IGVfKHUoQXIoRXBlKSwyOTApKSx0aGlzLmU9dCx0aGlzLm89bmV3IHlvKHQucmYoKSksdGhpcy5EPXQuRGYoKXx8amUoUmUodC5XZSgoY2koKSxXTykpKSksdGhpcy5BPXUodC5XZSgoY2koKSx6MikpLDIxKSx0aGlzLkI9dSh0LldlKHZiKSwyMSksdGhpcy5xPXUodC5XZShVUyksOTgpLHRoaXMudT11KHQuV2UoS3kpLDIxKSwhbDBuKHRoaXMudSkpdGhyb3cgcnQobmV3IEYzKCJJbnZhbGlkIHBvcnQgbGFiZWwgcGxhY2VtZW50OiAiK3RoaXMudSkpO2lmKHRoaXMudj1qZShSZSh0LldlKG5BdCkpKSx0aGlzLmo9dSh0LldlKHM1KSwyMSksIU5ibih0aGlzLmopKXRocm93IHJ0KG5ldyBGMygiSW52YWxpZCBub2RlIGxhYmVsIHBsYWNlbWVudDogIit0aGlzLmopKTt0aGlzLm49dShvXyh0LEhTdCksMTE2KSx0aGlzLms9WHQoeWUob18odCxxVikpKSx0aGlzLmQ9WHQoeWUob18odCxhQXQpKSksdGhpcy53PVh0KHllKG9fKHQsaEF0KSkpLHRoaXMucz1YdCh5ZShvXyh0LG9BdCkpKSx0aGlzLnQ9WHQoeWUob18odCxjQXQpKSksdGhpcy5DPXUob18odCx1QXQpLDE0MiksdGhpcy5jPTIqdGhpcy5kLGU9IXRoaXMuQi5IYygoY2woKSxyTikpLHRoaXMuZj1uZXcgcl8oMCxlLDApLHRoaXMuZz1uZXcgcl8oMSxlLDApLEp0dCh0aGlzLmYsKEtmKCksdHUpLHRoaXMuZyl9ZnVuY3Rpb24gTDRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbjtmb3IoX3Q9MCxWPTAsSD0wLEY9MSxMdD1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtMdC5lIT1MdC5pLmdjKCk7KXR0PXUoZHIoTHQpLDMzKSxGKz1OMChuZXcgYXIobHIoRzAodHQpLmEuS2MoKSxuZXcgeikpKSxXZT10dC5nLFY9Yi5NYXRoLm1heChWLFdlKSxNPXR0LmYsSD1iLk1hdGgubWF4KEgsTSksX3QrPVdlKk07Zm9yKFk9KCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpLmksaD1fdCsyKnIqcipGKlksbz1iLk1hdGguc3FydChoKSx3PWIuTWF0aC5tYXgobypuLFYpLGQ9Yi5NYXRoLm1heChvL24sSCksZ3Q9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7Z3QuZSE9Z3QuaS5nYygpOyl0dD11KGRyKGd0KSwzMyksUWU9cy5iKyhvbChlLDI2KSpMXytvbChlLDI3KSpNXykqKHctdHQuZyksUm49cy5iKyhvbChlLDI2KSpMXytvbChlLDI3KSpNXykqKGQtdHQuZikseXUodHQsUWUpLHh1KHR0LFJuKTtmb3IoU2U9dysocy5iK3MuYyksY2U9ZCsocy5kK3MuYSksWXQ9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7WXQuZSE9WXQuaS5nYygpOylmb3IoQnQ9dShkcihZdCksMzMpLEM9bmV3IGFyKGxyKEcwKEJ0KS5hLktjKCksbmV3IHopKTt6cihDKTspaz11KExyKEMpLDc5KSxnXyhrKXx8TTVuKGssZSxTZSxjZSk7U2UrPXMuYitzLmMsY2UrPXMuZCtzLmEsZ3codCxTZSxjZSwhMSwhMCl9ZnVuY3Rpb24gU3EodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtpZih0PT1udWxsKXRocm93IHJ0KG5ldyBvZChUdSkpO2lmKGs9dCxvPXQubGVuZ3RoLHc9ITEsbz4wJiYoZT0oUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSwoZT09NDV8fGU9PTQzKSYmKHQ9dC5zdWJzdHIoMSksLS1vLHc9ZT09NDUpKSxvPT0wKXRocm93IHJ0KG5ldyBvZCh2dytrKyciJykpO2Zvcig7dC5sZW5ndGg+MCYmKFJyKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDgpOyl0PXQuc3Vic3RyKDEpLC0tbztpZihvPihlbGUoKSxFZ2UpWzEwXSl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtmb3Iocz0wO3M8bztzKyspaWYoTWllKChScihzLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocykpKT09LTEpdGhyb3cgcnQobmV3IG9kKHZ3K2srJyInKSk7Zm9yKE09MCxoPW9FdFsxMF0sQz1UdXRbMTBdLGQ9TzgoY0V0WzEwXSksbj0hMCxyPW8laCxyPjAmJihNPS1wYXJzZUludCh0LnN1YnN0cigwLHIpLDEwKSx0PXQuc3Vic3RyKHIpLG8tPXIsbj0hMSk7bz49aDspe2lmKHI9cGFyc2VJbnQodC5zdWJzdHIoMCxoKSwxMCksdD10LnN1YnN0cihoKSxvLT1oLG4pbj0hMTtlbHNle2lmKHljKE0sZCk8MCl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtNPUNhKE0sQyl9TT1ZcChNLHIpfWlmKHljKE0sMCk+MCl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtpZighdyYmKE09TzgoTSkseWMoTSwwKTwwKSl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtyZXR1cm4gTX1mdW5jdGlvbiB4eHQodCxlKXtHS3QoKTt2YXIgbixyLHMsbyxoLGQsdztpZih0aGlzLmE9bmV3IGgydCh0aGlzKSx0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmY9am50KEVvKChSdSgpLG1hKSxlKSksdGhpcy5mLmRjKCkpaWYoKGQ9YTR0KG1hLHQpKT09ZSlmb3IodGhpcy5lPSEwLHRoaXMuZD1uZXcgbGUsdGhpcy5mPW5ldyBDayx0aGlzLmYuRmMoTDIpLHUoRXEobUkobWEsRmwodCkpLCIiKSwyNik9PXQmJnRoaXMuZi5GYyhrQyhtYSxGbCh0KSkpLHM9b2F0KG1hLHQpLktjKCk7cy5PYigpOylzd2l0Y2gocj11KHMuUGIoKSwxNzApLCR2KEVvKG1hLHIpKSl7Y2FzZSA0Ont0aGlzLmQuRmMocik7YnJlYWt9Y2FzZSA1Ont0aGlzLmYuR2Moam50KEVvKG1hLHIpKSk7YnJlYWt9fWVsc2UgaWYodG8oKSx1KGUsNjYpLk9qKCkpZm9yKHRoaXMuZT0hMCx0aGlzLmY9bnVsbCx0aGlzLmQ9bmV3IGxlLGg9MCx3PSh0Lmk9PW51bGwmJnBkKHQpLHQuaSkubGVuZ3RoO2g8dzsrK2gpZm9yKHI9KG49KHQuaT09bnVsbCYmcGQodCksdC5pKSxoPj0wJiZoPG4ubGVuZ3RoP25baF06bnVsbCksbz1xeChFbyhtYSxyKSk7bztvPXF4KEVvKG1hLG8pKSlvPT1lJiZ0aGlzLmQuRmMocik7ZWxzZSAkdihFbyhtYSxlKSk9PTEmJmQ/KHRoaXMuZj1udWxsLHRoaXMuZD0oYTYoKSxoNWUpKToodGhpcy5mPW51bGwsdGhpcy5lPSEwLHRoaXMuZD0odm4oKSxuZXcgRChlKSkpO2Vsc2UgdGhpcy5lPSR2KEVvKG1hLGUpKT09NSx0aGlzLmYuRmIoTGZ0KSYmKHRoaXMuZj1MZnQpfWZ1bmN0aW9uIGdoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihuPTAscj1rZm4odCxlKSxGPXQucyxIPXQudCxrPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO2suT2IoKTspaWYodz11KGsuUGIoKSwxMTEpLCEoIXcuY3x8dy5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goVj13LmIucmYoKSxkPXcuYi5YZSgoY2koKSxobCkpP1h0KHllKHcuYi5XZShobCkpKTowLEM9dy5jLE09Qy5pLE0uYj0oaD1DLm4sQy5lLmEraC5iK2guYyksTS5hPShvPUMubixDLmUuYitvLmQrby5hKSxlLmcpe2Nhc2UgMTpNLmM9dy5hPyhWLmEtTS5iKS8yOlYuYStGLE0uZD1WLmIrZCtyLFVmKEMsKFh1KCksY2IpKSxsZChDLCh3dSgpLGUxKSk7YnJlYWs7Y2FzZSAzOk0uYz13LmE/KFYuYS1NLmIpLzI6Vi5hK0YsTS5kPS1kLXItTS5hLFVmKEMsKFh1KCksY2IpKSxsZChDLCh3dSgpLHlmKSk7YnJlYWs7Y2FzZSAyOk0uYz0tZC1yLU0uYix3LmE/KHM9dC52P00uYTp1KEZlKEMuZCwwKSwxODEpLnJmKCkuYixNLmQ9KFYuYi1zKS8yKTpNLmQ9Vi5iK0gsVWYoQywoWHUoKSxtZikpLGxkKEMsKHd1KCksdWIpKTticmVhaztjYXNlIDQ6TS5jPVYuYStkK3Isdy5hPyhzPXQudj9NLmE6dShGZShDLmQsMCksMTgxKS5yZigpLmIsTS5kPShWLmItcykvMik6TS5kPVYuYitILFVmKEMsKFh1KCksU2QpKSxsZChDLCh3dSgpLHViKSl9KGU9PShiZSgpLE5uKXx8ZT09bXIpJiYobj1iLk1hdGgubWF4KG4sTS5hKSl9bj4wJiYodShnbyh0LmIsZSksMTI0KS5hLmI9bil9ZnVuY3Rpb24gTTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3Iod3IoZSwiQ29tbWVudCBwcmUtcHJvY2Vzc2luZyIsMSksbj0wLHc9bmV3IFModC5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihkPXUoSih3KSwxMCksamUoUmUoUShkLChUZSgpLGtTKSkpKSl7Zm9yKCsrbixzPTAscj1udWxsLGs9bnVsbCxWPW5ldyBTKGQuaik7Vi5hPFYuYy5jLmxlbmd0aDspRj11KEooViksMTEpLHMrPUYuZS5jLmxlbmd0aCtGLmcuYy5sZW5ndGgsRi5lLmMubGVuZ3RoPT0xJiYocj11KEZlKEYuZSwwKSwxNyksaz1yLmMpLEYuZy5jLmxlbmd0aD09MSYmKHI9dShGZShGLmcsMCksMTcpLGs9ci5kKTtpZihzPT0xJiZrLmUuYy5sZW5ndGgray5nLmMubGVuZ3RoPT0xJiYhamUoUmUoUShrLmksa1MpKSkpaTVuKGQscixrLGsuaSksX0Modyk7ZWxzZXtmb3IoZ3Q9bmV3IGxlLEg9bmV3IFMoZC5qKTtILmE8SC5jLmMubGVuZ3RoOyl7Zm9yKEY9dShKKEgpLDExKSxNPW5ldyBTKEYuZyk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTcpLEMuZC5nLmMubGVuZ3RoPT0wfHwoZ3QuY1tndC5jLmxlbmd0aF09Qyk7Zm9yKGg9bmV3IFMoRi5lKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksby5jLmUuYy5sZW5ndGg9PTB8fChndC5jW2d0LmMubGVuZ3RoXT1vKX1mb3IodHQ9bmV3IFMoZ3QpO3R0LmE8dHQuYy5jLmxlbmd0aDspWT11KEoodHQpLDE3KSxkdyhZLCEwKX19ZS5uJiZZYihlLCJGb3VuZCAiK24rIiBjb21tZW50IGJveGVzIiksb3IoZSl9ZnVuY3Rpb24gSTRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWTtpZihGPVh0KHllKFEodCwoVGUoKSxtNykpKSksSD1YdCh5ZShRKHQseTcpKSksTT1YdCh5ZShRKHQsR3kpKSksZD10Lm8sbz11KEZlKHQuaiwwKSwxMSksaD1vLm4sWT1jZ24obyxNKSwhIVkpe2lmKGUuSGMoKFF1KCksdGcpKSlzd2l0Y2godShRKHQsKHNlKCksb2MpKSw2MSkuZyl7Y2FzZSAxOlkuYz0oZC5hLVkuYikvMi1oLmEsWS5kPUg7YnJlYWs7Y2FzZSAzOlkuYz0oZC5hLVkuYikvMi1oLmEsWS5kPS1ILVkuYTticmVhaztjYXNlIDI6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KEM9cj9ZLmE6dShGZShvLmYsMCksNzApLm8uYixZLmQ9KGQuYi1DKS8yLWguYik6WS5kPWQuYitILWguYixZLmM9LUYtWS5iO2JyZWFrO2Nhc2UgNDpuJiZvLmUuYy5sZW5ndGg9PTAmJm8uZy5jLmxlbmd0aD09MD8oQz1yP1kuYTp1KEZlKG8uZiwwKSw3MCkuby5iLFkuZD0oZC5iLUMpLzItaC5iKTpZLmQ9ZC5iK0gtaC5iLFkuYz1GfWVsc2UgaWYoZS5IYyh4Yikpc3dpdGNoKHUoUSh0LChzZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpjYXNlIDM6WS5jPWguYStGO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6biYmIW8uYz8oQz1yP1kuYTp1KEZlKG8uZiwwKSw3MCkuby5iLFkuZD0oZC5iLUMpLzItaC5iKTpZLmQ9aC5iK0h9Zm9yKHM9WS5kLGs9bmV3IFMoby5mKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSw3MCksVj13Lm4sVi5hPVkuYyxWLmI9cyxzKz13Lm8uYitNfX1mdW5jdGlvbiBENG4oKXtyaShmTixuZXcgd0opLHJpKGNVLG5ldyBrSikscmkoZE4sbmV3IE9rKSxyaShwTHQsbmV3IFNKKSxyaShBZSxuZXcgRmspLHJpKG90KEh1LDEpLG5ldyBoOSkscmkoQnMsbmV3IExKKSxyaShFNixuZXcgYXgpLHJpKEFlLG5ldyBoMSkscmkoQWUsbmV3IHdCKSxyaShBZSxuZXcgbUIpLHJpKGNhLG5ldyB5QikscmkoQWUsbmV3IHhCKSxyaShwaCxuZXcga0IpLHJpKHBoLG5ldyBFQikscmkoQWUsbmV3IGpmKSxyaShYRSxuZXcgaHUpLHJpKEFlLG5ldyB2SikscmkoQWUsbmV3IG1KKSxyaShBZSxuZXcgZnUpLHJpKEFlLG5ldyBzOSkscmkoQWUsbmV3IFRCKSxyaShvdChIdSwxKSxuZXcgQ0IpLHJpKEFlLG5ldyBzeCkscmkoQWUsbmV3IHlKKSxyaShwaCxuZXcgRGspLHJpKHBoLG5ldyB4SikscmkoQWUsbmV3IF9CKSxyaShqYSxuZXcgRUopLHJpKEFlLG5ldyBhOSkscmkoVHcsbmV3IFNCKSxyaShBZSxuZXcgekwpLHJpKEFlLG5ldyBvOSkscmkoQWUsbmV3IFRKKSxyaShBZSxuZXcgQ0opLHJpKHBoLG5ldyBxTCkscmkocGgsbmV3IGM5KSxyaShBZSxuZXcgZjEpLHJpKEFlLG5ldyBfSikscmkoQWUsbmV3IE5rKSxyaShBZSxuZXcgSEwpLHJpKEFlLG5ldyBIYikscmkoQWUsbmV3IHU5KSxyaShDdyxuZXcgR0wpLHJpKEFlLG5ldyAkZikscmkoQWUsbmV3IGw5KSxyaShBZSxuZXcgZDEpLHJpKEN3LG5ldyBnMSkscmkoVHcsbmV3IEFKKSxyaShBZSxuZXcgQTMpLHJpKGphLG5ldyBQayl9ZnVuY3Rpb24ga3h0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtpZihGPWUubGVuZ3RoLEY+MCYmKHc9KFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKSksdyE9NjQpKXtpZih3PT0zNyYmKE09ZS5sYXN0SW5kZXhPZigiJSIpLGs9ITEsTSE9MCYmKE09PUYtMXx8KGs9KFJyKE0rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KE0rMSk9PTQ2KSkpKSl7aWYoaD1lLnN1YnN0cigxLE0tMSksX3Q9aG4oIiUiLGgpP251bGw6RXh0KGgpLHI9MCxrKXRyeXtyPSRsKGUuc3Vic3RyKE0rMiksX2EsdmkpfWNhdGNoKEJ0KXt0aHJvdyBCdD1XaShCdCksRXQoQnQsMTI3KT8oZD1CdCxydChuZXcgRiQoZCkpKTpydChCdCl9Zm9yKHR0PXJ5dCh0LldnKCkpO3R0Lk9iKCk7KWlmKFY9aHoodHQpLEV0KFYsNTEwKSYmKHM9dShWLDU5MCksTHQ9cy5kLChfdD09bnVsbD9MdD09bnVsbDpobihfdCxMdCkpJiZyLS09PTApKXJldHVybiBzO3JldHVybiBudWxsfWlmKEM9ZS5sYXN0SW5kZXhPZigiLiIpLEg9Qz09LTE/ZTplLnN1YnN0cigwLEMpLG49MCxDIT0tMSl0cnl7bj0kbChlLnN1YnN0cihDKzEpLF9hLHZpKX1jYXRjaChCdCl7aWYoQnQ9V2koQnQpLEV0KEJ0LDEyNykpSD1lO2Vsc2UgdGhyb3cgcnQoQnQpfWZvcihIPWhuKCIlIixIKT9udWxsOkV4dChIKSxZPXJ5dCh0LldnKCkpO1kuT2IoKTspaWYoVj1oeihZKSxFdChWLDE5MSkmJihvPXUoViwxOTEpLGd0PW8ubmUoKSwoSD09bnVsbD9ndD09bnVsbDpobihILGd0KSkmJm4tLT09MCkpcmV0dXJuIG87cmV0dXJuIG51bGx9cmV0dXJuIFJsZSh0LGUpfWZ1bmN0aW9uIE80bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem47Zm9yKGNlPW5ldyBsZSxWPW5ldyBTKHQuYik7Vi5hPFYuYy5jLmxlbmd0aDspZm9yKEg9dShKKFYpLDI5KSxndD1uZXcgUyhILmEpO2d0LmE8Z3QuYy5jLmxlbmd0aDspaWYoWT11KEooZ3QpLDEwKSxZLms9PShHbigpLHhzKSYmVnMoWSwoc2UoKSxHRykpKXtmb3IoTHQ9bnVsbCxCdD1udWxsLF90PW51bGwsUWU9bmV3IFMoWS5qKTtRZS5hPFFlLmMuYy5sZW5ndGg7KXN3aXRjaChXZT11KEooUWUpLDExKSxXZS5qLmcpe2Nhc2UgNDpMdD1XZTticmVhaztjYXNlIDI6QnQ9V2U7YnJlYWs7ZGVmYXVsdDpfdD1XZX1mb3IoWXQ9dShGZShfdC5nLDApLDE3KSxDPW5ldyB5UihZdC5hKSxrPW5ldyB5byhfdC5uKSxMaShrLFkubiksTT1laShDLDApLFhNKE0sayksU2U9QkkoWXQuYSksRj1uZXcgeW8oX3QubiksTGkoRixZLm4pLGhzKFNlLEYsU2UuYy5iLFNlLmMpLFJuPXUoUShZLEdHKSwxMCksem49dShGZShSbi5qLDApLDExKSx3PXUoRDEoTHQuZSxQdCh0bHQsRm90LDE3LDAsMCwxKSksNDc0KSxyPXcsbz0wLGQ9ci5sZW5ndGg7bzxkOysrbyllPXJbb10sc2EoZSx6biksQWl0KGUuYSxlLmEuYixDKTtmb3Iodz1nZChCdC5nKSxuPXcscz0wLGg9bi5sZW5ndGg7czxoOysrcyllPW5bc10sRGEoZSx6biksQWl0KGUuYSwwLFNlKTtEYShZdCxudWxsKSxzYShZdCxudWxsKSxjZS5jW2NlLmMubGVuZ3RoXT1ZfWZvcih0dD1uZXcgUyhjZSk7dHQuYTx0dC5jLmMubGVuZ3RoOylZPXUoSih0dCksMTApLGtvKFksbnVsbCl9ZnVuY3Rpb24gcGhlKCl7cGhlPVo7dmFyIHQsZSxuO2ZvcihuZXcga0koMSwwKSxuZXcga0koMTAsMCksbmV3IGtJKDAsMCksVGdlPVB0KEN1dCx0ZSwyNDAsMTEsMCwxKSxEMj1QdChtaCx2ZCwyNSwxMDAsMTUsMSksZkV0PWN0KG90KGlhLDEpLHZvLDI1LDE1LFsxLDUsMjUsMTI1LDYyNSwzMTI1LDE1NjI1LDc4MTI1LDM5MDYyNSwxOTUzMTI1LDk3NjU2MjUsNDg4MjgxMjUsMjQ0MTQwNjI1LDEyMjA3MDMxMjUsNjEwMzUxNTYyNSwzMDUxNzU3ODEyNSwxNTI1ODc4OTA2MjUsNzYyOTM5NDUzMTI1LDM4MTQ2OTcyNjU2MjUsMTkwNzM0ODYzMjgxMjUsOTUzNjc0MzE2NDA2MjUsNDc2ODM3MTU4MjAzMTI1LDB4ODc4Njc4MzI2ZWFjOV0pLGRFdD1QdChUcixYciwyNSxmRXQubGVuZ3RoLDE1LDEpLGdFdD1jdChvdChpYSwxKSx2bywyNSwxNSxbMSwxMCwxMDAsJGcsMWU0LG9vdCwxZTYsMWU3LDFlOCxOcSwxZTEwLDFlMTEsMWUxMiwxZTEzLDFlMTQsMWUxNSwxZTE2XSkscEV0PVB0KFRyLFhyLDI1LGdFdC5sZW5ndGgsMTUsMSksYkV0PVB0KEN1dCx0ZSwyNDAsMTEsMCwxKSx0PTA7dDxiRXQubGVuZ3RoO3QrKylUZ2VbdF09bmV3IGtJKHQsMCksYkV0W3RdPW5ldyBrSSgwLHQpLEQyW3RdPTQ4O2Zvcig7dDxEMi5sZW5ndGg7dCsrKUQyW3RdPTQ4O2ZvcihuPTA7bjxkRXQubGVuZ3RoO24rKylkRXRbbl09WjR0KGZFdFtuXSk7Zm9yKGU9MDtlPHBFdC5sZW5ndGg7ZSsrKXBFdFtlXT1aNHQoZ0V0W2VdKTtiRSgpfWZ1bmN0aW9uIE40bigpe2Z1bmN0aW9uIHQoKXt0aGlzLm9iaj10aGlzLmNyZWF0ZU9iamVjdCgpfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmpbZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqW2VdPW59LHQucHJvdG90eXBlW2hvdF09ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMub2JqW2VdfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMub2JqKX0sdC5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMua2V5cygpLG49dGhpcyxyPTA7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtpZihyPj1lLmxlbmd0aClyZXR1cm57ZG9uZTohMH07dmFyIHM9ZVtyKytdO3JldHVybnt2YWx1ZTpbcyxuLmdldChzKV0sZG9uZTohMX19fX0sUnZuKCl8fCh0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57fX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqWyI6IitlXT1ufSx0LnByb3RvdHlwZVtob3RdPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdGhpcy5vYmopbi5jaGFyQ29kZUF0KDApPT01OCYmZS5wdXNoKG4uc3Vic3RyaW5nKDEpKTtyZXR1cm4gZX0pLHR9ZnVuY3Rpb24gUDRuKHQpe2V4dCgpO3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKE09dC5sZW5ndGgqOCxNPT0wKXJldHVybiIiO2ZvcihkPU0lMjQsSD1NLzI0fDAsRj1kIT0wP0grMTpILG89bnVsbCxvPVB0KG1oLHZkLDI1LEYqNCwxNSwxKSxrPTAsQz0wLGU9MCxuPTAscj0wLGg9MCxzPTAsdz0wO3c8SDt3KyspZT10W3MrK10sbj10W3MrK10scj10W3MrK10sQz0obiYxNSk8PDI0Pj4yNCxrPShlJjMpPDwyND4+MjQsVj1lJi0xMjg/KGU+PjJeMTkyKTw8MjQ+PjI0OmU+PjI8PDI0Pj4yNCxZPW4mLTEyOD8obj4+NF4yNDApPDwyND4+MjQ6bj4+NDw8MjQ+PjI0LHR0PXImLTEyOD8ocj4+Nl4yNTIpPDwyND4+MjQ6cj4+Njw8MjQ+PjI0LG9baCsrXT1ycFtWXSxvW2grK109cnBbWXxrPDw0XSxvW2grK109cnBbQzw8Mnx0dF0sb1toKytdPXJwW3ImNjNdO3JldHVybiBkPT04PyhlPXRbc10saz0oZSYzKTw8MjQ+PjI0LFY9ZSYtMTI4PyhlPj4yXjE5Mik8PDI0Pj4yNDplPj4yPDwyND4+MjQsb1toKytdPXJwW1ZdLG9baCsrXT1ycFtrPDw0XSxvW2grK109NjEsb1toKytdPTYxKTpkPT0xNiYmKGU9dFtzXSxuPXRbcysxXSxDPShuJjE1KTw8MjQ+PjI0LGs9KGUmMyk8PDI0Pj4yNCxWPWUmLTEyOD8oZT4+Ml4xOTIpPDwyND4+MjQ6ZT4+Mjw8MjQ+PjI0LFk9biYtMTI4PyhuPj40XjI0MCk8PDI0Pj4yNDpuPj40PDwyND4+MjQsb1toKytdPXJwW1ZdLG9baCsrXT1ycFtZfGs8PDRdLG9baCsrXT1ycFtDPDwyXSxvW2grK109NjEpLEFoKG8sMCxvLmxlbmd0aCl9ZnVuY3Rpb24gRjRuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYodC5lPT0wJiZ0LnA+MCYmKHQucD0tKHQucC0xKSksdC5wPl9hJiZubXQoZSx0LnAtbmIpLGg9ZS5xLmdldERhdGUoKSxuSShlLDEpLHQuaz49MCYmd3JuKGUsdC5rKSx0LmM+PTA/bkkoZSx0LmMpOnQuaz49MD8odz1uZXcgRXl0KGUucS5nZXRGdWxsWWVhcigpLW5iLGUucS5nZXRNb250aCgpLDM1KSxyPTM1LXcucS5nZXREYXRlKCksbkkoZSxiLk1hdGgubWluKHIsaCkpKTpuSShlLGgpLHQuZjwwJiYodC5mPWUucS5nZXRIb3VycygpKSx0LmI+MCYmdC5mPDEyJiYodC5mKz0xMiksTFhlKGUsdC5mPT0yNCYmdC5nPzA6dC5mKSx0Lmo+PTAmJkxzbihlLHQuaiksdC5uPj0wJiZXc24oZSx0Lm4pLHQuaT49MCYmSFZ0KGUsT2EoQ2EoZUQoa3UoZS5xLmdldFRpbWUoKSksJGcpLCRnKSx0LmkpKSx0LmEmJihzPW5ldyBfUixubXQocyxzLnEuZ2V0RnVsbFllYXIoKS1uYi04MCksZ2V0KGt1KGUucS5nZXRUaW1lKCkpLGt1KHMucS5nZXRUaW1lKCkpKSYmbm10KGUscy5xLmdldEZ1bGxZZWFyKCktbmIrMTAwKSksdC5kPj0wKXtpZih0LmM9PS0xKW49KDcrdC5kLWUucS5nZXREYXkoKSklNyxuPjMmJihuLT03KSxkPWUucS5nZXRNb250aCgpLG5JKGUsZS5xLmdldERhdGUoKStuKSxlLnEuZ2V0TW9udGgoKSE9ZCYmbkkoZSxlLnEuZ2V0RGF0ZSgpKyhuPjA/LTc6NykpO2Vsc2UgaWYoZS5xLmdldERheSgpIT10LmQpcmV0dXJuITF9cmV0dXJuIHQubz5fYSYmKG89ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCksSFZ0KGUsT2Eoa3UoZS5xLmdldFRpbWUoKSksKHQuby1vKSo2MCokZykpKSwhMH1mdW5jdGlvbiBiaGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2lmKHM9UShlLChzZSgpLF9pKSksISFFdChzLDIzOSkpe2ZvcihWPXUocywzMyksWT1lLmUsRj1uZXcgeW8oZS5jKSxvPWUuZCxGLmErPW8uYixGLmIrPW8uZCxCdD11KHFlKFYsKFRlKCksaVYpKSwxNzQpLE51KEJ0LChjbCgpLFZWKSkmJihIPXUocWUoVixhQ3QpLDExNiksZXB0KEgsby5hKSxtdHQoSCxvLmQpLG5wdChILG8uYiksb3B0KEgsby5jKSksbj1uZXcgbGUsQz1uZXcgUyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih3PXUoSihDKSwxMCksRXQoUSh3LF9pKSwyMzkpP3E0bih3LEYpOkV0KFEodyxfaSksMTg2KSYmIVkmJihyPXUoUSh3LF9pKSwxMTgpLEx0PW9sZShlLHcsci5nLHIuZiksbTEocixMdC5hLEx0LmIpKSxndD1uZXcgUyh3LmopO2d0LmE8Z3QuYy5jLmxlbmd0aDspdHQ9dShKKGd0KSwxMSksdXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHR0LmcsMTYpKSxuZXcgSWEodykpLG5ldyAkcihuKSk7aWYoWSlmb3IoZ3Q9bmV3IFMoWS5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KXR0PXUoSihndCksMTEpLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0dC5nLDE2KSksbmV3IEtpKFkpKSxuZXcgUG8obikpO2ZvcihfdD11KHFlKFYsWDApLDIxOCksZD1uZXcgUyhuKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksZTRuKGgsX3QsRik7Zm9yKFl3bihlKSxrPW5ldyBTKGUuYSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTApLE09dy5lLE0mJmJoZSh0LE0pfX1mdW5jdGlvbiB2aGUodCl7U3YodCxuZXcgdzIocmJ0KG1SKEV2KHl2KGt2KHh2KG5ldyBwZyxxbCksIkVMSyBGb3JjZSIpLCJGb3JjZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gSW1wbGVtZW50cyBtZXRob2RzIHRoYXQgZm9sbG93IHBoeXNpY2FsIGFuYWxvZ2llcyBieSBzaW11bGF0aW5nIGZvcmNlcyB0aGF0IG1vdmUgdGhlIG5vZGVzIGludG8gYSBiYWxhbmNlZCBkaXN0cmlidXRpb24uIEN1cnJlbnRseSB0aGUgb3JpZ2luYWwgRWFkZXMgbW9kZWwgYW5kIHRoZSBGcnVjaHRlcm1hbiAtIFJlaW5nb2xkIG1vZGVsIGFyZSBzdXBwb3J0ZWQuIiksbmV3IEI1KSxxbCksamkoKHZFKCksdFUpLGN0KG90KGVVLDEpLGFlLDIzNywwLFtaVl0pKSkpKSx4ZSh0LHFsLGpELGRlKDEpKSx4ZSh0LHFsLGt5LDgwKSx4ZSh0LHFsLE9vdCw1KSx4ZSh0LHFsLGI2LEJFKSx4ZSh0LHFsLEhxLGRlKDEpKSx4ZSh0LHFsLFBfLChGbigpLCEwKSkseGUodCxxbCx3dyxnN3QpLHhlKHQscWwsJEQsRGUoaDd0KSkseGUodCxxbCxOb3QsRGUocDd0KSkseGUodCxxbCxHcSwhMSkseGUodCxxbCxGXyxEZShkN3QpKSx4ZSh0LHFsLHY2LERlKHRiZSkpLHhlKHQscWwsTDQsRGUoSnBlKSkseGUodCxxbCxSRSxEZShacGUpKSx4ZSh0LHFsLGpFLERlKG5iZSkpLHhlKHQscWwscXEsRGUoZjd0KSkseGUodCxxbCxJb3QsRGUoVnV0KSkseGUodCxxbCxjNnQsRGUoaUcpKSx4ZSh0LHFsLERvdCxEZShHdXQpKSx4ZSh0LHFsLHU2dCxEZShiN3QpKX1mdW5jdGlvbiB3aGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUoZ28odC5iLGUpLDEyNCksdz1oLmksZD1oLm4sQz1Kc3QodCxlKSxyPXcuYi1kLmItZC5jLHM9aC5hLmEsbz13LmMrZC5iLEg9dC53LChDPT0oYzQoKSxtYil8fEM9PUpPKSYmdSh1KEFpKHQucixlKSwyMSksODQpLmdjKCk9PTEmJihzPUM9PW1iP3MtMip0Lnc6cyxDPVhTKSxyPHMmJiF0LkIuSGMoKGNsKCksVVYpKSlDPT1tYj8oSCs9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLG8rPUgpOkgrPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKTtlbHNlIHN3aXRjaChyPHMmJihzPUM9PW1iP3MtMip0Lnc6cyxDPVhTKSxDLmcpe2Nhc2UgMzpvKz0oci1zKS8yO2JyZWFrO2Nhc2UgNDpvKz1yLXM7YnJlYWs7Y2FzZSAwOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLEgrPWIuTWF0aC5tYXgoMCxuKSxvKz1IO2JyZWFrO2Nhc2UgMTpuPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKSxIKz1iLk1hdGgubWF4KDAsbil9Zm9yKEY9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7Ri5PYigpOylNPXUoRi5QYigpLDExMSksTS5lLmE9bytNLmQuYixNLmUuYj0oaz1NLmIsay5YZSgoY2koKSxobCkpP2suSGYoKT09KGJlKCksTm4pPy1rLnJmKCkuYi1YdCh5ZShrLldlKGhsKSkpOlh0KHllKGsuV2UoaGwpKSk6ay5IZigpPT0oYmUoKSxObik/LWsucmYoKS5iOjApLG8rPU0uZC5iK00uYi5yZigpLmErTS5kLmMrSH19ZnVuY3Rpb24gbWhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFY7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUoZ28odC5iLGUpLDEyNCksdz1oLmksZD1oLm4sTT1Kc3QodCxlKSxyPXcuYS1kLmQtZC5hLHM9aC5hLmIsbz13LmQrZC5kLFY9dC53LGs9dC5vLmEsKE09PShjNCgpLG1iKXx8TT09Sk8pJiZ1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKT09MSYmKHM9TT09bWI/cy0yKnQudzpzLE09WFMpLHI8cyYmIXQuQi5IYygoY2woKSxVVikpKU09PW1iPyhWKz0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksbys9Vik6Vis9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpO2Vsc2Ugc3dpdGNoKHI8cyYmKHM9TT09bWI/cy0yKnQudzpzLE09WFMpLE0uZyl7Y2FzZSAzOm8rPShyLXMpLzI7YnJlYWs7Y2FzZSA0Om8rPXItczticmVhaztjYXNlIDA6bj0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksVis9Yi5NYXRoLm1heCgwLG4pLG8rPVY7YnJlYWs7Y2FzZSAxOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpLFYrPWIuTWF0aC5tYXgoMCxuKX1mb3IoSD11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtILk9iKCk7KUY9dShILlBiKCksMTExKSxGLmUuYT0oQz1GLmIsQy5YZSgoY2koKSxobCkpP0MuSGYoKT09KGJlKCksQm4pPy1DLnJmKCkuYS1YdCh5ZShDLldlKGhsKSkpOmsrWHQoeWUoQy5XZShobCkpKTpDLkhmKCk9PShiZSgpLEJuKT8tQy5yZigpLmE6ayksRi5lLmI9bytGLmQuZCxvKz1GLmQuZCtGLmIucmYoKS5iK0YuZC5hK1Z9fWZ1bmN0aW9uIEI0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKHQubj1YdCh5ZShRKHQuZywoVGUoKSxCdykpKSksdC5lPVh0KHllKFEodC5nLFIyKSkpLHQuaT10LmcuYi5jLmxlbmd0aCxkPXQuaS0xLEY9MCx0Lmo9MCx0Lms9MCx0LmE9XzEoUHQoamEsdGUsMTksdC5pLDAsMSkpLHQuYj1fMShQdChjYSx0ZSwzMzMsdC5pLDcsMSkpLGg9bmV3IFModC5nLmIpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iocz11KEooaCksMjkpLHMucD1kLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksQy5wPUYsKytGOy0tZH1mb3IodC5mPVB0KFRyLFhyLDI1LEYsMTUsMSksdC5jPVhiKFRyLFt0ZSxYcl0sWzQ4LDI1XSwxNSxbRiwzXSwyKSx0Lm89bmV3IGxlLHQucD1uZXcgbGUsZT0wLHQuZD0wLG89bmV3IFModC5nLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLGQ9cy5wLHI9MCxZPTAsdz1zLmEuYy5sZW5ndGgsaz0wLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksRj1DLnAsdC5mW0ZdPUMuYy5wLGsrPUMuby5iK3QubixuPU4wKG5ldyBhcihscihqbyhDKS5hLktjKCksbmV3IHopKSksVj1OMChuZXcgYXIobHIoTXMoQykuYS5LYygpLG5ldyB6KSkpLHQuY1tGXVswXT1WLW4sdC5jW0ZdWzFdPW4sdC5jW0ZdWzJdPVYscis9bixZKz1WLG4+MCYmdWUodC5wLEMpLHVlKHQubyxDKTtlLT1yLEg9dytlLGsrPWUqdC5lLGFoKHQuYSxkLGRlKEgpKSxhaCh0LmIsZCxrKSx0Lmo9Yi5NYXRoLm1heCh0LmosSCksdC5rPWIuTWF0aC5tYXgodC5rLGspLHQuZCs9ZSxlKz1ZfX1mdW5jdGlvbiBiZSgpe2JlPVo7dmFyIHQ7Wm89bmV3IElNKE9fLDApLE5uPW5ldyBJTShScSwxKSxIbj1uZXcgSU0oeG90LDIpLG1yPW5ldyBJTShrb3QsMyksQm49bmV3IElNKEVvdCw0KSxHMT0odm4oKSxuZXcgUWsoKHQ9dShIZihYYSksOSksbmV3IHJoKHQsdSh1Zih0LHQubGVuZ3RoKSw5KSwwKSkpKSxTZj1EZyhqaShObixjdChvdChYYSwxKSx4Yyw2MSwwLFtdKSkpLHZoPURnKGppKEhuLGN0KG90KFhhLDEpLHhjLDYxLDAsW10pKSksV2w9RGcoamkobXIsY3Qob3QoWGEsMSkseGMsNjEsMCxbXSkpKSxxaD1EZyhqaShCbixjdChvdChYYSwxKSx4Yyw2MSwwLFtdKSkpLF91PURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW21yXSkpKSx1dT1EZyhqaShIbixjdChvdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSksQWY9RGcoamkoTm4sY3Qob3QoWGEsMSkseGMsNjEsMCxbQm5dKSkpLHRsPURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW0huXSkpKSxLbD1EZyhqaShtcixjdChvdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSksd2g9RGcoamkoSG4sY3Qob3QoWGEsMSkseGMsNjEsMCxbbXJdKSkpLGVsPURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW0huLEJuXSkpKSxDdT1EZyhqaShIbixjdChvdChYYSwxKSx4Yyw2MSwwLFttcixCbl0pKSksU3U9RGcoamkoTm4sY3Qob3QoWGEsMSkseGMsNjEsMCxbbXIsQm5dKSkpLHF1PURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW0huLG1yXSkpKSxVYz1EZyhqaShObixjdChvdChYYSwxKSx4Yyw2MSwwLFtIbixtcixCbl0pKSl9ZnVuY3Rpb24geWhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtpZihlLmIhPTApe2ZvcihIPW5ldyBRaSxkPW51bGwsVj1udWxsLHI9cHMoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2coZS5iKSpiLk1hdGguTE9HMTBFKSsxKSx3PTAsX3Q9ZWkoZSwwKTtfdC5iIT1fdC5kLmM7KWZvcihndD11KHRpKF90KSw4NiksR3QoVikhPT1HdChRKGd0LChmYygpLFJTKSkpJiYoVj1CcihRKGd0LFJTKSksdz0wKSxWIT1udWxsP2Q9Vit6UXQodysrLHIpOmQ9elF0KHcrKyxyKSxKdChndCxSUyxkKSx0dD0ocz1laShuZXcgQ3AoZ3QpLmEuZCwwKSxuZXcgYngocykpO2tSKHR0LmEpOylZPXUodGkodHQuYSksMTg4KS5jLGhzKEgsWSxILmMuYixILmMpLEp0KFksUlMsZCk7Zm9yKEY9bmV3IENyLGg9MDtoPGQubGVuZ3RoLXI7aCsrKWZvcihMdD1laShlLDApO0x0LmIhPUx0LmQuYzspZ3Q9dSh0aShMdCksODYpLGs9RGwoQnIoUShndCwoZmMoKSxSUykpKSwwLGgrMSksbj0oaz09bnVsbD9lYyhBbyhGLmYsbnVsbCkpOlU5KEYuZyxrKSkhPW51bGw/dShrPT1udWxsP2VjKEFvKEYuZixudWxsKSk6VTkoRi5nLGspLDE5KS5hKzE6MSx4byhGLGssZGUobikpO2ZvcihNPW5ldyBoMihuZXcgd2coRikuYSk7TS5iOylDPVl2KE0pLG89ZGUoSm4odC5hLEMuY2QoKSkhPW51bGw/dShKbih0LmEsQy5jZCgpKSwxOSkuYTowKSx4byh0LmEsQnIoQy5jZCgpKSxkZSh1KEMuZGQoKSwxOSkuYStvLmEpKSxvPXUoSm4odC5iLEMuY2QoKSksMTkpLCghb3x8by5hPHUoQy5kZCgpLDE5KS5hKSYmeG8odC5iLEJyKEMuY2QoKSksdShDLmRkKCksMTkpKTt5aGUodCxIKX19ZnVuY3Rpb24gUjRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3Iod3IobiwiSW50ZXJhY3RpdmUgbm9kZSBsYXllcmluZyIsMSkscj1uZXcgbGUsSD1uZXcgUyhlLmEpO0guYTxILmMuYy5sZW5ndGg7KXtmb3IoTT11KEooSCksMTApLGs9TS5uLmEsdz1rK00uby5hLHc9Yi5NYXRoLm1heChrKzEsdyksZ3Q9bmV3IGhhKHIsMCkscz1udWxsO2d0LmI8Z3QuZC5nYygpOylpZihZPShRbihndC5iPGd0LmQuZ2MoKSksdShndC5kLlhiKGd0LmM9Z3QuYisrKSw1NjkpKSxZLmM+PXcpe1FuKGd0LmI+MCksZ3QuYS5YYihndC5jPS0tZ3QuYik7YnJlYWt9ZWxzZSBZLmE+ayYmKHM/KEFzKHMuYixZLmIpLHMuYT1iLk1hdGgubWF4KHMuYSxZLmEpLEVsKGd0KSk6KHVlKFkuYixNKSxZLmM9Yi5NYXRoLm1pbihZLmMsayksWS5hPWIuTWF0aC5tYXgoWS5hLHcpLHM9WSkpO3N8fChzPW5ldyBzcXQscy5jPWsscy5hPXcsUm0oZ3QscyksdWUocy5iLE0pKX1mb3IoZD1lLmIsQz0wLHR0PW5ldyBTKHIpO3R0LmE8dHQuYy5jLmxlbmd0aDspZm9yKFk9dShKKHR0KSw1NjkpLG89bmV3IENoKGUpLG8ucD1DKyssZC5jW2QuYy5sZW5ndGhdPW8sVj1uZXcgUyhZLmIpO1YuYTxWLmMuYy5sZW5ndGg7KU09dShKKFYpLDEwKSxrbyhNLG8pLE0ucD0wO2ZvcihGPW5ldyBTKGUuYSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTApLE0ucD09MCYmbnVlKHQsTSxlKTtmb3IoaD1uZXcgaGEoZCwwKTtoLmI8aC5kLmdjKCk7KShRbihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMjkpKS5hLmMubGVuZ3RoPT0wJiZFbChoKTtlLmEuYz1QdChYbixJZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiBqNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2lmKGUuZS5jLmxlbmd0aCE9MCYmbi5lLmMubGVuZ3RoIT0wKXtpZihyPXUoRmUoZS5lLDApLDE3KS5jLmksaD11KEZlKG4uZSwwKSwxNykuYy5pLHI9PWgpcmV0dXJuIGR1KHUoUSh1KEZlKGUuZSwwKSwxNyksKHNlKCksVGMpKSwxOSkuYSx1KFEodShGZShuLmUsMCksMTcpLFRjKSwxOSkuYSk7Zm9yKEM9dC5hLE09MCxGPUMubGVuZ3RoO008RjsrK00pe2lmKGs9Q1tNXSxrPT1yKXJldHVybiAxO2lmKGs9PWgpcmV0dXJuLTF9fXJldHVybiBlLmcuYy5sZW5ndGghPTAmJm4uZy5jLmxlbmd0aCE9MD8obz11KFEoZSwoc2UoKSxGbHQpKSwxMCksdz11KFEobixGbHQpLDEwKSxzPTAsZD0wLFZzKHUoRmUoZS5nLDApLDE3KSxUYykmJihzPXUoUSh1KEZlKGUuZywwKSwxNyksVGMpLDE5KS5hKSxWcyh1KEZlKG4uZywwKSwxNyksVGMpJiYoZD11KFEodShGZShlLmcsMCksMTcpLFRjKSwxOSkuYSksbyYmbz09dz9qZShSZShRKHUoRmUoZS5nLDApLDE3KSwkMSkpKSYmIWplKFJlKFEodShGZShuLmcsMCksMTcpLCQxKSkpPzE6IWplKFJlKFEodShGZShlLmcsMCksMTcpLCQxKSkpJiZqZShSZShRKHUoRmUobi5nLDApLDE3KSwkMSkpKXx8czxkPy0xOnM+ZD8xOjA6KHQuYiYmKHQuYi5fYihvKSYmKHM9dSh0LmIueGMobyksMTkpLmEpLHQuYi5fYih3KSYmKGQ9dSh0LmIueGModyksMTkpLmEpKSxzPGQ/LTE6cz5kPzE6MCkpOmUuZS5jLmxlbmd0aCE9MCYmbi5nLmMubGVuZ3RoIT0wPzE6LTF9ZnVuY3Rpb24gJDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZTtmb3Iod3IoZSxsMWUsMSksWT1uZXcgbGUsY2U9bmV3IGxlLGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodz11KEooayksMjkpLGd0PS0xLFY9c0kody5hKSxNPVYsRj0wLEg9TS5sZW5ndGg7RjxIOysrRilpZihDPU1bRl0sKytndCwhIShDLms9PShHbigpLERzKSYmSDModShRKEMsKFRlKCksb3MpKSw5OCkpKSl7Zm9yKER4KHUoUShDLChUZSgpLG9zKSksOTgpKXx8TzJuKEMpLEp0KEMsKHNlKCksSXcpLEMpLFkuYz1QdChYbixJZSwxLDAsNSwxKSxjZS5jPVB0KFhuLEllLDEsMCw1LDEpLG49bmV3IGxlLEJ0PW5ldyBRaSxsaXQoQnQsUmcoQywoYmUoKSxObikpKSxPaGUodCxCdCxZLGNlLG4pLGQ9Z3QsU2U9QyxvPW5ldyBTKFkpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEwKSxveShyLGQsdyksKytndCxKdChyLEl3LEMpLGg9dShGZShyLmosMCksMTEpLHR0PXUoUShoLF9pKSwxMSksamUoUmUoUSh0dCx6bHQpKSl8fHUoUShyLEk2KSwxNSkuRmMoU2UpO2ZvcihfaChCdCksX3Q9UmcoQyxtcikuS2MoKTtfdC5PYigpOylMdD11KF90LlBiKCksMTEpLGhzKEJ0LEx0LEJ0LmEsQnQuYS5hKTtmb3IoT2hlKHQsQnQsY2UsbnVsbCxuKSxZdD1DLHM9bmV3IFMoY2UpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxveShyLCsrZ3QsdyksSnQocixJdyxDKSxoPXUoRmUoci5qLDApLDExKSx0dD11KFEoaCxfaSksMTEpLGplKFJlKFEodHQsemx0KSkpfHx1KFEoWXQsSTYpLDE1KS5GYyhyKTtuLmMubGVuZ3RoPT0wfHxKdChDLFdUdCxuKX1vcihlKX1mdW5jdGlvbiB4aGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzO2ZvcihNPXUoUSh0LChHcCgpLEM2KSksMzMpLGd0PXZpLEx0PXZpLFk9X2EsdHQ9X2EsQnQ9bmV3IFModC5lKTtCdC5hPEJ0LmMuYy5sZW5ndGg7KV90PXUoSihCdCksMTQ0KSxRZT1fdC5kLFJuPV90LmUsZ3Q9Yi5NYXRoLm1pbihndCxRZS5hLVJuLmEvMiksTHQ9Yi5NYXRoLm1pbihMdCxRZS5iLVJuLmIvMiksWT1iLk1hdGgubWF4KFksUWUuYStSbi5hLzIpLHR0PWIuTWF0aC5tYXgodHQsUWUuYitSbi5iLzIpO2ZvcihXZT11KHFlKE0sKFpmKCksZWJlKSksMTE2KSxTZT1uZXcgJGUoV2UuYi1ndCxXZS5kLUx0KSxkPW5ldyBTKHQuZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTQ0KSxjZT1RKGgsQzYpLEV0KGNlLDIzOSkmJihIPXUoY2UsMzMpLFl0PUxpKGguZCxTZSksbTEoSCxZdC5hLUguZy8yLFl0LmItSC5mLzIpKTtmb3Iocj1uZXcgUyh0LmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDI4Miksaz11KFEobixDNiksNzkpLEM9bTQoaywhMCwhMCksem49KHBpPW5hKG5jKG4uZC5kKSxuLmMuZCksaEUocGksbi5jLmUuYSxuLmMuZS5iKSxMaShwaSxuLmMuZCkpLG9qKEMsem4uYSx6bi5iKSxlPShScz1uYShuYyhuLmMuZCksbi5kLmQpLGhFKFJzLG4uZC5lLmEsbi5kLmUuYiksTGkoUnMsbi5kLmQpKSxhaihDLGUuYSxlLmIpO2ZvcihvPW5ldyBTKHQuZCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNDQ3KSxGPXUoUShzLEM2KSwxMzcpLFY9TGkocy5kLFNlKSxtMShGLFYuYSxWLmIpO2hyPVktZ3QrKFdlLmIrV2UuYyksdz10dC1MdCsoV2UuZCtXZS5hKSxndyhNLGhyLHcsITEsITApfWZ1bmN0aW9uIHo0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKG49bnVsbCx3PW51bGwscz11KFEodC5iLChUZSgpLFdsdCkpLDM3Nikscz09KGxJKCksRE8pJiYobj1uZXcgbGUsdz1uZXcgbGUpLGQ9bmV3IFModC5kKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwxMDEpLG89aC5pLCEhbylzd2l0Y2goaC5lLmcpe2Nhc2UgMDplPXUoRkMobmV3IEV4KGguYikpLDYxKSxzPT1ETyYmZT09KGJlKCksTm4pP24uY1tuLmMubGVuZ3RoXT1oOnM9PURPJiZlPT0oYmUoKSxtcik/dy5jW3cuYy5sZW5ndGhdPWg6X2ZuKGgsZSk7YnJlYWs7Y2FzZSAxOms9aC5hLmQuaixDPWguYy5kLmosaz09KGJlKCksTm4pP19nKGgsTm4sKE0xKCksaTcpLGguYSk6Qz09Tm4/X2coaCxObiwoTTEoKSxzNyksaC5jKTprPT1tcj9fZyhoLG1yLChNMSgpLHM3KSxoLmEpOkM9PW1yJiZfZyhoLG1yLChNMSgpLGk3KSxoLmMpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6cj1oLmIsTnUociwoYmUoKSxObikpP051KHIsbXIpP051KHIsQm4pP051KHIsSG4pfHxfZyhoLE5uLChNMSgpLHM3KSxoLmMpOl9nKGgsTm4sKE0xKCksaTcpLGguYSk6X2coaCxObiwoTTEoKSxfNiksbnVsbCk6X2coaCxtciwoTTEoKSxfNiksbnVsbCk7YnJlYWs7Y2FzZSA0Ok09aC5hLmQuaixGPWguYS5kLmosTT09KGJlKCksTm4pfHxGPT1Obj9fZyhoLG1yLChNMSgpLF82KSxudWxsKTpfZyhoLE5uLChNMSgpLF82KSxudWxsKX1uJiYobi5jLmxlbmd0aD09MHx8Z2xlKG4sKGJlKCksTm4pKSx3LmMubGVuZ3RoPT0wfHxnbGUodywoYmUoKSxtcikpKX1mdW5jdGlvbiBxNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO2ZvcihyPXUoUSh0LChzZSgpLF9pKSksMzMpLFY9dShRKHQsKFRlKCksWEcpKSwxOSkuYSxvPXUoUSh0LHRWKSwxOSkuYSxibyhyLFhHLGRlKFYpKSxibyhyLHRWLGRlKG8pKSx5dShyLHQubi5hK2UuYSkseHUocix0Lm4uYitlLmIpLCh1KHFlKHIsRjIpLDE3NCkuZ2MoKSE9MHx8dC5lfHxHdChRKEZhKHQpLHJWKSk9PT1HdCgoYV8oKSxMUykpJiZ1VXQoKHN5KCksKHQucT90LnE6KHZuKCksdm4oKSxhMCkpLl9iKE53KT9GPXUoUSh0LE53KSwxOTcpOkY9dShRKEZhKHQpLENTKSwxOTcpLEYpKSkmJihRdihyLHQuby5hKSxYdihyLHQuby5iKSksTT1uZXcgUyh0LmopO00uYTxNLmMuYy5sZW5ndGg7KWs9dShKKE0pLDExKSxZPVEoayxfaSksRXQoWSwxODYpJiYocz11KFksMTE4KSxtMShzLGsubi5hLGsubi5iKSxibyhzLHY3LGsuaikpO2ZvcihIPXUoUSh0LE93KSwxNzQpLmdjKCkhPTAsdz1uZXcgUyh0LmIpO3cuYTx3LmMuYy5sZW5ndGg7KWg9dShKKHcpLDcwKSwoSHx8dShRKGgsT3cpLDE3NCkuZ2MoKSE9MCkmJihuPXUoUShoLF9pKSwxMzcpLHNqKG4saC5vLmEsaC5vLmIpLG0xKG4saC5uLmEsaC5uLmIpKTtpZighVEModShRKHQscXkpLDIxKSkpZm9yKEM9bmV3IFModC5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLGQ9bmV3IFMoay5mKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSw3MCksbj11KFEoaCxfaSksMTM3KSxRdihuLGguby5hKSxYdihuLGguby5iKSxtMShuLGgubi5hLGgubi5iKX1mdW5jdGlvbiBING4odCl7dmFyIGUsbixyLHMsbztzd2l0Y2godEkodCxPZGUpLCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSsoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLmkpe2Nhc2UgMDp0aHJvdyBydChuZXcgUG4oIlRoZSBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIG9yIHRhcmdldC4iKSk7Y2FzZSAxOnJldHVybighdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MD90cyhNbyh1KFN0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSk6dHMoTW8odShTdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSkpfWlmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MSYmKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pPT0xKXtpZihzPU1vKHUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpLG89TW8odShTdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSksdHMocyk9PXRzKG8pKXJldHVybiB0cyhzKTtpZihzPT10cyhvKSlyZXR1cm4gcztpZihvPT10cyhzKSlyZXR1cm4gb31mb3Iocj1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpLGU9TW8odShMcihyKSw4MikpO3pyKHIpOylpZihuPU1vKHUoTHIociksODIpKSxuIT1lJiYhWm0obixlKSl7aWYodHMobik9PXRzKGUpKWU9dHMobik7ZWxzZSBpZihlPUFibihlLG4pLCFlKXJldHVybiBudWxsfXJldHVybiBlfWZ1bmN0aW9uIEc0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7Zm9yKHdyKG4sIlBvbHlsaW5lIGVkZ2Ugcm91dGluZyIsMSksdHQ9WHQoeWUoUShlLChUZSgpLHE5dCkpKSksSD1YdCh5ZShRKGUsWjQpKSkscz1YdCh5ZShRKGUsUTQpKSkscj1iLk1hdGgubWluKDEscy9IKSxfdD0wLHc9MCxlLmIuYy5sZW5ndGghPTAmJihCdD14Y2UodShGZShlLmIsMCksMjkpKSxfdD0uNCpyKkJ0KSxkPW5ldyBoYShlLmIsMCk7ZC5iPGQuZC5nYygpOyl7Zm9yKGg9KFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpLG89ZWooaCxOTyksbyYmX3Q+MCYmKF90LT1IKSxmeHQoaCxfdCksQz0wLEY9bmV3IFMoaC5hKTtGLmE8Ri5jLmMubGVuZ3RoOyl7Zm9yKE09dShKKEYpLDEwKSxrPTAsWT1uZXcgYXIobHIoTXMoTSkuYS5LYygpLG5ldyB6KSk7enIoWSk7KVY9dShMcihZKSwxNyksZ3Q9VDEoVi5jKS5iLEx0PVQxKFYuZCkuYixoPT1WLmQuaS5jJiYhVmEoVikmJihncG4oVixfdCwuNCpyKmIuTWF0aC5hYnMoZ3QtTHQpKSxWLmMuaj09KGJlKCksQm4pJiYoZ3Q9MCxMdD0wKSksaz1iLk1hdGgubWF4KGssYi5NYXRoLmFicyhMdC1ndCkpO3N3aXRjaChNLmsuZyl7Y2FzZSAwOmNhc2UgNDpjYXNlIDE6Y2FzZSAzOmNhc2UgNTpsM24odCxNLF90LHR0KX1DPWIuTWF0aC5tYXgoQyxrKX1kLmI8ZC5kLmdjKCkmJihCdD14Y2UoKFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpKSxDPWIuTWF0aC5tYXgoQyxCdCksUW4oZC5iPjApLGQuYS5YYihkLmM9LS1kLmIpKSx3PS40KnIqQywhbyYmZC5iPGQuZC5nYygpJiYodys9SCksX3QrPWguYy5hK3d9dC5hLmEuJGIoKSxlLmYuYT1fdCxvcihuKX1mdW5jdGlvbiBWNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O2ZvcihDPW5ldyBDcix3PW5ldyBIdixyPW5ldyBTKHQuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKGU9dShKKHIpLDU3KSxrPVozKGUpLGspc3UoQy5mLGssZSk7ZWxzZSBpZihMdD1IeChlKSxMdClmb3Iobz1uZXcgUyhMdC5rKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksbG4odyxzLGUpO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWlmKGU9dShKKG4pLDU3KSxrPVozKGUpLGspe2ZvcihkPW5ldyBhcihscihNcyhrKS5hLktjKCksbmV3IHopKTt6cihkKTspaWYoaD11KExyKGQpLDE3KSwhVmEoaCkmJihWPWguYyxndD1oLmQsISgoYmUoKSxfdSkuSGMoaC5jLmopJiZfdS5IYyhoLmQuaikpKSl7aWYoWT11KEpuKEMsaC5kLmkpLDU3KSx2ZihvZihhZihjZihzZihuZXcgRWgsMCksMTAwKSx0LmNbZS5hLmRdKSx0LmNbWS5hLmRdKSksVi5qPT1CbiYmU1l0KChCdSgpLFYpKSl7Zm9yKEY9dShBaSh3LGgpLDIxKS5LYygpO0YuT2IoKTspaWYoTT11KEYuUGIoKSw1NyksTS5kLmM8ZS5kLmMpe2lmKEg9dC5jW00uYS5kXSx0dD10LmNbZS5hLmRdLEg9PXR0KWNvbnRpbnVlO3ZmKG9mKGFmKGNmKHNmKG5ldyBFaCwxKSwxMDApLEgpLHR0KSl9fWlmKGd0Lmo9PUhuJiZfWXQoKEJ1KCksZ3QpKSl7Zm9yKEY9dShBaSh3LGgpLDIxKS5LYygpO0YuT2IoKTspaWYoTT11KEYuUGIoKSw1NyksTS5kLmM+ZS5kLmMpe2lmKEg9dC5jW2UuYS5kXSx0dD10LmNbTS5hLmRdLEg9PXR0KWNvbnRpbnVlO3ZmKG9mKGFmKGNmKHNmKG5ldyBFaCwxKSwxMDApLEgpLHR0KSl9fX19fWZ1bmN0aW9uIEV4dCh0KXtUYXQoKTt2YXIgZSxuLHIscyxvLGgsZCx3O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYocz1jZCh0LEV1KDM3KSksczwwKXJldHVybiB0O2Zvcih3PW5ldyBJbCh0LnN1YnN0cigwLHMpKSxlPVB0KEh1LE40LDI1LDQsMTUsMSksZD0wLHI9MCxoPXQubGVuZ3RoO3M8aDtzKyspaWYoUnIocyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMpPT0zNyYmdC5sZW5ndGg+cysyJiZiaXQoKFJyKHMrMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMSkpLFdBdCxLQXQpJiZiaXQoKFJyKHMrMix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMikpLFdBdCxLQXQpKWlmKG49ZHRuKChScihzKzEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKzEpKSwoUnIocysyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocysyKSkpLHMrPTIscj4wPyhuJjE5Mik9PTEyOD9lW2QrK109bjw8MjQ+PjI0OnI9MDpuPj0xMjgmJigobiYyMjQpPT0xOTI/KGVbZCsrXT1uPDwyND4+MjQscj0yKToobiYyNDApPT0yMjQ/KGVbZCsrXT1uPDwyND4+MjQscj0zKToobiYyNDgpPT0yNDAmJihlW2QrK109bjw8MjQ+PjI0LHI9NCkpLHI+MCl7aWYoZD09cil7c3dpdGNoKGQpe2Nhc2UgMjp7UnAodywoKGVbMF0mMzEpPDw2fGVbMV0mNjMpJm1zKTticmVha31jYXNlIDM6e1JwKHcsKChlWzBdJjE1KTw8MTJ8KGVbMV0mNjMpPDw2fGVbMl0mNjMpJm1zKTticmVha319ZD0wLHI9MH19ZWxzZXtmb3Iobz0wO288ZDsrK28pUnAodyxlW29dJm1zKTtkPTAsdy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pfWVsc2V7Zm9yKG89MDtvPGQ7KytvKVJwKHcsZVtvXSZtcyk7ZD0wLFJwKHcsKFJyKHMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKSkpfXJldHVybiB3LmF9ZnVuY3Rpb24ga2hlKHQsZSxuLHIscyl7dmFyIG8saCxkO2lmKEh0ZSh0LGUpLGg9ZVswXSxvPWJhKG4uYywwKSxkPS0xLEx5dChuKSlpZihyPjApe2lmKGgrcj50Lmxlbmd0aClyZXR1cm4hMTtkPXJxKHQuc3Vic3RyKDAsaCtyKSxlKX1lbHNlIGQ9cnEodCxlKTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZD1wNCh0LGgsY3Qob3QoQWUsMSksdGUsMiw2LFtuZmUscmZlXSksZSkscy5lPWQsITA7Y2FzZSA3NzpyZXR1cm4gU3ZuKHQsZSxzLGQsaCk7Y2FzZSA3NjpyZXR1cm4gQXZuKHQsZSxzLGQsaCk7Y2FzZSA2OTpyZXR1cm4gbWduKHQsZSxoLHMpO2Nhc2UgOTk6cmV0dXJuIHlnbih0LGUsaCxzKTtjYXNlIDk3OnJldHVybiBkPXA0KHQsaCxjdChvdChBZSwxKSx0ZSwyLDYsWyJBTSIsIlBNIl0pLGUpLHMuYj1kLCEwO2Nhc2UgMTIxOnJldHVybiBMdm4odCxlLGgsZCxuLHMpO2Nhc2UgMTAwOnJldHVybiBkPD0wPyExOihzLmM9ZCwhMCk7Y2FzZSA4MzpyZXR1cm4gZDwwPyExOk9sbihkLGgsZVswXSxzKTtjYXNlIDEwNDpkPT0xMiYmKGQ9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBkPDA/ITE6KHMuZj1kLHMuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGQ8MD8hMToocy5mPWQscy5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZDwwPyExOihzLmo9ZCwhMCk7Y2FzZSAxMTU6cmV0dXJuIGQ8MD8hMToocy5uPWQsITApO2Nhc2UgOTA6aWYoaDx0Lmxlbmd0aCYmKFJyKGgsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChoKT09OTApKXJldHVybisrZVswXSxzLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gR2RuKHQsaCxlLHMpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFU0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7aWYoRj11KHUoQWkodC5yLGUpLDIxKSw4NCksZT09KGJlKCksSG4pfHxlPT1Cbil7Z2hlKHQsZSk7cmV0dXJufWZvcihvPWU9PU5uPyh0dygpLHNPKToodHcoKSxhTyksQnQ9ZT09Tm4/KHd1KCksZTEpOih3dSgpLHlmKSxuPXUoZ28odC5iLGUpLDEyNCkscj1uLmkscz1yLmMrcjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW24ubi5iLHQuQy5iLHQua10pKSxndD1yLmMrci5iLXI0KGN0KG90KGlhLDEpLHZvLDI1LDE1LFtuLm4uYyx0LkMuYyx0LmtdKSksaD1lYnQobXZ0KG8pLHQudCksTHQ9ZT09Tm4/VHM6c3MsTT1GLktjKCk7TS5PYigpOylrPXUoTS5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJih0dD1rLmIucmYoKSxZPWsuZSxIPWsuYyxWPUguaSxWLmI9KHc9SC5uLEguZS5hK3cuYit3LmMpLFYuYT0oZD1ILm4sSC5lLmIrZC5kK2QuYSksdEkoQnQsWXh0KSxILmY9QnQsVWYoSCwoWHUoKSxtZikpLFYuYz1ZLmEtKFYuYi10dC5hKS8yLFl0PWIuTWF0aC5taW4ocyxZLmEpLGNlPWIuTWF0aC5tYXgoZ3QsWS5hK3R0LmEpLFYuYzxZdD9WLmM9WXQ6Vi5jK1YuYj5jZSYmKFYuYz1jZS1WLmIpLHVlKGguZCxuZXcgRG50KFYsSnl0KGgsVikpKSxMdD1lPT1Obj9iLk1hdGgubWF4KEx0LFkuYitrLmIucmYoKS5iKTpiLk1hdGgubWluKEx0LFkuYikpO2ZvcihMdCs9ZT09Tm4/dC50Oi10LnQsX3Q9cDN0KChoLmU9THQsaCkpLF90PjAmJih1KGdvKHQuYixlKSwxMjQpLmEuYj1fdCksQz1GLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJihWPWsuYy5pLFYuYy09ay5lLmEsVi5kLT1rLmUuYil9ZnVuY3Rpb24gVzRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixIO2ZvcihlPW5ldyBDcix3PW5ldyBlcih0KTt3LmUhPXcuaS5nYygpOyl7Zm9yKGQ9dShkcih3KSwzMyksbj1uZXcgcXMsa2kocXV0LGQsbiksSD1uZXcgZG0scz11KFBsKG5ldyBUbihudWxsLG5ldyBGdihuZXcgYXIobHIoZkQoZCkuYS5LYygpLG5ldyB6KSkpKSxmWXQoSCxpMihuZXcgX2UsbmV3IHdlLG5ldyBucixjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksR2wpXSkpKSksODMpLFBlZShuLHUocy54YygoRm4oKSwhMCkpLDE0KSxuZXcgcGspLHI9dShQbChSaSh1KHMueGMoITEpLDE1KS5MYygpLG5ldyB4MyksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsW0dsXSkpKSwxNSksaD1yLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDc5KSxGPXhhZShvKSxGJiYoaz11KGVjKEFvKGUuZixGKSksMjEpLGt8fChrPXpjZShGKSxzdShlLmYsRixrKSksVWEobixrKSk7Zm9yKHM9dShQbChuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKEcwKGQpLmEuS2MoKSxuZXcgeikpKSksZll0KEgsaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsW0dsXSkpKSksODMpLFBlZShuLHUocy54YyghMCksMTQpLG5ldyBNbCkscj11KFBsKFJpKHUocy54YyghMSksMTUpLkxjKCksbmV3IFQwKSxpMihuZXcgX2UsbmV3IHdlLG5ldyBucixjdChvdChsbCwxKSxhZSwxMzIsMCxbR2xdKSkpLDE1KSxNPXIuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNzkpLEY9a2FlKEMpLEYmJihrPXUoZWMoQW8oZS5mLEYpKSwyMSksa3x8KGs9emNlKEYpLHN1KGUuZixGLGspKSxVYShuLGspKX19ZnVuY3Rpb24gSzRuKHQsZSl7d2F0KCk7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtpZih3PXljKHQsMCk8MCx3JiYodD1POCh0KSkseWModCwwKT09MClzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuIERFO2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gSD1uZXcgX3AsZTwwP0guYSs9IjBFKyI6SC5hKz0iMEUiLEguYSs9ZT09X2E/IjIxNDc0ODM2NDgiOiIiKy1lLEguYX1DPTE4LE09UHQobWgsdmQsMjUsQysxLDE1LDEpLG49QyxZPXQ7ZG8gaz1ZLFk9ZUQoWSwxMCksTVstLW5dPVNyKE9hKDQ4LFlwKGssQ2EoWSwxMCkpKSkmbXM7d2hpbGUoeWMoWSwwKSE9MCk7aWYocz1ZcChZcChZcChDLG4pLGUpLDEpLGU9PTApcmV0dXJuIHcmJihNWy0tbl09NDUpLEFoKE0sbixDLW4pO2lmKGU+MCYmeWMocywtNik+PTApe2lmKHljKHMsMCk+PTApe2ZvcihvPW4rU3IocyksZD1DLTE7ZD49bztkLS0pTVtkKzFdPU1bZF07cmV0dXJuIE1bKytvXT00Nix3JiYoTVstLW5dPTQ1KSxBaChNLG4sQy1uKzEpfWZvcihoPTI7Z2V0KGgsT2EoTzgocyksMSkpO2grKylNWy0tbl09NDg7cmV0dXJuIE1bLS1uXT00NixNWy0tbl09NDgsdyYmKE1bLS1uXT00NSksQWgoTSxuLEMtbil9cmV0dXJuIFY9bisxLHI9QyxGPW5ldyBMbSx3JiYoRi5hKz0iLSIpLHItVj49MT8oUnAoRixNW25dKSxGLmErPSIuIixGLmErPUFoKE0sbisxLEMtbi0xKSk6Ri5hKz1BaChNLG4sQy1uKSxGLmErPSJFIix5YyhzLDApPjAmJihGLmErPSIrIiksRi5hKz0iIitFQyhzKSxGLmF9ZnVuY3Rpb24gWTRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixIO2lmKHQuZS5hLiRiKCksdC5mLmEuJGIoKSx0LmMuYz1QdChYbixJZSwxLDAsNSwxKSx0LmkuYz1QdChYbixJZSwxLDAsNSwxKSx0LmcuYS4kYigpLGUpZm9yKGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTApLE09UmcobywoYmUoKSxIbikpLktjKCk7TS5PYigpOylmb3IoQz11KE0uUGIoKSwxMSksTnModC5lLEMpLHM9bmV3IFMoQy5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksIVZhKHIpJiYodWUodC5jLHIpLFdpZSh0LHIpLGQ9ci5jLmkuaywoZD09KEduKCksRHMpfHxkPT1IY3x8ZD09eHN8fGQ9PWoxKSYmdWUodC5qLHIpLEg9ci5kLEY9SC5pLmMsRj09bj9Ocyh0LmYsSCk6Rj09ZT9Ocyh0LmUsSCk6dnUodC5jLHIpKTtpZihuKWZvcihoPW5ldyBTKG4uYSk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwxMCksaz1uZXcgUyhvLmopO2suYTxrLmMuYy5sZW5ndGg7KWZvcih3PXUoSihrKSwxMSkscz1uZXcgUyh3LmcpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxWYShyKSYmTnModC5nLHIpO2ZvcihNPVJnKG8sKGJlKCksQm4pKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLE5zKHQuZixDKSxzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCFWYShyKSYmKHVlKHQuYyxyKSxXaWUodCxyKSxkPXIuYy5pLmssKGQ9PShHbigpLERzKXx8ZD09SGN8fGQ9PXhzfHxkPT1qMSkmJnVlKHQuaixyKSxIPXIuZCxGPUguaS5jLEY9PW4/TnModC5mLEgpOkY9PWU/TnModC5lLEgpOnZ1KHQuYyxyKSl9fWZ1bmN0aW9uIGd3KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZTtpZih0dD1uZXcgJGUodC5nLHQuZiksWT1HNHQodCksWS5hPWIuTWF0aC5tYXgoWS5hLGUpLFkuYj1iLk1hdGgubWF4KFkuYixuKSxjZT1ZLmEvdHQuYSxDPVkuYi90dC5iLEJ0PVkuYS10dC5hLHc9WS5iLXR0LmIscilmb3IoaD10cyh0KT91KHFlKHRzKHQpLChjaSgpLGp3KSksMTAzKTp1KHFlKHQsKGNpKCksancpKSwxMDMpLGQ9R3QocWUodCwoY2koKSxVUykpKT09PUd0KChvYSgpLFZjKSksTHQ9bmV3IGVyKCghdC5jJiYodC5jPW5ldyBoZShmbCx0LDksOSkpLHQuYykpO0x0LmUhPUx0LmkuZ2MoKTspc3dpdGNoKGd0PXUoZHIoTHQpLDExOCksX3Q9dShxZShndCxvNSksNjEpLF90PT0oYmUoKSxabykmJihfdD1ueHQoZ3QsaCksYm8oZ3QsbzUsX3QpKSxfdC5nKXtjYXNlIDE6ZHx8eXUoZ3QsZ3QuaSpjZSk7YnJlYWs7Y2FzZSAyOnl1KGd0LGd0LmkrQnQpLGR8fHh1KGd0LGd0LmoqQyk7YnJlYWs7Y2FzZSAzOmR8fHl1KGd0LGd0LmkqY2UpLHh1KGd0LGd0Lmordyk7YnJlYWs7Y2FzZSA0OmR8fHh1KGd0LGd0LmoqQyl9aWYoc2oodCxZLmEsWS5iKSxzKWZvcihGPW5ldyBlcigoIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx0Lm4pKTtGLmUhPUYuaS5nYygpOylNPXUoZHIoRiksMTM3KSxIPU0uaStNLmcvMixWPU0uaitNLmYvMixZdD1IL3R0LmEsaz1WL3R0LmIsWXQraz49MSYmKFl0LWs+MCYmVj49MD8oeXUoTSxNLmkrQnQpLHh1KE0sTS5qK3cqaykpOll0LWs8MCYmSD49MCYmKHl1KE0sTS5pK0J0Kll0KSx4dShNLE0uait3KSkpO3JldHVybiBibyh0LChjaSgpLHoyKSwoX2woKSxvPXUoSGYodEEpLDkpLG5ldyByaChvLHUodWYobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgJGUoY2UsQyl9ZnVuY3Rpb24gRWhlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFY7aWYoSD10cyhNbyh1KFN0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSksVj10cyhNbyh1KFN0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSksTT1IPT1WLGQ9bmV3IFRhLGU9dShxZSh0LChieigpLG1BdCkpLDc0KSxlJiZlLmI+PTIpe2lmKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaT09MCluPShUdigpLHM9bmV3IHJkLHMpLE1yKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksbik7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLmk+MSlmb3IoRj1uZXcgTHgoKCF0LmEmJih0LmE9bmV3IGhlKFppLHQsNiw2KSksdC5hKSk7Ri5lIT1GLmkuZ2MoKTspdV8oRik7eUQoZSx1KFN0KCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksMCksMjAyKSl9aWYoTSlmb3Iocj1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKFppLHQsNiw2KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspZm9yKG49dShkcihyKSwyMDIpLGs9bmV3IGVyKCghbi5hJiYobi5hPW5ldyBTcyhIaCxuLDUpKSxuLmEpKTtrLmUhPWsuaS5nYygpOyl3PXUoZHIoayksNDY5KSxkLmE9Yi5NYXRoLm1heChkLmEsdy5hKSxkLmI9Yi5NYXRoLm1heChkLmIsdy5iKTtmb3IoaD1uZXcgZXIoKCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdC5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz11KHFlKG8sS1MpLDgpLEMmJm0xKG8sQy5hLEMuYiksTSYmKGQuYT1iLk1hdGgubWF4KGQuYSxvLmkrby5nKSxkLmI9Yi5NYXRoLm1heChkLmIsby5qK28uZikpO3JldHVybiBkfWZ1bmN0aW9uIFg0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2U7Zm9yKF90PWUuYy5sZW5ndGgscz1uZXcgeDQodC5hLG4sbnVsbCxudWxsKSxXZT1QdChpYSx2bywyNSxfdCwxNSwxKSxZPVB0KGlhLHZvLDI1LF90LDE1LDEpLFY9UHQoaWEsdm8sMjUsX3QsMTUsMSksdHQ9MCxkPTA7ZDxfdDtkKyspWVtkXT12aSxWW2RdPV9hO2Zvcih3PTA7dzxfdDt3KyspZm9yKHI9KEFuKHcsZS5jLmxlbmd0aCksdShlLmNbd10sMTgwKSksV2Vbd109V3N0KHIpLFdlW3R0XT5XZVt3XSYmKHR0PXcpLE09bmV3IFModC5hLmIpO00uYTxNLmMuYy5sZW5ndGg7KWZvcihDPXUoSihNKSwyOSksTHQ9bmV3IFMoQy5hKTtMdC5hPEx0LmMuYy5sZW5ndGg7KWd0PXUoSihMdCksMTApLGNlPVh0KHIucFtndC5wXSkrWHQoci5kW2d0LnBdKSxZW3ddPWIuTWF0aC5taW4oWVt3XSxjZSksVlt3XT1iLk1hdGgubWF4KFZbd10sY2UrZ3Quby5iKTtmb3IoU2U9UHQoaWEsdm8sMjUsX3QsMTUsMSksaz0wO2s8X3Q7aysrKShBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDE4MCkpLm89PShFMSgpLGoyKT9TZVtrXT1ZW3R0XS1ZW2tdOlNlW2tdPVZbdHRdLVZba107Zm9yKG89UHQoaWEsdm8sMjUsX3QsMTUsMSksSD1uZXcgUyh0LmEuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKEY9dShKKEgpLDI5KSxZdD1uZXcgUyhGLmEpO1l0LmE8WXQuYy5jLmxlbmd0aDspe2ZvcihCdD11KEooWXQpLDEwKSxoPTA7aDxfdDtoKyspb1toXT1YdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5wW0J0LnBdKStYdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5kW0J0LnBdKStTZVtoXTtvLnNvcnQod2VlKHh0LnByb3RvdHlwZS50ZSx4dCxbXSkpLHMucFtCdC5wXT0ob1sxXStvWzJdKS8yLHMuZFtCdC5wXT0wfXJldHVybiBzfWZ1bmN0aW9uIFE0bih0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2gocj1lLmksbz10LmkubyxzPXQuaS5kLGQ9dC5uLGg9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtkLHQuYV0pKSx0LmouZyl7Y2FzZSAxOmxkKGUsKHd1KCkseWYpKSxyLmQ9LXMuZC1uLXIuYSx1KHUoRmUoZS5kLDApLDE4MSkuV2UoKHNlKCksRDYpKSwyODUpPT0oamwoKSx1MCk/KFVmKGUsKFh1KCksbWYpKSxyLmM9aC5hLVh0KHllKFEodCxXNCkpKS1uLXIuYik6KFVmKGUsKFh1KCksU2QpKSxyLmM9aC5hK1h0KHllKFEodCxXNCkpKStuKTticmVhaztjYXNlIDI6VWYoZSwoWHUoKSxTZCkpLHIuYz1vLmErcy5jK24sdSh1KEZlKGUuZCwwKSwxODEpLldlKChzZSgpLEQ2KSksMjg1KT09KGpsKCksdTApPyhsZChlLCh3dSgpLHlmKSksci5kPWguYi1YdCh5ZShRKHQsVzQpKSktbi1yLmEpOihsZChlLCh3dSgpLGUxKSksci5kPWguYitYdCh5ZShRKHQsVzQpKSkrbik7YnJlYWs7Y2FzZSAzOmxkKGUsKHd1KCksZTEpKSxyLmQ9by5iK3MuYStuLHUodShGZShlLmQsMCksMTgxKS5XZSgoc2UoKSxENikpLDI4NSk9PShqbCgpLHUwKT8oVWYoZSwoWHUoKSxtZikpLHIuYz1oLmEtWHQoeWUoUSh0LFc0KSkpLW4tci5iKTooVWYoZSwoWHUoKSxTZCkpLHIuYz1oLmErWHQoeWUoUSh0LFc0KSkpK24pO2JyZWFrO2Nhc2UgNDpVZihlLChYdSgpLG1mKSksci5jPS1zLmItbi1yLmIsdSh1KEZlKGUuZCwwKSwxODEpLldlKChzZSgpLEQ2KSksMjg1KT09KGpsKCksdTApPyhsZChlLCh3dSgpLHlmKSksci5kPWguYi1YdCh5ZShRKHQsVzQpKSktbi1yLmEpOihsZChlLCh3dSgpLGUxKSksci5kPWguYitYdCh5ZShRKHQsVzQpKSkrbil9fWZ1bmN0aW9uIFo0bih0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHIscGksUnM7Zm9yKEg9MCxSbj0wLHc9bmV3IFModCk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMzMpLGFoZShkKSxIPWIuTWF0aC5tYXgoSCxkLmcpLFJuKz1kLmcqZC5mO2ZvcihWPVJuL3QuYy5sZW5ndGgsUWU9dDFuKHQsViksUm4rPXQuYy5sZW5ndGgqUWUsSD1iLk1hdGgubWF4KEgsYi5NYXRoLnNxcnQoUm4qaCkpK24uYixwaT1uLmIsUnM9bi5kLEY9MCxDPW4uYituLmMsV2U9bmV3IFFpLG5pKFdlLGRlKDApKSxjZT1uZXcgUWksaz1uZXcgaGEodCwwKTtrLmI8ay5kLmdjKCk7KWQ9KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLGhyPWQuZyxNPWQuZixwaStocj5IJiYobyYmKEtiKGNlLEYpLEtiKFdlLGRlKGsuYi0xKSkpLHBpPW4uYixScys9RitlLEY9MCxDPWIuTWF0aC5tYXgoQyxuLmIrbi5jK2hyKSkseXUoZCxwaSkseHUoZCxScyksQz1iLk1hdGgubWF4KEMscGkraHIrbi5jKSxGPWIuTWF0aC5tYXgoRixNKSxwaSs9aHIrZTtpZihDPWIuTWF0aC5tYXgoQyxyKSx6bj1ScytGK24uYSx6bjxzJiYoRis9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsaz1uZXcgaGEodCwwKSxLYihXZSxkZSh0LmMubGVuZ3RoKSksU2U9ZWkoV2UsMCksZ3Q9dSh0aShTZSksMTkpLmEsS2IoY2UsRiksWXQ9ZWkoY2UsMCksQnQ9MDtrLmI8ay5kLmdjKCk7KWsuYj09Z3QmJihwaT1uLmIsQnQ9WHQoeWUodGkoWXQpKSksZ3Q9dSh0aShTZSksMTkpLmEpLGQ9KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLEx0PWQuZixYdihkLEJ0KSxZPUJ0LGsuYj09Z3QmJih0dD1DLXBpLW4uYyxfdD1kLmcsUXYoZCx0dCkscm9lKGQsbmV3ICRlKHR0LFkpLG5ldyAkZShfdCxMdCkpKSxwaSs9ZC5nK2U7cmV0dXJuIG5ldyAkZShDLHpuKX1mdW5jdGlvbiBKNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlO2Zvcih3cihlLCJDb21wb3VuZCBncmFwaCBwb3N0cHJvY2Vzc29yIiwxKSxuPWplKFJlKFEodCwoVGUoKSxuaHQpKSkpLGQ9dShRKHQsKHNlKCksWFR0KSksMjI0KSxDPW5ldyBxcyxndD1kLmVjKCkuS2MoKTtndC5PYigpOyl7Zm9yKHR0PXUoZ3QuUGIoKSwxNyksaD1uZXcgUHUoZC5jYyh0dCkpLHZuKCksWHMoaCxuZXcgU2kodCkpLFl0PVBvbigoQW4oMCxoLmMubGVuZ3RoKSx1KGguY1swXSwyNDMpKSksU2U9Zm5lKHUoRmUoaCxoLmMubGVuZ3RoLTEpLDI0MykpLF90PVl0LmksVjgoU2UuaSxfdCk/THQ9X3QuZTpMdD1GYShfdCksTT1SaG4odHQsaCksX2godHQuYSksRj1udWxsLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjQzKSxZPW5ldyBUYSx6NHQoWSxzLmEsTHQpLEg9cy5iLHI9bmV3IER1LEFpdChyLDAsSC5hKSxKbShyLFkpLEJ0PW5ldyB5byhUMShILmMpKSxjZT1uZXcgeW8oVDEoSC5kKSksTGkoQnQsWSksTGkoY2UsWSksRiYmKHIuYj09MD9WPWNlOlY9KFFuKHIuYiE9MCksdShyLmEuYS5jLDgpKSxXZT1iLk1hdGguYWJzKEYuYS1WLmEpPnlkLFFlPWIuTWF0aC5hYnMoRi5iLVYuYik+eWQsKCFuJiZXZSYmUWV8fG4mJihXZXx8UWUpKSYmbmkodHQuYSxCdCkpLFVhKHR0LmEsciksci5iPT0wP0Y9QnQ6Rj0oUW4oci5iIT0wKSx1KHIuYy5iLmMsOCkpLGdjbihILE0sWSksZm5lKHMpPT1TZSYmKEZhKFNlLmkpIT1zLmEmJihZPW5ldyBUYSx6NHQoWSxGYShTZS5pKSxMdCkpLEp0KHR0LCRsdCxZKSksUjBuKEgsdHQsTHQpLEMuYS56YyhILEMpO0RhKHR0LFl0KSxzYSh0dCxTZSl9Zm9yKGs9Qy5hLmVjKCkuS2MoKTtrLk9iKCk7KXc9dShrLlBiKCksMTcpLERhKHcsbnVsbCksc2EodyxudWxsKTtvcihlKX1mdW5jdGlvbiBUaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2lmKHQuZ2MoKT09MSlyZXR1cm4gdSh0LlhiKDApLDIzMSk7aWYodC5nYygpPD0wKXJldHVybiBuZXcgXyQ7Zm9yKHM9dC5LYygpO3MuT2IoKTspe2ZvcihuPXUocy5QYigpLDIzMSksVj0wLEM9dmksTT12aSx3PV9hLGs9X2EsSD1uZXcgUyhuLmUpO0guYTxILmMuYy5sZW5ndGg7KUY9dShKKEgpLDE0NCksVis9dShRKEYsKFpmKCksdDcpKSwxOSkuYSxDPWIuTWF0aC5taW4oQyxGLmQuYS1GLmUuYS8yKSxNPWIuTWF0aC5taW4oTSxGLmQuYi1GLmUuYi8yKSx3PWIuTWF0aC5tYXgodyxGLmQuYStGLmUuYS8yKSxrPWIuTWF0aC5tYXgoayxGLmQuYitGLmUuYi8yKTtKdChuLChaZigpLHQ3KSxkZShWKSksSnQobiwoR3AoKSxsUyksbmV3ICRlKEMsTSkpLEp0KG4sZE8sbmV3ICRlKHcsaykpfWZvcih2bigpLHQuYWQobmV3IGpiKSxZPW5ldyBfJCxMbyhZLHUodC5YYigwKSw5NCkpLGQ9MCxMdD0wLG89dC5LYygpO28uT2IoKTspbj11KG8uUGIoKSwyMzEpLHR0PW5hKG5jKHUoUShuLChHcCgpLGRPKSksOCkpLHUoUShuLGxTKSw4KSksZD1iLk1hdGgubWF4KGQsdHQuYSksTHQrPXR0LmEqdHQuYjtmb3IoZD1iLk1hdGgubWF4KGQsYi5NYXRoLnNxcnQoTHQpKlh0KHllKFEoWSwoWmYoKSxYcGUpKSkpKSxndD1YdCh5ZShRKFksc0cpKSksX3Q9MCxCdD0wLGg9MCxlPWd0LHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwyMzEpLHR0PW5hKG5jKHUoUShuLChHcCgpLGRPKSksOCkpLHUoUShuLGxTKSw4KSksX3QrdHQuYT5kJiYoX3Q9MCxCdCs9aCtndCxoPTApLEZ3bihZLG4sX3QsQnQpLGU9Yi5NYXRoLm1heChlLF90K3R0LmEpLGg9Yi5NYXRoLm1heChoLHR0LmIpLF90Kz10dC5hK2d0O3JldHVybiBZfWZ1bmN0aW9uIENoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO3N3aXRjaChDPW5ldyBEdSx0LmEuZyl7Y2FzZSAzOkY9dShRKGUuZSwoc2UoKSxOMikpLDE1KSxIPXUoUShlLmosTjIpLDE1KSxWPXUoUShlLmYsTjIpLDE1KSxuPXUoUShlLmUsWDQpLDE1KSxyPXUoUShlLmosWDQpLDE1KSxzPXUoUShlLmYsWDQpLDE1KSxoPW5ldyBsZSxBcyhoLEYpLEguSmMobmV3IFFYKSxBcyhoLEV0KEgsMTUyKT9WeCh1KEgsMTUyKSk6RXQoSCwxMzEpP3UoSCwxMzEpLmE6RXQoSCw1NCk/bmV3IG12KEgpOm5ldyBNbShIKSksQXMoaCxWKSxvPW5ldyBsZSxBcyhvLG4pLEFzKG8sRXQociwxNTIpP1Z4KHUociwxNTIpKTpFdChyLDEzMSk/dShyLDEzMSkuYTpFdChyLDU0KT9uZXcgbXYocik6bmV3IE1tKHIpKSxBcyhvLHMpLEp0KGUuZixOMixoKSxKdChlLmYsWDQsbyksSnQoZS5mLGk5dCxlLmYpLEp0KGUuZSxOMixudWxsKSxKdChlLmUsWDQsbnVsbCksSnQoZS5qLE4yLG51bGwpLEp0KGUuaixYNCxudWxsKTticmVhaztjYXNlIDE6VWEoQyxlLmUuYSksbmkoQyxlLmkubiksVWEoQyxhMihlLmouYSkpLG5pKEMsZS5hLm4pLFVhKEMsZS5mLmEpO2JyZWFrO2RlZmF1bHQ6VWEoQyxlLmUuYSksVWEoQyxhMihlLmouYSkpLFVhKEMsZS5mLmEpfV9oKGUuZi5hKSxVYShlLmYuYSxDKSxEYShlLmYsZS5lLmMpLGQ9dShRKGUuZSwoVGUoKSxfbykpLDc0KSxrPXUoUShlLmosX28pLDc0KSx3PXUoUShlLmYsX28pLDc0KSwoZHx8a3x8dykmJihNPW5ldyBEdSxsd3QoTSx3KSxsd3QoTSxrKSxsd3QoTSxkKSxKdChlLmYsX28sTSkpLERhKGUuaixudWxsKSxzYShlLmosbnVsbCksRGEoZS5lLG51bGwpLHNhKGUuZSxudWxsKSxrbyhlLmEsbnVsbCksa28oZS5pLG51bGwpLGUuZyYmQ2hlKHQsZS5nKX1mdW5jdGlvbiB0NW4odCl7ZXh0KCk7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKHQ9PW51bGx8fChvPVIkKHQpLFY9enVuKG8pLFYlNCE9MCkpcmV0dXJuIG51bGw7aWYoWT1WLzR8MCxZPT0wKXJldHVybiBQdChIdSxONCwyNSwwLDE1LDEpO2ZvcihNPW51bGwsZT0wLG49MCxyPTAscz0wLGg9MCxkPTAsdz0wLGs9MCxIPTAsRj0wLEM9MCxNPVB0KEh1LE40LDI1LFkqMywxNSwxKTtIPFktMTtIKyspe2lmKCFkTShoPW9bQysrXSl8fCFkTShkPW9bQysrXSl8fCFkTSh3PW9bQysrXSl8fCFkTShrPW9bQysrXSkpcmV0dXJuIG51bGw7ZT1VMVtoXSxuPVUxW2RdLHI9VTFbd10scz1VMVtrXSxNW0YrK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCxNW0YrK109KChuJjE1KTw8NHxyPj4yJjE1KTw8MjQ+PjI0LE1bRisrXT0ocjw8NnxzKTw8MjQ+PjI0fXJldHVybiFkTShoPW9bQysrXSl8fCFkTShkPW9bQysrXSk/bnVsbDooZT1VMVtoXSxuPVUxW2RdLHc9b1tDKytdLGs9b1tDKytdLFUxW3ddPT0tMXx8VTFba109PS0xP3c9PTYxJiZrPT02MT9uJjE1P251bGw6KHR0PVB0KEh1LE40LDI1LEgqMysxLDE1LDEpLEljKE0sMCx0dCwwLEgqMyksdHRbRl09KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dCk6dyE9NjEmJms9PTYxPyhyPVUxW3ddLHImMz9udWxsOih0dD1QdChIdSxONCwyNSxIKjMrMiwxNSwxKSxJYyhNLDAsdHQsMCxIKjMpLHR0W0YrK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dFtGXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsdHQpKTpudWxsOihyPVUxW3ddLHM9VTFba10sTVtGKytdPShlPDwyfG4+PjQpPDwyND4+MjQsTVtGKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxNW0YrK109KHI8PDZ8cyk8PDI0Pj4yNCxNKSl9ZnVuY3Rpb24gZTVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdDtmb3Iod3IoZSxsMWUsMSksVj11KFEodCwoVGUoKSxYMCkpLDIxOCkscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksaz1zSShyLmEpLGg9ayxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKWlmKG89aFtkXSxvLms9PShHbigpLEhjKSl7aWYoVj09KHEwKCksSDYpKWZvcihNPW5ldyBTKG8uaik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLEMuZS5jLmxlbmd0aD09MHx8eWhuKEMpLEMuZy5jLmxlbmd0aD09MHx8eGhuKEMpO2Vsc2UgaWYoRXQoUShvLChzZSgpLF9pKSksMTcpKXR0PXUoUShvLF9pKSwxNyksZ3Q9dShSZyhvLChiZSgpLEJuKSkuS2MoKS5QYigpLDExKSxMdD11KFJnKG8sSG4pLktjKCkuUGIoKSwxMSksX3Q9dShRKGd0LF9pKSwxMSksQnQ9dShRKEx0LF9pKSwxMSksRGEodHQsQnQpLHNhKHR0LF90KSxZdD1uZXcgeW8oTHQuaS5uKSxZdC5hPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbQnQuaS5uLEJ0Lm4sQnQuYV0pKS5hLG5pKHR0LmEsWXQpLFl0PW5ldyB5byhndC5pLm4pLFl0LmE9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtfdC5pLm4sX3QubixfdC5hXSkpLmEsbmkodHQuYSxZdCk7ZWxzZXtpZihvLmouYy5sZW5ndGg+PTIpe2ZvcihZPSEwLEY9bmV3IFMoby5qKSxuPXUoSihGKSwxMSksSD1udWxsO0YuYTxGLmMuYy5sZW5ndGg7KWlmKEg9bixuPXUoSihGKSwxMSksIXlpKFEoSCxfaSksUShuLF9pKSkpe1k9ITE7YnJlYWt9fWVsc2UgWT0hMTtmb3IoTT1uZXcgUyhvLmopO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDExKSxDLmUuYy5sZW5ndGg9PTB8fEsybihDLFkpLEMuZy5jLmxlbmd0aD09MHx8WTJuKEMsWSl9a28obyxudWxsKX1vcihlKX1mdW5jdGlvbiBfaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlO3JldHVybiBfdD10LmNbKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTcpKS5wXSxTZT10LmNbKEFuKDEsZS5jLmxlbmd0aCksdShlLmNbMV0sMTcpKS5wXSxfdC5hLmUuZS1fdC5hLmEtKF90LmIuZS5lLV90LmIuYSk9PTAmJlNlLmEuZS5lLVNlLmEuYS0oU2UuYi5lLmUtU2UuYi5hKT09MHx8KGd0PV90LmIuZS5mLCFFdChndCwxMCkpPyExOih0dD11KGd0LDEwKSxZdD10LmlbdHQucF0sY2U9dHQuYz9Sbyh0dC5jLmEsdHQsMCk6LTEsbz1zcyxjZT4wJiYocz11KEZlKHR0LmMuYSxjZS0xKSwxMCksaD10Lmlbcy5wXSxXZT1iLk1hdGguY2VpbChWMyh0Lm4scyx0dCkpLG89WXQuYS5lLXR0LmQuZC0oaC5hLmUrcy5vLmIrcy5kLmEpLVdlKSxrPXNzLGNlPHR0LmMuYS5jLmxlbmd0aC0xJiYodz11KEZlKHR0LmMuYSxjZSsxKSwxMCksQz10Lmlbdy5wXSxXZT1iLk1hdGguY2VpbChWMyh0Lm4sdyx0dCkpLGs9Qy5hLmUtdy5kLmQtKFl0LmEuZSt0dC5vLmIrdHQuZC5hKS1XZSksbiYmKHkxKCksZ2YoRWQpLGIuTWF0aC5hYnMoby1rKTw9RWR8fG89PWt8fGlzTmFOKG8pJiZpc05hTihrKSk/ITA6KHI9SG50KF90LmEpLGQ9LUhudChfdC5iKSxNPS1IbnQoU2UuYSksTHQ9SG50KFNlLmIpLFk9X3QuYS5lLmUtX3QuYS5hLShfdC5iLmUuZS1fdC5iLmEpPjAmJlNlLmEuZS5lLVNlLmEuYS0oU2UuYi5lLmUtU2UuYi5hKTwwLFY9X3QuYS5lLmUtX3QuYS5hLShfdC5iLmUuZS1fdC5iLmEpPDAmJlNlLmEuZS5lLVNlLmEuYS0oU2UuYi5lLmUtU2UuYi5hKT4wLEg9X3QuYS5lLmUrX3QuYi5hPFNlLmIuZS5lK1NlLmEuYSxGPV90LmEuZS5lK190LmIuYT5TZS5iLmUuZStTZS5hLmEsQnQ9MCwhWSYmIVYmJihGP28rTT4wP0J0PU06ay1yPjAmJihCdD1yKTpIJiYobytkPjA/QnQ9ZDprLUx0PjAmJihCdD1MdCkpKSxZdC5hLmUrPUJ0LFl0LmImJihZdC5kLmUrPUJ0KSwhMSkpfWZ1bmN0aW9uIFNoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7aWYocj1uZXcgaWgoZS5xZigpLmEsZS5xZigpLmIsZS5yZigpLmEsZS5yZigpLmIpLHM9bmV3IEF4LHQuYylmb3IoaD1uZXcgUyhlLndmKCkpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MSkscy5jPW8ucWYoKS5hK2UucWYoKS5hLHMuZD1vLnFmKCkuYitlLnFmKCkuYixzLmI9by5yZigpLmEscy5hPW8ucmYoKS5iLGhfKHIscyk7Zm9yKGs9bmV3IFMoZS5DZigpKTtrLmE8ay5jLmMubGVuZ3RoOyl7aWYodz11KEooayksODM4KSxDPXcucWYoKS5hK2UucWYoKS5hLE09dy5xZigpLmIrZS5xZigpLmIsdC5lJiYocy5jPUMscy5kPU0scy5iPXcucmYoKS5hLHMuYT13LnJmKCkuYixoXyhyLHMpKSx0LmQpZm9yKGg9bmV3IFMody53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLHMuYz1vLnFmKCkuYStDLHMuZD1vLnFmKCkuYitNLHMuYj1vLnJmKCkuYSxzLmE9by5yZigpLmIsaF8ocixzKTtpZih0LmIpe2lmKEY9bmV3ICRlKC1uLC1uKSx1KGUuV2UoKGNpKCksS3kpKSwxNzQpLkhjKChRdSgpLHhiKSkpZm9yKGg9bmV3IFMody53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLEYuYSs9by5yZigpLmErbixGLmIrPW8ucmYoKS5iK247Ri5hPWIuTWF0aC5tYXgoRi5hLDApLEYuYj1iLk1hdGgubWF4KEYuYiwwKSxZdWUocix3LkJmKCksdy56ZigpLGUsdyxGLG4pfX10LmImJll1ZShyLGUuQmYoKSxlLnpmKCksZSxudWxsLG51bGwsbiksZD1uZXcgd250KGUuQWYoKSksZC5kPWIuTWF0aC5tYXgoMCxlLnFmKCkuYi1yLmQpLGQuYT1iLk1hdGgubWF4KDAsci5kK3IuYS0oZS5xZigpLmIrZS5yZigpLmIpKSxkLmI9Yi5NYXRoLm1heCgwLGUucWYoKS5hLXIuYyksZC5jPWIuTWF0aC5tYXgoMCxyLmMrci5iLShlLnFmKCkuYStlLnJmKCkuYSkpLGUuRWYoZCl9ZnVuY3Rpb24gbjVuKCl7dmFyIHQ9WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMEIiLCJcXGYiLCJcXHIiLCJcXHUwMDBFIiwiXFx1MDAwRiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFBIiwiXFx1MDAxQiIsIlxcdTAwMUMiLCJcXHUwMDFEIiwiXFx1MDAxRSIsIlxcdTAwMUYiXTtyZXR1cm4gdFszNF09J1xcIicsdFs5Ml09IlxcXFwiLHRbMTczXT0iXFx1MDBhZCIsdFsxNTM2XT0iXFx1MDYwMCIsdFsxNTM3XT0iXFx1MDYwMSIsdFsxNTM4XT0iXFx1MDYwMiIsdFsxNTM5XT0iXFx1MDYwMyIsdFsxNzU3XT0iXFx1MDZkZCIsdFsxODA3XT0iXFx1MDcwZiIsdFs2MDY4XT0iXFx1MTdiNCIsdFs2MDY5XT0iXFx1MTdiNSIsdFs4MjAzXT0iXFx1MjAwYiIsdFs4MjA0XT0iXFx1MjAwYyIsdFs4MjA1XT0iXFx1MjAwZCIsdFs4MjA2XT0iXFx1MjAwZSIsdFs4MjA3XT0iXFx1MjAwZiIsdFs4MjMyXT0iXFx1MjAyOCIsdFs4MjMzXT0iXFx1MjAyOSIsdFs4MjM0XT0iXFx1MjAyYSIsdFs4MjM1XT0iXFx1MjAyYiIsdFs4MjM2XT0iXFx1MjAyYyIsdFs4MjM3XT0iXFx1MjAyZCIsdFs4MjM4XT0iXFx1MjAyZSIsdFs4Mjg4XT0iXFx1MjA2MCIsdFs4Mjg5XT0iXFx1MjA2MSIsdFs4MjkwXT0iXFx1MjA2MiIsdFs4MjkxXT0iXFx1MjA2MyIsdFs4MjkyXT0iXFx1MjA2NCIsdFs4Mjk4XT0iXFx1MjA2YSIsdFs4Mjk5XT0iXFx1MjA2YiIsdFs4MzAwXT0iXFx1MjA2YyIsdFs4MzAxXT0iXFx1MjA2ZCIsdFs4MzAyXT0iXFx1MjA2ZSIsdFs4MzAzXT0iXFx1MjA2ZiIsdFs2NTI3OV09IlxcdWZlZmYiLHRbNjU1MjldPSJcXHVmZmY5Iix0WzY1NTMwXT0iXFx1ZmZmYSIsdFs2NTUzMV09IlxcdWZmZmIiLHR9ZnVuY3Rpb24gcjVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3Iodz1uZXcgbGUsTT1lLmxlbmd0aCxoPUN5dChuKSxrPTA7azxNOysrayl7c3dpdGNoKEM9XzJ0KGUsRXUoNjEpLGspLHI9anVuKGgsZS5zdWJzdHIoayxDLWspKSxzPWRpdChyKSxvPXMuQWooKS5OaCgpLGJhKGUsKytDKSl7Y2FzZSAzOTp7ZD1sOChlLDM5LCsrQyksdWUodyxuZXcgSlIocixlcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpKSxrPWQrMTticmVha31jYXNlIDM0OntkPWw4KGUsMzQsKytDKSx1ZSh3LG5ldyBKUihyLGVydChlLnN1YnN0cihDLGQtQyksbyxzKSkpLGs9ZCsxO2JyZWFrfWNhc2UgOTE6e0Y9bmV3IGxlLHVlKHcsbmV3IEpSKHIsRikpO3Q6Zm9yKDs7KXtzd2l0Y2goYmEoZSwrK0MpKXtjYXNlIDM5OntkPWw4KGUsMzksKytDKSx1ZShGLGVydChlLnN1YnN0cihDLGQtQyksbyxzKSksQz1kKzE7YnJlYWt9Y2FzZSAzNDp7ZD1sOChlLDM0LCsrQyksdWUoRixlcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpLEM9ZCsxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKUYuY1tGLmMubGVuZ3RoXT1udWxsO2Vsc2UgdGhyb3cgcnQobmV3IEdvKG1kZSkpO0MrPTM7YnJlYWt9fWlmKEM8TSlzd2l0Y2goUnIoQyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KEMpKXtjYXNlIDQ0OmJyZWFrO2Nhc2UgOTM6YnJlYWsgdDtkZWZhdWx0OnRocm93IHJ0KG5ldyBHbygiRXhwZWN0aW5nICwgb3IgXSIpKX1lbHNlIGJyZWFrfWs9QysxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKXVlKHcsbmV3IEpSKHIsbnVsbCkpO2Vsc2UgdGhyb3cgcnQobmV3IEdvKG1kZSkpO2s9QyszO2JyZWFrfX1pZihrPE0pe2lmKFJyKGssZS5sZW5ndGgpLGUuY2hhckNvZGVBdChrKSE9NDQpdGhyb3cgcnQobmV3IEdvKCJFeHBlY3RpbmcgLCIpKX1lbHNlIGJyZWFrfXJldHVybiB4dm4odCx3LG4pfWZ1bmN0aW9uIEFoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKGs9dSh1KEFpKHQucixlKSwyMSksODQpLGg9cjBuKHQsZSksbj10LnUuSGMoKFF1KCksWlMpKSx3PWsuS2MoKTt3Lk9iKCk7KWlmKGQ9dSh3LlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSl7c3dpdGNoKEY9ZC5iLnJmKCksQz1kLmMsTT1DLmksTS5iPShvPUMubixDLmUuYStvLmIrby5jKSxNLmE9KHM9Qy5uLEMuZS5iK3MuZCtzLmEpLGUuZyl7Y2FzZSAxOmQuYT8oTS5jPShGLmEtTS5iKS8yLFVmKEMsKFh1KCksY2IpKSk6aHx8bj8oTS5jPS1NLmItdC5zLFVmKEMsKFh1KCksbWYpKSk6KE0uYz1GLmErdC5zLFVmKEMsKFh1KCksU2QpKSksTS5kPS1NLmEtdC50LGxkKEMsKHd1KCkseWYpKTticmVhaztjYXNlIDM6ZC5hPyhNLmM9KEYuYS1NLmIpLzIsVWYoQywoWHUoKSxjYikpKTpofHxuPyhNLmM9LU0uYi10LnMsVWYoQywoWHUoKSxtZikpKTooTS5jPUYuYSt0LnMsVWYoQywoWHUoKSxTZCkpKSxNLmQ9Ri5iK3QudCxsZChDLCh3dSgpLGUxKSk7YnJlYWs7Y2FzZSAyOmQuYT8ocj10LnY/TS5hOnUoRmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oRi5iLXIpLzIsbGQoQywod3UoKSx1YikpKTpofHxuPyhNLmQ9LU0uYS10LnQsbGQoQywod3UoKSx5ZikpKTooTS5kPUYuYit0LnQsbGQoQywod3UoKSxlMSkpKSxNLmM9Ri5hK3QucyxVZihDLChYdSgpLFNkKSk7YnJlYWs7Y2FzZSA0OmQuYT8ocj10LnY/TS5hOnUoRmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oRi5iLXIpLzIsbGQoQywod3UoKSx1YikpKTpofHxuPyhNLmQ9LU0uYS10LnQsbGQoQywod3UoKSx5ZikpKTooTS5kPUYuYit0LnQsbGQoQywod3UoKSxlMSkpKSxNLmM9LU0uYi10LnMsVWYoQywoWHUoKSxtZikpfWg9ITF9fWZ1bmN0aW9uIHRiKHQsZSl7Z2koKTt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZigkOShPNyk9PTApe2ZvcihNPVB0KEV4bix0ZSwxMTcsTTVlLmxlbmd0aCwwLDEpLGg9MDtoPE0ubGVuZ3RoO2grKylNW2hdPW5ldyBObCg0KTtmb3Iocj1uZXcgQjksbz0wO288bUx0Lmxlbmd0aDtvKyspe2lmKEM9bmV3IE5sKDQpLG88ODQ/KGQ9byoyLEg9KFJyKGQsZnV0Lmxlbmd0aCksZnV0LmNoYXJDb2RlQXQoZCkpLEY9KFJyKGQrMSxmdXQubGVuZ3RoKSxmdXQuY2hhckNvZGVBdChkKzEpKSxqYyhDLEgsRikpOihkPShvLTg0KSoyLGpjKEMseUx0W2RdLHlMdFtkKzFdKSksdz1tTHRbb10saG4odywiU3BlY2lhbHMiKSYmamMoQyw2NTUyMCw2NTUzMyksaG4odyxyZ2UpJiYoamMoQyw5ODMwNDAsMTA0ODU3MyksamMoQywxMDQ4NTc2LDExMTQxMDkpKSx4byhPNyx3LEMpLHhvKGhBLHcsYnkoQykpLGs9ci5hLmxlbmd0aCwwPGs/ci5hPXIuYS5zdWJzdHIoMCwwKTowPmsmJihyLmErPURVdChQdChtaCx2ZCwyNSwtaywxNSwxKSkpLHIuYSs9IklzIixjZCh3LEV1KDMyKSk+PTApZm9yKHM9MDtzPHcubGVuZ3RoO3MrKylScihzLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQocykhPTMyJiZtOChyLChScihzLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQocykpKTtlbHNlIHIuYSs9IiIrdzt4M3Qoci5hLHcsITApfXgzdChodXQsIkNuIiwhMSkseDN0KEc4dCwiQ24iLCEwKSxuPW5ldyBObCg0KSxqYyhuLDAsV0UpLHhvKE83LCJBTEwiLG4pLHhvKGhBLCJBTEwiLGJ5KG4pKSwhbjMmJihuMz1uZXcgQ3IpLHhvKG4zLGh1dCxodXQpLCFuMyYmKG4zPW5ldyBDcikseG8objMsRzh0LEc4dCksIW4zJiYobjM9bmV3IENyKSx4byhuMywiQUxMIiwiQUxMIil9cmV0dXJuIFY9dShGYyhlP083OmhBLHQpLDEzNiksVn1mdW5jdGlvbiBpNW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O2lmKEY9ITEsTT0hMSxIMyh1KFEociwoVGUoKSxvcykpLDk4KSkpe2g9ITEsZD0hMTt0OmZvcihWPW5ldyBTKHIuaik7Vi5hPFYuYy5jLmxlbmd0aDspZm9yKEg9dShKKFYpLDExKSx0dD1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtuZXcgWXMoSCksbmV3IEVyKEgpXSkpKTt6cih0dCk7KWlmKFk9dShMcih0dCksMTEpLCFqZShSZShRKFkuaSxrUykpKSl7aWYoSC5qPT0oYmUoKSxObikpe2g9ITA7YnJlYWsgdH1pZihILmo9PW1yKXtkPSEwO2JyZWFrIHR9fUY9ZCYmIWgsTT1oJiYhZH1pZighRiYmIU0mJnIuYi5jLmxlbmd0aCE9MCl7Zm9yKEM9MCxrPW5ldyBTKHIuYik7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksNzApLEMrPXcubi5iK3cuby5iLzI7Qy89ci5iLmMubGVuZ3RoLEx0PUM+PXIuby5iLzJ9ZWxzZSBMdD0hTTtMdD8oZ3Q9dShRKHIsKHNlKCksTjYpKSwxNSksZ3Q/Rj9vPWd0OihzPXUoUShyLEw2KSwxNSkscz9ndC5nYygpPD1zLmdjKCk/bz1ndDpvPXM6KG89bmV3IGxlLEp0KHIsTDYsbykpKToobz1uZXcgbGUsSnQocixONixvKSkpOihzPXUoUShyLChzZSgpLEw2KSksMTUpLHM/TT9vPXM6KGd0PXUoUShyLE42KSwxNSksZ3Q/cy5nYygpPD1ndC5nYygpP289czpvPWd0OihvPW5ldyBsZSxKdChyLE42LG8pKSk6KG89bmV3IGxlLEp0KHIsTDYsbykpKSxvLkZjKHQpLEp0KHQsKHNlKCksekcpLG4pLGUuZD09bj8oc2EoZSxudWxsKSxuLmUuYy5sZW5ndGgrbi5nLmMubGVuZ3RoPT0wJiZVbyhuLG51bGwpLFljbihuKSk6KERhKGUsbnVsbCksbi5lLmMubGVuZ3RoK24uZy5jLmxlbmd0aD09MCYmVW8obixudWxsKSksX2goZS5hKX1mdW5jdGlvbiBzNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpO2ZvcihMdD1uZXcgaGEodC5iLDApLEM9ZS5LYygpLFY9MCxrPXUoQy5QYigpLDE5KS5hLFl0PTAsbj1uZXcgcXMsU2U9bmV3IEEwO0x0LmI8THQuZC5nYygpOyl7Zm9yKGd0PShRbihMdC5iPEx0LmQuZ2MoKSksdShMdC5kLlhiKEx0LmM9THQuYisrKSwyOSkpLEJ0PW5ldyBTKGd0LmEpO0J0LmE8QnQuYy5jLmxlbmd0aDspe2ZvcihfdD11KEooQnQpLDEwKSxIPW5ldyBhcihscihNcyhfdCkuYS5LYygpLG5ldyB6KSk7enIoSCk7KU09dShMcihIKSwxNyksU2UuYS56YyhNLFNlKTtmb3IoRj1uZXcgYXIobHIoam8oX3QpLmEuS2MoKSxuZXcgeikpO3pyKEYpOylNPXUoTHIoRiksMTcpLFNlLmEuQmMoTSkhPW51bGx9aWYoVisxPT1rKXtmb3Iocz1uZXcgQ2godCksUm0oTHQscyksbz1uZXcgQ2godCksUm0oTHQsbyksUWU9U2UuYS5lYygpLktjKCk7UWUuT2IoKTspV2U9dShRZS5QYigpLDE3KSxuLmEuX2IoV2UpfHwoKytZdCxuLmEuemMoV2UsbikpLGg9bmV3IEgwKHQpLEp0KGgsKFRlKCksb3MpLChvYSgpLEw3KSksa28oaCxzKSxfMChoLChHbigpLGoxKSksWT1uZXcgTWMsVW8oWSxoKSxGcyhZLChiZSgpLEJuKSksUm49bmV3IE1jLFVvKFJuLGgpLEZzKFJuLEhuKSxyPW5ldyBIMCh0KSxKdChyLG9zLEw3KSxrbyhyLG8pLF8wKHIsajEpLHR0PW5ldyBNYyxVbyh0dCxyKSxGcyh0dCxCbiksem49bmV3IE1jLFVvKHpuLHIpLEZzKHpuLEhuKSxjZT1uZXcgenYsRGEoY2UsV2UuYyksc2EoY2UsWSkscGk9bmV3IHp2LERhKHBpLFJuKSxzYShwaSx0dCksRGEoV2Usem4pLGQ9bmV3IFp3dChoLHIsY2UscGksV2UpLEp0KGgsKHNlKCksTHcpLGQpLEp0KHIsTHcsZCksaHI9Y2UuYy5pLGhyLms9PWoxJiYodz11KFEoaHIsTHcpLDMwNSksdy5kPWQsZC5nPXcpO2lmKEMuT2IoKSlrPXUoQy5QYigpLDE5KS5hO2Vsc2UgYnJlYWt9KytWfXJldHVybiBkZShZdCl9ZnVuY3Rpb24gYTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3IoTT0wLHM9bmV3IGVyKCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxqZShSZShxZShyLChUZSgpLEIyKSkpKXx8KChHdChxZShlLGRiKSkhPT1HdCgoajAoKSxnYikpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxwUykpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxnUykpfHxqZShSZShxZShlLEJ5KSkpfHxHdChxZShlLFA2KSkhPT1HdCgoZXcoKSwkNCkpKSYmIWplKFJlKHFlKHIscWx0KSkpJiYoYm8ociwoc2UoKSxUYyksZGUoTSkpLCsrTSksb2hlKHQscixuKSk7Zm9yKE09MCxrPW5ldyBlcigoIWUuYiYmKGUuYj1uZXcgaGUoV3MsZSwxMiwzKSksZS5iKSk7ay5lIT1rLmkuZ2MoKTspZD11KGRyKGspLDc5KSwoR3QocWUoZSwoVGUoKSxkYikpKSE9PUd0KChqMCgpLGdiKSl8fEd0KHFlKGUsUnkpKT09PUd0KCh2MigpLHBTKSl8fEd0KHFlKGUsUnkpKT09PUd0KCh2MigpLGdTKSl8fGplKFJlKHFlKGUsQnkpKSl8fEd0KHFlKGUsUDYpKSE9PUd0KChldygpLCQ0KSkpJiYoYm8oZCwoc2UoKSxUYyksZGUoTSkpLCsrTSksVj1aZChkKSxZPVhwKGQpLEM9amUoUmUocWUoViwkeSkpKSxIPSFqZShSZShxZShkLEIyKSkpLEY9QyYmdXcoZCkmJmplKFJlKHFlKGQsUDIpKSksbz10cyhWKT09ZSYmdHMoVik9PXRzKFkpLGg9KHRzKFYpPT1lJiZZPT1lKV4odHMoWSk9PWUmJlY9PWUpLEgmJiFGJiYoaHx8bykmJlN4dCh0LGQsZSxuKTtpZih0cyhlKSlmb3Iodz1uZXcgZXIoX1h0KHRzKGUpKSk7dy5lIT13LmkuZ2MoKTspZD11KGRyKHcpLDc5KSxWPVpkKGQpLFY9PWUmJnV3KGQpJiYoRj1qZShSZShxZShWLChUZSgpLCR5KSkpKSYmamUoUmUocWUoZCxQMikpKSxGJiZTeHQodCxkLGUsbikpfWZ1bmN0aW9uIG81bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHIscGksUnM7Zm9yKHdyKG4sIk1pbldpZHRoIGxheWVyaW5nIiwxKSxIPWUuYixTZT1lLmEsUnM9dShRKGUsKFRlKCksWjl0KSksMTkpLmEsZD11KFEoZSxKOXQpLDE5KS5hLHQuYj1YdCh5ZShRKGUseGYpKSksdC5kPXNzLEJ0PW5ldyBTKFNlKTtCdC5hPEJ0LmMuYy5sZW5ndGg7KUx0PXUoSihCdCksMTApLEx0Lms9PShHbigpLERzKSYmKFJuPUx0Lm8uYix0LmQ9Yi5NYXRoLm1pbih0LmQsUm4pKTtmb3IodC5kPWIuTWF0aC5tYXgoMSx0LmQpLFdlPVNlLmMubGVuZ3RoLHQuYz1QdChUcixYciwyNSxXZSwxNSwxKSx0LmY9UHQoVHIsWHIsMjUsV2UsMTUsMSksdC5lPVB0KGlhLHZvLDI1LFdlLDE1LDEpLGs9MCx0LmE9MCxZdD1uZXcgUyhTZSk7WXQuYTxZdC5jLmMubGVuZ3RoOylMdD11KEooWXQpLDEwKSxMdC5wPWsrKyx0LmNbTHQucF09RXJlKGpvKEx0KSksdC5mW0x0LnBdPUVyZShNcyhMdCkpLHQuZVtMdC5wXT1MdC5vLmIvdC5kLHQuYSs9dC5lW0x0LnBdO2Zvcih0LmIvPXQuZCx0LmEvPVdlLGNlPVRwbihTZSksWHMoU2UsRXd0KG5ldyBFcCh0KSkpLFk9c3MsVj12aSxoPW51bGwscGk9UnMsaHI9UnMsbz1kLHM9ZCxSczwwJiYocGk9dShZQ3QuYS56ZCgpLDE5KS5hLGhyPXUoWUN0LmIuemQoKSwxOSkuYSksZDwwJiYobz11KEtDdC5hLnpkKCksMTkpLmEscz11KEtDdC5iLnpkKCksMTkpLmEpLHpuPXBpO3puPD1ocjt6bisrKWZvcihyPW87cjw9cztyKyspUWU9Sm1uKHQsem4scixTZSxjZSksZ3Q9WHQoeWUoUWUuYSkpLEY9dShRZS5iLDE1KSx0dD1GLmdjKCksKGd0PFl8fGd0PT1ZJiZ0dDxWKSYmKFk9Z3QsVj10dCxoPUYpO2ZvcihNPWguS2MoKTtNLk9iKCk7KXtmb3IoQz11KE0uUGIoKSwxNSksdz1uZXcgQ2goZSksX3Q9Qy5LYygpO190Lk9iKCk7KUx0PXUoX3QuUGIoKSwxMCksa28oTHQsdyk7SC5jW0guYy5sZW5ndGhdPXd9QnN0KEgpLFNlLmM9UHQoWG4sSWUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gYzVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbjtmb3IodC5iPWUsdC5hPXUoUShlLChUZSgpLFU5dCkpLDE5KS5hLHQuYz11KFEoZSxLOXQpLDE5KS5hLHQuYz09MCYmKHQuYz12aSksdHQ9bmV3IGhhKGUuYiwwKTt0dC5iPHR0LmQuZ2MoKTspe2ZvcihZPShRbih0dC5iPHR0LmQuZ2MoKSksdSh0dC5kLlhiKHR0LmM9dHQuYisrKSwyOSkpLGQ9bmV3IGxlLEM9LTEsQnQ9LTEsX3Q9bmV3IFMoWS5hKTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTApLE4wKChHTSgpLG5ldyBhcihscih6MChMdCkuYS5LYygpLG5ldyB6KSkpKT49dC5hJiYocj1HbW4odCxMdCksQz1iLk1hdGgubWF4KEMsci5iKSxCdD1iLk1hdGgubWF4KEJ0LHIuZCksdWUoZCxuZXcgbGEoTHQscikpKTtmb3IoV2U9bmV3IGxlLGs9MDtrPEM7KytrKSRtKFdlLDAsKFFuKHR0LmI+MCksdHQuYS5YYih0dC5jPS0tdHQuYiksUWU9bmV3IENoKHQuYiksUm0odHQsUWUpLFFuKHR0LmI8dHQuZC5nYygpKSx0dC5kLlhiKHR0LmM9dHQuYisrKSxRZSkpO2ZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KWlmKHM9dShKKGgpLDQ2KSxIPXUocy5iLDU3MSkuYSwhIUgpZm9yKEY9bmV3IFMoSCk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTApLFkzdCh0LE0sY0csV2UpO2ZvcihuPW5ldyBsZSx3PTA7dzxCdDsrK3cpdWUobiwoUm49bmV3IENoKHQuYiksUm0odHQsUm4pLFJuKSk7Zm9yKG89bmV3IFMoZCk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksNDYpLFNlPXUocy5iLDU3MSkuYywhIVNlKWZvcihjZT1uZXcgUyhTZSk7Y2UuYTxjZS5jLmMubGVuZ3RoOylZdD11KEooY2UpLDEwKSxZM3QodCxZdCx1RyxuKX1mb3IoZ3Q9bmV3IGhhKGUuYiwwKTtndC5iPGd0LmQuZ2MoKTspVj0oUW4oZ3QuYjxndC5kLmdjKCkpLHUoZ3QuZC5YYihndC5jPWd0LmIrKyksMjkpKSxWLmEuYy5sZW5ndGg9PTAmJkVsKGd0KX1mdW5jdGlvbiB1NW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyO2lmKHdyKG4sIlNwbGluZSBlZGdlIHJvdXRpbmciLDEpLGUuYi5jLmxlbmd0aD09MCl7ZS5mLmE9MCxvcihuKTtyZXR1cm59THQ9WHQoeWUoUShlLChUZSgpLFo0KSkpKSxkPVh0KHllKFEoZSxSMikpKSxoPVh0KHllKFEoZSxRNCkpKSxndD11KFEoZSxLbHQpLDMzNiksV2U9Z3Q9PSh0RSgpLElTKSxTZT1YdCh5ZShRKGUsRzl0KSkpLHQuZD1lLHQuai5jPVB0KFhuLEllLDEsMCw1LDEpLHQuYS5jPVB0KFhuLEllLDEsMCw1LDEpLFl1KHQuayksdz11KEZlKGUuYiwwKSwyOSksQz1laih3LmEsKGhxKCksTk8pKSxWPXUoRmUoZS5iLGUuYi5jLmxlbmd0aC0xKSwyOSksTT1laihWLmEsTk8pLFk9bmV3IFMoZS5iKSx0dD1udWxsLGhyPTA7ZG97Zm9yKF90PVkuYTxZLmMuYy5sZW5ndGg/dShKKFkpLDI5KTpudWxsLFk0bih0LHR0LF90KSxFbW4odCksUWU9SUtlKE5vbih0JChSaShuZXcgVG4obnVsbCxuZXcgX24odC5pLDE2KSksbmV3IGpRKSxuZXcgUlEpKSksem49MCxCdD1ocixGPSF0dHx8QyYmdHQ9PXcsSD0hX3R8fE0mJl90PT1WLFFlPjA/KGs9MCx0dCYmKGsrPWQpLGsrPShRZS0xKSpoLF90JiYoays9ZCksV2UmJl90JiYoaz1iLk1hdGgubWF4KGssSDJuKF90LGgsTHQsU2UpKSksazxMdCYmIUYmJiFIJiYoem49KEx0LWspLzIsaz1MdCksQnQrPWspOiFGJiYhSCYmKEJ0Kz1MdCksX3QmJmZ4dChfdCxCdCksY2U9bmV3IFModC5pKTtjZS5hPGNlLmMuYy5sZW5ndGg7KVl0PXUoSihjZSksMTI4KSxZdC5hLmM9aHIsWXQuYS5iPUJ0LWhyLFl0LkY9em4sWXQucD0hdHQ7QXModC5hLHQuaSksaHI9QnQsX3QmJihocis9X3QuYy5hKSx0dD1fdCxGPUh9d2hpbGUoX3QpO2ZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLG89c2NuKHQsciksSnQociwoc2UoKSxYNCksbyksUm49aHZuKHQsciksSnQocixOMixSbik7ZS5mLmE9aHIsdC5kPW51bGwsb3Iobil9ZnVuY3Rpb24gTGhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdDtpZihZPXQuaSE9MCxfdD0hMSxndD1udWxsLG1sKHQuZSkpe2lmKEM9ZS5nYygpLEM+MCl7Zm9yKEY9QzwxMDA/bnVsbDpuZXcgU3AoQyksaz1uZXcgb3l0KGUpLFY9ay5nLGd0PVB0KFRyLFhyLDI1LEMsMTUsMSkscj0wLEJ0PW5ldyBLdihDKSxzPTA7czx0Lmk7KytzKXtkPXQuZ1tzXSxIPWQ7dDpmb3IoTHQ9MDtMdDwyOysrTHQpe2Zvcih3PUM7LS13Pj0wOylpZihIIT1udWxsP3lpKEgsVlt3XSk6R3QoSCk9PT1HdChWW3ddKSl7Z3QubGVuZ3RoPD1yJiYodHQ9Z3QsZ3Q9UHQoVHIsWHIsMjUsMipndC5sZW5ndGgsMTUsMSksSWModHQsMCxndCwwLHIpKSxndFtyKytdPXMsTXIoQnQsVlt3XSk7YnJlYWsgdH1pZihIPUgsR3QoSCk9PT1HdChkKSlicmVha319aWYoaz1CdCxWPUJ0LmcsQz1yLHI+Z3QubGVuZ3RoJiYodHQ9Z3QsZ3Q9UHQoVHIsWHIsMjUsciwxNSwxKSxJYyh0dCwwLGd0LDAscikpLHI+MCl7Zm9yKF90PSEwLG89MDtvPHI7KytvKUg9VltvXSxGPW9LdCh0LHUoSCw3MiksRik7Zm9yKGg9cjstLWg+PTA7KXI2KHQsZ3RbaF0pO2lmKHIhPUMpe2ZvcihzPUM7LS1zPj1yOylyNihrLHMpO3R0PWd0LGd0PVB0KFRyLFhyLDI1LHIsMTUsMSksSWModHQsMCxndCwwLHIpfWU9a319fWVsc2UgZm9yKGU9emZuKHQsZSkscz10Lmk7LS1zPj0wOyllLkhjKHQuZ1tzXSkmJihyNih0LHMpLF90PSEwKTtpZihfdCl7aWYoZ3QhPW51bGwpe2ZvcihuPWUuZ2MoKSxNPW49PTE/REModCw0LGUuS2MoKS5QYigpLG51bGwsZ3RbMF0sWSk6REModCw2LGUsZ3QsZ3RbMF0sWSksRj1uPDEwMD9udWxsOm5ldyBTcChuKSxzPWUuS2MoKTtzLk9iKCk7KUg9cy5QYigpLEY9aHZ0KHQsdShILDcyKSxGKTtGPyhGLkVpKE0pLEYuRmkoKSk6bWkodC5lLE0pfWVsc2V7Zm9yKEY9dFplKGUuZ2MoKSkscz1lLktjKCk7cy5PYigpOylIPXMuUGIoKSxGPWh2dCh0LHUoSCw3MiksRik7RiYmRi5GaSgpfXJldHVybiEwfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gbDVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3Iobj1uZXcgZXNlKGUpLG4uYXx8V3duKGUpLGs9S3ZuKGUpLHc9bmV3IEh2LHR0PW5ldyBZY2UsWT1uZXcgUyhlLmEpO1kuYTxZLmMuYy5sZW5ndGg7KWZvcihWPXUoSihZKSwxMCkscz1uZXcgYXIobHIoTXMoVikuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksKHIuYy5pLms9PShHbigpLHhzKXx8ci5kLmkuaz09eHMpJiYoQz1aM24odCxyLGssdHQpLGxuKHcsdHN0KEMuZCksQy5hKSk7Zm9yKGg9bmV3IGxlLF90PXUoUShuLmMsKHNlKCksTnkpKSwyMSkuS2MoKTtfdC5PYigpOyl7c3dpdGNoKEx0PXUoX3QuUGIoKSw2MSksSD10dC5jW0x0LmddLEY9dHQuYltMdC5nXSxkPXR0LmFbTHQuZ10sbz1udWxsLGd0PW51bGwsTHQuZyl7Y2FzZSA0Om89bmV3IGloKHQuZC5hLEgsay5iLmEtdC5kLmEsRi1IKSxndD1uZXcgaWgodC5kLmEsSCxkLEYtSCksTnYoayxuZXcgJGUoby5jK28uYixvLmQpKSxOdihrLG5ldyAkZShvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDI6bz1uZXcgaWgoay5hLmEsSCx0LmMuYS1rLmEuYSxGLUgpLGd0PW5ldyBpaCh0LmMuYS1kLEgsZCxGLUgpLE52KGssbmV3ICRlKG8uYyxvLmQpKSxOdihrLG5ldyAkZShvLmMsby5kK28uYSkpO2JyZWFrO2Nhc2UgMTpvPW5ldyBpaChILHQuZC5iLEYtSCxrLmIuYi10LmQuYiksZ3Q9bmV3IGloKEgsdC5kLmIsRi1ILGQpLE52KGssbmV3ICRlKG8uYyxvLmQrby5hKSksTnYoayxuZXcgJGUoby5jK28uYixvLmQrby5hKSk7YnJlYWs7Y2FzZSAzOm89bmV3IGloKEgsay5hLmIsRi1ILHQuYy5iLWsuYS5iKSxndD1uZXcgaWgoSCx0LmMuYi1kLEYtSCxkKSxOdihrLG5ldyAkZShvLmMsby5kKSksTnYoayxuZXcgJGUoby5jK28uYixvLmQpKX1vJiYoTT1uZXcgbnF0LE0uZD1MdCxNLmI9byxNLmM9Z3QsTS5hPXMkKHUoQWkodyx0c3QoTHQpKSwyMSkpLGguY1toLmMubGVuZ3RoXT1NKX1yZXR1cm4gQXMobi5iLGgpLG4uZD1ndW4odjNuKGspKSxufWZ1bmN0aW9uIE1oZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7aWYobi5wW2UucF09PW51bGwpe2Q9ITAsbi5wW2UucF09MCxoPWUsWT1uLm89PShFMSgpLGoyKT9UczpzcztkbyBzPXQuYi5lW2gucF0sbz1oLmMuYS5jLmxlbmd0aCxuLm89PWoyJiZzPjB8fG4ubz09ejEmJnM8by0xPyh3PW51bGwsaz1udWxsLG4ubz09ejE/dz11KEZlKGguYy5hLHMrMSksMTApOnc9dShGZShoLmMuYSxzLTEpLDEwKSxrPW4uZ1t3LnBdLE1oZSh0LGssbiksWT10LmUuYmcoWSxlLGgpLG4ualtlLnBdPT1lJiYobi5qW2UucF09bi5qW2sucF0pLG4ualtlLnBdPT1uLmpbay5wXT8oVj1WMyh0LmQsaCx3KSxuLm89PXoxPyhyPVh0KG4ucFtlLnBdKSxNPVh0KG4ucFtrLnBdKStYdChuLmRbdy5wXSktdy5kLmQtVi1oLmQuYS1oLm8uYi1YdChuLmRbaC5wXSksZD8oZD0hMSxuLnBbZS5wXT1iLk1hdGgubWluKE0sWSkpOm4ucFtlLnBdPWIuTWF0aC5taW4ocixiLk1hdGgubWluKE0sWSkpKToocj1YdChuLnBbZS5wXSksTT1YdChuLnBbay5wXSkrWHQobi5kW3cucF0pK3cuby5iK3cuZC5hK1YraC5kLmQtWHQobi5kW2gucF0pLGQ/KGQ9ITEsbi5wW2UucF09Yi5NYXRoLm1heChNLFkpKTpuLnBbZS5wXT1iLk1hdGgubWF4KHIsYi5NYXRoLm1heChNLFkpKSkpOihWPVh0KHllKFEodC5hLChUZSgpLEJ3KSkpKSxIPWVuZSh0LG4ualtlLnBdKSxDPWVuZSh0LG4ualtrLnBdKSxuLm89PXoxPyhGPVh0KG4ucFtlLnBdKStYdChuLmRbaC5wXSkraC5vLmIraC5kLmErVi0oWHQobi5wW2sucF0pK1h0KG4uZFt3LnBdKS13LmQuZCksalF0KEgsQyxGKSk6KEY9WHQobi5wW2UucF0pK1h0KG4uZFtoLnBdKS1oLmQuZC1YdChuLnBbay5wXSktWHQobi5kW3cucF0pLXcuby5iLXcuZC5hLVYsalF0KEgsQyxGKSkpKTpZPXQuZS5iZyhZLGUsaCksaD1uLmFbaC5wXTt3aGlsZShoIT1lKTtjS2UodC5lLGUpfX1mdW5jdGlvbiBoNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyO2ZvcihfdD1lLEx0PW5ldyBIdixCdD1uZXcgSHYsQz1VdihfdCxiOHQpLHI9bmV3IExYdCh0LG4sTHQsQnQpLFkwbihyLmEsci5iLHIuYyxyLmQsQyksdz0oU2U9THQuaSxTZXx8KEx0Lmk9bmV3IFczKEx0LEx0LmMpKSksUWU9dy5LYygpO1FlLk9iKCk7KWZvcihXZT11KFFlLlBiKCksMjAyKSxzPXUoQWkoTHQsV2UpLDIxKSxZPXMuS2MoKTtZLk9iKCk7KWlmKFY9WS5QYigpLFl0PXUodDQodC5kLFYpLDIwMiksWXQpZD0oIVdlLmUmJihXZS5lPW5ldyBDbihaaSxXZSwxMCw5KSksV2UuZSksTXIoZCxZdCk7ZWxzZSB0aHJvdyBoPU8wKF90LENkKSxGPUFkZStWK0xkZStoLEg9RitWRSxydChuZXcgYWQoSCkpO2ZvcihrPShjZT1CdC5pLGNlfHwoQnQuaT1uZXcgVzMoQnQsQnQuYykpKSx6bj1rLktjKCk7em4uT2IoKTspZm9yKFJuPXUoem4uUGIoKSwyMDIpLG89dShBaShCdCxSbiksMjEpLGd0PW8uS2MoKTtndC5PYigpOylpZih0dD1ndC5QYigpLFl0PXUodDQodC5kLHR0KSwyMDIpLFl0KU09KCFSbi5nJiYoUm4uZz1uZXcgQ24oWmksUm4sOSwxMCkpLFJuLmcpLE1yKE0sWXQpO2Vsc2UgdGhyb3cgaD1PMChfdCxDZCksRj1BZGUrdHQrTGRlK2gsSD1GK1ZFLHJ0KG5ldyBhZChIKSk7IW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaSE9MCYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmkhPTApJiYoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaTw9MSYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmk8PTEpKSYmKCFuLmEmJihuLmE9bmV3IGhlKFppLG4sNiw2KSksbi5hKS5pPT0xJiYoaHI9dShTdCgoIW4uYSYmKG4uYT1uZXcgaGUoWmksbiw2LDYpKSxuLmEpLDApLDIwMiksIXNzdChocikmJiFhc3QoaHIpJiYoWiQoaHIsdShTdCgoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIpLDApLDgyKSksSiQoaHIsdShTdCgoIW4uYyYmKG4uYz1uZXcgQ24oYnIsbiw1LDgpKSxuLmMpLDApLDgyKSkpKX1mdW5jdGlvbiBmNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuO2ZvcihfdD10LmEsQnQ9MCxZdD1fdC5sZW5ndGg7QnQ8WXQ7KytCdCl7Zm9yKEx0PV90W0J0XSxrPXZpLEM9dmksVj1uZXcgUyhMdC5lKTtWLmE8Vi5jLmMubGVuZ3RoOylGPXUoSihWKSwxMCksaD1GLmM/Um8oRi5jLmEsRiwwKTotMSxoPjA/KE09dShGZShGLmMuYSxoLTEpLDEwKSxXZT1WMyh0LmIsRixNKSx0dD1GLm4uYi1GLmQuZC0oTS5uLmIrTS5vLmIrTS5kLmErV2UpKTp0dD1GLm4uYi1GLmQuZCxrPWIuTWF0aC5taW4odHQsayksaDxGLmMuYS5jLmxlbmd0aC0xPyhNPXUoRmUoRi5jLmEsaCsxKSwxMCksV2U9VjModC5iLEYsTSksZ3Q9TS5uLmItTS5kLmQtKEYubi5iK0Yuby5iK0YuZC5hK1dlKSk6Z3Q9MipGLm4uYixDPWIuTWF0aC5taW4oZ3QsQyk7Zm9yKHc9dmksbz0hMSxzPXUoRmUoTHQuZSwwKSwxMCksUm49bmV3IFMocy5qKTtSbi5hPFJuLmMuYy5sZW5ndGg7KWZvcihRZT11KEooUm4pLDExKSxZPXMubi5iK1FlLm4uYitRZS5hLmIscj1uZXcgUyhRZS5lKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksY2U9bi5jLGU9Y2UuaS5uLmIrY2Uubi5iK2NlLmEuYi1ZLGIuTWF0aC5hYnMoZSk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyhlKTwoZTwwP2s6QykmJih3PWUsbz0hMCk7Zm9yKGQ9dShGZShMdC5lLEx0LmUuYy5sZW5ndGgtMSksMTApLFNlPW5ldyBTKGQuaik7U2UuYTxTZS5jLmMubGVuZ3RoOylmb3IoY2U9dShKKFNlKSwxMSksWT1kLm4uYitjZS5uLmIrY2UuYS5iLHI9bmV3IFMoY2UuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLFFlPW4uZCxlPVFlLmkubi5iK1FlLm4uYitRZS5hLmItWSxiLk1hdGguYWJzKGUpPGIuTWF0aC5hYnModykmJmIuTWF0aC5hYnMoZSk8KGU8MD9rOkMpJiYodz1lLG89ITApO2lmKG8mJnchPTApZm9yKEg9bmV3IFMoTHQuZSk7SC5hPEguYy5jLmxlbmd0aDspRj11KEooSCksMTApLEYubi5iKz13fX1mdW5jdGlvbiBJaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKGtsKHQuYSxlKSl7aWYoUzAodShKbih0LmEsZSksNTMpLG4pKXJldHVybiAxfWVsc2Uga2kodC5hLGUsbmV3IHFzKTtpZihrbCh0LmEsbikpe2lmKFMwKHUoSm4odC5hLG4pLDUzKSxlKSlyZXR1cm4tMX1lbHNlIGtpKHQuYSxuLG5ldyBxcyk7aWYoa2wodC5lLGUpKXtpZihTMCh1KEpuKHQuZSxlKSw1MyksbikpcmV0dXJuLTF9ZWxzZSBraSh0LmUsZSxuZXcgcXMpO2lmKGtsKHQuZSxuKSl7aWYoUzAodShKbih0LmEsbiksNTMpLGUpKXJldHVybiAxfWVsc2Uga2kodC5lLG4sbmV3IHFzKTtpZih0LmM9PShqMCgpLGZodCl8fCFWcyhlLChzZSgpLFRjKSl8fCFWcyhuLChzZSgpLFRjKSkpe2lmKHc9dShTMnQoR1p0KG1pdChSaShuZXcgVG4obnVsbCxuZXcgX24oZS5qLDE2KSksbmV3IElMKSksbmV3IElGKSksMTEpLEM9dShTMnQoR1p0KG1pdChSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IEhYKSksbmV3IEdYKSksMTEpLHcmJkMpe2lmKGQ9dy5pLGs9Qy5pLGQmJmQ9PWspe2ZvcihGPW5ldyBTKGQuaik7Ri5hPEYuYy5jLmxlbmd0aDspe2lmKE09dShKKEYpLDExKSxNPT13KXJldHVybiB4RSh0LG4sZSksLTE7aWYoTT09QylyZXR1cm4geEUodCxlLG4pLDF9cmV0dXJuIGR1KFRzdCh0LGUpLFRzdCh0LG4pKX1mb3IoVj10LmQsWT0wLHR0PVYubGVuZ3RoO1k8dHQ7KytZKXtpZihIPVZbWV0sSD09ZClyZXR1cm4geEUodCxuLGUpLC0xO2lmKEg9PWspcmV0dXJuIHhFKHQsZSxuKSwxfX1pZighVnMoZSwoc2UoKSxUYykpfHwhVnMobixUYykpcmV0dXJuIHM9VHN0KHQsZSksaD1Uc3QodCxuKSxzPmg/eEUodCxlLG4pOnhFKHQsbixlKSxzPGg/LTE6cz5oPzE6MH1yZXR1cm4gcj11KFEoZSwoc2UoKSxUYykpLDE5KS5hLG89dShRKG4sVGMpLDE5KS5hLHI+bz94RSh0LGUsbik6eEUodCxuLGUpLHI8bz8tMTpyPm8/MTowfWZ1bmN0aW9uIFR4dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQ7aWYoamUoUmUocWUoZSwoY2koKSwkVikpKSkpcmV0dXJuIHZuKCksdm4oKSxpbztpZihrPSghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKS5pIT0wLE09WmduKGUpLEM9IU0uZGMoKSxrfHxDKXtpZihzPXUocWUoZSxDNyksMTQ5KSwhcyl0aHJvdyBydChuZXcgRjMoIlJlc29sdmVkIGFsZ29yaXRobSBpcyBub3Qgc2V0OyBhcHBseSBhIExheW91dEFsZ29yaXRobVJlc29sdmVyIGJlZm9yZSBjb21wdXRpbmcgbGF5b3V0LiIpKTtpZihMdD1XYnQocywodkUoKSxKVikpLEZpZShlKSwhayYmQyYmIUx0KXJldHVybiB2bigpLHZuKCksaW87aWYodz1uZXcgbGUsR3QocWUoZSxyNSkpPT09R3QoKCQwKCksWmcpKSYmKFdidChzLFFWKXx8V2J0KHMsWFYpKSlmb3IoSD13dWUodCxlKSxWPW5ldyBRaSxVYShWLCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKSk7Vi5iIT0wOylGPXUoVi5iPT0wP251bGw6KFFuKFYuYiE9MCksY2goVixWLmEuYSkpLDMzKSxGaWUoRiksZ3Q9R3QocWUoRixyNSkpPT09R3QoWVMpLGd0fHxyMihGLFZTKSYmIW9tdChzLHFlKEYsQzcpKT8oZD1UeHQodCxGLG4sciksQXModyxkKSxibyhGLHI1LFlTKSxQdWUoRikpOlVhKFYsKCFGLmEmJihGLmE9bmV3IGhlKG5zLEYsMTAsMTEpKSxGLmEpKTtlbHNlIGZvcihIPSghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKS5pLGg9bmV3IGVyKCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDMzKSxkPVR4dCh0LG8sbixyKSxBcyh3LGQpLFB1ZShvKTtmb3IodHQ9bmV3IFModyk7dHQuYTx0dC5jLmMubGVuZ3RoOylZPXUoSih0dCksNzkpLGJvKFksJFYsKEZuKCksITApKTtyZXR1cm4gU2huKGUscyxSYyhyLEgpKSxVd24odyksQyYmTHQ/TToodm4oKSx2bigpLGlvKX1lbHNlIHJldHVybiB2bigpLHZuKCksaW99ZnVuY3Rpb24gVEQodCxlLG4scixzLG8saCxkLHcpe3ZhciBrLEMsTSxGLEgsVixZO3N3aXRjaChIPW4sQz1uZXcgSDAodyksXzAoQywoR24oKSx4cykpLEp0KEMsKHNlKCksUVR0KSxoKSxKdChDLChUZSgpLG9zKSwob2EoKSxWYykpLFk9WHQoeWUodC5XZSh6eSkpKSxKdChDLHp5LFkpLE09bmV3IE1jLFVvKE0sQyksZSE9SDEmJmUhPXlifHwocj49MD9IPUp4KGQpOkg9SEkoSngoZCkpLHQuWWUodjcsSCkpLGs9bmV3IFRhLEY9ITEsdC5YZShQdyk/KEYydChrLHUodC5XZShQdyksOCkpLEY9ITApOmpYZShrLGguYS8yLGguYi8yKSxILmcpe2Nhc2UgNDpKdChDLGN1LChoaCgpLGZiKSksSnQoQyxIRywodTIoKSxHNCkpLEMuby5iPWguYixZPDAmJihDLm8uYT0tWSksRnMoTSwoYmUoKSxIbikpLEZ8fChrLmE9aC5hKSxrLmEtPWguYTticmVhaztjYXNlIDI6SnQoQyxjdSwoaGgoKSxGeSkpLEp0KEMsSEcsKHUyKCksdTcpKSxDLm8uYj1oLmIsWTwwJiYoQy5vLmE9LVkpLEZzKE0sKGJlKCksQm4pKSxGfHwoay5hPTApO2JyZWFrO2Nhc2UgMTpKdChDLE8yLChCMCgpLFU0KSksQy5vLmE9aC5hLFk8MCYmKEMuby5iPS1ZKSxGcyhNLChiZSgpLG1yKSksRnx8KGsuYj1oLmIpLGsuYi09aC5iO2JyZWFrO2Nhc2UgMzpKdChDLE8yLChCMCgpLEE2KSksQy5vLmE9aC5hLFk8MCYmKEMuby5iPS1ZKSxGcyhNLChiZSgpLE5uKSksRnx8KGsuYj0wKX1pZihGMnQoTS5uLGspLEp0KEMsUHcsayksZT09RzJ8fGU9PWgwfHxlPT1WYyl7aWYoVj0wLGU9PUcyJiZ0LlhlKFdnKSlzd2l0Y2goSC5nKXtjYXNlIDE6Y2FzZSAyOlY9dSh0LldlKFdnKSwxOSkuYTticmVhaztjYXNlIDM6Y2FzZSA0OlY9LXUodC5XZShXZyksMTkpLmF9ZWxzZSBzd2l0Y2goSC5nKXtjYXNlIDQ6Y2FzZSAyOlY9by5iLGU9PWgwJiYoVi89cy5iKTticmVhaztjYXNlIDE6Y2FzZSAzOlY9by5hLGU9PWgwJiYoVi89cy5hKX1KdChDLER3LFYpfXJldHVybiBKdChDLG9jLEgpLEN9ZnVuY3Rpb24gZDVuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZTtpZihuPVh0KHllKFEodC5hLmosKFRlKCksUjl0KSkpKSxuPC0xfHwhdC5hLml8fER4KHUoUSh0LmEubyxvcyksOTgpKXx8WW8odC5hLm8sKGJlKCksSG4pKS5nYygpPDImJllvKHQuYS5vLEJuKS5nYygpPDIpcmV0dXJuITA7aWYodC5hLmMuUmYoKSlyZXR1cm4hMTtmb3IoWXQ9MCxCdD0wLF90PW5ldyBsZSx3PXQuYS5lLGs9MCxDPXcubGVuZ3RoO2s8QzsrK2spe2ZvcihkPXdba10sRj1kLEg9MCxZPUYubGVuZ3RoO0g8WTsrK0gpe2lmKE09RltIXSxNLms9PShHbigpLEhjKSl7X3QuY1tfdC5jLmxlbmd0aF09TTtjb250aW51ZX1mb3Iocj10LmJbTS5jLnBdW00ucF0sTS5rPT14cz8oci5iPTEsdShRKE0sKHNlKCksX2kpKSwxMSkuaj09KGJlKCksSG4pJiYoQnQrPXIuYSkpOihRZT1ZbyhNLChiZSgpLEJuKSksUWUuZGMoKXx8IUpldChRZSxuZXcgc1EpP3IuYz0xOihzPVlvKE0sSG4pLChzLmRjKCl8fCFKZXQocyxuZXcgaVEpKSYmKFl0Kz1yLmEpKSksaD1uZXcgYXIobHIoTXMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShMcihoKSwxNyksWXQrPXIuYyxCdCs9ci5iLFdlPW8uZC5pLFRtdCh0LHIsV2UpO2ZvcihndD1MMShjdChvdChCMSwxKSxJZSwyMCwwLFtZbyhNLChiZSgpLE5uKSksWW8oTSxtcildKSksU2U9bmV3IGFyKG5ldyB3MnQoZ3QuYS5sZW5ndGgsZ3QuYSkpO3pyKFNlKTspY2U9dShMcihTZSksMTEpLEx0PXUoUShjZSwoc2UoKSxadSkpLDEwKSxMdCYmKFl0Kz1yLmMsQnQrPXIuYixUbXQodCxyLEx0KSl9Zm9yKFY9bmV3IFMoX3QpO1YuYTxWLmMuYy5sZW5ndGg7KWZvcihNPXUoSihWKSwxMCkscj10LmJbTS5jLnBdW00ucF0saD1uZXcgYXIobHIoTXMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShMcihoKSwxNyksWXQrPXIuYyxCdCs9ci5iLFdlPW8uZC5pLFRtdCh0LHIsV2UpO190LmM9UHQoWG4sSWUsMSwwLDUsMSl9cmV0dXJuIGU9WXQrQnQsdHQ9ZT09MD9zczooWXQtQnQpL2UsdHQ+PW59ZnVuY3Rpb24gZzVuKCl7YWJ0KCk7ZnVuY3Rpb24gdChyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2g9ZnVuY3Rpb24obyl7dmFyIGg9by5kYXRhO3N3aXRjaChoLmNtZCl7Y2FzZSJhbGdvcml0aG1zIjp2YXIgZD1nM3QoKHZuKCksbmV3IFQobmV3IGIxKFRiLmIpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpkfSk7YnJlYWs7Y2FzZSJjYXRlZ29yaWVzIjp2YXIgdz1nM3QoKHZuKCksbmV3IFQobmV3IGIxKFRiLmMpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTp3fSk7YnJlYWs7Y2FzZSJvcHRpb25zIjp2YXIgaz1nM3QoKHZuKCksbmV3IFQobmV3IGIxKFRiLmQpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTprfSk7YnJlYWs7Y2FzZSJyZWdpc3RlciI6eDNuKGguYWxnb3JpdGhtcyksci5wb3N0TWVzc2FnZSh7aWQ6aC5pZH0pO2JyZWFrO2Nhc2UibGF5b3V0IjpleW4oaC5ncmFwaCxoLmxheW91dE9wdGlvbnN8fHt9LGgub3B0aW9uc3x8e30pLHIucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpoLmdyYXBofSk7YnJlYWt9fSx0aGlzLnNhdmVEaXNwYXRjaD1mdW5jdGlvbihvKXt0cnl7cy5kaXNwYXRjaChvKX1jYXRjaChoKXtyLnBvc3RNZXNzYWdlKHtpZDpvLmRhdGEuaWQsZXJyb3I6aH0pfX19ZnVuY3Rpb24gZShyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2hlcj1uZXcgdCh7cG9zdE1lc3NhZ2U6ZnVuY3Rpb24obyl7cy5vbm1lc3NhZ2Uoe2RhdGE6b30pfX0pLHRoaXMucG9zdE1lc3NhZ2U9ZnVuY3Rpb24obyl7c2V0VGltZW91dChmdW5jdGlvbigpe3MuZGlzcGF0Y2hlci5zYXZlRGlzcGF0Y2goe2RhdGE6b30pfSwwKX19aWYodHlwZW9mIGRvY3VtZW50PT09cG90JiZ0eXBlb2Ygc2VsZiE9PXBvdCl7dmFyIG49bmV3IHQoc2VsZik7c2VsZi5vbm1lc3NhZ2U9bi5zYXZlRGlzcGF0Y2h9ZWxzZSB0eXBlb2YgcCE9PXBvdCYmcC5leHBvcnRzJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHAuZXhwb3J0cz17ZGVmYXVsdDplLFdvcmtlcjplfSl9ZnVuY3Rpb24gcDVuKHQpe3QuTnx8KHQuTj0hMCx0LmI9aWModCwwKSxlcyh0LmIsMCksZXModC5iLDEpLGVzKHQuYiwyKSx0LmJiPWljKHQsMSksZXModC5iYiwwKSxlcyh0LmJiLDEpLHQuZmI9aWModCwyKSxlcyh0LmZiLDMpLGVzKHQuZmIsNCksUGkodC5mYiw1KSx0LnFiPWljKHQsMyksZXModC5xYiwwKSxQaSh0LnFiLDEpLFBpKHQucWIsMiksZXModC5xYiwzKSxlcyh0LnFiLDQpLFBpKHQucWIsNSksZXModC5xYiw2KSx0LmE9YWkodCw0KSx0LmM9YWkodCw1KSx0LmQ9YWkodCw2KSx0LmU9YWkodCw3KSx0LmY9YWkodCw4KSx0Lmc9YWkodCw5KSx0Lmk9YWkodCwxMCksdC5qPWFpKHQsMTEpLHQuaz1haSh0LDEyKSx0Lm49YWkodCwxMyksdC5vPWFpKHQsMTQpLHQucD1haSh0LDE1KSx0LnE9YWkodCwxNiksdC5zPWFpKHQsMTcpLHQucj1haSh0LDE4KSx0LnQ9YWkodCwxOSksdC51PWFpKHQsMjApLHQudj1haSh0LDIxKSx0Lnc9YWkodCwyMiksdC5CPWFpKHQsMjMpLHQuQT1haSh0LDI0KSx0LkM9YWkodCwyNSksdC5EPWFpKHQsMjYpLHQuRj1haSh0LDI3KSx0Lkc9YWkodCwyOCksdC5IPWFpKHQsMjkpLHQuSj1haSh0LDMwKSx0Lkk9YWkodCwzMSksdC5LPWFpKHQsMzIpLHQuTT1haSh0LDMzKSx0Lkw9YWkodCwzNCksdC5QPWFpKHQsMzUpLHQuUT1haSh0LDM2KSx0LlI9YWkodCwzNyksdC5TPWFpKHQsMzgpLHQuVD1haSh0LDM5KSx0LlU9YWkodCw0MCksdC5WPWFpKHQsNDEpLHQuWD1haSh0LDQyKSx0Llc9YWkodCw0MyksdC5ZPWFpKHQsNDQpLHQuWj1haSh0LDQ1KSx0LiQ9YWkodCw0NiksdC5fPWFpKHQsNDcpLHQuYWI9YWkodCw0OCksdC5jYj1haSh0LDQ5KSx0LmRiPWFpKHQsNTApLHQuZWI9YWkodCw1MSksdC5nYj1haSh0LDUyKSx0LmhiPWFpKHQsNTMpLHQuaWI9YWkodCw1NCksdC5qYj1haSh0LDU1KSx0LmtiPWFpKHQsNTYpLHQubGI9YWkodCw1NyksdC5tYj1haSh0LDU4KSx0Lm5iPWFpKHQsNTkpLHQub2I9YWkodCw2MCksdC5wYj1haSh0LDYxKSl9ZnVuY3Rpb24gYjVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdDtpZihMdD0wLGUuZi5hPT0wKWZvcih0dD1uZXcgUyh0KTt0dC5hPHR0LmMuYy5sZW5ndGg7KVY9dShKKHR0KSwxMCksTHQ9Yi5NYXRoLm1heChMdCxWLm4uYStWLm8uYStWLmQuYyk7ZWxzZSBMdD1lLmYuYS1lLmMuYTtmb3IoTHQtPWUuYy5hLFk9bmV3IFModCk7WS5hPFkuYy5jLmxlbmd0aDspe3N3aXRjaChWPXUoSihZKSwxMCksQTkoVi5uLEx0LVYuby5hKSxMdnQoVi5mKSxrc2UoViksKFYucT9WLnE6KHZuKCksdm4oKSxhMCkpLl9iKChUZSgpLEh5KSkmJkE5KHUoUShWLEh5KSw4KSxMdC1WLm8uYSksdShRKFYsTGQpLDI0OCkuZyl7Y2FzZSAxOkp0KFYsTGQsKFFkKCksek8pKTticmVhaztjYXNlIDI6SnQoVixMZCwoUWQoKSwkTykpfWZvcihndD1WLm8sQnQ9bmV3IFMoVi5qKTtCdC5hPEJ0LmMuYy5sZW5ndGg7KXtmb3IoX3Q9dShKKEJ0KSwxMSksQTkoX3QubixndC5hLV90Lm8uYSksQTkoX3QuYSxfdC5vLmEpLEZzKF90LGJuZShfdC5qKSksaD11KFEoX3QsV2cpLDE5KSxoJiZKdChfdCxXZyxkZSgtaC5hKSksbz1uZXcgUyhfdC5nKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDE3KSxyPWVpKHMuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksbi5hPUx0LW4uYTtpZihrPXUoUShzLF9vKSw3NCksaylmb3Iodz1laShrLDApO3cuYiE9dy5kLmM7KWQ9dSh0aSh3KSw4KSxkLmE9THQtZC5hO2ZvcihGPW5ldyBTKHMuYik7Ri5hPEYuYy5jLmxlbmd0aDspQz11KEooRiksNzApLEE5KEMubixMdC1DLm8uYSl9Zm9yKEg9bmV3IFMoX3QuZik7SC5hPEguYy5jLmxlbmd0aDspQz11KEooSCksNzApLEE5KEMubixfdC5vLmEtQy5vLmEpfWZvcihWLms9PShHbigpLHhzKSYmKEp0KFYsKHNlKCksb2MpLGJuZSh1KFEoVixvYyksNjEpKSksazBuKFYpKSxNPW5ldyBTKFYuYik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksNzApLGtzZShDKSxBOShDLm4sZ3QuYS1DLm8uYSl9fWZ1bmN0aW9uIHY1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7aWYoTHQ9MCxlLmYuYj09MClmb3IodHQ9bmV3IFModCk7dHQuYTx0dC5jLmMubGVuZ3RoOylWPXUoSih0dCksMTApLEx0PWIuTWF0aC5tYXgoTHQsVi5uLmIrVi5vLmIrVi5kLmEpO2Vsc2UgTHQ9ZS5mLmItZS5jLmI7Zm9yKEx0LT1lLmMuYixZPW5ldyBTKHQpO1kuYTxZLmMuYy5sZW5ndGg7KXtzd2l0Y2goVj11KEooWSksMTApLFM5KFYubixMdC1WLm8uYiksTXZ0KFYuZiksRXNlKFYpLChWLnE/Vi5xOih2bigpLHZuKCksYTApKS5fYigoVGUoKSxIeSkpJiZTOSh1KFEoVixIeSksOCksTHQtVi5vLmIpLHUoUShWLExkKSwyNDgpLmcpe2Nhc2UgMzpKdChWLExkLChRZCgpLE5WKSk7YnJlYWs7Y2FzZSA0Okp0KFYsTGQsKFFkKCksRlYpKX1mb3IoZ3Q9Vi5vLEJ0PW5ldyBTKFYuaik7QnQuYTxCdC5jLmMubGVuZ3RoOyl7Zm9yKF90PXUoSihCdCksMTEpLFM5KF90Lm4sZ3QuYi1fdC5vLmIpLFM5KF90LmEsX3Quby5iKSxGcyhfdCx2bmUoX3QuaikpLGg9dShRKF90LFdnKSwxOSksaCYmSnQoX3QsV2csZGUoLWguYSkpLG89bmV3IFMoX3QuZyk7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoSihvKSwxNykscj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLG4uYj1MdC1uLmI7aWYoaz11KFEocyxfbyksNzQpLGspZm9yKHc9ZWkoaywwKTt3LmIhPXcuZC5jOylkPXUodGkodyksOCksZC5iPUx0LWQuYjtmb3IoRj1uZXcgUyhzLmIpO0YuYTxGLmMuYy5sZW5ndGg7KUM9dShKKEYpLDcwKSxTOShDLm4sTHQtQy5vLmIpfWZvcihIPW5ldyBTKF90LmYpO0guYTxILmMuYy5sZW5ndGg7KUM9dShKKEgpLDcwKSxTOShDLm4sX3Quby5iLUMuby5iKX1mb3IoVi5rPT0oR24oKSx4cykmJihKdChWLChzZSgpLG9jKSx2bmUodShRKFYsb2MpLDYxKSkpLEd1bihWKSksTT1uZXcgUyhWLmIpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDcwKSxFc2UoQyksUzkoQy5uLGd0LmItQy5vLmIpfX1mdW5jdGlvbiB3NW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKE09ITEsaz10KzEsQz0oQW4odCxlLmMubGVuZ3RoKSx1KGUuY1t0XSwyMDApKSxoPUMuYSxkPW51bGwsbz0wO288Qy5hLmMubGVuZ3RoO28rKylpZihzPShBbihvLGguYy5sZW5ndGgpLHUoaC5jW29dLDE4NykpLCFzLmMpe2lmKHMuYi5jLmxlbmd0aD09MCl7cWQoKSx0RChDLHMpLC0tbyxNPSEwO2NvbnRpbnVlfWlmKHMua3x8KGQmJlZ6KGQpLGQ9bmV3IFB3dChkP2QuZStkLmQrcjowLEMuZixyKSxZSShzLGQuZStkLmQsQy5mKSx1ZShDLmQsZCksY3l0KGQscykscy5rPSEwKSx3PW51bGwsdz0oSD1udWxsLG88Qy5hLmMubGVuZ3RoLTE/SD11KEZlKEMuYSxvKzEpLDE4Nyk6azxlLmMubGVuZ3RoJiYoQW4oayxlLmMubGVuZ3RoKSx1KGUuY1trXSwyMDApKS5hLmMubGVuZ3RoIT0wJiYoSD11KEZlKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEsMCksMTg3KSksSCksRj0hMSx3JiYoRj0heWkody5qLEMpKSx3KXtpZih3LmIuYy5sZW5ndGg9PTApe3REKEMsdyk7YnJlYWt9ZWxzZSBkSShzLG4tcy5zKSxWeihzLnEpLE09TXxFMG4oQyxzLHcsbixyKTtpZih3LmIuYy5sZW5ndGg9PTApZm9yKHREKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLHcpLHc9bnVsbDtlLmMubGVuZ3RoPmsmJihBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEuYy5sZW5ndGg9PTA7KXZ1KGUsKEFuKGssZS5jLmxlbmd0aCksZS5jW2tdKSk7aWYoIXcpey0tbztjb250aW51ZX1pZihubW4oZSxDLHMsdyxGLG4sayxyKSl7TT0hMDtjb250aW51ZX1pZihGKXtpZih1eW4oZSxDLHMsdyxuLGsscikpe009ITA7Y29udGludWV9ZWxzZSBpZih6eXQoQyxzKSl7cy5jPSEwLE09ITA7Y29udGludWV9fWVsc2UgaWYoenl0KEMscykpe3MuYz0hMCxNPSEwO2NvbnRpbnVlfWlmKE0pY29udGludWV9aWYoenl0KEMscykpe3MuYz0hMCxNPSEwLHcmJih3Lms9ITEpO2NvbnRpbnVlfWVsc2UgVnoocy5xKX1yZXR1cm4gTX1mdW5jdGlvbiBNYXQodCxlLG4scixzLG8saCl7dmFyIGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzO2ZvcihZPTAsUm49MCxrPW5ldyBTKHQuYik7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTU3KSx3LmMmJmFoZSh3LmMpLFk9Yi5NYXRoLm1heChZLEZ1KHcpKSxSbis9RnUodykqeGwodyk7Zm9yKHR0PVJuL3QuYi5jLmxlbmd0aCxRZT1OMW4odC5iLHR0KSxSbis9dC5iLmMubGVuZ3RoKlFlLFk9Yi5NYXRoLm1heChZLGIuTWF0aC5zcXJ0KFJuKmgpKStuLmIscGk9bi5iLFJzPW4uZCxIPTAsTT1uLmIrbi5jLFdlPW5ldyBRaSxuaShXZSxkZSgwKSksY2U9bmV3IFFpLEM9bmV3IGhhKHQuYiwwKSxWPW51bGwsZD1uZXcgbGU7Qy5iPEMuZC5nYygpOyl3PShRbihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksaHI9RnUodyksRj14bCh3KSxwaStocj5ZJiYobyYmKEtiKGNlLEgpLEtiKFdlLGRlKEMuYi0xKSksdWUodC5kLFYpLGQuYz1QdChYbixJZSwxLDAsNSwxKSkscGk9bi5iLFJzKz1IK2UsSD0wLE09Yi5NYXRoLm1heChNLG4uYituLmMraHIpKSxkLmNbZC5jLmxlbmd0aF09dyxLaWUodyxwaSxScyksTT1iLk1hdGgubWF4KE0scGkraHIrbi5jKSxIPWIuTWF0aC5tYXgoSCxGKSxwaSs9aHIrZSxWPXc7aWYoQXModC5hLGQpLHVlKHQuZCx1KEZlKGQsZC5jLmxlbmd0aC0xKSwxNTcpKSxNPWIuTWF0aC5tYXgoTSxyKSx6bj1ScytIK24uYSx6bjxzJiYoSCs9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsQz1uZXcgaGEodC5iLDApLEtiKFdlLGRlKHQuYi5jLmxlbmd0aCkpLFNlPWVpKFdlLDApLEx0PXUodGkoU2UpLDE5KS5hLEtiKGNlLEgpLFl0PWVpKGNlLDApLEJ0PTA7Qy5iPEMuZC5nYygpOylDLmI9PUx0JiYocGk9bi5iLEJ0PVh0KHllKHRpKFl0KSkpLEx0PXUodGkoU2UpLDE5KS5hKSx3PShRbihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksQWllKHcsQnQpLEMuYj09THQmJihndD1NLXBpLW4uYyxfdD1GdSh3KSxTaWUodyxndCksUXJlKHcsKGd0LV90KS8yLDApKSxwaSs9RnUodykrZTtyZXR1cm4gbmV3ICRlKE0sem4pfWZ1bmN0aW9uIG01bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChlPXQuYyxvPW51bGwsZSl7Y2FzZSA2OnJldHVybiB0LlZsKCk7Y2FzZSAxMzpyZXR1cm4gdC5XbCgpO2Nhc2UgMjM6cmV0dXJuIHQuTmwoKTtjYXNlIDIyOnJldHVybiB0LlNsKCk7Y2FzZSAxODpyZXR1cm4gdC5QbCgpO2Nhc2UgODpmaSh0KSxvPShnaSgpLHhMdCk7YnJlYWs7Y2FzZSA5OnJldHVybiB0LnZsKCEwKTtjYXNlIDE5OnJldHVybiB0LndsKCk7Y2FzZSAxMDpzd2l0Y2godC5hKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpyZXR1cm4gbz10LnVsKHQuYSksZmkodCksbztjYXNlIDEwMTpjYXNlIDEwMjpjYXNlIDExMDpjYXNlIDExNDpjYXNlIDExNjpjYXNlIDExNzpjYXNlIDExODpjYXNlIDEyMDpuPXQudGwoKSxuPFlhP289KGdpKCksZ2koKSxuZXcgVmQoMCxuKSk6bz1UWXQocjN0KG4pKTticmVhaztjYXNlIDk5OnJldHVybiB0LkZsKCk7Y2FzZSA2NzpyZXR1cm4gdC5BbCgpO2Nhc2UgMTA1OnJldHVybiB0LklsKCk7Y2FzZSA3MzpyZXR1cm4gdC5CbCgpO2Nhc2UgMTAzOnJldHVybiB0LkdsKCk7Y2FzZSA4ODpyZXR1cm4gdC5DbCgpO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB0LnhsKCk7Y2FzZSA4MDpjYXNlIDExMjppZihvPW41dCh0LHQuYSksIW8pdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFFjdCkpKSk7YnJlYWs7ZGVmYXVsdDpvPUhLdCh0LmEpfWZpKHQpO2JyZWFrO2Nhc2UgMDppZih0LmE9PTkzfHx0LmE9PTEyM3x8dC5hPT0xMjUpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEM4dCkpKSk7bz1IS3QodC5hKSxyPXQuYSxmaSh0KSwociY2NDUxMik9PU9EJiZ0LmM9PTAmJih0LmEmNjQ1MTIpPT01NjMyMCYmKHM9UHQobWgsdmQsMjUsMiwxNSwxKSxzWzBdPXImbXMsc1sxXT10LmEmbXMsbz1SbnQoVFl0KEFoKHMsMCxzLmxlbmd0aCkpLDApLGZpKHQpKTticmVhaztkZWZhdWx0OnRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxDOHQpKSkpfXJldHVybiBvfWZ1bmN0aW9uIHk1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7aWYocj1uZXcgbGUscz12aSxvPXZpLGg9dmksbilmb3Iocz10LmYuYSxZPW5ldyBTKGUuaik7WS5hPFkuYy5jLmxlbmd0aDspZm9yKFY9dShKKFkpLDExKSx3PW5ldyBTKFYuZyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTcpLGQuYS5iIT0wJiYoQz11KGFudChkLmEpLDgpLEMuYTxzJiYobz1zLUMuYSxoPXZpLHIuYz1QdChYbixJZSwxLDAsNSwxKSxzPUMuYSksQy5hPD1zJiYoci5jW3IuYy5sZW5ndGhdPWQsZC5hLmI+MSYmKGg9Yi5NYXRoLm1pbihoLGIuTWF0aC5hYnModShRZihkLmEsMSksOCkuYi1DLmIpKSkpKTtlbHNlIGZvcihZPW5ldyBTKGUuaik7WS5hPFkuYy5jLmxlbmd0aDspZm9yKFY9dShKKFkpLDExKSx3PW5ldyBTKFYuZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTcpLGQuYS5iIT0wJiYoRj11KHZqKGQuYSksOCksRi5hPnMmJihvPUYuYS1zLGg9dmksci5jPVB0KFhuLEllLDEsMCw1LDEpLHM9Ri5hKSxGLmE+PXMmJihyLmNbci5jLmxlbmd0aF09ZCxkLmEuYj4xJiYoaD1iLk1hdGgubWluKGgsYi5NYXRoLmFicyh1KFFmKGQuYSxkLmEuYi0yKSw4KS5iLUYuYikpKSkpO2lmKHIuYy5sZW5ndGghPTAmJm8+ZS5vLmEvMiYmaD5lLm8uYi8yKXtmb3IoSD1uZXcgTWMsVW8oSCxlKSxGcyhILChiZSgpLE5uKSksSC5uLmE9ZS5vLmEvMixndD1uZXcgTWMsVW8oZ3QsZSksRnMoZ3QsbXIpLGd0Lm4uYT1lLm8uYS8yLGd0Lm4uYj1lLm8uYix3PW5ldyBTKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDE3KSxuPyhrPXUoa250KGQuYSksOCksdHQ9ZC5hLmI9PTA/VDEoZC5kKTp1KGFudChkLmEpLDgpLHR0LmI+PWsuYj9EYShkLGd0KTpEYShkLEgpKTooaz11KGZ0bihkLmEpLDgpLHR0PWQuYS5iPT0wP1QxKGQuYyk6dSh2aihkLmEpLDgpLHR0LmI+PWsuYj9zYShkLGd0KTpzYShkLEgpKSxNPXUoUShkLChUZSgpLF9vKSksNzQpLE0mJnJ5KE0saywhMCk7ZS5uLmE9cy1lLm8uYS8yfX1mdW5jdGlvbiB4NW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzLFhsLEtoO2lmKFJuPW51bGwsaHI9ZSx6bj1QWnQodCxJWnQobiksaHIpLHFDKHpuLE8wKGhyLENkKSkscGk9dSh0NCh0LmcsczYoRDAoaHIsamN0KSkpLDMzKSxGPUQwKGhyLCJzb3VyY2VQb3J0Iikscj1udWxsLEYmJihyPXM2KEYpKSxScz11KHQ0KHQuaixyKSwxMTgpLCFwaSl0aHJvdyBkPW9FKGhyKSxWPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnIitkLFk9VitWRSxydChuZXcgYWQoWSkpO2lmKFJzJiYhZmQoazEoUnMpLHBpKSl0aHJvdyB3PU8wKGhyLENkKSx0dD0iVGhlIHNvdXJjZSBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIrdyxndD10dCtWRSxydChuZXcgYWQoZ3QpKTtpZihXZT0oIXpuLmImJih6bi5iPW5ldyBDbihicix6biw0LDcpKSx6bi5iKSxvPW51bGwsUnM/bz1SczpvPXBpLE1yKFdlLG8pLFhsPXUodDQodC5nLHM2KEQwKGhyLEU4dCkpKSwzMyksSD1EMChociwidGFyZ2V0UG9ydCIpLHM9bnVsbCxIJiYocz1zNihIKSksS2g9dSh0NCh0LmoscyksMTE4KSwhWGwpdGhyb3cgTT1vRShociksTHQ9IkFuIGVkZ2UgbXVzdCBoYXZlIGEgdGFyZ2V0IG5vZGUgKGVkZ2UgaWQ6ICciK00sX3Q9THQrVkUscnQobmV3IGFkKF90KSk7aWYoS2gmJiFmZChrMShLaCksWGwpKXRocm93IGs9TzAoaHIsQ2QpLEJ0PSJUaGUgdGFyZ2V0IHBvcnQgb2YgYW4gZWRnZSBtdXN0IGJlIGEgcG9ydCBvZiB0aGUgZWRnZSdzIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitrLFl0PUJ0K1ZFLHJ0KG5ldyBhZChZdCkpO2lmKFFlPSghem4uYyYmKHpuLmM9bmV3IENuKGJyLHpuLDUsOCkpLHpuLmMpLGg9bnVsbCxLaD9oPUtoOmg9WGwsTXIoUWUsaCksKCF6bi5iJiYoem4uYj1uZXcgQ24oYnIsem4sNCw3KSksem4uYikuaT09MHx8KCF6bi5jJiYoem4uYz1uZXcgQ24oYnIsem4sNSw4KSksem4uYykuaT09MCl0aHJvdyBDPU8wKGhyLENkKSxjZT1TZGUrQyxTZT1jZStWRSxydChuZXcgYWQoU2UpKTtyZXR1cm4gSnooaHIsem4pLGhibihocix6biksUm49d2l0KHQsaHIsem4pLFJufWZ1bmN0aW9uIERoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm47cmV0dXJuIE09VG1uKGd1KHQsKGJlKCksRzEpKSxlKSxWPWg0KGd1KHQsU2YpLGUpLEJ0PWg0KGd1KHQsV2wpLGUpLFdlPVV6KGd1KHQscWgpLGUpLEY9VXooZ3UodCx2aCksZSksTHQ9aDQoZ3UodCxBZiksZSksWT1oNChndSh0LHRsKSxlKSxjZT1oNChndSh0LEtsKSxlKSxZdD1oNChndSh0LHdoKSxlKSxRZT1VeihndSh0LHV1KSxlKSxndD1oNChndSh0LF91KSxlKSxfdD1oNChndSh0LGVsKSxlKSxTZT1oNChndSh0LEN1KSxlKSxSbj1VeihndSh0LFN1KSxlKSxIPVV6KGd1KHQscXUpLGUpLHR0PWg0KGd1KHQsVWMpLGUpLG49cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW0x0LmEsV2UuYSxjZS5hLFJuLmFdKSkscj1yNChjdChvdChpYSwxKSx2bywyNSwxNSxbVi5hLE0uYSxCdC5hLHR0LmFdKSkscz1ndC5hLG89cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW1kuYSxGLmEsWXQuYSxILmFdKSksaz1yNChjdChvdChpYSwxKSx2bywyNSwxNSxbTHQuYixWLmIsWS5iLF90LmJdKSksdz1yNChjdChvdChpYSwxKSx2bywyNSwxNSxbV2UuYixNLmIsRi5iLHR0LmJdKSksQz1RZS5iLGQ9cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW2NlLmIsQnQuYixZdC5iLFNlLmJdKSksTWcoZ3UodCxHMSksbitzLGsrQyksTWcoZ3UodCxVYyksbitzLGsrQyksTWcoZ3UodCxTZiksbitzLDApLE1nKGd1KHQsV2wpLG4rcyxrK0MrdyksTWcoZ3UodCxxaCksMCxrK0MpLE1nKGd1KHQsdmgpLG4rcytyLGsrQyksTWcoZ3UodCx0bCksbitzK3IsMCksTWcoZ3UodCxLbCksMCxrK0MrdyksTWcoZ3UodCx3aCksbitzK3IsaytDK3cpLE1nKGd1KHQsdXUpLDAsayksTWcoZ3UodCxfdSksbiwwKSxNZyhndSh0LEN1KSwwLGsrQyt3KSxNZyhndSh0LHF1KSxuK3MrciwwKSxoPW5ldyBUYSxoLmE9cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW24rcitzK28sUWUuYSxfdC5hLFNlLmFdKSksaC5iPXI0KGN0KG90KGlhLDEpLHZvLDI1LDE1LFtrK3crQytkLGd0LmIsUm4uYixILmJdKSksaH1mdW5jdGlvbiBrNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihZPW5ldyBsZSxGPW5ldyBTKHQuZC5iKTtGLmE8Ri5jLmMubGVuZ3RoOylmb3IoTT11KEooRiksMjkpLFY9bmV3IFMoTS5hKTtWLmE8Vi5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKFYpLDEwKSxzPXUoSm4odC5mLEgpLDU3KSx3PW5ldyBhcihscihNcyhIKS5hLktjKCksbmV3IHopKTt6cih3KTspaWYoaD11KExyKHcpLDE3KSxyPWVpKGguYSwwKSxrPSEwLEM9bnVsbCxyLmIhPXIuZC5jKXtmb3IoZT11KHRpKHIpLDgpLG49bnVsbCxoLmMuaj09KGJlKCksTm4pJiYodHQ9bmV3IHhfKGUsbmV3ICRlKGUuYSxzLmQuZCkscyxoKSx0dC5mLmE9ITAsdHQuYT1oLmMsWS5jW1kuYy5sZW5ndGhdPXR0KSxoLmMuaj09bXImJih0dD1uZXcgeF8oZSxuZXcgJGUoZS5hLHMuZC5kK3MuZC5hKSxzLGgpLHR0LmYuZD0hMCx0dC5hPWguYyxZLmNbWS5jLmxlbmd0aF09dHQpO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxqbXQoZS5iLG4uYil8fChDPW5ldyB4XyhlLG4sbnVsbCxoKSxZLmNbWS5jLmxlbmd0aF09QyxrJiYoaz0hMSxuLmI8cy5kLmQ/Qy5mLmE9ITA6bi5iPnMuZC5kK3MuZC5hP0MuZi5kPSEwOihDLmYuZD0hMCxDLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYoZT1uKTtDJiYobz11KEpuKHQuZixoLmQuaSksNTcpLGUuYjxvLmQuZD9DLmYuYT0hMDplLmI+by5kLmQrby5kLmE/Qy5mLmQ9ITA6KEMuZi5kPSEwLEMuZi5hPSEwKSl9Zm9yKGQ9bmV3IGFyKGxyKGpvKEgpLmEuS2MoKSxuZXcgeikpO3pyKGQpOyloPXUoTHIoZCksMTcpLGguYS5iIT0wJiYoZT11KHZqKGguYSksOCksaC5kLmo9PShiZSgpLE5uKSYmKHR0PW5ldyB4XyhlLG5ldyAkZShlLmEscy5kLmQpLHMsaCksdHQuZi5hPSEwLHR0LmE9aC5kLFkuY1tZLmMubGVuZ3RoXT10dCksaC5kLmo9PW1yJiYodHQ9bmV3IHhfKGUsbmV3ICRlKGUuYSxzLmQuZCtzLmQuYSkscyxoKSx0dC5mLmQ9ITAsdHQuYT1oLmQsWS5jW1kuYy5sZW5ndGhdPXR0KSl9cmV0dXJuIFl9ZnVuY3Rpb24gRTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07aWYod3IobiwiTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50IiwxKSx0LmU9ZSx0Lm49dShRKGUsKHNlKCksWTQpKSwzMDQpLCR5bih0KSx5ZG4odCksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IGZRKSxuZXcgQyR0KHQpKSx1cyhSaShXbyhSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgR1QpLG5ldyBrUSksbmV3IEVRKSxuZXcgVFEpLG5ldyBUJHQodCkpLGplKFJlKFEodC5lLChUZSgpLFRTKSkpKSYmKGg9UmMobiwxKSx3cihoLCJTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZyIsMSksczRuKHQpLG9yKGgpKSxlZm4odC5mKSxvPXUoUShlLFNTKSwxOSkuYSp0LmYuYS5jLmxlbmd0aCxjYXQoSnB0KHRidChtbnQodC5mKSxvKSwhMSksUmMobiwxKSksdC5kLmEuZ2MoKSE9MCl7Zm9yKGg9UmMobiwxKSx3cihoLCJGbGV4aWJsZSBXaGVyZSBTcGFjZSBQcm9jZXNzaW5nIiwxKSxkPXUoT3YoSGoocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IGRRKSxuZXcgYVEpKSwxOSkuYSx3PXUoT3YocWoocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IGdRKSxuZXcgb1EpKSwxOSkuYSxrPXctZCxDPUR2KG5ldyBVYix0LmYpLE09RHYobmV3IFViLHQuZiksdmYob2YoYWYoc2YoY2YobmV3IEVoLDJlNCksayksQyksTSkpLHVzKFJpKFJpKCRudCh0LmkpLG5ldyBwUSksbmV3IGJRKSxuZXcga1h0KGQsQyxrLE0pKSxzPXQuZC5hLmVjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMjEzKSxyLmc9MTtjYXQoSnB0KHRidChtbnQodC5mKSxvKSwhMSksUmMoaCwxKSksb3IoaCl9amUoUmUoUShlLFRTKSkpJiYoaD1SYyhuLDEpLHdyKGgsIlN0cmFpZ2h0IEVkZ2VzIFBvc3QtUHJvY2Vzc2luZyIsMSksbGduKHQpLG9yKGgpKSxIM24odCksdC5lPW51bGwsdC5mPW51bGwsdC5pPW51bGwsdC5jPW51bGwsWXUodC5rKSx0Lmo9bnVsbCx0LmE9bnVsbCx0Lm89bnVsbCx0LmQuYS4kYigpLG9yKG4pfWZ1bmN0aW9uIFQ1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQ7Zm9yKGQ9bmV3IFModC5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihvPXUoSihkKSwyOSksX3Q9bmV3IFMoby5hKTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTApLGUuZ1tMdC5wXT1MdCxlLmFbTHQucF09THQsZS5kW0x0LnBdPTA7Zm9yKHc9dC5hLmIsZS5jPT0oZGQoKSxLZykmJih3PUV0KHcsMTUyKT9WeCh1KHcsMTUyKSk6RXQodywxMzEpP3UodywxMzEpLmE6RXQodyw1NCk/bmV3IG12KHcpOm5ldyBNbSh3KSksaD13LktjKCk7aC5PYigpOylmb3Iobz11KGguUGIoKSwyOSksSD0tMSxGPW8uYSxlLm89PShFMSgpLHoxKSYmKEg9dmksRj1FdChGLDE1Mik/VngodShGLDE1MikpOkV0KEYsMTMxKT91KEYsMTMxKS5hOkV0KEYsNTQpP25ldyBtdihGKTpuZXcgTW0oRikpLFl0PUYuS2MoKTtZdC5PYigpOylpZihCdD11KFl0LlBiKCksMTApLE09bnVsbCxlLmM9PUtnP009dShGZSh0LmIuZixCdC5wKSwxNSk6TT11KEZlKHQuYi5iLEJ0LnApLDE1KSxNLmdjKCk+MClpZihyPU0uZ2MoKSxrPXBzKGIuTWF0aC5mbG9vcigocisxKS8yKSktMSxzPXBzKGIuTWF0aC5jZWlsKChyKzEpLzIpKS0xLGUubz09ejEpZm9yKEM9cztDPj1rO0MtLSllLmFbQnQucF09PUJ0JiYoWT11KE0uWGIoQyksNDYpLFY9dShZLmEsMTApLCFTMChuLFkuYikmJkg+dC5iLmVbVi5wXSYmKGUuYVtWLnBdPUJ0LGUuZ1tCdC5wXT1lLmdbVi5wXSxlLmFbQnQucF09ZS5nW0J0LnBdLGUuZltlLmdbQnQucF0ucF09KEZuKCksISEoamUoZS5mW2UuZ1tCdC5wXS5wXSkmQnQuaz09KEduKCksWnMpKSksSD10LmIuZVtWLnBdKSk7ZWxzZSBmb3IoQz1rO0M8PXM7QysrKWUuYVtCdC5wXT09QnQmJihndD11KE0uWGIoQyksNDYpLHR0PXUoZ3QuYSwxMCksIVMwKG4sZ3QuYikmJkg8dC5iLmVbdHQucF0mJihlLmFbdHQucF09QnQsZS5nW0J0LnBdPWUuZ1t0dC5wXSxlLmFbQnQucF09ZS5nW0J0LnBdLGUuZltlLmdbQnQucF0ucF09KEZuKCksISEoamUoZS5mW2UuZ1tCdC5wXS5wXSkmQnQuaz09KEduKCksWnMpKSksSD10LmIuZVt0dC5wXSkpfWZ1bmN0aW9uIFpjKCl7WmM9WixkSHQoKSxPNGU9dGEuYSx1KFN0KFd0KHRhLmEpLDApLDE4KSxJNGU9dGEuZix1KFN0KFd0KHRhLmYpLDApLDE4KSx1KFN0KFd0KHRhLmYpLDEpLDM0KSxENGU9dGEubix1KFN0KFd0KHRhLm4pLDApLDM0KSx1KFN0KFd0KHRhLm4pLDEpLDM0KSx1KFN0KFd0KHRhLm4pLDIpLDM0KSx1KFN0KFd0KHRhLm4pLDMpLDM0KSxSQXQ9dGEuZyx1KFN0KFd0KHRhLmcpLDApLDE4KSx1KFN0KFd0KHRhLmcpLDEpLDM0KSxNNGU9dGEuYyx1KFN0KFd0KHRhLmMpLDApLDE4KSx1KFN0KFd0KHRhLmMpLDEpLDE4KSxqQXQ9dGEuaSx1KFN0KFd0KHRhLmkpLDApLDE4KSx1KFN0KFd0KHRhLmkpLDEpLDE4KSx1KFN0KFd0KHRhLmkpLDIpLDE4KSx1KFN0KFd0KHRhLmkpLDMpLDE4KSx1KFN0KFd0KHRhLmkpLDQpLDM0KSwkQXQ9dGEuaix1KFN0KFd0KHRhLmopLDApLDE4KSxCQXQ9dGEuZCx1KFN0KFd0KHRhLmQpLDApLDE4KSx1KFN0KFd0KHRhLmQpLDEpLDE4KSx1KFN0KFd0KHRhLmQpLDIpLDE4KSx1KFN0KFd0KHRhLmQpLDMpLDE4KSx1KFN0KFd0KHRhLmQpLDQpLDM0KSx1KFN0KFd0KHRhLmQpLDUpLDM0KSx1KFN0KFd0KHRhLmQpLDYpLDM0KSx1KFN0KFd0KHRhLmQpLDcpLDM0KSxMNGU9dGEuYix1KFN0KFd0KHRhLmIpLDApLDM0KSx1KFN0KFd0KHRhLmIpLDEpLDM0KSxZVj10YS5lLHUoU3QoV3QodGEuZSksMCksMzQpLHUoU3QoV3QodGEuZSksMSksMzQpLHUoU3QoV3QodGEuZSksMiksMzQpLHUoU3QoV3QodGEuZSksMyksMzQpLHUoU3QoV3QodGEuZSksNCksMTgpLHUoU3QoV3QodGEuZSksNSksMTgpLHUoU3QoV3QodGEuZSksNiksMTgpLHUoU3QoV3QodGEuZSksNyksMTgpLHUoU3QoV3QodGEuZSksOCksMTgpLHUoU3QoV3QodGEuZSksOSksMTgpLHUoU3QoV3QodGEuZSksMTApLDM0KSxFYj10YS5rLHUoU3QoV3QodGEuayksMCksMzQpLHUoU3QoV3QodGEuayksMSksMzQpfWZ1bmN0aW9uIEM1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem47Zm9yKFFlPW5ldyBRaSxjZT1uZXcgUWksdHQ9LTEsdz1uZXcgUyh0KTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHcpLDEyOCksaC5zPXR0LS0sQz0wLF90PTAsbz1uZXcgUyhoLnQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDI2OCksX3QrPXIuYztmb3Iocz1uZXcgUyhoLmkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI2OCksQys9ci5jO2gubj1DLGgudT1fdCxfdD09MD9ocyhjZSxoLGNlLmMuYixjZS5jKTpDPT0wJiZocyhRZSxoLFFlLmMuYixRZS5jKX1mb3Ioem49RSQodCksTT10LmMubGVuZ3RoLFk9TSsxLGd0PU0tMSxIPW5ldyBsZTt6bi5hLmdjKCkhPTA7KXtmb3IoO2NlLmIhPTA7KVl0PShRbihjZS5iIT0wKSx1KGNoKGNlLGNlLmEuYSksMTI4KSksem4uYS5CYyhZdCkhPW51bGwsWXQucz1ndC0tLHg1dChZdCxRZSxjZSk7Zm9yKDtRZS5iIT0wOylTZT0oUW4oUWUuYiE9MCksdShjaChRZSxRZS5hLmEpLDEyOCkpLHpuLmEuQmMoU2UpIT1udWxsLFNlLnM9WSsrLHg1dChTZSxRZSxjZSk7Zm9yKFY9X2Esaz16bi5hLmVjKCkuS2MoKTtrLk9iKCk7KWg9dShrLlBiKCksMTI4KSxMdD1oLnUtaC5uLEx0Pj1WJiYoTHQ+ViYmKEguYz1QdChYbixJZSwxLDAsNSwxKSxWPUx0KSxILmNbSC5jLmxlbmd0aF09aCk7SC5jLmxlbmd0aCE9MCYmKEY9dShGZShILHp6KGUsSC5jLmxlbmd0aCkpLDEyOCksem4uYS5CYyhGKSE9bnVsbCxGLnM9WSsrLHg1dChGLFFlLGNlKSxILmM9UHQoWG4sSWUsMSwwLDUsMSkpfWZvcihCdD10LmMubGVuZ3RoKzEsZD1uZXcgUyh0KTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMjgpLGguczxNJiYoaC5zKz1CdCk7Zm9yKFdlPW5ldyBTKHQpO1dlLmE8V2UuYy5jLmxlbmd0aDspZm9yKFNlPXUoSihXZSksMTI4KSxuPW5ldyBoYShTZS50LDApO24uYjxuLmQuZ2MoKTspcj0oUW4obi5iPG4uZC5nYygpKSx1KG4uZC5YYihuLmM9bi5iKyspLDI2OCkpLFJuPXIuYixTZS5zPlJuLnMmJihFbChuKSx2dShSbi5pLHIpLHIuYz4wJiYoci5hPVJuLHVlKFJuLnQsciksci5iPVNlLHVlKFNlLmkscikpKX1mdW5jdGlvbiBDeHQodCl7dmFyIGUsbixyLHMsbztzd2l0Y2goZT10LmMsZSl7Y2FzZSAxMTpyZXR1cm4gdC5NbCgpO2Nhc2UgMTI6cmV0dXJuIHQuT2woKTtjYXNlIDE0OnJldHVybiB0LlFsKCk7Y2FzZSAxNTpyZXR1cm4gdC5UbCgpO2Nhc2UgMTY6cmV0dXJuIHQuUmwoKTtjYXNlIDE3OnJldHVybiB0LlVsKCk7Y2FzZSAyMTpyZXR1cm4gZmkodCksZ2koKSxnaSgpLGZBO2Nhc2UgMTA6c3dpdGNoKHQuYSl7Y2FzZSA2NTpyZXR1cm4gdC55bCgpO2Nhc2UgOTA6cmV0dXJuIHQuRGwoKTtjYXNlIDEyMjpyZXR1cm4gdC5LbCgpO2Nhc2UgOTg6cmV0dXJuIHQuRWwoKTtjYXNlIDY2OnJldHVybiB0LnpsKCk7Y2FzZSA2MDpyZXR1cm4gdC5KbCgpO2Nhc2UgNjI6cmV0dXJuIHQuSGwoKX19c3dpdGNoKG89bTVuKHQpLGU9dC5jLGUpe2Nhc2UgMzpyZXR1cm4gdC5abChvKTtjYXNlIDQ6cmV0dXJuIHQuWGwobyk7Y2FzZSA1OnJldHVybiB0LllsKG8pO2Nhc2UgMDppZih0LmE9PTEyMyYmdC5kPHQuail7aWYocz10LmQscj0wLG49LTEsKGU9YmEodC5pLHMrKykpPj00OCYmZTw9NTcpe2ZvcihyPWUtNDg7czx0LmomJihlPWJhKHQuaSxzKyspKT49NDgmJmU8PTU3OylpZihyPXIqMTArZS00OCxyPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEw4dCkpKSl9ZWxzZSB0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZTBlKSkpKTtpZihuPXIsZT09NDQpe2lmKHM+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCkscjBlKSkpKTtpZigoZT1iYSh0LmkscysrKSk+PTQ4JiZlPD01Nyl7Zm9yKG49ZS00ODtzPHQuaiYmKGU9YmEodC5pLHMrKykpPj00OCYmZTw9NTc7KWlmKG49bioxMCtlLTQ4LG48MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksTDh0KSkpKTtpZihyPm4pdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGkwZSkpKSl9ZWxzZSBuPS0xfWlmKGUhPTEyNSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksbjBlKSkpKTt0LnNsKHMpPyhvPShnaSgpLGdpKCksbmV3IFdtKDksbykpLHQuZD1zKzEpOihvPShnaSgpLGdpKCksbmV3IFdtKDMsbykpLHQuZD1zKSxvLmRtKHIpLG8uY20obiksZmkodCl9fXJldHVybiBvfWZ1bmN0aW9uIE9oZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem47Zm9yKFk9bmV3IFljKGUuYiksQnQ9bmV3IFljKGUuYiksRj1uZXcgWWMoZS5iKSxXZT1uZXcgWWMoZS5iKSx0dD1uZXcgWWMoZS5iKSxTZT1laShlLDApO1NlLmIhPVNlLmQuYzspZm9yKFl0PXUodGkoU2UpLDExKSxkPW5ldyBTKFl0LmcpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKG89dShKKGQpLDE3KSxvLmMuaT09by5kLmkpe2lmKFl0Lmo9PW8uZC5qKXtXZS5jW1dlLmMubGVuZ3RoXT1vO2NvbnRpbnVlfWVsc2UgaWYoWXQuaj09KGJlKCksTm4pJiZvLmQuaj09bXIpe3R0LmNbdHQuYy5sZW5ndGhdPW87Y29udGludWV9fWZvcih3PW5ldyBTKHR0KTt3LmE8dy5jLmMubGVuZ3RoOylvPXUoSih3KSwxNyksYW1uKHQsbyxuLHIsKGJlKCksSG4pKTtmb3IoaD1uZXcgUyhXZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLFFlPW5ldyBIMCh0KSxfMChRZSwoR24oKSxIYykpLEp0KFFlLChUZSgpLG9zKSwob2EoKSxWYykpLEp0KFFlLChzZSgpLF9pKSxvKSxSbj1uZXcgTWMsSnQoUm4sX2ksby5kKSxGcyhSbiwoYmUoKSxCbikpLFVvKFJuLFFlKSx6bj1uZXcgTWMsSnQoem4sX2ksby5jKSxGcyh6bixIbiksVW8oem4sUWUpLEp0KG8uYyxadSxRZSksSnQoby5kLFp1LFFlKSxEYShvLG51bGwpLHNhKG8sbnVsbCksbi5jW24uYy5sZW5ndGhdPVFlLEp0KFFlLHFHLGRlKDIpKTtmb3IoY2U9ZWkoZSwwKTtjZS5iIT1jZS5kLmM7KVl0PXUodGkoY2UpLDExKSxrPVl0LmUuYy5sZW5ndGg+MCxndD1ZdC5nLmMubGVuZ3RoPjAsayYmZ3Q/Ri5jW0YuYy5sZW5ndGhdPVl0Oms/WS5jW1kuYy5sZW5ndGhdPVl0Omd0JiYoQnQuY1tCdC5jLmxlbmd0aF09WXQpO2ZvcihWPW5ldyBTKFkpO1YuYTxWLmMuYy5sZW5ndGg7KUg9dShKKFYpLDExKSx1ZShzLG94dCh0LEgsbnVsbCxuKSk7Zm9yKF90PW5ldyBTKEJ0KTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTEpLHVlKHMsb3h0KHQsbnVsbCxMdCxuKSk7Zm9yKE09bmV3IFMoRik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLHVlKHMsb3h0KHQsQyxDLG4pKX1mdW5jdGlvbiBOaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuO2ZvcihMdD1uZXcgJGUoc3Msc3MpLGU9bmV3ICRlKFRzLFRzKSxXZT1uZXcgUyh0KTtXZS5hPFdlLmMuYy5sZW5ndGg7KVNlPXUoSihXZSksOCksTHQuYT1iLk1hdGgubWluKEx0LmEsU2UuYSksTHQuYj1iLk1hdGgubWluKEx0LmIsU2UuYiksZS5hPWIuTWF0aC5tYXgoZS5hLFNlLmEpLGUuYj1iLk1hdGgubWF4KGUuYixTZS5iKTtmb3IoRj1uZXcgJGUoZS5hLUx0LmEsZS5iLUx0LmIpLGs9bmV3ICRlKEx0LmEtNTAsTHQuYi1GLmEtNTApLEM9bmV3ICRlKEx0LmEtNTAsZS5iK0YuYSs1MCksTT1uZXcgJGUoZS5hK0YuYi8yKzUwLEx0LmIrRi5iLzIpLEg9bmV3IGl4dChrLEMsTSksY2U9bmV3IHFzLG89bmV3IGxlLG49bmV3IGxlLGNlLmEuemMoSCxjZSksUm49bmV3IFModCk7Um4uYTxSbi5jLmMubGVuZ3RoOyl7Zm9yKFFlPXUoSihSbiksOCksby5jPVB0KFhuLEllLDEsMCw1LDEpLFl0PWNlLmEuZWMoKS5LYygpO1l0Lk9iKCk7KV90PXUoWXQuUGIoKSwzMDgpLHI9X3QuZCxIcChyLF90LmEpLHJ3KEhwKF90LmQsUWUpLEhwKF90LmQsX3QuYSkpPDAmJihvLmNbby5jLmxlbmd0aF09X3QpO2ZvcihuLmM9UHQoWG4sSWUsMSwwLDUsMSksQnQ9bmV3IFMobyk7QnQuYTxCdC5jLmMubGVuZ3RoOylmb3IoX3Q9dShKKEJ0KSwzMDgpLHR0PW5ldyBTKF90LmUpO3R0LmE8dHQuYy5jLmxlbmd0aDspe2ZvcihWPXUoSih0dCksMTY4KSxoPSEwLHc9bmV3IFMobyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMzA4KSxkIT1fdCYmKFBjKFYsRmUoZC5lLDApKXx8UGMoVixGZShkLmUsMSkpfHxQYyhWLEZlKGQuZSwyKSkpJiYoaD0hMSk7aCYmKG4uY1tuLmMubGVuZ3RoXT1WKX1mb3IocGFlKGNlLG8pLHZhKGNlLG5ldyBMYSksWT1uZXcgUyhuKTtZLmE8WS5jLmMubGVuZ3RoOylWPXUoSihZKSwxNjgpLE5zKGNlLG5ldyBpeHQoUWUsVi5hLFYuYikpfWZvcihndD1uZXcgcXMsdmEoY2UsbmV3IFNuKGd0KSkscz1ndC5hLmVjKCkuS2MoKTtzLk9iKCk7KVY9dShzLlBiKCksMTY4KSwoQiQoSCxWLmEpfHxCJChILFYuYikpJiZzLlFiKCk7cmV0dXJuIHZhKGd0LG5ldyBHcyksZ3R9ZnVuY3Rpb24gXzVuKHQpe3ZhciBlLG4scixzLG87c3dpdGNoKG49dShRKHQsKHNlKCksR2MpKSwyMSksZT1paih2YmUpLHM9dShRKHQsKFRlKCksankpKSwzMzQpLHM9PSgkMCgpLFpnKSYmUmwoZSx3YmUpLGplKFJlKFEodCxZbHQpKSk/YmkoZSwoV2EoKSxBZCksKHJvKCksaWx0KSk6YmkoZSwoV2EoKSxvdSksKHJvKCksaWx0KSksUSh0LChMJCgpLEdTKSkhPW51bGwmJlJsKGUsbWJlKSwoamUoUmUoUSh0LFk5dCkpKXx8amUoUmUoUSh0LFY5dCkpKSkmJkt1KGUsKFdhKCksSW8pLChybygpLEc3dCkpLHUoUSh0LFZsKSwxMDMpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0Okt1KGJpKGUsKFdhKCksQWQpLChybygpLFU3dCkpLElvLFY3dCl9c3dpdGNoKG4uSGMoKG9vKCksUkcpKSYmS3UoYmkoYmkoZSwoV2EoKSxBZCksKHJvKCksSDd0KSkscWMsejd0KSxJbyxxN3QpLEd0KFEodCxYbHQpKSE9PUd0KCh3NCgpLGhWKSkmJmJpKGUsKFdhKCksb3UpLChybygpLG9UdCkpLG4uSGMoJEcpJiYoYmkoZSwoV2EoKSxBZCksKHJvKCksaFR0KSksYmkoZSxsYix1VHQpLGJpKGUsb3UsbFR0KSksR3QoUSh0LEtHKSkhPT1HdCgoZ0UoKSxiUykpJiZHdChRKHQsWDApKSE9PUd0KChxMCgpLFhPKSkmJkt1KGUsKFdhKCksSW8pLChybygpLGVUdCkpLGplKFJlKFEodCxXOXQpKSkmJmJpKGUsKFdhKCksb3UpLChybygpLHRUdCkpLGplKFJlKFEodCxWbHQpKSkmJmJpKGUsKFdhKCksb3UpLChybygpLGZUdCkpLHIybih0KSYmKEd0KFEodCxqeSkpPT09R3QoWmcpP3I9dShRKHQsX08pLDI5Mik6cj11KFEodCxHbHQpLDI5Miksbz1yPT0oVzgoKSxMbHQpPyhybygpLGNUdCk6KHJvKCkscFR0KSxiaShlLChXYSgpLHFjKSxvKSksdShRKHQseEN0KSwzNzcpLmcpe2Nhc2UgMTpiaShlLChXYSgpLHFjKSwocm8oKSxkVHQpKTticmVhaztjYXNlIDI6S3UoYmkoYmkoZSwoV2EoKSxvdSksKHJvKCksQjd0KSkscWMsUjd0KSxJbyxqN3QpfXJldHVybiBHdChRKHQsZGIpKSE9PUd0KChqMCgpLGdiKSkmJmJpKGUsKFdhKCksb3UpLChybygpLGdUdCkpLGV9ZnVuY3Rpb24gUGhlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyxEaCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyBhWikpKSx4ZSh0LERoLGI2LDEuMykseGUodCxEaCxnSCxEZShSX3QpKSx4ZSh0LERoLHd3LFZfdCkseGUodCxEaCxreSwxNSkseGUodCxEaCxjSCxEZShLeWUpKSx4ZSh0LERoLEw0LERlKFF5ZSkpLHhlKHQsRGgsdzYsRGUoWnllKSkseGUodCxEaCx2NixEZShKeWUpKSx4ZSh0LERoLFJFLERlKFh5ZSkpLHhlKHQsRGgsRl8sRGUocV90KSkseGUodCxEaCxqRSxEZShlM2UpKSx4ZSh0LERoLFdrdCxEZShHX3QpKSx4ZSh0LERoLEtrdCxEZSh6X3QpKSx4ZSh0LERoLFFrdCxEZShIX3QpKSx4ZSh0LERoLFprdCxEZShVX3QpKSx4ZSh0LERoLENjdCxEZShqX3QpKSx4ZSh0LERoLCRELERlKCRfdCkpLHhlKHQsRGgscGN0LERlKFl5ZSkpLHhlKHQsRGgsWGt0LERlKFJPKSkseGUodCxEaCxZa3QsRGUoQl90KSkseGUodCxEaCxKa3QsRGUoV190KSl9ZnVuY3Rpb24gcHcodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYodC5hIT1lLkFqKCkpdGhyb3cgcnQobmV3IFBuKEhFK2UubmUoKStrdykpO2lmKEV0KGUsNDU3KSl7aWYodHQ9T3ZuKHUoZSw2NzEpLG4pLCF0dCl0aHJvdyBydChuZXcgUG4oQmN0K24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIitlLm5lKCkrIiciKSk7cmV0dXJuIHR0fXN3aXRjaChPZygoUnUoKSxtYSksZSkuY2woKSl7Y2FzZSAyOntuPSRjKG4sITEpO2JyZWFrfWNhc2UgMzp7bj0kYyhuLCEwKTticmVha319aWYocj1PZyhtYSxlKS4kaygpLHIpcmV0dXJuIHIuQWooKS5OaCgpLktoKHIsbik7aWYoRj1PZyhtYSxlKS5hbCgpLEYpe2Zvcih0dD1uZXcgbGUsaz1raXQobiksQz0wLE09ay5sZW5ndGg7QzxNOysrQyl3PWtbQ10sdWUodHQsRi5BaigpLk5oKCkuS2goRix3KSk7cmV0dXJuIHR0fWlmKFk9T2cobWEsZSkuYmwoKSwhWS5kYygpKXtmb3IoVj1ZLktjKCk7Vi5PYigpOyl7SD11KFYuUGIoKSwxNDgpO3RyeXtpZih0dD1ILkFqKCkuTmgoKS5LaChILG4pLHR0IT1udWxsKXJldHVybiB0dH1jYXRjaChndCl7aWYoZ3Q9V2koZ3QpLCFFdChndCw2MCkpdGhyb3cgcnQoZ3QpfX10aHJvdyBydChuZXcgUG4oQmN0K24rIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJyIrZS5uZSgpKyInIikpfWlmKHUoZSw4MzQpLkZqKCkscz1EdW4oZS5CaigpKSwhcylyZXR1cm4gbnVsbDtpZihzPT1hUyl7aD0wO3RyeXtoPSRsKG4sX2EsdmkpJm1zfWNhdGNoKGd0KXtpZihndD1XaShndCksRXQoZ3QsMTI3KSlvPVIkKG4pLGg9b1swXTtlbHNlIHRocm93IHJ0KGd0KX1yZXR1cm4gREkoaCl9aWYocz09SEgpe2ZvcihkPTA7ZDxyQS5sZW5ndGg7KytkKXRyeXtyZXR1cm4gVEd0KHJBW2RdLG4pfWNhdGNoKGd0KXtpZihndD1XaShndCksIUV0KGd0LDMyKSl0aHJvdyBydChndCl9dGhyb3cgcnQobmV3IFBuKEJjdCtuKyInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2YiKSl9dGhyb3cgcnQobmV3IFBuKEJjdCtuKyInIGlzIGludmFsaWQuICIpKX1mdW5jdGlvbiBTNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2lmKG49MCxoPTAsbz1lLmxlbmd0aCxkPW51bGwsaz1uZXcgTG0saDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT00MykmJigrK2gsKytuLGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09NDN8fChScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ1KSkpKXRocm93IHJ0KG5ldyBvZCh2dytlKyciJykpO2Zvcig7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT00NikmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTEwMSkmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTY5KTspKytoO2lmKGsuYSs9IiIrRGwoZT09bnVsbD9UdTooT24oZSksZSksbixoKSxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ2KSl7Zm9yKCsraCxuPWg7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT0xMDEpJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT02OSk7KSsraDt0LmU9aC1uLGsuYSs9IiIrRGwoZT09bnVsbD9UdTooT24oZSksZSksbixoKX1lbHNlIHQuZT0wO2lmKGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09MTAxfHwoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT02OSkpJiYoKytoLG49aCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQzKSYmKCsraCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTQ1KSYmKytuKSxkPWUuc3Vic3RyKG4sby1uKSx0LmU9dC5lLSRsKGQsX2EsdmkpLHQuZSE9cHModC5lKSkpdGhyb3cgcnQobmV3IG9kKCJTY2FsZSBvdXQgb2YgcmFuZ2UuIikpO2lmKHc9ay5hLHcubGVuZ3RoPDE2KXtpZih0LmY9KHZFdD09bnVsbCYmKHZFdD1uZXcgUmVnRXhwKCJeWystXT9cXGQqJCIsImkiKSksdkV0LnRlc3Qodyk/cGFyc2VJbnQodywxMCk6TmFOKSxpc05hTih0LmYpKXRocm93IHJ0KG5ldyBvZCh2dytlKyciJykpO3QuYT1aNHQodC5mKX1lbHNlIEtsbih0LG5ldyBOcCh3KSk7Zm9yKHQuZD1rLmEubGVuZ3RoLHM9MDtzPGsuYS5sZW5ndGgmJihyPWJhKGsuYSxzKSwhKHIhPTQ1JiZyIT00OCkpOysrcyktLXQuZDt0LmQ9PTAmJih0LmQ9MSl9ZnVuY3Rpb24gSWF0KCl7SWF0PVosTmk9bmV3IEh2LGxuKE5pLChiZSgpLEcxKSxVYyksbG4oTmkscWgsVWMpLGxuKE5pLHFoLFN1KSxsbihOaSx2aCxxdSksbG4oTmksdmgsVWMpLGxuKE5pLFNmLFVjKSxsbihOaSxTZixlbCksbG4oTmksV2wsQ3UpLGxuKE5pLFdsLFVjKSxsbihOaSxfdSx1dSksbG4oTmksX3UsVWMpLGxuKE5pLF91LGVsKSxsbihOaSxfdSxDdSksbG4oTmksdXUsX3UpLGxuKE5pLHV1LFN1KSxsbihOaSx1dSxxdSksbG4oTmksdXUsVWMpLGxuKE5pLEFmLEFmKSxsbihOaSxBZixlbCksbG4oTmksQWYsU3UpLGxuKE5pLHRsLHRsKSxsbihOaSx0bCxlbCksbG4oTmksdGwscXUpLGxuKE5pLEtsLEtsKSxsbihOaSxLbCxDdSksbG4oTmksS2wsU3UpLGxuKE5pLHdoLHdoKSxsbihOaSx3aCxDdSksbG4oTmksd2gscXUpLGxuKE5pLGVsLFNmKSxsbihOaSxlbCxfdSksbG4oTmksZWwsQWYpLGxuKE5pLGVsLHRsKSxsbihOaSxlbCxVYyksbG4oTmksZWwsZWwpLGxuKE5pLGVsLFN1KSxsbihOaSxlbCxxdSksbG4oTmksQ3UsV2wpLGxuKE5pLEN1LF91KSxsbihOaSxDdSxLbCksbG4oTmksQ3Usd2gpLGxuKE5pLEN1LEN1KSxsbihOaSxDdSxTdSksbG4oTmksQ3UscXUpLGxuKE5pLEN1LFVjKSxsbihOaSxTdSxxaCksbG4oTmksU3UsdXUpLGxuKE5pLFN1LEFmKSxsbihOaSxTdSxLbCksbG4oTmksU3UsZWwpLGxuKE5pLFN1LEN1KSxsbihOaSxTdSxTdSksbG4oTmksU3UsVWMpLGxuKE5pLHF1LHZoKSxsbihOaSxxdSx1dSksbG4oTmkscXUsdGwpLGxuKE5pLHF1LHdoKSxsbihOaSxxdSxlbCksbG4oTmkscXUsQ3UpLGxuKE5pLHF1LHF1KSxsbihOaSxxdSxVYyksbG4oTmksVWMsRzEpLGxuKE5pLFVjLHFoKSxsbihOaSxVYyx2aCksbG4oTmksVWMsU2YpLGxuKE5pLFVjLFdsKSxsbihOaSxVYyxfdSksbG4oTmksVWMsdXUpLGxuKE5pLFVjLGVsKSxsbihOaSxVYyxDdSksbG4oTmksVWMsU3UpLGxuKE5pLFVjLHF1KSxsbihOaSxVYyxVYyl9ZnVuY3Rpb24gX3h0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZTtmb3IodC5kPW5ldyAkZShzcyxzcyksdC5jPW5ldyAkZShUcyxUcyksRj1lLktjKCk7Ri5PYigpOylmb3IoQz11KEYuUGIoKSwzNyksX3Q9bmV3IFMoQy5hKTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTApLHQuZC5hPWIuTWF0aC5taW4odC5kLmEsTHQubi5hLUx0LmQuYiksdC5kLmI9Yi5NYXRoLm1pbih0LmQuYixMdC5uLmItTHQuZC5kKSx0LmMuYT1iLk1hdGgubWF4KHQuYy5hLEx0Lm4uYStMdC5vLmErTHQuZC5jKSx0LmMuYj1iLk1hdGgubWF4KHQuYy5iLEx0Lm4uYitMdC5vLmIrTHQuZC5hKTtmb3IoZD1uZXcgSnp0LE09ZS5LYygpO00uT2IoKTspQz11KE0uUGIoKSwzNykscj1sNW4odCxDKSx1ZShkLmEsciksci5hPXIuYXwhdShRKHIuYywoc2UoKSxOeSkpLDIxKS5kYygpO2Zvcih0LmI9KElpdCgpLFdlPW5ldyBqNSxXZS5mPW5ldyBqZWUobiksV2UuYj13M24oV2UuZixkKSxXZSksXzNuKChWPXQuYixuZXcgWWssVikpLHQuZT1uZXcgVGEsdC5hPXQuYi5mLmUsaD1uZXcgUyhkLmEpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihzPXUoSihoKSw4NDEpLEJ0PWxybih0LmIscyksZnduKHMuYyxCdC5hLEJ0LmIpLHR0PW5ldyBTKHMuYy5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KVk9dShKKHR0KSwxMCksWS5rPT0oR24oKSx4cykmJihndD1rNXQodCxZLm4sdShRKFksKHNlKCksb2MpKSw2MSkpLExpKEdmKFkubiksZ3QpKTtmb3Iobz1uZXcgUyhkLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSw4NDEpLGs9bmV3IFMocXVuKHMpKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodz11KEooayksMTcpLFNlPW5ldyB5Uih3LmEpLGg4KFNlLDAsVDEody5jKSksbmkoU2UsVDEody5kKSksSD1udWxsLGNlPWVpKFNlLDApO2NlLmIhPWNlLmQuYzspe2lmKFl0PXUodGkoY2UpLDgpLCFIKXtIPVl0O2NvbnRpbnVlfSRtdChILmEsWXQuYSk/KHQuZS5hPWIuTWF0aC5taW4odC5lLmEsSC5hKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLEguYSkpOiRtdChILmIsWXQuYikmJih0LmUuYj1iLk1hdGgubWluKHQuZS5iLEguYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixILmIpKSxIPVl0fW1qKHQuZSksTGkodC5hLHQuZSl9ZnVuY3Rpb24gQTVuKHQpe0lyKHQuYixQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxJcih0LmEsUGgsY3Qob3QoQWUsMSksdGUsMiw2LFtFdywiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksSXIodC5vLFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksSXIodC5wLFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksSXIodC52LFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLElyKHQuUixQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJXZWxsRm9ybWVkTmFtZSJdKSksSXIodC5ULFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLElyKHQuVSxQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxJcih0LlcsUGgsY3Qob3QoQWUsMSksdGUsMiw2LFtFdywiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLElyKHQuYmIsUGgsY3Qob3QoQWUsMSksdGUsMiw2LFtFdywiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxJcih0LmViLFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLElyKHQuSCxQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIEw1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWU7aWYoIWUuZGMoKSl7aWYocz1uZXcgRHUsZD1ufHx1KGUuWGIoMCksMTcpLFY9ZC5jLGJfKCksRj1WLmkuaywhKEY9PShHbigpLERzKXx8Rj09SGN8fEY9PXhzfHxGPT1qMSkpdGhyb3cgcnQobmV3IFBuKCJUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuIikpO2ZvcihLYihzLEtvKGN0KG90KFVzLDEpLHRlLDgsMCxbVi5pLm4sVi5uLFYuYV0pKSksKGJlKCksX3UpLkhjKFYuaikmJih0dD1YdCh5ZShRKFYsKHNlKCksZzcpKSkpLE09bmV3ICRlKEtvKGN0KG90KFVzLDEpLHRlLDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5hLHR0KSxocyhzLE0scy5jLmIscy5jKSksQz1udWxsLHI9ITEsdz1lLktjKCk7dy5PYigpOyloPXUody5QYigpLDE3KSxvPWguYSxvLmIhPTAmJihyPyhrPXVkKExpKEMsKFFuKG8uYiE9MCksdShvLmEuYS5jLDgpKSksLjUpLGhzKHMsayxzLmMuYixzLmMpLHI9ITEpOnI9ITAsQz1uYygoUW4oby5iIT0wKSx1KG8uYy5iLmMsOCkpKSxVYShzLG8pLF9oKG8pKTtZPWQuZCxfdS5IYyhZLmopJiYodHQ9WHQoeWUoUShZLChzZSgpLGc3KSkpKSxNPW5ldyAkZShLbyhjdChvdChVcywxKSx0ZSw4LDAsW1kuaS5uLFkubixZLmFdKSkuYSx0dCksaHMocyxNLHMuYy5iLHMuYykpLEtiKHMsS28oY3Qob3QoVXMsMSksdGUsOCwwLFtZLmkubixZLm4sWS5hXSkpKSx0LmQ9PSh0RSgpLHZodCkmJihndD0oUW4ocy5iIT0wKSx1KHMuYS5hLmMsOCkpLEx0PXUoUWYocywxKSw4KSxfdD1uZXcgYnJ0KEl5dChWLmopKSxfdC5hKj01LF90LmIqPTUsQnQ9bmEobmV3ICRlKEx0LmEsTHQuYiksZ3QpLFl0PW5ldyAkZShkcnQoX3QuYSxCdC5hKSxkcnQoX3QuYixCdC5iKSksTGkoWXQsZ3QpLGNlPWVpKHMsMSksWE0oY2UsWXQpLFNlPShRbihzLmIhPTApLHUocy5jLmIuYyw4KSksV2U9dShRZihzLHMuYi0yKSw4KSxfdD1uZXcgYnJ0KEl5dChZLmopKSxfdC5hKj01LF90LmIqPTUsQnQ9bmEobmV3ICRlKFdlLmEsV2UuYiksU2UpLFFlPW5ldyAkZShkcnQoX3QuYSxCdC5hKSxkcnQoX3QuYixCdC5iKSksTGkoUWUsU2UpLGg4KHMscy5iLTEsUWUpKSxIPW5ldyBzeHQocyksVWEoZC5hLHNzZShIKSl9fWZ1bmN0aW9uIE01bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHIscGksUnMsWGwsS2gsVzEsaFUsYk4sZEEsdk47aWYoX3Q9dShTdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSxZdD1fdC5EZygpLGNlPV90LkVnKCksQnQ9X3QuQ2coKS8yLFk9X3QuQmcoKS8yLEV0KF90LDE4NikmJihMdD11KF90LDExOCksWXQrPWsxKEx0KS5pLFl0Kz1rMShMdCkuaSksWXQrPUJ0LGNlKz1ZLHpuPXUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikscGk9em4uRGcoKSxScz16bi5FZygpLGhyPXpuLkNnKCkvMixTZT16bi5CZygpLzIsRXQoem4sMTg2KSYmKFJuPXUoem4sMTE4KSxwaSs9azEoUm4pLmkscGkrPWsxKFJuKS5pKSxwaSs9aHIsUnMrPVNlLCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaT09MClkPShUdigpLGs9bmV3IHJkLGspLE1yKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksZCk7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLmk+MSlmb3IoVj1uZXcgTHgoKCF0LmEmJih0LmE9bmV3IGhlKFppLHQsNiw2KSksdC5hKSk7Vi5lIT1WLmkuZ2MoKTspdV8oVik7Zm9yKGg9dShTdCgoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLDApLDIwMiksdHQ9cGkscGk+WXQrQnQ/dHQ9WXQrQnQ6cGk8WXQtQnQmJih0dD1ZdC1CdCksZ3Q9UnMsUnM+Y2UrWT9ndD1jZStZOlJzPGNlLVkmJihndD1jZS1ZKSx0dD5ZdC1CdCYmdHQ8WXQrQnQmJmd0PmNlLVkmJmd0PGNlK1kmJih0dD1ZdCtCdCksQjgoaCx0dCksajgoaCxndCksV2U9WXQsWXQ+cGkraHI/V2U9cGkraHI6WXQ8cGktaHImJihXZT1waS1ociksUWU9Y2UsY2U+UnMrU2U/UWU9UnMrU2U6Y2U8UnMtU2UmJihRZT1Scy1TZSksV2U+cGktaHImJldlPHBpK2hyJiZRZT5Scy1TZSYmUWU8UnMrU2UmJihRZT1ScytTZSksRjgoaCxXZSksUjgoaCxRZSkseHIoKCFoLmEmJihoLmE9bmV3IFNzKEhoLGgsNSkpLGguYSkpLG89enooZSw1KSxfdD09em4mJisrbyxXMT1XZS10dCxkQT1RZS1ndCxYbD1iLk1hdGguc3FydChXMSpXMStkQSpkQSksTT1YbCouMjAwMDAwMDAyOTgwMjMyMjQsaFU9VzEvKG8rMSksdk49ZEEvKG8rMSksS2g9dHQsYk49Z3QsQz0wO0M8bztDKyspS2grPWhVLGJOKz12TixGPUtoK29sKGUsMjQpKlBEKk0tTS8yLEY8MD9GPTE6Rj5uJiYoRj1uLTEpLEg9Yk4rb2woZSwyNCkqUEQqTS1NLzIsSDwwP0g9MTpIPnImJihIPXItMSkscz0oVHYoKSx3PW5ldyB2cCx3KSxXJChzLEYpLEskKHMsSCksTXIoKCFoLmEmJihoLmE9bmV3IFNzKEhoLGgsNSkpLGguYSkscyl9ZnVuY3Rpb24gVGUoKXtUZT1aLEpsdD0oY2koKSxaM2UpLGRDdD1KM2UsQU89aUF0LHhmPXQ0ZSxCNj1zQXQsRnc9ZTRlLEd5PWFBdCxtNz1vQXQseTc9Y0F0LHRodD1xVixCdz1IMixlaHQ9bjRlLF9TPWhBdCxzVj1xNixTTz0oQXh0KCksWXZlKSxRND1YdmUsUjI9UXZlLFo0PVp2ZSxQd2U9bmV3IGVvKHpWLGRlKDApKSx3Nz1VdmUsZkN0PVd2ZSxGNj1LdmUseEN0PXl3ZSxnQ3Q9ZXdlLHBDdD1pd2Uscmh0PWh3ZSxiQ3Q9b3dlLHZDdD11d2UsYVY9VHdlLGlodD14d2UsbUN0PWJ3ZSx3Q3Q9Z3dlLHlDdD13d2UsTnc9JHZlLENTPXp2ZSxLbHQ9aXZlLEc5dD1hdmUsb0N0PW5ldyBNdigxMiksYUN0PW5ldyBlbyhxMixvQ3QpLHo5dD0ocTAoKSxBNyksWDA9bmV3IGVvKE5TdCx6OXQpLHp5PW5ldyBlbyhobCwwKSxGd2U9bmV3IGVvKGZmdCxkZSgxKSksVUc9bmV3IGVvKCQ2LEJFKSxCMj0kVixvcz1VUyx2Nz1vNSxBd2U9VU8sTGQ9SDNlLGp5PXI1LEJ3ZT1uZXcgZW8oZGZ0LChGbigpLCEwKSksJHk9V08sUDI9c2Z0LEYyPXoyLGlWPXZiLFpsdD1qViwkOXQ9KGFvKCksYzApLFZsPW5ldyBlbyhqdywkOXQpLE93PXM1LG5WPUhTdCxxeT1LeSxOd2U9aGZ0LGxDdD1uQXQsdUN0PShjNCgpLEpPKSxuZXcgZW8oUVN0LHVDdCksSXdlPW9mdCxEd2U9Y2Z0LE93ZT11ZnQsTXdlPWFmdCxuaHQ9dHdlLGVDdD1BdmUsWGx0PVN2ZSxTUz1KdmUsY3U9eXZlLFJ5PVgyZSxFUz1ZMmUsQnk9RjJlLEI5dD1CMmUsR2x0PXoyZSxfTz1SMmUsVmx0PVcyZSxuQ3Q9THZlLHJDdD1NdmUsWDl0PWd2ZSxyVj1HdmUsUWx0PU92ZSxZbHQ9dXZlLHNDdD1SdmUsSDl0PW52ZSxXbHQ9cnZlLEhsdD1CVixpQ3Q9SXZlLEtHPUwyZSxOOXQ9QTJlLFdHPVMyZSxXOXQ9ZnZlLFU5dD1odmUsSzl0PWR2ZSxwNz1hNSxfbz1pNSxVZz1GU3QsTWQ9aWZ0LFVsdD1yZnQsUjl0PUgyZSxXZz1sZnQsa1M9VTNlLEpHPVczZSxQdz1KU3QsY0N0PUszZSxiNz1ZM2UsWjl0PWt2ZSxKOXQ9VHZlLEh5PXo2LHpsdD1fMmUsdEN0PV92ZSxaRz1KMmUsUUc9WjJlLGVWPUtPLFE5dD12dmUsVFM9UHZlLExPPXVBdCxqOXQ9UTJlLGhDdD1WdmUscTl0PXR2ZSxMd2U9bXZlLFN3ZT1WMmUsWTl0PSRTdCx0Vj14dmUsWEc9VTJlLGRiPVAyZSxGOXQ9TzJlLFlHPUkyZSxQOXQ9RDJlLHFsdD1OMmUsUDY9TTJlLFY5dD1sdmV9ZnVuY3Rpb24gRGF0KHQsZSl7d2F0KCk7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocixwaTtpZihXZT10LmUsVj10LmQscz10LmEsV2U9PTApc3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4iMCI7Y2FzZSAxOnJldHVybiBERTtjYXNlIDI6cmV0dXJuIjAuMDAiO2Nhc2UgMzpyZXR1cm4iMC4wMDAiO2Nhc2UgNDpyZXR1cm4iMC4wMDAwIjtjYXNlIDU6cmV0dXJuIjAuMDAwMDAiO2Nhc2UgNjpyZXR1cm4iMC4wMDAwMDAiO2RlZmF1bHQ6cmV0dXJuIGNlPW5ldyBfcCxlPDA/Y2UuYSs9IjBFKyI6Y2UuYSs9IjBFIixjZS5hKz0tZSxjZS5hfWlmKF90PVYqMTArMSs3LEJ0PVB0KG1oLHZkLDI1LF90KzEsMTUsMSksbj1fdCxWPT0xKWlmKGQ9c1swXSxkPDApe3BpPVBzKGQsY28pO2RvIFk9cGkscGk9ZUQocGksMTApLEJ0Wy0tbl09NDgrU3IoWXAoWSxDYShwaSwxMCkpKSZtczt3aGlsZSh5YyhwaSwwKSE9MCl9ZWxzZXtwaT1kO2RvIFk9cGkscGk9cGkvMTB8MCxCdFstLW5dPTQ4KyhZLXBpKjEwKSZtczt3aGlsZShwaSE9MCl9ZWxzZXtSbj1QdChUcixYciwyNSxWLDE1LDEpLGhyPVYsSWMocywwLFJuLDAsaHIpO3Q6Zm9yKDs7KXtmb3IoU2U9MCxrPWhyLTE7az49MDtrLS0pem49T2EoTTAoU2UsMzIpLFBzKFJuW2tdLGNvKSksZ3Q9UGRuKHpuKSxSbltrXT1TcihndCksU2U9U3IoRnAoZ3QsMzIpKTtMdD1TcihTZSksdHQ9bjtkbyBCdFstLW5dPTQ4K0x0JTEwJm1zO3doaWxlKChMdD1MdC8xMHwwKSE9MCYmbiE9MCk7Zm9yKHI9OS10dCtuLHc9MDt3PHImJm4+MDt3KyspQnRbLS1uXT00ODtmb3IoTT1oci0xO1JuW01dPT0wO00tLSlpZihNPT0wKWJyZWFrIHQ7aHI9TSsxfWZvcig7QnRbbl09PTQ4OykrK259aWYoSD1XZTwwLGg9X3Qtbi1lLTEsZT09MClyZXR1cm4gSCYmKEJ0Wy0tbl09NDUpLEFoKEJ0LG4sX3Qtbik7aWYoZT4wJiZoPj0tNil7aWYoaD49MCl7Zm9yKEM9bitoLEY9X3QtMTtGPj1DO0YtLSlCdFtGKzFdPUJ0W0ZdO3JldHVybiBCdFsrK0NdPTQ2LEgmJihCdFstLW5dPTQ1KSxBaChCdCxuLF90LW4rMSl9Zm9yKE09MjtNPC1oKzE7TSsrKUJ0Wy0tbl09NDg7cmV0dXJuIEJ0Wy0tbl09NDYsQnRbLS1uXT00OCxIJiYoQnRbLS1uXT00NSksQWgoQnQsbixfdC1uKX1yZXR1cm4gUWU9bisxLG89X3QsWXQ9bmV3IExtLEgmJihZdC5hKz0iLSIpLG8tUWU+PTE/KFJwKFl0LEJ0W25dKSxZdC5hKz0iLiIsWXQuYSs9QWgoQnQsbisxLF90LW4tMSkpOll0LmErPUFoKEJ0LG4sX3QtbiksWXQuYSs9IkUiLGg+MCYmKFl0LmErPSIrIiksWXQuYSs9IiIraCxZdC5hfWZ1bmN0aW9uIEZoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7c3dpdGNoKHQuYz1lLHQuZz1uZXcgQ3Isbj0oSW0oKSxuZXcgU20odC5jKSkscj1uZXcgdHIobiksYzN0KHIpLF90PUJyKHFlKHQuYywockQoKSxyU3QpKSksdz11KHFlKHQuYyxLaHQpLDMxNiksWXQ9dShxZSh0LmMsWWh0KSw0MjkpLGg9dShxZSh0LmMsdFN0KSw0ODIpLEJ0PXUocWUodC5jLFdodCksNDMwKSx0Lmo9WHQoeWUocWUodC5jLGQzZSkpKSxkPXQuYSx3Lmcpe2Nhc2UgMDpkPXQuYTticmVhaztjYXNlIDE6ZD10LmI7YnJlYWs7Y2FzZSAyOmQ9dC5pO2JyZWFrO2Nhc2UgMzpkPXQuZTticmVhaztjYXNlIDQ6ZD10LmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4ocEgrKHcuZiE9bnVsbD93LmY6IiIrdy5nKSkpfWlmKHQuZD1uZXcgYVF0KGQsWXQsaCksSnQodC5kLChHOCgpLHVTKSxSZShxZSh0LmMsaDNlKSkpLHQuZC5jPWplKFJlKHFlKHQuYyxlU3QpKSksaSQodC5jKS5pPT0wKXJldHVybiB0LmQ7Zm9yKE09bmV3IGVyKGkkKHQuYykpO00uZSE9TS5pLmdjKCk7KXtmb3IoQz11KGRyKE0pLDMzKSxIPUMuZy8yLEY9Qy5mLzIsY2U9bmV3ICRlKEMuaStILEMuaitGKTtrbCh0LmcsY2UpOylGbShjZSwoYi5NYXRoLnJhbmRvbSgpLS41KSp5ZCwoYi5NYXRoLnJhbmRvbSgpLS41KSp5ZCk7WT11KHFlKEMsKGNpKCksS08pKSwxNDIpLHR0PW5ldyBFUXQoY2UsbmV3IGloKGNlLmEtSC10LmovMi1ZLmIsY2UuYi1GLXQuai8yLVkuZCxDLmcrdC5qKyhZLmIrWS5jKSxDLmYrdC5qKyhZLmQrWS5hKSkpLHVlKHQuZC5pLHR0KSxraSh0LmcsY2UsbmV3IGxhKHR0LEMpKX1zd2l0Y2goQnQuZyl7Y2FzZSAwOmlmKF90PT1udWxsKXQuZC5kPXUoRmUodC5kLmksMCksNjUpO2Vsc2UgZm9yKEx0PW5ldyBTKHQuZC5pKTtMdC5hPEx0LmMuYy5sZW5ndGg7KXR0PXUoSihMdCksNjUpLFY9dSh1KEpuKHQuZyx0dC5hKSw0NikuYiwzMykuemcoKSxWIT1udWxsJiZobihWLF90KSYmKHQuZC5kPXR0KTticmVhaztjYXNlIDE6Zm9yKHM9bmV3ICRlKHQuYy5nLHQuYy5mKSxzLmEqPS41LHMuYio9LjUsRm0ocyx0LmMuaSx0LmMuaiksbz1zcyxndD1uZXcgUyh0LmQuaSk7Z3QuYTxndC5jLmMubGVuZ3RoOyl0dD11KEooZ3QpLDY1KSxrPUhwKHR0LmEscyksazxvJiYobz1rLHQuZC5kPXR0KTticmVhaztkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsoQnQuZiE9bnVsbD9CdC5mOiIiK0J0LmcpKSl9cmV0dXJuIHQuZH1mdW5jdGlvbiBCaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlO2ZvcihZdD11KFN0KCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksMCksMjAyKSxDPW5ldyBEdSxCdD1uZXcgQ3IsY2U9SnVlKFl0KSxzdShCdC5mLFl0LGNlKSxGPW5ldyBDcixyPW5ldyBRaSxWPUJwKEwxKGN0KG90KEIxLDEpLEllLDIwLDAsWyghZS5kJiYoZS5kPW5ldyBDbihXcyxlLDgsNSkpLGUuZCksKCFlLmUmJihlLmU9bmV3IENuKFdzLGUsNyw0KSksZS5lKV0pKSk7enIoVik7KXtpZihIPXUoTHIoViksNzkpLCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSE9MSl0aHJvdyBydChuZXcgUG4obGRlKyghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSkpO0ghPXQmJih0dD11KFN0KCghSC5hJiYoSC5hPW5ldyBoZShaaSxILDYsNikpLEguYSksMCksMjAyKSxocyhyLHR0LHIuYy5iLHIuYyksWT11KGVjKEFvKEJ0LmYsdHQpKSwxMiksWXx8KFk9SnVlKHR0KSxzdShCdC5mLHR0LFkpKSxNPW4/bmEobmV3IHlvKHUoRmUoY2UsY2UuYy5sZW5ndGgtMSksOCkpLHUoRmUoWSxZLmMubGVuZ3RoLTEpLDgpKTpuYShuZXcgeW8oKEFuKDAsY2UuYy5sZW5ndGgpLHUoY2UuY1swXSw4KSkpLChBbigwLFkuYy5sZW5ndGgpLHUoWS5jWzBdLDgpKSksc3UoRi5mLHR0LE0pKX1pZihyLmIhPTApZm9yKGd0PXUoRmUoY2Usbj9jZS5jLmxlbmd0aC0xOjApLDgpLGs9MTtrPGNlLmMubGVuZ3RoO2srKyl7Zm9yKEx0PXUoRmUoY2Usbj9jZS5jLmxlbmd0aC0xLWs6ayksOCkscz1laShyLDApO3MuYiE9cy5kLmM7KXR0PXUodGkocyksMjAyKSxZPXUoZWMoQW8oQnQuZix0dCkpLDEyKSxZLmMubGVuZ3RoPD1rP0gkKHMpOihfdD1MaShuZXcgeW8odShGZShZLG4/WS5jLmxlbmd0aC0xLWs6ayksOCkpLHUoZWMoQW8oRi5mLHR0KSksOCkpLChMdC5hIT1fdC5hfHxMdC5iIT1fdC5iKSYmKG89THQuYS1ndC5hLGQ9THQuYi1ndC5iLGg9X3QuYS1ndC5hLHc9X3QuYi1ndC5iLGgqZD09dypvJiYobz09MHx8aXNOYU4obyk/bzpvPDA/LTE6MSk9PShoPT0wfHxpc05hTihoKT9oOmg8MD8tMToxKSYmKGQ9PTB8fGlzTmFOKGQpP2Q6ZDwwPy0xOjEpPT0odz09MHx8aXNOYU4odyk/dzp3PDA/LTE6MSk/KGIuTWF0aC5hYnMobyk8Yi5NYXRoLmFicyhoKXx8Yi5NYXRoLmFicyhkKTxiLk1hdGguYWJzKHcpKSYmaHMoQyxMdCxDLmMuYixDLmMpOms+MSYmaHMoQyxndCxDLmMuYixDLmMpLEgkKHMpKSk7Z3Q9THR9cmV0dXJuIEN9ZnVuY3Rpb24gSTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocixwaSxScyxYbCxLaCxXMTtmb3Iod3IobiwiR3JlZWR5IGN5Y2xlIHJlbW92YWwiLDEpLF90PWUuYSxXMT1fdC5jLmxlbmd0aCx0LmE9UHQoVHIsWHIsMjUsVzEsMTUsMSksdC5jPVB0KFRyLFhyLDI1LFcxLDE1LDEpLHQuYj1QdChUcixYciwyNSxXMSwxNSwxKSxrPTAsZ3Q9bmV3IFMoX3QpO2d0LmE8Z3QuYy5jLmxlbmd0aDspe2ZvcihZPXUoSihndCksMTApLFkucD1rLFFlPW5ldyBTKFkuaik7UWUuYTxRZS5jLmMubGVuZ3RoOyl7Zm9yKGNlPXUoSihRZSksMTEpLGQ9bmV3IFMoY2UuZSk7ZC5hPGQuYy5jLmxlbmd0aDspcj11KEooZCksMTcpLHIuYy5pIT1ZJiYoaHI9dShRKHIsKFRlKCksdzcpKSwxOSkuYSx0LmFba10rPWhyPjA/aHIrMToxKTtmb3IoaD1uZXcgUyhjZS5nKTtoLmE8aC5jLmMubGVuZ3RoOylyPXUoSihoKSwxNyksci5kLmkhPVkmJihocj11KFEociwoVGUoKSx3NykpLDE5KS5hLHQuY1trXSs9aHI+MD9ocisxOjEpfXQuY1trXT09MD9uaSh0LmUsWSk6dC5hW2tdPT0wJiZuaSh0LmYsWSksKytrfWZvcihWPS0xLEg9MSxNPW5ldyBsZSx0LmQ9dShRKGUsKHNlKCksTzYpKSwyMzApO1cxPjA7KXtmb3IoO3QuZS5iIT0wOylScz11KGtudCh0LmUpLDEwKSx0LmJbUnMucF09Vi0tLEs1dCh0LFJzKSwtLVcxO2Zvcig7dC5mLmIhPTA7KVhsPXUoa250KHQuZiksMTApLHQuYltYbC5wXT1IKyssSzV0KHQsWGwpLC0tVzE7aWYoVzE+MCl7Zm9yKEY9X2EsTHQ9bmV3IFMoX3QpO0x0LmE8THQuYy5jLmxlbmd0aDspWT11KEooTHQpLDEwKSx0LmJbWS5wXT09MCYmKEJ0PXQuY1tZLnBdLXQuYVtZLnBdLEJ0Pj1GJiYoQnQ+RiYmKE0uYz1QdChYbixJZSwxLDAsNSwxKSxGPUJ0KSxNLmNbTS5jLmxlbmd0aF09WSkpO0M9dC5aZihNKSx0LmJbQy5wXT1IKyssSzV0KHQsQyksLS1XMX19Zm9yKHBpPV90LmMubGVuZ3RoKzEsaz0wO2s8X3QuYy5sZW5ndGg7aysrKXQuYltrXTwwJiYodC5iW2tdKz1waSk7Zm9yKHR0PW5ldyBTKF90KTt0dC5hPHR0LmMuYy5sZW5ndGg7KWZvcihZPXUoSih0dCksMTApLHpuPWJadChZLmopLFNlPXpuLFdlPTAsUm49U2UubGVuZ3RoO1dlPFJuOysrV2UpZm9yKGNlPVNlW1dlXSxZdD1nZChjZS5nKSxzPVl0LG89MCx3PXMubGVuZ3RoO288dzsrK28pcj1zW29dLEtoPXIuZC5pLnAsdC5iW1kucF0+dC5iW0toXSYmKGR3KHIsITApLEp0KGUseE8sKEZuKCksITApKSk7dC5hPW51bGwsdC5jPW51bGwsdC5iPW51bGwsX2godC5mKSxfaCh0LmUpLG9yKG4pfWZ1bmN0aW9uIFJoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKHI9bmV3IGxlLGQ9bmV3IGxlLHR0PWUvMixIPXQuZ2MoKSxzPXUodC5YYigwKSw4KSxndD11KHQuWGIoMSksOCksVj1Vc3Qocy5hLHMuYixndC5hLGd0LmIsdHQpLHVlKHIsKEFuKDAsVi5jLmxlbmd0aCksdShWLmNbMF0sOCkpKSx1ZShkLChBbigxLFYuYy5sZW5ndGgpLHUoVi5jWzFdLDgpKSksaz0yO2s8SDtrKyspWT1zLHM9Z3QsZ3Q9dSh0LlhiKGspLDgpLFY9VXN0KHMuYSxzLmIsWS5hLFkuYix0dCksdWUociwoQW4oMSxWLmMubGVuZ3RoKSx1KFYuY1sxXSw4KSkpLHVlKGQsKEFuKDAsVi5jLmxlbmd0aCksdShWLmNbMF0sOCkpKSxWPVVzdChzLmEscy5iLGd0LmEsZ3QuYix0dCksdWUociwoQW4oMCxWLmMubGVuZ3RoKSx1KFYuY1swXSw4KSkpLHVlKGQsKEFuKDEsVi5jLmxlbmd0aCksdShWLmNbMV0sOCkpKTtmb3IoVj1Vc3QoZ3QuYSxndC5iLHMuYSxzLmIsdHQpLHVlKHIsKEFuKDEsVi5jLmxlbmd0aCksdShWLmNbMV0sOCkpKSx1ZShkLChBbigwLFYuYy5sZW5ndGgpLHUoVi5jWzBdLDgpKSksbj1uZXcgRHUsaD1uZXcgbGUsbmkobiwoQW4oMCxyLmMubGVuZ3RoKSx1KHIuY1swXSw4KSkpLEM9MTtDPHIuYy5sZW5ndGgtMjtDKz0yKW89KEFuKEMsci5jLmxlbmd0aCksdShyLmNbQ10sOCkpLEY9UWFlKChBbihDLTEsci5jLmxlbmd0aCksdShyLmNbQy0xXSw4KSksbywoQW4oQysxLHIuYy5sZW5ndGgpLHUoci5jW0MrMV0sOCkpLChBbihDKzIsci5jLmxlbmd0aCksdShyLmNbQysyXSw4KSkpLCFpc0Zpbml0ZShGLmEpfHwhaXNGaW5pdGUoRi5iKT9ocyhuLG8sbi5jLmIsbi5jKTpocyhuLEYsbi5jLmIsbi5jKTtmb3Iobmkobix1KEZlKHIsci5jLmxlbmd0aC0xKSw4KSksdWUoaCwoQW4oMCxkLmMubGVuZ3RoKSx1KGQuY1swXSw4KSkpLE09MTtNPGQuYy5sZW5ndGgtMjtNKz0yKW89KEFuKE0sZC5jLmxlbmd0aCksdShkLmNbTV0sOCkpLEY9UWFlKChBbihNLTEsZC5jLmxlbmd0aCksdShkLmNbTS0xXSw4KSksbywoQW4oTSsxLGQuYy5sZW5ndGgpLHUoZC5jW00rMV0sOCkpLChBbihNKzIsZC5jLmxlbmd0aCksdShkLmNbTSsyXSw4KSkpLCFpc0Zpbml0ZShGLmEpfHwhaXNGaW5pdGUoRi5iKT9oLmNbaC5jLmxlbmd0aF09bzpoLmNbaC5jLmxlbmd0aF09Rjtmb3IodWUoaCx1KEZlKGQsZC5jLmxlbmd0aC0xKSw4KSksdz1oLmMubGVuZ3RoLTE7dz49MDt3LS0pbmkobiwoQW4odyxoLmMubGVuZ3RoKSx1KGguY1t3XSw4KSkpO3JldHVybiBufWZ1bmN0aW9uIEQ1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSDtpZihoPSEwLE09bnVsbCxyPW51bGwscz1udWxsLGU9ITEsSD1HNGUsaz1udWxsLG89bnVsbCxkPTAsdz1aaXQodCxkLFlBdCxYQXQpLHc8dC5sZW5ndGgmJihScih3LHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQodyk9PTU4KSYmKE09dC5zdWJzdHIoZCx3LWQpLGQ9dysxKSxuPU0hPW51bGwmJnBNKHJVLE0udG9Mb3dlckNhc2UoKSksbil7aWYodz10Lmxhc3RJbmRleE9mKCIhLyIpLHc9PS0xKXRocm93IHJ0KG5ldyBQbigibm8gYXJjaGl2ZSBzZXBhcmF0b3IiKSk7aD0hMCxyPURsKHQsZCwrK3cpLGQ9d31lbHNlIGQ+PTAmJmhuKHQuc3Vic3RyKGQsMiksIi8vIik/KGQrPTIsdz1aaXQodCxkLGlBLHNBKSxyPXQuc3Vic3RyKGQsdy1kKSxkPXcpOk0hPW51bGwmJihkPT10Lmxlbmd0aHx8KFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NDcpKSYmKGg9ITEsdz1fMnQodCxFdSgzNSksZCksdz09LTEmJih3PXQubGVuZ3RoKSxyPXQuc3Vic3RyKGQsdy1kKSxkPXcpO2lmKCFuJiZkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJih3PVppdCh0LGQrMSxpQSxzQSksQz10LnN1YnN0cihkKzEsdy0oZCsxKSksQy5sZW5ndGg+MCYmYmEoQyxDLmxlbmd0aC0xKT09NTgmJihzPUMsZD13KSksZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKT09NDcpJiYoKytkLGU9ITApLGQ8dC5sZW5ndGgmJihScihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCkhPTYzKSYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9MzUpKXtmb3IoRj1uZXcgbGU7ZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NjMpJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpIT0zNSk7KXc9Wml0KHQsZCxpQSxzQSksdWUoRix0LnN1YnN0cihkLHctZCkpLGQ9dyxkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJih5dW4odCwrK2QpfHwoRi5jW0YuYy5sZW5ndGhdPSIiKSk7SD1QdChBZSx0ZSwyLEYuYy5sZW5ndGgsNiwxKSxEMShGLEgpfXJldHVybiBkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT02MykmJih3PWw4KHQsMzUsKytkKSx3PT0tMSYmKHc9dC5sZW5ndGgpLGs9dC5zdWJzdHIoZCx3LWQpLGQ9dyksZDx0Lmxlbmd0aCYmKG89T00odCwrK2QpKSxrM24oaCxNLHIscyxILGspLG5ldyBlYXQoaCxNLHIscyxlLEgsayxvKX1mdW5jdGlvbiBPNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzLFhsLEtoO2ZvcihScz1uZXcgbGUsVj1uZXcgUyhlLmIpO1YuYTxWLmMuYy5sZW5ndGg7KWZvcihGPXUoSihWKSwyOSksWXQ9bmV3IFMoRi5hKTtZdC5hPFl0LmMuYy5sZW5ndGg7KXtmb3IoQnQ9dShKKFl0KSwxMCksQnQucD0tMSxNPV9hLFdlPV9hLFJuPW5ldyBTKEJ0LmopO1JuLmE8Um4uYy5jLmxlbmd0aDspe2ZvcihRZT11KEooUm4pLDExKSxzPW5ldyBTKFFlLmUpO3MuYTxzLmMuYy5sZW5ndGg7KW49dShKKHMpLDE3KSx6bj11KFEobiwoVGUoKSxGNikpLDE5KS5hLE09Yi5NYXRoLm1heChNLHpuKTtmb3Iocj1uZXcgUyhRZS5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksem49dShRKG4sKFRlKCksRjYpKSwxOSkuYSxXZT1iLk1hdGgubWF4KFdlLHpuKX1KdChCdCxwVixkZShNKSksSnQoQnQsYlYsZGUoV2UpKX1mb3IoZ3Q9MCxIPW5ldyBTKGUuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKEY9dShKKEgpLDI5KSxZdD1uZXcgUyhGLmEpO1l0LmE8WXQuYy5jLmxlbmd0aDspQnQ9dShKKFl0KSwxMCksQnQucDwwJiYocGk9bmV3IE5wdCxwaS5iPWd0KysseHVlKHQsQnQscGkpLFJzLmNbUnMuYy5sZW5ndGhdPXBpKTtmb3IoU2U9SGQoUnMuYy5sZW5ndGgpLEM9SGQoUnMuYy5sZW5ndGgpLGg9MDtoPFJzLmMubGVuZ3RoO2grKyl1ZShTZSxuZXcgbGUpLHVlKEMsZGUoMCkpO2ZvcihuNG4oZSxScyxTZSxDKSxYbD11KEQxKFJzLFB0KHltZSxTMWUsMjU3LFJzLmMubGVuZ3RoLDAsMSkpLDg0MCksY2U9dShEMShTZSxQdChwaCx4eSwxNSxTZS5jLmxlbmd0aCwwLDEpKSwxOTIpLGs9UHQoVHIsWHIsMjUsQy5jLmxlbmd0aCwxNSwxKSxkPTA7ZDxrLmxlbmd0aDtkKyspa1tkXT0oQW4oZCxDLmMubGVuZ3RoKSx1KEMuY1tkXSwxOSkpLmE7Zm9yKEx0PTAsX3Q9bmV3IGxlLHc9MDt3PFhsLmxlbmd0aDt3Kyspa1t3XT09MCYmdWUoX3QsWGxbd10pO2Zvcih0dD1QdChUcixYciwyNSxYbC5sZW5ndGgsMTUsMSk7X3QuYy5sZW5ndGghPTA7KWZvcihwaT11KEFnKF90LDApLDI1NyksdHRbcGkuYl09THQrKzshY2VbcGkuYl0uZGMoKTspS2g9dShjZVtwaS5iXS4kYygwKSwyNTcpLC0ta1tLaC5iXSxrW0toLmJdPT0wJiYoX3QuY1tfdC5jLmxlbmd0aF09S2gpO2Zvcih0LmE9UHQoeW1lLFMxZSwyNTcsWGwubGVuZ3RoLDAsMSksbz0wO288WGwubGVuZ3RoO28rKylmb3IoWT1YbFtvXSxocj10dFtvXSx0LmFbaHJdPVksWS5iPWhyLFl0PW5ldyBTKFkuZSk7WXQuYTxZdC5jLmMubGVuZ3RoOylCdD11KEooWXQpLDEwKSxCdC5wPWhyO3JldHVybiB0LmF9ZnVuY3Rpb24gZmkodCl7dmFyIGUsbixyO2lmKHQuZD49dC5qKXt0LmE9LTEsdC5jPTE7cmV0dXJufWlmKGU9YmEodC5pLHQuZCsrKSx0LmE9ZSx0LmI9PTEpe3N3aXRjaChlKXtjYXNlIDkyOmlmKHI9MTAsdC5kPj10LmopdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGtIKSkpKTt0LmE9YmEodC5pLHQuZCsrKTticmVhaztjYXNlIDQ1Oih0LmUmNTEyKT09NTEyJiZ0LmQ8dC5qJiZiYSh0LmksdC5kKT09OTE/KCsrdC5kLHI9MjQpOnI9MDticmVhaztjYXNlIDkxOmlmKCh0LmUmNTEyKSE9NTEyJiZ0LmQ8dC5qJiZiYSh0LmksdC5kKT09NTgpeysrdC5kLHI9MjA7YnJlYWt9ZGVmYXVsdDooZSY2NDUxMik9PU9EJiZ0LmQ8dC5qJiYobj1iYSh0LmksdC5kKSwobiY2NDUxMik9PTU2MzIwJiYodC5hPVlhKyhlLU9EPDwxMCkrbi01NjMyMCwrK3QuZCkpLHI9MH10LmM9cjtyZXR1cm59c3dpdGNoKGUpe2Nhc2UgMTI0OnI9MjticmVhaztjYXNlIDQyOnI9MzticmVhaztjYXNlIDQzOnI9NDticmVhaztjYXNlIDYzOnI9NTticmVhaztjYXNlIDQxOnI9NzticmVhaztjYXNlIDQ2OnI9ODticmVhaztjYXNlIDkxOnI9OTticmVhaztjYXNlIDk0OnI9MTE7YnJlYWs7Y2FzZSAzNjpyPTEyO2JyZWFrO2Nhc2UgNDA6aWYocj02LHQuZD49dC5qfHxiYSh0LmksdC5kKSE9NjMpYnJlYWs7aWYoKyt0LmQ+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksWGN0KSkpKTtzd2l0Y2goZT1iYSh0LmksdC5kKyspLGUpe2Nhc2UgNTg6cj0xMzticmVhaztjYXNlIDYxOnI9MTQ7YnJlYWs7Y2FzZSAzMzpyPTE1O2JyZWFrO2Nhc2UgOTE6cj0xOTticmVhaztjYXNlIDYyOnI9MTg7YnJlYWs7Y2FzZSA2MDppZih0LmQ+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksWGN0KSkpKTtpZihlPWJhKHQuaSx0LmQrKyksZT09NjEpcj0xNjtlbHNlIGlmKGU9PTMzKXI9MTc7ZWxzZSB0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQmRlKSkpKTticmVhaztjYXNlIDM1OmZvcig7dC5kPHQuaiYmKGU9YmEodC5pLHQuZCsrKSxlIT00MSk7KTtpZihlIT00MSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUmRlKSkpKTtyPTIxO2JyZWFrO2RlZmF1bHQ6aWYoZT09NDV8fDk3PD1lJiZlPD0xMjJ8fDY1PD1lJiZlPD05MCl7LS10LmQscj0yMjticmVha31lbHNlIGlmKGU9PTQwKXtyPTIzO2JyZWFrfXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxYY3QpKSkpfWJyZWFrO2Nhc2UgOTI6aWYocj0xMCx0LmQ+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksa0gpKSkpO3QuYT1iYSh0LmksdC5kKyspO2JyZWFrO2RlZmF1bHQ6cj0wfXQuYz1yfWZ1bmN0aW9uIE41bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHI7aWYoU2U9dShRKHQsKFRlKCksb3MpKSw5OCksU2UhPShvYSgpLEgxKSYmU2UhPXliKXtmb3IoVj10LmIsSD1WLmMubGVuZ3RoLEM9bmV3IFljKChCbChIKzIsQmF0KSxxJChPYShPYSg1LEgrMiksKEgrMikvMTB8MCkpKSksWT1uZXcgWWMoKEJsKEgrMixCYXQpLHEkKE9hKE9hKDUsSCsyKSwoSCsyKS8xMHwwKSkpKSx1ZShDLG5ldyBDciksdWUoQyxuZXcgQ3IpLHVlKFksbmV3IGxlKSx1ZShZLG5ldyBsZSksY2U9bmV3IGxlLGU9MDtlPEg7ZSsrKWZvcihuPShBbihlLFYuYy5sZW5ndGgpLHUoVi5jW2VdLDI5KSksV2U9KEFuKGUsQy5jLmxlbmd0aCksdShDLmNbZV0sODMpKSx0dD1uZXcgQ3IsQy5jW0MuYy5sZW5ndGhdPXR0LFJuPShBbihlLFkuYy5sZW5ndGgpLHUoWS5jW2VdLDE1KSksTHQ9bmV3IGxlLFkuY1tZLmMubGVuZ3RoXT1MdCxzPW5ldyBTKG4uYSk7cy5hPHMuYy5jLmxlbmd0aDspe2lmKHI9dShKKHMpLDEwKSxaeXQocikpe2NlLmNbY2UuYy5sZW5ndGhdPXI7Y29udGludWV9Zm9yKGs9bmV3IGFyKGxyKGpvKHIpLmEuS2MoKSxuZXcgeikpO3pyKGspOylkPXUoTHIoayksMTcpLHpuPWQuYy5pLFp5dCh6bikmJihRZT11KFdlLnhjKFEoem4sKHNlKCksX2kpKSksMTApLFFlfHwoUWU9d29lKHQsem4pLFdlLnpjKFEoem4sX2kpLFFlKSxSbi5GYyhRZSkpLERhKGQsdShGZShRZS5qLDEpLDExKSkpO2Zvcih3PW5ldyBhcihscihNcyhyKS5hLktjKCksbmV3IHopKTt6cih3KTspZD11KExyKHcpLDE3KSxocj1kLmQuaSxaeXQoaHIpJiYoZ3Q9dShKbih0dCxRKGhyLChzZSgpLF9pKSkpLDEwKSxndHx8KGd0PXdvZSh0LGhyKSxraSh0dCxRKGhyLF9pKSxndCksTHQuY1tMdC5jLmxlbmd0aF09Z3QpLHNhKGQsdShGZShndC5qLDApLDExKSkpfWZvcihNPTA7TTxZLmMubGVuZ3RoO00rKylpZihfdD0oQW4oTSxZLmMubGVuZ3RoKSx1KFkuY1tNXSwxNSkpLCFfdC5kYygpKWZvcihGPW51bGwsTT09MD8oRj1uZXcgQ2godCksVW0oMCxWLmMubGVuZ3RoKSxXOShWLmMsMCxGKSk6TT09Qy5jLmxlbmd0aC0xPyhGPW5ldyBDaCh0KSxWLmNbVi5jLmxlbmd0aF09Rik6Rj0oQW4oTS0xLFYuYy5sZW5ndGgpLHUoVi5jW00tMV0sMjkpKSxoPV90LktjKCk7aC5PYigpOylvPXUoaC5QYigpLDEwKSxrbyhvLEYpO2ZvcihZdD1uZXcgUyhjZSk7WXQuYTxZdC5jLmMubGVuZ3RoOylCdD11KEooWXQpLDEwKSxrbyhCdCxudWxsKTtKdCh0LChzZSgpLE9sdCksY2UpfX1mdW5jdGlvbiBQNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0O2lmKHdyKG4sIkNvZmZtYW4tR3JhaGFtIExheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IoWXQ9dShRKGUsKFRlKCksUTl0KSksMTkpLmEsdz0wLGg9MCxGPW5ldyBTKGUuYSk7Ri5hPEYuYy5jLmxlbmd0aDspZm9yKE09dShKKEYpLDEwKSxNLnA9dysrLG89bmV3IGFyKGxyKE1zKE0pLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLHMucD1oKys7Zm9yKHQuZD1QdChkbCxpMCwyNSx3LDE2LDEpLHQuYT1QdChkbCxpMCwyNSxoLDE2LDEpLHQuYj1QdChUcixYciwyNSx3LDE1LDEpLHQuZT1QdChUcixYciwyNSx3LDE1LDEpLHQuZj1QdChUcixYciwyNSx3LDE1LDEpLFEkKHQuYyksZWRuKHQsZSksVj1uZXcgVmoobmV3IGlSKHQpKSxCdD1uZXcgUyhlLmEpO0J0LmE8QnQuYy5jLmxlbmd0aDspe2ZvcihMdD11KEooQnQpLDEwKSxvPW5ldyBhcihscihqbyhMdCkuYS5LYygpLG5ldyB6KSk7enIobyk7KXM9dShMcihvKSwxNyksdC5hW3MucF18fCsrdC5iW0x0LnBdO3QuYltMdC5wXT09MCYmTTgoZEUoVixMdCkpfWZvcihkPTA7Vi5iLmMubGVuZ3RoIT0wOylmb3IoTHQ9dShRcnQoViksMTApLHQuZltMdC5wXT1kKyssbz1uZXcgYXIobHIoTXMoTHQpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLCF0LmFbcy5wXSYmKHR0PXMuZC5pLC0tdC5iW3R0LnBdLGxuKHQuYyx0dCxkZSh0LmZbTHQucF0pKSx0LmJbdHQucF09PTAmJk04KGRFKFYsdHQpKSk7Zm9yKEg9bmV3IFZqKG5ldyBqdHQodCkpLF90PW5ldyBTKGUuYSk7X3QuYTxfdC5jLmMubGVuZ3RoOyl7Zm9yKEx0PXUoSihfdCksMTApLG89bmV3IGFyKGxyKE1zKEx0KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KExyKG8pLDE3KSx0LmFbcy5wXXx8Kyt0LmVbTHQucF07dC5lW0x0LnBdPT0wJiZNOChkRShILEx0KSl9Zm9yKEM9bmV3IGxlLHI9T1F0KGUsQyk7SC5iLmMubGVuZ3RoIT0wOylmb3IoZ3Q9dShRcnQoSCksMTApLChyLmEuYy5sZW5ndGg+PVl0fHwhZWhuKGd0LHIpKSYmKHI9T1F0KGUsQykpLGtvKGd0LHIpLG89bmV3IGFyKGxyKGpvKGd0KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KExyKG8pLDE3KSwhdC5hW3MucF0mJihZPXMuYy5pLC0tdC5lW1kucF0sdC5lW1kucF09PTAmJk04KGRFKEgsWSkpKTtmb3Ioaz1DLmMubGVuZ3RoLTE7az49MDstLWspdWUoZS5iLChBbihrLEMuYy5sZW5ndGgpLHUoQy5jW2tdLDI5KSkpO2UuYS5jPVB0KFhuLEllLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIGpoZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7Zm9yKHQuYj0xLGZpKHQpLGU9bnVsbCx0LmM9PTAmJnQuYT09OTQ/KGZpKHQpLGU9KGdpKCksZ2koKSxuZXcgTmwoNCkpLGpjKGUsMCxXRSksZD1uZXcgTmwoNCkpOmQ9KGdpKCksZ2koKSxuZXcgTmwoNCkpLHM9ITA7KGs9dC5jKSE9MTspe2lmKGs9PTAmJnQuYT09OTMmJiFzKXtlJiYoX18oZSxkKSxkPWUpO2JyZWFrfWlmKG49dC5hLHI9ITEsaz09MTApc3dpdGNoKG4pe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOnZ5KGQsa0UobikpLHI9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6bj0odnkoZCxrRShuKSksLTEpLG48MCYmKHI9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYodz1uNXQodCxuKSwhdyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUWN0KSkpKTt2eShkLHcpLHI9ITA7YnJlYWs7ZGVmYXVsdDpuPUY1dCh0KX1lbHNlIGlmKGs9PTI0JiYhcyl7aWYoZSYmKF9fKGUsZCksZD1lKSxvPWpoZSh0KSxfXyhkLG8pLHQuYyE9MHx8dC5hIT05Myl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksV2RlKSkpKTticmVha31pZihmaSh0KSwhcil7aWYoaz09MCl7aWYobj09OTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFM4dCkpKSk7aWYobj09OTMpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEE4dCkpKSk7aWYobj09NDUmJiFzJiZ0LmEhPTkzKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxaY3QpKSkpfWlmKHQuYyE9MHx8dC5hIT00NXx8bj09NDUmJnMpamMoZCxuLG4pO2Vsc2V7aWYoZmkodCksKGs9dC5jKT09MSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksRUgpKSkpO2lmKGs9PTAmJnQuYT09OTMpamMoZCxuLG4pLGpjKGQsNDUsNDUpO2Vsc2V7aWYoaz09MCYmdC5hPT05M3x8az09MjQpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFpjdCkpKSk7aWYoaD10LmEsaz09MCl7aWYoaD09OTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFM4dCkpKSk7aWYoaD09OTMpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEE4dCkpKSk7aWYoaD09NDUpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFpjdCkpKSl9ZWxzZSBrPT0xMCYmKGg9RjV0KHQpKTtpZihmaSh0KSxuPmgpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFhkZSkpKSk7amMoZCxuLGgpfX19cz0hMX1pZih0LmM9PTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEVIKSkpKTtyZXR1cm4gYjQoZCksVF8oZCksdC5iPTAsZmkodCksZH1mdW5jdGlvbiBGNW4odCl7SXIodC5jLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RlY2ltYWwiXSkpLElyKHQuZCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnRlZ2VyIl0pKSxJcih0LmUsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYm9vbGVhbiJdKSksSXIodC5mLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVCb29sZWFuIixvaSwiRUJvb2xlYW46T2JqZWN0Il0pKSxJcih0LmksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYnl0ZSJdKSksSXIodC5nLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2hleEJpbmFyeSJdKSksSXIodC5qLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVCeXRlIixvaSwiRUJ5dGU6T2JqZWN0Il0pKSxJcih0Lm4sS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiRUNoYXIiLG9pLCJFQ2hhcjpPYmplY3QiXSkpLElyKHQudCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNkb3VibGUiXSkpLElyKHQudSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJFRG91YmxlIixvaSwiRURvdWJsZTpPYmplY3QiXSkpLElyKHQuRixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNmbG9hdCJdKSksSXIodC5HLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVGbG9hdCIsb2ksIkVGbG9hdDpPYmplY3QiXSkpLElyKHQuSSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnQiXSkpLElyKHQuSixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJFSW50IixvaSwiRUludDpPYmplY3QiXSkpLElyKHQuTixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNsb25nIl0pKSxJcih0Lk8sS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiRUxvbmciLG9pLCJFTG9uZzpPYmplY3QiXSkpLElyKHQuWixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzaG9ydCJdKSksSXIodC4kLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVTaG9ydCIsb2ksIkVTaG9ydDpPYmplY3QiXSkpLElyKHQuXyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciXSkpfWZ1bmN0aW9uIEI1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHI7aWYodC5jLmxlbmd0aD09MSlyZXR1cm4gQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMzUpO2lmKHQuYy5sZW5ndGg8PTApcmV0dXJuIG5ldyBBJDtmb3Iodz1uZXcgUyh0KTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHcpLDEzNSksTHQ9MCxWPXZpLFk9dmksRj1fYSxIPV9hLGd0PWVpKGguYiwwKTtndC5iIT1ndC5kLmM7KXR0PXUodGkoZ3QpLDg2KSxMdCs9dShRKHR0LChodygpLEVWKSksMTkpLmEsVj1iLk1hdGgubWluKFYsdHQuZS5hKSxZPWIuTWF0aC5taW4oWSx0dC5lLmIpLEY9Yi5NYXRoLm1heChGLHR0LmUuYSt0dC5mLmEpLEg9Yi5NYXRoLm1heChILHR0LmUuYit0dC5mLmIpO0p0KGgsKGh3KCksRVYpLGRlKEx0KSksSnQoaCwoZmMoKSxCUyksbmV3ICRlKFYsWSkpLEp0KGgsRk8sbmV3ICRlKEYsSCkpfWZvcih2bigpLFhzKHQsbmV3IFBRKSxZdD1uZXcgQSQsTG8oWXQsKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sOTQpKSksTT0wLFJuPTAsaz1uZXcgUyh0KTtrLmE8ay5jLmMubGVuZ3RoOyloPXUoSihrKSwxMzUpLGNlPW5hKG5jKHUoUShoLChmYygpLEZPKSksOCkpLHUoUShoLEJTKSw4KSksTT1iLk1hdGgubWF4KE0sY2UuYSksUm4rPWNlLmEqY2UuYjtmb3IoTT1iLk1hdGgubWF4KE0sYi5NYXRoLnNxcnQoUm4pKlh0KHllKFEoWXQsKGh3KCksbnllKSkpKSksU2U9WHQoeWUoUShZdCxvX3QpKSksem49MCxocj0wLEM9MCxlPVNlLGQ9bmV3IFModCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTM1KSxjZT1uYShuYyh1KFEoaCwoZmMoKSxGTykpLDgpKSx1KFEoaCxCUyksOCkpLHpuK2NlLmE+TSYmKHpuPTAsaHIrPUMrU2UsQz0wKSxXYm4oWXQsaCx6bixociksZT1iLk1hdGgubWF4KGUsem4rY2UuYSksQz1iLk1hdGgubWF4KEMsY2UuYiksem4rPWNlLmErU2U7Zm9yKEJ0PW5ldyBDcixuPW5ldyBDcixRZT1uZXcgUyh0KTtRZS5hPFFlLmMuYy5sZW5ndGg7KWZvcihXZT11KEooUWUpLDEzNSkscj1qZShSZShRKFdlLChjaSgpLFVPKSkpKSxfdD1XZS5xP1dlLnE6YTAsbz1fdC52YygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDQyKSxrbChCdCxzLmNkKCkpP0d0KHUocy5jZCgpLDE0Nikud2coKSkhPT1HdChzLmRkKCkpJiYociYma2wobixzLmNkKCkpPyhxZCgpLCIiK3Uocy5jZCgpLDE0NikudGcoKSk6KGtpKEJ0LHUocy5jZCgpLDE0Nikscy5kZCgpKSxKdChZdCx1KHMuY2QoKSwxNDYpLHMuZGQoKSksciYma2kobix1KHMuY2QoKSwxNDYpLHMuZGQoKSkpKTooa2koQnQsdShzLmNkKCksMTQ2KSxzLmRkKCkpLEp0KFl0LHUocy5jZCgpLDE0Nikscy5kZCgpKSk7cmV0dXJuIFl0fWZ1bmN0aW9uICRoZSgpeyRoZT1aLElhdCgpLFFyPW5ldyBIdixsbihRciwoYmUoKSxTZiksRzEpLGxuKFFyLHFoLEcxKSxsbihRcix0bCxHMSksbG4oUXIsQWYsRzEpLGxuKFFyLFN1LEcxKSxsbihRcixlbCxHMSksbG4oUXIsQWYsU2YpLGxuKFFyLEcxLHZoKSxsbihRcixTZix2aCksbG4oUXIscWgsdmgpLGxuKFFyLHRsLHZoKSxsbihRcixfdSx2aCksbG4oUXIsQWYsdmgpLGxuKFFyLFN1LHZoKSxsbihRcixlbCx2aCksbG4oUXIsdXUsdmgpLGxuKFFyLEcxLFdsKSxsbihRcixTZixXbCksbG4oUXIsdmgsV2wpLGxuKFFyLHFoLFdsKSxsbihRcix0bCxXbCksbG4oUXIsX3UsV2wpLGxuKFFyLEFmLFdsKSxsbihRcix1dSxXbCksbG4oUXIsS2wsV2wpLGxuKFFyLFN1LFdsKSxsbihRcixxdSxXbCksbG4oUXIsZWwsV2wpLGxuKFFyLFNmLHFoKSxsbihRcix0bCxxaCksbG4oUXIsQWYscWgpLGxuKFFyLGVsLHFoKSxsbihRcixTZix0bCksbG4oUXIscWgsdGwpLGxuKFFyLEFmLHRsKSxsbihRcix0bCx0bCksbG4oUXIsU3UsdGwpLGxuKFFyLEcxLHdoKSxsbihRcixTZix3aCksbG4oUXIsdmgsd2gpLGxuKFFyLFdsLHdoKSxsbihRcixxaCx3aCksbG4oUXIsdGwsd2gpLGxuKFFyLF91LHdoKSxsbihRcixBZix3aCksbG4oUXIsS2wsd2gpLGxuKFFyLHV1LHdoKSxsbihRcixlbCx3aCksbG4oUXIsU3Usd2gpLGxuKFFyLFVjLHdoKSxsbihRcixHMSxLbCksbG4oUXIsU2YsS2wpLGxuKFFyLHZoLEtsKSxsbihRcixxaCxLbCksbG4oUXIsdGwsS2wpLGxuKFFyLF91LEtsKSxsbihRcixBZixLbCksbG4oUXIsdXUsS2wpLGxuKFFyLGVsLEtsKSxsbihRcixxdSxLbCksbG4oUXIsVWMsS2wpLGxuKFFyLFNmLHV1KSxsbihRcixxaCx1dSksbG4oUXIsdGwsdXUpLGxuKFFyLEFmLHV1KSxsbihRcixLbCx1dSksbG4oUXIsZWwsdXUpLGxuKFFyLFN1LHV1KSxsbihRcixHMSxDdSksbG4oUXIsU2YsQ3UpLGxuKFFyLHZoLEN1KSxsbihRcixxaCxDdSksbG4oUXIsdGwsQ3UpLGxuKFFyLF91LEN1KSxsbihRcixBZixDdSksbG4oUXIsdXUsQ3UpLGxuKFFyLGVsLEN1KSxsbihRcixTZixTdSksbG4oUXIsdmgsU3UpLGxuKFFyLFdsLFN1KSxsbihRcix0bCxTdSksbG4oUXIsRzEscXUpLGxuKFFyLFNmLHF1KSxsbihRcixXbCxxdSksbG4oUXIscWgscXUpLGxuKFFyLHRsLHF1KSxsbihRcixfdSxxdSksbG4oUXIsQWYscXUpLGxuKFFyLEFmLFVjKSxsbihRcix0bCxVYyksbG4oUXIsdXUsRzEpLGxuKFFyLHV1LHFoKSxsbihRcix1dSx2aCksbG4oUXIsX3UsRzEpLGxuKFFyLF91LFNmKSxsbihRcixfdSxXbCl9ZnVuY3Rpb24gQXEodCxlKXtzd2l0Y2godC5lKXtjYXNlIDA6Y2FzZSAyOmNhc2UgNDpjYXNlIDY6Y2FzZSA0MjpjYXNlIDQ0OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDg6Y2FzZSAxMDpjYXNlIDEyOmNhc2UgMTQ6Y2FzZSAxNjpjYXNlIDE4OmNhc2UgMjA6Y2FzZSAyMjpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAyODpjYXNlIDMwOmNhc2UgMzI6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzg6cmV0dXJuIG5ldyB6WHQodC5iLHQuYSxlLHQuYyk7Y2FzZSAxOnJldHVybiBuZXcgaGoodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgNDM6cmV0dXJuIG5ldyBCVXQodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgMzpyZXR1cm4gbmV3IFNzKHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDQ1OnJldHVybiBuZXcgT3UodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgNDE6cmV0dXJuIG5ldyBUbCh1KExoKHQuYyksMjYpLHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDUwOnJldHVybiBuZXcgJGVlKHUoTGgodC5jKSwyNiksdC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgNTpyZXR1cm4gbmV3IGl2dCh0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0NzpyZXR1cm4gbmV3IEtXdCh0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA3OnJldHVybiBuZXcgaGUodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgNDk6cmV0dXJuIG5ldyBJeCh0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA5OnJldHVybiBuZXcgalV0KHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDExOnJldHVybiBuZXcgUlV0KHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDEzOnJldHVybiBuZXcgYjJ0KHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDE1OnJldHVybiBuZXcgU2oodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgMTc6cmV0dXJuIG5ldyAkVXQodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgMTk6cmV0dXJuIG5ldyBVMyh0LmEsZSxWaShlLlRnKCksdC5jKSk7Y2FzZSAyMTpyZXR1cm4gbmV3IHAydCh0LmEsZSxWaShlLlRnKCksdC5jKSk7Y2FzZSAyMzpyZXR1cm4gbmV3IFdNKHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDI1OnJldHVybiBuZXcgUVd0KHQuYSxlLFZpKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDI3OnJldHVybiBuZXcgQ24odC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMjk6cmV0dXJuIG5ldyBYV3QodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzE6cmV0dXJuIG5ldyBZV3QodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzM6cmV0dXJuIG5ldyBhdnQodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzU6cmV0dXJuIG5ldyBzdnQodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzc6cmV0dXJuIG5ldyBmbnQodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzk6cmV0dXJuIG5ldyBVaih0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0MDpyZXR1cm4gbmV3IGlzKGUsVmkoZS5UZygpLHQuYykpO2RlZmF1bHQ6dGhyb3cgcnQobmV3IEdvKCJVbmtub3duIGZlYXR1cmUgc3R5bGU6ICIrdC5lKSl9fWZ1bmN0aW9uIFI1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7c3dpdGNoKHdyKG4sIkJyYW5kZXMgJiBLb2VwZiBub2RlIHBsYWNlbWVudCIsMSksdC5hPWUsdC5jPUltbihlKSxyPXUoUShlLChUZSgpLFFsdCkpLDI3NCksSD1qZShSZShRKGUsVFMpKSksdC5kPXI9PShuRCgpLEJHKSYmIUh8fHI9PVNsdCxiM24odCxlKSxZdD1udWxsLGNlPW51bGwsZ3Q9bnVsbCxMdD1udWxsLHR0PShCbCg0LG15KSxuZXcgWWMoNCkpLHUoUShlLFFsdCksMjc0KS5nKXtjYXNlIDM6Z3Q9bmV3IHg0KGUsdC5jLmQsKEUxKCksajIpLChkZCgpLEtnKSksdHQuY1t0dC5jLmxlbmd0aF09Z3Q7YnJlYWs7Y2FzZSAxOkx0PW5ldyB4NChlLHQuYy5kLChFMSgpLHoxKSwoZGQoKSxLZykpLHR0LmNbdHQuYy5sZW5ndGhdPUx0O2JyZWFrO2Nhc2UgNDpZdD1uZXcgeDQoZSx0LmMuZCwoRTEoKSxqMiksKGRkKCksUncpKSx0dC5jW3R0LmMubGVuZ3RoXT1ZdDticmVhaztjYXNlIDI6Y2U9bmV3IHg0KGUsdC5jLmQsKEUxKCksejEpLChkZCgpLFJ3KSksdHQuY1t0dC5jLmxlbmd0aF09Y2U7YnJlYWs7ZGVmYXVsdDpndD1uZXcgeDQoZSx0LmMuZCwoRTEoKSxqMiksKGRkKCksS2cpKSxMdD1uZXcgeDQoZSx0LmMuZCx6MSxLZyksWXQ9bmV3IHg0KGUsdC5jLmQsajIsUncpLGNlPW5ldyB4NChlLHQuYy5kLHoxLFJ3KSx0dC5jW3R0LmMubGVuZ3RoXT1ZdCx0dC5jW3R0LmMubGVuZ3RoXT1jZSx0dC5jW3R0LmMubGVuZ3RoXT1ndCx0dC5jW3R0LmMubGVuZ3RoXT1MdH1mb3Iocz1uZXcgblZ0KGUsdC5jKSxkPW5ldyBTKHR0KTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxODApLFQ1bihzLG8sdC5iKSxveW4obyk7Zm9yKEY9bmV3IFBzZShlLHQuYyksdz1uZXcgUyh0dCk7dy5hPHcuYy5jLmxlbmd0aDspbz11KEoodyksMTgwKSx5NG4oRixvKTtpZihuLm4pZm9yKGs9bmV3IFModHQpO2suYTxrLmMuYy5sZW5ndGg7KW89dShKKGspLDE4MCksWWIobixvKyIgc2l6ZSBpcyAiK1dzdChvKSk7aWYoTT1udWxsLHQuZCYmKEM9WDRuKHQsdHQsdC5jLmQpLHhsZShlLEMsbikmJihNPUMpKSwhTSlmb3Ioaz1uZXcgUyh0dCk7ay5hPGsuYy5jLmxlbmd0aDspbz11KEooayksMTgwKSx4bGUoZSxvLG4pJiYoIU18fFdzdChNKT5Xc3QobykpJiYoTT1vKTtmb3IoIU0mJihNPShBbigwLHR0LmMubGVuZ3RoKSx1KHR0LmNbMF0sMTgwKSkpLFk9bmV3IFMoZS5iKTtZLmE8WS5jLmMubGVuZ3RoOylmb3IoVj11KEooWSksMjkpLEJ0PW5ldyBTKFYuYSk7QnQuYTxCdC5jLmMubGVuZ3RoOylfdD11KEooQnQpLDEwKSxfdC5uLmI9WHQoTS5wW190LnBdKStYdChNLmRbX3QucF0pO2ZvcihuLm4mJihZYihuLCJDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICIrTSksWWIobiwiQmxvY2tzOiAiK3pvZShNKSksWWIobiwiQ2xhc3NlczogIitacG4oTSxuKSksWWIobiwiTWFya2VkIGVkZ2VzOiAiK3QuYikpLGg9bmV3IFModHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MCksby5nPW51bGwsby5iPW51bGwsby5hPW51bGwsby5kPW51bGwsby5qPW51bGwsby5pPW51bGwsby5wPW51bGw7TG9uKHQuYyksdC5iLmEuJGIoKSxvcihuKX1mdW5jdGlvbiBqNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuO2ZvcihoPW5ldyBRaSxZdD11KFEobiwoVGUoKSxWbCkpLDEwMyksVj0wLFVhKGgsKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtoLmIhPTA7KWs9dShoLmI9PTA/bnVsbDooUW4oaC5iIT0wKSxjaChoLGguYS5hKSksMzMpLChHdChxZShlLGRiKSkhPT1HdCgoajAoKSxnYikpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxwUykpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxnUykpfHxqZShSZShxZShlLEJ5KSkpfHxHdChxZShlLFA2KSkhPT1HdCgoZXcoKSwkNCkpKSYmIWplKFJlKHFlKGsscWx0KSkpJiZibyhrLChzZSgpLFRjKSxkZShWKyspKSx0dD0hamUoUmUocWUoayxCMikpKSx0dCYmKE09KCFrLmEmJihrLmE9bmV3IGhlKG5zLGssMTAsMTEpKSxrLmEpLmkhPTAsSD1xZG4oayksRj1HdChxZShrLGp5KSk9PT1HdCgoJDAoKSxaZykpLHpuPSFyMihrLChjaSgpLFZTKSl8fGhuKEJyKHFlKGssVlMpKSxWbiksX3Q9bnVsbCx6biYmRiYmKE18fEgpJiYoX3Q9Y2xlKGspLEp0KF90LFZsLFl0KSxWcyhfdCxTTykmJmpxdChuZXcgbDN0KFh0KHllKFEoX3QsU08pKSkpLF90KSx1KHFlKGssRjIpLDE3NCkuZ2MoKSE9MCYmKEM9X3QsdXMobmV3IFRuKG51bGwsKCFrLmMmJihrLmM9bmV3IGhlKGZsLGssOSw5KSksbmV3IF9uKGsuYywxNikpKSxuZXcgX3IoQykpLHR1ZShrLF90KSkpLGNlPW4sU2U9dShKbih0LmEsdHMoaykpLDEwKSxTZSYmKGNlPVNlLmUpLEx0PW9oZSh0LGssY2UpLF90JiYoTHQuZT1fdCxfdC5lPUx0LFVhKGgsKCFrLmEmJihrLmE9bmV3IGhlKG5zLGssMTAsMTEpKSxrLmEpKSkpO2ZvcihWPTAsaHMoaCxlLGguYy5iLGguYyk7aC5iIT0wOyl7Zm9yKG89dShoLmI9PTA/bnVsbDooUW4oaC5iIT0wKSxjaChoLGguYS5hKSksMzMpLHc9bmV3IGVyKCghby5iJiYoby5iPW5ldyBoZShXcyxvLDEyLDMpKSxvLmIpKTt3LmUhPXcuaS5nYygpOylkPXUoZHIodyksNzkpLF91ZShkKSwoR3QocWUoZSxkYikpIT09R3QoKGowKCksZ2IpKXx8R3QocWUoZSxSeSkpPT09R3QoKHYyKCkscFMpKXx8R3QocWUoZSxSeSkpPT09R3QoKHYyKCksZ1MpKXx8amUoUmUocWUoZSxCeSkpKXx8R3QocWUoZSxQNikpIT09R3QoKGV3KCksJDQpKSkmJmJvKGQsKHNlKCksVGMpLGRlKFYrKykpLFFlPU1vKHUoU3QoKCFkLmImJihkLmI9bmV3IENuKGJyLGQsNCw3KSksZC5iKSwwKSw4MikpLFJuPU1vKHUoU3QoKCFkLmMmJihkLmM9bmV3IENuKGJyLGQsNSw4KSksZC5jKSwwKSw4MikpLCEoamUoUmUocWUoZCxCMikpKXx8amUoUmUocWUoUWUsQjIpKSl8fGplKFJlKHFlKFJuLEIyKSkpKSYmKFk9dXcoZCkmJmplKFJlKHFlKFFlLCR5KSkpJiZqZShSZShxZShkLFAyKSkpLEJ0PW8sWXx8Wm0oUm4sUWUpP0J0PVFlOlptKFFlLFJuKSYmKEJ0PVJuKSxjZT1uLFNlPXUoSm4odC5hLEJ0KSwxMCksU2UmJihjZT1TZS5lKSxndD1TeHQodCxkLEJ0LGNlKSxKdChndCwoc2UoKSxZVHQpLHV2bih0LGQsZSxuKSkpO2lmKEY9R3QocWUobyxqeSkpPT09R3QoKCQwKCksWmcpKSxGKWZvcihzPW5ldyBlcigoIW8uYSYmKG8uYT1uZXcgaGUobnMsbywxMCwxMSkpLG8uYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksem49IXIyKHIsKGNpKCksVlMpKXx8aG4oQnIocWUocixWUykpLFZuKSxXZT1HdChxZShyLGp5KSk9PT1HdChaZyksem4mJldlJiZocyhoLHIsaC5jLmIsaC5jKX19ZnVuY3Rpb24gJDVuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtzd2l0Y2goZSl7Y2FzZSA3MTpkPXIucS5nZXRGdWxsWWVhcigpLW5iPj0tMTkwMD8xOjAsbj49ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbbmZlLHJmZV0pW2RdKTpWcih0LGN0KG90KEFlLDEpLHRlLDIsNixbIkJDIiwiQUQiXSlbZF0pO2JyZWFrO2Nhc2UgMTIxOklobih0LG4scik7YnJlYWs7Y2FzZSA3NzpQd24odCxuLHIpO2JyZWFrO2Nhc2UgMTA3Onc9cy5xLmdldEhvdXJzKCksdz09MD9YZCh0LDI0LG4pOlhkKHQsdyxuKTticmVhaztjYXNlIDgzOm4ybih0LG4scyk7YnJlYWs7Y2FzZSA2OTpDPXIucS5nZXREYXkoKSxuPT01P1ZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtDXSk6bj09ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSlbQ10pOlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pW0NdKTticmVhaztjYXNlIDk3OnMucS5nZXRIb3VycygpPj0xMiYmcy5xLmdldEhvdXJzKCk8MjQ/VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyJBTSIsIlBNIl0pWzFdKTpWcih0LGN0KG90KEFlLDEpLHRlLDIsNixbIkFNIiwiUE0iXSlbMF0pO2JyZWFrO2Nhc2UgMTA0Ok09cy5xLmdldEhvdXJzKCklMTIsTT09MD9YZCh0LDEyLG4pOlhkKHQsTSxuKTticmVhaztjYXNlIDc1OkY9cy5xLmdldEhvdXJzKCklMTIsWGQodCxGLG4pO2JyZWFrO2Nhc2UgNzI6SD1zLnEuZ2V0SG91cnMoKSxYZCh0LEgsbik7YnJlYWs7Y2FzZSA5OTpWPXIucS5nZXREYXkoKSxuPT01P1ZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtWXSk6bj09ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSlbVl0pOm49PTM/VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbVl0pOlhkKHQsViwxKTticmVhaztjYXNlIDc2Olk9ci5xLmdldE1vbnRoKCksbj09NT9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtZXSk6bj09ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbJGF0LHphdCxxYXQsSGF0LGw2LEdhdCxWYXQsVWF0LFdhdCxLYXQsWWF0LFhhdF0pW1ldKTpuPT0zP1ZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixsNiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pW1ldKTpYZCh0LFkrMSxuKTticmVhaztjYXNlIDgxOnR0PXIucS5nZXRNb250aCgpLzN8MCxuPDQ/VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyJRMSIsIlEyIiwiUTMiLCJRNCJdKVt0dF0pOlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiMXN0IHF1YXJ0ZXIiLCIybmQgcXVhcnRlciIsIjNyZCBxdWFydGVyIiwiNHRoIHF1YXJ0ZXIiXSlbdHRdKTticmVhaztjYXNlIDEwMDpndD1yLnEuZ2V0RGF0ZSgpLFhkKHQsZ3Qsbik7YnJlYWs7Y2FzZSAxMDk6az1zLnEuZ2V0TWludXRlcygpLFhkKHQsayxuKTticmVhaztjYXNlIDExNTpoPXMucS5nZXRTZWNvbmRzKCksWGQodCxoLG4pO2JyZWFrO2Nhc2UgMTIyOm48ND9Wcih0LG8uY1swXSk6VnIodCxvLmNbMV0pO2JyZWFrO2Nhc2UgMTE4OlZyKHQsby5iKTticmVhaztjYXNlIDkwOm48Mz9Wcih0LFZnbihvKSk6bj09Mz9Wcih0LEtnbihvKSk6VnIodCxZZ24oby5hKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBTeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpO2lmKF91ZShlKSx3PXUoU3QoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MiksQz11KFN0KCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYyksMCksODIpLGQ9TW8odyksaz1NbyhDKSxoPSghZS5hJiYoZS5hPW5ldyBoZShaaSxlLDYsNikpLGUuYSkuaT09MD9udWxsOnUoU3QoKCFlLmEmJihlLmE9bmV3IGhlKFppLGUsNiw2KSksZS5hKSwwKSwyMDIpLFNlPXUoSm4odC5hLGQpLDEwKSx6bj11KEpuKHQuYSxrKSwxMCksV2U9bnVsbCxocj1udWxsLEV0KHcsMTg2KSYmKGNlPXUoSm4odC5hLHcpLDI5OSksRXQoY2UsMTEpP1dlPXUoY2UsMTEpOkV0KGNlLDEwKSYmKFNlPXUoY2UsMTApLFdlPXUoRmUoU2UuaiwwKSwxMSkpKSxFdChDLDE4NikmJihSbj11KEpuKHQuYSxDKSwyOTkpLEV0KFJuLDExKT9ocj11KFJuLDExKTpFdChSbiwxMCkmJih6bj11KFJuLDEwKSxocj11KEZlKHpuLmosMCksMTEpKSksIVNlfHwhem4pdGhyb3cgcnQobmV3IEY5KCJUaGUgc291cmNlIG9yIHRoZSB0YXJnZXQgb2YgZWRnZSAiK2UrIiBjb3VsZCBub3QgYmUgZm91bmQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gYW4gZWRnZSBjb25uZWN0cyBhIG5vZGUgbGFpZCBvdXQgYnkgRUxLIExheWVyZWQgdG8gYSBub2RlIGluIGFub3RoZXIgbGV2ZWwgb2YgaGllcmFyY2h5IGxhaWQgb3V0IGJ5IGVpdGhlciBhbm90aGVyIGluc3RhbmNlIG9mIEVMSyBMYXllcmVkIG9yIGFub3RoZXIgbGF5b3V0IGFsZ29yaXRobSBhbGx0b2dldGhlci4gVGhlIGZvcm1lciBjYW4gYmUgc29sdmVkIGJ5IHNldHRpbmcgdGhlIGhpZXJhcmNoeUhhbmRsaW5nIG9wdGlvbiB0byBJTkNMVURFX0NISUxEUkVOLiIpKTtmb3IoWT1uZXcgenYsTG8oWSxlKSxKdChZLChzZSgpLF9pKSxlKSxKdChZLChUZSgpLF9vKSxudWxsKSxIPXUoUShyLEdjKSwyMSksU2U9PXpuJiZILkZjKChvbygpLHdTKSksV2V8fChZdD0oc28oKSxldSksUWU9bnVsbCxoJiZIMyh1KFEoU2Usb3MpLDk4KSkmJihRZT1uZXcgJGUoaC5qLGguayksRlp0KFFlLHJJKGUpKSxmSnQoUWUsbiksWm0oayxkKSYmKFl0PUp1LExpKFFlLFNlLm4pKSksV2U9VGxlKFNlLFFlLFl0LHIpKSxocnx8KFl0PShzbygpLEp1KSxwaT1udWxsLGgmJkgzKHUoUSh6bixvcyksOTgpKSYmKHBpPW5ldyAkZShoLmIsaC5jKSxGWnQocGksckkoZSkpLGZKdChwaSxuKSksaHI9VGxlKHpuLHBpLFl0LEZhKHpuKSkpLERhKFksV2UpLHNhKFksaHIpLChXZS5lLmMubGVuZ3RoPjF8fFdlLmcuYy5sZW5ndGg+MXx8aHIuZS5jLmxlbmd0aD4xfHxoci5nLmMubGVuZ3RoPjEpJiZILkZjKChvbygpLHZTKSksRj1uZXcgZXIoKCFlLm4mJihlLm49bmV3IGhlKHFvLGUsMSw3KSksZS5uKSk7Ri5lIT1GLmkuZ2MoKTspaWYoTT11KGRyKEYpLDEzNyksIWplKFJlKHFlKE0sQjIpKSkmJk0uYSlzd2l0Y2godHQ9T2l0KE0pLHVlKFkuYix0dCksdShRKHR0LE1kKSwyNzIpLmcpe2Nhc2UgMTpjYXNlIDI6SC5GYygob28oKSxoNykpO2JyZWFrO2Nhc2UgMDpILkZjKChvbygpLGw3KSksSnQodHQsTWQsKEExKCksXzcpKX1pZihvPXUoUShyLEVTKSwzMTQpLGd0PXUoUShyLHJWKSwzMTUpLHM9bz09KFl4KCksd08pfHxndD09KGFfKCksbGh0KSxoJiYoIWguYSYmKGguYT1uZXcgU3MoSGgsaCw1KSksaC5hKS5pIT0wJiZzKXtmb3IoTHQ9c0QoaCksVj1uZXcgRHUsQnQ9ZWkoTHQsMCk7QnQuYiE9QnQuZC5jOylfdD11KHRpKEJ0KSw4KSxuaShWLG5ldyB5byhfdCkpO0p0KFksSlR0LFYpfXJldHVybiBZfWZ1bmN0aW9uIHo1bih0KXt0LmdifHwodC5nYj0hMCx0LmI9aWModCwwKSxlcyh0LmIsMTgpLFBpKHQuYiwxOSksdC5hPWljKHQsMSksZXModC5hLDEpLFBpKHQuYSwyKSxQaSh0LmEsMyksUGkodC5hLDQpLFBpKHQuYSw1KSx0Lm89aWModCwyKSxlcyh0Lm8sOCksZXModC5vLDkpLFBpKHQubywxMCksUGkodC5vLDExKSxQaSh0Lm8sMTIpLFBpKHQubywxMyksUGkodC5vLDE0KSxQaSh0Lm8sMTUpLFBpKHQubywxNiksUGkodC5vLDE3KSxQaSh0Lm8sMTgpLFBpKHQubywxOSksUGkodC5vLDIwKSxQaSh0Lm8sMjEpLFBpKHQubywyMiksUGkodC5vLDIzKSxUbyh0Lm8pLFRvKHQubyksVG8odC5vKSxUbyh0Lm8pLFRvKHQubyksVG8odC5vKSxUbyh0Lm8pLFRvKHQubyksVG8odC5vKSxUbyh0Lm8pLHQucD1pYyh0LDMpLGVzKHQucCwyKSxlcyh0LnAsMyksZXModC5wLDQpLGVzKHQucCw1KSxQaSh0LnAsNiksUGkodC5wLDcpLFRvKHQucCksVG8odC5wKSx0LnE9aWModCw0KSxlcyh0LnEsOCksdC52PWljKHQsNSksUGkodC52LDkpLFRvKHQudiksVG8odC52KSxUbyh0LnYpLHQudz1pYyh0LDYpLGVzKHQudywyKSxlcyh0LncsMyksZXModC53LDQpLFBpKHQudyw1KSx0LkI9aWModCw3KSxQaSh0LkIsMSksVG8odC5CKSxUbyh0LkIpLFRvKHQuQiksdC5RPWljKHQsOCksUGkodC5RLDApLFRvKHQuUSksdC5SPWljKHQsOSksZXModC5SLDEpLHQuUz1pYyh0LDEwKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSx0LlQ9aWModCwxMSksUGkodC5ULDEwKSxQaSh0LlQsMTEpLFBpKHQuVCwxMiksUGkodC5ULDEzKSxQaSh0LlQsMTQpLFRvKHQuVCksVG8odC5UKSx0LlU9aWModCwxMiksZXModC5VLDIpLGVzKHQuVSwzKSxQaSh0LlUsNCksUGkodC5VLDUpLFBpKHQuVSw2KSxQaSh0LlUsNyksVG8odC5VKSx0LlY9aWModCwxMyksUGkodC5WLDEwKSx0Llc9aWModCwxNCksZXModC5XLDE4KSxlcyh0LlcsMTkpLGVzKHQuVywyMCksUGkodC5XLDIxKSxQaSh0LlcsMjIpLFBpKHQuVywyMyksdC5iYj1pYyh0LDE1KSxlcyh0LmJiLDEwKSxlcyh0LmJiLDExKSxlcyh0LmJiLDEyKSxlcyh0LmJiLDEzKSxlcyh0LmJiLDE0KSxlcyh0LmJiLDE1KSxlcyh0LmJiLDE2KSxQaSh0LmJiLDE3KSxUbyh0LmJiKSxUbyh0LmJiKSx0LmViPWljKHQsMTYpLGVzKHQuZWIsMiksZXModC5lYiwzKSxlcyh0LmViLDQpLGVzKHQuZWIsNSksZXModC5lYiw2KSxlcyh0LmViLDcpLFBpKHQuZWIsOCksUGkodC5lYiw5KSx0LmFiPWljKHQsMTcpLGVzKHQuYWIsMCksZXModC5hYiwxKSx0Lkg9aWModCwxOCksUGkodC5ILDApLFBpKHQuSCwxKSxQaSh0LkgsMiksUGkodC5ILDMpLFBpKHQuSCw0KSxQaSh0LkgsNSksVG8odC5IKSx0LmRiPWljKHQsMTkpLFBpKHQuZGIsMiksdC5jPWFpKHQsMjApLHQuZD1haSh0LDIxKSx0LmU9YWkodCwyMiksdC5mPWFpKHQsMjMpLHQuaT1haSh0LDI0KSx0Lmc9YWkodCwyNSksdC5qPWFpKHQsMjYpLHQuaz1haSh0LDI3KSx0Lm49YWkodCwyOCksdC5yPWFpKHQsMjkpLHQucz1haSh0LDMwKSx0LnQ9YWkodCwzMSksdC51PWFpKHQsMzIpLHQuZmI9YWkodCwzMyksdC5BPWFpKHQsMzQpLHQuQz1haSh0LDM1KSx0LkQ9YWkodCwzNiksdC5GPWFpKHQsMzcpLHQuRz1haSh0LDM4KSx0Lkk9YWkodCwzOSksdC5KPWFpKHQsNDApLHQuTD1haSh0LDQxKSx0Lk09YWkodCw0MiksdC5OPWFpKHQsNDMpLHQuTz1haSh0LDQ0KSx0LlA9YWkodCw0NSksdC5YPWFpKHQsNDYpLHQuWT1haSh0LDQ3KSx0Llo9YWkodCw0OCksdC4kPWFpKHQsNDkpLHQuXz1haSh0LDUwKSx0LmNiPWFpKHQsNTEpLHQuSz1haSh0LDUyKSl9ZnVuY3Rpb24gY2koKXtjaT1aO3ZhciB0LGU7VlM9bmV3IEdpKFUxZSksQzc9bmV3IEdpKFcxZSksTFN0PShRZCgpLFpodCksSDNlPW5ldyBtbihna3QsTFN0KSwkNj1uZXcgbW4oYjYsbnVsbCksRzNlPW5ldyBHaShjOHQpLElTdD0oY3koKSxqaShlZnQsY3Qob3QobmZ0LDEpLGFlLDI5MSwwLFt0ZnRdKSkpLEJWPW5ldyBtbihjSCxJU3QpLFVPPW5ldyBtbihLRCwoRm4oKSwhMSkpLERTdD0oYW8oKSxjMCksanc9bmV3IG1uKHZrdCxEU3QpLFBTdD0ocTAoKSxnZnQpLE5TdD1uZXcgbW4oVUQsUFN0KSxSU3Q9bmV3IG1uKGdILCExKSxqU3Q9KCQwKCksSFYpLHI1PW5ldyBtbihvSCxqU3QpLFlTdD1uZXcgTXYoMTIpLHEyPW5ldyBtbih3dyxZU3QpLFJWPW5ldyBtbigkRCwhMSksJFN0PW5ldyBtbihwY3QsITEpLFlPPW5ldyBtbihGXywhMSksdEF0PShvYSgpLHliKSxVUz1uZXcgbW4oTm90LHRBdCksejY9bmV3IEdpKHVIKSx6Vj1uZXcgR2koakQpLGZmdD1uZXcgR2koSHEpLGRmdD1uZXcgR2koUF8pLHpTdD1uZXcgRHUsaTU9bmV3IG1uKF9rdCx6U3QpLFUzZT1uZXcgbW4oTGt0LCExKSxXM2U9bmV3IG1uKE1rdCwhMSkscVN0PW5ldyBNOSxLTz1uZXcgbW4oRGt0LHFTdCksJFY9bmV3IG1uKGZrdCwhMSksUTNlPW5ldyBtbihLMWUsMSksbmV3IG1uKFkxZSwhMCksZGUoMCksbmV3IG1uKFgxZSxkZSgxMDApKSxuZXcgbW4oUTFlLCExKSxkZSgwKSxuZXcgbW4oWjFlLGRlKDRlMykpLGRlKDApLG5ldyBtbihKMWUsZGUoNDAwKSksbmV3IG1uKHRkZSwhMSksbmV3IG1uKGVkZSwhMSksbmV3IG1uKG5kZSwhMCksbmV3IG1uKHJkZSwhMSksTVN0PShBeigpLHdmdCksVjNlPW5ldyBtbihvOHQsTVN0KSxaM2U9bmV3IG1uKHRrdCwxMCksSjNlPW5ldyBtbihla3QsMTApLGlBdD1uZXcgbW4oQW90LDIwKSx0NGU9bmV3IG1uKG5rdCwxMCksc0F0PW5ldyBtbihPb3QsMiksZTRlPW5ldyBtbihya3QsMTApLGFBdD1uZXcgbW4oaWt0LDApLHFWPW5ldyBtbihva3QsNSksb0F0PW5ldyBtbihza3QsMSksY0F0PW5ldyBtbihha3QsMSksSDI9bmV3IG1uKGt5LDIwKSxuNGU9bmV3IG1uKGNrdCwxMCksaEF0PW5ldyBtbih1a3QsMTApLHE2PW5ldyBHaShsa3QpLGxBdD1uZXcgY1V0LHVBdD1uZXcgbW4oT2t0LGxBdCksWTNlPW5ldyBHaShnY3QpLFhTdD0hMSxLM2U9bmV3IG1uKGRjdCxYU3QpLEdTdD1uZXcgTXYoNSksSFN0PW5ldyBtbih3a3QsR1N0KSxWU3Q9KGZ5KCksZT11KEhmKGxvKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSxzNT1uZXcgbW4oUkUsVlN0KSxaU3Q9KGM0KCksbWIpLFFTdD1uZXcgbW4oeGt0LFpTdCksb2Z0PW5ldyBHaShra3QpLGNmdD1uZXcgR2koRWt0KSx1ZnQ9bmV3IEdpKFRrdCksYWZ0PW5ldyBHaShDa3QpLFVTdD0odD11KEhmKHRBKSw5KSxuZXcgcmgodCx1KHVmKHQsdC5sZW5ndGgpLDkpLDApKSx6Mj1uZXcgbW4oTDQsVVN0KSxLU3Q9dW4oKGNsKCksTTcpKSx2Yj1uZXcgbW4odjYsS1N0KSxXU3Q9bmV3ICRlKDAsMCksYTU9bmV3IG1uKHc2LFdTdCksalY9bmV3IG1uKGZjdCwhMSksT1N0PShBMSgpLF83KSxpZnQ9bmV3IG1uKFNrdCxPU3QpLHJmdD1uZXcgbW4oR3EsITEpLGRlKDEpLG5ldyBtbihpZGUsbnVsbCksSlN0PW5ldyBHaShJa3QpLGxmdD1uZXcgR2koQWt0KSxyQXQ9KGJlKCksWm8pLG81PW5ldyBtbihka3QsckF0KSxobD1uZXcgR2koaGt0KSxlQXQ9KFF1KCksdW4oeGIpKSxLeT1uZXcgbW4oakUsZUF0KSxoZnQ9bmV3IG1uKG1rdCwhMSksbkF0PW5ldyBtbih5a3QsITApLFdPPW5ldyBtbihwa3QsITEpLHNmdD1uZXcgbW4oYmt0LCExKSxGU3Q9bmV3IG1uKExvdCwxKSxCU3Q9KHRxKCksYmZ0KSxuZXcgbW4oc2RlLEJTdCksWDNlPSEwfWZ1bmN0aW9uIHNlKCl7c2U9Wjt2YXIgdCxlO19pPW5ldyBHaShsNnQpLFlUdD1uZXcgR2koImNvb3JkaW5hdGVPcmlnaW4iKSxSbHQ9bmV3IEdpKCJwcm9jZXNzb3JzIiksS1R0PW5ldyBPcygiY29tcG91bmROb2RlIiwoRm4oKSwhMSkpLGtPPW5ldyBPcygiaW5zaWRlQ29ubmVjdGlvbnMiLCExKSxKVHQ9bmV3IEdpKCJvcmlnaW5hbEJlbmRwb2ludHMiKSx0OXQ9bmV3IEdpKCJvcmlnaW5hbER1bW15Tm9kZVBvc2l0aW9uIiksZTl0PW5ldyBHaSgib3JpZ2luYWxMYWJlbEVkZ2UiKSxUTz1uZXcgR2koInJlcHJlc2VudGVkTGFiZWxzIiksbVM9bmV3IEdpKCJlbmRMYWJlbHMiKSxNNj1uZXcgR2koImVuZExhYmVsLm9yaWdpbiIpLEQ2PW5ldyBPcygibGFiZWxTaWRlIiwoamwoKSxaTykpLFc0PW5ldyBPcygibWF4RWRnZVRoaWNrbmVzcyIsMCksJDE9bmV3IE9zKCJyZXZlcnNlZCIsITEpLE82PW5ldyBHaSh6ZmUpLG4xPW5ldyBPcygibG9uZ0VkZ2VTb3VyY2UiLG51bGwpLFJoPW5ldyBPcygibG9uZ0VkZ2VUYXJnZXQiLG51bGwpLFB5PW5ldyBPcygibG9uZ0VkZ2VIYXNMYWJlbER1bW1pZXMiLCExKSxFTz1uZXcgT3MoImxvbmdFZGdlQmVmb3JlTGFiZWxEdW1teSIsITEpLEhHPW5ldyBPcygiZWRnZUNvbnN0cmFpbnQiLCh1MigpLHhsdCkpLEl3PW5ldyBHaSgiaW5MYXllckxheW91dFVuaXQiKSxPMj1uZXcgT3MoImluTGF5ZXJDb25zdHJhaW50IiwoQjAoKSx5TykpLEk2PW5ldyBPcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnQiLG5ldyBsZSksWlR0PW5ldyBPcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnRCZXR3ZWVuTm9uRHVtbWllcyIsITEpLFp1PW5ldyBHaSgicG9ydER1bW15IikscUc9bmV3IE9zKCJjcm9zc2luZ0hpbnQiLGRlKDApKSxHYz1uZXcgT3MoImdyYXBoUHJvcGVydGllcyIsKGU9dShIZihBbHQpLDkpLG5ldyByaChlLHUodWYoZSxlLmxlbmd0aCksOSksMCkpKSxvYz1uZXcgT3MoImV4dGVybmFsUG9ydFNpZGUiLChiZSgpLFpvKSksUVR0PW5ldyBPcygiZXh0ZXJuYWxQb3J0U2l6ZSIsbmV3IFRhKSxPbHQ9bmV3IEdpKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW1pZXMiKSxHRz1uZXcgR2koImV4dGVybmFsUG9ydFJlcGxhY2VkRHVtbXkiKSxOeT1uZXcgT3MoImV4dGVybmFsUG9ydENvbm5lY3Rpb25zIiwodD11KEhmKFhhKSw5KSxuZXcgcmgodCx1KHVmKHQsdC5sZW5ndGgpLDkpLDApKSksRHc9bmV3IE9zKE9mZSwwKSxXVHQ9bmV3IEdpKCJiYXJ5Y2VudGVyQXNzb2NpYXRlcyIpLE42PW5ldyBHaSgiVG9wU2lkZUNvbW1lbnRzIiksTDY9bmV3IEdpKCJCb3R0b21TaWRlQ29tbWVudHMiKSx6Rz1uZXcgR2koIkNvbW1lbnRDb25uZWN0aW9uUG9ydCIpLFBsdD1uZXcgT3MoImlucHV0Q29sbGVjdCIsITEpLEJsdD1uZXcgT3MoIm91dHB1dENvbGxlY3QiLCExKSx4Tz1uZXcgT3MoImN5Y2xpYyIsITEpLFhUdD1uZXcgR2koImNyb3NzSGllcmFyY2h5TWFwIiksJGx0PW5ldyBHaSgidGFyZ2V0T2Zmc2V0IiksbmV3IE9zKCJzcGxpbmVMYWJlbFNpemUiLG5ldyBUYSksWTQ9bmV3IEdpKCJzcGFjaW5ncyIpLFZHPW5ldyBPcygicGFydGl0aW9uQ29uc3RyYWludCIsITEpLEx3PW5ldyBHaSgiYnJlYWtpbmdQb2ludC5pbmZvIiksaTl0PW5ldyBHaSgic3BsaW5lcy5zdXJ2aXZpbmdFZGdlIiksTjI9bmV3IEdpKCJzcGxpbmVzLnJvdXRlLnN0YXJ0IiksWDQ9bmV3IEdpKCJzcGxpbmVzLmVkZ2VDaGFpbiIpLHI5dD1uZXcgR2koIm9yaWdpbmFsUG9ydENvbnN0cmFpbnRzIiksZDc9bmV3IEdpKCJzZWxmTG9vcEhvbGRlciIpLGc3PW5ldyBHaSgic3BsaW5lcy5uc1BvcnRZIiksVGM9bmV3IEdpKCJtb2RlbE9yZGVyIiksRmx0PW5ldyBHaSgibG9uZ0VkZ2VUYXJnZXROb2RlIiksTXc9bmV3IE9zKGcxZSwhMSksSzQ9bmV3IE9zKGcxZSwhMSksTmx0PW5ldyBHaSgibGF5ZXJDb25zdHJhaW50cy5oaWRkZW5Ob2RlcyIpLG45dD1uZXcgR2koImxheWVyQ29uc3RyYWludHMub3Bwb3NpZGVQb3J0Iiksamx0PW5ldyBHaSgidGFyZ2V0Tm9kZS5tb2RlbE9yZGVyIil9ZnVuY3Rpb24gQXh0KCl7QXh0PVoscDl0PShUSSgpLE5HKSxRMmU9bmV3IG1uKHc2dCxwOXQpLHV2ZT1uZXcgbW4obTZ0LChGbigpLCExKSkseDl0PSh4JCgpLERsdCksZ3ZlPW5ldyBtbihLcSx4OXQpLEx2ZT1uZXcgbW4oeTZ0LCExKSxNdmU9bmV3IG1uKHg2dCwhMCksXzJlPW5ldyBtbihrNnQsITEpLEw5dD0oeUkoKSxkaHQpLFZ2ZT1uZXcgbW4oRTZ0LEw5dCksZGUoMSksSnZlPW5ldyBtbihUNnQsZGUoNykpLHR3ZT1uZXcgbW4oQzZ0LCExKSxsdmU9bmV3IG1uKF82dCwhMSksZzl0PSh2MigpLG1sdCksWDJlPW5ldyBtbigkb3QsZzl0KSxUOXQ9KFp6KCksYWh0KSxBdmU9bmV3IG1uKEdELFQ5dCksazl0PShoaCgpLENPKSx5dmU9bmV3IG1uKFM2dCxrOXQpLGRlKC0xKSxtdmU9bmV3IG1uKEE2dCxkZSgtMSkpLGRlKC0xKSx4dmU9bmV3IG1uKEw2dCxkZSgtMSkpLGRlKC0xKSxrdmU9bmV3IG1uKHpvdCxkZSg0KSksZGUoLTEpLFR2ZT1uZXcgbW4ocW90LGRlKDIpKSxFOXQ9KHc0KCksaFYpLFN2ZT1uZXcgbW4oSG90LEU5dCksZGUoMCksX3ZlPW5ldyBtbihHb3QsZGUoMCkpLHZ2ZT1uZXcgbW4oVm90LGRlKHZpKSksZDl0PShZeCgpLFM2KSxZMmU9bmV3IG1uKCRfLGQ5dCksRjJlPW5ldyBtbihNNnQsITEpLEgyZT1uZXcgbW4oVW90LC4xKSxXMmU9bmV3IG1uKFdvdCwhMSksZGUoLTEpLFYyZT1uZXcgbW4oSTZ0LGRlKC0xKSksZGUoLTEpLFUyZT1uZXcgbW4oRDZ0LGRlKC0xKSksZGUoMCksQjJlPW5ldyBtbihPNnQsZGUoNDApKSxmOXQ9KFc4KCksTWx0KSx6MmU9bmV3IG1uKEtvdCxmOXQpLGg5dD1tTyxSMmU9bmV3IG1uKFlxLGg5dCksQTl0PShhXygpLEFTKSxHdmU9bmV3IG1uKE00LEE5dCksUHZlPW5ldyBHaShYcSksQzl0PShiSSgpLEZHKSxJdmU9bmV3IG1uKFlvdCxDOXQpLF85dD0obkQoKSxCRyksT3ZlPW5ldyBtbihYb3QsXzl0KSxSdmU9bmV3IG1uKFFvdCwuMyksJHZlPW5ldyBHaShab3QpLFM5dD0oc3koKSxsViksenZlPW5ldyBtbihKb3QsUzl0KSx3OXQ9KHV6KCkscGh0KSxudmU9bmV3IG1uKE42dCx3OXQpLG05dD0obEkoKSxiaHQpLHJ2ZT1uZXcgbW4oUDZ0LG05dCkseTl0PSh0RSgpLElTKSxpdmU9bmV3IG1uKFFxLHk5dCksYXZlPW5ldyBtbihacSwuMiksdHZlPW5ldyBtbih0Y3QsMiksWXZlPW5ldyBtbihGNnQsbnVsbCksUXZlPW5ldyBtbihCNnQsMTApLFh2ZT1uZXcgbW4oUjZ0LDEwKSxadmU9bmV3IG1uKGo2dCwyMCksZGUoMCksVXZlPW5ldyBtbigkNnQsZGUoMCkpLGRlKDApLFd2ZT1uZXcgbW4oejZ0LGRlKDApKSxkZSgwKSxLdmU9bmV3IG1uKHE2dCxkZSgwKSksUzJlPW5ldyBtbihlY3QsITEpLG85dD0oZ0UoKSxiUyksTDJlPW5ldyBtbihINnQsbzl0KSxhOXQ9KEQkKCksdmx0KSxBMmU9bmV3IG1uKEc2dCxhOXQpLGZ2ZT1uZXcgbW4oSnEsITEpLGRlKDApLGh2ZT1uZXcgbW4obmN0LGRlKDE2KSksZGUoMCksZHZlPW5ldyBtbihyY3QsZGUoNSkpLEQ5dD0oZ3ooKSxtaHQpLHl3ZT1uZXcgbW4oWTAsRDl0KSxld2U9bmV3IG1uKHRILDEwKSxpd2U9bmV3IG1uKGVILDEpLEk5dD0oWCQoKSxPRyksaHdlPW5ldyBtbih6XyxJOXQpLG93ZT1uZXcgR2koaWN0KSxNOXQ9ZGUoMSksZGUoMCksdXdlPW5ldyBtbihzY3QsTTl0KSxPOXQ9KG96KCksd2h0KSxUd2U9bmV3IG1uKG5ILE85dCkseHdlPW5ldyBHaShySCksYndlPW5ldyBtbihpSCwhMCksZ3dlPW5ldyBtbihzSCwyKSx3d2U9bmV3IG1uKGFjdCwhMCksdjl0PShucSgpLFBHKSxKMmU9bmV3IG1uKFY2dCx2OXQpLGI5dD0oaTYoKSxvNyksWjJlPW5ldyBtbihVNnQsYjl0KSxsOXQ9KGowKCksZ2IpLFAyZT1uZXcgbW4oYUgsbDl0KSxOMmU9bmV3IG1uKFc2dCwhMSksYzl0PShldygpLCQ0KSxNMmU9bmV3IG1uKG9jdCxjOXQpLHU5dD0oWUMoKSxvaHQpLE8yZT1uZXcgbW4oSzZ0LHU5dCksSTJlPW5ldyBtbihjY3QsMCksRDJlPW5ldyBtbih1Y3QsMCksYnZlPXlsdCxwdmU9d08sRXZlPWNWLEN2ZT1jVix3dmU9c2h0LEcyZT0oJDAoKSxaZyksSzJlPVM2LHEyZT1TNixqMmU9UzYsJDJlPVpnLEZ2ZT1MUyxCdmU9QVMsRHZlPUFTLE52ZT1BUyxqdmU9aGh0LEh2ZT1MUyxxdmU9TFMsc3ZlPShxMCgpLEg2KSxvdmU9SDYsY3ZlPUlTLGV2ZT1YTyxud2U9eDcscndlPVZ5LHN3ZT14Nyxhd2U9VnksZndlPXg3LGR3ZT1WeSxjd2U9d2x0LGx3ZT1PRyxDd2U9eDcsX3dlPVZ5LGt3ZT14NyxFd2U9VnksdndlPVZ5LHB3ZT1WeSxtd2U9Vnl9ZnVuY3Rpb24gcm8oKXtybz1aLFU3dD1uZXcgd3MoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLEg3dD1uZXcgd3MoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxoUz1uZXcgd3MoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMikscmx0PW5ldyB3cygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSxoVHQ9bmV3IHdzKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxnRz1uZXcgd3MoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSxURz1uZXcgd3MoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLHI3PW5ldyB3cygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLHVUdD1uZXcgd3MoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLHRUdD1uZXcgd3MoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxvVHQ9bmV3IHdzKCJOT0RFX1BST01PVElPTiIsMTApLG43PW5ldyB3cygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksbFR0PW5ldyB3cygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSxRN3Q9bmV3IHdzKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLGZUdD1uZXcgd3MoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksQjd0PW5ldyB3cygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSx3Rz1uZXcgd3MoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLGlsdD1uZXcgd3MoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxmRz1uZXcgd3MoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCkseEc9bmV3IHdzKCJQT1JUX0xJU1RfU09SVEVSIiwxOSksZ1R0PW5ldyB3cygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLHlHPW5ldyB3cygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxSN3Q9bmV3IHdzKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxjVHQ9bmV3IHdzKGExZSwyMykscFR0PW5ldyB3cyhvMWUsMjQpLGtHPW5ldyB3cygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSxkVHQ9bmV3IHdzKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksZEc9bmV3IHdzKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLEs3dD1uZXcgd3MoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxzVHQ9bmV3IHdzKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLGlUdD1uZXcgd3MoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCksQ0c9bmV3IHdzKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksejd0PW5ldyB3cygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksaEc9bmV3IHdzKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksYkc9bmV3IHdzKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLCQ3dD1uZXcgd3MoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLGU3PW5ldyB3cygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLG5UdD1uZXcgd3MoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSxaN3Q9bmV3IHdzKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLGFUdD1uZXcgd3MoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSksZlM9bmV3IHdzKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSxHN3Q9bmV3IHdzKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSkscTd0PW5ldyB3cygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksclR0PW5ldyB3cygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLEo3dD1uZXcgd3MoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSx2Rz1uZXcgd3MoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSxFRz1uZXcgd3MoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0Niksajd0PW5ldyB3cygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLG1HPW5ldyB3cygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksZVR0PW5ldyB3cygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxwRz1uZXcgd3MoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxZN3Q9bmV3IHdzKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksVzd0PW5ldyB3cygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLGJPPW5ldyB3cygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLGxHPW5ldyB3cygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxYN3Q9bmV3IHdzKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSksVjd0PW5ldyB3cygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiBxNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzLFhsLEtoLFcxLGhVLGJOLGRBLHZOLFA3LE5mdCx6NWUsUGZ0LGlwLFZ3LEY3LHdOLG1OLFk2LEZmdCxnQSxxNWUsTUx0LFV3LHBBLEJmdCxYNixiQSxpMyx2QSxSZnQsSDVlO2ZvcihNTHQ9MCxwaT1lLEtoPTAsYk49cGkubGVuZ3RoO0toPGJOOysrS2gpZm9yKHpuPXBpW0toXSxWdz1uZXcgUyh6bi5qKTtWdy5hPFZ3LmMuYy5sZW5ndGg7KXtmb3IoaXA9dShKKFZ3KSwxMSksd049MCxkPW5ldyBTKGlwLmcpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDE3KSx6bi5jIT1oLmQuaS5jJiYrK3dOO3dOPjAmJih0LmFbaXAucF09TUx0KyspfWZvcihiQT0wLFJzPW4sVzE9MCxkQT1Scy5sZW5ndGg7VzE8ZEE7KytXMSl7Zm9yKHpuPVJzW1cxXSx2Tj0wLFZ3PW5ldyBTKHpuLmopO1Z3LmE8VncuYy5jLmxlbmd0aCYmKGlwPXUoSihWdyksMTEpLGlwLmo9PShiZSgpLE5uKSk7KWZvcihkPW5ldyBTKGlwLmUpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDE3KSx6bi5jIT1oLmMuaS5jKXsrK3ZOO2JyZWFrfWZvcihOZnQ9MCxtTj1uZXcgaGEoem4uaix6bi5qLmMubGVuZ3RoKTttTi5iPjA7KXtmb3IoaXA9KFFuKG1OLmI+MCksdShtTi5hLlhiKG1OLmM9LS1tTi5iKSwxMSkpLHdOPTAsZD1uZXcgUyhpcC5lKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksem4uYyE9aC5jLmkuYyYmKyt3Tjt3Tj4wJiYoaXAuaj09KGJlKCksTm4pPyh0LmFbaXAucF09YkEsKytiQSk6KHQuYVtpcC5wXT1iQSt2TitOZnQsKytOZnQpKX1iQSs9TmZ0fWZvcihGNz1uZXcgQ3IsVj1uZXcgQTAsaHI9ZSxYbD0wLGhVPWhyLmxlbmd0aDtYbDxoVTsrK1hsKWZvcih6bj1ocltYbF0sQmZ0PW5ldyBTKHpuLmopO0JmdC5hPEJmdC5jLmMubGVuZ3RoOylmb3IocEE9dShKKEJmdCksMTEpLGQ9bmV3IFMocEEuZyk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTcpLHZBPWguZCx6bi5jIT12QS5pLmMpaWYoVXc9dShlYyhBbyhGNy5mLHBBKSksNDY3KSxpMz11KGVjKEFvKEY3LmYsdkEpKSw0NjcpLCFVdyYmIWkzKUg9bmV3IHFXdCxWLmEuemMoSCxWKSx1ZShILmEsaCksdWUoSC5kLHBBKSxzdShGNy5mLHBBLEgpLHVlKEguZCx2QSksc3UoRjcuZix2QSxIKTtlbHNlIGlmKCFVdyl1ZShpMy5hLGgpLHVlKGkzLmQscEEpLHN1KEY3LmYscEEsaTMpO2Vsc2UgaWYoIWkzKXVlKFV3LmEsaCksdWUoVXcuZCx2QSksc3UoRjcuZix2QSxVdyk7ZWxzZSBpZihVdz09aTMpdWUoVXcuYSxoKTtlbHNle2Zvcih1ZShVdy5hLGgpLFBmdD1uZXcgUyhpMy5kKTtQZnQuYTxQZnQuYy5jLmxlbmd0aDspejVlPXUoSihQZnQpLDExKSxzdShGNy5mLHo1ZSxVdyk7QXMoVXcuYSxpMy5hKSxBcyhVdy5kLGkzLmQpLFYuYS5CYyhpMykhPW51bGx9Zm9yKFk9dShYSShWLFB0KGZ4bix7MzoxLDQ6MSw1OjEsMTk0NjoxfSw0NjcsVi5hLmdjKCksMCwxKSksMTk0NiksUm49ZVswXS5jLHE1ZT1uWzBdLmMsQz1ZLE09MCxGPUMubGVuZ3RoO008RjsrK00pZm9yKGs9Q1tNXSxrLmU9TUx0LGsuZj1iQSxWdz1uZXcgUyhrLmQpO1Z3LmE8VncuYy5jLmxlbmd0aDspaXA9dShKKFZ3KSwxMSksWTY9dC5hW2lwLnBdLGlwLmkuYz09Um4/KFk2PGsuZSYmKGsuZT1ZNiksWTY+ay5iJiYoay5iPVk2KSk6aXAuaS5jPT1xNWUmJihZNjxrLmYmJihrLmY9WTYpLFk2PmsuYyYmKGsuYz1ZNikpO2ZvcihEOChZLDAsWS5sZW5ndGgsbnVsbCksWDY9UHQoVHIsWHIsMjUsWS5sZW5ndGgsMTUsMSkscj1QdChUcixYciwyNSxiQSsxLDE1LDEpLGd0PTA7Z3Q8WS5sZW5ndGg7Z3QrKylYNltndF09WVtndF0uZixyW1g2W2d0XV09MTtmb3Iobz0wLEx0PTA7THQ8ci5sZW5ndGg7THQrKylyW0x0XT09MT9yW0x0XT1vOi0tbztmb3IoRmZ0PTAsX3Q9MDtfdDxYNi5sZW5ndGg7X3QrKylYNltfdF0rPXJbWDZbX3RdXSxGZnQ9Yi5NYXRoLm1heChGZnQsWDZbX3RdKzEpO2Zvcih3PTE7dzxGZnQ7KXcqPTI7Zm9yKEg1ZT0yKnctMSx3LT0xLFJmdD1QdChUcixYciwyNSxINWUsMTUsMSkscz0wLFdlPTA7V2U8WDYubGVuZ3RoO1dlKyspZm9yKFNlPVg2W1dlXSt3LCsrUmZ0W1NlXTtTZT4wOylTZSUyPjAmJihzKz1SZnRbU2UrMV0pLFNlPShTZS0xKS8yfDAsKytSZnRbU2VdO2ZvcihRZT1QdChwbWUsSWUsMzYyLFkubGVuZ3RoKjIsMCwxKSxCdD0wO0J0PFkubGVuZ3RoO0J0KyspUWVbMipCdF09bmV3IGUkKFlbQnRdLFlbQnRdLmUsWVtCdF0uYiwoQkMoKSxOUykpLFFlWzIqQnQrMV09bmV3IGUkKFlbQnRdLFlbQnRdLmIsWVtCdF0uZSxPUyk7Zm9yKEQ4KFFlLDAsUWUubGVuZ3RoLG51bGwpLFA3PTAsWXQ9MDtZdDxRZS5sZW5ndGg7WXQrKylzd2l0Y2goUWVbWXRdLmQuZyl7Y2FzZSAwOisrUDc7YnJlYWs7Y2FzZSAxOi0tUDcscys9UDd9Zm9yKGdBPVB0KHBtZSxJZSwzNjIsWS5sZW5ndGgqMiwwLDEpLGNlPTA7Y2U8WS5sZW5ndGg7Y2UrKylnQVsyKmNlXT1uZXcgZSQoWVtjZV0sWVtjZV0uZixZW2NlXS5jLChCQygpLE5TKSksZ0FbMipjZSsxXT1uZXcgZSQoWVtjZV0sWVtjZV0uYyxZW2NlXS5mLE9TKTtmb3IoRDgoZ0EsMCxnQS5sZW5ndGgsbnVsbCksUDc9MCx0dD0wO3R0PGdBLmxlbmd0aDt0dCsrKXN3aXRjaChnQVt0dF0uZC5nKXtjYXNlIDA6KytQNzticmVhaztjYXNlIDE6LS1QNyxzKz1QN31yZXR1cm4gc31mdW5jdGlvbiBnaSgpe2dpPVosZkE9bmV3IHZ2KDcpLGtMdD1uZXcgVmQoOCw5NCksbmV3IFZkKDgsNjQpLEVMdD1uZXcgVmQoOCwzNiksRDVlPW5ldyBWZCg4LDY1KSxPNWU9bmV3IFZkKDgsMTIyKSxONWU9bmV3IFZkKDgsOTApLEY1ZT1uZXcgVmQoOCw5OCksSTVlPW5ldyBWZCg4LDY2KSxQNWU9bmV3IFZkKDgsNjApLEI1ZT1uZXcgVmQoOCw2MikseEx0PW5ldyB2digxMSksbFU9bmV3IE5sKDQpLGpjKGxVLDQ4LDU3KSxONz1uZXcgTmwoNCksamMoTjcsNDgsNTcpLGpjKE43LDY1LDkwKSxqYyhONyw5NSw5NSksamMoTjcsOTcsMTIyKSxLNj1uZXcgTmwoNCksamMoSzYsOSw5KSxqYyhLNiwxMCwxMCksamMoSzYsMTIsMTIpLGpjKEs2LDEzLDEzKSxqYyhLNiwzMiwzMiksVEx0PWJ5KGxVKSxfTHQ9YnkoTjcpLENMdD1ieShLNiksTzc9bmV3IENyLGhBPW5ldyBDcixNNWU9Y3Qob3QoQWUsMSksdGUsMiw2LFsiQ24iLCJMdSIsIkxsIiwiTHQiLCJMbSIsIkxvIiwiTW4iLCJNZSIsIk1jIiwiTmQiLCJObCIsIk5vIiwiWnMiLCJabCIsIlpwIiwiQ2MiLCJDZiIsbnVsbCwiQ28iLCJDcyIsIlBkIiwiUHMiLCJQZSIsIlBjIiwiUG8iLCJTbSIsIlNjIiwiU2siLCJTbyIsIlBpIiwiUGYiLCJMIiwiTSIsIk4iLCJaIiwiQyIsIlAiLCJTIl0pLG1MdD1jdChvdChBZSwxKSx0ZSwyLDYsWyJCYXNpYyBMYXRpbiIsIkxhdGluLTEgU3VwcGxlbWVudCIsIkxhdGluIEV4dGVuZGVkLUEiLCJMYXRpbiBFeHRlbmRlZC1CIiwiSVBBIEV4dGVuc2lvbnMiLCJTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMiLCJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLCJHcmVlayIsIkN5cmlsbGljIiwiQXJtZW5pYW4iLCJIZWJyZXciLCJBcmFiaWMiLCJTeXJpYWMiLCJUaGFhbmEiLCJEZXZhbmFnYXJpIiwiQmVuZ2FsaSIsIkd1cm11a2hpIiwiR3VqYXJhdGkiLCJPcml5YSIsIlRhbWlsIiwiVGVsdWd1IiwiS2FubmFkYSIsIk1hbGF5YWxhbSIsIlNpbmhhbGEiLCJUaGFpIiwiTGFvIiwiVGliZXRhbiIsIk15YW5tYXIiLCJHZW9yZ2lhbiIsIkhhbmd1bCBKYW1vIiwiRXRoaW9waWMiLCJDaGVyb2tlZSIsIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiLCJPZ2hhbSIsIlJ1bmljIiwiS2htZXIiLCJNb25nb2xpYW4iLCJMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsIiwiR3JlZWsgRXh0ZW5kZWQiLCJHZW5lcmFsIFB1bmN0dWF0aW9uIiwiU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzIiwiQ3VycmVuY3kgU3ltYm9scyIsIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsIkxldHRlcmxpa2UgU3ltYm9scyIsIk51bWJlciBGb3JtcyIsIkFycm93cyIsIk1hdGhlbWF0aWNhbCBPcGVyYXRvcnMiLCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCIsIkNvbnRyb2wgUGljdHVyZXMiLCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiIsIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiLCJCb3ggRHJhd2luZyIsIkJsb2NrIEVsZW1lbnRzIiwiR2VvbWV0cmljIFNoYXBlcyIsIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsIkRpbmdiYXRzIiwiQnJhaWxsZSBQYXR0ZXJucyIsIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwiS2FuZ3hpIFJhZGljYWxzIiwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyIsIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsIkhpcmFnYW5hIiwiS2F0YWthbmEiLCJCb3BvbW9mbyIsIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iLCJLYW5idW4iLCJCb3BvbW9mbyBFeHRlbmRlZCIsIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiLCJDSksgQ29tcGF0aWJpbGl0eSIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIiwiWWkgU3lsbGFibGVzIiwiWWkgUmFkaWNhbHMiLCJIYW5ndWwgU3lsbGFibGVzIixyZ2UsIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLCJBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSIsIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiLCJTbWFsbCBGb3JtIFZhcmlhbnRzIiwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwiU3BlY2lhbHMiLCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyIsIk9sZCBJdGFsaWMiLCJHb3RoaWMiLCJEZXNlcmV0IiwiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsIk11c2ljYWwgU3ltYm9scyIsIk1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQiLCJUYWdzIl0pLHlMdD1jdChvdChUciwxKSxYciwyNSwxNSxbNjYzMDQsNjYzNTEsNjYzNTIsNjYzODMsNjY1NjAsNjY2MzksMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTgwOCwxMjA4MzEsMTMxMDcyLDE3Mzc4MiwxOTQ1NjAsMTk1MTAzLDkxNzUwNCw5MTc2MzFdKX1mdW5jdGlvbiBMcSgpe0xxPVoseHBlPW5ldyB1aCgiT1VUX1RfTCIsMCwoWHUoKSxTZCksKHd1KCkseWYpLChLZigpLHNjKSxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaSgoZnkoKSxDZiksY3Qob3QobG8sMSksYWUsOTMsMCxbX2YsRWZdKSldKSkseXBlPW5ldyB1aCgiT1VUX1RfQyIsMSxjYix5ZixzYyx0dSxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtfZixKMF0pKSxqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtfZixKMCwkaF0pKV0pKSxrcGU9bmV3IHVoKCJPVVRfVF9SIiwyLG1mLHlmLHNjLGFjLGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKENmLGN0KG90KGxvLDEpLGFlLDkzLDAsW19mLFRmXSkpXSkpLGZwZT1uZXcgdWgoIk9VVF9CX0wiLDMsU2QsZTEsYWMsc2MsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbemgsRWZdKSldKSksaHBlPW5ldyB1aCgiT1VUX0JfQyIsNCxjYixlMSxhYyx0dSxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShDZixjdChvdChsbywxKSxhZSw5MywwLFt6aCxKMF0pKSxqaShDZixjdChvdChsbywxKSxhZSw5MywwLFt6aCxKMCwkaF0pKV0pKSxkcGU9bmV3IHVoKCJPVVRfQl9SIiw1LG1mLGUxLGFjLGFjLGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKENmLGN0KG90KGxvLDEpLGFlLDkzLDAsW3poLFRmXSkpXSkpLGJwZT1uZXcgdWgoIk9VVF9MX1QiLDYsbWYsZTEsc2Msc2MsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbRWYsX2YsJGhdKSldKSkscHBlPW5ldyB1aCgiT1VUX0xfQyIsNyxtZix1Yix0dSxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtFZixsMF0pKSxqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtFZixsMCwkaF0pKV0pKSxncGU9bmV3IHVoKCJPVVRfTF9CIiw4LG1mLHlmLGFjLHNjLGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKENmLGN0KG90KGxvLDEpLGFlLDkzLDAsW0VmLHpoLCRoXSkpXSkpLG1wZT1uZXcgdWgoIk9VVF9SX1QiLDksU2QsZTEsc2MsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsX2YsJGhdKSldKSksd3BlPW5ldyB1aCgiT1VUX1JfQyIsMTAsU2QsdWIsdHUsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsbDBdKSksamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsbDAsJGhdKSldKSksdnBlPW5ldyB1aCgiT1VUX1JfQiIsMTEsU2QseWYsYWMsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsemgsJGhdKSldKSksdXBlPW5ldyB1aCgiSU5fVF9MIiwxMixTZCxlMSxzYyxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtfZixFZl0pKSxqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtfZixFZiwkaF0pKV0pKSxjcGU9bmV3IHVoKCJJTl9UX0MiLDEzLGNiLGUxLHNjLHR1LGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW19mLEowXSkpLGppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW19mLEowLCRoXSkpXSkpLGxwZT1uZXcgdWgoIklOX1RfUiIsMTQsbWYsZTEsc2MsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbX2YsVGZdKSksamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbX2YsVGYsJGhdKSldKSksYXBlPW5ldyB1aCgiSU5fQ19MIiwxNSxTZCx1Yix0dSxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtsMCxFZl0pKSxqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtsMCxFZiwkaF0pKV0pKSxzcGU9bmV3IHVoKCJJTl9DX0MiLDE2LGNiLHViLHR1LHR1LGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW2wwLEowXSkpLGppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW2wwLEowLCRoXSkpXSkpLG9wZT1uZXcgdWgoIklOX0NfUiIsMTcsbWYsdWIsdHUsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbbDAsVGZdKSksamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbbDAsVGYsJGhdKSldKSkscnBlPW5ldyB1aCgiSU5fQl9MIiwxOCxTZCx5ZixhYyxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFt6aCxFZl0pKSxqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFt6aCxFZiwkaF0pKV0pKSxucGU9bmV3IHVoKCJJTl9CX0MiLDE5LGNiLHlmLGFjLHR1LGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW3poLEowXSkpLGppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW3poLEowLCRoXSkpXSkpLGlwZT1uZXcgdWgoIklOX0JfUiIsMjAsbWYseWYsYWMsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbemgsVGZdKSksamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbemgsVGYsJGhdKSldKSksUHV0PW5ldyB1aChPXywyMSxudWxsLG51bGwsbnVsbCxudWxsLGN0KG90KEJoLDEpLEllLDIxLDAsW10pKX1mdW5jdGlvbiBkbigpe2RuPVosdDM9KGpwKCksTG4pLmIsdShTdChXdChMbi5iKSwwKSwzNCksdShTdChXdChMbi5iKSwxKSwxOCksSmc9TG4uYSx1KFN0KFd0KExuLmEpLDApLDM0KSx1KFN0KFd0KExuLmEpLDEpLDE4KSx1KFN0KFd0KExuLmEpLDIpLDE4KSx1KFN0KFd0KExuLmEpLDMpLDE4KSx1KFN0KFd0KExuLmEpLDQpLDE4KSxDYj1Mbi5vLHUoU3QoV3QoTG4ubyksMCksMzQpLHUoU3QoV3QoTG4ubyksMSksMzQpLFg0ZT11KFN0KFd0KExuLm8pLDIpLDE4KSx1KFN0KFd0KExuLm8pLDMpLDE4KSx1KFN0KFd0KExuLm8pLDQpLDE4KSx1KFN0KFd0KExuLm8pLDUpLDE4KSx1KFN0KFd0KExuLm8pLDYpLDE4KSx1KFN0KFd0KExuLm8pLDcpLDE4KSx1KFN0KFd0KExuLm8pLDgpLDE4KSx1KFN0KFd0KExuLm8pLDkpLDE4KSx1KFN0KFd0KExuLm8pLDEwKSwxOCksdShTdChXdChMbi5vKSwxMSksMTgpLHUoU3QoV3QoTG4ubyksMTIpLDE4KSx1KFN0KFd0KExuLm8pLDEzKSwxOCksdShTdChXdChMbi5vKSwxNCksMTgpLHUoU3QoV3QoTG4ubyksMTUpLDE4KSx1KFN0KE1pKExuLm8pLDApLDU5KSx1KFN0KE1pKExuLm8pLDEpLDU5KSx1KFN0KE1pKExuLm8pLDIpLDU5KSx1KFN0KE1pKExuLm8pLDMpLDU5KSx1KFN0KE1pKExuLm8pLDQpLDU5KSx1KFN0KE1pKExuLm8pLDUpLDU5KSx1KFN0KE1pKExuLm8pLDYpLDU5KSx1KFN0KE1pKExuLm8pLDcpLDU5KSx1KFN0KE1pKExuLm8pLDgpLDU5KSx1KFN0KE1pKExuLm8pLDkpLDU5KSxZNGU9TG4ucCx1KFN0KFd0KExuLnApLDApLDM0KSx1KFN0KFd0KExuLnApLDEpLDM0KSx1KFN0KFd0KExuLnApLDIpLDM0KSx1KFN0KFd0KExuLnApLDMpLDM0KSx1KFN0KFd0KExuLnApLDQpLDE4KSx1KFN0KFd0KExuLnApLDUpLDE4KSx1KFN0KE1pKExuLnApLDApLDU5KSx1KFN0KE1pKExuLnApLDEpLDU5KSxRNGU9TG4ucSx1KFN0KFd0KExuLnEpLDApLDM0KSxfYj1Mbi52LHUoU3QoV3QoTG4udiksMCksMTgpLHUoU3QoTWkoTG4udiksMCksNTkpLHUoU3QoTWkoTG4udiksMSksNTkpLHUoU3QoTWkoTG4udiksMiksNTkpLHRwPUxuLncsdShTdChXdChMbi53KSwwKSwzNCksdShTdChXdChMbi53KSwxKSwzNCksdShTdChXdChMbi53KSwyKSwzNCksdShTdChXdChMbi53KSwzKSwxOCksU2I9TG4uQix1KFN0KFd0KExuLkIpLDApLDE4KSx1KFN0KE1pKExuLkIpLDApLDU5KSx1KFN0KE1pKExuLkIpLDEpLDU5KSx1KFN0KE1pKExuLkIpLDIpLDU5KSxaNGU9TG4uUSx1KFN0KFd0KExuLlEpLDApLDE4KSx1KFN0KE1pKExuLlEpLDApLDU5KSxKNGU9TG4uUix1KFN0KFd0KExuLlIpLDApLDM0KSxXaD1Mbi5TLHUoU3QoTWkoTG4uUyksMCksNTkpLHUoU3QoTWkoTG4uUyksMSksNTkpLHUoU3QoTWkoTG4uUyksMiksNTkpLHUoU3QoTWkoTG4uUyksMyksNTkpLHUoU3QoTWkoTG4uUyksNCksNTkpLHUoU3QoTWkoTG4uUyksNSksNTkpLHUoU3QoTWkoTG4uUyksNiksNTkpLHUoU3QoTWkoTG4uUyksNyksNTkpLHUoU3QoTWkoTG4uUyksOCksNTkpLHUoU3QoTWkoTG4uUyksOSksNTkpLHUoU3QoTWkoTG4uUyksMTApLDU5KSx1KFN0KE1pKExuLlMpLDExKSw1OSksdShTdChNaShMbi5TKSwxMiksNTkpLHUoU3QoTWkoTG4uUyksMTMpLDU5KSx1KFN0KE1pKExuLlMpLDE0KSw1OSksZXA9TG4uVCx1KFN0KFd0KExuLlQpLDApLDE4KSx1KFN0KFd0KExuLlQpLDIpLDE4KSx0NWU9dShTdChXdChMbi5UKSwzKSwxOCksdShTdChXdChMbi5UKSw0KSwxOCksdShTdChNaShMbi5UKSwwKSw1OSksdShTdChNaShMbi5UKSwxKSw1OSksdShTdChXdChMbi5UKSwxKSwxOCksbnA9TG4uVSx1KFN0KFd0KExuLlUpLDApLDM0KSx1KFN0KFd0KExuLlUpLDEpLDM0KSx1KFN0KFd0KExuLlUpLDIpLDE4KSx1KFN0KFd0KExuLlUpLDMpLDE4KSx1KFN0KFd0KExuLlUpLDQpLDE4KSx1KFN0KFd0KExuLlUpLDUpLDE4KSx1KFN0KE1pKExuLlUpLDApLDU5KSxlMz1Mbi5WLHUoU3QoV3QoTG4uViksMCksMTgpLGM1PUxuLlcsdShTdChXdChMbi5XKSwwKSwzNCksdShTdChXdChMbi5XKSwxKSwzNCksdShTdChXdChMbi5XKSwyKSwzNCksdShTdChXdChMbi5XKSwzKSwxOCksdShTdChXdChMbi5XKSw0KSwxOCksdShTdChXdChMbi5XKSw1KSwxOCksZTVlPUxuLmJiLHUoU3QoV3QoTG4uYmIpLDApLDM0KSx1KFN0KFd0KExuLmJiKSwxKSwzNCksdShTdChXdChMbi5iYiksMiksMzQpLHUoU3QoV3QoTG4uYmIpLDMpLDM0KSx1KFN0KFd0KExuLmJiKSw0KSwzNCksdShTdChXdChMbi5iYiksNSksMzQpLHUoU3QoV3QoTG4uYmIpLDYpLDM0KSx1KFN0KFd0KExuLmJiKSw3KSwxOCksdShTdChNaShMbi5iYiksMCksNTkpLHUoU3QoTWkoTG4uYmIpLDEpLDU5KSxuNWU9TG4uZWIsdShTdChXdChMbi5lYiksMCksMzQpLHUoU3QoV3QoTG4uZWIpLDEpLDM0KSx1KFN0KFd0KExuLmViKSwyKSwzNCksdShTdChXdChMbi5lYiksMyksMzQpLHUoU3QoV3QoTG4uZWIpLDQpLDM0KSx1KFN0KFd0KExuLmViKSw1KSwzNCksdShTdChXdChMbi5lYiksNiksMTgpLHUoU3QoV3QoTG4uZWIpLDcpLDE4KSxRYT1Mbi5hYix1KFN0KFd0KExuLmFiKSwwKSwzNCksdShTdChXdChMbi5hYiksMSksMzQpLHF3PUxuLkgsdShTdChXdChMbi5IKSwwKSwxOCksdShTdChXdChMbi5IKSwxKSwxOCksdShTdChXdChMbi5IKSwyKSwxOCksdShTdChXdChMbi5IKSwzKSwxOCksdShTdChXdChMbi5IKSw0KSwxOCksdShTdChXdChMbi5IKSw1KSwxOCksdShTdChNaShMbi5IKSwwKSw1OSksSHc9TG4uZGIsdShTdChXdChMbi5kYiksMCksMTgpLFYxPUxuLk19ZnVuY3Rpb24gSDVuKHQpe3ZhciBlO3QuT3x8KHQuTz0hMCxYYyh0LCJ0eXBlIiksc3oodCwiZWNvcmUueG1sLnR5cGUiKSxheih0LEwyKSxlPXUod0UoKE1wKCksVWgpLEwyKSwxOTQ1KSxNcihTbyh0LmZiKSx0LmIpLHJjKHQuYixmTiwiQW55VHlwZSIsITEsITEsITApLGxzKHUoU3QoV3QodC5iKSwwKSwzNCksdC53Yi5ELFpELG51bGwsMCwtMSxmTiwhMSwhMSwhMCwhMSwhMSwhMSksbHModShTdChXdCh0LmIpLDEpLDM0KSx0LndiLkQsImFueSIsbnVsbCwwLC0xLGZOLCEwLCEwLCEwLCExLCExLCEwKSxscyh1KFN0KFd0KHQuYiksMiksMzQpLHQud2IuRCwiYW55QXR0cmlidXRlIixudWxsLDAsLTEsZk4sITEsITEsITAsITEsITEsITEpLHJjKHQuYmIsY1UsUjBlLCExLCExLCEwKSxscyh1KFN0KFd0KHQuYmIpLDApLDM0KSx0LmdiLCJkYXRhIixudWxsLDAsMSxjVSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmJiKSwxKSwzNCksdC5nYixFOHQsbnVsbCwxLDEsY1UsITEsITEsITAsITEsITAsITEpLHJjKHQuZmIsZE4sajBlLCExLCExLCEwKSxscyh1KFN0KFd0KHQuZmIpLDApLDM0KSxlLmdiLCJyYXdWYWx1ZSIsbnVsbCwwLDEsZE4sITAsITAsITAsITEsITAsITApLGxzKHUoU3QoV3QodC5mYiksMSksMzQpLGUuYSxZXyxudWxsLDAsMSxkTiwhMCwhMCwhMCwhMSwhMCwhMCksRmkodShTdChXdCh0LmZiKSwyKSwxOCksdC53Yi5xLG51bGwsImluc3RhbmNlVHlwZSIsMSwxLGROLCExLCExLCEwLCExLCExLCExLCExKSxyYyh0LnFiLHBMdCwkMGUsITEsITEsITApLGxzKHUoU3QoV3QodC5xYiksMCksMzQpLHQud2IuRCxaRCxudWxsLDAsLTEsbnVsbCwhMSwhMSwhMCwhMSwhMSwhMSksRmkodShTdChXdCh0LnFiKSwxKSwxOCksdC53Yi5hYixudWxsLCJ4TUxOU1ByZWZpeE1hcCIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQucWIpLDIpLDE4KSx0LndiLmFiLG51bGwsInhTSVNjaGVtYUxvY2F0aW9uIiwwLC0xLG51bGwsITAsITEsITAsITAsITEsITEsITEpLGxzKHUoU3QoV3QodC5xYiksMyksMzQpLHQuZ2IsImNEQVRBIixudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksbHModShTdChXdCh0LnFiKSw0KSwzNCksdC5nYiwiY29tbWVudCIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLEZpKHUoU3QoV3QodC5xYiksNSksMTgpLHQuYmIsbnVsbCxKMGUsMCwtMixudWxsLCEwLCEwLCEwLCEwLCExLCExLCEwKSxscyh1KFN0KFd0KHQucWIpLDYpLDM0KSx0LmdiLEhjdCxudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksc2kodC5hLFhuLCJBbnlTaW1wbGVUeXBlIiwhMCksc2kodC5jLEFlLCJBbnlVUkkiLCEwKSxzaSh0LmQsb3QoSHUsMSksIkJhc2U2NEJpbmFyeSIsITApLHNpKHQuZSxkbCwiQm9vbGVhbiIsITApLHNpKHQuZixCcywiQm9vbGVhbk9iamVjdCIsITApLHNpKHQuZyxIdSwiQnl0ZSIsITApLHNpKHQuaSxFNiwiQnl0ZU9iamVjdCIsITApLHNpKHQuaixBZSwiRGF0ZSIsITApLHNpKHQuayxBZSwiRGF0ZVRpbWUiLCEwKSxzaSh0Lm4sQ3V0LCJEZWNpbWFsIiwhMCksc2kodC5vLGlhLCJEb3VibGUiLCEwKSxzaSh0LnAsY2EsIkRvdWJsZU9iamVjdCIsITApLHNpKHQucSxBZSwiRHVyYXRpb24iLCEwKSxzaSh0LnMscGgsIkVOVElUSUVTIiwhMCksc2kodC5yLHBoLCJFTlRJVElFU0Jhc2UiLCEwKSxzaSh0LnQsQWUsajh0LCEwKSxzaSh0LnUscjMsIkZsb2F0IiwhMCksc2kodC52LFhFLCJGbG9hdE9iamVjdCIsITApLHNpKHQudyxBZSwiR0RheSIsITApLHNpKHQuQixBZSwiR01vbnRoIiwhMCksc2kodC5BLEFlLCJHTW9udGhEYXkiLCEwKSxzaSh0LkMsQWUsIkdZZWFyIiwhMCksc2kodC5ELEFlLCJHWWVhck1vbnRoIiwhMCksc2kodC5GLG90KEh1LDEpLCJIZXhCaW5hcnkiLCEwKSxzaSh0LkcsQWUsIklEIiwhMCksc2kodC5ILEFlLCJJRFJFRiIsITApLHNpKHQuSixwaCwiSURSRUZTIiwhMCksc2kodC5JLHBoLCJJRFJFRlNCYXNlIiwhMCksc2kodC5LLFRyLCJJbnQiLCEwKSxzaSh0Lk0sQjQsIkludGVnZXIiLCEwKSxzaSh0LkwsamEsIkludE9iamVjdCIsITApLHNpKHQuUCxBZSwiTGFuZ3VhZ2UiLCEwKSxzaSh0LlEsTGIsIkxvbmciLCEwKSxzaSh0LlIsVHcsIkxvbmdPYmplY3QiLCEwKSxzaSh0LlMsQWUsIk5hbWUiLCEwKSxzaSh0LlQsQWUsUEgsITApLHNpKHQuVSxCNCwiTmVnYXRpdmVJbnRlZ2VyIiwhMCksc2kodC5WLEFlLHE4dCwhMCksc2kodC5YLHBoLCJOTVRPS0VOUyIsITApLHNpKHQuVyxwaCwiTk1UT0tFTlNCYXNlIiwhMCksc2kodC5ZLEI0LCJOb25OZWdhdGl2ZUludGVnZXIiLCEwKSxzaSh0LlosQjQsIk5vblBvc2l0aXZlSW50ZWdlciIsITApLHNpKHQuJCxBZSwiTm9ybWFsaXplZFN0cmluZyIsITApLHNpKHQuXyxBZSwiTk9UQVRJT04iLCEwKSxzaSh0LmFiLEFlLCJQb3NpdGl2ZUludGVnZXIiLCEwKSxzaSh0LmNiLEFlLCJRTmFtZSIsITApLHNpKHQuZGIsZjUsIlNob3J0IiwhMCksc2kodC5lYixDdywiU2hvcnRPYmplY3QiLCEwKSxzaSh0LmdiLEFlLER4dCwhMCksc2kodC5oYixBZSwiVGltZSIsITApLHNpKHQuaWIsQWUsIlRva2VuIiwhMCksc2kodC5qYixmNSwiVW5zaWduZWRCeXRlIiwhMCksc2kodC5rYixDdywiVW5zaWduZWRCeXRlT2JqZWN0IiwhMCksc2kodC5sYixMYiwiVW5zaWduZWRJbnQiLCEwKSxzaSh0Lm1iLFR3LCJVbnNpZ25lZEludE9iamVjdCIsITApLHNpKHQubmIsQjQsIlVuc2lnbmVkTG9uZyIsITApLHNpKHQub2IsVHIsIlVuc2lnbmVkU2hvcnQiLCEwKSxzaSh0LnBiLGphLCJVbnNpZ25lZFNob3J0T2JqZWN0IiwhMCkscXl0KHQsTDIpLEc1bih0KSl9ZnVuY3Rpb24gemhlKHQpe1N2KHQsbmV3IHcyKHJidChtUihFdih5dihrdih4dihuZXcgcGcsVm4pLCJFTEsgTGF5ZXJlZCIpLCJMYXllci1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQXJyYW5nZXMgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIG9uZSBkaXJlY3Rpb24gYnkgcGxhY2luZyBub2RlcyBpbnRvIHN1YnNlcXVlbnQgbGF5ZXJzLiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGRpZmZlcmVudCByb3V0aW5nIHN0eWxlcyAoc3RyYWlnaHQsIG9ydGhvZ29uYWwsIHNwbGluZXMpOyBpZiBvcnRob2dvbmFsIHJvdXRpbmcgaXMgc2VsZWN0ZWQsIGFyYml0cmFyeSBwb3J0IGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQsIHRodXMgZW5hYmxpbmcgdGhlIGxheW91dCBvZiBibG9jayBkaWFncmFtcyBzdWNoIGFzIGFjdG9yLW9yaWVudGVkIG1vZGVscyBvciBjaXJjdWl0IHNjaGVtYXRpY3MuIEZ1cnRoZXJtb3JlLCBmdWxsIGxheW91dCBvZiBjb21wb3VuZCBncmFwaHMgd2l0aCBjcm9zcy1oaWVyYXJjaHkgZWRnZXMgaXMgc3VwcG9ydGVkIHdoZW4gdGhlIHJlc3BlY3RpdmUgb3B0aW9uIGlzIGFjdGl2YXRlZCBvbiB0aGUgdG9wIGxldmVsLiIpLG5ldyBlUSksVm4pLGppKCh2RSgpLGtmdCksY3Qob3QoZVUsMSksYWUsMjM3LDAsW0pWLHRVLFpWLHhmdCxRVixYVl0pKSkpKSx4ZSh0LFZuLHRrdCxEZShKbHQpKSx4ZSh0LFZuLGVrdCxEZShkQ3QpKSx4ZSh0LFZuLEFvdCxEZShBTykpLHhlKHQsVm4sbmt0LERlKHhmKSkseGUodCxWbixPb3QsRGUoQjYpKSx4ZSh0LFZuLHJrdCxEZShGdykpLHhlKHQsVm4saWt0LERlKEd5KSkseGUodCxWbixza3QsRGUobTcpKSx4ZSh0LFZuLGFrdCxEZSh5NykpLHhlKHQsVm4sb2t0LERlKHRodCkpLHhlKHQsVm4sa3ksRGUoQncpKSx4ZSh0LFZuLGNrdCxEZShlaHQpKSx4ZSh0LFZuLHVrdCxEZShfUykpLHhlKHQsVm4sbGt0LERlKHNWKSkseGUodCxWbixGNnQsRGUoU08pKSx4ZSh0LFZuLFI2dCxEZShRNCkpLHhlKHQsVm4sQjZ0LERlKFIyKSkseGUodCxWbixqNnQsRGUoWjQpKSx4ZSh0LFZuLGpELGRlKDApKSx4ZSh0LFZuLCQ2dCxEZSh3NykpLHhlKHQsVm4sejZ0LERlKGZDdCkpLHhlKHQsVm4scTZ0LERlKEY2KSkseGUodCxWbixZMCxEZSh4Q3QpKSx4ZSh0LFZuLHRILERlKGdDdCkpLHhlKHQsVm4sZUgsRGUocEN0KSkseGUodCxWbix6XyxEZShyaHQpKSx4ZSh0LFZuLGljdCxEZShiQ3QpKSx4ZSh0LFZuLHNjdCxEZSh2Q3QpKSx4ZSh0LFZuLG5ILERlKGFWKSkseGUodCxWbixySCxEZShpaHQpKSx4ZSh0LFZuLGlILERlKG1DdCkpLHhlKHQsVm4sc0gsRGUod0N0KSkseGUodCxWbixhY3QsRGUoeUN0KSkseGUodCxWbixab3QsRGUoTncpKSx4ZSh0LFZuLEpvdCxEZShDUykpLHhlKHQsVm4sUXEsRGUoS2x0KSkseGUodCxWbixacSxEZShHOXQpKSx4ZSh0LFZuLHd3LG9DdCkseGUodCxWbixVRCx6OXQpLHhlKHQsVm4saGt0LDApLHhlKHQsVm4sSHEsZGUoMSkpLHhlKHQsVm4sYjYsQkUpLHhlKHQsVm4sZmt0LERlKEIyKSkseGUodCxWbixOb3QsRGUob3MpKSx4ZSh0LFZuLGRrdCxEZSh2NykpLHhlKHQsVm4sS0QsRGUoQXdlKSkseGUodCxWbixna3QsRGUoTGQpKSx4ZSh0LFZuLG9ILERlKGp5KSkseGUodCxWbixQXywoRm4oKSwhMCkpLHhlKHQsVm4scGt0LERlKCR5KSkseGUodCxWbixia3QsRGUoUDIpKSx4ZSh0LFZuLEw0LERlKEYyKSkseGUodCxWbix2NixEZShpVikpLHhlKHQsVm4sZmN0LERlKFpsdCkpLHhlKHQsVm4sdmt0LCQ5dCkseGUodCxWbixSRSxEZShPdykpLHhlKHQsVm4sd2t0LERlKG5WKSkseGUodCxWbixqRSxEZShxeSkpLHhlKHQsVm4sbWt0LERlKE53ZSkpLHhlKHQsVm4seWt0LERlKGxDdCkpLHhlKHQsVm4seGt0LHVDdCkseGUodCxWbixra3QsRGUoSXdlKSkseGUodCxWbixFa3QsRGUoRHdlKSkseGUodCxWbixUa3QsRGUoT3dlKSkseGUodCxWbixDa3QsRGUoTXdlKSkseGUodCxWbixDNnQsRGUobmh0KSkseGUodCxWbixHRCxEZShlQ3QpKSx4ZSh0LFZuLEhvdCxEZShYbHQpKSx4ZSh0LFZuLFQ2dCxEZShTUykpLHhlKHQsVm4sUzZ0LERlKGN1KSkseGUodCxWbiwkb3QsRGUoUnkpKSx4ZSh0LFZuLCRfLERlKEVTKSkseGUodCxWbixNNnQsRGUoQnkpKSx4ZSh0LFZuLE82dCxEZShCOXQpKSx4ZSh0LFZuLEtvdCxEZShHbHQpKSx4ZSh0LFZuLFlxLERlKF9PKSkseGUodCxWbixXb3QsRGUoVmx0KSkseGUodCxWbix5NnQsRGUobkN0KSkseGUodCxWbix4NnQsRGUockN0KSkseGUodCxWbixLcSxEZShYOXQpKSx4ZSh0LFZuLE00LERlKHJWKSkseGUodCxWbixYb3QsRGUoUWx0KSkseGUodCxWbixtNnQsRGUoWWx0KSkseGUodCxWbixRb3QsRGUoc0N0KSkseGUodCxWbixONnQsRGUoSDl0KSkseGUodCxWbixQNnQsRGUoV2x0KSkseGUodCxWbixjSCxEZShIbHQpKSx4ZSh0LFZuLFlvdCxEZShpQ3QpKSx4ZSh0LFZuLEg2dCxEZShLRykpLHhlKHQsVm4sRzZ0LERlKE45dCkpLHhlKHQsVm4sZWN0LERlKFdHKSkseGUodCxWbixKcSxEZShXOXQpKSx4ZSh0LFZuLG5jdCxEZShVOXQpKSx4ZSh0LFZuLHJjdCxEZShLOXQpKSx4ZSh0LFZuLHc2LERlKHA3KSkseGUodCxWbixfa3QsRGUoX28pKSx4ZSh0LFZuLExvdCxEZShVZykpLHhlKHQsVm4sU2t0LERlKE1kKSkseGUodCxWbixHcSxEZShVbHQpKSx4ZSh0LFZuLFVvdCxEZShSOXQpKSx4ZSh0LFZuLEFrdCxEZShXZykpLHhlKHQsVm4sTGt0LERlKGtTKSkseGUodCxWbixNa3QsRGUoSkcpKSx4ZSh0LFZuLElrdCxEZShQdykpLHhlKHQsVm4sZGN0LERlKGNDdCkpLHhlKHQsVm4sZ2N0LERlKGI3KSkseGUodCxWbix6b3QsRGUoWjl0KSkseGUodCxWbixxb3QsRGUoSjl0KSkseGUodCxWbix1SCxEZShIeSkpLHhlKHQsVm4sazZ0LERlKHpsdCkpLHhlKHQsVm4sR290LERlKHRDdCkpLHhlKHQsVm4sVjZ0LERlKFpHKSkseGUodCxWbixVNnQsRGUoUUcpKSx4ZSh0LFZuLERrdCxEZShlVikpLHhlKHQsVm4sVm90LERlKFE5dCkpLHhlKHQsVm4sWHEsRGUoVFMpKSx4ZSh0LFZuLE9rdCxEZShMTykpLHhlKHQsVm4sdzZ0LERlKGo5dCkpLHhlKHQsVm4sRTZ0LERlKGhDdCkpLHhlKHQsVm4sdGN0LERlKHE5dCkpLHhlKHQsVm4sQTZ0LERlKEx3ZSkpLHhlKHQsVm4sSTZ0LERlKFN3ZSkpLHhlKHQsVm4scGN0LERlKFk5dCkpLHhlKHQsVm4sTDZ0LERlKHRWKSkseGUodCxWbixENnQsRGUoWEcpKSx4ZSh0LFZuLGFILERlKGRiKSkseGUodCxWbixLNnQsRGUoRjl0KSkseGUodCxWbixjY3QsRGUoWUcpKSx4ZSh0LFZuLHVjdCxEZShQOXQpKSx4ZSh0LFZuLFc2dCxEZShxbHQpKSx4ZSh0LFZuLG9jdCxEZShQNikpLHhlKHQsVm4sXzZ0LERlKFY5dCkpfWZ1bmN0aW9uIEM0KHQsZSl7dmFyIG4scjtyZXR1cm4gaDV8fChoNT1uZXcgQ3IsRDc9bmV3IENyLHI9KGdpKCksZ2koKSxuZXcgTmwoNCkpLFdJKHIsYAkKXHJcciAgYCkseG8oaDUsY3V0LHIpLHhvKEQ3LGN1dCxieShyKSkscj1uZXcgTmwoNCksV0kocixlZ2UpLHhvKGg1LGlTLHIpLHhvKEQ3LGlTLGJ5KHIpKSxyPW5ldyBObCg0KSxXSShyLGVnZSkseG8oaDUsaVMscikseG8oRDcsaVMsYnkocikpLHI9bmV3IE5sKDQpLFdJKHIsbmdlKSx2eShyLHUoRmMoaDUsaVMpLDExNykpLHhvKGg1LG91dCxyKSx4byhENyxvdXQsYnkocikpLHI9bmV3IE5sKDQpLFdJKHIsIi0uMDpBWl9fYXrCt8K3w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+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+44SF44Ss5LiA6b6l6rCA7Z6jIikseG8oaDUsdXV0LHIpLHhvKEQ3LHV1dCxieShyKSkscj1uZXcgTmwoNCksV0kocixuZ2UpLGpjKHIsOTUsOTUpLGpjKHIsNTgsNTgpLHhvKGg1LGx1dCxyKSx4byhENyxsdXQsYnkocikpKSxuPXUoRmMoZT9oNTpENyx0KSwxMzYpLG59ZnVuY3Rpb24gRzVuKHQpe0lyKHQuYSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJhbnlTaW1wbGVUeXBlIl0pKSxJcih0LmIsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiYW55VHlwZSIsTmgsWkRdKSksSXIodShTdChXdCh0LmIpLDApLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW05oLG51dCxvaSwiOm1peGVkIl0pKSxJcih1KFN0KFd0KHQuYiksMSksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsbnV0LEI4dCxpdXQsb2ksIjoxIix6MGUsImxheCJdKSksSXIodShTdChXdCh0LmIpLDIpLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW05oLEIwZSxCOHQsaXV0LG9pLCI6MiIsejBlLCJsYXgiXSkpLElyKHQuYyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJhbnlVUkkiLEZoLHQxXSkpLElyKHQuZCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJiYXNlNjRCaW5hcnkiLEZoLHQxXSkpLElyKHQuZSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLHU2LEZoLHQxXSkpLElyKHQuZixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJib29sZWFuOk9iamVjdCIsU2EsdTZdKSksSXIodC5nLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksUV9dKSksSXIodC5pLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImJ5dGU6T2JqZWN0IixTYSxRX10pKSxJcih0LmosS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiZGF0ZSIsRmgsdDFdKSksSXIodC5rLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImRhdGVUaW1lIixGaCx0MV0pKSxJcih0Lm4sS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiZGVjaW1hbCIsRmgsdDFdKSksSXIodC5vLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksWl8sRmgsdDFdKSksSXIodC5wLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImRvdWJsZTpPYmplY3QiLFNhLFpfXSkpLElyKHQucSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJkdXJhdGlvbiIsRmgsdDFdKSksSXIodC5zLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIkVOVElUSUVTIixTYSxxMGUsUjh0LCIxIl0pKSxJcih0LnIsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxxMGUscnV0LGo4dF0pKSxJcih0LnQsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxqOHQsU2EsUEhdKSksSXIodC51LEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksSl8sRmgsdDFdKSksSXIodC52LEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImZsb2F0Ok9iamVjdCIsU2EsSl9dKSksSXIodC53LEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImdEYXkiLEZoLHQxXSkpLElyKHQuQixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJnTW9udGgiLEZoLHQxXSkpLElyKHQuQSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJnTW9udGhEYXkiLEZoLHQxXSkpLElyKHQuQyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJnWWVhciIsRmgsdDFdKSksSXIodC5ELEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImdZZWFyTW9udGgiLEZoLHQxXSkpLElyKHQuRixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJoZXhCaW5hcnkiLEZoLHQxXSkpLElyKHQuRyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJJRCIsU2EsUEhdKSksSXIodC5ILEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIklEUkVGIixTYSxQSF0pKSxJcih0LkosS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiSURSRUZTIixTYSxIMGUsUjh0LCIxIl0pKSxJcih0LkksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxIMGUscnV0LCJJRFJFRiJdKSksSXIodC5LLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksdFNdKSksSXIodC5NLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksJDh0XSkpLElyKHQuTCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJpbnQ6T2JqZWN0IixTYSx0U10pKSxJcih0LlAsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwibGFuZ3VhZ2UiLFNhLHN1dCxhdXQsRzBlXSkpLElyKHQuUSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLGVTXSkpLElyKHQuUixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJsb25nOk9iamVjdCIsU2EsZVNdKSksSXIodC5TLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIk5hbWUiLFNhLHN1dCxhdXQsejh0XSkpLElyKHQuVCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFBILFNhLCJOYW1lIixhdXQsVjBlXSkpLElyKHQuVSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJuZWdhdGl2ZUludGVnZXIiLFNhLFUwZSxyTywiLTEiXSkpLElyKHQuVixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLHE4dCxTYSxzdXQsYXV0LCJcXGMrIl0pKSxJcih0LlgsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiTk1UT0tFTlMiLFNhLFcwZSxSOHQsIjEiXSkpLElyKHQuVyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFcwZSxydXQscTh0XSkpLElyKHQuWSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLEg4dCxTYSwkOHQsaU8sIjAiXSkpLElyKHQuWixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFUwZSxTYSwkOHQsck8sIjAiXSkpLElyKHQuJCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLEswZSxTYSxPYXQsRmgsInJlcGxhY2UiXSkpLElyKHQuXyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJOT1RBVElPTiIsRmgsdDFdKSksSXIodC5hYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJwb3NpdGl2ZUludGVnZXIiLFNhLEg4dCxpTywiMSJdKSksSXIodC5iYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25fLl90eXBlIixOaCwiZW1wdHkiXSkpLElyKHUoU3QoV3QodC5iYiksMCksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsSUgsb2ksImRhdGEiXSkpLElyKHUoU3QoV3QodC5iYiksMSksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsSUgsb2ksRTh0XSkpLElyKHQuY2IsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiUU5hbWUiLEZoLHQxXSkpLElyKHQuZGIsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxuU10pKSxJcih0LmViLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInNob3J0Ok9iamVjdCIsU2EsblNdKSksSXIodC5mYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJzaW1wbGVBbnlUeXBlIixOaCxKRF0pKSxJcih1KFN0KFd0KHQuZmIpLDApLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCI6MyIsTmgsSkRdKSksSXIodShTdChXdCh0LmZiKSwxKSwzNCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiOjQiLE5oLEpEXSkpLElyKHUoU3QoV3QodC5mYiksMiksMTgpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIjo1IixOaCxKRF0pKSxJcih0LmdiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksT2F0LEZoLCJwcmVzZXJ2ZSJdKSksSXIodC5oYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJ0aW1lIixGaCx0MV0pKSxJcih0LmliLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksc3V0LFNhLEswZSxGaCx0MV0pKSxJcih0LmpiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksWTBlLHJPLCIyNTUiLGlPLCIwIl0pKSxJcih0LmtiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInVuc2lnbmVkQnl0ZTpPYmplY3QiLFNhLFkwZV0pKSxJcih0LmxiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksWDBlLHJPLCI0Mjk0OTY3Mjk1IixpTywiMCJdKSksSXIodC5tYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJ1bnNpZ25lZEludDpPYmplY3QiLFNhLFgwZV0pKSxJcih0Lm5iLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInVuc2lnbmVkTG9uZyIsU2EsSDh0LHJPLFEwZSxpTywiMCJdKSksSXIodC5vYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFowZSxyTywiNjU1MzUiLGlPLCIwIl0pKSxJcih0LnBiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInVuc2lnbmVkU2hvcnQ6T2JqZWN0IixTYSxaMGVdKSksSXIodC5xYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCIiLE5oLFpEXSkpLElyKHUoU3QoV3QodC5xYiksMCksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsbnV0LG9pLCI6bWl4ZWQiXSkpLElyKHUoU3QoV3QodC5xYiksMSksMTgpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsSUgsb2ksInhtbG5zOnByZWZpeCJdKSksSXIodShTdChXdCh0LnFiKSwyKSwxOCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxJSCxvaSwieHNpOnNjaGVtYUxvY2F0aW9uIl0pKSxJcih1KFN0KFd0KHQucWIpLDMpLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW05oLERILG9pLCJjREFUQSIsT0gsdE9dKSksSXIodShTdChXdCh0LnFiKSw0KSwzNCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxESCxvaSwiY29tbWVudCIsT0gsdE9dKSksSXIodShTdChXdCh0LnFiKSw1KSwxOCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxESCxvaSxKMGUsT0gsdE9dKSksSXIodShTdChXdCh0LnFiKSw2KSwzNCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxESCxvaSxIY3QsT0gsdE9dKSl9ZnVuY3Rpb24gcXIodCl7cmV0dXJuIGhuKCJfVUlfRU1GRGlhZ25vc3RpY19tYXJrZXIiLHQpPyJFTUYgUHJvYmxlbSI6aG4oIl9VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMiLHQpPyJBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmIjpobihQZGUsdCk/Ildyb25nIGNoYXJhY3Rlci4iOmhuKEZkZSx0KT8iSW52YWxpZCByZWZlcmVuY2UgbnVtYmVyLiI6aG4oa0gsdCk/IkEgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLiI6aG4oWGN0LHQpPyInPycgaXMgbm90IGV4cGVjdGVkLiAgJyg/Oicgb3IgJyg/PScgb3IgJyg/IScgb3IgJyg/PCcgb3IgJyg/Iycgb3IgJyg/Pic/IjpobihCZGUsdCk/IicoPzwnIG9yICcoPzwhJyBpcyBleHBlY3RlZC4iOmhuKFJkZSx0KT8iQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLiI6aG4oQTIsdCk/IicpJyBpcyBleHBlY3RlZC4iOmhuKFQ4dCx0KT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4iOmhuKGpkZSx0KT8iJzonIGlzIGV4cGVjdGVkLiI6aG4oJGRlLHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6aG4oemRlLHQpPyJBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4iOmhuKHFkZSx0KT8iVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuIjpobihIZGUsdCk/IkEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLiI6aG4oR2RlLHQpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjpobihWZGUsdCk/IkEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4iOmhuKEM4dCx0KT8iVW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4iOmhuKFFjdCx0KT8iVW5rbm93biBwcm9wZXJ0eS4iOmhuKF84dCx0KT8iQSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgbXVzdCBiZSBjbG9zZWQgYnkgJzpdJy4iOmhuKEVILHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4iOmhuKFVkZSx0KT8iVW5rbm93biBuYW1lIGZvciBhIFBPU0lYIGNoYXJhY3RlciBjbGFzcy4iOmhuKCJwYXJzZXIuY2MuNCIsdCk/IictJyBpcyBpbnZhbGlkIGhlcmUuIjpobihXZGUsdCk/IiddJyBpcyBleHBlY3RlZC4iOmhuKFM4dCx0KT8iJ1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxbJy4iOmhuKEE4dCx0KT8iJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxdJy4iOmhuKFpjdCx0KT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOmhuKEtkZSx0KT8iJ1snIGlzIGV4cGVjdGVkLiI6aG4oWWRlLHQpPyInKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuIjpobihYZGUsdCk/IlRoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuIjpobihHZyx0KT8iSW52YWxpZCBVbmljb2RlIGhleCBub3RhdGlvbi4iOmhuKFFkZSx0KT8iT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uIjpobihaZGUsdCk/IidcXHh7JyBtdXN0IGJlIGNsb3NlZCBieSAnfScuIjpobihKZGUsdCk/IkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LiI6aG4odDBlLHQpPyJBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4iOmhuKGdoLHQpPyJUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4iOmhuKGUwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLiI6aG4objBlLHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy4iOmhuKHIwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC4iOmhuKGkwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5LiI6aG4oTDh0LHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuIjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIEdlbmVyYXRlZCBQYWNrYWdlcyI6aG4oIl9VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyI6aG4oIl9VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5IjpobigiX1VJX1VSSUV4dGVuc2lvblBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIEV4dGVuc2lvbiBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlVSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5IjpobigiX1VJX0NvbnRlbnRIYW5kbGVyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJDb250ZW50IEhhbmRsZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5IjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbiI6aG4oIl9VSV9WYWxpZGF0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlZhbGlkYXRpb24gRGVsZWdhdGUgUmVnaXN0cnkiOmhuKCJfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSI6aG4oIl9VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/Ik9wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOmhuKCJfVUlfRUNsYXNzSW50ZXJmYWNlTm90QWJzdHJhY3RfZGlhZ25vc3RpYyIsdCk/IkEgY2xhc3MgdGhhdCBpcyBhbiBpbnRlcmZhY2UgbXVzdCBhbHNvIGJlIGFic3RyYWN0IjpobigiX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZiI6aG4oIl9VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG1hcCBlbnRyeSBjbGFzcyBtdXN0IGhhdmUgaW5zdGFuY2UgY2xhc3MgbmFtZSAnamF2YS51dGlsLk1hcCRFbnRyeSciOmhuKCJfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6aG4oIl9VSV9FUmVmZXJlbmNlVHJhbnNpZW50T3Bwb3NpdGVOb3RUcmFuc2llbnRfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBvZiBhIHRyYW5zaWVudCByZWZlcmVuY2UgbXVzdCBiZSB0cmFuc2llbnQgaWYgaXQgaXMgcHJveHkgcmVzb2x2aW5nIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZUJvdGhDb250YWlubWVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIjpobigiX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMiLHQpPyJBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxIjpobigiX1VJX0VUeXBlZEVsZW1lbnROb1R5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSB0eXBlZCBlbGVtZW50IG11c3QgaGF2ZSBhIHR5cGUiOmhuKCJfVUlfRUF0dHJpYnV0ZU5vRGF0YVR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIGF0dHJpYnV0ZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgY2xhc3MiOmhuKCJfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlIjpobigiX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlckFuZENsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGNhbid0IHJlZmVyIHRvIGJvdGggYSB0eXBlIHBhcmFtZXRlciBhbmQgYSBjbGFzc2lmaWVyIjpobigiX1VJX0VHZW5lcmljVHlwZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyBzdXBlciB0eXBlIG11c3QgcmVmZXIgdG8gYSBjbGFzcyI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyIjpobigiX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9VcHBlckFuZExvd2VyQm91bmRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG11c3Qgbm90IGhhdmUgYm90aCBhIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZCI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljIix0KT8iQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlT3V0T2ZTY29wZVR5cGVQYXJhbWV0ZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBvbmx5IHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBpbiBzY29wZSI6dH1mdW5jdGlvbiBWNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO3Qucnx8KHQucj0hMCxYYyh0LCJncmFwaCIpLHN6KHQsImdyYXBoIiksYXoodCxHRSksTUkodC5vLCJUIiksTXIoU28odC5hKSx0LnApLE1yKFNvKHQuZiksdC5hKSxNcihTbyh0Lm4pLHQuZiksTXIoU28odC5nKSx0Lm4pLE1yKFNvKHQuYyksdC5uKSxNcihTbyh0LmkpLHQuYyksTXIoU28odC5qKSx0LmMpLE1yKFNvKHQuZCksdC5mKSxNcihTbyh0LmUpLHQuYSkscmModC5wLG94bixOZmUsITAsITAsITEpLFY9aTQodC5wLHQucCwic2V0UHJvcGVydHkiKSxZPUhuZShWKSxrPUkwKHQubyksQz0obj0ocj1uZXcgd3YsciksbiksTXIoKCFrLmQmJihrLmQ9bmV3IFNzKGhvLGssMSkpLGsuZCksQyksTT1ucnQoWSkscDR0KEMsTSksWHooVixrLGc4dCksaz1ucnQoWSksWHooVixrLFlfKSxWPWk0KHQucCxudWxsLCJnZXRQcm9wZXJ0eSIpLFk9SG5lKFYpLGs9STAodC5vKSxDPW5ydChZKSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxYeihWLGssZzh0KSxrPW5ydChZKSxIPU8xKFYsayxudWxsKSxIJiZILkZpKCksVj1pNCh0LnAsdC53Yi5lLCJoYXNQcm9wZXJ0eSIpLGs9STAodC5vKSxDPShzPShvPW5ldyB3dixvKSxzKSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxYeihWLGssZzh0KSxWPWk0KHQucCx0LnAsImNvcHlQcm9wZXJ0aWVzIiksQ28oVix0LnAsamN0KSxWPWk0KHQucCxudWxsLCJnZXRBbGxQcm9wZXJ0aWVzIiksaz1JMCh0LndiLlApLEM9STAodC5vKSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxNPShoPShkPW5ldyB3dixkKSxoKSxNcigoIUMuZCYmKEMuZD1uZXcgU3MoaG8sQywxKSksQy5kKSxNKSxDPUkwKHQud2IuTSksTXIoKCFrLmQmJihrLmQ9bmV3IFNzKGhvLGssMSkpLGsuZCksQyksRj1PMShWLGssbnVsbCksRiYmRi5GaSgpLHJjKHQuYSxJNyxoZGUsITAsITEsITApLEZpKHUoU3QoV3QodC5hKSwwKSwxOCksdC5rLG51bGwsRWRlLDAsLTEsSTcsITEsITEsITAsITAsITEsITEsITEpLHJjKHQuZixzTixkZGUsITAsITEsITApLEZpKHUoU3QoV3QodC5mKSwwKSwxOCksdC5nLHUoU3QoV3QodC5nKSwwKSwxOCksImxhYmVscyIsMCwtMSxzTiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksbHModShTdChXdCh0LmYpLDEpLDM0KSx0LndiLl8sVGRlLG51bGwsMCwxLHNOLCExLCExLCEwLCExLCEwLCExKSxyYyh0Lm4sYU4sIkVsa1NoYXBlIiwhMCwhMSwhMCksbHModShTdChXdCh0Lm4pLDApLDM0KSx0LndiLnQsJGN0LERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm4pLDEpLDM0KSx0LndiLnQsemN0LERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm4pLDIpLDM0KSx0LndiLnQsIngiLERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm4pLDMpLDM0KSx0LndiLnQsInkiLERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksVj1pNCh0Lm4sbnVsbCwic2V0RGltZW5zaW9ucyIpLENvKFYsdC53Yi50LHpjdCksQ28oVix0LndiLnQsJGN0KSxWPWk0KHQubixudWxsLCJzZXRMb2NhdGlvbiIpLENvKFYsdC53Yi50LCJ4IiksQ28oVix0LndiLnQsInkiKSxyYyh0LmcscW8saDh0LCExLCExLCEwKSxGaSh1KFN0KFd0KHQuZyksMCksMTgpLHQuZix1KFN0KFd0KHQuZiksMCksMTgpLHFjdCwwLDEscW8sITEsITEsITAsITEsITEsITEsITEpLGxzKHUoU3QoV3QodC5nKSwxKSwzNCksdC53Yi5fLEhjdCwiIiwwLDEscW8sITEsITEsITAsITEsITAsITEpLHJjKHQuYyxicixnZGUsITAsITEsITApLEZpKHUoU3QoV3QodC5jKSwwKSwxOCksdC5kLHUoU3QoV3QodC5kKSwxKSwxOCksIm91dGdvaW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5jKSwxKSwxOCksdC5kLHUoU3QoV3QodC5kKSwyKSwxOCksImluY29taW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQuaSxucyxmOHQsITEsITEsITApLEZpKHUoU3QoV3QodC5pKSwwKSwxOCksdC5qLHUoU3QoV3QodC5qKSwwKSwxOCksInBvcnRzIiwwLC0xLG5zLCExLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQuaSksMSksMTgpLHQuaSx1KFN0KFd0KHQuaSksMiksMTgpLEdjdCwwLC0xLG5zLCExLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQuaSksMiksMTgpLHQuaSx1KFN0KFd0KHQuaSksMSksMTgpLHFjdCwwLDEsbnMsITEsITEsITAsITEsITEsITEsITEpLEZpKHUoU3QoV3QodC5pKSwzKSwxOCksdC5kLHUoU3QoV3QodC5kKSwwKSwxOCksImNvbnRhaW5lZEVkZ2VzIiwwLC0xLG5zLCExLCExLCEwLCEwLCExLCExLCExKSxscyh1KFN0KFd0KHQuaSksNCksMzQpLHQud2IuZSxDZGUsbnVsbCwwLDEsbnMsITAsITAsITEsITEsITAsITApLHJjKHQuaixmbCxkOHQsITEsITEsITApLEZpKHUoU3QoV3QodC5qKSwwKSwxOCksdC5pLHUoU3QoV3QodC5pKSwwKSwxOCkscWN0LDAsMSxmbCwhMSwhMSwhMCwhMSwhMSwhMSwhMSkscmModC5kLFdzLGw4dCwhMSwhMSwhMCksRmkodShTdChXdCh0LmQpLDApLDE4KSx0LmksdShTdChXdCh0LmkpLDMpLDE4KSwiY29udGFpbmluZ05vZGUiLDAsMSxXcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksRmkodShTdChXdCh0LmQpLDEpLDE4KSx0LmMsdShTdChXdCh0LmMpLDApLDE4KSxwOHQsMCwtMSxXcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksRmkodShTdChXdCh0LmQpLDIpLDE4KSx0LmMsdShTdChXdCh0LmMpLDEpLDE4KSxWY3QsMCwtMSxXcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksRmkodShTdChXdCh0LmQpLDMpLDE4KSx0LmUsdShTdChXdCh0LmUpLDUpLDE4KSxiOHQsMCwtMSxXcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksbHModShTdChXdCh0LmQpLDQpLDM0KSx0LndiLmUsImh5cGVyZWRnZSIsbnVsbCwwLDEsV3MsITAsITAsITEsITEsITAsITApLGxzKHUoU3QoV3QodC5kKSw1KSwzNCksdC53Yi5lLENkZSxudWxsLDAsMSxXcywhMCwhMCwhMSwhMSwhMCwhMCksbHModShTdChXdCh0LmQpLDYpLDM0KSx0LndiLmUsInNlbGZsb29wIixudWxsLDAsMSxXcywhMCwhMCwhMSwhMSwhMCwhMCksbHModShTdChXdCh0LmQpLDcpLDM0KSx0LndiLmUsImNvbm5lY3RlZCIsbnVsbCwwLDEsV3MsITAsITAsITEsITEsITAsITApLHJjKHQuYixIaCxmZGUsITEsITEsITApLGxzKHUoU3QoV3QodC5iKSwwKSwzNCksdC53Yi50LCJ4IixERSwxLDEsSGgsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iKSwxKSwzNCksdC53Yi50LCJ5IixERSwxLDEsSGgsITEsITEsITAsITEsITAsITEpLFY9aTQodC5iLG51bGwsInNldCIpLENvKFYsdC53Yi50LCJ4IiksQ28oVix0LndiLnQsInkiKSxyYyh0LmUsWmkscGRlLCExLCExLCEwKSxscyh1KFN0KFd0KHQuZSksMCksMzQpLHQud2IudCwic3RhcnRYIixudWxsLDAsMSxaaSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmUpLDEpLDM0KSx0LndiLnQsInN0YXJ0WSIsbnVsbCwwLDEsWmksITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5lKSwyKSwzNCksdC53Yi50LCJlbmRYIixudWxsLDAsMSxaaSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmUpLDMpLDM0KSx0LndiLnQsImVuZFkiLG51bGwsMCwxLFppLCExLCExLCEwLCExLCEwLCExKSxGaSh1KFN0KFd0KHQuZSksNCksMTgpLHQuYixudWxsLHdILDAsLTEsWmksITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5lKSw1KSwxOCksdC5kLHUoU3QoV3QodC5kKSwzKSwxOCkscWN0LDAsMSxaaSwhMSwhMSwhMCwhMSwhMSwhMSwhMSksRmkodShTdChXdCh0LmUpLDYpLDE4KSx0LmMsbnVsbCx2OHQsMCwxLFppLCExLCExLCEwLCExLCEwLCExLCExKSxGaSh1KFN0KFd0KHQuZSksNyksMTgpLHQuYyxudWxsLHc4dCwwLDEsWmksITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5lKSw4KSwxOCksdC5lLHUoU3QoV3QodC5lKSw5KSwxOCksbTh0LDAsLTEsWmksITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5lKSw5KSwxOCksdC5lLHUoU3QoV3QodC5lKSw4KSwxOCkseTh0LDAsLTEsWmksITEsITEsITAsITEsITAsITEsITEpLGxzKHUoU3QoV3QodC5lKSwxMCksMzQpLHQud2IuXyxUZGUsbnVsbCwwLDEsWmksITEsITEsITAsITEsITAsITEpLFY9aTQodC5lLG51bGwsInNldFN0YXJ0TG9jYXRpb24iKSxDbyhWLHQud2IudCwieCIpLENvKFYsdC53Yi50LCJ5IiksVj1pNCh0LmUsbnVsbCwic2V0RW5kTG9jYXRpb24iKSxDbyhWLHQud2IudCwieCIpLENvKFYsdC53Yi50LCJ5IikscmModC5rLE0yLCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeSIsITEsITEsITEpLGs9STAodC5vKSxDPSh3PShlPW5ldyB3dixlKSx3KSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxIb2UodShTdChXdCh0LmspLDApLDM0KSxrLCJrZXkiLE0yLCExLCExLCEwLCExKSxscyh1KFN0KFd0KHQuayksMSksMzQpLHQucyxZXyxudWxsLDAsMSxNMiwhMSwhMSwhMCwhMSwhMCwhMSksc2kodC5vLFFodCwiSVByb3BlcnR5IiwhMCksc2kodC5zLFhuLCJQcm9wZXJ0eVZhbHVlIiwhMCkscXl0KHQsR0UpKX1mdW5jdGlvbiBxaGUoKXtxaGU9Wix2dD1QdChIdSxONCwyNSxZYSwxNSwxKSx2dFs5XT0zNSx2dFsxMF09MTksdnRbMTNdPTE5LHZ0WzMyXT01MSx2dFszM109NDksdnRbMzRdPTMzLFJ0KHZ0LDM1LDM4LDQ5KSx2dFszOF09MSxSdCh2dCwzOSw0NSw0OSksUnQodnQsNDUsNDcsLTcxKSx2dFs0N109NDksUnQodnQsNDgsNTgsLTcxKSx2dFs1OF09NjEsdnRbNTldPTQ5LHZ0WzYwXT0xLHZ0WzYxXT00OSx2dFs2Ml09MzMsUnQodnQsNjMsNjUsNDkpLFJ0KHZ0LDY1LDkxLC0zKSxSdCh2dCw5MSw5MywzMyksdnRbOTNdPTEsdnRbOTRdPTMzLHZ0Wzk1XT0tMyx2dFs5Nl09MzMsUnQodnQsOTcsMTIzLC0zKSxSdCh2dCwxMjMsMTgzLDMzKSx2dFsxODNdPS04NyxSdCh2dCwxODQsMTkyLDMzKSxSdCh2dCwxOTIsMjE1LC0xOSksdnRbMjE1XT0zMyxSdCh2dCwyMTYsMjQ3LC0xOSksdnRbMjQ3XT0zMyxSdCh2dCwyNDgsMzA2LC0xOSksUnQodnQsMzA2LDMwOCwzMyksUnQodnQsMzA4LDMxOSwtMTkpLFJ0KHZ0LDMxOSwzMjEsMzMpLFJ0KHZ0LDMyMSwzMjksLTE5KSx2dFszMjldPTMzLFJ0KHZ0LDMzMCwzODMsLTE5KSx2dFszODNdPTMzLFJ0KHZ0LDM4NCw0NTIsLTE5KSxSdCh2dCw0NTIsNDYxLDMzKSxSdCh2dCw0NjEsNDk3LC0xOSksUnQodnQsNDk3LDUwMCwzMyksUnQodnQsNTAwLDUwMiwtMTkpLFJ0KHZ0LDUwMiw1MDYsMzMpLFJ0KHZ0LDUwNiw1MzYsLTE5KSxSdCh2dCw1MzYsNTkyLDMzKSxSdCh2dCw1OTIsNjgxLC0xOSksUnQodnQsNjgxLDY5OSwzMyksUnQodnQsNjk5LDcwNiwtMTkpLFJ0KHZ0LDcwNiw3MjAsMzMpLFJ0KHZ0LDcyMCw3MjIsLTg3KSxSdCh2dCw3MjIsNzY4LDMzKSxSdCh2dCw3NjgsODM4LC04NyksUnQodnQsODM4LDg2NCwzMyksUnQodnQsODY0LDg2NiwtODcpLFJ0KHZ0LDg2Niw5MDIsMzMpLHZ0WzkwMl09LTE5LHZ0WzkwM109LTg3LFJ0KHZ0LDkwNCw5MDcsLTE5KSx2dFs5MDddPTMzLHZ0WzkwOF09LTE5LHZ0WzkwOV09MzMsUnQodnQsOTEwLDkzMCwtMTkpLHZ0WzkzMF09MzMsUnQodnQsOTMxLDk3NSwtMTkpLHZ0Wzk3NV09MzMsUnQodnQsOTc2LDk4MywtMTkpLFJ0KHZ0LDk4Myw5ODYsMzMpLHZ0Wzk4Nl09LTE5LHZ0Wzk4N109MzMsdnRbOTg4XT0tMTksdnRbOTg5XT0zMyx2dFs5OTBdPS0xOSx2dFs5OTFdPTMzLHZ0Wzk5Ml09LTE5LHZ0Wzk5M109MzMsUnQodnQsOTk0LDEwMTIsLTE5KSxSdCh2dCwxMDEyLDEwMjUsMzMpLFJ0KHZ0LDEwMjUsMTAzNywtMTkpLHZ0WzEwMzddPTMzLFJ0KHZ0LDEwMzgsMTEwNCwtMTkpLHZ0WzExMDRdPTMzLFJ0KHZ0LDExMDUsMTExNywtMTkpLHZ0WzExMTddPTMzLFJ0KHZ0LDExMTgsMTE1NCwtMTkpLHZ0WzExNTRdPTMzLFJ0KHZ0LDExNTUsMTE1OSwtODcpLFJ0KHZ0LDExNTksMTE2OCwzMyksUnQodnQsMTE2OCwxMjIxLC0xOSksUnQodnQsMTIyMSwxMjIzLDMzKSxSdCh2dCwxMjIzLDEyMjUsLTE5KSxSdCh2dCwxMjI1LDEyMjcsMzMpLFJ0KHZ0LDEyMjcsMTIyOSwtMTkpLFJ0KHZ0LDEyMjksMTIzMiwzMyksUnQodnQsMTIzMiwxMjYwLC0xOSksUnQodnQsMTI2MCwxMjYyLDMzKSxSdCh2dCwxMjYyLDEyNzAsLTE5KSxSdCh2dCwxMjcwLDEyNzIsMzMpLFJ0KHZ0LDEyNzIsMTI3NCwtMTkpLFJ0KHZ0LDEyNzQsMTMyOSwzMyksUnQodnQsMTMyOSwxMzY3LC0xOSksUnQodnQsMTM2NywxMzY5LDMzKSx2dFsxMzY5XT0tMTksUnQodnQsMTM3MCwxMzc3LDMzKSxSdCh2dCwxMzc3LDE0MTUsLTE5KSxSdCh2dCwxNDE1LDE0MjUsMzMpLFJ0KHZ0LDE0MjUsMTQ0MiwtODcpLHZ0WzE0NDJdPTMzLFJ0KHZ0LDE0NDMsMTQ2NiwtODcpLHZ0WzE0NjZdPTMzLFJ0KHZ0LDE0NjcsMTQ3MCwtODcpLHZ0WzE0NzBdPTMzLHZ0WzE0NzFdPS04Nyx2dFsxNDcyXT0zMyxSdCh2dCwxNDczLDE0NzUsLTg3KSx2dFsxNDc1XT0zMyx2dFsxNDc2XT0tODcsUnQodnQsMTQ3NywxNDg4LDMzKSxSdCh2dCwxNDg4LDE1MTUsLTE5KSxSdCh2dCwxNTE1LDE1MjAsMzMpLFJ0KHZ0LDE1MjAsMTUyMywtMTkpLFJ0KHZ0LDE1MjMsMTU2OSwzMyksUnQodnQsMTU2OSwxNTk1LC0xOSksUnQodnQsMTU5NSwxNjAwLDMzKSx2dFsxNjAwXT0tODcsUnQodnQsMTYwMSwxNjExLC0xOSksUnQodnQsMTYxMSwxNjE5LC04NyksUnQodnQsMTYxOSwxNjMyLDMzKSxSdCh2dCwxNjMyLDE2NDIsLTg3KSxSdCh2dCwxNjQyLDE2NDgsMzMpLHZ0WzE2NDhdPS04NyxSdCh2dCwxNjQ5LDE3MjAsLTE5KSxSdCh2dCwxNzIwLDE3MjIsMzMpLFJ0KHZ0LDE3MjIsMTcyNywtMTkpLHZ0WzE3MjddPTMzLFJ0KHZ0LDE3MjgsMTc0MywtMTkpLHZ0WzE3NDNdPTMzLFJ0KHZ0LDE3NDQsMTc0OCwtMTkpLHZ0WzE3NDhdPTMzLHZ0WzE3NDldPS0xOSxSdCh2dCwxNzUwLDE3NjUsLTg3KSxSdCh2dCwxNzY1LDE3NjcsLTE5KSxSdCh2dCwxNzY3LDE3NjksLTg3KSx2dFsxNzY5XT0zMyxSdCh2dCwxNzcwLDE3NzQsLTg3KSxSdCh2dCwxNzc0LDE3NzYsMzMpLFJ0KHZ0LDE3NzYsMTc4NiwtODcpLFJ0KHZ0LDE3ODYsMjMwNSwzMyksUnQodnQsMjMwNSwyMzA4LC04NyksdnRbMjMwOF09MzMsUnQodnQsMjMwOSwyMzYyLC0xOSksUnQodnQsMjM2MiwyMzY0LDMzKSx2dFsyMzY0XT0tODcsdnRbMjM2NV09LTE5LFJ0KHZ0LDIzNjYsMjM4MiwtODcpLFJ0KHZ0LDIzODIsMjM4NSwzMyksUnQodnQsMjM4NSwyMzg5LC04NyksUnQodnQsMjM4OSwyMzkyLDMzKSxSdCh2dCwyMzkyLDI0MDIsLTE5KSxSdCh2dCwyNDAyLDI0MDQsLTg3KSxSdCh2dCwyNDA0LDI0MDYsMzMpLFJ0KHZ0LDI0MDYsMjQxNiwtODcpLFJ0KHZ0LDI0MTYsMjQzMywzMyksUnQodnQsMjQzMywyNDM2LC04NyksdnRbMjQzNl09MzMsUnQodnQsMjQzNywyNDQ1LC0xOSksUnQodnQsMjQ0NSwyNDQ3LDMzKSxSdCh2dCwyNDQ3LDI0NDksLTE5KSxSdCh2dCwyNDQ5LDI0NTEsMzMpLFJ0KHZ0LDI0NTEsMjQ3MywtMTkpLHZ0WzI0NzNdPTMzLFJ0KHZ0LDI0NzQsMjQ4MSwtMTkpLHZ0WzI0ODFdPTMzLHZ0WzI0ODJdPS0xOSxSdCh2dCwyNDgzLDI0ODYsMzMpLFJ0KHZ0LDI0ODYsMjQ5MCwtMTkpLFJ0KHZ0LDI0OTAsMjQ5MiwzMyksdnRbMjQ5Ml09LTg3LHZ0WzI0OTNdPTMzLFJ0KHZ0LDI0OTQsMjUwMSwtODcpLFJ0KHZ0LDI1MDEsMjUwMywzMyksUnQodnQsMjUwMywyNTA1LC04NyksUnQodnQsMjUwNSwyNTA3LDMzKSxSdCh2dCwyNTA3LDI1MTAsLTg3KSxSdCh2dCwyNTEwLDI1MTksMzMpLHZ0WzI1MTldPS04NyxSdCh2dCwyNTIwLDI1MjQsMzMpLFJ0KHZ0LDI1MjQsMjUyNiwtMTkpLHZ0WzI1MjZdPTMzLFJ0KHZ0LDI1MjcsMjUzMCwtMTkpLFJ0KHZ0LDI1MzAsMjUzMiwtODcpLFJ0KHZ0LDI1MzIsMjUzNCwzMyksUnQodnQsMjUzNCwyNTQ0LC04NyksUnQodnQsMjU0NCwyNTQ2LC0xOSksUnQodnQsMjU0NiwyNTYyLDMzKSx2dFsyNTYyXT0tODcsUnQodnQsMjU2MywyNTY1LDMzKSxSdCh2dCwyNTY1LDI1NzEsLTE5KSxSdCh2dCwyNTcxLDI1NzUsMzMpLFJ0KHZ0LDI1NzUsMjU3NywtMTkpLFJ0KHZ0LDI1NzcsMjU3OSwzMyksUnQodnQsMjU3OSwyNjAxLC0xOSksdnRbMjYwMV09MzMsUnQodnQsMjYwMiwyNjA5LC0xOSksdnRbMjYwOV09MzMsUnQodnQsMjYxMCwyNjEyLC0xOSksdnRbMjYxMl09MzMsUnQodnQsMjYxMywyNjE1LC0xOSksdnRbMjYxNV09MzMsUnQodnQsMjYxNiwyNjE4LC0xOSksUnQodnQsMjYxOCwyNjIwLDMzKSx2dFsyNjIwXT0tODcsdnRbMjYyMV09MzMsUnQodnQsMjYyMiwyNjI3LC04NyksUnQodnQsMjYyNywyNjMxLDMzKSxSdCh2dCwyNjMxLDI2MzMsLTg3KSxSdCh2dCwyNjMzLDI2MzUsMzMpLFJ0KHZ0LDI2MzUsMjYzOCwtODcpLFJ0KHZ0LDI2MzgsMjY0OSwzMyksUnQodnQsMjY0OSwyNjUzLC0xOSksdnRbMjY1M109MzMsdnRbMjY1NF09LTE5LFJ0KHZ0LDI2NTUsMjY2MiwzMyksUnQodnQsMjY2MiwyNjc0LC04NyksUnQodnQsMjY3NCwyNjc3LC0xOSksUnQodnQsMjY3NywyNjg5LDMzKSxSdCh2dCwyNjg5LDI2OTIsLTg3KSx2dFsyNjkyXT0zMyxSdCh2dCwyNjkzLDI3MDAsLTE5KSx2dFsyNzAwXT0zMyx2dFsyNzAxXT0tMTksdnRbMjcwMl09MzMsUnQodnQsMjcwMywyNzA2LC0xOSksdnRbMjcwNl09MzMsUnQodnQsMjcwNywyNzI5LC0xOSksdnRbMjcyOV09MzMsUnQodnQsMjczMCwyNzM3LC0xOSksdnRbMjczN109MzMsUnQodnQsMjczOCwyNzQwLC0xOSksdnRbMjc0MF09MzMsUnQodnQsMjc0MSwyNzQ2LC0xOSksUnQodnQsMjc0NiwyNzQ4LDMzKSx2dFsyNzQ4XT0tODcsdnRbMjc0OV09LTE5LFJ0KHZ0LDI3NTAsMjc1OCwtODcpLHZ0WzI3NThdPTMzLFJ0KHZ0LDI3NTksMjc2MiwtODcpLHZ0WzI3NjJdPTMzLFJ0KHZ0LDI3NjMsMjc2NiwtODcpLFJ0KHZ0LDI3NjYsMjc4NCwzMyksdnRbMjc4NF09LTE5LFJ0KHZ0LDI3ODUsMjc5MCwzMyksUnQodnQsMjc5MCwyODAwLC04NyksUnQodnQsMjgwMCwyODE3LDMzKSxSdCh2dCwyODE3LDI4MjAsLTg3KSx2dFsyODIwXT0zMyxSdCh2dCwyODIxLDI4MjksLTE5KSxSdCh2dCwyODI5LDI4MzEsMzMpLFJ0KHZ0LDI4MzEsMjgzMywtMTkpLFJ0KHZ0LDI4MzMsMjgzNSwzMyksUnQodnQsMjgzNSwyODU3LC0xOSksdnRbMjg1N109MzMsUnQodnQsMjg1OCwyODY1LC0xOSksdnRbMjg2NV09MzMsUnQodnQsMjg2NiwyODY4LC0xOSksUnQodnQsMjg2OCwyODcwLDMzKSxSdCh2dCwyODcwLDI4NzQsLTE5KSxSdCh2dCwyODc0LDI4NzYsMzMpLHZ0WzI4NzZdPS04Nyx2dFsyODc3XT0tMTksUnQodnQsMjg3OCwyODg0LC04NyksUnQodnQsMjg4NCwyODg3LDMzKSxSdCh2dCwyODg3LDI4ODksLTg3KSxSdCh2dCwyODg5LDI4OTEsMzMpLFJ0KHZ0LDI4OTEsMjg5NCwtODcpLFJ0KHZ0LDI4OTQsMjkwMiwzMyksUnQodnQsMjkwMiwyOTA0LC04NyksUnQodnQsMjkwNCwyOTA4LDMzKSxSdCh2dCwyOTA4LDI5MTAsLTE5KSx2dFsyOTEwXT0zMyxSdCh2dCwyOTExLDI5MTQsLTE5KSxSdCh2dCwyOTE0LDI5MTgsMzMpLFJ0KHZ0LDI5MTgsMjkyOCwtODcpLFJ0KHZ0LDI5MjgsMjk0NiwzMyksUnQodnQsMjk0NiwyOTQ4LC04NyksdnRbMjk0OF09MzMsUnQodnQsMjk0OSwyOTU1LC0xOSksUnQodnQsMjk1NSwyOTU4LDMzKSxSdCh2dCwyOTU4LDI5NjEsLTE5KSx2dFsyOTYxXT0zMyxSdCh2dCwyOTYyLDI5NjYsLTE5KSxSdCh2dCwyOTY2LDI5NjksMzMpLFJ0KHZ0LDI5NjksMjk3MSwtMTkpLHZ0WzI5NzFdPTMzLHZ0WzI5NzJdPS0xOSx2dFsyOTczXT0zMyxSdCh2dCwyOTc0LDI5NzYsLTE5KSxSdCh2dCwyOTc2LDI5NzksMzMpLFJ0KHZ0LDI5NzksMjk4MSwtMTkpLFJ0KHZ0LDI5ODEsMjk4NCwzMyksUnQodnQsMjk4NCwyOTg3LC0xOSksUnQodnQsMjk4NywyOTkwLDMzKSxSdCh2dCwyOTkwLDI5OTgsLTE5KSx2dFsyOTk4XT0zMyxSdCh2dCwyOTk5LDMwMDIsLTE5KSxSdCh2dCwzMDAyLDMwMDYsMzMpLFJ0KHZ0LDMwMDYsMzAxMSwtODcpLFJ0KHZ0LDMwMTEsMzAxNCwzMyksUnQodnQsMzAxNCwzMDE3LC04NyksdnRbMzAxN109MzMsUnQodnQsMzAxOCwzMDIyLC04NyksUnQodnQsMzAyMiwzMDMxLDMzKSx2dFszMDMxXT0tODcsUnQodnQsMzAzMiwzMDQ3LDMzKSxSdCh2dCwzMDQ3LDMwNTYsLTg3KSxSdCh2dCwzMDU2LDMwNzMsMzMpLFJ0KHZ0LDMwNzMsMzA3NiwtODcpLHZ0WzMwNzZdPTMzLFJ0KHZ0LDMwNzcsMzA4NSwtMTkpLHZ0WzMwODVdPTMzLFJ0KHZ0LDMwODYsMzA4OSwtMTkpLHZ0WzMwODldPTMzLFJ0KHZ0LDMwOTAsMzExMywtMTkpLHZ0WzMxMTNdPTMzLFJ0KHZ0LDMxMTQsMzEyNCwtMTkpLHZ0WzMxMjRdPTMzLFJ0KHZ0LDMxMjUsMzEzMCwtMTkpLFJ0KHZ0LDMxMzAsMzEzNCwzMyksUnQodnQsMzEzNCwzMTQxLC04NyksdnRbMzE0MV09MzMsUnQodnQsMzE0MiwzMTQ1LC04NyksdnRbMzE0NV09MzMsUnQodnQsMzE0NiwzMTUwLC04NyksUnQodnQsMzE1MCwzMTU3LDMzKSxSdCh2dCwzMTU3LDMxNTksLTg3KSxSdCh2dCwzMTU5LDMxNjgsMzMpLFJ0KHZ0LDMxNjgsMzE3MCwtMTkpLFJ0KHZ0LDMxNzAsMzE3NCwzMyksUnQodnQsMzE3NCwzMTg0LC04NyksUnQodnQsMzE4NCwzMjAyLDMzKSxSdCh2dCwzMjAyLDMyMDQsLTg3KSx2dFszMjA0XT0zMyxSdCh2dCwzMjA1LDMyMTMsLTE5KSx2dFszMjEzXT0zMyxSdCh2dCwzMjE0LDMyMTcsLTE5KSx2dFszMjE3XT0zMyxSdCh2dCwzMjE4LDMyNDEsLTE5KSx2dFszMjQxXT0zMyxSdCh2dCwzMjQyLDMyNTIsLTE5KSx2dFszMjUyXT0zMyxSdCh2dCwzMjUzLDMyNTgsLTE5KSxSdCh2dCwzMjU4LDMyNjIsMzMpLFJ0KHZ0LDMyNjIsMzI2OSwtODcpLHZ0WzMyNjldPTMzLFJ0KHZ0LDMyNzAsMzI3MywtODcpLHZ0WzMyNzNdPTMzLFJ0KHZ0LDMyNzQsMzI3OCwtODcpLFJ0KHZ0LDMyNzgsMzI4NSwzMyksUnQodnQsMzI4NSwzMjg3LC04NyksUnQodnQsMzI4NywzMjk0LDMzKSx2dFszMjk0XT0tMTksdnRbMzI5NV09MzMsUnQodnQsMzI5NiwzMjk4LC0xOSksUnQodnQsMzI5OCwzMzAyLDMzKSxSdCh2dCwzMzAyLDMzMTIsLTg3KSxSdCh2dCwzMzEyLDMzMzAsMzMpLFJ0KHZ0LDMzMzAsMzMzMiwtODcpLHZ0WzMzMzJdPTMzLFJ0KHZ0LDMzMzMsMzM0MSwtMTkpLHZ0WzMzNDFdPTMzLFJ0KHZ0LDMzNDIsMzM0NSwtMTkpLHZ0WzMzNDVdPTMzLFJ0KHZ0LDMzNDYsMzM2OSwtMTkpLHZ0WzMzNjldPTMzLFJ0KHZ0LDMzNzAsMzM4NiwtMTkpLFJ0KHZ0LDMzODYsMzM5MCwzMyksUnQodnQsMzM5MCwzMzk2LC04NyksUnQodnQsMzM5NiwzMzk4LDMzKSxSdCh2dCwzMzk4LDM0MDEsLTg3KSx2dFszNDAxXT0zMyxSdCh2dCwzNDAyLDM0MDYsLTg3KSxSdCh2dCwzNDA2LDM0MTUsMzMpLHZ0WzM0MTVdPS04NyxSdCh2dCwzNDE2LDM0MjQsMzMpLFJ0KHZ0LDM0MjQsMzQyNiwtMTkpLFJ0KHZ0LDM0MjYsMzQzMCwzMyksUnQodnQsMzQzMCwzNDQwLC04NyksUnQodnQsMzQ0MCwzNTg1LDMzKSxSdCh2dCwzNTg1LDM2MzEsLTE5KSx2dFszNjMxXT0zMyx2dFszNjMyXT0tMTksdnRbMzYzM109LTg3LFJ0KHZ0LDM2MzQsMzYzNiwtMTkpLFJ0KHZ0LDM2MzYsMzY0MywtODcpLFJ0KHZ0LDM2NDMsMzY0OCwzMyksUnQodnQsMzY0OCwzNjU0LC0xOSksUnQodnQsMzY1NCwzNjYzLC04NyksdnRbMzY2M109MzMsUnQodnQsMzY2NCwzNjc0LC04NyksUnQodnQsMzY3NCwzNzEzLDMzKSxSdCh2dCwzNzEzLDM3MTUsLTE5KSx2dFszNzE1XT0zMyx2dFszNzE2XT0tMTksUnQodnQsMzcxNywzNzE5LDMzKSxSdCh2dCwzNzE5LDM3MjEsLTE5KSx2dFszNzIxXT0zMyx2dFszNzIyXT0tMTksUnQodnQsMzcyMywzNzI1LDMzKSx2dFszNzI1XT0tMTksUnQodnQsMzcyNiwzNzMyLDMzKSxSdCh2dCwzNzMyLDM3MzYsLTE5KSx2dFszNzM2XT0zMyxSdCh2dCwzNzM3LDM3NDQsLTE5KSx2dFszNzQ0XT0zMyxSdCh2dCwzNzQ1LDM3NDgsLTE5KSx2dFszNzQ4XT0zMyx2dFszNzQ5XT0tMTksdnRbMzc1MF09MzMsdnRbMzc1MV09LTE5LFJ0KHZ0LDM3NTIsMzc1NCwzMyksUnQodnQsMzc1NCwzNzU2LC0xOSksdnRbMzc1Nl09MzMsUnQodnQsMzc1NywzNzU5LC0xOSksdnRbMzc1OV09MzMsdnRbMzc2MF09LTE5LHZ0WzM3NjFdPS04NyxSdCh2dCwzNzYyLDM3NjQsLTE5KSxSdCh2dCwzNzY0LDM3NzAsLTg3KSx2dFszNzcwXT0zMyxSdCh2dCwzNzcxLDM3NzMsLTg3KSx2dFszNzczXT0tMTksUnQodnQsMzc3NCwzNzc2LDMzKSxSdCh2dCwzNzc2LDM3ODEsLTE5KSx2dFszNzgxXT0zMyx2dFszNzgyXT0tODcsdnRbMzc4M109MzMsUnQodnQsMzc4NCwzNzkwLC04NyksUnQodnQsMzc5MCwzNzkyLDMzKSxSdCh2dCwzNzkyLDM4MDIsLTg3KSxSdCh2dCwzODAyLDM4NjQsMzMpLFJ0KHZ0LDM4NjQsMzg2NiwtODcpLFJ0KHZ0LDM4NjYsMzg3MiwzMyksUnQodnQsMzg3MiwzODgyLC04NyksUnQodnQsMzg4MiwzODkzLDMzKSx2dFszODkzXT0tODcsdnRbMzg5NF09MzMsdnRbMzg5NV09LTg3LHZ0WzM4OTZdPTMzLHZ0WzM4OTddPS04NyxSdCh2dCwzODk4LDM5MDIsMzMpLFJ0KHZ0LDM5MDIsMzkwNCwtODcpLFJ0KHZ0LDM5MDQsMzkxMiwtMTkpLHZ0WzM5MTJdPTMzLFJ0KHZ0LDM5MTMsMzk0NiwtMTkpLFJ0KHZ0LDM5NDYsMzk1MywzMyksUnQodnQsMzk1MywzOTczLC04NyksdnRbMzk3M109MzMsUnQodnQsMzk3NCwzOTgwLC04NyksUnQodnQsMzk4MCwzOTg0LDMzKSxSdCh2dCwzOTg0LDM5OTAsLTg3KSx2dFszOTkwXT0zMyx2dFszOTkxXT0tODcsdnRbMzk5Ml09MzMsUnQodnQsMzk5Myw0MDE0LC04NyksUnQodnQsNDAxNCw0MDE3LDMzKSxSdCh2dCw0MDE3LDQwMjQsLTg3KSx2dFs0MDI0XT0zMyx2dFs0MDI1XT0tODcsUnQodnQsNDAyNiw0MjU2LDMzKSxSdCh2dCw0MjU2LDQyOTQsLTE5KSxSdCh2dCw0Mjk0LDQzMDQsMzMpLFJ0KHZ0LDQzMDQsNDM0MywtMTkpLFJ0KHZ0LDQzNDMsNDM1MiwzMyksdnRbNDM1Ml09LTE5LHZ0WzQzNTNdPTMzLFJ0KHZ0LDQzNTQsNDM1NiwtMTkpLHZ0WzQzNTZdPTMzLFJ0KHZ0LDQzNTcsNDM2MCwtMTkpLHZ0WzQzNjBdPTMzLHZ0WzQzNjFdPS0xOSx2dFs0MzYyXT0zMyxSdCh2dCw0MzYzLDQzNjUsLTE5KSx2dFs0MzY1XT0zMyxSdCh2dCw0MzY2LDQzNzEsLTE5KSxSdCh2dCw0MzcxLDQ0MTIsMzMpLHZ0WzQ0MTJdPS0xOSx2dFs0NDEzXT0zMyx2dFs0NDE0XT0tMTksdnRbNDQxNV09MzMsdnRbNDQxNl09LTE5LFJ0KHZ0LDQ0MTcsNDQyOCwzMyksdnRbNDQyOF09LTE5LHZ0WzQ0MjldPTMzLHZ0WzQ0MzBdPS0xOSx2dFs0NDMxXT0zMyx2dFs0NDMyXT0tMTksUnQodnQsNDQzMyw0NDM2LDMzKSxSdCh2dCw0NDM2LDQ0MzgsLTE5KSxSdCh2dCw0NDM4LDQ0NDEsMzMpLHZ0WzQ0NDFdPS0xOSxSdCh2dCw0NDQyLDQ0NDcsMzMpLFJ0KHZ0LDQ0NDcsNDQ1MCwtMTkpLHZ0WzQ0NTBdPTMzLHZ0WzQ0NTFdPS0xOSx2dFs0NDUyXT0zMyx2dFs0NDUzXT0tMTksdnRbNDQ1NF09MzMsdnRbNDQ1NV09LTE5LHZ0WzQ0NTZdPTMzLHZ0WzQ0NTddPS0xOSxSdCh2dCw0NDU4LDQ0NjEsMzMpLFJ0KHZ0LDQ0NjEsNDQ2MywtMTkpLFJ0KHZ0LDQ0NjMsNDQ2NiwzMyksUnQodnQsNDQ2Niw0NDY4LC0xOSksdnRbNDQ2OF09MzMsdnRbNDQ2OV09LTE5LFJ0KHZ0LDQ0NzAsNDUxMCwzMyksdnRbNDUxMF09LTE5LFJ0KHZ0LDQ1MTEsNDUyMCwzMyksdnRbNDUyMF09LTE5LFJ0KHZ0LDQ1MjEsNDUyMywzMyksdnRbNDUyM109LTE5LFJ0KHZ0LDQ1MjQsNDUyNiwzMyksUnQodnQsNDUyNiw0NTI4LC0xOSksUnQodnQsNDUyOCw0NTM1LDMzKSxSdCh2dCw0NTM1LDQ1MzcsLTE5KSx2dFs0NTM3XT0zMyx2dFs0NTM4XT0tMTksdnRbNDUzOV09MzMsUnQodnQsNDU0MCw0NTQ3LC0xOSksUnQodnQsNDU0Nyw0NTg3LDMzKSx2dFs0NTg3XT0tMTksUnQodnQsNDU4OCw0NTkyLDMzKSx2dFs0NTkyXT0tMTksUnQodnQsNDU5Myw0NjAxLDMzKSx2dFs0NjAxXT0tMTksUnQodnQsNDYwMiw3NjgwLDMzKSxSdCh2dCw3NjgwLDc4MzYsLTE5KSxSdCh2dCw3ODM2LDc4NDAsMzMpLFJ0KHZ0LDc4NDAsNzkzMCwtMTkpLFJ0KHZ0LDc5MzAsNzkzNiwzMyksUnQodnQsNzkzNiw3OTU4LC0xOSksUnQodnQsNzk1OCw3OTYwLDMzKSxSdCh2dCw3OTYwLDc5NjYsLTE5KSxSdCh2dCw3OTY2LDc5NjgsMzMpLFJ0KHZ0LDc5NjgsODAwNiwtMTkpLFJ0KHZ0LDgwMDYsODAwOCwzMyksUnQodnQsODAwOCw4MDE0LC0xOSksUnQodnQsODAxNCw4MDE2LDMzKSxSdCh2dCw4MDE2LDgwMjQsLTE5KSx2dFs4MDI0XT0zMyx2dFs4MDI1XT0tMTksdnRbODAyNl09MzMsdnRbODAyN109LTE5LHZ0WzgwMjhdPTMzLHZ0WzgwMjldPS0xOSx2dFs4MDMwXT0zMyxSdCh2dCw4MDMxLDgwNjIsLTE5KSxSdCh2dCw4MDYyLDgwNjQsMzMpLFJ0KHZ0LDgwNjQsODExNywtMTkpLHZ0WzgxMTddPTMzLFJ0KHZ0LDgxMTgsODEyNSwtMTkpLHZ0WzgxMjVdPTMzLHZ0WzgxMjZdPS0xOSxSdCh2dCw4MTI3LDgxMzAsMzMpLFJ0KHZ0LDgxMzAsODEzMywtMTkpLHZ0WzgxMzNdPTMzLFJ0KHZ0LDgxMzQsODE0MSwtMTkpLFJ0KHZ0LDgxNDEsODE0NCwzMyksUnQodnQsODE0NCw4MTQ4LC0xOSksUnQodnQsODE0OCw4MTUwLDMzKSxSdCh2dCw4MTUwLDgxNTYsLTE5KSxSdCh2dCw4MTU2LDgxNjAsMzMpLFJ0KHZ0LDgxNjAsODE3MywtMTkpLFJ0KHZ0LDgxNzMsODE3OCwzMyksUnQodnQsODE3OCw4MTgxLC0xOSksdnRbODE4MV09MzMsUnQodnQsODE4Miw4MTg5LC0xOSksUnQodnQsODE4OSw4NDAwLDMzKSxSdCh2dCw4NDAwLDg0MTMsLTg3KSxSdCh2dCw4NDEzLDg0MTcsMzMpLHZ0Wzg0MTddPS04NyxSdCh2dCw4NDE4LDg0ODYsMzMpLHZ0Wzg0ODZdPS0xOSxSdCh2dCw4NDg3LDg0OTAsMzMpLFJ0KHZ0LDg0OTAsODQ5MiwtMTkpLFJ0KHZ0LDg0OTIsODQ5NCwzMyksdnRbODQ5NF09LTE5LFJ0KHZ0LDg0OTUsODU3NiwzMyksUnQodnQsODU3Niw4NTc5LC0xOSksUnQodnQsODU3OSwxMjI5MywzMyksdnRbMTIyOTNdPS04Nyx2dFsxMjI5NF09MzMsdnRbMTIyOTVdPS0xOSxSdCh2dCwxMjI5NiwxMjMyMSwzMyksUnQodnQsMTIzMjEsMTIzMzAsLTE5KSxSdCh2dCwxMjMzMCwxMjMzNiwtODcpLHZ0WzEyMzM2XT0zMyxSdCh2dCwxMjMzNywxMjM0MiwtODcpLFJ0KHZ0LDEyMzQyLDEyMzUzLDMzKSxSdCh2dCwxMjM1MywxMjQzNywtMTkpLFJ0KHZ0LDEyNDM3LDEyNDQxLDMzKSxSdCh2dCwxMjQ0MSwxMjQ0MywtODcpLFJ0KHZ0LDEyNDQzLDEyNDQ1LDMzKSxSdCh2dCwxMjQ0NSwxMjQ0NywtODcpLFJ0KHZ0LDEyNDQ3LDEyNDQ5LDMzKSxSdCh2dCwxMjQ0OSwxMjUzOSwtMTkpLHZ0WzEyNTM5XT0zMyxSdCh2dCwxMjU0MCwxMjU0MywtODcpLFJ0KHZ0LDEyNTQzLDEyNTQ5LDMzKSxSdCh2dCwxMjU0OSwxMjU4OSwtMTkpLFJ0KHZ0LDEyNTg5LDE5OTY4LDMzKSxSdCh2dCwxOTk2OCw0MDg3MCwtMTkpLFJ0KHZ0LDQwODcwLDQ0MDMyLDMzKSxSdCh2dCw0NDAzMiw1NTIwNCwtMTkpLFJ0KHZ0LDU1MjA0LE9ELDMzKSxSdCh2dCw1NzM0NCw2NTUzNCwzMyl9ZnVuY3Rpb24gVTVuKHQpe3ZhciBlLG4scixzLG8saCxkO3QuaGJ8fCh0LmhiPSEwLFhjKHQsImVjb3JlIiksc3oodCwiZWNvcmUiKSxheih0LFBoKSxNSSh0LmZiLCJFIiksTUkodC5MLCJUIiksTUkodC5QLCJLIiksTUkodC5QLCJWIiksTUkodC5jYiwiRSIpLE1yKFNvKHQuYiksdC5iYiksTXIoU28odC5hKSx0LlEpLE1yKFNvKHQubyksdC5wKSxNcihTbyh0LnApLHQuUiksTXIoU28odC5xKSx0LnApLE1yKFNvKHQudiksdC5xKSxNcihTbyh0LncpLHQuUiksTXIoU28odC5CKSx0LlEpLE1yKFNvKHQuUiksdC5RKSxNcihTbyh0LlQpLHQuZWIpLE1yKFNvKHQuVSksdC5SKSxNcihTbyh0LlYpLHQuZWIpLE1yKFNvKHQuVyksdC5iYiksTXIoU28odC5iYiksdC5lYiksTXIoU28odC5lYiksdC5SKSxNcihTbyh0LmRiKSx0LlIpLHJjKHQuYixaeSxnMGUsITEsITEsITApLGxzKHUoU3QoV3QodC5iKSwwKSwzNCksdC5lLCJpRCIsbnVsbCwwLDEsWnksITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC5iKSwxKSwxOCksdC5xLG51bGwsImVBdHRyaWJ1dGVUeXBlIiwxLDEsWnksITAsITAsITEsITEsITAsITEsITApLHJjKHQuYSxacixoMGUsITEsITEsITApLGxzKHUoU3QoV3QodC5hKSwwKSwzNCksdC5fLGpjdCxudWxsLDAsMSxaciwhMSwhMSwhMCwhMSwhMCwhMSksRmkodShTdChXdCh0LmEpLDEpLDE4KSx0LmFiLG51bGwsImRldGFpbHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5hKSwyKSwxOCksdC5RLHUoU3QoV3QodC5RKSwwKSwxOCksImVNb2RlbEVsZW1lbnQiLDAsMSxaciwhMCwhMSwhMCwhMSwhMSwhMSwhMSksRmkodShTdChXdCh0LmEpLDMpLDE4KSx0LlMsbnVsbCwiY29udGVudHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5hKSw0KSwxOCksdC5TLG51bGwsInJlZmVyZW5jZXMiLDAsLTEsWnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQubyxHaCwiRUNsYXNzIiwhMSwhMSwhMCksbHModShTdChXdCh0Lm8pLDApLDM0KSx0LmUsImFic3RyYWN0IixudWxsLDAsMSxHaCwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm8pLDEpLDM0KSx0LmUsImludGVyZmFjZSIsbnVsbCwwLDEsR2gsITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC5vKSwyKSwxOCksdC5vLG51bGwsImVTdXBlclR5cGVzIiwwLC0xLEdoLCExLCExLCEwLCExLCEwLCEwLCExKSxGaSh1KFN0KFd0KHQubyksMyksMTgpLHQuVCx1KFN0KFd0KHQuVCksMCksMTgpLCJlT3BlcmF0aW9ucyIsMCwtMSxHaCwhMSwhMSwhMCwhMCwhMSwhMSwhMSksRmkodShTdChXdCh0Lm8pLDQpLDE4KSx0LmIsbnVsbCwiZUFsbEF0dHJpYnV0ZXMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSw1KSwxOCksdC5XLG51bGwsImVBbGxSZWZlcmVuY2VzIiwwLC0xLEdoLCEwLCEwLCExLCExLCEwLCExLCEwKSxGaSh1KFN0KFd0KHQubyksNiksMTgpLHQuVyxudWxsLCJlUmVmZXJlbmNlcyIsMCwtMSxHaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksRmkodShTdChXdCh0Lm8pLDcpLDE4KSx0LmIsbnVsbCwiZUF0dHJpYnV0ZXMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSw4KSwxOCksdC5XLG51bGwsImVBbGxDb250YWlubWVudHMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSw5KSwxOCksdC5ULG51bGwsImVBbGxPcGVyYXRpb25zIiwwLC0xLEdoLCEwLCEwLCExLCExLCEwLCExLCEwKSxGaSh1KFN0KFd0KHQubyksMTApLDE4KSx0LmJiLG51bGwsImVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSwxMSksMTgpLHQubyxudWxsLCJlQWxsU3VwZXJUeXBlcyIsMCwtMSxHaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksRmkodShTdChXdCh0Lm8pLDEyKSwxOCksdC5iLG51bGwsImVJREF0dHJpYnV0ZSIsMCwxLEdoLCEwLCEwLCExLCExLCExLCExLCEwKSxGaSh1KFN0KFd0KHQubyksMTMpLDE4KSx0LmJiLHUoU3QoV3QodC5iYiksNyksMTgpLCJlU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLEdoLCExLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQubyksMTQpLDE4KSx0LkgsbnVsbCwiZUdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLEdoLCExLCExLCEwLCEwLCExLCEwLCExKSxGaSh1KFN0KFd0KHQubyksMTUpLDE4KSx0LkgsbnVsbCwiZUFsbEdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLEdoLCEwLCEwLCExLCExLCEwLCExLCEwKSxkPXBvKHUoU3QoTWkodC5vKSwwKSw1OSksdC5lLCJpc1N1cGVyVHlwZU9mIiksQ28oZCx0Lm8sInNvbWVDbGFzcyIpLHBvKHUoU3QoTWkodC5vKSwxKSw1OSksdC5JLCJnZXRGZWF0dXJlQ291bnQiKSxkPXBvKHUoU3QoTWkodC5vKSwyKSw1OSksdC5iYixfMGUpLENvKGQsdC5JLCJmZWF0dXJlSUQiKSxkPXBvKHUoU3QoTWkodC5vKSwzKSw1OSksdC5JLFMwZSksQ28oZCx0LmJiLHJTKSxkPXBvKHUoU3QoTWkodC5vKSw0KSw1OSksdC5iYixfMGUpLENvKGQsdC5fLCJmZWF0dXJlTmFtZSIpLHBvKHUoU3QoTWkodC5vKSw1KSw1OSksdC5JLCJnZXRPcGVyYXRpb25Db3VudCIpLGQ9cG8odShTdChNaSh0Lm8pLDYpLDU5KSx0LlQsImdldEVPcGVyYXRpb24iKSxDbyhkLHQuSSwib3BlcmF0aW9uSUQiKSxkPXBvKHUoU3QoTWkodC5vKSw3KSw1OSksdC5JLEEwZSksQ28oZCx0LlQsUDh0KSxkPXBvKHUoU3QoTWkodC5vKSw4KSw1OSksdC5ULCJnZXRPdmVycmlkZSIpLENvKGQsdC5ULFA4dCksZD1wbyh1KFN0KE1pKHQubyksOSksNTkpLHQuSCwiZ2V0RmVhdHVyZVR5cGUiKSxDbyhkLHQuYmIsclMpLHJjKHQucCxpMSxwMGUsITAsITEsITApLGxzKHUoU3QoV3QodC5wKSwwKSwzNCksdC5fLCJpbnN0YW5jZUNsYXNzTmFtZSIsbnVsbCwwLDEsaTEsITEsITAsITAsITAsITAsITEpLGU9STAodC5MKSxuPVd3dCgpLE1yKCghZS5kJiYoZS5kPW5ldyBTcyhobyxlLDEpKSxlLmQpLG4pLEhvZSh1KFN0KFd0KHQucCksMSksMzQpLGUsImluc3RhbmNlQ2xhc3MiLGkxLCEwLCEwLCExLCEwKSxscyh1KFN0KFd0KHQucCksMiksMzQpLHQuTSxMMGUsbnVsbCwwLDEsaTEsITAsITAsITEsITEsITAsITApLGxzKHUoU3QoV3QodC5wKSwzKSwzNCksdC5fLCJpbnN0YW5jZVR5cGVOYW1lIixudWxsLDAsMSxpMSwhMSwhMCwhMCwhMCwhMCwhMSksRmkodShTdChXdCh0LnApLDQpLDE4KSx0LlUsdShTdChXdCh0LlUpLDMpLDE4KSwiZVBhY2thZ2UiLDAsMSxpMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksRmkodShTdChXdCh0LnApLDUpLDE4KSx0LmRiLG51bGwsTTBlLDAsLTEsaTEsITEsITEsITAsITAsITAsITEsITEpLGQ9cG8odShTdChNaSh0LnApLDApLDU5KSx0LmUsSTBlKSxDbyhkLHQuTSxDRCkscG8odShTdChNaSh0LnApLDEpLDU5KSx0LkksImdldENsYXNzaWZpZXJJRCIpLHJjKHQucSxDZnQsIkVEYXRhVHlwZSIsITEsITEsITApLGxzKHUoU3QoV3QodC5xKSwwKSwzNCksdC5lLCJzZXJpYWxpemFibGUiLHFFLDAsMSxDZnQsITEsITEsITAsITEsITAsITEpLHJjKHQudixpVSwiRUVudW0iLCExLCExLCEwKSxGaSh1KFN0KFd0KHQudiksMCksMTgpLHQudyx1KFN0KFd0KHQudyksMyksMTgpLCJlTGl0ZXJhbHMiLDAsLTEsaVUsITEsITEsITAsITAsITEsITEsITEpLGQ9cG8odShTdChNaSh0LnYpLDApLDU5KSx0LncsRDBlKSxDbyhkLHQuXyxvaSksZD1wbyh1KFN0KE1pKHQudiksMSksNTkpLHQudyxEMGUpLENvKGQsdC5JLFlfKSxkPXBvKHUoU3QoTWkodC52KSwyKSw1OSksdC53LCJnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwiKSxDbyhkLHQuXywibGl0ZXJhbCIpLHJjKHQudyxlZyxiMGUsITEsITEsITApLGxzKHUoU3QoV3QodC53KSwwKSwzNCksdC5JLFlfLG51bGwsMCwxLGVnLCExLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQudyksMSksMzQpLHQuQSwiaW5zdGFuY2UiLG51bGwsMCwxLGVnLCEwLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQudyksMiksMzQpLHQuXywibGl0ZXJhbCIsbnVsbCwwLDEsZWcsITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC53KSwzKSwxOCksdC52LHUoU3QoV3QodC52KSwwKSwxOCksImVFbnVtIiwwLDEsZWcsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuQixuQSwiRUZhY3RvcnkiLCExLCExLCEwKSxGaSh1KFN0KFd0KHQuQiksMCksMTgpLHQuVSx1KFN0KFd0KHQuVSksMiksMTgpLCJlUGFja2FnZSIsMSwxLG5BLCEwLCExLCEwLCExLCExLCExLCExKSxkPXBvKHUoU3QoTWkodC5CKSwwKSw1OSksdC5TLCJjcmVhdGUiKSxDbyhkLHQubywiZUNsYXNzIiksZD1wbyh1KFN0KE1pKHQuQiksMSksNTkpLHQuTSwiY3JlYXRlRnJvbVN0cmluZyIpLENvKGQsdC5xLCJlRGF0YVR5cGUiKSxDbyhkLHQuXywibGl0ZXJhbFZhbHVlIiksZD1wbyh1KFN0KE1pKHQuQiksMiksNTkpLHQuXywiY29udmVydFRvU3RyaW5nIiksQ28oZCx0LnEsImVEYXRhVHlwZSIpLENvKGQsdC5NLCJpbnN0YW5jZVZhbHVlIikscmModC5RLG9OLGJkZSwhMCwhMSwhMCksRmkodShTdChXdCh0LlEpLDApLDE4KSx0LmEsdShTdChXdCh0LmEpLDIpLDE4KSwiZUFubm90YXRpb25zIiwwLC0xLG9OLCExLCExLCEwLCEwLCExLCExLCExKSxkPXBvKHUoU3QoTWkodC5RKSwwKSw1OSksdC5hLCJnZXRFQW5ub3RhdGlvbiIpLENvKGQsdC5fLGpjdCkscmModC5SLG1mdCx2ZGUsITAsITEsITApLGxzKHUoU3QoV3QodC5SKSwwKSwzNCksdC5fLG9pLG51bGwsMCwxLG1mdCwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5TLGtiLCJFT2JqZWN0IiwhMSwhMSwhMCkscG8odShTdChNaSh0LlMpLDApLDU5KSx0Lm8sImVDbGFzcyIpLHBvKHUoU3QoTWkodC5TKSwxKSw1OSksdC5lLCJlSXNQcm94eSIpLHBvKHUoU3QoTWkodC5TKSwyKSw1OSksdC5YLCJlUmVzb3VyY2UiKSxwbyh1KFN0KE1pKHQuUyksMyksNTkpLHQuUywiZUNvbnRhaW5lciIpLHBvKHUoU3QoTWkodC5TKSw0KSw1OSksdC5iYiwiZUNvbnRhaW5pbmdGZWF0dXJlIikscG8odShTdChNaSh0LlMpLDUpLDU5KSx0LlcsImVDb250YWlubWVudEZlYXR1cmUiKSxkPXBvKHUoU3QoTWkodC5TKSw2KSw1OSksbnVsbCwiZUNvbnRlbnRzIiksZT1JMCh0LmZiKSxuPUkwKHQuUyksTXIoKCFlLmQmJihlLmQ9bmV3IFNzKGhvLGUsMSkpLGUuZCksbikscz1PMShkLGUsbnVsbCkscyYmcy5GaSgpLGQ9cG8odShTdChNaSh0LlMpLDcpLDU5KSxudWxsLCJlQWxsQ29udGVudHMiKSxlPUkwKHQuY2IpLG49STAodC5TKSxNcigoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxuKSxvPU8xKGQsZSxudWxsKSxvJiZvLkZpKCksZD1wbyh1KFN0KE1pKHQuUyksOCksNTkpLG51bGwsImVDcm9zc1JlZmVyZW5jZXMiKSxlPUkwKHQuZmIpLG49STAodC5TKSxNcigoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxuKSxoPU8xKGQsZSxudWxsKSxoJiZoLkZpKCksZD1wbyh1KFN0KE1pKHQuUyksOSksNTkpLHQuTSwiZUdldCIpLENvKGQsdC5iYixyUyksZD1wbyh1KFN0KE1pKHQuUyksMTApLDU5KSx0Lk0sImVHZXQiKSxDbyhkLHQuYmIsclMpLENvKGQsdC5lLCJyZXNvbHZlIiksZD1wbyh1KFN0KE1pKHQuUyksMTEpLDU5KSxudWxsLCJlU2V0IiksQ28oZCx0LmJiLHJTKSxDbyhkLHQuTSwibmV3VmFsdWUiKSxkPXBvKHUoU3QoTWkodC5TKSwxMiksNTkpLHQuZSwiZUlzU2V0IiksQ28oZCx0LmJiLHJTKSxkPXBvKHUoU3QoTWkodC5TKSwxMyksNTkpLG51bGwsImVVbnNldCIpLENvKGQsdC5iYixyUyksZD1wbyh1KFN0KE1pKHQuUyksMTQpLDU5KSx0Lk0sImVJbnZva2UiKSxDbyhkLHQuVCxQOHQpLGU9STAodC5mYiksbj1Xd3QoKSxNcigoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxuKSxYeihkLGUsImFyZ3VtZW50cyIpLFZlbihkLHQuSykscmModC5ULFZoLHcwZSwhMSwhMSwhMCksRmkodShTdChXdCh0LlQpLDApLDE4KSx0Lm8sdShTdChXdCh0Lm8pLDMpLDE4KSxPMGUsMCwxLFZoLCEwLCExLCExLCExLCExLCExLCExKSxGaSh1KFN0KFd0KHQuVCksMSksMTgpLHQuZGIsbnVsbCxNMGUsMCwtMSxWaCwhMSwhMSwhMCwhMCwhMCwhMSwhMSksRmkodShTdChXdCh0LlQpLDIpLDE4KSx0LlYsdShTdChXdCh0LlYpLDApLDE4KSwiZVBhcmFtZXRlcnMiLDAsLTEsVmgsITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5UKSwzKSwxOCksdC5wLG51bGwsImVFeGNlcHRpb25zIiwwLC0xLFZoLCExLCExLCEwLCExLCEwLCEwLCExKSxGaSh1KFN0KFd0KHQuVCksNCksMTgpLHQuSCxudWxsLCJlR2VuZXJpY0V4Y2VwdGlvbnMiLDAsLTEsVmgsITEsITEsITAsITAsITEsITAsITEpLHBvKHUoU3QoTWkodC5UKSwwKSw1OSksdC5JLEEwZSksZD1wbyh1KFN0KE1pKHQuVCksMSksNTkpLHQuZSwiaXNPdmVycmlkZU9mIiksQ28oZCx0LlQsInNvbWVPcGVyYXRpb24iKSxyYyh0LlUscjEsIkVQYWNrYWdlIiwhMSwhMSwhMCksbHModShTdChXdCh0LlUpLDApLDM0KSx0Ll8sIm5zVVJJIixudWxsLDAsMSxyMSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LlUpLDEpLDM0KSx0Ll8sIm5zUHJlZml4IixudWxsLDAsMSxyMSwhMSwhMSwhMCwhMSwhMCwhMSksRmkodShTdChXdCh0LlUpLDIpLDE4KSx0LkIsdShTdChXdCh0LkIpLDApLDE4KSwiZUZhY3RvcnlJbnN0YW5jZSIsMSwxLHIxLCEwLCExLCEwLCExLCExLCExLCExKSxGaSh1KFN0KFd0KHQuVSksMyksMTgpLHQucCx1KFN0KFd0KHQucCksNCksMTgpLCJlQ2xhc3NpZmllcnMiLDAsLTEscjEsITEsITEsITAsITAsITAsITEsITEpLEZpKHUoU3QoV3QodC5VKSw0KSwxOCksdC5VLHUoU3QoV3QodC5VKSw1KSwxOCksImVTdWJwYWNrYWdlcyIsMCwtMSxyMSwhMSwhMSwhMCwhMCwhMCwhMSwhMSksRmkodShTdChXdCh0LlUpLDUpLDE4KSx0LlUsdShTdChXdCh0LlUpLDQpLDE4KSwiZVN1cGVyUGFja2FnZSIsMCwxLHIxLCEwLCExLCExLCExLCEwLCExLCExKSxkPXBvKHUoU3QoTWkodC5VKSwwKSw1OSksdC5wLCJnZXRFQ2xhc3NpZmllciIpLENvKGQsdC5fLG9pKSxyYyh0LlYsencsbTBlLCExLCExLCEwKSxGaSh1KFN0KFd0KHQuViksMCksMTgpLHQuVCx1KFN0KFd0KHQuVCksMiksMTgpLCJlT3BlcmF0aW9uIiwwLDEsencsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuVyxKeSx5MGUsITEsITEsITApLGxzKHUoU3QoV3QodC5XKSwwKSwzNCksdC5lLCJjb250YWlubWVudCIsbnVsbCwwLDEsSnksITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5XKSwxKSwzNCksdC5lLCJjb250YWluZXIiLG51bGwsMCwxLEp5LCEwLCEwLCExLCExLCEwLCEwKSxscyh1KFN0KFd0KHQuVyksMiksMzQpLHQuZSwicmVzb2x2ZVByb3hpZXMiLHFFLDAsMSxKeSwhMSwhMSwhMCwhMSwhMCwhMSksRmkodShTdChXdCh0LlcpLDMpLDE4KSx0LlcsbnVsbCwiZU9wcG9zaXRlIiwwLDEsSnksITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5XKSw0KSwxOCksdC5vLG51bGwsImVSZWZlcmVuY2VUeXBlIiwxLDEsSnksITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5XKSw1KSwxOCksdC5iLG51bGwsImVLZXlzIiwwLC0xLEp5LCExLCExLCEwLCExLCEwLCExLCExKSxyYyh0LmJiLEF1LGQwZSwhMCwhMSwhMCksbHModShTdChXdCh0LmJiKSwwKSwzNCksdC5lLCJjaGFuZ2VhYmxlIixxRSwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksMSksMzQpLHQuZSwidm9sYXRpbGUiLG51bGwsMCwxLEF1LCExLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQuYmIpLDIpLDM0KSx0LmUsInRyYW5zaWVudCIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksMyksMzQpLHQuXywiZGVmYXVsdFZhbHVlTGl0ZXJhbCIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksNCksMzQpLHQuTSxMMGUsbnVsbCwwLDEsQXUsITAsITAsITEsITEsITAsITApLGxzKHUoU3QoV3QodC5iYiksNSksMzQpLHQuZSwidW5zZXR0YWJsZSIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksNiksMzQpLHQuZSwiZGVyaXZlZCIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC5iYiksNyksMTgpLHQubyx1KFN0KFd0KHQubyksMTMpLDE4KSxPMGUsMCwxLEF1LCEwLCExLCExLCExLCExLCExLCExKSxwbyh1KFN0KE1pKHQuYmIpLDApLDU5KSx0LkksUzBlKSxkPXBvKHUoU3QoTWkodC5iYiksMSksNTkpLG51bGwsImdldENvbnRhaW5lckNsYXNzIiksZT1JMCh0LkwpLG49V3d0KCksTXIoKCFlLmQmJihlLmQ9bmV3IFNzKGhvLGUsMSkpLGUuZCksbikscj1PMShkLGUsbnVsbCksciYmci5GaSgpLHJjKHQuZWIsUXksZjBlLCEwLCExLCEwKSxscyh1KFN0KFd0KHQuZWIpLDApLDM0KSx0LmUsIm9yZGVyZWQiLHFFLDAsMSxReSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmViKSwxKSwzNCksdC5lLCJ1bmlxdWUiLHFFLDAsMSxReSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmViKSwyKSwzNCksdC5JLCJsb3dlckJvdW5kIixudWxsLDAsMSxReSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmViKSwzKSwzNCksdC5JLCJ1cHBlckJvdW5kIiwiMSIsMCwxLFF5LCExLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQuZWIpLDQpLDM0KSx0LmUsIm1hbnkiLG51bGwsMCwxLFF5LCEwLCEwLCExLCExLCEwLCEwKSxscyh1KFN0KFd0KHQuZWIpLDUpLDM0KSx0LmUsInJlcXVpcmVkIixudWxsLDAsMSxReSwhMCwhMCwhMSwhMSwhMCwhMCksRmkodShTdChXdCh0LmViKSw2KSwxOCksdC5wLG51bGwsImVUeXBlIiwwLDEsUXksITEsITAsITAsITEsITAsITAsITEpLEZpKHUoU3QoV3QodC5lYiksNyksMTgpLHQuSCxudWxsLCJlR2VuZXJpY1R5cGUiLDAsMSxReSwhMSwhMCwhMCwhMCwhMSwhMCwhMSkscmModC5hYixNMiwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiLCExLCExLCExKSxscyh1KFN0KFd0KHQuYWIpLDApLDM0KSx0Ll8sImtleSIsbnVsbCwwLDEsTTIsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5hYiksMSksMzQpLHQuXyxZXyxudWxsLDAsMSxNMiwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5ILGhvLHYwZSwhMSwhMSwhMCksRmkodShTdChXdCh0LkgpLDApLDE4KSx0LkgsbnVsbCwiZVVwcGVyQm91bmQiLDAsMSxobywhMSwhMSwhMCwhMCwhMSwhMSwhMSksRmkodShTdChXdCh0LkgpLDEpLDE4KSx0LkgsbnVsbCwiZVR5cGVBcmd1bWVudHMiLDAsLTEsaG8sITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5IKSwyKSwxOCksdC5wLG51bGwsImVSYXdUeXBlIiwxLDEsaG8sITAsITEsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5IKSwzKSwxOCksdC5ILG51bGwsImVMb3dlckJvdW5kIiwwLDEsaG8sITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5IKSw0KSwxOCksdC5kYixudWxsLCJlVHlwZVBhcmFtZXRlciIsMCwxLGhvLCExLCExLCEwLCExLCExLCExLCExKSxGaSh1KFN0KFd0KHQuSCksNSksMTgpLHQucCxudWxsLCJlQ2xhc3NpZmllciIsMCwxLGhvLCExLCExLCEwLCExLCEwLCExLCExKSxkPXBvKHUoU3QoTWkodC5IKSwwKSw1OSksdC5lLEkwZSksQ28oZCx0Lk0sQ0QpLHJjKHQuZGIsbHUseDBlLCExLCExLCEwKSxGaSh1KFN0KFd0KHQuZGIpLDApLDE4KSx0LkgsbnVsbCwiZUJvdW5kcyIsMCwtMSxsdSwhMSwhMSwhMCwhMCwhMSwhMSwhMSksc2kodC5jLEN1dCwiRUJpZ0RlY2ltYWwiLCEwKSxzaSh0LmQsQjQsIkVCaWdJbnRlZ2VyIiwhMCksc2kodC5lLGRsLCJFQm9vbGVhbiIsITApLHNpKHQuZixCcywiRUJvb2xlYW5PYmplY3QiLCEwKSxzaSh0LmksSHUsIkVCeXRlIiwhMCksc2kodC5nLG90KEh1LDEpLCJFQnl0ZUFycmF5IiwhMCksc2kodC5qLEU2LCJFQnl0ZU9iamVjdCIsITApLHNpKHQuayxtaCwiRUNoYXIiLCEwKSxzaSh0Lm4sYVMsIkVDaGFyYWN0ZXJPYmplY3QiLCEwKSxzaSh0LnIsSEgsIkVEYXRlIiwhMCksc2kodC5zLFNMdCwiRURpYWdub3N0aWNDaGFpbiIsITEpLHNpKHQudCxpYSwiRURvdWJsZSIsITApLHNpKHQudSxjYSwiRURvdWJsZU9iamVjdCIsITApLHNpKHQuZmIscUF0LCJFRUxpc3QiLCExKSxzaSh0LkEsVkF0LCJFRW51bWVyYXRvciIsITEpLHNpKHQuQyxnTHQsIkVGZWF0dXJlTWFwIiwhMSksc2kodC5ELHNVLCJFRmVhdHVyZU1hcEVudHJ5IiwhMSksc2kodC5GLHIzLCJFRmxvYXQiLCEwKSxzaSh0LkcsWEUsIkVGbG9hdE9iamVjdCIsITApLHNpKHQuSSxUciwiRUludCIsITApLHNpKHQuSixqYSwiRUludGVnZXJPYmplY3QiLCEwKSxzaSh0LkwsVTh0LCJFSmF2YUNsYXNzIiwhMCksc2kodC5NLFhuLCJFSmF2YU9iamVjdCIsITApLHNpKHQuTixMYiwiRUxvbmciLCEwKSxzaSh0Lk8sVHcsIkVMb25nT2JqZWN0IiwhMCksc2kodC5QLFc4dCwiRU1hcCIsITEpLHNpKHQuWCxsTHQsIkVSZXNvdXJjZSIsITEpLHNpKHQuWSxBTHQsIkVSZXNvdXJjZVNldCIsITEpLHNpKHQuWixmNSwiRVNob3J0IiwhMCksc2kodC4kLEN3LCJFU2hvcnRPYmplY3QiLCEwKSxzaSh0Ll8sQWUsIkVTdHJpbmciLCEwKSxzaSh0LmNiLEdBdCwiRVRyZWVJdGVyYXRvciIsITEpLHNpKHQuSyxMTHQsIkVJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIiwhMSkscXl0KHQsUGgpKX12YXIgQ0Q9Im9iamVjdCIsdTY9ImJvb2xlYW4iLEx4dD0ibnVtYmVyIixPYXQ9InN0cmluZyIsTmF0PSJmdW5jdGlvbiIsdmk9MjE0NzQ4MzY0NyxYbz0iamF2YS5sYW5nIixfRD17MzoxfSxTRD0iY29tLmdvb2dsZS5jb21tb24uYmFzZSIsS2E9IiwgIixIaGU9IiVzICglcykgbXVzdCBub3QgYmUgbmVnYXRpdmUiLEllPXszOjEsNDoxLDU6MX0sR2hlPSJuZWdhdGl2ZSBzaXplOiAiLFZoZT0iT3B0aW9uYWwub2YoIixUdT0ibnVsbCIsU0U9ezE5ODoxLDQ3OjF9LFllPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0IixBRT17MTk4OjEsNDc6MSwxMjU6MX0seTI9ezIyNDoxLDM6MX0scmE9ezQ3OjF9LHByPSJqYXZhLnV0aWwiLGJ3PXs4MzoxfSx3eT17MjA6MSwyODoxLDE0OjF9LE4xPTE5NjUsanU9ezIwOjEsMjg6MSwxNDoxLDIxOjF9LFVoZT17ODM6MSwxNzE6MSwxNjE6MX0sV2hlPXsyMDoxLDI4OjEsMTQ6MSwyMToxLDg0OjF9LE14dD17MjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxfSxKZD17NDc6MSwxMjU6MX0sTXE9ezM0NToxLDQyOjF9LEtoZT0iQWJzdHJhY3RNYXBFbnRyeSIsWWhlPSJleHBlY3RlZFZhbHVlc1BlcktleSIsdGU9ezM6MSw2OjEsNDoxLDU6MX0sYmQ9MTYzODQsTWg9ezE2NDoxfSxVbj17Mzg6MX0sSXE9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LEFEPXsxOTY6MX0sUGF0PXsyNDU6MSwzOjEsMzU6MX0sWGhlPSJyYW5nZSB1bmJvdW5kZWQgb24gdGhpcyBzaWRlIix0MD17MjA6MX0sUWhlPXsyMDoxLDE0OjF9LEl4dD17MzoxLDIwOjEsMjg6MSwxNDoxfSxTXz17MTUyOjEsMzoxLDIwOjEsMjg6MSwxNDoxLDE1OjEsNTQ6MX0sRHE9ezM6MSw0OjEsNToxLDE2NToxfSxMRT17MzoxLDgzOjF9LEZhdD17MjA6MSwxNDoxLDIxOjF9LE1FPXszOjEsMjA6MSwyODoxLDE0OjEsMjE6MX0sWmhlPXsyMDoxLDE0OjEsMjE6MSw4NDoxfSxlMD00NjE4NDU5MDcsbjA9LTg2MjA0ODk0MyxMRD17MzoxLDY6MSw0OjEsNToxLDE2NToxfSxKaGU9ImV4cGVjdGVkU2l6ZSIsQV89MTA3Mzc0MTgyNCxteT0iaW5pdGlhbEFycmF5U2l6ZSIsYWU9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LElFPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LEJhdD0iYXJyYXlTaXplIix0ZmU9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSx1aT17NDU6MX0sT3E9ezM2NToxfSxlYj0xZS00LF9hPS0yMTQ3NDgzNjQ4LGVmZT0iX19ub2luaXRfXyIsVTA9ezM6MSwxMDI6MSw2MDoxLDc4OjF9LE1EPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsIixEeHQ9IlN0cmluZyIsT3h0PSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCIsUmF0PSJhbm9ueW1vdXMiLGphdD0iZm5TdGFjayIsTnh0PSJVbmtub3duIix2ZD17MTk1OjEsMzoxLDQ6MX0sJGc9MWUzLG1zPTY1NTM1LCRhdD0iSmFudWFyeSIsemF0PSJGZWJydWFyeSIscWF0PSJNYXJjaCIsSGF0PSJBcHJpbCIsbDY9Ik1heSIsR2F0PSJKdW5lIixWYXQ9Ikp1bHkiLFVhdD0iQXVndXN0IixXYXQ9IlNlcHRlbWJlciIsS2F0PSJPY3RvYmVyIixZYXQ9Ik5vdmVtYmVyIixYYXQ9IkRlY2VtYmVyIixuYj0xOTAwLFhyPXs0ODoxLDM6MSw0OjF9LG5mZT0iQmVmb3JlIENocmlzdCIscmZlPSJBbm5vIERvbWluaSIsUWF0PSJTdW5kYXkiLFphdD0iTW9uZGF5IixKYXQ9IlR1ZXNkYXkiLHRvdD0iV2VkbmVzZGF5Iixlb3Q9IlRodXJzZGF5Iixub3Q9IkZyaWRheSIscm90PSJTYXR1cmRheSIsUHh0PSJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZCIsaWZlPSJEYXRlVGltZUZvcm1hdCIsaW90PSJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudCIsc2ZlPSJEZWZhdWx0RGF0ZVRpbWVGb3JtYXRJbmZvIixhZmU9ezM6MSw0OjEsMzU6MSwxOTk6MX0saDY9ImNvbS5nb29nbGUuZ3d0Lmpzb24uY2xpZW50Iix1bD00MTk0MzAzLFcwPTEwNDg1NzUsSUQ9NTI0Mjg4LGY2PTQxOTQzMDQseDI9MTc1OTIxODYwNDQ0MTYsTnE9MWU5LEREPS0xNzU5MjE4NjA0NDQxNixGeHQ9ImphdmEuaW8iLHNvdD17MzoxLDEwMjoxLDczOjEsNjA6MSw3ODoxfSxvZmU9ezM6MSwyODk6MSw3ODoxfSx2dz0nRm9yIGlucHV0IHN0cmluZzogIicsc3M9MS8wLFRzPS0xLzAseXk9NDA5Nixhb3Q9ezM6MSw0OjEsMzY0OjF9LFlhPTY1NTM2LE9EPTU1Mjk2LHZvPXsxMDQ6MSwzOjEsNDoxfSxvb3Q9MWU1LGNmZT0uMzAxMDI5OTk1NjYzOTgxMixjbz00Mjk0OTY3Mjk1LGNvdD00Mjk0OTY3Mjk2LERFPSIwLjAiLHVvdD17NDI6MX0sdWZlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDEyOjEsMTQ6MSwxNToxLDU0OjF9LGxmZT17MzoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxoZmU9ezIwOjEsMTQ6MSwxNToxfSxsb3Q9ezM6MSw2MjoxfSxORD17MTgyOjF9LF80PXszOjEsNDoxLDgzOjF9LEJ4dD17MzoxLDQ6MSwyMDoxLDI4OjEsMTQ6MSw1MzoxLDIxOjF9LGhvdD0iZGVsZXRlIixMXz0xNDkwMTE2MTE5Mzg0NzY1NmUtMjQsTV89MTExMDIyMzAyNDYyNTE1NjVlLTMyLGZvdD0xNTUyNTQ4NSxQRD01OTYwNDY0NDc3NTM5MDYzZS0yMyxSeHQ9MTY3NzcyMTYsUHE9MTY3NzcyMTUsanh0PSIsIGxlbmd0aDogIixmZmU9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LGRvdD17MzoxLDM1OjEsMjI6MSwyOTc6MX0sZ290PSJqYXZhLnV0aWwuZnVuY3Rpb24iLElfPSJqYXZhLnV0aWwubG9nZ2luZyIsZGZlPXszOjEsNDoxLDU6MSw4NDI6MX0scG90PSJ1bmRlZmluZWQiLElzPSJqYXZhLnV0aWwuc3RyZWFtIiwkeHQ9ezUyNToxLDY3MDoxfSxGcT0iZnJvbUluZGV4OiAiLGdmZT0iID4gdG9JbmRleDogIix6eHQ9IiwgdG9JbmRleDogIixxeHQ9IkluZGV4OiAiLEh4dD0iLCBTaXplOiAiLE9FPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbiIsT2k9ezYyOjF9LHBmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbiIsYmZlPSJTY2FubGluZS9FdmVudEhhbmRsZXIiLHIwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9uZWQiLHZmZT0iQ05vZGUgYmVsb25ncyB0byBhbm90aGVyIENHcm91cC4iLHdmZT0iSVNwYWNpbmdzSGFuZGxlci8xIixib3Q9IlRoZSAiLHZvdD0iIGluc3RhbmNlIGhhcyBiZWVuIGZpbmlzaGVkIGFscmVhZHkuIixtZmU9IlRoZSBkaXJlY3Rpb24gIix5ZmU9IiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDR3JhcGggaW5zdGFuY2UuIix4ZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yIixrZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUiLEVmZT0iUXVhZHJ1cGxldCIsVGZlPSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yIixDZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvQ29uc3RyYWludHNTY2FubGluZUhhbmRsZXIiLF9mZT0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIixTZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvVGltZXN0YW1wIixBZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsd2Q9ezE2OToxLDQ1OjF9LHdvdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbi5vcHRpb25zIixRbz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuZGF0YSIsR3h0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLnRyYXZlcnNhbFN0cmF0ZWd5IixWeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8ubG93TGV2ZWxTb3J0IixVeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uaGlnaExldmVsU29ydCIsV3h0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLmZpbGwiLEloPXsxMzA6MX0sbW90PSJwb2x5b21pbm8iLERfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5uZXR3b3Jrc2ltcGxleCIsaTA9ezE3NzoxLDM6MSw0OjF9LExmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmciLGsyPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5jZWxsc3lzdGVtIixORT0iQ0VOVEVSIixNZmU9ezIxMjoxLDMyNjoxfSxLeHQ9ezM6MSw0OjEsNToxLDU5NToxfSxkNj0iTEVGVCIsZzY9IlJJR0hUIixZeHQ9IlZlcnRpY2FsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCIsWHh0PSJCT1RUT00iLEJxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbCIsT189IlVOREVGSU5FRCIsUDE9LjAxLEZEPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbC5hbGdvcml0aG0iLElmZT0iTGFiZWxQbGFjZXIvbGFtYmRhJDAkVHlwZSIsRGZlPSJMYWJlbFBsYWNlci9sYW1iZGEkMSRUeXBlIixPZmU9InBvcnRSYXRpb09yUG9zaXRpb24iLFBFPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5vdmVybGFwcyIseW90PSJET1dOIixtZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vIixScT0iTk9SVEgiLHhvdD0iRUFTVCIsa290PSJTT1VUSCIsRW90PSJXRVNUIixqcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vLnN0cnVjdHVyZXMiLFF4dD0iRGlyZWN0aW9uIixUb3Q9IkdyaWQgaXMgb25seSBvZiBzaXplICIsQ290PSIuIFJlcXVlc3RlZCBwb2ludCAoIixfb3Q9IikgaXMgb3V0IG9mIGJvdW5kcy4iLCRxPSIgR2l2ZW4gY2VudGVyIGJhc2VkIGNvb3JkaW5hdGVzIHdlcmUgKCIsQkQ9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5wcm9wZXJ0aWVzIixOZmU9IklQcm9wZXJ0eUhvbGRlciIsWnh0PXszOjEsOTQ6MSwxMzQ6MX0scDY9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnNwb3JlIixQZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnV0aWxzIixFMj17MjA5OjF9LFM0PSJvcmcuZWNsaXBzZS5lbGsuY29yZSIsRmZlPSJDb25uZWN0ZWQgQ29tcG9uZW50cyBDb21wYWN0aW9uIixCZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28iLHpxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLmdyYXBoIixTb3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28ub3B0aW9ucyIsSnh0PSJDb21wYWN0aW9uU3RyYXRlZ3kiLHQ2dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uc3RyYXRlZ3kiLGU2dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uY29tcG9uZW50TGF5b3V0QWxnb3JpdGhtIixuNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb0dyYXBoIixyNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb1BvbHlzIixSZmU9ImNvbXBvbmVudENvbXBhY3Rpb24iLFQyPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28iLEFvdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tcG9uZW50Q29tcG9uZW50IixMb3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnRoaWNrbmVzcyIsYjY9Im9yZy5lY2xpcHNlLmVsay5hc3BlY3RSYXRpbyIsd3c9Im9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIixBND0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby50cmFuc2Zvcm0iLE1vdD0xLjU3MDc5NjMyNjc5NDg5NjYsRkU9MTc5NzY5MzEzNDg2MjMxNTdlMjkyLHh5PXszOjEsNDoxLDU6MSwxOTI6MX0saTZ0PXszOjEsNjoxLDQ6MSw1OjEsMTA2OjEsMTIwOjF9LHM2dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZSIsYTZ0PSJDb21wb25lbnRzUHJvY2Vzc29yIixqZmU9IkNvbXBvbmVudHNQcm9jZXNzb3IvMSIsUkQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UuZ3JhcGgiLCRmZT0iQ29tcG9uZW50IExheW91dCIsbzZ0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm1vZGVsIixxcT0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsIixjNnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zIix1NnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlciIsSW90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUiLHlkPS4wMDEsRG90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaW9uIixOXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zIixCRT0xLjYwMDAwMDAyMzg0MTg1OCxxbD0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlIixqRD0ib3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5IixreT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUiLE9vdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsIixIcT0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbVNlZWQiLFBfPSJvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzIiwkRD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlIixOb3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0Q29uc3RyYWludHMiLEdxPSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5pbmxpbmUiLEZfPSJvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCIsdjY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5vcHRpb25zIixMND0ib3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzIixSRT0ib3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50IixqRT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMucGxhY2VtZW50IixsNnQ9Im9yaWdpbiIsemZlPSJyYW5kb20iLHFmZT0iYm91bmRpbmdCb3gudXBMZWZ0IixIZmU9ImJvdW5kaW5nQm94Lmxvd1JpZ2h0IixoNnQ9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZml4ZWQiLGY2dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kZXNpcmVkRWRnZUxlbmd0aCIsZDZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmRpbWVuc2lvbiIsZzZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmVwc2lsb24iLHA2dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5pdGVyYXRpb25MaW1pdCIscmI9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MiLEdmZT0iRUxLIFN0cmVzcyIsdzY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtIixWcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5zdHJlc3MiLFZmZT0iTGF5ZXJlZCBsYXlvdXQiLG02PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQiLHpEPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzIixCXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZCIsVXE9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQuYWxncyIsQzI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsIix4ZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvbmVudHMiLEswPSJOT05FIix4Yz17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjI6MX0sVWZlPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTA2OjEsMTIwOjF9LFdxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcG91bmQiLGFzPXs1MToxfSxKYz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoIixQb3Q9IiAtPiAiLFdmZT0iTm90IHN1cHBvcnRlZCBieSBMR3JhcGgiLGI2dD0iUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCIsRm90PXszOjEsNjoxLDQ6MSw1OjEsNDc0OjEsMTQxOjEsMTA2OjEsMTIwOjF9LHpnPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTkzOjEsMjAzOjEsMTA2OjEsMTIwOjF9LEtmZT17MzoxLDY6MSw0OjEsNToxLDE0MToxLDE5NDM6MSwyMDM6MSwxMDY6MSwxMjA6MX0sWWZlPWAoW3siJyAJXHIKYCxYZmU9YCldfSInIAlccgpgLFFmZT0iVGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBwYXJ0cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgbnVtYmVycy4iLHFEPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoIixaZmU9ezM6MSw0OjEsMTQyOjEsMjA3OjEsNDE0OjF9LEpmZT17MzoxLDQ6MSwxMTY6MSwyMDc6MSw0MTQ6MX0sVm49Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkIixxZz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoLnRyYW5zZm9ybSIsdDFlPSJFbGtHcmFwaEltcG9ydGVyIixlMWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsbjFlPSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLHIxZT0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlIixpMWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIsczFlPSJOb2RlIG1hcmdpbiBjYWxjdWxhdGlvbiIsJG49Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUiLGExZT0iT05FX1NJREVEX0dSRUVEWV9TV0lUQ0giLG8xZT0iVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0giLEJvdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAiLHY2dD0iSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3kiLFJvdD0iTm9kZSAnIixjMWU9IkZJUlNUX1NFUEFSQVRFIix1MWU9IkxBU1RfU0VQQVJBVEUiLGwxZT0iT2RkIHBvcnQgc2lkZSBwcm9jZXNzaW5nIixDcz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixSXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2giLHMwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlci5jb3VudGluZyIsSEQ9ezIyNToxfSx5Nj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcyIsSGw9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMub3JkZXJpbmciLGliPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmciLGpfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLnByZXNlcnZlb3JkZXIiLGtkPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLndyYXBwaW5nIixrYz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLm9wdGlvbnMiLGpvdD0iSU5URVJBQ1RJVkUiLGgxZT0iREVQVEhfRklSU1QiLGYxZT0iRURHRV9MRU5HVEgiLGQxZT0iU0VMRl9MT09QUyIsZzFlPSJmaXJzdFRyeVdpdGhJbml0aWFsT3JkZXIiLHc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZGlyZWN0aW9uQ29uZ3J1ZW5jeSIsbTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5mZWVkYmFja0VkZ2VzIixLcT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIseTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5tZXJnZUVkZ2VzIix4NnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm1lcmdlSGllcmFyY2h5RWRnZXMiLGs2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuYWxsb3dOb25GbG93UG9ydHNUb1N3aXRjaFNpZGVzIixFNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnBvcnRTb3J0aW5nU3RyYXRlZ3kiLFQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQudGhvcm91Z2huZXNzIixDNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnVubmVjZXNzYXJ5QmVuZHBvaW50cyIsXzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5nZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMiLCRvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3ljbGVCcmVha2luZy5zdHJhdGVneSIsR0Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLnN0cmF0ZWd5IixTNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ29uc3RyYWludCIsQTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllckNob2ljZUNvbnN0cmFpbnQiLEw2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJJZCIsem90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckJvdW5kT25XaWR0aCIscW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckxheWVyRXN0aW1hdGlvblNjYWxpbmdGYWN0b3IiLEhvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubm9kZVByb21vdGlvbi5zdHJhdGVneSIsR290PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLm1heEl0ZXJhdGlvbnMiLFZvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuY29mZm1hbkdyYWhhbS5sYXllckJvdW5kIiwkXz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc3RyYXRlZ3kiLE02dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZm9yY2VOb2RlTW9kZWxPcmRlciIsVW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5oaWVyYXJjaGljYWxTd2VlcGluZXNzIixXb3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnNlbWlJbnRlcmFjdGl2ZSIsSTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQiLEQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCIsTzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCIsS290PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZSIsWXE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlIixNND0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneSIsWHE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzIixZb3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmciLFhvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCIsUW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmciLFpvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiLEpvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCIsTjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbiIsUDZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nIixRcT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5tb2RlIixacT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yIix0Y3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgiLEY2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUiLEI2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiLFI2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMiLGo2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMiLCQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uIix6NnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcyIscTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MiLGVjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzIixINnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3kiLEc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cyIsSnE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQiLG5jdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCIscmN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCIsWTA9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnN0cmF0ZWd5Iix0SD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nIixlSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvciIsel89Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuc3RyYXRlZ3kiLGljdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5jdXRzIixzY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcubXNkLmZyZWVkb20iLG5IPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneSIsckg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMiLGlIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZUN1dHMiLHNIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5IixhY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzIixWNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuc2lkZVNlbGVjdGlvbiIsVTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLmNlbnRlckxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLGFIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kiLFc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLm5vTW9kZWxPcmRlciIsb2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY29tcG9uZW50cyIsSzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIubG9uZ0VkZ2VTdHJhdGVneSIsY2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyTm9kZUluZmx1ZW5jZSIsdWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyUG9ydEluZmx1ZW5jZSIsbGN0PSJsYXllcmluZyIscDFlPSJsYXllcmluZy5taW5XaWR0aCIsYjFlPSJsYXllcmluZy5ub2RlUHJvbW90aW9uIixWRD0iY3Jvc3NpbmdNaW5pbWl6YXRpb24iLG9IPSJvcmcuZWNsaXBzZS5lbGsuaGllcmFyY2h5SGFuZGxpbmciLHYxZT0iY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoIix3MWU9Im5vZGVQbGFjZW1lbnQiLG0xZT0ibm9kZVBsYWNlbWVudC5iayIseTFlPSJlZGdlUm91dGluZyIsVUQ9Im9yZy5lY2xpcHNlLmVsay5lZGdlUm91dGluZyIsRjE9InNwYWNpbmciLFk2dD0icHJpb3JpdHkiLFg2dD0iY29tcGFjdGlvbiIseDFlPSJjb21wYWN0aW9uLnBvc3RDb21wYWN0aW9uIixrMWU9IlNwZWNpZmllcyB3aGV0aGVyIGFuZCBob3cgcG9zdC1wcm9jZXNzIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iLFE2dD0iaGlnaERlZ3JlZU5vZGVzIixaNnQ9IndyYXBwaW5nIixFMWU9IndyYXBwaW5nLmN1dHRpbmciLFQxZT0id3JhcHBpbmcudmFsaWRpZnkiLEo2dD0id3JhcHBpbmcubXVsdGlFZGdlIixoY3Q9ImVkZ2VMYWJlbHMiLFdEPSJjb25zaWRlck1vZGVsT3JkZXIiLHRrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudENvbW1lbnQiLGVrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudE5vZGUiLG5rdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUVkZ2UiLHJrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZU5vZGUiLGlrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxMYWJlbCIsc2t0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRIb3Jpem9udGFsIixha3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsUG9ydFZlcnRpY2FsIixva3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTm9kZSIsY2t0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5ub2RlU2VsZkxvb3AiLHVrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcucG9ydFBvcnQiLGxrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuaW5kaXZpZHVhbCIsaGt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5ib3JkZXJPZmZzZXQiLGZrdD0ib3JnLmVjbGlwc2UuZWxrLm5vTGF5b3V0Iixka3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LnNpZGUiLEtEPSJvcmcuZWNsaXBzZS5lbGsuZGVidWdNb2RlIixna3Q9Im9yZy5lY2xpcHNlLmVsay5hbGlnbm1lbnQiLHBrdD0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy5hY3RpdmF0ZSIsYmt0PSJvcmcuZWNsaXBzZS5lbGsuaW5zaWRlU2VsZkxvb3BzLnlvIixmY3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZSIsdmt0PSJvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uIix3a3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmciLG1rdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUiLHlrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwIix4a3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQiLGtrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgiLEVrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgiLFRrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCIsQ2t0PSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0IixjSD0ib3JnLmVjbGlwc2UuZWxrLmNvbnRlbnRBbGlnbm1lbnQiLF9rdD0ib3JnLmVjbGlwc2UuZWxrLmp1bmN0aW9uUG9pbnRzIixTa3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLnBsYWNlbWVudCIsQWt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5pbmRleCIsTGt0PSJvcmcuZWNsaXBzZS5lbGsuY29tbWVudEJveCIsTWt0PSJvcmcuZWNsaXBzZS5lbGsuaHlwZXJub2RlIixJa3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LmFuY2hvciIsZGN0PSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLmFjdGl2YXRlIixnY3Q9Im9yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcucGFydGl0aW9uIix1SD0ib3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uIixEa3Q9Im9yZy5lY2xpcHNlLmVsay5tYXJnaW5zIixPa3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmciLHBjdD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlTGF5b3V0IixFYz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbCIsTmt0PXszOjEsNDoxLDU6MSw1OTM6MX0sQzFlPSJORVRXT1JLX1NJTVBMRVgiLHpjPXsxMjM6MSw1MToxfSxsSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAxY3ljbGVzIixFeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzIixQa3Q9ezQwMjoxLDIyNToxfSxfMWU9ezgzMjoxLDM6MSw0OjF9LCR1PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlciIsdW89Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzIixTMWU9ezM6MSw0OjEsNToxLDg0MDoxfSxFZD0xZS01LHNiPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iayIsYmN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcyIsSmY9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwiLHZjdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24iLHdjdD0xZS02LFR5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzIixtY3Q9LjA5OTk5OTk5OTk5OTk5OTk4LGhIPTFlLTgsQTFlPTQuNzEyMzg4OTgwMzg0NjksTDFlPTMuMTQxNTkyNjUzNTg5NzkzLHFfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZSIsSF89Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmdyYXBoIix4Nj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlIixNMWU9IlNldCBuZWlnaGJvcnMgaW4gbGV2ZWwiLEkxZT0iREVTQ0VOREFOVFMiLEZrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS53ZWlnaHRpbmciLEJrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5zZWFyY2hPcmRlciIsZkg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLm9wdGlvbnMiLEhnPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlIixEMWU9Im9yZy5lY2xpcHNlLmVsay50cmVlIixSa3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsIixJND02LjI4MzE4NTMwNzE3OTU4Nixqa3Q9NWUtMzI0LE8xZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlIix5Y3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixOMWU9ezM6MSw0OjEsNToxLDEwNjoxfSwka3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5vcHRpbWl6YXRpb24iLHhjdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IG9wdGlvbiAiLEdfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5vcHRpb25zIix6a3Q9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwub3JkZXJJZCIscWt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJhZGl1cyIsa2N0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3RvciIsRWN0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3Rpb25TdGVwU2l6ZSIsSGt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnNvcnRlciIsR2t0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLndlZGdlQ3JpdGVyaWEiLFZrdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcHRpbWl6YXRpb25Dcml0ZXJpYSIsVGQ9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwiLFAxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbi53ZWRnZSIsVWt0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5zb3J0aW5nIixGMWU9NS40OTc3ODcxNDM3ODIxMzgsQjFlPTMuOTI2OTkwODE2OTg3MjQxNCxSMWU9Mi4zNTYxOTQ0OTAxOTIzNDUsajFlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nIixkSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5maXJzdGl0ZXJhdGlvbiIsVGN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLm9wdGlvbnMiLFdrdD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLm9wdGltaXphdGlvbkdvYWwiLEtrdD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmxhc3RQbGFjZVNoaWZ0IixZa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24iLFhrdD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbiIsUWt0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcub25seUZpcnN0SXRlcmF0aW9uIixaa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5yb3dDb21wYWN0aW9uIixDY3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5leHBhbmRUb0FzcGVjdFJhdGlvIixKa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy50YXJnZXRXaWR0aCIsZ0g9Im9yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcyIsRGg9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZyIsWUQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcudXRpbCIscEg9Ik5vIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSBmb3IgIixDeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZSIsX3k9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUub3B0aW9ucyIsbXc9Im9yZy5lY2xpcHNlLmVsay5zcG9yZUNvbXBhY3Rpb24iLF9jdD0ib3JnLmVjbGlwc2UuZWxrLnVuZGVybHlpbmdMYXlvdXRBbGdvcml0aG0iLHQ4dD0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci50cmVlQ29uc3RydWN0aW9uIixlOHQ9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIuc3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIixTY3Q9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIucHJlZmVycmVkUm9vdCIsQWN0PSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnJvb3RTZWxlY3Rpb24iLExjdD0ib3JnLmVjbGlwc2UuZWxrLnN0cnVjdHVyZS5zdHJ1Y3R1cmVFeHRyYWN0aW9uU3RyYXRlZ3kiLG44dD0ib3JnLmVjbGlwc2UuZWxrLmNvbXBhY3Rpb24uY29tcGFjdGlvblN0cmF0ZWd5IixyOHQ9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLm9ydGhvZ29uYWwiLGk4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLm1heEl0ZXJhdGlvbnMiLHM4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLnJ1blNjYW5saW5lIixNY3Q9InByb2Nlc3NpbmdPcmRlciIsJDFlPSJvdmVybGFwUmVtb3ZhbCIsJEU9Im9yZy5lY2xpcHNlLmVsay5zcG9yZU92ZXJsYXAiLHoxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMXN0cnVjdHVyZSIsSWN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAycHJvY2Vzc2luZ29yZGVyIixEY3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDNleGVjdXRpb24iLHExZT0iSW52YWxpZCBpbmRleDogIix6RT0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuYWxnIixEND17MzMxOjF9LFN5PXsyODg6MX0sSDFlPSJNYWtlIHN1cmUgaXRzIHR5cGUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSAiLGE4dD0iIHV0aWxpdHkgY2xhc3MuIixxRT0idHJ1ZSIsT2N0PSJmYWxzZSIsRzFlPSJDb3VsZG4ndCBjbG9uZSBwcm9wZXJ0eSAnIix5dz0uMDUsT2g9Im9yZy5lY2xpcHNlLmVsay5jb3JlLm9wdGlvbnMiLFYxZT0xLjI5OTk5OTk1MjMxNjI4NDIseHc9Im9yZy5lY2xpcHNlLmVsay5ib3giLG84dD0ib3JnLmVjbGlwc2UuZWxrLmJveC5wYWNraW5nTW9kZSIsVTFlPSJvcmcuZWNsaXBzZS5lbGsuYWxnb3JpdGhtIixXMWU9Im9yZy5lY2xpcHNlLmVsay5yZXNvbHZlZEFsZ29yaXRobSIsYzh0PSJvcmcuZWNsaXBzZS5lbGsuYmVuZFBvaW50cyIsVzVuPSJvcmcuZWNsaXBzZS5lbGsubGFiZWxNYW5hZ2VyIixLMWU9Im9yZy5lY2xpcHNlLmVsay5zY2FsZUZhY3RvciIsWTFlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbWF0ZSIsWDFlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbVRpbWVGYWN0b3IiLFExZT0ib3JnLmVjbGlwc2UuZWxrLmxheW91dEFuY2VzdG9ycyIsWjFlPSJvcmcuZWNsaXBzZS5lbGsubWF4QW5pbVRpbWUiLEoxZT0ib3JnLmVjbGlwc2UuZWxrLm1pbkFuaW1UaW1lIix0ZGU9Im9yZy5lY2xpcHNlLmVsay5wcm9ncmVzc0JhciIsZWRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVHcmFwaCIsbmRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVPcHRpb25zIixyZGU9Im9yZy5lY2xpcHNlLmVsay56b29tVG9GaXQiLEs1bj0ib3JnLmVjbGlwc2UuZWxrLmZvbnQubmFtZSIsaWRlPSJvcmcuZWNsaXBzZS5lbGsuZm9udC5zaXplIixzZGU9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnR5cGUiLGFkZT0icGFydGl0aW9uaW5nIixvZGU9Im5vZGVMYWJlbHMiLGJIPSJwb3J0QWxpZ25tZW50IixOY3Q9Im5vZGVTaXplIixQY3Q9InBvcnQiLHU4dD0icG9ydExhYmVscyIsY2RlPSJpbnNpZGVTZWxmTG9vcHMiLFZfPSJvcmcuZWNsaXBzZS5lbGsuZml4ZWQiLHZIPSJvcmcuZWNsaXBzZS5lbGsucmFuZG9tIix1ZGU9InBvcnQgbXVzdCBoYXZlIGEgcGFyZW50IG5vZGUgdG8gY2FsY3VsYXRlIHRoZSBwb3J0IHNpZGUiLGxkZT0iVGhlIGVkZ2UgbmVlZHMgdG8gaGF2ZSBleGFjdGx5IG9uZSBlZGdlIHNlY3Rpb24uIEZvdW5kOiAiLFVfPSJvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsLmFkYXB0ZXJzIixkaD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIixPND0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoIixoZGU9IkVNYXBQcm9wZXJ0eUhvbGRlciIsZmRlPSJFbGtCZW5kUG9pbnQiLGRkZT0iRWxrR3JhcGhFbGVtZW50IixnZGU9IkVsa0Nvbm5lY3RhYmxlU2hhcGUiLGw4dD0iRWxrRWRnZSIscGRlPSJFbGtFZGdlU2VjdGlvbiIsYmRlPSJFTW9kZWxFbGVtZW50Iix2ZGU9IkVOYW1lZEVsZW1lbnQiLGg4dD0iRWxrTGFiZWwiLGY4dD0iRWxrTm9kZSIsZDh0PSJFbGtQb3J0Iix3ZGU9ezkyOjEsOTA6MX0sazY9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwiLGFiPSJUaGUgZmVhdHVyZSAnIixXXz0iJyBpcyBub3QgYSB2YWxpZCBjaGFuZ2VhYmxlIGZlYXR1cmUiLG1kZT0iRXhwZWN0aW5nIG51bGwiLEZjdD0iJyBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIix5ZGU9IlRoZSBmZWF0dXJlIElEIix4ZGU9IiBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIElEIixkYz0zMjc2OCxrZGU9ezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MX0sTW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsIixfMj0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLmltcGwiLEtfPSJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIsSEU9IlRoZSBkYXRhdHlwZSAnIixrdz0iJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIixCY3Q9IlRoZSB2YWx1ZSAnIixOND17MTkwOjEsMzoxLDQ6MX0sUmN0PSJUaGUgY2xhc3MgJyIsR0U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZWxrL0Vsa0dyYXBoIix3Zj0xMDI0LGc4dD0icHJvcGVydHkiLFlfPSJ2YWx1ZSIsamN0PSJzb3VyY2UiLEVkZT0icHJvcGVydGllcyIsVGRlPSJpZGVudGlmaWVyIiwkY3Q9ImhlaWdodCIsemN0PSJ3aWR0aCIscWN0PSJwYXJlbnQiLEhjdD0idGV4dCIsR2N0PSJjaGlsZHJlbiIsQ2RlPSJoaWVyYXJjaGljYWwiLHA4dD0ic291cmNlcyIsVmN0PSJ0YXJnZXRzIixiOHQ9InNlY3Rpb25zIix3SD0iYmVuZFBvaW50cyIsdjh0PSJvdXRnb2luZ1NoYXBlIix3OHQ9ImluY29taW5nU2hhcGUiLG04dD0ib3V0Z29pbmdTZWN0aW9ucyIseTh0PSJpbmNvbWluZ1NlY3Rpb25zIixSYT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsIix4OHQ9IlNldmVyZSBpbXBsZW1lbnRhdGlvbiBlcnJvciBpbiB0aGUgSnNvbiB0byBFbGtHcmFwaCBpbXBvcnRlci4iLENkPSJpZCIsd2E9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5qc29uIixrOHQ9IlVuaGFuZGxlZCBwYXJhbWV0ZXIgdHlwZXM6ICIsX2RlPSJzdGFydFBvaW50IixTZGU9IkFuIGVkZ2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzb3VyY2UgYW5kIG9uZSB0YXJnZXQgKGVkZ2UgaWQ6ICciLFZFPSInKS4iLEFkZT0iUmVmZXJlbmNlZCBlZGdlIHNlY3Rpb24gZG9lcyBub3QgZXhpc3Q6ICIsTGRlPSIgKGVkZ2UgaWQ6ICciLEU4dD0idGFyZ2V0IixNZGU9InNvdXJjZVBvaW50IixJZGU9InRhcmdldFBvaW50IixtSD0iZ3JvdXAiLG9pPSJuYW1lIixEZGU9ImNvbm5lY3RhYmxlU2hhcGUgY2Fubm90IGJlIG51bGwiLE9kZT0iZWRnZSBjYW5ub3QgYmUgbnVsbCIsVWN0PSJQYXNzZWQgZWRnZSBpcyBub3QgJ3NpbXBsZScuIix5SD0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLnV0aWwiLFhEPSJUaGUgJ25vIGR1cGxpY2F0ZXMnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLFdjdD0idGFyZ2V0SW5kZXg9IixTMj0iLCBzaXplPSIsS2N0PSJzb3VyY2VJbmRleD0iLF9kPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxfSxZY3Q9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw0NzoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MSw1ODg6MX0seEg9ImxvZ2dpbmciLE5kZT0ibWVhc3VyZUV4ZWN1dGlvblRpbWUiLFBkZT0icGFyc2VyLnBhcnNlLjEiLEZkZT0icGFyc2VyLnBhcnNlLjIiLGtIPSJwYXJzZXIubmV4dC4xIixYY3Q9InBhcnNlci5uZXh0LjIiLEJkZT0icGFyc2VyLm5leHQuMyIsUmRlPSJwYXJzZXIubmV4dC40IixBMj0icGFyc2VyLmZhY3Rvci4xIixUOHQ9InBhcnNlci5mYWN0b3IuMiIsamRlPSJwYXJzZXIuZmFjdG9yLjMiLCRkZT0icGFyc2VyLmZhY3Rvci40Iix6ZGU9InBhcnNlci5mYWN0b3IuNSIscWRlPSJwYXJzZXIuZmFjdG9yLjYiLEhkZT0icGFyc2VyLmF0b20uMSIsR2RlPSJwYXJzZXIuYXRvbS4yIixWZGU9InBhcnNlci5hdG9tLjMiLEM4dD0icGFyc2VyLmF0b20uNCIsUWN0PSJwYXJzZXIuYXRvbS41IixfOHQ9InBhcnNlci5jYy4xIixFSD0icGFyc2VyLmNjLjIiLFVkZT0icGFyc2VyLmNjLjMiLFdkZT0icGFyc2VyLmNjLjUiLFM4dD0icGFyc2VyLmNjLjYiLEE4dD0icGFyc2VyLmNjLjciLFpjdD0icGFyc2VyLmNjLjgiLEtkZT0icGFyc2VyLm9wZS4xIixZZGU9InBhcnNlci5vcGUuMiIsWGRlPSJwYXJzZXIub3BlLjMiLEdnPSJwYXJzZXIuZGVzY2FwZS4xIixRZGU9InBhcnNlci5kZXNjYXBlLjIiLFpkZT0icGFyc2VyLmRlc2NhcGUuMyIsSmRlPSJwYXJzZXIuZGVzY2FwZS40Iix0MGU9InBhcnNlci5kZXNjYXBlLjUiLGdoPSJwYXJzZXIucHJvY2Vzcy4xIixlMGU9InBhcnNlci5xdWFudGlmaWVyLjEiLG4wZT0icGFyc2VyLnF1YW50aWZpZXIuMiIscjBlPSJwYXJzZXIucXVhbnRpZmllci4zIixpMGU9InBhcnNlci5xdWFudGlmaWVyLjQiLEw4dD0icGFyc2VyLnF1YW50aWZpZXIuNSIsczBlPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSIsTTh0PXs0MTU6MSw2NzI6MX0sYTBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjF9LFFEPXszNjY6MSwxNDM6MX0sWF89ImluZGV4PSIsSmN0PXszOjEsNDoxLDU6MSwxMjY6MX0sbzBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNTg6MX0sSTh0PXszOjEsNjoxLDQ6MSw1OjEsMTkyOjF9LGMwZT17MzoxLDQ6MSw1OjEsMTY1OjEsMzY3OjF9LHUwZT0iOy8/OkAmPSskLCIsbDBlPSJpbnZhbGlkIGF1dGhvcml0eTogIixoMGU9IkVBbm5vdGF0aW9uIixmMGU9IkVUeXBlZEVsZW1lbnQiLGQwZT0iRVN0cnVjdHVyYWxGZWF0dXJlIixnMGU9IkVBdHRyaWJ1dGUiLHAwZT0iRUNsYXNzaWZpZXIiLGIwZT0iRUVudW1MaXRlcmFsIix2MGU9IkVHZW5lcmljVHlwZSIsdzBlPSJFT3BlcmF0aW9uIixtMGU9IkVQYXJhbWV0ZXIiLHkwZT0iRVJlZmVyZW5jZSIseDBlPSJFVHlwZVBhcmFtZXRlciIsJGk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsIix0dXQ9ezc2OjF9LEQ4dD17MzoxLDIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjEsNzY6MSw2OToxLDk1OjF9LGswZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcCRFbnRyeSIsenU9ODE5MixBeT0yMDQ4LFFfPSJieXRlIixUSD0iY2hhciIsWl89ImRvdWJsZSIsSl89ImZsb2F0Iix0Uz0iaW50IixlUz0ibG9uZyIsblM9InNob3J0IixFMGU9ImphdmEubGFuZy5PYmplY3QiLFA0PXszOjEsNDoxLDU6MSwyNDc6MX0sTzh0PXszOjEsNDoxLDU6MSw2NzM6MX0sVDBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDY5OjF9LHpvPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsNjk6MSw5NToxfSxaRD0ibWl4ZWQiLEtyPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiLE5oPSJraW5kIixDMGU9ezM6MSw0OjEsNToxLDY3NDoxfSxOOHQ9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw3NjoxLDY5OjEsOTU6MX0sQ0g9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1ODoxLDY5OjF9LF9IPXs0NzoxLDEyNToxLDI3OToxfSxTSD17NzI6MSwzMzI6MX0sQUg9IlRoZSB2YWx1ZSBvZiB0eXBlICciLExIPSInIG11c3QgYmUgb2YgdHlwZSAnIixGND0xMzE2LFBoPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIixNSD0tMzI3NjgsRXc9ImNvbnN0cmFpbnRzIixTYT0iYmFzZVR5cGUiLF8wZT0iZ2V0RVN0cnVjdHVyYWxGZWF0dXJlIixTMGU9ImdldEZlYXR1cmVJRCIsclM9ImZlYXR1cmUiLEEwZT0iZ2V0T3BlcmF0aW9uSUQiLFA4dD0ib3BlcmF0aW9uIixMMGU9ImRlZmF1bHRWYWx1ZSIsTTBlPSJlVHlwZVBhcmFtZXRlcnMiLEkwZT0iaXNJbnN0YW5jZSIsRDBlPSJnZXRFRW51bUxpdGVyYWwiLE8wZT0iZUNvbnRhaW5pbmdDbGFzcyIsaWk9ezU1OjF9LE4wZT17MzoxLDQ6MSw1OjEsMTE5OjF9LFAwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlIixGMGU9ezkyOjEsOTA6MSw1OTE6MSwxOTM1OjF9LGV1dD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwiLEY4dD0idW5zcGVjaWZpZWQiLEpEPSJzaW1wbGUiLElIPSJhdHRyaWJ1dGUiLEIwZT0iYXR0cmlidXRlV2lsZGNhcmQiLERIPSJlbGVtZW50IixudXQ9ImVsZW1lbnRXaWxkY2FyZCIsdDE9ImNvbGxhcHNlIixydXQ9Iml0ZW1UeXBlIixPSD0ibmFtZXNwYWNlIix0Tz0iIyN0YXJnZXROYW1lc3BhY2UiLEZoPSJ3aGl0ZVNwYWNlIixCOHQ9IndpbGRjYXJkcyIsTDI9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSIsaXV0PSIjI2FueSIsVUU9InVuaW5pdGlhbGl6ZWQiLGVPPSJUaGUgbXVsdGlwbGljaXR5IGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLE5IPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUiLFIwZT0iUHJvY2Vzc2luZ0luc3RydWN0aW9uIixqMGU9IlNpbXBsZUFueVR5cGUiLCQwZT0iWE1MVHlwZURvY3VtZW50Um9vdCIseXM9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsIixuTz0iSU5GIix6MGU9InByb2Nlc3NpbmciLHEwZT0iRU5USVRJRVNfLl9iYXNlIixSOHQ9Im1pbkxlbmd0aCIsajh0PSJFTlRJVFkiLFBIPSJOQ05hbWUiLEgwZT0iSURSRUZTXy5fYmFzZSIsJDh0PSJpbnRlZ2VyIixzdXQ9InRva2VuIixhdXQ9InBhdHRlcm4iLEcwZT0iW2EtekEtWl17MSw4fSgtW2EtekEtWjAtOV17MSw4fSkqIix6OHQ9IlxcaVxcYyoiLFYwZT0iW1xcaS1bOl1dW1xcYy1bOl1dKiIsVTBlPSJub25Qb3NpdGl2ZUludGVnZXIiLHJPPSJtYXhJbmNsdXNpdmUiLHE4dD0iTk1UT0tFTiIsVzBlPSJOTVRPS0VOU18uX2Jhc2UiLEg4dD0ibm9uTmVnYXRpdmVJbnRlZ2VyIixpTz0ibWluSW5jbHVzaXZlIixLMGU9Im5vcm1hbGl6ZWRTdHJpbmciLFkwZT0idW5zaWduZWRCeXRlIixYMGU9InVuc2lnbmVkSW50IixRMGU9IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IixaMGU9InVuc2lnbmVkU2hvcnQiLEowZT0icHJvY2Vzc2luZ0luc3RydWN0aW9uIixWZz0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmludGVybmFsIixXRT0xMTE0MTExLHRnZT0iSW50ZXJuYWwgRXJyb3I6IHNob3J0aGFuZHM6IFxcdSIsaVM9InhtbDppc0RpZ2l0IixvdXQ9InhtbDppc1dvcmQiLGN1dD0ieG1sOmlzU3BhY2UiLHV1dD0ieG1sOmlzTmFtZUNoYXIiLGx1dD0ieG1sOmlzSW5pdGlhbE5hbWVDaGFyIixlZ2U9IjA52aDZqduw27ngpabgpa/gp6bgp6/gqabgqa/gq6bgq6/grabgra/gr6fgr6/gsabgsa/gs6bgs6/gtabgta/guZDguZngu5Dgu5ngvKDgvKkiLG5nZT0iQVphesOAw5bDmMO2w7jEscS0xL7FgcWIxYrFvsaAx4PHjcewx7THtce6yJfJkMqoyrvLgc6GzobOiM6KzozOjM6OzqHOo8+Oz5DPls+az5rPnM+cz57Pns+gz6DPos+z0IHQjNCO0Y/RkdGc0Z7SgdKQ04TTh9OI04vTjNOQ06vTrtO107jTudSx1ZbVmdWZ1aHWhteQ16rXsNey2KHYutmB2YrZsdq32rravtuA247bkNuT25Xbldul26bgpIXgpLngpL3gpL3gpZjgpaHgpoXgpozgpo/gppDgppPgpqjgpqrgprDgprLgprLgprbgprngp5zgp53gp5/gp6Hgp7Dgp7HgqIXgqIrgqI/gqJDgqJPgqKjgqKrgqLDgqLLgqLPgqLXgqLbgqLjgqLngqZngqZzgqZ7gqZ7gqbLgqbTgqoXgqovgqo3gqo3gqo/gqpHgqpPgqqjgqqrgqrDgqrLgqrPgqrXgqrngqr3gqr3gq6Dgq6DgrIXgrIzgrI/grJDgrJPgrKjgrKrgrLDgrLLgrLPgrLbgrLngrL3grL3grZzgrZ3grZ/graHgroXgrorgro7grpDgrpLgrpXgrpngrprgrpzgrpzgrp7grp/grqPgrqTgrqjgrqrgrq7grrXgrrfgrrngsIXgsIzgsI7gsJDgsJLgsKjgsKrgsLPgsLXgsLngsaDgsaHgsoXgsozgso7gspDgspLgsqjgsqrgsrPgsrXgsrngs57gs57gs6Dgs6HgtIXgtIzgtI7gtJDgtJLgtKjgtKrgtLngtaDgtaHguIHguK7guLDguLDguLLguLPguYDguYXguoHguoLguoTguoTguofguojguorguorguo3guo3gupTgupfgupngup/guqHguqPguqXguqXguqfguqfguqrguqvguq3guq7gurDgurDgurLgurPgur3gur3gu4Dgu4TgvYDgvYfgvYngvanhgqDhg4Xhg5Dhg7bhhIDhhIDhhILhhIPhhIXhhIfhhInhhInhhIvhhIzhhI7hhJLhhLzhhLzhhL7hhL7hhYDhhYDhhYzhhYzhhY7hhY7hhZDhhZDhhZThhZXhhZnhhZnhhZ/hhaHhhaPhhaPhhaXhhaXhhafhhafhhanhhanhha3hha7hhbLhhbPhhbXhhbXhhp7hhp7hhqjhhqjhhqvhhqvhhq7hhq/hhrfhhrjhhrrhhrrhhrzhh4Lhh6vhh6vhh7Dhh7Dhh7nhh7nhuIDhupvhuqDhu7nhvIDhvJXhvJjhvJ3hvKDhvYXhvYjhvY3hvZDhvZfhvZnhvZnhvZvhvZvhvZ3hvZ3hvZ/hvb3hvoDhvrThvrbhvrzhvr7hvr7hv4Lhv4Thv4bhv4zhv5Dhv5Phv5bhv5vhv6Dhv6zhv7Lhv7Thv7bhv7zihKbihKbihKrihKvihK7ihK7ihoDihoLjgIfjgIfjgKHjgKnjgYHjgpTjgqHjg7rjhIXjhKzkuIDpvqXqsIDtnqMiLHJnZT0iUHJpdmF0ZSBVc2UiLGh1dD0iQVNTSUdORUQiLGZ1dD0iXDB/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+/ryIsRzh0PSJVTkFTU0lHTkVEIixLRT17MzoxLDExNzoxfSxpZ2U9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS51dGlsIixGSD17MzoxLDQ6MSw1OjEsMzY4OjF9LFY4dD0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliIixzZ2U9IkNhbm5vdCBhZGQgZWxlbWVudHMgdG8gYSBSYW5nZSIsYWdlPSJDYW5ub3Qgc2V0IGVsZW1lbnRzIGluIGEgUmFuZ2UiLG9nZT0iQ2Fubm90IHJlbW92ZSBlbGVtZW50cyBmcm9tIGEgUmFuZ2UiLEJIPSJsb2NhbGUiLFJIPSJkZWZhdWx0IixqSD0idXNlci5hZ2VudCIsbCwkSCxkdXQ7Yi5nb29nPWIuZ29vZ3x8e30sYi5nb29nLmdsb2JhbD1iLmdvb2cuZ2xvYmFsfHxiLHkwbigpLEkoMSxudWxsLHt9LF8pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5VdCh0aGlzLGUpfSxsLkdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ219LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSXYodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gQXAoc2wodGhpcykpKyJAIisoZT1IaSh0aGlzKT4+PjAsZS50b1N0cmluZygxNikpfSxsLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5GYih0KX0sbC5oYXNoQ29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhiKCl9LGwudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5JYigpfTt2YXIgY2dlLHVnZSxsZ2U7SSgyOTAsMSx7MjkwOjEsMjAyNjoxfSxreXQpLGwubGU9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49bmV3IGt5dCxuLmk9NCxlPjE/bi5jPW1RdCh0aGlzLGUtMSk6bi5jPXRoaXMsbn0sbC5tZT1mdW5jdGlvbigpe3JldHVybiBMMCh0aGlzKSx0aGlzLmJ9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gQXAodGhpcyl9LGwub2U9ZnVuY3Rpb24oKXtyZXR1cm4gTDAodGhpcyksdGhpcy5rfSxsLnBlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaSY0KSE9MH0sbC5xZT1mdW5jdGlvbigpe3JldHVybih0aGlzLmkmMSkhPTB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gQm10KHRoaXMpfSxsLmk9MDt2YXIgWG49UChYbywiT2JqZWN0IiwxKSxVOHQ9UChYbywiQ2xhc3MiLDI5MCk7SSgxOTk4LDEsX0QpLFAoU0QsIk9wdGlvbmFsIiwxOTk4KSxJKDExNzAsMTk5OCxfRCxMKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dGhpc30sbC5IYj1mdW5jdGlvbigpe3JldHVybiAyMDQwNzMyMzMyfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk9wdGlvbmFsLmFic2VudCgpIn0sbC5KYj1mdW5jdGlvbihlKXtyZXR1cm4gQXIoZSksSTkoKSxndXR9O3ZhciBndXQ7UChTRCwiQWJzZW50IiwxMTcwKSxJKDYyOCwxLHt9LGFldCksUChTRCwiSm9pbmVyIiw2MjgpO3ZhciBZNW49WWkoU0QsIlByZWRpY2F0ZSIpO0koNTgyLDEsezE2OToxLDU4MjoxLDM6MSw0NToxfSxiOSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gc3JlKHRoaXMsZSl9LGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHNyZSh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDU4Mik/KG49dShlLDU4MikscDV0KHRoaXMuYSxuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBTeXQodGhpcy5hKSszMDY2NTQyNTJ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gYWduKHRoaXMuYSl9LFAoU0QsIlByZWRpY2F0ZXMvQW5kUHJlZGljYXRlIiw1ODIpLEkoNDA4LDE5OTgsezQwODoxLDM6MX0samspLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDA4KT8obj11KGUsNDA4KSx5aSh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gMTUwMjQ3NjU3MitIaSh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFZoZSt0aGlzLmErIikifSxsLkpiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgamsociQoZS5LYih0aGlzLmEpLCJ0aGUgRnVuY3Rpb24gcGFzc2VkIHRvIE9wdGlvbmFsLnRyYW5zZm9ybSgpIG11c3Qgbm90IHJldHVybiBudWxsLiIpKX0sUChTRCwiUHJlc2VudCIsNDA4KSxJKDE5OCwxLFNFKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUWI9ZnVuY3Rpb24oKXtVcXQoKX0sUChZZSwiVW5tb2RpZmlhYmxlSXRlcmF0b3IiLDE5OCksSSgxOTc4LDE5OCxBRSksbC5RYj1mdW5jdGlvbigpe1VxdCgpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiVW5tb2RpZmlhYmxlTGlzdEl0ZXJhdG9yIiwxOTc4KSxJKDM4NiwxOTc4LEFFKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYzx0aGlzLmR9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPjB9LGwuUGI9ZnVuY3Rpb24oKXtpZih0aGlzLmM+PXRoaXMuZCl0aHJvdyBydChuZXcgbGMpO3JldHVybiB0aGlzLlhiKHRoaXMuYysrKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuVWI9ZnVuY3Rpb24oKXtpZih0aGlzLmM8PTApdGhyb3cgcnQobmV3IGxjKTtyZXR1cm4gdGhpcy5YYigtLXRoaXMuYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLTF9LGwuYz0wLGwuZD0wLFAoWWUsIkFic3RyYWN0SW5kZXhlZExpc3RJdGVyYXRvciIsMzg2KSxJKDY5OSwxOTgsU0UpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gc2l0KHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEltdCh0aGlzKX0sbC5lPTEsUChZZSwiQWJzdHJhY3RJdGVyYXRvciIsNjk5KSxJKDE5ODYsMSx7MjI0OjF9KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLGV8fCh0aGlzLmY9dGhpcy5hYygpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRWl0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5aYigpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gUHgodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5aYigpKX0sUChZZSwiQWJzdHJhY3RNdWx0aW1hcCIsMTk4NiksSSg3MjYsMTk4Nix5MiksbC4kYj1mdW5jdGlvbigpe1EkKHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBoSHQodGhpcyxlKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbjgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhjKCl9LGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFczKHRoaXMsdGhpcy5jKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1jKHRoaXMuaGMoKSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExxdCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiBNc3QodGhpcy5jLnZjKCkuTmMoKSxuZXcgQiw2NCx0aGlzLmQpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiBBaSh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiAkSSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5tYz1mdW5jdGlvbihlKXtyZXR1cm4gdm4oKSxuZXcgVChlKX0sbC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQXF0KHRoaXMpfSxsLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIE1zdCh0aGlzLmMuQ2MoKS5OYygpLG5ldyBOLDY0LHRoaXMuZCl9LGwucGM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IEkkKHRoaXMsZSxuLG51bGwpfSxsLmQ9MCxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAiLDcyNiksSSgxNjMxLDcyNix5MiksbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWWModGhpcy5hKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHZuKCksaW99LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwxNSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoJEkodGhpcyxlKSwxNSl9LGwuWmI9ZnVuY3Rpb24oKXtyZXR1cm4gJHgodGhpcyl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEVpdCh0aGlzLGUpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiB1KEFpKHRoaXMsZSksMTUpfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiB1KCRJKHRoaXMsZSksMTUpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBKTSh1KGUsMTUpKX0sbC5wYz1mdW5jdGlvbihlLG4pe3JldHVybiBUWnQodGhpcyxlLHUobiwxNSksbnVsbCl9LFAoWWUsIkFic3RyYWN0TGlzdE11bHRpbWFwIiwxNjMxKSxJKDczMiwxLHJhKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLk9iKCl8fHRoaXMuZS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuZS5PYigpfHwoZT11KHRoaXMuYy5QYigpLDQyKSx0aGlzLmI9ZS5jZCgpLHRoaXMuYT11KGUuZGQoKSwxNCksdGhpcy5lPXRoaXMuYS5LYygpKSx0aGlzLnNjKHRoaXMuYix0aGlzLmUuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmUuUWIoKSx0aGlzLmEuZGMoKSYmdGhpcy5jLlFiKCksLS10aGlzLmQuZH0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0l0ciIsNzMyKSxJKDEwOTksNzMyLHJhLEFxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBufSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMSIsMTA5OSksSSgxMTAwLDEse30sTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE0KS5OYygpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMW1ldGhvZHJlZiRzcGxpdGVyYXRvciRUeXBlIiwxMTAwKSxJKDExMDEsNzMyLHJhLExxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgX3YoZSxuKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwLzIiLDExMDEpO3ZhciBXOHQ9WWkocHIsIk1hcCIpO0koMTk2NywxLGJ3KSxsLndjPWZ1bmN0aW9uKGUpe1VDKHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLnZjKCkuJGIoKX0sbC50Yz1mdW5jdGlvbihlKXtyZXR1cm4gZHN0KHRoaXMsZSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuISF3NHQodGhpcyxlLCExKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyLHM7Zm9yKHI9dGhpcy52YygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDQyKSxzPW4uZGQoKSxHdChlKT09PUd0KHMpfHxlIT1udWxsJiZ5aShlLHMpKXJldHVybiEwO3JldHVybiExfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihlPT09dGhpcylyZXR1cm4hMDtpZighRXQoZSw4Myl8fChzPXUoZSw4MyksdGhpcy5nYygpIT1zLmdjKCkpKXJldHVybiExO2ZvcihyPXMudmMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw0MiksIXRoaXMudGMobikpcmV0dXJuITE7cmV0dXJuITB9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVjKHc0dCh0aGlzLGUsITEpKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB2eXQodGhpcy52YygpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRtKHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IHlnKCJQdXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIG1hcCIpKX0sbC5BYz1mdW5jdGlvbihlKXtWQyh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBlYyh3NHQodGhpcyxlLCEwKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YygpLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gb2FlKHRoaXMpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiMSh0aGlzKX0sUChwciwiQWJzdHJhY3RNYXAiLDE5NjcpLEkoMTk4NywxOTY3LGJ3KSxsLmJjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUUih0aGlzKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBFWXQodGhpcyl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmcsZXx8KHRoaXMuZz10aGlzLmJjKCkpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5pLGV8fCh0aGlzLmk9bmV3IHJHdCh0aGlzKSl9LFAoWWUsIk1hcHMvVmlld0NhY2hpbmdBYnN0cmFjdE1hcCIsMTk4NyksSSgzODksMTk4NyxidyxuOCksbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gcWFuKHRoaXMsZSl9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGl1bih0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5kPT10aGlzLmUuYz90aGlzLmUuJGIoKTpPaihuZXcganZ0KHRoaXMpKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gUnJlKHRoaXMuZCxlKX0sbC5FYz1mdW5jdGlvbigpe3JldHVybiBuZXcgJGsodGhpcyl9LGwuRGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZXx8eWkodGhpcy5kLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuZCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5kKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwIiwzODkpO3ZhciBCMT1ZaShYbywiSXRlcmFibGUiKTtJKDI4LDEsd3kpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMCl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5GYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgeWcoIkFkZCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29sbGVjdGlvbiIpKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gVWEodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe1R3dCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcnkodGhpcyxlLCExKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gSUkodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJ5KHRoaXMsZSwhMCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gWnZ0KHRoaXMpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBYSSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFFwKHRoaXMpfSxQKHByLCJBYnN0cmFjdENvbGxlY3Rpb24iLDI4KTt2YXIgQmg9WWkocHIsIlNldCIpO0koTjEsMjgsanUpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIElpZSh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ5dCh0aGlzKX0sUChwciwiQWJzdHJhY3RTZXQiLE4xKSxJKDE5NzAsTjEsanUpLFAoWWUsIlNldHMvSW1wcm92ZWRBYnN0cmFjdFNldCIsMTk3MCksSSgxOTcxLDE5NzAsanUpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLlJjKCkuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZmllKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SYygpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuSGMoZSk/KG49dShlLDQyKSx0aGlzLlJjKCkuZWMoKS5NYyhuLmNkKCkpKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX0sUChZZSwiTWFwcy9FbnRyeVNldCIsMTk3MSksSSgxMDk3LDE5NzEsanUsJGspLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFV5dCh0aGlzLmEuZC52YygpLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqdnQodGhpcy5hKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIFV5dCh0aGlzLmEuZC52YygpLGUpPyhuPXUoZSw0MiksQXNuKHRoaXMuYS5lLG4uY2QoKSksITApOiExfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIFZNKHRoaXMuYS5kLnZjKCkuTmMoKSxuZXcgVkIodGhpcy5hKSl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEVudHJpZXMiLDEwOTcpLEkoMTA5OCwxLHt9LFZCKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkSnQodGhpcy5hLHUoZSw0MikpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzLzBtZXRob2RyZWYkd3JhcEVudHJ5JFR5cGUiLDEwOTgpLEkoNzMwLDEscmEsanZ0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYi5QYigpLDQyKSx0aGlzLmE9dShlLmRkKCksMTQpLGRKdCh0aGlzLmMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUWI9ZnVuY3Rpb24oKXtuNCghIXRoaXMuYSksdGhpcy5iLlFiKCksdGhpcy5jLmUuZC09dGhpcy5hLmdjKCksdGhpcy5hLiRiKCksdGhpcy5hPW51bGx9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEl0ZXJhdG9yIiw3MzApLEkoNTMyLDE5NzAsanUsVFIpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmIuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLHRoaXMuYi53YyhuZXcgZ3R0KGUpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRDkodGhpcy5iLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5fYihlKT8odGhpcy5iLkJjKGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sUChZZSwiTWFwcy9LZXlTZXQiLDUzMiksSSgzMTgsNTMyLGp1LFczKSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGU7T2ooKGU9dGhpcy5iLnZjKCkuS2MoKSxuZXcgaGJ0KHRoaXMsZSkpKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLmVjKCkuSWMoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfHx5aSh0aGlzLmIuZWMoKSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuZWMoKSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIudmMoKS5LYygpLG5ldyBoYnQodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiByPTAsbj11KHRoaXMuYi5CYyhlKSwxNCksbiYmKHI9bi5nYygpLG4uJGIoKSx0aGlzLmEuZC09cikscj4wfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9LZXlTZXQiLDMxOCksSSg3MzEsMSxyYSxoYnQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9dSh0aGlzLmMuUGIoKSw0MiksdGhpcy5hLmNkKCl9LGwuUWI9ZnVuY3Rpb24oKXt2YXIgZTtuNCghIXRoaXMuYSksZT11KHRoaXMuYS5kZCgpLDE0KSx0aGlzLmMuUWIoKSx0aGlzLmIuYS5kLT1lLmdjKCksZS4kYigpLHRoaXMuYT1udWxsfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0LzEiLDczMSksSSg0OTEsMzg5LHs4MzoxLDE2MToxfSxSTSksbC5iYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5UYygpfSxsLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnTSh0aGlzLmMsdGhpcy5VYygpKX0sbC5UYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYixlfHwodGhpcy5iPXRoaXMuU2MoKSl9LGwuVWM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmQsMTYxKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEFzTWFwIiw0OTEpLEkoNTQyLDQ5MSxVaGUseWopLGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuU2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIsdShlfHwodGhpcy5iPW5ldyBlOCh0aGlzLmEsdSh1KHRoaXMuZCwxNjEpLDE3MSkpKSwyNzEpfSxsLlRjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLHUoZXx8KHRoaXMuYj1uZXcgZTgodGhpcy5hLHUodSh0aGlzLmQsMTYxKSwxNzEpKSksMjcxKX0sbC5VYz1mdW5jdGlvbigpe3JldHVybiB1KHUodGhpcy5kLDE2MSksMTcxKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL05hdmlnYWJsZUFzTWFwIiw1NDIpLEkoNDkwLDMxOCxXaGUsZ00pLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmVjKCkuTmMoKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEtleVNldCIsNDkwKSxJKDM4OCw0OTAsTXh0LGU4KSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlS2V5U2V0IiwzODgpLEkoNTQxLDI4LHd5LEkkKSxsLkZjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIGFsKHRoaXMpLHI9dGhpcy5kLmRjKCksbj10aGlzLmQuRmMoZSksbiYmKCsrdGhpcy5mLmQsciYmcU0odGhpcykpLG59LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBlLmRjKCk/ITE6KHM9KGFsKHRoaXMpLHRoaXMuZC5nYygpKSxuPXRoaXMuZC5HYyhlKSxuJiYocj10aGlzLmQuZ2MoKSx0aGlzLmYuZCs9ci1zLHM9PTAmJnFNKHRoaXMpKSxuKX0sbC4kYj1mdW5jdGlvbigpe3ZhciBlO2U9KGFsKHRoaXMpLHRoaXMuZC5nYygpKSxlIT0wJiYodGhpcy5kLiRiKCksdGhpcy5mLmQtPWUsUmoodGhpcykpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBhbCh0aGlzKSx0aGlzLmQuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsKHRoaXMpLHRoaXMuZC5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXM/ITA6KGFsKHRoaXMpLHlpKHRoaXMuZCxlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksSGkodGhpcy5kKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBhbCh0aGlzKSxuZXcgQ3Z0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBhbCh0aGlzKSxuPXRoaXMuZC5NYyhlKSxuJiYoLS10aGlzLmYuZCxSaih0aGlzKSksbn0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB6VnQodGhpcyl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksdGhpcy5kLk5jKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksJG8odGhpcy5kKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRDb2xsZWN0aW9uIiw1NDEpO3ZhciBwaD1ZaShwciwiTGlzdCIpO0koNzI4LDU0MSx7MjA6MSwyODoxLDE0OjEsMTU6MX0sdHd0KSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksdGhpcy5kLk5jKCl9LGwuVmM9ZnVuY3Rpb24oZSxuKXt2YXIgcjthbCh0aGlzKSxyPXRoaXMuZC5kYygpLHUodGhpcy5kLDE1KS5WYyhlLG4pLCsrdGhpcy5hLmQsciYmcU0odGhpcyl9LGwuV2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIG4uZGMoKT8hMToobz0oYWwodGhpcyksdGhpcy5kLmdjKCkpLHI9dSh0aGlzLmQsMTUpLldjKGUsbiksciYmKHM9dGhpcy5kLmdjKCksdGhpcy5hLmQrPXMtbyxvPT0wJiZxTSh0aGlzKSkscil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsKHRoaXMpLHUodGhpcy5kLDE1KS5YYihlKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gYWwodGhpcyksdSh0aGlzLmQsMTUpLlhjKGUpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIGFsKHRoaXMpLG5ldyB5VXQodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsKHRoaXMpLG5ldyBPWHQodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gYWwodGhpcyksbj11KHRoaXMuZCwxNSkuJGMoZSksLS10aGlzLmEuZCxSaih0aGlzKSxufSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFsKHRoaXMpLHUodGhpcy5kLDE1KS5fYyhlLG4pfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFsKHRoaXMpLFRadCh0aGlzLmEsdGhpcy5lLHUodGhpcy5kLDE1KS5iZChlLG4pLHRoaXMuYj90aGlzLmI6dGhpcyl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdCIsNzI4KSxJKDEwOTYsNzI4LHsyMDoxLDI4OjEsMTQ6MSwxNToxLDU0OjF9LGxXdCksUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1JhbmRvbUFjY2Vzc1dyYXBwZWRMaXN0IiwxMDk2KSxJKDYyMCwxLHJhLEN2dCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEU4KHRoaXMpLHRoaXMuYi5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEU4KHRoaXMpLHRoaXMuYi5QYigpfSxsLlFiPWZ1bmN0aW9uKCl7V1V0KHRoaXMpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24vV3JhcHBlZEl0ZXJhdG9yIiw2MjApLEkoNzI5LDYyMCxKZCx5VXQsT1h0KSxsLlFiPWZ1bmN0aW9uKCl7V1V0KHRoaXMpfSxsLlJiPWZ1bmN0aW9uKGUpe3ZhciBuO249elZ0KHRoaXMuYSk9PTAsKEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlJiKGUpLCsrdGhpcy5hLmEuZCxuJiZxTSh0aGlzLmEpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuKEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlNiKCl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4oRTgodGhpcyksdSh0aGlzLmIsMTI1KSkuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybihFOCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5VYigpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuKEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlZiKCl9LGwuV2I9ZnVuY3Rpb24oZSl7KEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLldiKGUpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZExpc3QvV3JhcHBlZExpc3RJdGVyYXRvciIsNzI5KSxJKDcyNyw1NDEsV2hlLFUydCksbC5OYz1mdW5jdGlvbigpe3JldHVybiBhbCh0aGlzKSx0aGlzLmQuTmMoKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTb3J0ZWRTZXQiLDcyNyksSSgxMDk1LDcyNyxNeHQsZlV0KSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZE5hdmlnYWJsZVNldCIsMTA5NSksSSgxMDk0LDU0MSxqdSxUV3QpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksdGhpcy5kLk5jKCl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkU2V0IiwxMDk0KSxJKDExMDMsMSx7fSxCKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBOc24odShlLDQyKSl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMSRUeXBlIiwxMTAzKSxJKDExMDIsMSx7fSxldHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBfdih0aGlzLmEsZSl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMiRUeXBlIiwxMTAyKTt2YXIgTTI9WWkocHIsIk1hcC9FbnRyeSIpO0koMzQ1LDEsTXEpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpPyhuPXUoZSw0MiksZmQodGhpcy5jZCgpLG4uY2QoKSkmJmZkKHRoaXMuZGQoKSxuLmRkKCkpKTohMX0sbC5IYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGU9dGhpcy5jZCgpLG49dGhpcy5kZCgpLChlPT1udWxsPzA6SGkoZSkpXihuPT1udWxsPzA6SGkobikpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZCgpKyI9Iit0aGlzLmRkKCl9LFAoWWUsS2hlLDM0NSksSSgxOTg4LDI4LHd5KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5mZCgpLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpPyhuPXUoZSw0MiksZ2luKHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpPyhuPXUoZSw0MiksaVp0KHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZCgpLmR9LFAoWWUsIk11bHRpbWFwcy9FbnRyaWVzIiwxOTg4KSxJKDczMywxOTg4LHd5LFFMKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxsLmZkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sUChZZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyaWVzIiw3MzMpLEkoNzM0LDczMyxqdSx6cHQpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEY0dCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHNuZSh0aGlzKX0sUChZZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCIsNzM0KSxJKDczNSwyOCx3eSxNMyksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBaY24odGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5vYygpfSxQKFllLCJBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcyIsNzM1KSxJKDE5ODksMjgsezgzNToxLDIwOjEsMjg6MSwxNDoxfSksbC5KYz1mdW5jdGlvbihlKXtBcihlKSxZMyh0aGlzKS5KYyhuZXcgZHR0KGUpKX0sbC5OYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVkzKHRoaXMpLk5jKCksTXN0KGUsbmV3IHd0LDY0fGUucWQoKSYxMjk2LHRoaXMuYS5kKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gWHB0KCksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKHRoaXMpLEFyKGUpLEV0KGUsNTQzKT9taW4odShlLDgzNSkpOiFlLmRjKCkmJlhydCh0aGlzLGUuS2MoKSl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShueSgkeCh0aGlzLmEpLGUpLDE0KSwobj9uLmdjKCk6MCk+MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZmJuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkoWTModGhpcykpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFkzKHRoaXMpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFRvZSh0aGlzLGUsMSk+MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyhZMyh0aGlzKSl9LFAoWWUsIkFic3RyYWN0TXVsdGlzZXQiLDE5ODkpLEkoMTk5MSwxOTcwLGp1KSxsLiRiPWZ1bmN0aW9uKCl7USQodGhpcy5hLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIEV0KGUsNDkyKT8ocj11KGUsNDE2KSx1KHIuYS5kZCgpLDE0KS5nYygpPD0wPyExOihuPU5RdCh0aGlzLmEsci5hLmNkKCkpLG49PXUoci5hLmRkKCksMTQpLmdjKCkpKTohMX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyZXR1cm4gRXQoZSw0OTIpJiYocj11KGUsNDE2KSxuPXIuYS5jZCgpLHM9dShyLmEuZGQoKSwxNCkuZ2MoKSxzIT0wKT8obz10aGlzLmEsdHBuKG8sbixzKSk6ITF9LFAoWWUsIk11bHRpc2V0cy9FbnRyeVNldCIsMTk5MSksSSgxMTA5LDE5OTEsanUsWkwpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJxdChFWXQoJHgodGhpcy5hLmEpKS5LYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAkeCh0aGlzLmEuYSkuZ2MoKX0sUChZZSwiQWJzdHJhY3RNdWx0aXNldC9FbnRyeVNldCIsMTEwOSksSSg2MTksNzI2LHkyKSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2QoKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhkKCl9LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuamQoZSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMua2QoZSl9LGwuWmI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmYsZXx8KHRoaXMuZj10aGlzLmFjKCkpfSxsLmhkPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCksdm4oKSxVSH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRWl0KHRoaXMsZSl9LGwuamQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwyMSl9LGwua2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoJEkodGhpcyxlKSwyMSl9LGwubWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZuKCksbmV3IFFrKHUoZSwyMSkpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBUV3QodGhpcyxlLHUobiwyMSkpfSxQKFllLCJBYnN0cmFjdFNldE11bHRpbWFwIiw2MTkpLEkoMTY1Nyw2MTkseTIpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExwKHRoaXMuYil9LGwuZ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExwKHRoaXMuYil9LGwuamM9ZnVuY3Rpb24oKXtyZXR1cm4gcHd0KG5ldyBMcCh0aGlzLmIpKX0sbC5oZD1mdW5jdGlvbigpe3JldHVybiBwd3QobmV3IExwKHRoaXMuYikpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmpkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoJEkodGhpcyxlKSwyMSksODQpfSxsLmtkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoJEkodGhpcyxlKSwyMSksODQpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDI3MSk/cHd0KHUoZSwyNzEpKToodm4oKSxuZXcgQzJ0KHUoZSw4NCkpKX0sbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPUV0KHRoaXMuYywxNzEpP25ldyB5aih0aGlzLHUodGhpcy5jLDE3MSkpOkV0KHRoaXMuYywxNjEpP25ldyBSTSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBuOCh0aGlzLHRoaXMuYykpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEV0KG4sMjcxKT9uZXcgZlV0KHRoaXMsZSx1KG4sMjcxKSk6bmV3IFUydCh0aGlzLGUsdShuLDg0KSl9LFAoWWUsIkFic3RyYWN0U29ydGVkU2V0TXVsdGltYXAiLDE2NTcpLEkoMTY1OCwxNjU3LHkyKSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPUV0KHRoaXMuYywxNzEpP25ldyB5aih0aGlzLHUodGhpcy5jLDE3MSkpOkV0KHRoaXMuYywxNjEpP25ldyBSTSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBuOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1FdCh0aGlzLmMsMTcxKT9uZXcgZTgodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgZ00odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgVzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBFdCh0aGlzLmMsMTcxKT9uZXcgZTgodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgZ00odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgVzModGhpcyx0aGlzLmMpfSxQKFllLCJBYnN0cmFjdFNvcnRlZEtleVNvcnRlZFNldE11bHRpbWFwIiwxNjU4KSxJKDIwMTAsMSx7MTk0NzoxfSksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gSDFuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdnl0KChlPXRoaXMuZyxlfHwodGhpcy5nPW5ldyB2OSh0aGlzKSkpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBvYWUoKGU9dGhpcy5mLGV8fCh0aGlzLmY9bmV3IHYydCh0aGlzKSkpKX0sUChZZSwiQWJzdHJhY3RUYWJsZSIsMjAxMCksSSg2NjUsTjEsanUsdjkpLGwuJGI9ZnVuY3Rpb24oKXtXcXQoKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBFdChlLDQ2OCk/KG49dShlLDY4Mikscj11KG55KFVZdCh0aGlzLmEpLERwKG4uYy5lLG4uYikpLDgzKSwhIXImJlV5dChyLnZjKCksbmV3IF92KERwKG4uYy5jLG4uYSksV3gobi5jLG4uYixuLmEpKSkpOiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIFNubih0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIEV0KGUsNDY4KT8obj11KGUsNjgyKSxyPXUobnkoVVl0KHRoaXMuYSksRHAobi5jLmUsbi5iKSksODMpLCEhciYmQ3VuKHIudmMoKSxuZXcgX3YoRHAobi5jLmMsbi5hKSxXeChuLmMsbi5iLG4uYSkpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gaVl0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4ga2luKHRoaXMuYSl9LFAoWWUsIkFic3RyYWN0VGFibGUvQ2VsbFNldCIsNjY1KSxJKDE5MjgsMjgsd3ksbnR0KSxsLiRiPWZ1bmN0aW9uKCl7V3F0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE5kbih0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gQW5uKHRoaXMuYSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gaVl0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gb1p0KHRoaXMuYSl9LFAoWWUsIkFic3RyYWN0VGFibGUvVmFsdWVzIiwxOTI4KSxJKDE2MzIsMTYzMSx5MiksUChZZSwiQXJyYXlMaXN0TXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxNjMyKSxJKDUxMywxNjMyLHkyLHNldCwkd3QpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFljKHRoaXMuYSl9LGwuYT0wLFAoWWUsIkFycmF5TGlzdE11bHRpbWFwIiw1MTMpLEkoNjY0LDIwMTAsezY2NDoxLDE5NDc6MSwzOjF9LE5vZSksUChZZSwiQXJyYXlUYWJsZSIsNjY0KSxJKDE5MjQsMzg2LEFFLHpVdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHh5dCh0aGlzLmEsZSl9LFAoWWUsIkFycmF5VGFibGUvMSIsMTkyNCksSSgxOTI1LDEse30sR0IpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB4eXQodGhpcy5hLGUpfSxQKFllLCJBcnJheVRhYmxlLzFtZXRob2RyZWYkZ2V0Q2VsbCRUeXBlIiwxOTI1KSxJKDIwMTEsMSx7NjgyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpFdChlLDQ2OCk/KG49dShlLDY4MiksZmQoRHAodGhpcy5jLmUsdGhpcy5iKSxEcChuLmMuZSxuLmIpKSYmZmQoRHAodGhpcy5jLmMsdGhpcy5hKSxEcChuLmMuYyxuLmEpKSYmZmQoV3godGhpcy5jLHRoaXMuYix0aGlzLmEpLFd4KG4uYyxuLmIsbi5hKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KGN0KG90KFhuLDEpLEllLDEsNSxbRHAodGhpcy5jLmUsdGhpcy5iKSxEcCh0aGlzLmMuYyx0aGlzLmEpLFd4KHRoaXMuYyx0aGlzLmIsdGhpcy5hKV0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIitEcCh0aGlzLmMuZSx0aGlzLmIpKyIsIitEcCh0aGlzLmMuYyx0aGlzLmEpKyIpPSIrV3godGhpcy5jLHRoaXMuYix0aGlzLmEpfSxQKFllLCJUYWJsZXMvQWJzdHJhY3RDZWxsIiwyMDExKSxJKDQ2OCwyMDExLHs0Njg6MSw2ODI6MX0seHl0KSxsLmE9MCxsLmI9MCxsLmQ9MCxQKFllLCJBcnJheVRhYmxlLzIiLDQ2OCksSSgxOTI3LDEse30sb3gpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHd0ZSh0aGlzLmEsZSl9LFAoWWUsIkFycmF5VGFibGUvMm1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwxOTI3KSxJKDE5MjYsMzg2LEFFLHFVdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gd3RlKHRoaXMuYSxlKX0sUChZZSwiQXJyYXlUYWJsZS8zIiwxOTI2KSxJKDE5NzksMTk2NyxidyksbC4kYj1mdW5jdGlvbigpe09qKHRoaXMua2MoKSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHV4KHRoaXMpfSxsLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5WHQodGhpcy5rYygpLHRoaXMuZ2MoKSl9LFAoWWUsIk1hcHMvSXRlcmF0b3JCYXNlZEFic3RyYWN0TWFwIiwxOTc5KSxJKDgyOCwxOTc5LGJ3KSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gZkh0KHRoaXMuYyxlKX0sbC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSFV0KHRoaXMsdGhpcy5jLmIuYy5nYygpKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiBfbnQodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBkdih0aGlzKSl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dSh3Qyh0aGlzLmMsZSksMTkpLG4/dGhpcy5uZChuLmEpOm51bGx9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIE5udCh0aGlzLmMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dmFyIHI7aWYocj11KHdDKHRoaXMuYyxlKSwxOSksIXIpdGhyb3cgcnQobmV3IFBuKHRoaXMubWQoKSsiICIrZSsiIG5vdCBpbiAiK05udCh0aGlzLmMpKSk7cmV0dXJuIHRoaXMub2Qoci5hLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfSxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwIiw4MjgpLEkoMTkyMywxLHt9LGR2KSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBLWXQodGhpcy5hLGUpfSxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZSIsMTkyMyksSSgxOTIxLDM0NSxNcSxVSHQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gSFhlKHRoaXMuYSx0aGlzLmIpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uZCh0aGlzLmIpfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEub2QodGhpcy5iLGUpfSxsLmI9MCxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwLzEiLDE5MjEpLEkoMTkyMiwzODYsQUUsSFV0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBLWXQodGhpcy5hLGUpfSxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwLzIiLDE5MjIpLEkoMTkyMCw4MjgsYncsUFl0KSxsLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIkNvbHVtbiJ9LGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFd4KHRoaXMuYix0aGlzLmEsZSl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR25lKHRoaXMuYix0aGlzLmEsZSxuKX0sbC5hPTAsUChZZSwiQXJyYXlUYWJsZS9Sb3ciLDE5MjApLEkoODI5LDgyOCxidyx2MnQpLGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQWXQodGhpcy5hLGUpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUobiw4MyksX0tlKCl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdShuLDgzKSxTS2UoKX0sbC5tZD1mdW5jdGlvbigpe3JldHVybiJSb3cifSxQKFllLCJBcnJheVRhYmxlL1Jvd01hcCIsODI5KSxJKDExMjAsMSxNaCxXSHQpLGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnFkKCkmLTI2Mn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEucmQoKX0sbC5OYj1mdW5jdGlvbihlKXt0aGlzLmEuTmIobmV3IHFIdChlLHRoaXMuYikpfSxsLnNkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuc2QobmV3IHpIdChlLHRoaXMuYikpfSxQKFllLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzEiLDExMjApLEkoMTEyMSwxLFVuLHpIdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQwJFR5cGUiLDExMjEpLEkoMTEyMiwxLFVuLHFIdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQxJFR5cGUiLDExMjIpLEkoMTEyMywxLE1oLHdadCksbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kJiYodGhpcy5iPWtVdCh0aGlzLmIsdGhpcy5kLnJkKCkpKSxrVXQodGhpcy5iLDApfSxsLk5iPWZ1bmN0aW9uKGUpe3RoaXMuZCYmKHRoaXMuZC5OYihlKSx0aGlzLmQ9bnVsbCksdGhpcy5jLk5iKG5ldyAkSHQodGhpcy5lLGUpKSx0aGlzLmI9MH0sbC5zZD1mdW5jdGlvbihlKXtmb3IoOzspe2lmKHRoaXMuZCYmdGhpcy5kLnNkKGUpKXJldHVybiBhQyh0aGlzLmIsSXEpJiYodGhpcy5iPVlwKHRoaXMuYiwxKSksITA7aWYodGhpcy5kPW51bGwsIXRoaXMuYy5zZChuZXcgSEh0KHRoaXMsdGhpcy5lKSkpcmV0dXJuITF9fSxsLmE9MCxsLmI9MCxQKFllLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFGbGF0TWFwU3BsaXRlcmF0b3IiLDExMjMpLEkoMTEyNCwxLFVuLEhIdCksbC50ZD1mdW5jdGlvbihlKXtVUWUodGhpcy5hLHRoaXMuYixlKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDExMjQpLEkoMTEyNSwxLFVuLCRIdCksbC50ZD1mdW5jdGlvbihlKXtNWGUodGhpcy5iLHRoaXMuYSxlKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDExMjUpLEkoMTExNywxLE1oLHRLdCksbC5xZD1mdW5jdGlvbigpe3JldHVybiAxNjQ2NHx0aGlzLmJ9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnJkKCl9LGwuTmI9ZnVuY3Rpb24oZSl7dGhpcy5hLnhlKG5ldyBWSHQoZSx0aGlzLmMpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLnllKG5ldyBHSHQoZSx0aGlzLmMpKX0sbC5iPTAsUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcyIsMTExNyksSSgxMTE4LDEsQUQsR0h0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZCh0aGlzLmIubGQoZSkpfSxQKFllLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQwJFR5cGUiLDExMTgpLEkoMTExOSwxLEFELFZIdCksbC51ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLmxkKGUpKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcy9sYW1iZGEkMSRUeXBlIiwxMTE5KSxJKDI0NSwxLFBhdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52ZCh1KGUsMjQ1KSl9LGwudmQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PShYdHQoKSxidXQpPzE6ZT09KFF0dCgpLHB1dCk/LTE6KG49KE1qKCksU0kodGhpcy5hLGUuYSkpLG4hPTA/bjpFdCh0aGlzLDUxOSk9PUV0KGUsNTE5KT8wOkV0KHRoaXMsNTE5KT8xOi0xKX0sbC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFQzdCh0aGlzLGUpfSxQKFllLCJDdXQiLDI0NSksSSgxNzYxLDI0NSxQYXQsWHF0KSxsLnZkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT10aGlzPzA6MX0sbC54ZD1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgRXB0KX0sbC55ZD1mdW5jdGlvbihlKXtlLmErPSIr4oieKSJ9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRm8oWGhlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcWQoKSxPM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iK+KIniJ9O3ZhciBwdXQ7UChZZSwiQ3V0L0Fib3ZlQWxsIiwxNzYxKSxJKDUxOSwyNDUsezI0NToxLDUxOToxLDM6MSwzNToxfSxLVXQpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IigiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7UnAoaGMoZSx0aGlzLmEpLDkzKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybn5IaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiBNaigpLFNJKHRoaXMuYSxlKTwwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi8iK3RoaXMuYSsiXFwifSxQKFllLCJDdXQvQWJvdmVWYWx1ZSIsNTE5KSxJKDE3NjAsMjQ1LFBhdCxRcXQpLGwudmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PXRoaXM/MDotMX0sbC54ZD1mdW5jdGlvbihlKXtlLmErPSIoLeKIniJ9LGwueWQ9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IEVwdCl9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRm8oWGhlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcWQoKSxPM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iLeKIniJ9O3ZhciBidXQ7UChZZSwiQ3V0L0JlbG93QWxsIiwxNzYwKSxJKDE3NjIsMjQ1LFBhdCxZVXQpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IlsiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7UnAoaGMoZSx0aGlzLmEpLDQxKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiBNaigpLFNJKHRoaXMuYSxlKTw9MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJcXCIrdGhpcy5hKyIvIn0sUChZZSwiQ3V0L0JlbG93VmFsdWUiLDE3NjIpLEkoNTM3LDEsdDApLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBlbG4odShyJCh0aGlzLCJ1c2UgT3B0aW9uYWwub3JOdWxsKCkgaW5zdGVhZCBvZiBPcHRpb25hbC5vcihudWxsKSIpLDIwKS5LYygpKX0sUChZZSwiRmx1ZW50SXRlcmFibGUiLDUzNyksSSg0MzMsNTM3LHQwLHVDKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcihscih0aGlzLmEuS2MoKSxuZXcgeikpfSxQKFllLCJGbHVlbnRJdGVyYWJsZS8yIiw0MzMpLEkoMTA0Niw1MzcsdDAsSlZ0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIEJwKHRoaXMpfSxQKFllLCJGbHVlbnRJdGVyYWJsZS8zIiwxMDQ2KSxJKDcwOCwzODYsQUUsdzJ0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFbZV0uS2MoKX0sUChZZSwiRmx1ZW50SXRlcmFibGUvMy8xIiw3MDgpLEkoMTk3MiwxLHt9KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuQmQoKS5iKX0sUChZZSwiRm9yd2FyZGluZ09iamVjdCIsMTk3MiksSSgxOTczLDE5NzIsUWhlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKX0sbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCksYkh0KCl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKSx2SHQoKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuQ2QoKSx3SHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCkuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNkKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLG1IdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLlBjKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKS5RYyhlKX0sUChZZSwiRm9yd2FyZGluZ0NvbGxlY3Rpb24iLDE5NzMpLEkoMTk4MCwyOCxJeHQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FZCgpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnJ5KHRoaXMsZSwhMSl9LGwuRGQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nYygpKXtjYXNlIDA6cmV0dXJuIEdtKCksR20oKSx2dXQ7Y2FzZSAxOnJldHVybiBHbSgpLG5ldyBTbnQoQXIodGhpcy5FZCgpLlBiKCkpKTtkZWZhdWx0OnJldHVybiBuZXcgRll0KHRoaXMsdGhpcy5QYygpKX19LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiSW1tdXRhYmxlQ29sbGVjdGlvbiIsMTk4MCksSSg3MTIsMTk4MCxJeHQseHB0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIEt4KHRoaXMuYS5LYygpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdGhpcy5hLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gS3godGhpcy5hLktjKCkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sUChZZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUNvbGxlY3Rpb24iLDcxMiksSSgxNTIsMTk4MCxTXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVkKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GZCgwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5GZChlKX0sbC5hZD1mdW5jdGlvbihlKXtlNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLkdkKGUsbil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gWHBuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gb2NuKHRoaXMpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPy0xOnlmbih0aGlzLGUpfSxsLkVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmQoMCl9LGwuRmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE8ydCh0aGlzLGUpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLkdkPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHl6KChyPW5ldyBpR3QodGhpcyksbmV3IEtkKHIsZSxuKSkpfTt2YXIgdnV0O1AoWWUsIkltbXV0YWJsZUxpc3QiLDE1MiksSSgyMDA2LDE1MixTXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiBLeCh0aGlzLkhkKCkuS2MoKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXoodGhpcy5IZCgpLmJkKGUsbikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZ0aGlzLkhkKCkuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5IZCgpLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBEcCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuSGQoKSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5YYyhlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhkKCkuZGMoKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBLeCh0aGlzLkhkKCkuS2MoKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5IZCgpLmdjKCl9LGwuR2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXoodGhpcy5IZCgpLmJkKGUsbikpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGQoKS5RYyhQdChYbixJZSwxLHRoaXMuSGQoKS5nYygpLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkhkKCkuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5IZCgpKX0sUChZZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUxpc3QiLDIwMDYpLEkoNzE0LDEsTEUpLGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gUHYodGhpcyl9LGwud2M9ZnVuY3Rpb24oZSl7VUModGhpcyxlKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBObnQodGhpcyl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkaXQodGhpcyxlLG4scil9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZCgpfSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy54YyhlKSE9bnVsbH0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5MZCgpLkhjKGUpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6enQodGhpcyl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHF6dCh0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gSmNuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUHYodGhpcykuSGIoKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQUtlKCl9LGwuQmM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBJMG4odGhpcyl9LGwuTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lP3RoaXMuZTp0aGlzLmU9dGhpcy5LZCgpfSxsLmM9bnVsbCxsLmQ9bnVsbCxsLmU9bnVsbDt2YXIgaGdlO1AoWWUsIkltbXV0YWJsZU1hcCIsNzE0KSxJKDcxNSw3MTQsTEUpLGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGZIdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBjR3QodGhpcy5iLGUpfSxsLklkPWZ1bmN0aW9uKCl7cmV0dXJuIEJyZShuZXcgbTkodGhpcykpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIEJyZShiWHQodGhpcy5iKSl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gaGQoKSxuZXcgeHB0KHBYdCh0aGlzLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdUd0KHRoaXMuYixlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gd0ModGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMuZGMoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYi5jKX0sUChZZSwiRm9yd2FyZGluZ0ltbXV0YWJsZU1hcCIsNzE1KSxJKDE5NzQsMTk3MyxGYXQpLGwuQmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NZCgpfSxsLkNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXN8fHRoaXMuTWQoKS5GYihlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLk1kKCkuSGIoKX0sUChZZSwiRm9yd2FyZGluZ1NldCIsMTk3NCksSSgxMDY5LDE5NzQsRmF0LG05KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHg4KHRoaXMuYS5iKX0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB4OCh0aGlzLmEuYil9LGwuSGM9ZnVuY3Rpb24oZSl7aWYoRXQoZSw0MikmJnUoZSw0MikuY2QoKT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIG9HdCh4OCh0aGlzLmEuYiksZSl9Y2F0Y2gobil7aWYobj1XaShuKSxFdChuLDIwNSkpcmV0dXJuITE7dGhyb3cgcnQobil9fSxsLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIHg4KHRoaXMuYS5iKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1RWHQoeDgodGhpcy5hLmIpLGUpLHg4KHRoaXMuYS5iKS5iLmdjKCk8bi5sZW5ndGgmJkppKG4seDgodGhpcy5hLmIpLmIuZ2MoKSxudWxsKSxufSxQKFllLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEiLDEwNjkpLEkoMTk4MSwxOTgwLE1FKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRjR0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gc25lKHRoaXMpfSxQKFllLCJJbW11dGFibGVTZXQiLDE5ODEpLEkoNzAzLDE5ODEsTUUpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gS3gobmV3IEEodGhpcy5hLmIuS2MoKSkpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZwTSh0aGlzLmEsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHNHdCh0aGlzLmEsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hLmIpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gS3gobmV3IEEodGhpcy5hLmIuS2MoKSkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gYUd0KHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyh0aGlzLmEuYil9LFAoWWUsIkZvcndhcmRpbmdJbW11dGFibGVTZXQiLDcwMyksSSgxOTc1LDE5NzQsWmhlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGUih0aGlzKX0sUChZZSwiRm9yd2FyZGluZ1NvcnRlZFNldCIsMTk3NSksSSg1MzMsMTk3OSxMRSxIeiksbC5BYz1mdW5jdGlvbihlKXtWQyh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBRZXQoZXx8KHRoaXMuZD1uZXcgY3godGhpcykpKX0sbC4kYj1mdW5jdGlvbigpe2NJKHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiEhSEModGhpcyxlLFNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gcGVlKHRoaXMsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEdVdCh0aGlzLHRoaXMpfSxsLndjPWZ1bmN0aW9uKGUpe2NRdCh0aGlzLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0NCh0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaZXQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdnEodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUhDKHRoaXMsZSxTcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSksbj8odjQodGhpcyxuKSxuLmU9bnVsbCxuLmM9bnVsbCxuLmkpOm51bGx9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLnBkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBRZXQoZXx8KHRoaXMuZD1uZXcgY3godGhpcykpKX0sbC5mPTAsbC5nPTAsbC5pPTAsUChZZSwiSGFzaEJpTWFwIiw1MzMpLEkoNTM0LDEscmEpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBTWnQodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtpZighU1p0KHRoaXMpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIGU9dGhpcy5jLHRoaXMuYz1lLmMsdGhpcy5mPWUsLS10aGlzLmQsdGhpcy5OZChlKX0sbC5RYj1mdW5jdGlvbigpe2lmKHRoaXMuZS5nIT10aGlzLmIpdGhyb3cgcnQobmV3IGVoKTtuNCghIXRoaXMuZiksdjQodGhpcy5lLHRoaXMuZiksdGhpcy5iPXRoaXMuZS5nLHRoaXMuZj1udWxsfSxsLmI9MCxsLmQ9MCxsLmY9bnVsbCxQKFllLCJIYXNoQmlNYXAvSXRyIiw1MzQpLEkoMTAxMSw1MzQscmEsR1V0KSxsLk5kPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWEh0KHRoaXMsZSl9LFAoWWUsIkhhc2hCaU1hcC8xIiwxMDExKSxJKDEwMTIsMzQ1LE1xLFhIdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuaX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIHI9dGhpcy5hLmkscz1TcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSxzPT10aGlzLmEuZiYmKEd0KGUpPT09R3Qocil8fGUhPW51bGwmJnlpKGUscikpP2U6KCRuZSghR0ModGhpcy5iLmEsZSxzKSxlKSx2NCh0aGlzLmIuYSx0aGlzLmEpLG49bmV3IFhqKHRoaXMuYS5nLHRoaXMuYS5hLGUscyksb0QodGhpcy5iLmEsbix0aGlzLmEpLHRoaXMuYS5lPW51bGwsdGhpcy5hLmM9bnVsbCx0aGlzLmIuYj10aGlzLmIuYS5nLHRoaXMuYi5mPT10aGlzLmEmJih0aGlzLmIuZj1uKSx0aGlzLmE9bixyKX0sUChZZSwiSGFzaEJpTWFwLzEvTWFwRW50cnkiLDEwMTIpLEkoMjM4LDM0NSx7MzQ1OjEsMjM4OjEsMzoxLDQyOjF9LF92KSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuZWQ9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiSW1tdXRhYmxlRW50cnkiLDIzOCksSSgzMTcsMjM4LHszNDU6MSwzMTc6MSwyMzg6MSwzOjEsNDI6MX0sWGopLGwuYT0wLGwuZj0wO3ZhciB3dXQ9UChZZSwiSGFzaEJpTWFwL0JpRW50cnkiLDMxNyk7SSg2MTAsMTk3OSxMRSxjeCksbC5BYz1mdW5jdGlvbihlKXtWQyh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaZXQodGhpcy5hKX0sbC4kYj1mdW5jdGlvbigpe2NJKHRoaXMuYSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHBlZSh0aGlzLmEsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZVdCh0aGlzLHRoaXMuYSl9LGwud2M9ZnVuY3Rpb24oZSl7QXIoZSksY1F0KHRoaXMuYSxuZXcgSkwoZSkpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0eih0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRZXQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZW1uKHRoaXMuYSxlLG4sITEpfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUdDKHRoaXMuYSxlLFNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpKSxuPyh2NCh0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsbi5nKTpudWxsfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxsLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaZXQodGhpcy5hKX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UiLDYxMCksSSgxMDA4LDUzNCxyYSxWVXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRSHQodGhpcyxlKX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UvMSIsMTAwOCksSSgxMDA5LDM0NSxNcSxRSHQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLml9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmd9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBzPXRoaXMuYS5nLG49U3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSksbj09dGhpcy5hLmEmJihHdChlKT09PUd0KHMpfHxlIT1udWxsJiZ5aShlLHMpKT9lOigkbmUoIUhDKHRoaXMuYi5hLmEsZSxuKSxlKSx2NCh0aGlzLmIuYS5hLHRoaXMuYSkscj1uZXcgWGooZSxuLHRoaXMuYS5pLHRoaXMuYS5mKSx0aGlzLmE9cixvRCh0aGlzLmIuYS5hLHIsbnVsbCksdGhpcy5iLmI9dGhpcy5iLmEuYS5nLHMpfSxQKFllLCJIYXNoQmlNYXAvSW52ZXJzZS8xL0ludmVyc2VFbnRyeSIsMTAwOSksSSg2MTEsNTMyLGp1LFFldCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTnF0KHRoaXMuYS5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1HQyh0aGlzLmEuYSxlLFNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpKSxuPyh2NCh0aGlzLmEuYSxuKSwhMCk6ITF9LFAoWWUsIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQiLDYxMSksSSgxMDA3LDUzNCxyYSxOcXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UvSW52ZXJzZUtleVNldC8xIiwxMDA3KSxJKDEwMTAsMSx7fSxKTCksbC5PZD1mdW5jdGlvbihlLG4pe2FLZSh0aGlzLmEsZSxuKX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UvbGFtYmRhJDAkVHlwZSIsMTAxMCksSSg2MDksNTMyLGp1LFpldCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUHF0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49SEModGhpcy5hLGUsU3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSkpLG4/KHY0KHRoaXMuYSxuKSxuLmU9bnVsbCxuLmM9bnVsbCwhMCk6ITF9LFAoWWUsIkhhc2hCaU1hcC9LZXlTZXQiLDYwOSksSSgxMDA2LDUzNCxyYSxQcXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ30sUChZZSwiSGFzaEJpTWFwL0tleVNldC8xIiwxMDA2KSxJKDEwOTMsNjE5LHkyKSxQKFllLCJIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxMDkzKSxJKDI2NSwxMDkzLHkyLEh2KSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4UihRbSh0aGlzLmEpKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgeFIoUW0odGhpcy5hKSl9LGwuYT0yLFAoWWUsIkhhc2hNdWx0aW1hcCIsMjY1KSxJKDE5OTksMTUyLFNfKSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlBkKCkuSGMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmdjKCl9LFAoWWUsIkltbXV0YWJsZUFzTGlzdCIsMTk5OSksSSgxOTMxLDcxNSxMRSksbC5MZD1mdW5jdGlvbigpe3JldHVybiBoZCgpLG5ldyB4eCh0aGlzLmEpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIGhkKCksbmV3IHh4KHRoaXMuYSl9LGwucGQ9ZnVuY3Rpb24oKXtyZXR1cm4gaGQoKSxuZXcgeHgodGhpcy5hKX0sUChZZSwiSW1tdXRhYmxlQmlNYXAiLDE5MzEpLEkoMTk3NywxLHt9KSxQKFllLCJJbW11dGFibGVDb2xsZWN0aW9uL0J1aWxkZXIiLDE5NzcpLEkoMTAyMiw3MDMsTUUsRnF0KSxQKFllLCJJbW11dGFibGVFbnVtU2V0IiwxMDIyKSxJKDk2OSwzODYsQUUsSld0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LFAoWWUsIkltbXV0YWJsZUxpc3QvMSIsOTY5KSxJKDk2OCwxOTc3LHt9LE9XdCksUChZZSwiSW1tdXRhYmxlTGlzdC9CdWlsZGVyIiw5NjgpLEkoNjE0LDE5OCxTRSx0TSksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5jZCgpfSxQKFllLCJJbW11dGFibGVNYXAvMSIsNjE0KSxJKDEwNDEsMSx7fSxqKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDIpLmNkKCl9LFAoWWUsIkltbXV0YWJsZU1hcC8ybWV0aG9kcmVmJGdldEtleSRUeXBlIiwxMDQxKSxJKDEwNDAsMSx7fSxOV3QpLFAoWWUsIkltbXV0YWJsZU1hcC9CdWlsZGVyIiwxMDQwKSxJKDJlMywxOTgxLE1FKSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UHYodGhpcy5hKS5FZCgpLG5ldyB0TShlKX0sbC5EZD1mdW5jdGlvbigpe3JldHVybiBuZXcga3B0KHRoaXMpfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKEFyKGUpLHI9dGhpcy5nYygpLG49MDtuPHI7bisrKWUudGQodShld3QoUHYodGhpcy5hKSkuWGIobiksNDIpLmNkKCkpfSxsLkVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5jLGV8fCh0aGlzLmM9bmV3IGtwdCh0aGlzKSkpLkVkKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gX250KHRoaXMuZ2MoKSwxMjk2LG5ldyBpdHQodGhpcykpfSxQKFllLCJJbmRleGVkSW1tdXRhYmxlU2V0IiwyZTMpLEkoMTE4MCwyZTMsTUUsenp0KSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UHYodGhpcy5hKS5FZCgpLG5ldyB0TShlKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLFVDKHRoaXMuYSxuZXcgcnR0KGUpKX0sbC5FZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVB2KHRoaXMuYSkuRWQoKSxuZXcgdE0oZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gVk0oUHYodGhpcy5hKS5OYygpLG5ldyBqKX0sUChZZSwiSW1tdXRhYmxlTWFwS2V5U2V0IiwxMTgwKSxJKDExODEsMSx7fSxydHQpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtoZCgpLHRoaXMuYS50ZChlKX0sUChZZSwiSW1tdXRhYmxlTWFwS2V5U2V0L2xhbWJkYSQwJFR5cGUiLDExODEpLEkoMTE3OCwxOTgwLEl4dCxxenQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVudCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmcTFuKG5ldyBFbnQodGhpcyksZSl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVudCh0aGlzKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBWTShQdih0aGlzLmEpLk5jKCksbmV3IFIpfSxQKFllLCJJbW11dGFibGVNYXBWYWx1ZXMiLDExNzgpLEkoMTE3OSwxLHt9LFIpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sUChZZSwiSW1tdXRhYmxlTWFwVmFsdWVzLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTE3OSksSSg2MjYsMTk4LFNFLEVudCksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5kZCgpfSxQKFllLCJJbW11dGFibGVNYXBWYWx1ZXMvMSIsNjI2KSxJKDExODIsMSx7fSxpdHQpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFJZdCh0aGlzLmEsZSl9LFAoWWUsIkluZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZSIsMTE4MiksSSg3NTIsMTk5OSxTXyxrcHQpLGwuUGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBSWXQodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9LFAoWWUsIkluZGV4ZWRJbW11dGFibGVTZXQvMSIsNzUyKSxJKDQ0LDEse30seiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIwKS5LYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUChZZSwiSXRlcmFibGVzLzEwIiw0NCksSSgxMDQyLDUzNyx0MCxqS3QpLGwuSmM9ZnVuY3Rpb24oZSl7QXIoZSksdGhpcy5iLkpjKG5ldyBaSHQodGhpcy5hLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBpMnQodGhpcyl9LFAoWWUsIkl0ZXJhYmxlcy80IiwxMDQyKSxJKDEwNDMsMSxVbixaSHQpLGwudGQ9ZnVuY3Rpb24oZSl7U1llKHRoaXMuYix0aGlzLmEsZSl9LFAoWWUsIkl0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUiLDEwNDMpLEkoMTA0NCw1MzcsdDAsJEt0KSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLHZhKHRoaXMuYSxuZXcgS0h0KGUsdGhpcy5iKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbHIobmV3IGVyKHRoaXMuYSksdGhpcy5iKX0sUChZZSwiSXRlcmFibGVzLzUiLDEwNDQpLEkoMTA0NSwxLFVuLEtIdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQobFV0KGUpKX0sUChZZSwiSXRlcmFibGVzLzUvbGFtYmRhJDAkVHlwZSIsMTA0NSksSSgxMDcxLDE5OCxTRSxzdHQpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlBiKCl9LFAoWWUsIkl0ZXJhdG9ycy8xIiwxMDcxKSxJKDEwNzIsNjk5LFNFLFlIdCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTt0aGlzLmIuT2IoKTspaWYoZT10aGlzLmIuUGIoKSx0aGlzLmEuTGIoZSkpcmV0dXJuIGU7cmV0dXJuIHRoaXMuZT0yLG51bGx9LFAoWWUsIkl0ZXJhdG9ycy81IiwxMDcyKSxJKDQ4NywxLHJhKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5RZCh0aGlzLmIuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmIuUWIoKX0sUChZZSwiVHJhbnNmb3JtZWRJdGVyYXRvciIsNDg3KSxJKDEwNzMsNDg3LHJhLFVVdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLktiKGUpfSxQKFllLCJJdGVyYXRvcnMvNiIsMTA3MyksSSg3MTcsMTk4LFNFLFVCKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYX0sbC5QYj1mdW5jdGlvbigpe2lmKHRoaXMuYSl0aHJvdyBydChuZXcgbGMpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5ifSxsLmE9ITEsUChZZSwiSXRlcmF0b3JzLzkiLDcxNyksSSgxMDcwLDM4NixBRSx1WXQpLGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYVt0aGlzLmIrZV19LGwuYj0wO3ZhciBmZ2U7UChZZSwiSXRlcmF0b3JzL0FycmF5SXRyIiwxMDcwKSxJKDM5LDEsezM5OjEsNDc6MX0sYXIpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB6cih0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBMcih0aGlzKX0sbC5RYj1mdW5jdGlvbigpe240KCEhdGhpcy5jKSx0aGlzLmMuUWIoKSx0aGlzLmM9bnVsbH0sUChZZSwiSXRlcmF0b3JzL0NvbmNhdGVuYXRlZEl0ZXJhdG9yIiwzOSksSSgyMiwxLHszOjEsMzU6MSwyMjoxfSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gJHF0KHRoaXMsdShlLDIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEl2KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHNudCh0aGlzKX0sbC5nPTA7dmFyIEhyPVAoWG8sIkVudW0iLDIyKTtJKDUzOCwyMix7NTM4OjEsMzoxLDM1OjEsMjI6MSw0NzoxfSxYVXQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IGxjKX0sbC5RYj1mdW5jdGlvbigpe240KCExKX07dmFyIG11dCxkZ2U9anIoWWUsIkl0ZXJhdG9ycy9FbXB0eU1vZGlmaWFibGVJdGVyYXRvciIsNTM4LEhyLHhlbixuUWUpLGdnZTtJKDE4MzQsNjE5LHkyKSxQKFllLCJMaW5rZWRIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxODM0KSxJKDE4MzUsMTgzNCx5MixTcmUpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG5udChRbSh0aGlzLmIpKX0sbC4kYj1mdW5jdGlvbigpe1EkKHRoaXMpLGNNKHRoaXMuYSx0aGlzLmEpfSxsLmdkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBubnQoUW0odGhpcy5iKSl9LGwuaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmcmUodGhpcyxlLHRoaXMuYil9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHkydCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBuZXcgX24oKGU9dGhpcy5nLHUoZXx8KHRoaXMuZz1uZXcgenB0KHRoaXMpKSwyMSkpLDE3KX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSxlfHwodGhpcy5pPW5ldyBXMyh0aGlzLHRoaXMuYykpfSxsLm5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVcHQobmV3IHkydCh0aGlzKSl9LGwub2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gVk0obmV3IF9uKChlPXRoaXMuZyx1KGV8fCh0aGlzLmc9bmV3IHpwdCh0aGlzKSksMjEpKSwxNyksbmV3IEspfSxsLmI9MixQKFllLCJMaW5rZWRIYXNoTXVsdGltYXAiLDE4MzUpLEkoMTgzOCwxLHt9LEspLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sUChZZSwiTGlua2VkSGFzaE11bHRpbWFwLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTgzOCksSSg4MjQsMSxyYSx5MnQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB6YW4odGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hIT10aGlzLmIuYX0sbC5RYj1mdW5jdGlvbigpe240KCEhdGhpcy5jKSxpWnQodGhpcy5iLHRoaXMuYy5nLHRoaXMuYy5pKSx0aGlzLmM9bnVsbH0sUChZZSwiTGlua2VkSGFzaE11bHRpbWFwLzEiLDgyNCksSSgzMzAsMjM4LHszNDU6MSwyMzg6MSwzMzA6MSwyMDIwOjEsMzoxLDQyOjF9LGt3dCksbC5SZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuU2Q9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuVGQ9ZnVuY3Rpb24oZSl7dGhpcy5mPWV9LGwuZD0wO3ZhciBwZ2U9UChZZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlRW50cnkiLDMzMCk7SSgxODM2LDE5NzAsezIwMjA6MSwyMDoxLDI4OjEsMTQ6MSwyMToxfSxmcmUpLGwuRmM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtmb3IoaD1TcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSxuPWgmdGhpcy5iLmxlbmd0aC0xLG89dGhpcy5iW25dLHI9bztyO3I9ci5hKWlmKHIuZD09aCYmZmQoci5pLGUpKXJldHVybiExO3JldHVybiBzPW5ldyBrd3QodGhpcy5jLGUsaCxvKSxLcXQodGhpcy5kLHMpLHMuZj10aGlzLHRoaXMuZD1zLGNNKHRoaXMuZy5hLmIscyksY00ocyx0aGlzLmcuYSksdGhpcy5iW25dPXMsKyt0aGlzLmYsKyt0aGlzLmUsajFuKHRoaXMpLCEwfSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGUsbjtmb3IoeU0odGhpcy5iLG51bGwpLHRoaXMuZj0wLGU9dGhpcy5hO2UhPXRoaXM7ZT1lLlJkKCkpbj11KGUsMzMwKSxjTShuLmIsbi5lKTt0aGlzLmE9dGhpcyx0aGlzLmQ9dGhpcywrK3RoaXMuZX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPVNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpLG49dGhpcy5iW3ImdGhpcy5iLmxlbmd0aC0xXTtuO249bi5hKWlmKG4uZD09ciYmZmQobi5pLGUpKXJldHVybiEwO3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihBcihlKSxuPXRoaXMuYTtuIT10aGlzO249bi5SZCgpKWUudGQodShuLDMzMCkuaSl9LGwuUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpWHQodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVjZSh0aGlzLGUpfSxsLlNkPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfSxsLlRkPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5lPTAsbC5mPTAsUChZZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlU2V0IiwxODM2KSxJKDE4MzcsMSxyYSxpWHQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBHdnQodGhpcyksdGhpcy5iIT10aGlzLmN9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKEd2dCh0aGlzKSx0aGlzLmI9PXRoaXMuYyl0aHJvdyBydChuZXcgbGMpO3JldHVybiBlPXUodGhpcy5iLDMzMCksbj1lLmksdGhpcy5kPWUsdGhpcy5iPWUuZixufSxsLlFiPWZ1bmN0aW9uKCl7R3Z0KHRoaXMpLG40KCEhdGhpcy5kKSxlY2UodGhpcy5jLHRoaXMuZC5pKSx0aGlzLmE9dGhpcy5jLmUsdGhpcy5kPW51bGx9LGwuYT0wLFAoWWUsIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldC8xIiwxODM3KSxJKDc2NiwxOTg2LHkyLFhWdCksbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPW5ldyB3YnQodGhpcykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFaXQodGhpcyxlKX0sbC5jYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhldCh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiBlbXQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3FZdCh0aGlzKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gbEd0KHRoaXMsZSl9LGwuYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdidCh0aGlzKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcHR0KHRoaXMpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGV0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiBlbXQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuYz0wLGwuZD0wLFAoWWUsIkxpbmtlZExpc3RNdWx0aW1hcCIsNzY2KSxJKDUyLDI4LElFKSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IHlnKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuVmModGhpcy5nYygpLGUpLCEwfSxsLldjPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO2ZvcihPbihuKSxyPSExLG89bi5LYygpO28uT2IoKTspcz1vLlBiKCksdGhpcy5WYyhlKysscykscj0hMDtyZXR1cm4gcn0sbC4kYj1mdW5jdGlvbigpe3RoaXMuVWQoMCx0aGlzLmdjKCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBwNXQodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBTeXQodGhpcyl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJlZSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmeCh0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlpjKDApfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGEodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgeWcoIlJlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCIpKX0sbC5VZD1mdW5jdGlvbihlLG4pe3ZhciByLHM7Zm9yKHM9dGhpcy5aYyhlKSxyPWU7cjxuOysrcilzLlBiKCkscy5RYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IHlnKCJTZXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IEtkKHRoaXMsZSxuKX0sbC5qPTAsUChwciwiQWJzdHJhY3RMaXN0Iiw1MiksSSgxOTY0LDUyLElFKSxsLlZjPWZ1bmN0aW9uKGUsbil7aDgodGhpcyxlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGdyZSh0aGlzLGUsbil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFFmKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aYygwKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4geXN0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3I9dGhpcy5aYyhlKTt0cnl7cmV0dXJuIHM9ci5QYigpLHIuV2Iobiksc31jYXRjaChvKXt0aHJvdyBvPVdpKG8pLEV0KG8sMTA5KT9ydChuZXcgbW8oIkNhbid0IHNldCBlbGVtZW50ICIrZSkpOnJ0KG8pfX0sUChwciwiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsMTk2NCksSSg2MzYsMTk2NCxJRSxoZXQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRXdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dShKbih0aGlzLmEuYix0aGlzLmIpLDI4MyksZT9lLmE6MH0sUChZZSwiTGlua2VkTGlzdE11bHRpbWFwLzEiLDYzNiksSSgxMjk3LDE5NzAsanUscHR0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBsR3QodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0bmUodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4hZW10KHRoaXMuYSxlKS5hLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gJDkodGhpcy5hLmIpfSxQKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwiLDEyOTcpLEkoMTI5NiwxLHJhLHRuZSksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEh2dCh0aGlzKSwhIXRoaXMuY30sbC5QYj1mdW5jdGlvbigpe0h2dCh0aGlzKSxFMnQodGhpcy5jKSx0aGlzLmE9dGhpcy5jLE5zKHRoaXMuZCx0aGlzLmEuYSk7ZG8gdGhpcy5jPXRoaXMuYy5iO3doaWxlKHRoaXMuYyYmIU5zKHRoaXMuZCx0aGlzLmMuYSkpO3JldHVybiB0aGlzLmEuYX0sbC5RYj1mdW5jdGlvbigpe0h2dCh0aGlzKSxuNCghIXRoaXMuYSksT2oobmV3IFZydCh0aGlzLmUsdGhpcy5hLmEpKSx0aGlzLmE9bnVsbCx0aGlzLmI9dGhpcy5lLmN9LGwuYj0wLFAoWWUsIkxpbmtlZExpc3RNdWx0aW1hcC9EaXN0aW5jdEtleUl0ZXJhdG9yIiwxMjk2KSxJKDI4MywxLHsyODM6MX0sSXd0KSxsLmE9MCxQKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvS2V5TGlzdCIsMjgzKSxJKDEyOTUsMzQ1LE1xLEpIdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuZix0aGlzLmY9ZSxufSxQKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvTm9kZSIsMTI5NSksSSg1NjAsMSxKZCxWcnQsS2FlKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhpcy5lPUc1dCh0aGlzLmYsdGhpcy5iLGUsdGhpcy5jKSwrK3RoaXMuZCx0aGlzLmE9bnVsbH0sbC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmV9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gQnd0KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB5UXQodGhpcyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLTF9LGwuUWI9ZnVuY3Rpb24oKXtuNCghIXRoaXMuYSksdGhpcy5hIT10aGlzLmM/KHRoaXMuZT10aGlzLmEuZSwtLXRoaXMuZCk6dGhpcy5jPXRoaXMuYS5jLEdnbih0aGlzLmYsdGhpcy5hKSx0aGlzLmE9bnVsbH0sbC5XYj1mdW5jdGlvbihlKXtrMnQoISF0aGlzLmEpLHRoaXMuYS5mPWV9LGwuZD0wLFAoWWUsIkxpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yIiw1NjApLEkoMTAxOCw1MixJRSksbC5WYz1mdW5jdGlvbihlLG4pe3RoaXMuYS5WYyhlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5XYyhlLG4pfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSGMoZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5YYihlKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLiRjKGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxQKFllLCJMaXN0cy9BYnN0cmFjdExpc3RXcmFwcGVyIiwxMDE4KSxJKDEwMTksMTAxOCx0ZmUpLFAoWWUsIkxpc3RzL1JhbmRvbUFjY2Vzc0xpc3RXcmFwcGVyIiwxMDE5KSxJKDEwMjEsMTAxOSx0ZmUsaUd0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWmMoZSl9LFAoWWUsIkxpc3RzLzEiLDEwMjEpLEkoMTMxLDUyLHsxMzE6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LE1tKSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhpcy5hLlZjKHY4KHRoaXMsZSksbil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhiKGJ3dCh0aGlzLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB6d3QodGhpcywwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gend0KHRoaXMsZSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS4kYyhid3QodGhpcyxlKSl9LGwuVWQ9ZnVuY3Rpb24oZSxuKXsoaFp0KGUsbix0aGlzLmEuZ2MoKSksYTIodGhpcy5hLmJkKHY4KHRoaXMsbiksdjgodGhpcyxlKSkpKS4kYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhid3QodGhpcyxlKSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBoWnQoZSxuLHRoaXMuYS5nYygpKSxhMih0aGlzLmEuYmQodjgodGhpcyxuKSx2OCh0aGlzLGUpKSl9LFAoWWUsIkxpc3RzL1JldmVyc2VMaXN0IiwxMzEpLEkoMjgwLDEzMSx7MTMxOjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LG12KSxQKFllLCJMaXN0cy9SYW5kb21BY2Nlc3NSZXZlcnNlTGlzdCIsMjgwKSxJKDEwMjAsMSxKZCx0R3QpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aGlzLmMuUmIoZSksdGhpcy5jLlViKCksdGhpcy5hPSExfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5TYigpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGdKdCh0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB2OCh0aGlzLmIsdGhpcy5jLlRiKCkpfSxsLlViPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYy5PYigpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIHRoaXMuYT0hMCx0aGlzLmMuUGIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB2OCh0aGlzLmIsdGhpcy5jLlRiKCkpLTF9LGwuUWI9ZnVuY3Rpb24oKXtuNCh0aGlzLmEpLHRoaXMuYy5RYigpLHRoaXMuYT0hMX0sbC5XYj1mdW5jdGlvbihlKXtrMnQodGhpcy5hKSx0aGlzLmMuV2IoZSl9LGwuYT0hMSxQKFllLCJMaXN0cy9SZXZlcnNlTGlzdC8xIiwxMDIwKSxJKDQzMiw0ODcscmEsRDkpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFBSKGUpfSxQKFllLCJNYXBzLzEiLDQzMiksSSg2OTgsNDg3LHJhLFVwdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQyKS5kZCgpfSxQKFllLCJNYXBzLzIiLDY5OCksSSg5NjIsNDg3LHJhLEpVdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IF92KGUsZVV0KHRoaXMuYSxlKSl9LFAoWWUsIk1hcHMvMyIsOTYyKSxJKDk1OSwxOTcxLGp1LHV4KSxsLkpjPWZ1bmN0aW9uKGUpe2hLZSh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmtjKCl9LGwuUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5sYygpfSxQKFllLCJNYXBzL0l0ZXJhdG9yQmFzZWRBYnN0cmFjdE1hcC8xIiw5NTkpLEkoOTYwLDEse30sZ3R0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKGUpfSxQKFllLCJNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlIiw5NjApLEkoOTU4LDI4LHd5LHJHdCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuSmM9ZnVuY3Rpb24oZSl7QXIoZSksdGhpcy5hLndjKG5ldyBjdHQoZSkpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVcHQodGhpcy5hLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG4scjt0cnl7cmV0dXJuIHJ5KHRoaXMsZSwhMCl9Y2F0Y2gocyl7aWYocz1XaShzKSxFdChzLDQxKSl7Zm9yKHI9dGhpcy5hLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNDIpLGZkKGUsbi5kZCgpKSlyZXR1cm4gdGhpcy5hLkJjKG4uY2QoKSksITA7cmV0dXJuITF9ZWxzZSB0aHJvdyBydChzKX19LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LFAoWWUsIk1hcHMvVmFsdWVzIiw5NTgpLEkoOTYxLDEse30sY3R0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKG4pfSxQKFllLCJNYXBzL1ZhbHVlcy9sYW1iZGEkMCRUeXBlIiw5NjEpLEkoNzM2LDE5ODcsYncsd2J0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/dGhpcy5hLmNjKGUpOm51bGx9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKT90aGlzLmEuZmMoZSk6bnVsbH0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSl9LGwuRWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG90dCh0aGlzKX0sbC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX0sUChZZSwiTXVsdGltYXBzL0FzTWFwIiw3MzYpLEkoMTEwNCwxOTcxLGp1LG90dCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBBWGUodGhpcy5hLmEuZWMoKSxuZXcgdXR0KHRoaXMpKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGZpZSh0aGlzLGUpPyhuPXUoZSw0MiksTEtlKHRoaXMuYSxuLmNkKCkpLCEwKTohMX0sUChZZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0IiwxMTA0KSxJKDExMDgsMSx7fSx1dHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGVVdCh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUChZZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0LzEiLDExMDgpLEkoNTQzLDE5ODksezU0MzoxLDgzNToxLDIwOjEsMjg6MSwxNDoxfSxsdHQpLGwuJGI9ZnVuY3Rpb24oKXtRJCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBoSHQodGhpcy5hLGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLHZhKFNDKHRoaXMuYSksbmV3IGZ0dChlKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEQ5KFNDKHRoaXMuYSkuYS5rYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBWTShTQyh0aGlzLmEpLk5jKCksbmV3IGl0KX0sUChZZSwiTXVsdGltYXBzL0tleXMiLDU0MyksSSgxMTA2LDEse30saXQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuY2QoKX0sUChZZSwiTXVsdGltYXBzL0tleXMvMG1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTEwNiksSSgxMTA1LDQ4NyxyYSxCcXQpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBodHQodShlLDQyKSl9LFAoWWUsIk11bHRpbWFwcy9LZXlzLzEiLDExMDUpLEkoMTk5MCwxLHs0MTY6MX0pLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDkyKT8obj11KGUsNDE2KSx1KHRoaXMuYS5kZCgpLDE0KS5nYygpPT11KG4uYS5kZCgpLDE0KS5nYygpJiZmZCh0aGlzLmEuY2QoKSxuLmEuY2QoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5hLmNkKCksKGU9PW51bGw/MDpIaShlKSledSh0aGlzLmEuZGQoKSwxNCkuZ2MoKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49ZEModGhpcy5hLmNkKCkpLGU9dSh0aGlzLmEuZGQoKSwxNCkuZ2MoKSxlPT0xP246bisiIHggIitlfSxQKFllLCJNdWx0aXNldHMvQWJzdHJhY3RFbnRyeSIsMTk5MCksSSg0OTIsMTk5MCx7NDkyOjEsNDE2OjF9LGh0dCksUChZZSwiTXVsdGltYXBzL0tleXMvMS8xIiw0OTIpLEkoMTEwNywxLFVuLGZ0dCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodShlLDQyKS5jZCgpKX0sUChZZSwiTXVsdGltYXBzL0tleXMvbGFtYmRhJDEkVHlwZSIsMTEwNyksSSgxMTEwLDEsVW4sc3QpLGwudGQ9ZnVuY3Rpb24oZSl7THRuKHUoZSw0MTYpKX0sUChZZSwiTXVsdGlzZXQvbGFtYmRhJDAkVHlwZSIsMTExMCksSSg3MzcsMSxVbixkdHQpLGwudGQ9ZnVuY3Rpb24oZSl7VWFuKHRoaXMuYSx1KGUsNDE2KSl9LFAoWWUsIk11bHRpc2V0L2xhbWJkYSQxJFR5cGUiLDczNyksSSgxMTExLDEse30saHQpLFAoWWUsIk11bHRpc2V0cy8wbWV0aG9kcmVmJGFkZCRUeXBlIiwxMTExKSxJKDczOCwxLHt9LHd0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGaW4odShlLDQxNikpfSxQKFllLCJNdWx0aXNldHMvbGFtYmRhJDMkVHlwZSIsNzM4KSxJKDIwMDgsMSxfRCksUChZZSwiUmFuZ2VHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwyMDA4KSxJKDUxNCwyMDA4LHsxNjk6MSw1MTQ6MSwzOjEsNDU6MX0sTjN0KSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBDWXQodGhpcyx1KGUsMzUpKX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gQ1l0KHRoaXMsdShlLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNTE0KT8obj11KGUsNTE0KSxUM3QodGhpcy5hLG4uYSkmJlQzdCh0aGlzLmIsbi5iKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCkqMzErdGhpcy5iLkhiKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gT1p0KHRoaXMuYSx0aGlzLmIpfSxQKFllLCJSYW5nZSIsNTE0KSxJKDc3OCwxOTk5LFNfLEZZdCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gTzJ0KHRoaXMuYixlKX0sbC5QZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIERwKHRoaXMuYixlKX0sbC5GZD1mdW5jdGlvbihlKXtyZXR1cm4gTzJ0KHRoaXMuYixlKX0sUChZZSwiUmVndWxhckltbXV0YWJsZUFzTGlzdCIsNzc4KSxJKDY0NiwyMDA2LFNfLG9ydCksbC5IZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LFAoWWUsIlJlZ3VsYXJJbW11dGFibGVMaXN0Iiw2NDYpLEkoNjE2LDcxNSxMRSxadHQpLFAoWWUsIlJlZ3VsYXJJbW11dGFibGVNYXAiLDYxNiksSSg3MTYsNzAzLE1FLHlidCk7dmFyIEs4dDtQKFllLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MTYpLEkoMTk3NixOMSxqdSksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQ3d0KHRoaXMuYSx0aGlzLmIpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiU2V0cy9TZXRWaWV3IiwxOTc2KSxJKDk2MywxOTc2LGp1LGVHdCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQ3d0KHRoaXMuYSx0aGlzLmIpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBNbnQodGhpcy5hLGUpJiZ0aGlzLmIuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIElJKHRoaXMuYSxlKSYmdGhpcy5iLkljKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFFpZSh0aGlzLmIsdGhpcy5hKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5hLDEpKSxuZXcga2godGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gQUkodGhpcyl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gUmkobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYSwxKSksbmV3IHprKHRoaXMuYikpfSxQKFllLCJTZXRzLzIiLDk2MyksSSg3MDAsNjk5LFNFLEN3dCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTtjMnQodGhpcy5hKTspaWYoZT1GQyh0aGlzLmEpLHRoaXMuYy5IYyhlKSlyZXR1cm4gZTtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sUChZZSwiU2V0cy8yLzEiLDcwMCksSSg5NjQsMSx1aSx6ayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkhjKGUpfSxQKFllLCJTZXRzLzIvNG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NjQpLEkoOTY1LDEsdWksa2gpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5IYyhlKX0sUChZZSwiU2V0cy8yLzVtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTY1KSxJKDYwNywxOTc1LHs2MDc6MSwzOjEsMjA6MSwxNDoxLDI3MToxLDIxOjEsODQ6MX0sblF0KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkpjPWZ1bmN0aW9uKGUpe3RoaXMuYS5KYyhlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sUChZZSwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYwNyksSSgxOTMyLDE5MzEsTEUsbFh0KSxsLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIGhkKCksbmV3IHh4KHRoaXMuYSl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gaGQoKSxuZXcgeHgodGhpcy5hKX0sbC5wZD1mdW5jdGlvbigpe3JldHVybiBoZCgpLG5ldyB4eCh0aGlzLmEpfSxQKFllLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMTkzMiksSSg2NDcsMjAwNixTXyxTbnQpLGwuSGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKFllLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NDcpLEkoMzUwLDE5ODEsTUUseHgpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVCKHRoaXMuYSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHlpKHRoaXMuYSxlKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBuZXcgVUIodGhpcy5hKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxQKFllLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM1MCksSSgxMTE1LDEse30sWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE2NCl9LFAoWWUsIlN0cmVhbXMvbGFtYmRhJDAkVHlwZSIsMTExNSksSSgxMTE2LDEsT3EsYnR0KSxsLlZkPWZ1bmN0aW9uKCl7U3NuKHRoaXMuYSl9LFAoWWUsIlN0cmVhbXMvbGFtYmRhJDEkVHlwZSIsMTExNiksSSgxNjU5LDE2NTgseTIsS1h0KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPUV0KHRoaXMuYywxNzEpP25ldyB5aih0aGlzLHUodGhpcy5jLDE3MSkpOkV0KHRoaXMuYywxNjEpP25ldyBSTSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBuOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTHAodGhpcy5iKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTHAodGhpcy5iKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1FdCh0aGlzLmMsMTcxKT9uZXcgZTgodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgZ00odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgVzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBFdCh0aGlzLmMsMTcxKT9uZXcgeWoodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgUk0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgbjgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsJiZ0aGlzLmEudWUoZSxlKSxuZXcgTHAodGhpcy5iKX0sUChZZSwiVHJlZU11bHRpbWFwIiwxNjU5KSxJKDc4LDEsezM6MSw3ODoxfSksbC5XZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEVycm9yKGUpfSxsLlhkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5ZZD1mdW5jdGlvbigpe3JldHVybiAkbG4ocHUoJG50KCh0aGlzLms9PW51bGwmJih0aGlzLms9UHQoeXV0LHRlLDc4LDAsMCwxKSksdGhpcy5rKSksbmV3IGtlKSl9LGwuWmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5fZD1mdW5jdGlvbigpe2JLZSh0aGlzLHlpbih0aGlzLldkKGNydCh0aGlzLHRoaXMuZykpKSksSHp0KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGNydCh0aGlzLHRoaXMuJGQoKSl9LGwuZT1lZmUsbC5pPSExLGwubj0hMDt2YXIgeXV0PVAoWG8sIlRocm93YWJsZSIsNzgpO0koMTAyLDc4LHszOjEsMTAyOjEsNzg6MX0pLFAoWG8sIkV4Y2VwdGlvbiIsMTAyKSxJKDYwLDEwMixVMCxWYixHbyksUChYbywiUnVudGltZUV4Y2VwdGlvbiIsNjApLEkoNTk4LDYwLFUwKSxQKFhvLCJKc0V4Y2VwdGlvbiIsNTk4KSxJKDg2Myw1OTgsVTApLFAoTUQsIkphdmFTY3JpcHRFeGNlcHRpb25CYXNlIiw4NjMpLEkoNDc3LDg2Myx7NDc3OjEsMzoxLDEwMjoxLDYwOjEsNzg6MX0sX3JlKSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIHVkbih0aGlzKSx0aGlzLmN9LGwuYWU9ZnVuY3Rpb24oKXtyZXR1cm4gR3QodGhpcy5iKT09PUd0KFk4dCk/bnVsbDp0aGlzLmJ9O3ZhciBZOHQ7UChPeHQsIkphdmFTY3JpcHRFeGNlcHRpb24iLDQ3Nyk7dmFyIGJnZT1QKE94dCwiSmF2YVNjcmlwdE9iamVjdCQiLDApLHh1dDtJKDE5NDgsMSx7fSksUChPeHQsIlNjaGVkdWxlciIsMTk0OCk7dmFyIHpIPTAsdmdlPTAscUg9LTE7SSg4OTAsMTk0OCx7fSxwdCk7dmFyIFg4dDtQKE1ELCJTY2hlZHVsZXJJbXBsIiw4OTApO3ZhciBrdXQ7SSgxOTYwLDEse30pLFAoTUQsIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3RvciIsMTk2MCksSSg4NjQsMTk2MCx7fSxVKSxsLmJlPWZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9W107ZVtqYXRdPXI7Zm9yKHZhciBzPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO3M7KXt2YXIgbz0oVDgoKSxzLm5hbWV8fChzLm5hbWU9Y29uKHMudG9TdHJpbmcoKSkpKTtyLnB1c2gobyk7dmFyIGg9IjoiK28sZD1uW2hdO2lmKGQpe3ZhciB3LGs7Zm9yKHc9MCxrPWQubGVuZ3RoO3c8azt3KyspaWYoZFt3XT09PXMpcmV0dXJufShkfHwobltoXT1bXSkpLnB1c2gocykscz1zLmNhbGxlcn19LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9KFQ4KCksZSYmZVtqYXRdP2VbamF0XTpbXSkscj1zLmxlbmd0aCxvPVB0KGxFdCx0ZSwzMTAsciwwLDEpLG49MDtuPHI7bisrKW9bbl09bmV3IEpudChzW25dLG51bGwsLTEpO3JldHVybiBvfSxQKE1ELCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3kiLDg2NCksSSgxOTYxLDE5NjAse30pLGwuYmU9ZnVuY3Rpb24oZSl7fSxsLmRlPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBuZXcgSm50KG4sZSsiQCIrcyxyPDA/LTE6cil9LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkO2lmKG89UGZuKGUpLGg9UHQobEV0LHRlLDMxMCwwLDAsMSksbj0wLHM9by5sZW5ndGgscz09MClyZXR1cm4gaDtmb3IoZD1CbGUodGhpcyxvWzBdKSxobihkLmQsUmF0KXx8KGhbbisrXT1kKSxyPTE7cjxzO3IrKyloW24rK109QmxlKHRoaXMsb1tyXSk7cmV0dXJuIGh9LFAoTUQsIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybiIsMTk2MSksSSg4NjUsMTk2MSx7fSxidCksbC5kZT1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gbmV3IEpudChuLGUsLTEpfSxQKE1ELCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCIsODY1KSxJKDEwNTAsMSx7fSksUChQeHQsaWZlLDEwNTApLEkoNjE1LDEwNTAsezYxNToxfSxaWXQpO3ZhciBROHQ7UChpb3QsaWZlLDYxNSksSSgyMDAxLDEse30pLFAoUHh0LHNmZSwyMDAxKSxJKDIwMDIsMjAwMSx7fSksUChpb3Qsc2ZlLDIwMDIpLEkoMTA5MCwxLHt9LG10KTt2YXIgc1M7UChpb3QsIkxvY2FsZUluZm8iLDEwOTApLEkoMTkxOCwxLHt9LHl0KSxsLmE9MCxQKGlvdCwiVGltZVpvbmUiLDE5MTgpLEkoMTI1OCwyMDAyLHt9LHV0KSxQKCJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5pbXBsLmNsZHIiLCJEYXRlVGltZUZvcm1hdEluZm9JbXBsIiwxMjU4KSxJKDQzNCwxLHs0MzQ6MX0sQUt0KSxsLmE9ITEsbC5iPTAsUChQeHQsIkRhdGVUaW1lRm9ybWF0L1BhdHRlcm5QYXJ0Iiw0MzQpLEkoMTk5LDEsYWZlLF9SLEV5dCxIMnQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHZpbih0aGlzLHUoZSwxOTkpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTkpJiZBdihrdSh0aGlzLnEuZ2V0VGltZSgpKSxrdSh1KGUsMTk5KS5xLmdldFRpbWUoKSkpfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9a3UodGhpcy5xLmdldFRpbWUoKSksU3IoeXJ0KGUsem0oZSwzMikpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gcj0tdGhpcy5xLmdldFRpbWV6b25lT2Zmc2V0KCksZT0ocj49MD8iKyI6IiIpKyhyLzYwfDApLG49cmooYi5NYXRoLmFicyhyKSU2MCksKHZhZSgpLFNnZSlbdGhpcy5xLmdldERheSgpXSsiICIrQWdlW3RoaXMucS5nZXRNb250aCgpXSsiICIrcmoodGhpcy5xLmdldERhdGUoKSkrIiAiK3JqKHRoaXMucS5nZXRIb3VycygpKSsiOiIrcmoodGhpcy5xLmdldE1pbnV0ZXMoKSkrIjoiK3JqKHRoaXMucS5nZXRTZWNvbmRzKCkpKyIgR01UIitlK24rIiAiK3RoaXMucS5nZXRGdWxsWWVhcigpfTt2YXIgSEg9UChwciwiRGF0ZSIsMTk5KTtJKDE5MTUsMTk5LGFmZSxHc2UpLGwuYT0hMSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MCxsLmc9ITEsbC5pPTAsbC5qPTAsbC5rPTAsbC5uPTAsbC5vPTAsbC5wPTAsUCgiY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQuaW1wbCIsIkRhdGVSZWNvcmQiLDE5MTUpLEkoMTk2NiwxLHt9KSxsLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5oZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuamU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sUChoNiwiSlNPTlZhbHVlIiwxOTY2KSxJKDIxNiwxOTY2LHsyMTY6MX0sYmcsbHgpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMjE2KT9Id3QodGhpcy5hLHUoZSwyMTYpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFhXZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBNd3QodGhpcy5hKX0sbC5mZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihyPW5ldyBJbCgiWyIpLG49MCxlPXRoaXMuYS5sZW5ndGg7bjxlO24rKyluPjAmJihyLmErPSIsIiksaGMocixYbSh0aGlzLG4pKTtyZXR1cm4gci5hKz0iXSIsci5hfSxQKGg2LCJKU09OQXJyYXkiLDIxNiksSSg0ODMsMTk2Nix7NDgzOjF9LHFrKSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFFXZX0sbC5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEZuKCksIiIrdGhpcy5hfSxsLmE9ITE7dmFyIHdnZSxtZ2U7UChoNiwiSlNPTkJvb2xlYW4iLDQ4MyksSSg5ODUsNjAsVTAsUnF0KSxQKGg2LCJKU09ORXhjZXB0aW9uIiw5ODUpLEkoMTAyMywxOTY2LHt9LGR0KSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5LZX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBUdX07dmFyIHlnZTtQKGg2LCJKU09OTnVsbCIsMTAyMyksSSgyNTgsMTk2Nix7MjU4OjF9LHk5KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDI1OCk/dGhpcy5hPT11KGUsMjU4KS5hOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFpXZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBvOCh0aGlzLmEpfSxsLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIifSxsLmE9MCxQKGg2LCJKU09OTnVtYmVyIiwyNTgpLEkoMTgzLDE5NjYsezE4MzoxfSxteCxIayksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODMpP0h3dCh0aGlzLmEsdShlLDE4MykuYSk6ITF9LGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gSldlfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE13dCh0aGlzLmEpfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgSWwoInsiKSxlPSEwLGg9dWl0KHRoaXMsUHQoQWUsdGUsMiwwLDYsMSkpLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlP2U9ITE6ZC5hKz1LYSxWcihkLFBvZShuKSksZC5hKz0iOiIsaGMoZCxEMCh0aGlzLG4pKTtyZXR1cm4gZC5hKz0ifSIsZC5hfSxQKGg2LCJKU09OT2JqZWN0IiwxODMpLEkoNTk2LE4xLGp1LGZldCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSkmJlBLZSh0aGlzLmEsQnIoZSkpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmeChuZXcgd2wodGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmxlbmd0aH0sUChoNiwiSlNPTk9iamVjdC8xIiw1OTYpO3ZhciBFdXQ7SSgyMDQsMTk2Nix7MjA0OjF9LEhtKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIwNCk/aG4odGhpcy5hLHUoZSwyMDQpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRLZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBCZyh0aGlzLmEpfSxsLmplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUG9lKHRoaXMuYSl9LFAoaDYsIkpTT05TdHJpbmciLDIwNCk7dmFyIG9iLFo4dCx4Z2UsSjh0LHRFdDtJKDE5NjIsMSx7NTI1OjF9KSxQKEZ4dCwiT3V0cHV0U3RyZWFtIiwxOTYyKSxJKDE5NjMsMTk2Mix7NTI1OjF9KSxQKEZ4dCwiRmlsdGVyT3V0cHV0U3RyZWFtIiwxOTYzKSxJKDg2NiwxOTYzLHs1MjU6MX0sVHQpLFAoRnh0LCJQcmludFN0cmVhbSIsODY2KSxJKDQxOCwxLHs0NzU6MX0pLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKFhvLCJBYnN0cmFjdFN0cmluZ0J1aWxkZXIiLDQxOCksSSg1MjksNjAsVTAscFIpLFAoWG8sIkFyaXRobWV0aWNFeGNlcHRpb24iLDUyOSksSSg3Myw2MCxzb3QsVHB0LG1vKSxQKFhvLCJJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw3MyksSSgzMjAsNzMsezM6MSwzMjA6MSwxMDI6MSw3MzoxLDYwOjEsNzg6MX0sX3B0LFFwdCksUChYbywiQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiwzMjApLEkoNTI4LDYwLFUwLEh0dCx6cXQpLFAoWG8sIkFycmF5U3RvcmVFeGNlcHRpb24iLDUyOCksSSgyODksNzgsb2ZlLHRldCksUChYbywiRXJyb3IiLDI4OSksSSgxOTQsMjg5LG9mZSxFcHQsYW10KSxQKFhvLCJBc3NlcnRpb25FcnJvciIsMTk0KSxjZ2U9ezM6MSw0NzY6MSwzNToxfTt2YXIgSTIsWUUsQnM9UChYbywiQm9vbGVhbiIsNDc2KTtJKDIzNiwxLHszOjEsMjM2OjF9KTt2YXIgZUV0O1AoWG8sIk51bWJlciIsMjM2KSxJKDIxNywyMzYsezM6MSwyMTc6MSwzNToxLDIzNjoxfSxJdHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIERLZSh0aGlzLHUoZSwyMTcpKX0sbC5rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMjE3KSYmdShlLDIxNykuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIEU2PVAoWG8sIkJ5dGUiLDIxNyksbkV0O0koMTcyLDEsezM6MSwxNzI6MSwzNToxfSx0UiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gT0tlKHRoaXMsdShlLDE3MikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE3MikmJnUoZSwxNzIpLmE9PXRoaXMuYX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfSxsLmE9MDt2YXIgckV0LGFTPVAoWG8sIkNoYXJhY3RlciIsMTcyKSxpRXQ7SSgyMDUsNjAsezM6MSwyMDU6MSwxMDI6MSw2MDoxLDc4OjF9LEd6dCxYayksUChYbywiQ2xhc3NDYXN0RXhjZXB0aW9uIiwyMDUpLHVnZT17MzoxLDM1OjEsMzMzOjEsMjM2OjF9O3ZhciBjYT1QKFhvLCJEb3VibGUiLDMzMyk7SSgxNTUsMjM2LHszOjEsMzU6MSwxNTU6MSwyMzY6MX0sRDMsU3B0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiB6WWUodGhpcyx1KGUsMTU1KSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE1NSkmJmVLdCh0aGlzLmEsdShlLDE1NSkuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcHModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIFhFPVAoWG8sIkZsb2F0IiwxNTUpO0koMzIsNjAsezM6MSwxMDI6MSwzMjoxLDYwOjEsNzg6MX0sdU0sUG4sd3JlKSxQKFhvLCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLDMyKSxJKDcxLDYwLFUwLEl1LEZvKSxQKFhvLCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLDcxKSxJKDE5LDIzNix7MzoxLDM1OjEsMTk6MSwyMzY6MX0saU0pLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHFZZSh0aGlzLHUoZSwxOSkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOSkmJnUoZSwxOSkuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIGphPVAoWG8sIkludGVnZXIiLDE5KSxzRXQsa2dlO0koMTYyLDIzNix7MzoxLDM1OjEsMTYyOjEsMjM2OjF9LENtKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBIWWUodGhpcyx1KGUsMTYyKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gVnYodGhpcy5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpJiZBdih1KGUsMTYyKS5hLHRoaXMuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gU3IodGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK0VDKHRoaXMuYSl9LGwuYT0wO3ZhciBUdz1QKFhvLCJMb25nIiwxNjIpLGFFdDtJKDIwMzksMSx7fSksSSgxODMxLDYwLFUwLEhxdCksUChYbywiTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb24iLDE4MzEpLEkoMTczLDU5OCx7MzoxLDEwMjoxLDE3MzoxLDYwOjEsNzg6MX0sTDkseXgpLGwuV2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoZSl9LFAoWG8sIk51bGxQb2ludGVyRXhjZXB0aW9uIiwxNzMpO3ZhciBvRXQsVHV0LEVnZSxjRXQ7SSgxMjcsMzIsezM6MSwxMDI6MSwzMjoxLDEyNzoxLDYwOjEsNzg6MX0sb2QpLFAoWG8sIk51bWJlckZvcm1hdEV4Y2VwdGlvbiIsMTI3KSxJKDE4NCwyMzYsezM6MSwzNToxLDIzNjoxLDE4NDoxfSxlUiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gTktlKHRoaXMsdShlLDE4NCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpJiZ1KGUsMTg0KS5hPT10aGlzLmF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5hfSxsLmE9MDt2YXIgQ3c9UChYbywiU2hvcnQiLDE4NCksdUV0O0koMzEwLDEsezM6MSwzMTA6MX0sSm50KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDMxMCk/KG49dShlLDMxMCksdGhpcy5jPT1uLmMmJnRoaXMuZD09bi5kJiZ0aGlzLmE9PW4uYSYmdGhpcy5iPT1uLmIpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KGN0KG90KFhuLDEpLEllLDEsNSxbZGUodGhpcy5jKSx0aGlzLmEsdGhpcy5kLHRoaXMuYl0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIi4iK3RoaXMuZCsiKCIrKHRoaXMuYiE9bnVsbD90aGlzLmI6IlVua25vd24gU291cmNlIikrKHRoaXMuYz49MD8iOiIrdGhpcy5jOiIiKSsiKSJ9LGwuYz0wO3ZhciBsRXQ9UChYbywiU3RhY2tUcmFjZUVsZW1lbnQiLDMxMCk7bGdlPXszOjEsNDc1OjEsMzU6MSwyOjF9O3ZhciBBZT1QKFhvLER4dCwyKTtJKDEwNyw0MTgsezQ3NToxfSx4ZyxCOSxUaCksUChYbywiU3RyaW5nQnVmZmVyIiwxMDcpLEkoMTAwLDQxOCx7NDc1OjF9LF9wLExtLElsKSxQKFhvLCJTdHJpbmdCdWlsZGVyIiwxMDApLEkoNjg3LDczLHNvdCxacHQpLFAoWG8sIlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDY4NyksSSgyMDQzLDEse30pO3ZhciBoRXQ7SSg4NDQsMSx7fSxrZSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDc4KS5lfSxQKFhvLCJUaHJvd2FibGUvbGFtYmRhJDAkVHlwZSIsODQ0KSxJKDQxLDYwLHszOjEsMTAyOjEsNjA6MSw3ODoxLDQxOjF9LE9yLHlnKSxQKFhvLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsNDEpLEkoMjQwLDIzNix7MzoxLDM1OjEsMjM2OjEsMjQwOjF9LGtJLG9idCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gUXVlKHRoaXMsdShlLDI0MCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIGx5KE9sZSh0aGlzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXM9PT1lPyEwOkV0KGUsMjQwKT8obj11KGUsMjQwKSx0aGlzLmU9PW4uZSYmUXVlKHRoaXMsbik9PTApOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYiE9MD90aGlzLmI6dGhpcy5hPDU0PyhlPWt1KHRoaXMuZiksdGhpcy5iPVNyKFBzKGUsLTEpKSx0aGlzLmI9MzMqdGhpcy5iK1NyKFBzKEZwKGUsMzIpLC0xKSksdGhpcy5iPTE3KnRoaXMuYitwcyh0aGlzLmUpLHRoaXMuYik6KHRoaXMuYj0xNypJcmUodGhpcy5jKStwcyh0aGlzLmUpLHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gT2xlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmQ9MCxsLmU9MCxsLmY9MDt2YXIgVGdlLEQyLGZFdCxkRXQsZ0V0LHBFdCxiRXQsdkV0LEN1dD1QKCJqYXZhLm1hdGgiLCJCaWdEZWNpbWFsIiwyNDApO0koOTEsMjM2LHszOjEsMzU6MSwyMzY6MSw5MToxfSxEM3QsTGcsSzMsZzR0LE5pZSxOcCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gTGllKHRoaXMsdShlLDkxKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gbHkoRGF0KHRoaXMsMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBoM3QodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBJcmUodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0KHRoaXMsMCl9LGwuYj0tMixsLmM9MCxsLmQ9MCxsLmU9MDt2YXIgX3V0LEdILHdFdCxTdXQsVkgsUUUsQjQ9UCgiamF2YS5tYXRoIiwiQmlnSW50ZWdlciIsOTEpLENnZSxfZ2UsVDYsb1M7SSg0ODgsMTk2NyxidyksbC4kYj1mdW5jdGlvbigpe1l1KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBrbCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBwcmUodGhpcyxlLHRoaXMuZyl8fHByZSh0aGlzLGUsdGhpcy5mKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgd2codGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEpuKHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga2kodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBVeCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuICQ5KHRoaXMpfSxQKHByLCJBYnN0cmFjdEhhc2hNYXAiLDQ4OCksSSgyNjEsTjEsanUsd2cpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZFp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgyKHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGRadCh0aGlzLGUpPyhuPXUoZSw0MikuY2QoKSx0aGlzLmEuQmMobiksITApOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxQKHByLCJBYnN0cmFjdEhhc2hNYXAvRW50cnlTZXQiLDI2MSksSSgyNjIsMSxyYSxoMiksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFl2KHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5RYj1mdW5jdGlvbigpe2x0ZSh0aGlzKX0sbC5iPSExLFAocHIsIkFic3RyYWN0SGFzaE1hcC9FbnRyeVNldEl0ZXJhdG9yIiwyNjIpLEkoNDE3LDEscmEsZngpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBtTSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBQWHQodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtFbCh0aGlzKX0sbC5iPTAsbC5jPS0xLFAocHIsIkFic3RyYWN0TGlzdC9JdGVyYXRvckltcGwiLDQxNyksSSg5Niw0MTcsSmQsaGEpLGwuUWI9ZnVuY3Rpb24oKXtFbCh0aGlzKX0sbC5SYj1mdW5jdGlvbihlKXtSbSh0aGlzLGUpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj4wfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5VYj1mdW5jdGlvbigpe3JldHVybiBRbih0aGlzLmI+MCksdGhpcy5hLlhiKHRoaXMuYz0tLXRoaXMuYil9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLTF9LGwuV2I9ZnVuY3Rpb24oZSl7UG0odGhpcy5jIT0tMSksdGhpcy5hLl9jKHRoaXMuYyxlKX0sUChwciwiQWJzdHJhY3RMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk2KSxJKDIxOSw1MixJRSxLZCksbC5WYz1mdW5jdGlvbihlLG4pe1VtKGUsdGhpcy5iKSx0aGlzLmMuVmModGhpcy5hK2UsbiksKyt0aGlzLmJ9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEFuKGUsdGhpcy5iKSx0aGlzLmMuWGIodGhpcy5hK2UpfSxsLiRjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBBbihlLHRoaXMuYiksbj10aGlzLmMuJGModGhpcy5hK2UpLC0tdGhpcy5iLG59LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQW4oZSx0aGlzLmIpLHRoaXMuYy5fYyh0aGlzLmErZSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYT0wLGwuYj0wLFAocHIsIkFic3RyYWN0TGlzdC9TdWJMaXN0IiwyMTkpLEkoMzg0LE4xLGp1LFRtKSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYS52YygpLktjKCksbmV3IHJNKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/KHRoaXMuYS5CYyhlKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LFAocHIsIkFic3RyYWN0TWFwLzEiLDM4NCksSSg2OTEsMSxyYSxyTSksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmEuUGIoKSw0MiksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5hLlFiKCl9LFAocHIsIkFic3RyYWN0TWFwLzEvMSIsNjkxKSxJKDIyNiwyOCx3eSxiMSksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmEudmMoKS5LYygpLG5ldyB2MShlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sUChwciwiQWJzdHJhY3RNYXAvMiIsMjI2KSxJKDI5NCwxLHJhLHYxKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYS5QYigpLDQyKSxlLmRkKCl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sUChwciwiQWJzdHJhY3RNYXAvMi8xIiwyOTQpLEkoNDg0LDEsezQ4NDoxLDQyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDQyKT8obj11KGUsNDIpLFBjKHRoaXMuZCxuLmNkKCkpJiZQYyh0aGlzLmUsbi5kZCgpKSk6ITF9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBHMyh0aGlzLmQpXkczKHRoaXMuZSl9LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEoydCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZCsiPSIrdGhpcy5lfSxQKHByLCJBYnN0cmFjdE1hcC9BYnN0cmFjdEVudHJ5Iiw0ODQpLEkoMzgzLDQ4NCx7NDg0OjEsMzgzOjEsNDI6MX0sUlIpLFAocHIsIkFic3RyYWN0TWFwL1NpbXBsZUVudHJ5IiwzODMpLEkoMTk4NCwxLHVvdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSxQYyh0aGlzLmNkKCksbi5jZCgpKSYmUGModGhpcy5kZCgpLG4uZGQoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEczKHRoaXMuY2QoKSleRzModGhpcy5kZCgpKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNkKCkrIj0iK3RoaXMuZGQoKX0sUChwcixLaGUsMTk4NCksSSgxOTkyLDE5NjcsVWhlKSxsLnRjPWZ1bmN0aW9uKGUpe3JldHVybiB4SnQodGhpcyxlKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMsZSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49ZSxlYyhEeXQodGhpcyxuKSl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHkodGhpcyl9LFAocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwIiwxOTkyKSxJKDczOSxOMSxqdSx4KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDQyKSYmeEp0KHRoaXMuYix1KGUsNDIpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgdkModGhpcy5iKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSxjdGUodGhpcy5iLG4pKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuY30sUChwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvRW50cnlTZXQiLDczOSksSSg0OTMsTjEsTXh0LHkpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZSKHRoaXMpfSxsLiRiPWZ1bmN0aW9uKCl7TzkodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB2QyhuZXcgZ0ModGhpcy5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMuYSxlKT8oSUModGhpcy5hLGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sUChwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0Iiw0OTMpLEkoNDk0LDEscmEsZyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIG1NKHRoaXMuYS5hKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXdqKHRoaXMuYSksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7aEt0KHRoaXMuYSl9LFAocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwL05hdmlnYWJsZUtleVNldC8xIiw0OTQpLEkoMjAwNCwyOCx3eSksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gTTgoZEUodGhpcyxlKSksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIE9uKGUpLF9qKGUhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpLFVhKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtmb3IoO1FydCh0aGlzKSE9bnVsbDspO30sUChwciwiQWJzdHJhY3RRdWV1ZSIsMjAwNCksSSgzMDIsMjgsezQ6MSwyMDoxLDI4OjEsMTQ6MX0sUDMsUlF0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBRd3QodGhpcyxlKSwhMH0sbC4kYj1mdW5jdGlvbigpe3JtdCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm5lKG5ldyBNQyh0aGlzKSxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiBOOSh0aGlzKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTUModGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZybihuZXcgTUModGhpcyksZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTF9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMjcyKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMSxlLmxlbmd0aDxuJiYoZT13UihuZXcgQXJyYXkobiksZSkpLFhlZSh0aGlzLGUsbiksZS5sZW5ndGg+biYmSmkoZSxuLG51bGwpLGV9LGwuYj0wLGwuYz0wLFAocHIsIkFycmF5RGVxdWUiLDMwMiksSSg0NDYsMSxyYSxNQyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5ifSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIG16KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7RmVlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmM9LTEsUChwciwiQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwiLDQ0NiksSSgxMiw1Mix1ZmUsbGUsWWMsUHUpLGwuVmM9ZnVuY3Rpb24oZSxuKXskbSh0aGlzLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHVlKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnl0KHRoaXMsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gQXModGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYz1QdChYbixJZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcyxlLDApIT0tMX0sbC5KYz1mdW5jdGlvbihlKXttdSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBGZSh0aGlzLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLGUsMCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gQWcodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gdnUodGhpcyxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe0JRdCh0aGlzLGUsbil9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYWgodGhpcyxlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9LGwuYWQ9ZnVuY3Rpb24oZSl7WHModGhpcyxlKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBpbnQodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEQxKHRoaXMsZSl9O3ZhciBYNW49UChwciwiQXJyYXlMaXN0IiwxMik7SSg3LDEscmEsUyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFZvKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEoodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtfQyh0aGlzKX0sbC5hPTAsbC5iPS0xLFAocHIsIkFycmF5TGlzdC8xIiw3KSxJKDIwMTMsYi5GdW5jdGlvbix7fSx4dCksbC50ZT1mdW5jdGlvbihlLG4pe3JldHVybiBMcyhlLG4pfSxJKDE1NCw1MixsZmUsd2wpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJlZSh0aGlzLGUpIT0tMX0sbC5KYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3IoT24oZSkscj10aGlzLmEscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZS50ZChuKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gZVl0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj0oQW4oZSx0aGlzLmEubGVuZ3RoKSx0aGlzLmFbZV0pLEppKHRoaXMuYSxlLG4pLHJ9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sbC5hZD1mdW5jdGlvbihlKXtMbnQodGhpcy5hLHRoaXMuYS5sZW5ndGgsZSl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gcWllKHRoaXMsUHQoWG4sSWUsMSx0aGlzLmEubGVuZ3RoLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBxaWUodGhpcyxlKX0sUChwciwiQXJyYXlzL0FycmF5TGlzdCIsMTU0KTt2YXIgaW8sYTAsVUg7SSg5NDAsNTIsbGZlLE90KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBaYnQoZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSxyOCgpLFpFfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCkscjgoKSxaRX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxQKHByLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3QiLDk0MCksSSg5NDEsMSxKZCxOdCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IGxjKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxsLlViPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IGxjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEl1KX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgSXUpfTt2YXIgWkU7UChwciwiQ29sbGVjdGlvbnMvRW1wdHlMaXN0SXRlcmF0b3IiLDk0MSksSSg5NDMsMTk2NyxMRSxxdCksbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiB2bigpLFVIfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCksVUh9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5DYz1mdW5jdGlvbigpe3JldHVybiB2bigpLGlvfSxQKHByLCJDb2xsZWN0aW9ucy9FbXB0eU1hcCIsOTQzKSxJKDk0MixOMSxNRSxudCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sUChwciwiQ29sbGVjdGlvbnMvRW1wdHlTZXQiLDk0MiksSSg1OTksNTIsezM6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LEQpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBjKHRoaXMuYSxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gQW4oZSwxKSx0aGlzLmF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sUChwciwiQ29sbGVjdGlvbnMvU2luZ2xldG9uTGlzdCIsNTk5KSxJKDM3MiwxLFFoZSxUKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBiSHQoKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gdkh0KCl9LGwuJGI9ZnVuY3Rpb24oKXt3SHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcE0odGhpcyxlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gc0d0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmRjKCl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEodGhpcy5iLktjKCkpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBtSHQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gYUd0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5iKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlQ29sbGVjdGlvbiIsMzcyKSxJKDM3MSwxLHJhLEEpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGIoKX0sbC5RYj1mdW5jdGlvbigpe3lIdCgpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uSXRlcmF0b3IiLDM3MSksSSg1MzEsMzcyLGhmZSxmaiksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhjKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUMnQodGhpcy5hLlpjKDApKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQydCh0aGlzLmEuWmMoZSkpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLmFkPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IGZqKHRoaXMuYS5iZChlLG4pKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTGlzdCIsNTMxKSxJKDY5MCwzNzEsSmQsVDJ0KSxsLlFiPWZ1bmN0aW9uKCl7eUh0KCl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2IoKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVWIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVmIoKX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDY5MCksSSg2MDAsMSxidyxxKSxsLndjPWZ1bmN0aW9uKGUpe1VDKHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuX2IoZSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNHdCh0aGlzLGUpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIHg4KHRoaXMpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB1R3QodGhpcyxlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLnhjKGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gYlh0KHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5CYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYyl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gcFh0KHRoaXMpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAiLDYwMCksSSgzODIsMzcyLEZhdCxRayksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5iLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYil9LFAocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNldCIsMzgyKSxJKDk0NCwzODIsRmF0LFlxdCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gb0d0KHRoaXMsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5JYyhlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYi5LYygpLG5ldyBPKGUpfSxsLlBjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLlBjKCkscVp0KGUsZS5sZW5ndGgpLGV9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFYdCh0aGlzLGUpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQiLDk0NCksSSg5NDUsMSxyYSxPKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICQodSh0aGlzLmEuUGIoKSw0MikpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0LzEiLDk0NSksSSg2ODgsMSx1b3QsJCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkZiKGUpfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jZCgpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kZCgpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5IYigpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0L1VubW9kaWZpYWJsZUVudHJ5Iiw2ODgpLEkoNjAxLDUzMSx7MjA6MSwxNDoxLDE1OjEsNTQ6MX0sb2V0KSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVSYW5kb21BY2Nlc3NMaXN0Iiw2MDEpLEkoNjg5LDM4MixaaGUsQzJ0KSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGUih0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYSl9LFAocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNvcnRlZFNldCIsNjg5KSxJKDg0NywxLGxvdCxwbiksbC51ZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPUhadCh1KGUsMTEpLHUobiwxMSkpLHIhPTA/cjpadWUodShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHByLCJDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDg0Nyk7dmFyIG1FdCx5RXQseEV0O0koNzUxLDEsbG90LE1lKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEl0bih1KGUsMzUpLHUobiwzNSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBYMygpLHhFdH0sUChwciwiQ29tcGFyYXRvcnMvTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsNzUxKSxJKDExNzcsMSxsb3QsdmUpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHRuKHUoZSwzNSksdShuLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIFgzKCkseUV0fSxQKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsMTE3NyksSSg2NCwxLGxvdCxmdCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5hLnVlKG4sZSl9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlZENvbXBhcmF0b3IiLDY0KSxJKDE2Niw2MCxVMCxlaCksUChwciwiQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiIsMTY2KTt2YXIgU2dlLEFnZTtJKDE5MDQsMSxORCxHZSksbC53ZT1mdW5jdGlvbihlKXtwaWUodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJEb3VibGVTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICIrRUModGhpcy5hKSsiLCBhdmcgPSAiKyhMR3QodGhpcy5hLDApP19KdCh0aGlzKS9Wdih0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrX0p0KHRoaXMpKyJdIn0sbC5hPTAsbC5iPVRzLGwuYz1zcyxsLmQ9MCxsLmU9MCxsLmY9MCxQKHByLCJEb3VibGVTdW1tYXJ5U3RhdGlzdGljcyIsMTkwNCksSSgxODA1LDYwLFUwLFZ6dCksUChwciwiRW1wdHlTdGFja0V4Y2VwdGlvbiIsMTgwNSksSSg0NTEsMTk2NyxidyxlXyksbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBaMnQodGhpcyxlLG4pfSxsLiRiPWZ1bmN0aW9uKCl7YVh0KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBBR3QodGhpcyxlKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPW5ldyBFeCh0aGlzLmEpO3IuYTxyLmMuYS5sZW5ndGg7KWlmKG49RkMociksUGMoZSx0aGlzLmJbbi5nXSkpcmV0dXJuITA7cmV0dXJuITF9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEF0KHRoaXMpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBnbyh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBSd3QodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sUChwciwiRW51bU1hcCIsNDUxKSxJKDEzNTIsTjEsanUsQXQpLGwuJGI9ZnVuY3Rpb24oKXthWHQodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZlp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEpLdCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBmWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksUnd0KHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmEuY30sUChwciwiRW51bU1hcC9FbnRyeVNldCIsMTM1MiksSSgxMzUzLDEscmEsSkt0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPUZDKHRoaXMuYSksbmV3IElHdCh0aGlzLmMsdGhpcy5iKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBjMnQodGhpcy5hKX0sbC5RYj1mdW5jdGlvbigpe1BtKCEhdGhpcy5iKSxSd3QodGhpcy5jLHRoaXMuYiksdGhpcy5iPW51bGx9LFAocHIsIkVudW1NYXAvRW50cnlTZXRJdGVyYXRvciIsMTM1MyksSSgxMzU0LDE5ODQsdW90LElHdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmJbdGhpcy5hLmddfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBjd3QodGhpcy5iLHRoaXMuYS5nLGUpfSxQKHByLCJFbnVtTWFwL01hcEVudHJ5IiwxMzU0KSxJKDE3NCxOMSx7MjA6MSwyODoxLDE0OjEsMTc0OjEsMjE6MX0pO3ZhciBMZ2U9UChwciwiRW51bVNldCIsMTc0KTtJKDE1NiwxNzQsezIwOjEsMjg6MSwxNDoxLDE3NDoxLDE1NjoxLDIxOjF9LHJoKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBwZih0aGlzLHUoZSwyMikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBNbnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRXgodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGRZdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5jPTAsUChwciwiRW51bVNldC9FbnVtU2V0SW1wbCIsMTU2KSxJKDM0MywxLHJhLEV4KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRkModGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gYzJ0KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7UG0odGhpcy5iIT0tMSksSmkodGhpcy5jLmIsdGhpcy5iLG51bGwpLC0tdGhpcy5jLmMsdGhpcy5iPS0xfSxsLmE9LTEsbC5iPS0xLFAocHIsIkVudW1TZXQvRW51bVNldEltcGwvSXRlcmF0b3JJbXBsIiwzNDMpLEkoNDMsNDg4LF80LENyLGt4LFVWdCksbC5yZT1mdW5jdGlvbihlLG4pe3JldHVybiBHdChlKT09PUd0KG4pfHxlIT1udWxsJiZ5aShlLG4pfSxsLnNlPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUhpKGUpLG58MH0sUChwciwiSGFzaE1hcCIsNDMpLEkoNTMsTjEsQnh0LHFzLHhSLHlDKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBOcyh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFMwKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCk9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gZjJ0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBRNW49UChwciwiSGFzaFNldCIsNTMpO0koMTc4MSwxLEFELEtlKSxsLnVkPWZ1bmN0aW9uKGUpe19uZSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkludFN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitFQyh0aGlzLmEpKyIsIGF2ZyA9ICIrKExHdCh0aGlzLmEsMCk/VnYodGhpcy5kKS9Wdih0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrRUModGhpcy5kKSsiXSJ9LGwuYT0wLGwuYj1fYSxsLmM9dmksbC5kPTAsUChwciwiSW50U3VtbWFyeVN0YXRpc3RpY3MiLDE3ODEpLEkoMTA0OSwxLHQwLHNVdCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLd3QodGhpcyl9LGwuYz0wLFAocHIsIkludGVybmFsSGFzaENvZGVNYXAiLDEwNDkpLEkoNzExLDEscmEsS3d0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kPXRoaXMuYVt0aGlzLmMrK10sdGhpcy5kfSxsLk9iPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYzx0aGlzLmEubGVuZ3RoPyEwOihlPXRoaXMuYi5uZXh0KCksZS5kb25lPyExOih0aGlzLmE9ZS52YWx1ZVsxXSx0aGlzLmM9MCwhMCkpfSxsLlFiPWZ1bmN0aW9uKCl7dTV0KHRoaXMuZSx0aGlzLmQuY2QoKSksdGhpcy5jIT0wJiYtLXRoaXMuY30sbC5jPTAsbC5kPW51bGwsUChwciwiSW50ZXJuYWxIYXNoQ29kZU1hcC8xIiw3MTEpO3ZhciBNZ2U7SSgxMDQ3LDEsdDAsYVV0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGltdCh0aGlzKX0sbC5jPTAsbC5kPTAsUChwciwiSW50ZXJuYWxTdHJpbmdNYXAiLDEwNDcpLEkoNzEwLDEscmEsaW10KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPXRoaXMuYSx0aGlzLmE9dGhpcy5iLm5leHQoKSxuZXcgdUt0KHRoaXMuZCx0aGlzLmMsdGhpcy5kLmQpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYS5kb25lfSxsLlFiPWZ1bmN0aW9uKCl7UG5lKHRoaXMuZCx0aGlzLmMudmFsdWVbMF0pfSxQKHByLCJJbnRlcm5hbFN0cmluZ01hcC8xIiw3MTApLEkoMTA0OCwxOTg0LHVvdCx1S3QpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLnZhbHVlWzBdfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kIT10aGlzLmM/VTkodGhpcy5hLHRoaXMuYi52YWx1ZVswXSk6dGhpcy5iLnZhbHVlWzFdfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBudyh0aGlzLmEsdGhpcy5iLnZhbHVlWzBdLGUpfSxsLmM9MCxQKHByLCJJbnRlcm5hbFN0cmluZ01hcC8yIiwxMDQ4KSxJKDIyOCw0MyxfNCxuMixFbXQpLGwuJGI9ZnVuY3Rpb24oKXtCV3QodGhpcyl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE1HdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihuPXRoaXMuZC5hO24hPXRoaXMuZDspe2lmKFBjKG4uZSxlKSlyZXR1cm4hMDtuPW4uYX1yZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgTXQodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFd2KHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcDIodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBQdGUodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAkOSh0aGlzLmUpfSxsLmM9ITEsUChwciwiTGlua2VkSGFzaE1hcCIsMjI4KSxJKDM4NywzODMsezQ4NDoxLDM4MzoxLDM4NzoxLDQyOjF9LGNXdCxfdnQpLFAocHIsIkxpbmtlZEhhc2hNYXAvQ2hhaW5FbnRyeSIsMzg3KSxJKDcwMSxOMSxqdSxNdCksbC4kYj1mdW5jdGlvbigpe0JXdCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBnWnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeXd0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBnWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksUHRlKHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gJDkodGhpcy5hLmUpfSxQKHByLCJMaW5rZWRIYXNoTWFwL0VudHJ5U2V0Iiw3MDEpLEkoNzAyLDEscmEseXd0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gaHRlKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiE9dGhpcy5jLmEuZH0sbC5RYj1mdW5jdGlvbigpe1BtKCEhdGhpcy5hKSxUcnQodGhpcy5jLmEuZSx0aGlzKSxGdnQodGhpcy5hKSxVeCh0aGlzLmMuYS5lLHRoaXMuYS5kKSx6MnQodGhpcy5jLmEuZSx0aGlzKSx0aGlzLmE9bnVsbH0sUChwciwiTGlua2VkSGFzaE1hcC9FbnRyeVNldC9FbnRyeUl0ZXJhdG9yIiw3MDIpLEkoMTc4LDUzLEJ4dCxBMCxubnQsJHZ0KTt2YXIgWjVuPVAocHIsIkxpbmtlZEhhc2hTZXQiLDE3OCk7SSg2OCwxOTY0LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNjg6MSwxNToxfSxRaSxibnQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5pKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtfaCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gZWkodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYj0wO3ZhciBKNW49UChwciwiTGlua2VkTGlzdCIsNjgpO0koOTcwLDEsSmQsbEt0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7WE0odGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBrUih0aGlzKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYiE9dGhpcy5kLmF9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGkodGhpcyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIGtydCh0aGlzKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEtMX0sbC5RYj1mdW5jdGlvbigpe0gkKHRoaXMpfSxsLldiPWZ1bmN0aW9uKGUpe1BtKCEhdGhpcy5jKSx0aGlzLmMuYz1lfSxsLmE9MCxsLmM9bnVsbCxQKHByLCJMaW5rZWRMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk3MCksSSg2MDgsMSx7fSxIdCksUChwciwiTGlua2VkTGlzdC9Ob2RlIiw2MDgpLEkoMTk1OSwxLHt9KTt2YXIga0V0LElnZTtQKHByLCJMb2NhbGUiLDE5NTkpLEkoODYxLDE5NTkse30sSXQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sUChwciwiTG9jYWxlLzEiLDg2MSksSSg4NjIsMTk1OSx7fSxGdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiJ1bmtub3duIn0sUChwciwiTG9jYWxlLzQiLDg2MiksSSgxMDksNjAsezM6MSwxMDI6MSw2MDoxLDc4OjEsMTA5OjF9LGxjLHdYdCksUChwciwiTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiIsMTA5KSxJKDQwNCwxLHs0MDQ6MX0sZ1IpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PT10aGlzPyEwOkV0KGUsNDA0KT8obj11KGUsNDA0KSxQYyh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gRzModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEhPW51bGw/VmhlK2RDKHRoaXMuYSkrIikiOiJPcHRpb25hbC5lbXB0eSgpIn07dmFyIFdIO1AocHIsIk9wdGlvbmFsIiw0MDQpLEkoNDYzLDEsezQ2MzoxfSxRVnQsTjJ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpFdChlLDQ2Myk/KG49dShlLDQ2MyksdGhpcy5hPT1uLmEmJkxzKHRoaXMuYixuLmIpPT0wKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/cHModGhpcy5iKTowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxEb3VibGUub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsRG91YmxlLmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIEVFdDtQKHByLCJPcHRpb25hbERvdWJsZSIsNDYzKSxJKDUxNywxLHs1MTc6MX0sWlZ0LHNXdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09PXRoaXM/ITA6RXQoZSw1MTcpPyhuPXUoZSw1MTcpLHRoaXMuYT09bi5hJiZkdSh0aGlzLmIsbi5iKT09MCk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3RoaXMuYjowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxJbnQub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsSW50LmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIERnZTtQKHByLCJPcHRpb25hbEludCIsNTE3KSxJKDUwMywyMDA0LHd5LFZqKSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBLM3QodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYi5jPVB0KFhuLEllLDEsMCw1LDEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybihlPT1udWxsPy0xOlJvKHRoaXMuYixlLDApKSE9LTF9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFlZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywyNTYpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGludCh0aGlzLmIpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBEMSh0aGlzLmIsZSl9LFAocHIsIlByaW9yaXR5UXVldWUiLDUwMyksSSgxMjc3LDEscmEsRyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYTx0aGlzLmMuYi5jLmxlbmd0aH0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBRbih0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGgpLHRoaXMuYj10aGlzLmErKyxGZSh0aGlzLmMuYix0aGlzLmIpfSxsLlFiPWZ1bmN0aW9uKCl7UG0odGhpcy5iIT0tMSksb2l0KHRoaXMuYyx0aGlzLmE9dGhpcy5iKSx0aGlzLmI9LTF9LGwuYT0wLGwuYj0tMSxQKHByLCJQcmlvcml0eVF1ZXVlLzEiLDEyNzcpLEkoMjMwLDEsezIzMDoxfSx6aXQsVCQpLGwuYT0wLGwuYj0wO3ZhciBURXQsQ0V0LHR4bj0wO1AocHIsIlJhbmRvbSIsMjMwKSxJKDI3LDEsTWgsX24sRnYseVh0KSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5yZD1mdW5jdGlvbigpe3JldHVybiBud3QodGhpcyksdGhpcy5jfSxsLk5iPWZ1bmN0aW9uKGUpe253dCh0aGlzKSx0aGlzLmQuTmIoZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHNlZSh0aGlzLGUpfSxsLmE9MCxsLmM9MCxQKHByLCJTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvciIsMjcpLEkoNDg1LDI3LE1oLEZSKSxQKHByLCJTb3J0ZWRTZXQvMSIsNDg1KSxJKDYwMiwxLE5ELFcpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxQKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8wbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDIpLEkoNjAzLDEsTkQsZXQpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxQKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8xbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDMpLEkoNjA0LDEsQUQsYXQpLGwudWQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGRlKGUpKX0sUChwciwiU3BsaXRlcmF0b3IvT2ZJbnQvMm1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjA0KSxJKDYwNSwxLEFELGx0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZChkZShlKSl9LFAocHIsIlNwbGl0ZXJhdG9yL09mSW50LzNtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYwNSksSSg2MTcsMSxNaCksbC5OYj1mdW5jdGlvbihlKXtjYnQodGhpcyxlKX0sbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLmQ9MCxsLmU9MCxQKHByLCJTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yIiw2MTcpLEkoNzIxLDYxNyxNaCksbC54ZT1mdW5jdGlvbihlKXtCMyh0aGlzLGUpfSxsLk5iPWZ1bmN0aW9uKGUpe0V0KGUsMTgyKT9CMyh0aGlzLHUoZSwxODIpKTpCMyh0aGlzLG5ldyBldChlKSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTgyKT90aGlzLnllKHUoZSwxODIpKTp0aGlzLnllKG5ldyBXKGUpKX0sUChwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0RG91YmxlU3BsaXRlcmF0b3IiLDcyMSksSSg3MjAsNjE3LE1oKSxsLnhlPWZ1bmN0aW9uKGUpe0IzKHRoaXMsZSl9LGwuTmI9ZnVuY3Rpb24oZSl7RXQoZSwxOTYpP0IzKHRoaXMsdShlLDE5NikpOkIzKHRoaXMsbmV3IGx0KGUpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTYpP3RoaXMueWUodShlLDE5NikpOnRoaXMueWUobmV3IGF0KGUpKX0sUChwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0SW50U3BsaXRlcmF0b3IiLDcyMCksSSg1NDAsNjE3LE1oKSxQKHByLCJTcGxpdGVyYXRvcnMvQWJzdHJhY3RTcGxpdGVyYXRvciIsNTQwKSxJKDY5MiwxLE1oKSxsLk5iPWZ1bmN0aW9uKGUpe2NidCh0aGlzLGUpfSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQtdGhpcy5jfSxsLmI9MCxsLmM9MCxsLmQ9MCxQKHByLCJTcGxpdGVyYXRvcnMvQmFzZUFycmF5U3BsaXRlcmF0b3IiLDY5MiksSSg5NDcsNjkyLE1oLHpLdCksbC56ZT1mdW5jdGlvbihlLG4pe0hLZSh0aGlzLHUoZSwzOCksbil9LGwuTmI9ZnVuY3Rpb24oZSl7WW50KHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIE0kKHRoaXMsZSl9LFAocHIsIlNwbGl0ZXJhdG9ycy9BcnJheVNwbGl0ZXJhdG9yIiw5NDcpLEkoNjkzLDY5MixNaCxhS3QpLGwuemU9ZnVuY3Rpb24oZSxuKXtHS2UodGhpcyx1KGUsMTgyKSxuKX0sbC54ZT1mdW5jdGlvbihlKXtZbnQodGhpcyxlKX0sbC5OYj1mdW5jdGlvbihlKXtFdChlLDE4Mik/WW50KHRoaXMsdShlLDE4MikpOlludCh0aGlzLG5ldyBldChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIE0kKHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTgyKT9NJCh0aGlzLHUoZSwxODIpKTpNJCh0aGlzLG5ldyBXKGUpKX0sUChwciwiU3BsaXRlcmF0b3JzL0RvdWJsZUFycmF5U3BsaXRlcmF0b3IiLDY5MyksSSgxOTY4LDEsTWgpLGwuTmI9ZnVuY3Rpb24oZSl7Y2J0KHRoaXMsZSl9LGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTY0NDh9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH07dmFyIE9nZTtQKHByLCJTcGxpdGVyYXRvcnMvRW1wdHlTcGxpdGVyYXRvciIsMTk2OCksSSg5NDYsMTk2OCxNaCxpZSksbC54ZT1mdW5jdGlvbihlKXtSayhlKX0sbC5OYj1mdW5jdGlvbihlKXtFdChlLDE5Nik/UmsodShlLDE5NikpOlJrKG5ldyBsdChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG1idChlKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTYpP21idCh1KGUsMTk2KSk6bWJ0KG5ldyBhdChlKSl9LFAocHIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yL09mSW50Iiw5NDYpLEkoNTgwLDUyLGZmZSxmUiksbC5WYz1mdW5jdGlvbihlLG4pe2I4KGUsdGhpcy5hLmMubGVuZ3RoKzEpLCRtKHRoaXMuYSxlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB1ZSh0aGlzLmEsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYjgoZSx0aGlzLmEuYy5sZW5ndGgrMSksUnl0KHRoaXMuYSxlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBBcyh0aGlzLmEsZSl9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYz1QdChYbixJZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcy5hLGUsMCkhPS0xfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBJSSh0aGlzLmEsZSl9LGwuSmM9ZnVuY3Rpb24oZSl7bXUodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBiOChlLHRoaXMuYS5jLmxlbmd0aCksRmUodGhpcy5hLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLmEsZSwwKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGg9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gYjgoZSx0aGlzLmEuYy5sZW5ndGgpLEFnKHRoaXMuYSxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe0JRdCh0aGlzLmEsZSxuKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBiOChlLHRoaXMuYS5jLmxlbmd0aCksYWgodGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmFkPWZ1bmN0aW9uKGUpe1hzKHRoaXMuYSxlKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgS2QodGhpcy5hLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gaW50KHRoaXMuYSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEQxKHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBRcCh0aGlzLmEpfSxQKHByLCJWZWN0b3IiLDU4MCksSSg4MDksNTgwLGZmZSxQcHQpLFAocHIsIlN0YWNrIiw4MDkpLEkoMjA2LDEsezIwNjoxfSxjMiksbC5JYj1mdW5jdGlvbigpe3JldHVybiBhWnQodGhpcyl9LFAocHIsIlN0cmluZ0pvaW5lciIsMjA2KSxJKDU0NCwxOTkyLHszOjEsODM6MSwxNzE6MSwxNjE6MX0sZkd0LEJudCksbC4kYj1mdW5jdGlvbigpe085KHRoaXMpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnQyh0aGlzKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBweih0aGlzLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIElDKHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmM9MCxQKHByLCJUcmVlTWFwIiw1NDQpLEkoMzkwLDEscmEsdkMpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB3aih0aGlzKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBtTSh0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7aEt0KHRoaXMpfSxQKHByLCJUcmVlTWFwL0VudHJ5SXRlcmF0b3IiLDM5MCksSSg0MzUsNzM5LGp1LGdDKSxsLiRiPWZ1bmN0aW9uKCl7TzkodGhpcy5hKX0sUChwciwiVHJlZU1hcC9FbnRyeVNldCIsNDM1KSxJKDQzNiwzODMsezQ4NDoxLDM4MzoxLDQyOjEsNDM2OjF9LCRydCksbC5iPSExO3ZhciBleG49UChwciwiVHJlZU1hcC9Ob2RlIiw0MzYpO0koNjIxLDEse30sJHQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iU3RhdGU6IG12PSIrdGhpcy5jKyIgdmFsdWU9Iit0aGlzLmQrIiBkb25lPSIrdGhpcy5hKyIgZm91bmQ9Iit0aGlzLmJ9LGwuYT0hMSxsLmI9ITEsbC5jPSExLFAocHIsIlRyZWVNYXAvU3RhdGUiLDYyMSksSSgyOTcsMjIsZG90LEJSKSxsLkFlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuQmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dmFyIEF1dCxfRXQsU0V0LEFFdCxLSD1qcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlIiwyOTcsSHIsQWluLHNaZSk7SSgxMTEyLDI5Nyxkb3QsZFV0KSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMSIsMTExMixLSCxudWxsLG51bGwpLEkoMTExMywyOTcsZG90LENVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMiIsMTExMyxLSCxudWxsLG51bGwpLEkoMTExNCwyOTcsZG90LGdVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxqcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlLzMiLDExMTQsS0gsbnVsbCxudWxsKTt2YXIgTmdlO0koMjA4LE4xLHszOjEsMjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxLDIwODoxfSxNcHQsTHApLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZSKHRoaXMpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBZTSh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7TzkodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB2QyhuZXcgZ0MobmV3IHkodGhpcy5hKS5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gZW50KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmN9O3ZhciBueG49UChwciwiVHJlZVNldCIsMjA4KTtJKDk2NiwxLHt9LER0KSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVRZSh0aGlzLmEsZSxuKX0sUChnb3QsIkJpbmFyeU9wZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDk2NiksSSg5NjcsMSx7fSxqdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBUUWUodGhpcy5hLGUsbil9LFAoZ290LCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMSRUeXBlIiw5NjcpLEkoODQ2LDEse30scmUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFAoZ290LCJGdW5jdGlvbi9sYW1iZGEkMCRUeXBlIiw4NDYpLEkoNDMxLDEsdWksWnQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuYS5NYihlKX0sUChnb3QsIlByZWRpY2F0ZS9sYW1iZGEkMiRUeXBlIiw0MzEpLEkoNTcyLDEsezU3MjoxfSk7dmFyIFBnZT1QKElfLCJIYW5kbGVyIiw1NzIpO0koMjAwNywxLF9EKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIkRVTU1ZIn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lKCl9O3ZhciBMRXQ7UChJXywiTGV2ZWwiLDIwMDcpLEkoMTYyMSwyMDA3LF9ELE9lKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIklORk8ifSxQKElfLCJMZXZlbC9MZXZlbEluZm8iLDE2MjEpLEkoMTY0MCwxLHt9LFh6dCk7dmFyIEx1dDtQKElfLCJMb2dNYW5hZ2VyIiwxNjQwKSxJKDE3ODAsMSxfRCxmS3QpLGwuYj1udWxsLFAoSV8sIkxvZ1JlY29yZCIsMTc4MCksSSg1MTIsMSx7NTEyOjF9LElydCksbC5lPSExO3ZhciBGZ2U9ITEsQmdlPSExLFIxPSExLFJnZT0hMSxqZ2U9ITE7UChJXywiTG9nZ2VyIiw1MTIpLEkoODE5LDU3Mix7NTcyOjF9LG9lKSxQKElfLCJTaW1wbGVDb25zb2xlTG9nSGFuZGxlciIsODE5KSxJKDEzMiwyMix7MzoxLDM1OjEsMjI6MSwxMzI6MX0scGV0KTt2YXIgTUV0LEdsLEx5LGxsPWpyKElzLCJDb2xsZWN0b3IvQ2hhcmFjdGVyaXN0aWNzIiwxMzIsSHIsQ3JuLGFaZSksJGdlO0koNzQ0LDEse30sb3d0KSxQKElzLCJDb2xsZWN0b3JJbXBsIiw3NDQpLEkoMTA2MCwxLHt9LE5lKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE11bih1KGUsMjA2KSx1KG4sMjA2KSl9LFAoSXMsIkNvbGxlY3RvcnMvMTBtZXRob2RyZWYkbWVyZ2UkVHlwZSIsMTA2MCksSSgxMDYxLDEse30sbWUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFadCh1KGUsMjA2KSl9LFAoSXMsIkNvbGxlY3RvcnMvMTFtZXRob2RyZWYkdG9TdHJpbmckVHlwZSIsMTA2MSksSSgxMDYyLDEse30sS3QpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEZuKCksISFKYnQoZSl9LFAoSXMsIkNvbGxlY3RvcnMvMTJtZXRob2RyZWYkdGVzdCRUeXBlIiwxMDYyKSxJKDI1MSwxLHt9LHdlKSxsLk9kPWZ1bmN0aW9uKGUsbil7dShlLDE0KS5GYyhuKX0sUChJcywiQ29sbGVjdG9ycy8yMG1ldGhvZHJlZiRhZGQkVHlwZSIsMjUxKSxJKDI1MywxLHt9LF9lKSxsLkVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsZX0sUChJcywiQ29sbGVjdG9ycy8yMW1ldGhvZHJlZiRjdG9yJFR5cGUiLDI1MyksSSgzNDYsMSx7fSxjbiksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcXN9LFAoSXMsIkNvbGxlY3RvcnMvMjNtZXRob2RyZWYkY3RvciRUeXBlIiwzNDYpLEkoMzQ3LDEse30sbGkpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtOcyh1KGUsNTMpLG4pfSxQKElzLCJDb2xsZWN0b3JzLzI0bWV0aG9kcmVmJGFkZCRUeXBlIiwzNDcpLEkoMTA1NSwxLHt9LHlhKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGRHdCh1KGUsMTUpLHUobiwxNCkpfSxQKElzLCJDb2xsZWN0b3JzLzRtZXRob2RyZWYkYWRkQWxsJFR5cGUiLDEwNTUpLEkoMTA1OSwxLHt9LGRhKSxsLk9kPWZ1bmN0aW9uKGUsbil7UDAodShlLDIwNiksdShuLDQ3NSkpfSxQKElzLCJDb2xsZWN0b3JzLzltZXRob2RyZWYkYWRkJFR5cGUiLDEwNTkpLEkoMTA1OCwxLHt9LExLdCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgYzIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQxNSRUeXBlIiwxMDU4KSxJKDEwNjMsMSx7fSxPbyksbC5FZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBuMixwMihlLChGbigpLCExKSxuZXcgbGUpLHAyKGUsITAsbmV3IGxlKSxlfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyMiRUeXBlIiwxMDYzKSxJKDEwNjQsMSx7fSx6dCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBjdChvdChYbiwxKSxJZSwxLDUsW3RoaXMuYV0pfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNSRUeXBlIiwxMDY0KSxJKDEwNjUsMSx7fSxlZSksbC5PZD1mdW5jdGlvbihlLG4pe090bih0aGlzLmEsczIoZSkpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNiRUeXBlIiwxMDY1KSxJKDEwNjYsMSx7fSxWdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBzZW4odGhpcy5hLHMyKGUpLHMyKG4pKX0sUChJcywiQ29sbGVjdG9ycy9sYW1iZGEkMjckVHlwZSIsMTA2NiksSSgxMDY3LDEse30sZHMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMyKGUpWzBdfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyOCRUeXBlIiwxMDY3KSxJKDcxMywxLHt9LERyKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHp2dChlLG4pfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ0JFR5cGUiLDcxMyksSSgyNTIsMSx7fSxuciksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBsWWUodShlLDE0KSx1KG4sMTQpKX0sUChJcywiQ29sbGVjdG9ycy9sYW1iZGEkNDIkVHlwZSIsMjUyKSxJKDM0OCwxLHt9LGRpKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGhZZSh1KGUsNTMpLHUobiw1MykpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ1MCRUeXBlIiwzNDgpLEkoMzQ5LDEse30sRWUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1Myl9LFAoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDUxJFR5cGUiLDM0OSksSSgxMDU0LDEse30sZmUpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtXY24odGhpcy5hLHUoZSw4Myksbil9LFAoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDckVHlwZSIsMTA1NCksSSgxMDU2LDEse30sWW4pLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geGNuKHUoZSw4MyksdShuLDgzKSxuZXcgeWEpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ4JFR5cGUiLDEwNTYpLEkoMTA1NywxLHt9LGdlKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsbG4odGhpcy5hLHUoZSw4MykpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ5JFR5cGUiLDEwNTcpLEkoNTM5LDEse30pLGwuSGU9ZnVuY3Rpb24oKXtMQyh0aGlzKX0sbC5kPSExLFAoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbSIsNTM5KSxJKDgxMiw1MzksJHh0LEcydCksbC5IZT1mdW5jdGlvbigpe0xDKHRoaXMpfSxQKElzLCJEb3VibGVTdHJlYW1JbXBsIiw4MTIpLEkoMTc4NCw3MjEsTWgsTUt0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiB3Zm4odGhpcyx1KGUsMTgyKSl9LGwuYT1udWxsLFAoSXMsIkRvdWJsZVN0cmVhbUltcGwvMiIsMTc4NCksSSgxNzg1LDEsTkQsbmUpLGwud2U9ZnVuY3Rpb24oZSl7clhlKHRoaXMuYSxlKX0sUChJcywiRG91YmxlU3RyZWFtSW1wbC8yL2xhbWJkYSQwJFR5cGUiLDE3ODUpLEkoMTc4MiwxLE5ELFBlKSxsLndlPWZ1bmN0aW9uKGUpe25YZSh0aGlzLmEsZSl9LFAoSXMsIkRvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDAkVHlwZSIsMTc4MiksSSgxNzgzLDEsTkQscGUpLGwud2U9ZnVuY3Rpb24oZSl7cGllKHRoaXMuYSxlKX0sUChJcywiRG91YmxlU3RyZWFtSW1wbC9sYW1iZGEkMiRUeXBlIiwxNzgzKSxJKDEzNTgsNzIwLE1oLHZKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4geGluKHRoaXMsdShlLDE5NikpfSxsLmE9MCxsLmI9MCxsLmM9MCxQKElzLCJJbnRTdHJlYW0vNSIsMTM1OCksSSg3ODcsNTM5LCR4dCxWMnQpLGwuSGU9ZnVuY3Rpb24oKXtMQyh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiAkcCh0aGlzKSx0aGlzLmF9LFAoSXMsIkludFN0cmVhbUltcGwiLDc4NyksSSg3ODgsNTM5LCR4dCxmYnQpLGwuSGU9ZnVuY3Rpb24oKXtMQyh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiAkcCh0aGlzKSxkMnQoKSxPZ2V9LFAoSXMsIkludFN0cmVhbUltcGwvRW1wdHkiLDc4OCksSSgxNDYzLDEsQUQsYm4pLGwudWQ9ZnVuY3Rpb24oZSl7X25lKHRoaXMuYSxlKX0sUChJcywiSW50U3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxNDYzKTt2YXIgcnhuPVlpKElzLCJTdHJlYW0iKTtJKDMwLDUzOSx7NTI1OjEsNjcwOjEsODMzOjF9LFRuKSxsLkhlPWZ1bmN0aW9uKCl7TEModGhpcyl9O3ZhciBKRTtQKElzLCJTdHJlYW1JbXBsIiwzMCksSSg4NDUsMSx7fSxIZSksbC5sZD1mdW5jdGlvbihlKXtyZXR1cm4gREt0KGUpfSxQKElzLCJTdHJlYW1JbXBsLzBtZXRob2RyZWYkbGFtYmRhJDIkVHlwZSIsODQ1KSxJKDEwODQsNTQwLE1oLHNLdCksbC5zZD1mdW5jdGlvbihlKXtmb3IoO2hhbih0aGlzKTspe2lmKHRoaXMuYS5zZChlKSlyZXR1cm4hMDtMQyh0aGlzLmIpLHRoaXMuYj1udWxsLHRoaXMuYT1udWxsfXJldHVybiExfSxQKElzLCJTdHJlYW1JbXBsLzEiLDEwODQpLEkoMTA4NSwxLFVuLHplKSxsLnRkPWZ1bmN0aW9uKGUpe290bih0aGlzLmEsdShlLDgzMykpfSxQKElzLCJTdHJlYW1JbXBsLzEvbGFtYmRhJDAkVHlwZSIsMTA4NSksSSgxMDg2LDEsdWksVmUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIE5zKHRoaXMuYSxlKX0sUChJcywiU3RyZWFtSW1wbC8xbWV0aG9kcmVmJGFkZCRUeXBlIiwxMDg2KSxJKDEwODcsNTQwLE1oLE5YdCksbC5zZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5hfHwobj1uZXcgbGUsdGhpcy5iLmEuTmIobmV3IEVuKG4pKSx2bigpLFhzKG4sdGhpcy5jKSx0aGlzLmE9bmV3IF9uKG4sMTYpKSxzZWUodGhpcy5hLGUpfSxsLmE9bnVsbCxQKElzLCJTdHJlYW1JbXBsLzUiLDEwODcpLEkoMTA4OCwxLFVuLEVuKSxsLnRkPWZ1bmN0aW9uKGUpe3VlKHRoaXMuYSxlKX0sUChJcywiU3RyZWFtSW1wbC81LzJtZXRob2RyZWYkYWRkJFR5cGUiLDEwODgpLEkoNzIyLDU0MCxNaCxMbXQpLGwuc2Q9ZnVuY3Rpb24oZSl7Zm9yKHRoaXMuYj0hMTshdGhpcy5iJiZ0aGlzLmMuc2QobmV3IE9HdCh0aGlzLGUpKTspO3JldHVybiB0aGlzLmJ9LGwuYj0hMSxQKElzLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yIiw3MjIpLEkoMTA3OSwxLFVuLE9HdCksbC50ZD1mdW5jdGlvbihlKXtpZW4odGhpcy5hLHRoaXMuYixlKX0sUChJcywiU3RyZWFtSW1wbC9GaWx0ZXJTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc5KSxJKDEwNzUsNzIxLE1oLExKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4gV1FlKHRoaXMsdShlLDE4MikpfSxQKElzLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IiLDEwNzUpLEkoMTA3OCwxLFVuLE5HdCksbC50ZD1mdW5jdGlvbihlKXtDWWUodGhpcy5hLHRoaXMuYixlKX0sUChJcywiU3RyZWFtSW1wbC9NYXBUb0RvdWJsZVNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwNzgpLEkoMTA3NCw3MjAsTWgsTUp0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiBLUWUodGhpcyx1KGUsMTk2KSl9LFAoSXMsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvciIsMTA3NCksSSgxMDc3LDEsVW4sUEd0KSxsLnRkPWZ1bmN0aW9uKGUpe1RZZSh0aGlzLmEsdGhpcy5iLGUpfSxQKElzLCJTdHJlYW1JbXBsL01hcFRvSW50U3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA3NyksSSg3MTksNTQwLE1oLHZtdCksbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gbkt0KHRoaXMsZSl9LFAoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvciIsNzE5KSxJKDEwNzYsMSxVbixGR3QpLGwudGQ9ZnVuY3Rpb24oZSl7X1llKHRoaXMuYSx0aGlzLmIsZSl9LFAoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc2KSxJKDYxOCwxLFVuLFRpKSxsLnRkPWZ1bmN0aW9uKGUpe3Z0dCh0aGlzLGUpfSxQKElzLCJTdHJlYW1JbXBsL1ZhbHVlQ29uc3VtZXIiLDYxOCksSSgxMDgwLDEsVW4sZ24pLGwudGQ9ZnVuY3Rpb24oZSl7V2IoKX0sUChJcywiU3RyZWFtSW1wbC9sYW1iZGEkMCRUeXBlIiwxMDgwKSxJKDEwODEsMSxVbixrcyksbC50ZD1mdW5jdGlvbihlKXtXYigpfSxQKElzLCJTdHJlYW1JbXBsL2xhbWJkYSQxJFR5cGUiLDEwODEpLEkoMTA4MiwxLHt9LERuKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFRaZSh0aGlzLmEsZSxuKX0sUChJcywiU3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxMDgyKSxJKDEwODMsMSxVbixER3QpLGwudGQ9ZnVuY3Rpb24oZSl7TlFlKHRoaXMuYix0aGlzLmEsZSl9LFAoSXMsIlN0cmVhbUltcGwvbGFtYmRhJDUkVHlwZSIsMTA4MyksSSgxMDg5LDEsVW4sS24pLGwudGQ9ZnVuY3Rpb24oZSl7JGNuKHRoaXMuYSx1KGUsMzY1KSl9LFAoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbS9sYW1iZGEkMCRUeXBlIiwxMDg5KSxJKDIwNDEsMSx7fSksSSgxOTE0LDEse30scWEpLFAoImphdmFlbXVsLmludGVybmFsIiwiQ29uc29sZUxvZ2dlciIsMTkxNCksSSgyMDM4LDEse30pO3ZhciBpeG49MCxJRXQsREV0PTAsWUg7SSgxNzY4LDEsVW4sTGEpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDMwOCl9LFAoT0UsIkJvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDAkVHlwZSIsMTc2OCksSSgxNzY5LDEsVW4sU24pLGwudGQ9ZnVuY3Rpb24oZSl7VWEodGhpcy5hLHUoZSwzMDgpLmUpfSxQKE9FLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQxJFR5cGUiLDE3NjkpLEkoMTc3MCwxLFVuLEdzKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxNjgpfSxQKE9FLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NzApLEkoMTc2NSwxLE9pLFduKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRzbih0aGlzLmEsdShlLDE2OCksdShuLDE2OCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoT0UsIk5haXZlTWluU1QvbGFtYmRhJDAkVHlwZSIsMTc2NSksSSg0OTksMSx7fSxyciksUChPRSwiTm9kZU1pY3JvTGF5b3V0Iiw0OTkpLEkoMTY4LDEsezE2ODoxfSxUeCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSwxNjgpPyhuPXUoZSwxNjgpLFBjKHRoaXMuYSxuLmEpJiZQYyh0aGlzLmIsbi5iKXx8UGModGhpcy5hLG4uYikmJlBjKHRoaXMuYixuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBHMyh0aGlzLmEpK0czKHRoaXMuYil9O3ZhciBzeG49UChPRSwiVEVkZ2UiLDE2OCk7SSgzMDgsMSx7MzA4OjF9LGl4dCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSwzMDgpPyhuPXUoZSwzMDgpLEIkKHRoaXMsbi5hKSYmQiQodGhpcyxuLmIpJiZCJCh0aGlzLG4uYykpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEczKHRoaXMuYSkrRzModGhpcy5iKStHMyh0aGlzLmMpfSxQKE9FLCJUVHJpYW5nbGUiLDMwOCksSSgyMjEsMSx7MjIxOjF9LGNqKSxQKE9FLCJUcmVlIiwyMjEpLEkoMTI1NCwxLHt9LHhRdCksUChwZmUsIlNjYW5saW5lIiwxMjU0KTt2YXIgemdlPVlpKHBmZSxiZmUpO0koMTY5MiwxLHt9LHVlZSksUChyMCwiQ0dyYXBoIiwxNjkyKSxJKDMwNywxLHszMDc6MX0sYlF0KSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmc9MCxsLmk9MCxsLms9VHMsUChyMCwiQ0dyb3VwIiwzMDcpLEkoODE1LDEse30sSXB0KSxQKHIwLCJDR3JvdXAvQ0dyb3VwQnVpbGRlciIsODE1KSxJKDU3LDEsezU3OjF9LCRXdCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmo/QnIodGhpcy5qLktiKHRoaXMpKTooTDAoWEgpLFhILm8rIkAiKyhlPUl2KHRoaXMpPj4+MCxlLnRvU3RyaW5nKDE2KSkpfSxsLmY9MCxsLmk9VHM7dmFyIFhIPVAocjAsIkNOb2RlIiw1Nyk7SSg4MTQsMSx7fSxEcHQpLFAocjAsIkNOb2RlL0NOb2RlQnVpbGRlciIsODE0KTt2YXIgcWdlO0koMTUyNSwxLHt9LE5vKSxsLk9lPWZ1bmN0aW9uKGUsbil7cmV0dXJuIDB9LGwuUGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gMH0sUChyMCx3ZmUsMTUyNSksSSgxNzkwLDEse30sdnMpLGwuTGU9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3IoQz1zcyxzPW5ldyBTKGUuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOyluPXUoSihzKSw1NyksQz1iLk1hdGgubWluKEMsbi5hLmouZC5jK24uYi5hKTtmb3IoVj1uZXcgUWksZD1uZXcgUyhlLmEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMzA3KSxoLms9QyxoLmc9PTAmJmhzKFYsaCxWLmMuYixWLmMpO2Zvcig7Vi5iIT0wOyl7Zm9yKGg9dShWLmI9PTA/bnVsbDooUW4oVi5iIT0wKSxjaChWLFYuYS5hKSksMzA3KSxvPWguai5kLmMsSD1oLmEuYS5lYygpLktjKCk7SC5PYigpOylNPXUoSC5QYigpLDU3KSx0dD1oLmsrTS5iLmEsIWJ1bihlLGgsZS5kKXx8TS5kLmM8dHQ/TS5pPXR0Ok0uaT1NLmQuYztmb3Ioby09aC5qLmksaC5iKz1vLGUuZD09KGFvKCksa2YpfHxlLmQ9PVEwP2guYys9bzpoLmMtPW8sRj1oLmEuYS5lYygpLktjKCk7Ri5PYigpOylmb3IoTT11KEYuUGIoKSw1Nyksaz1NLmMuS2MoKTtrLk9iKCk7KXc9dShrLlBiKCksNTcpLE9wKGUuZCk/WT1lLmcuT2UoTSx3KTpZPWUuZy5QZShNLHcpLHcuYS5rPWIuTWF0aC5tYXgody5hLmssTS5pK00uZC5iK1ktdy5iLmEpLHFYdChlLHcsZS5kKSYmKHcuYS5rPWIuTWF0aC5tYXgody5hLmssdy5kLmMtdy5iLmEpKSwtLXcuYS5nLHcuYS5nPT0wJiZuaShWLHcuYSl9Zm9yKHI9bmV3IFMoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxuLmQuYz1uLml9LFAocjAsIkxvbmdlc3RQYXRoQ29tcGFjdGlvbiIsMTc5MCksSSgxNjkwLDEse30sRm9lKSxsLmU9ITE7dmFyIEhnZSxHZ2UsVmdlLE11dD1QKHIwLHhmZSwxNjkwKTtJKDE2OTEsMSxVbix2ciksbC50ZD1mdW5jdGlvbihlKXt3Y24odGhpcy5hLHUoZSw0NikpfSxQKHIwLGtmZSwxNjkxKSxJKDE3OTEsMSx7fSxudSksbC5NZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iocj1uZXcgUyhlLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLG4uYy4kYigpO2ZvcihvPW5ldyBTKGUuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksNTcpLGQ9bmV3IFMoZS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDU3KSxzIT1oJiYocy5hJiZzLmE9PWguYXx8KE9wKGUuZCk/dz1lLmcuUGUocyxoKTp3PWUuZy5PZShzLGgpLChoLmQuYz5zLmQuY3x8cy5kLmM9PWguZC5jJiZzLmQuYjxoLmQuYikmJnJobihoLmQuZCtoLmQuYSt3LHMuZC5kKSYmQzN0KGguZC5kLHMuZC5kK3MuZC5hK3cpJiZzLmMuRmMoaCkpKX0sUChyMCwiUXVhZHJhdGljQ29uc3RyYWludENhbGN1bGF0aW9uIiwxNzkxKSxJKDUyMiwxLHs1MjI6MX0scXR0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsUChyMCxFZmUsNTIyKSxJKDgwMywxLHt9LFd2dCksbC5NZT1mdW5jdGlvbihlKXt0aGlzLmM9ZSxhRCh0aGlzLG5ldyBmbSl9LFAocjAsVGZlLDgwMyksSSgxNzE4LDEsezY3OToxfSxHWHQpLGwuS2U9ZnVuY3Rpb24oZSl7ZGduKHRoaXMsdShlLDQ2NCkpfSxQKHIwLENmZSwxNzE4KSxJKDE3MTksMSxPaSwkcyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBnbm4odShlLDU3KSx1KG4sNTcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHIwLF9mZSwxNzE5KSxJKDQ2NCwxLHs0NjQ6MX0sa2J0KSxsLmE9ITEsUChyMCxTZmUsNDY0KSxJKDE3MjAsMSxPaSxMdSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBDMW4odShlLDQ2NCksdShuLDQ2NCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAocjAsQWZlLDE3MjApLEkoMTcyMSwxLHdkLGZtKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sUChyMCwiU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNzIxKSxJKDQyOCwyMix7MzoxLDM1OjEsMjI6MSw0Mjg6MX0sQ2J0KTt2YXIgT0V0LEl1dCxORXQ9anIod290LCJIaWdoTGV2ZWxTb3J0aW5nQ3JpdGVyaW9uIiw0MjgsSHIsdHJuLG9aZSksVWdlO0koNDI3LDIyLHszOjEsMzU6MSwyMjoxLDQyNzoxfSxfYnQpO3ZhciBQRXQsRHV0LEZFdD1qcih3b3QsIkxvd0xldmVsU29ydGluZ0NyaXRlcmlvbiIsNDI3LEhyLGVybixjWmUpLFdnZSxSND1ZaShRbywiSUxheW91dE1ldGFEYXRhUHJvdmlkZXIiKTtJKDg1MywxLEloLFVMKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHeHQpLG1vdCksIlBvbHlvbWlubyBUcmF2ZXJzYWwgU3RyYXRlZ3kiKSwiVHJhdmVyc2FsIHN0cmF0ZWd5IGZvciB0cnlpbmcgZGlmZmVyZW50IGNhbmRpZGF0ZSBwb3NpdGlvbnMgZm9yIHBvbHlvbWlub2VzLiIpLEhFdCksKGpnKCksY3MpKSxaRXQpLHVuKChYZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFZ4dCksbW90KSwiUG9seW9taW5vIFNlY29uZGFyeSBTb3J0aW5nIENyaXRlcmlvbiIpLCJQb3NzaWJsZSBzZWNvbmRhcnkgc29ydGluZyBjcml0ZXJpYSBmb3IgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcG9seW9taW5vZXMuIFRoZXkgYXJlIHVzZWQgd2hlbiBwb2x5b21pbm9lcyBhcmUgZXF1YWwgYWNjb3JkaW5nIHRvIHRoZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaW9uIEhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24uIiksekV0KSxjcyksRkV0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFV4dCksbW90KSwiUG9seW9taW5vIFByaW1hcnkgU29ydGluZyBDcml0ZXJpb24iKSwiUG9zc2libGUgcHJpbWFyeSBzb3J0aW5nIGNyaXRlcmlhIGZvciB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBwb2x5b21pbm9lcy4iKSxqRXQpLGNzKSxORXQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsV3h0KSxtb3QpLCJGaWxsIFBvbHlvbWlub2VzIiksIlVzZSB0aGUgUHJvZmlsZSBGaWxsIGFsZ29yaXRobSB0byBmaWxsIHBvbHlvbWlub2VzIHRvIHByZXZlbnQgc21hbGwgcG9seW9taW5vZXMgZnJvbSBiZWluZyBwbGFjZWQgaW5zaWRlIG9mIGJpZyBwb2x5b21pbm9lcyB3aXRoIGxhcmdlIGhvbGVzLiBNaWdodCBpbmNyZWFzZSBwYWNraW5nIGFyZWEuIiksKEZuKCksITApKSxBYSksQnMpLHVuKHFuKSkpKX07dmFyIEJFdCxSRXQsakV0LCRFdCx6RXQscUV0LEhFdDtQKHdvdCwiUG9seW9taW5vT3B0aW9ucyIsODUzKSxJKDI1MCwyMix7MzoxLDM1OjEsMjI6MSwyNTA6MX0sajMpO3ZhciBHRXQsVkV0LFVFdCxXRXQsS0V0LFlFdCxPdXQsWEV0LFFFdCxaRXQ9anIod290LCJUcmF2ZXJzYWxTdHJhdGVneSIsMjUwLEhyLGdvbix1WmUpLEtnZTtJKDIxMywxLHsyMTM6MX0sYXYpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTkVkZ2VbaWQ9Iit0aGlzLmIrIiB3PSIrdGhpcy5nKyIgZD0iK3RoaXMuYSsiXSJ9LGwuYT0xLGwuYj0wLGwuYz0wLGwuZj0hMSxsLmc9MDt2YXIgWWdlPVAoRF8sIk5FZGdlIiwyMTMpO0koMTc2LDEse30sRWgpLFAoRF8sIk5FZGdlL05FZGdlQnVpbGRlciIsMTc2KSxJKDY1MywxLHt9LEd0dCksUChEXywiTkdyYXBoIiw2NTMpLEkoMTIxLDEsezEyMToxfSxTSnQpLGwuYz0tMSxsLmQ9MCxsLmU9MCxsLmk9LTEsbC5qPSExO3ZhciBKRXQ9UChEXywiTk5vZGUiLDEyMSk7SSg3OTUsMSxoZmUsQXB0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5hZD1mdW5jdGlvbihlKXtlNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLlZjPWZ1bmN0aW9uKGUsbil7Kyt0aGlzLmIsJG0odGhpcy5hLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHBqKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4rK3RoaXMuYixSeXQodGhpcy5hLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuKyt0aGlzLmIsQXModGhpcy5hLGUpfSxsLiRiPWZ1bmN0aW9uKCl7Kyt0aGlzLmIsdGhpcy5hLmM9UHQoWG4sSWUsMSwwLDUsMSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApIT0tMX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gSUkodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBGZSh0aGlzLmEsZSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBLeChuZXcgUyh0aGlzLmEpKX0sbC5ZYz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuWmM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4rK3RoaXMuYixBZyh0aGlzLmEsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEwydCh0aGlzLGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuKyt0aGlzLmIsYWgodGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBLZCh0aGlzLmEsZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBpbnQodGhpcy5hKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gRDEodGhpcy5hLGUpfSxsLmI9MCxQKERfLCJOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCIsNzk1KSxJKDI2OSwxLHt9LFViKSxQKERfLCJOTm9kZS9OTm9kZUJ1aWxkZXIiLDI2OSksSSgxNjMwLDEse30sVXUpLGwuYT0hMSxsLmY9dmksbC5qPTAsUChEXywiTmV0d29ya1NpbXBsZXgiLDE2MzApLEkoMTI5NCwxLFVuLHVyKSxsLnRkPWZ1bmN0aW9uKGUpe2xoZSh0aGlzLmEsdShlLDY4MCksITAsITEpfSxQKExmZSwiTm9kZUxhYmVsQW5kU2l6ZUNhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTI5NCksSSg1NTgsMSx7fSx0ciksbC5iPSEwLGwuYz0hMCxsLmQ9ITAsbC5lPSEwLFAoTGZlLCJOb2RlTWFyZ2luQ2FsY3VsYXRvciIsNTU4KSxJKDIxMiwxLHsyMTI6MX0pLGwuaj0hMSxsLms9ITE7dmFyIFhnZT1QKGsyLCJDZWxsIiwyMTIpO0koMTI0LDIxMix7MTI0OjEsMjEyOjF9LFVXdCksbC5SZT1mdW5jdGlvbigpe3JldHVybiBMaih0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMubix0aGlzLmEuYStlLmIrZS5jfSxQKGsyLCJBdG9taWNDZWxsIiwxMjQpLEkoMjMyLDIyLHszOjEsMzU6MSwyMjoxLDIzMjoxfSxiZXQpO3ZhciBzYyx0dSxhYyxNeT1qcihrMiwiQ29udGFpbmVyQXJlYSIsMjMyLEhyLF9ybixsWmUpLFFnZTtJKDMyNiwyMTIsTWZlKSxQKGsyLCJDb250YWluZXJDZWxsIiwzMjYpLEkoMTQ3MywzMjYsTWZlLHVpZSksbC5SZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPTAsdGhpcy5lP3RoaXMuYj9lPXRoaXMuYi5iOnRoaXMuYVsxXVsxXSYmKGU9dGhpcy5hWzFdWzFdLlJlKCkpOmU9YTN0KHRoaXMseHNlKHRoaXMsITApKSxlPjA/ZSt0aGlzLm4uZCt0aGlzLm4uYTowfSxsLlNlPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztpZihvPTAsdGhpcy5lKXRoaXMuYj9vPXRoaXMuYi5hOnRoaXMuYVsxXVsxXSYmKG89dGhpcy5hWzFdWzFdLlNlKCkpO2Vsc2UgaWYodGhpcy5nKW89YTN0KHRoaXMseHN0KHRoaXMsbnVsbCwhMCkpO2Vsc2UgZm9yKG49KEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG89Yi5NYXRoLm1heChvLGEzdCh0aGlzLHhzdCh0aGlzLGUsITApKSk7cmV0dXJuIG8+MD9vK3RoaXMubi5iK3RoaXMubi5jOjB9LGwuVGU9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2lmKHRoaXMuZylmb3IoZT14c3QodGhpcyxudWxsLCExKSxyPShLZigpLGN0KG90KE15LDEpLGFlLDIzMiwwLFtzYyx0dSxhY10pKSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxLY2UodGhpcyxuLGUpO2Vsc2UgZm9yKHI9KEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGU9eHN0KHRoaXMsbiwhMSksS2NlKHRoaXMsbixlKX0sbC5VZT1mdW5jdGlvbigpe3ZhciBlLG4scixzO249dGhpcy5pLGU9dGhpcy5uLHM9eHNlKHRoaXMsITEpLGxtdCh0aGlzLChLZigpLHNjKSxuLmQrZS5kLHMpLGxtdCh0aGlzLGFjLG4uZCtuLmEtZS5hLXNbMl0scykscj1uLmEtZS5kLWUuYSxzWzBdPjAmJihzWzBdKz10aGlzLmQsci09c1swXSksc1syXT4wJiYoc1syXSs9dGhpcy5kLHItPXNbMl0pLHRoaXMuYy5hPWIuTWF0aC5tYXgoMCxyKSx0aGlzLmMuZD1uLmQrZS5kKyh0aGlzLmMuYS1yKS8yLHNbMV09Yi5NYXRoLm1heChzWzFdLHIpLGxtdCh0aGlzLHR1LG4uZCtlLmQrc1swXS0oc1sxXS1yKS8yLHMpfSxsLmI9bnVsbCxsLmQ9MCxsLmU9ITEsbC5mPSExLGwuZz0hMTt2YXIgTnV0PTAsUUg9MDtQKGsyLCJHcmlkQ29udGFpbmVyQ2VsbCIsMTQ3MyksSSg0NjEsMjIsezM6MSwzNToxLDIyOjEsNDYxOjF9LHZldCk7dmFyIGNiLFNkLG1mLFpnZT1qcihrMiwiSG9yaXpvbnRhbExhYmVsQWxpZ25tZW50Iiw0NjEsSHIsU3JuLGhaZSksSmdlO0koMzA2LDIxMix7MjEyOjEsMzA2OjF9LGlRdCxoZWUsZVF0KSxsLlJlPWZ1bmN0aW9uKCl7cmV0dXJuIHFLdCh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiBCdnQodGhpcyl9LGwuYT0wLGwuYz0hMTt2YXIgYXhuPVAoazIsIkxhYmVsQ2VsbCIsMzA2KTtJKDI0NCwzMjYsezIxMjoxLDMyNjoxLDI0NDoxfSxyXyksbC5SZT1mdW5jdGlvbigpe3JldHVybiBjRCh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiB1RCh0aGlzKX0sbC5UZT1mdW5jdGlvbigpe2ZhdCh0aGlzKX0sbC5VZT1mdW5jdGlvbigpe2RhdCh0aGlzKX0sbC5iPTAsbC5jPTAsbC5kPSExLFAoazIsIlN0cmlwQ29udGFpbmVyQ2VsbCIsMjQ0KSxJKDE2MjYsMSx1aSxabCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVEtlKHUoZSwyMTIpKX0sUChrMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQwJFR5cGUiLDE2MjYpLEkoMTYyNywxLHt9LFBhKSxsLkZlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMjEyKS5TZSgpfSxQKGsyLCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDEkVHlwZSIsMTYyNyksSSgxNjI4LDEsdWksQWwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIENLZSh1KGUsMjEyKSl9LFAoazIsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMiRUeXBlIiwxNjI4KSxJKDE2MjksMSx7fSx1YSksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIxMikuUmUoKX0sUChrMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQzJFR5cGUiLDE2MjkpLEkoNDYyLDIyLHszOjEsMzU6MSwyMjoxLDQ2MjoxfSx3ZXQpO3ZhciB5Zix1YixlMSx0cGU9anIoazIsIlZlcnRpY2FsTGFiZWxBbGlnbm1lbnQiLDQ2MixIcixBcm4sZlplKSxlcGU7SSg3ODksMSx7fSx5eHQpLGwuYz0wLGwuZD0wLGwuaz0wLGwucz0wLGwudD0wLGwudj0hMSxsLnc9MCxsLkQ9ITEsUChCcSwiTm9kZUNvbnRleHQiLDc4OSksSSgxNDcxLDEsT2ksYmMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaVV0KHUoZSw2MSksdShuLDYxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChCcSwiTm9kZUNvbnRleHQvMG1ldGhvZHJlZiRjb21wYXJlUG9ydFNpZGVzJFR5cGUiLDE0NzEpLEkoMTQ3MiwxLE9pLENjKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpkbih1KGUsMTExKSx1KG4sMTExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChCcSwiTm9kZUNvbnRleHQvMW1ldGhvZHJlZiRjb21wYXJlUG9ydENvbnRleHRzJFR5cGUiLDE0NzIpLEkoMTU5LDIyLHszOjEsMzU6MSwyMjoxLDE1OToxfSx1aCk7dmFyIG5wZSxycGUsaXBlLHNwZSxhcGUsb3BlLGNwZSx1cGUsbHBlLGhwZSxmcGUsZHBlLGdwZSxwcGUsYnBlLHZwZSx3cGUsbXBlLHlwZSx4cGUsa3BlLFB1dCxFcGU9anIoQnEsIk5vZGVMYWJlbExvY2F0aW9uIiwxNTksSHIsSml0LGRaZSksVHBlO0koMTExLDEsezExMToxfSxCb2UpLGwuYT0hMSxQKEJxLCJQb3J0Q29udGV4dCIsMTExKSxJKDE0NzYsMSxVbixnYSksbC50ZD1mdW5jdGlvbihlKXtFSHQodShlLDMwNikpfSxQKEZELElmZSwxNDc2KSxJKDE0NzcsMSx1aSxNYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSwxMTEpLmN9LFAoRkQsRGZlLDE0NzcpLEkoMTQ3OCwxLFVuLEhhKSxsLnRkPWZ1bmN0aW9uKGUpe0VIdCh1KGUsMTExKS5jKX0sUChGRCwiTGFiZWxQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQ3OCk7dmFyIHQ3dDtJKDE0NzUsMSxVbixfYyksbC50ZD1mdW5jdGlvbihlKXtCbSgpLGlLZSh1KGUsMTExKSl9LFAoRkQsIk5vZGVMYWJlbEFuZFNpemVVdGlsaXRpZXMvbGFtYmRhJDAkVHlwZSIsMTQ3NSksSSg3OTAsMSxVbixidnQpLGwudGQ9ZnVuY3Rpb24oZSl7YlllKHRoaXMuYix0aGlzLmMsdGhpcy5hLHUoZSwxODEpKX0sbC5hPSExLGwuYz0hMSxQKEZELCJOb2RlTGFiZWxDZWxsQ3JlYXRvci9sYW1iZGEkMCRUeXBlIiw3OTApLEkoMTQ3NCwxLFVuLHduKSxsLnRkPWZ1bmN0aW9uKGUpe29LZSh0aGlzLmEsdShlLDE4MSkpfSxQKEZELCJQb3J0Q29udGV4dENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsMTQ3NCk7dmFyIFpIO0koMTgyOSwxLHt9LG92KSxQKFBFLCJHcmVlZHlSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyIiwxODI5KSxJKDE4MzAsMSxPaSxMbCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBLWGUodShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoUEUsIkdyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMG1ldGhvZHJlZiRjb21wYXJlQnlZQ29vcmRpbmF0ZSRUeXBlIiwxODMwKSxJKDE3ODYsMSx7fSxlcXQpLGwuYT01LGwuZT0wLFAoUEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIiLDE3ODYpLEkoMTc4NywxLE9pLFoxKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFlYZSh1KGUsMjIyKSx1KG4sMjIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChQRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVMZWZ0UmVjdGFuZ2xlQm9yZGVycyRUeXBlIiwxNzg3KSxJKDE3ODksMSxPaSxGZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBtZW4odShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoUEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMW1ldGhvZHJlZiRjb21wYXJlUmlnaHRSZWN0YW5nbGVCb3JkZXJzJFR5cGUiLDE3ODkpLEkoNDA2LDIyLHszOjEsMzU6MSwyMjoxLDQwNjoxfSx6Uik7dmFyIHNPLEZ1dCxCdXQsYU8sQ3BlPWpyKFBFLCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL092ZXJsYXBSZW1vdmFsRGlyZWN0aW9uIiw0MDYsSHIsU2luLGdaZSksX3BlO0koMjIyLDEsezIyMjoxfSxEbnQpLFAoUEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvUmVjdGFuZ2xlTm9kZSIsMjIyKSxJKDE3ODgsMSxVbixnciksbC50ZD1mdW5jdGlvbihlKXtFZm4odGhpcy5hLHUoZSwyMjIpKX0sUChQRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlIiwxNzg4KSxJKDEzMDQsMSxPaSxKMSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBMeW4odShlLDE2NyksdShuLDE2NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAobWQsIlBvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDQpLEkoMTMwNywxLHt9LEJkKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMDcpLEkoMTMwOCwxLHVpLEUwKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDEzMDgpLEkoMTMwOSwxLHVpLEJpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDEzMDkpLEkoMTMwMiwxLE9pLG9uKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHV3bih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChtZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IiLDEzMDIpLEkoMTMwNSwxLHt9LEpsKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzA1KSxJKDc2NywxLE9pLGtyKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGhjbih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChtZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uc0NvbXBhcmF0b3IiLDc2NyksSSgxMzAwLDEsT2ksRWkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geW9uKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvciIsMTMwMCksSSgxMzAxLDEsT2ksSm8pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWGhuKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcldpdGhTaGFwZSIsMTMwMSksSSgxMzAzLDEsT2ksdmMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHduKHUoZSwxNjcpLHUobiwxNjcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDMpLEkoMTMwNiwxLHt9LHRmKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMwNiksSSg3NzcsMSx7fSxFYnQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRWluKHRoaXMsdShlLDQ2KSx1KG4sMTY3KSl9LFAobWQsIlN1Y2Nlc3NvckNvbWJpbmF0aW9uIiw3NzcpLEkoNjQ0LDEse30sT2MpLGwuQ2U9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gZnBuKChyPXUoZSw0NiksdShuLDE2NykscikpfSxQKG1kLCJTdWNjZXNzb3JKaXR0ZXIiLDY0NCksSSg2NDMsMSx7fSxlZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiB0dm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LFAobWQsIlN1Y2Nlc3NvckxpbmVCeUxpbmUiLDY0MyksSSg1NjgsMSx7fSxuZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBkYm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LFAobWQsIlN1Y2Nlc3Nvck1hbmhhdHRhbiIsNTY4KSxJKDEzNTYsMSx7fSxYaSksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBUMm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LFAobWQsIlN1Y2Nlc3Nvck1heE5vcm1XaW5kaW5nSW5NYXRoUG9zU2Vuc2UiLDEzNTYpLEkoNDAwLDEse30sZnIpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaHd0KHRoaXMsZSxuKX0sbC5jPSExLGwuZD0hMSxsLmU9ITEsbC5mPSExLFAobWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMiLDQwMCksSSgxMzU3LDEse30sRXMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMjQpLmF9LFAobWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMvbGFtYmRhJDAkVHlwZSIsMTM1NyksSSgzMjMsMjIsezM6MSwzNToxLDIyOjEsMzIzOjF9LCRSKSxsLmE9ITE7dmFyIG9PLGNPLHVPLGxPLFNwZT1qcihqcSxReHQsMzIzLEhyLE1pbixwWmUpLEFwZTtJKDEyOTgsMSx7fSksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtmb3Iocj0iICIsZT1kZSgwKSxvPTA7bzx0aGlzLm87bysrKXIrPSIiK2UuYSxlPWRlKFBXdChlLmEpKTtmb3Iocis9YApgLGU9ZGUoMCksaD0wO2g8dGhpcy5wO2grKyl7Zm9yKHIrPSIiK2UuYSxlPWRlKFBXdChlLmEpKSxzPTA7czx0aGlzLm87cysrKW49YWl0KHRoaXMscyxoKSx5YyhuLDApPT0wP3IrPSJfIjp5YyhuLDEpPT0wP3IrPSJYIjpyKz0iMCI7cis9YApgfXJldHVybiBEbChyLDAsci5sZW5ndGgtMSl9LGwubz0wLGwucD0wLFAoanEsIlR3b0JpdEdyaWQiLDEyOTgpLEkoMzIxLDEyOTgsezMyMToxfSx3M3QpLGwuaj0wLGwuaz0wLFAoanEsIlBsYW5hckdyaWQiLDMyMSksSSgxNjcsMzIxLHszMjE6MSwxNjc6MX0pLGwuZz0wLGwuaT0wLFAoanEsIlBvbHlvbWlubyIsMTY3KTt2YXIgb3huPVlpKEJELE5mZSk7SSgxMzQsMSxaeHQseGEpLGwuWWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRkkodGhpcyxlLG4pfSxsLlZlPWZ1bmN0aW9uKCl7cmV0dXJuIHJZdCh0aGlzKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLGUpfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh0aGlzLGUpfSxQKEJELCJNYXBQcm9wZXJ0eUhvbGRlciIsMTM0KSxJKDEyOTksMTM0LFp4dCxGY2UpLFAoanEsIlBvbHlvbWlub2VzIiwxMjk5KTt2YXIgTHBlPSExLGNTLGU3dDtJKDE3NjYsMSxVbix4aSksbC50ZD1mdW5jdGlvbihlKXtObGUodShlLDIyMSkpfSxQKHA2LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi8wbWV0aG9kcmVmJGNvbXBhY3RUcmVlJFR5cGUiLDE3NjYpLEkoODEwLDEsVW4sSnIpLGwudGQ9ZnVuY3Rpb24oZSl7R2VuKHRoaXMuYSx1KGUsMjIxKSl9LFAocDYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDgxMCksSSgxNzY3LDEsVW4sYkt0KSxsLnRkPWZ1bmN0aW9uKGUpe2dobih0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMjIxKSl9LFAocDYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NjcpO3ZhciB1UyxuN3Q7SSg2NSwxLHs2NToxfSxFUXQpLFAocDYsIk5vZGUiLDY1KSxJKDEyNTAsMSx7fSxUVXQpLFAocDYsIlNjYW5saW5lT3ZlcmxhcENoZWNrIiwxMjUwKSxJKDEyNTEsMSx7Njc5OjF9LEhYdCksbC5LZT1mdW5jdGlvbihlKXtTUWUodGhpcyx1KGUsNDQwKSl9LFAocDYsIlNjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyIiwxMjUxKSxJKDEyNTIsMSxPaSxXYyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBYdW4odShlLDY1KSx1KG4sNjUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHA2LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxMjUyKSxJKDQ0MCwxLHs0NDA6MX0sVGJ0KSxsLmE9ITEsUChwNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svVGltZXN0YW1wIiw0NDApLEkoMTI1MywxLE9pLENlKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIF8xbih1KGUsNDQwKSx1KG4sNDQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChwNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZSIsMTI1MyksSSg1NTAsMSx7fSxncCksUChQZmUsIlNWR0ltYWdlIiw1NTApLEkoMzI0LDEsezMyNDoxfSx2dnQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0thK3RoaXMuYitLYSt0aGlzLmMrIikifSxQKFBmZSwiVW5pcXVlVHJpcGxlIiwzMjQpLEkoMjA5LDEsRTIpLFAoUzQsIkFic3RyYWN0TGF5b3V0UHJvdmlkZXIiLDIwOSksSSgxMTMyLDIwOSxFMixCZSksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3N3aXRjaCh3cihuLEZmZSwxKSx0aGlzLmE9WHQoeWUocWUoZSwoaV8oKSxjN3QpKSkpLHIyKGUsanV0KSYmKG89QnIocWUoZSxqdXQpKSxyPXNhdCh6OCgpLG8pLHImJihzPXUobHJ0KHIuZiksMjA5KSxzLlplKGUsUmMobiwxKSkpKSxoPW5ldyBqWnQodGhpcy5hKSx0aGlzLmI9cDRuKGgsZSksdShxZShlLChTaXQoKSxpN3QpKSw0ODEpLmcpe2Nhc2UgMDpJcG4obmV3IEZmLHRoaXMuYiksYm8oZSxlRyxRKHRoaXMuYixlRykpO2JyZWFrO2RlZmF1bHQ6cWQoKX1FNG4oaCksYm8oZSxhN3QsdGhpcy5iKSxvcihuKX0sbC5hPTAsUChCZmUsIkRpc0NvTGF5b3V0UHJvdmlkZXIiLDExMzIpLEkoMTI0NCwxLHt9LEZmKSxsLmM9ITEsbC5lPTAsbC5mPTAsUChCZmUsIkRpc0NvUG9seW9taW5vQ29tcGFjdG9yIiwxMjQ0KSxJKDU2MSwxLHs1NjE6MX0sY1l0KSxsLmI9ITAsUCh6cSwiRENDb21wb25lbnQiLDU2MSksSSgzOTQsMjIsezM6MSwzNToxLDIyOjEsMzk0OjF9LGpSKSxsLmE9ITE7dmFyIEpILGhPLHRHLGZPLE1wZT1qcih6cSwiRENEaXJlY3Rpb24iLDM5NCxIcixMaW4sYlplKSxJcGU7SSgyNjYsMTM0LHszOjEsMjY2OjEsOTQ6MSwxMzQ6MX0sVnN0KSxQKHpxLCJEQ0VsZW1lbnQiLDI2NiksSSgzOTUsMSx7Mzk1OjF9LHEzdCksbC5jPTAsUCh6cSwiRENFeHRlbnNpb24iLDM5NSksSSg3NTUsMTM0LFp4dCxzSHQpLFAoenEsIkRDR3JhcGgiLDc1NSksSSg0ODEsMjIsezM6MSwzNToxLDIyOjEsNDgxOjF9LHVXdCk7dmFyIFJ1dCxyN3Q9anIoU290LEp4dCw0ODEsSHIsc25uLHZaZSksRHBlO0koODU0LDEsSWgsSUopLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHQ2dCksUmZlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgcGFja2luZyBkaWZmZXJlbnQgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBhbmQgZW5oYW5jZSByZWFkYWJpbGl0eSBvZiBhIGdyYXBoLiIpLHM3dCksKGpnKCksY3MpKSxyN3QpLHVuKChYZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGU2dCksUmZlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudHMgdGhlbXNlbHZlcyBhcmUgY29tcGFjdGVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29tcG9uZW50cycgbm9kZXMgYXJlIG5vdCBhbHRlcmVkLiIpLFQ3KSxBZSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxuNnQpLCJkZWJ1ZyIpLCJEQ0dyYXBoIiksIkFjY2VzcyB0byB0aGUgRENHcmFwaCBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIikscTEpLFhuKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHI2dCksImRlYnVnIiksIkxpc3Qgb2YgUG9seW9taW5vZXMiKSwiQWNjZXNzIHRvIHRoZSBwb2x5b21pbm9lcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIikscTEpLFhuKSx1bihxbikpKSksa2xlKChuZXcgTEIsZSkpfTt2YXIgT3BlLGk3dCxzN3QsTnBlLFBwZTtQKFNvdCwiRGlzQ29NZXRhRGF0YVByb3ZpZGVyIiw4NTQpLEkoOTk4LDEsSWgsTEIpLGwuUWU9ZnVuY3Rpb24oZSl7a2xlKGUpfTt2YXIgRnBlLGp1dCxCcGUsYTd0LGVHLCR1dCxvN3QsUnBlLGpwZSwkcGUsenBlLGM3dDtQKFNvdCwiRGlzQ29PcHRpb25zIiw5OTgpLEkoOTk5LDEse30sZGcpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgQmUsZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoU290LCJEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5Iiw5OTkpLEkoNTYyLDE2Nyx7MzIxOjEsMTY3OjEsNTYyOjF9LG1jZSksbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsUCgib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5zdHJ1Y3R1cmVzIiwiRENQb2x5b21pbm8iLDU2Mik7dmFyIHp1dCxxdXQsbkc7SSgxMjY4LDEsdWksZG0pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEpidChlKX0sUChBNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjgpLEkoMTI2OSwxLHt9LHBrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBqeCgpLFpkKHUoZSw3OSkpfSxQKEE0LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTI2OSksSSgxMjcwLDEsdWkseDMpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJ0bih1KGUsNzkpKX0sUChBNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDEyNzApLEkoMTI3MSwxLHt9LE1sKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBqeCgpLFhwKHUoZSw3OSkpfSxQKEE0LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTI3MSksSSgxMjcyLDEsdWksVDApLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZ0bih1KGUsNzkpKX0sUChBNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDEyNzIpLEkoMTI3MywxLHVpLHdpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBvcm4odGhpcy5hLHUoZSw3OSkpfSxQKEE0LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTI3MyksSSgxMjc0LDEse30sS3MpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIENlbih0aGlzLmEsdShlLDc5KSl9LFAoQTQsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxMjc0KSxJKDEyNDEsMSx7fSxqWnQpLGwuYT0wLFAoQTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIiLDEyNDEpLEkoMTI0MiwxLHt9LGN2KSxsLk9kPWZ1bmN0aW9uKGUsbil7YnBuKHRoaXMsdShlLDE2MCksdShuLDI2NikpfSxQKEE0LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIiLDEyNDIpLEkoMTI0MywxLFVuLGthKSxsLnRkPWZ1bmN0aW9uKGUpe3pYZSh0aGlzLHUoZSw4KSl9LFAoQTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIvT2Zmc2V0QXBwbGllci9PZmZTZXRUb0NoYWluQXBwbGllciIsMTI0MyksSSg3NTMsMSx7fSxGNSksUChzNnQsYTZ0LDc1MyksSSgxMjMyLDEsT2ksamIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnBuKHUoZSwyMzEpLHUobiwyMzEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHM2dCxqZmUsMTIzMiksSSg3NDAsMjA5LEUyLExwdCksbC5aZT1mdW5jdGlvbihlLG4pe2tjZSh0aGlzLGUsbil9LFAoczZ0LCJGb3JjZUxheW91dFByb3ZpZGVyIiw3NDApLEkoMzU3LDEzNCx7MzoxLDM1NzoxLDk0OjEsMTM0OjF9KSxQKFJELCJGUGFydGljbGUiLDM1NyksSSg1NTksMzU3LHszOjEsNTU5OjEsMzU3OjEsOTQ6MSwxMzQ6MX0sSFl0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT8oZT1Sbyh0aGlzLmEuYSx0aGlzLDApLGU+PTA/ImIiK2UrIlsiK01ydCh0aGlzLmEpKyJdIjoiYlsiK01ydCh0aGlzLmEpKyJdIik6ImJfIitJdih0aGlzKX0sUChSRCwiRkJlbmRwb2ludCIsNTU5KSxJKDI4MiwxMzQsezM6MSwyODI6MSw5NDoxLDEzNDoxfSxSV3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gTXJ0KHRoaXMpfSxQKFJELCJGRWRnZSIsMjgyKSxJKDIzMSwxMzQsezM6MSwyMzE6MSw5NDoxLDEzNDoxfSxfJCk7dmFyIGN4bj1QKFJELCJGR3JhcGgiLDIzMSk7SSg0NDcsMzU3LHszOjEsNDQ3OjEsMzU3OjEsOTQ6MSwxMzQ6MX0selp0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbHx8dGhpcy5iLmxlbmd0aD09MD8ibFsiK01ydCh0aGlzLmEpKyJdIjoibF8iK3RoaXMuYn0sUChSRCwiRkxhYmVsIiw0NDcpLEkoMTQ0LDM1Nyx7MzoxLDE0NDoxLDM1NzoxLDk0OjEsMTM0OjF9LFFZdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBxd3QodGhpcyl9LGwuYj0wLFAoUkQsIkZOb2RlIiwxNDQpLEkoMjAwMywxLHt9KSxsLmJmPWZ1bmN0aW9uKGUpe0o1dCh0aGlzLGUpfSxsLmNmPWZ1bmN0aW9uKCl7eXNlKHRoaXMpfSxsLmQ9MCxQKG82dCwiQWJzdHJhY3RGb3JjZU1vZGVsIiwyMDAzKSxJKDYzMSwyMDAzLHs2MzE6MX0sTW5lKSxsLmFmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gYm9lKHRoaXMuZixlLG4pLG89bmEobmMobi5kKSxlLmQpLGQ9Yi5NYXRoLnNxcnQoby5hKm8uYStvLmIqby5iKSxzPWIuTWF0aC5tYXgoMCxkLUFDKGUuZSkvMi1BQyhuLmUpLzIpLHI9YXJlKHRoaXMuZSxlLG4pLHI+MD9oPS1iZW4ocyx0aGlzLmMpKnI6aD1jUWUocyx0aGlzLmIpKnUoUShlLChaZigpLHQ3KSksMTkpLmEsdWQobyxoL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7SjV0KHRoaXMsZSksdGhpcy5hPXUoUShlLChaZigpLGlHKSksMTkpLmEsdGhpcy5jPVh0KHllKFEoZSxzRykpKSx0aGlzLmI9WHQoeWUoUShlLEd1dCkpKX0sbC5kZj1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmF9LGwuYT0wLGwuYj0wLGwuYz0wLFAobzZ0LCJFYWRlc01vZGVsIiw2MzEpLEkoNjMyLDIwMDMsezYzMjoxfSxJS3QpLGwuYWY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBib2UodGhpcy5mLGUsbiksbz1uYShuYyhuLmQpLGUuZCksZD1iLk1hdGguc3FydChvLmEqby5hK28uYipvLmIpLHM9Yi5NYXRoLm1heCgwLGQtQUMoZS5lKS8yLUFDKG4uZSkvMiksaD1vUWUocyx0aGlzLmEpKnUoUShlLChaZigpLHQ3KSksMTkpLmEscj1hcmUodGhpcy5lLGUsbikscj4wJiYoaC09eUtlKHMsdGhpcy5hKSpyKSx1ZChvLGgqdGhpcy5iL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKEo1dCh0aGlzLGUpLHRoaXMuYj1YdCh5ZShRKGUsKFpmKCksVnV0KSkpKSx0aGlzLmM9dGhpcy5iL3UoUShlLGlHKSwxOSkuYSxzPWUuZS5jLmxlbmd0aCxoPTAsbz0wLHc9bmV3IFMoZS5lKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxNDQpLGgrPWQuZS5hLG8rPWQuZS5iO249aCpvLHI9WHQoeWUoUShlLHNHKSkpKlAxLHRoaXMuYT1iLk1hdGguc3FydChuLygyKnMpKSpyfSxsLmNmPWZ1bmN0aW9uKCl7eXNlKHRoaXMpLHRoaXMuYi09dGhpcy5jfSxsLmRmPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmI+MH0sbC5hPTAsbC5iPTAsbC5jPTAsUChvNnQsIkZydWNodGVybWFuUmVpbmdvbGRNb2RlbCIsNjMyKSxJKDg0OSwxLEloLERKKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxxcSksIiIpLCJGb3JjZSBNb2RlbCIpLCJEZXRlcm1pbmVzIHRoZSBtb2RlbCBmb3IgZm9yY2UgY2FsY3VsYXRpb24uIiksdTd0KSwoamcoKSxjcykpLGw3dCksdW4oKFhmKCkscW4pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYzZ0KSwiIiksIkl0ZXJhdGlvbnMiKSwiVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9uIHRoZSBmb3JjZSBtb2RlbC4iKSxkZSgzMDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdTZ0KSwiIiksIlJlcHVsc2l2ZSBQb3dlciIpLCJEZXRlcm1pbmVzIGhvdyBtYW55IGJlbmQgcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgZWRnZTsgc3VjaCBiZW5kIHBvaW50cyBhcmUgcmVnYXJkZWQgYXMgcmVwZWxsaW5nIHBhcnRpY2xlcyBpbiB0aGUgZm9yY2UgbW9kZWwiKSxkZSgwKSksZ2MpLGphKSx1bihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLElvdCksIiIpLCJGUiBUZW1wZXJhdHVyZSIpLCJUaGUgdGVtcGVyYXR1cmUgaXMgdXNlZCBhcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBwYXJ0aWNsZSBkaXNwbGFjZW1lbnRzLiIpLHlkKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLElvdCxxcSxLcGUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxEb3QpLCIiKSwiRWFkZXMgUmVwdWxzaW9uIiksIkZhY3RvciBmb3IgcmVwdWxzaXZlIGZvcmNlcyBpbiBFYWRlcycgbW9kZWwuIiksNSksRG8pLGNhKSx1bihxbikpKSksYWEoZSxEb3QscXEsVnBlKSx2aGUoKG5ldyBkOSxlKSl9O3ZhciBxcGUsSHBlLHU3dCxHcGUsVnBlLFVwZSxXcGUsS3BlO1AoTl8sIkZvcmNlTWV0YURhdGFQcm92aWRlciIsODQ5KSxJKDQyNCwyMix7MzoxLDM1OjEsMjI6MSw0MjQ6MX0sU2J0KTt2YXIgSHV0LHJHLGw3dD1qcihOXywiRm9yY2VNb2RlbFN0cmF0ZWd5Iiw0MjQsSHIsbnJuLHdaZSksWXBlO0koOTg4LDEsSWgsZDkpLGwuUWU9ZnVuY3Rpb24oZSl7dmhlKGUpfTt2YXIgWHBlLFFwZSxoN3QsaUcsZjd0LFpwZSxKcGUsdGJlLGQ3dCxlYmUsZzd0LHA3dCxuYmUsdDcscmJlLEd1dCxiN3QsaWJlLHNiZSxzRyxWdXQ7UChOXywiRm9yY2VPcHRpb25zIiw5ODgpLEkoOTg5LDEse30sQjUpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgTHB0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKE5fLCJGb3JjZU9wdGlvbnMvRm9yY2VGYWN0b3J5Iiw5ODkpO3ZhciBkTyxsUyxDNixhRztJKDg1MCwxLEloLE9KKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxoNnQpLCIiKSwiRml4ZWQgUG9zaXRpb24iKSwiUHJldmVudCB0aGF0IHRoZSBub2RlIGlzIG1vdmVkIGJ5IHRoZSBsYXlvdXQgYWxnb3JpdGhtLiIpLChGbigpLCExKSksKGpnKCksQWEpKSxCcyksdW4oKFhmKCksSnMpKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZjZ0KSwiIiksIkRlc2lyZWQgRWRnZSBMZW5ndGgiKSwiRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLiIpLDEwMCksRG8pLGNhKSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbSWRdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGQ2dCksIiIpLCJMYXlvdXQgRGltZW5zaW9uIiksIkRpbWVuc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIGFsdGVyZWQgZHVyaW5nIGxheW91dC4iKSx2N3QpLGNzKSxUN3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZzZ0KSwiIiksIlN0cmVzcyBFcHNpbG9uIiksIlRlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLiIpLHlkKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscDZ0KSwiIiksIkl0ZXJhdGlvbiBMaW1pdCIpLCJNYXhpbXVtIG51bWJlciBvZiBwZXJmb3JtZWQgaXRlcmF0aW9ucy4gVGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiAnZXBzaWxvbicuIiksZGUodmkpKSxnYyksamEpLHVuKHFuKSkpKSxlaGUoKG5ldyBOSixlKSl9O3ZhciBhYmUsb2JlLHY3dCxjYmUsdWJlLGxiZTtQKE5fLCJTdHJlc3NNZXRhRGF0YVByb3ZpZGVyIiw4NTApLEkoOTkyLDEsSWgsTkopLGwuUWU9ZnVuY3Rpb24oZSl7ZWhlKGUpfTt2YXIgb0csdzd0LG03dCx5N3QseDd0LGs3dCxoYmUsZmJlLGRiZSxnYmUsRTd0LHBiZTtQKE5fLCJTdHJlc3NPcHRpb25zIiw5OTIpLEkoOTkzLDEse30sbDEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgald0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKE5fLCJTdHJlc3NPcHRpb25zL1N0cmVzc0ZhY3RvcnkiLDk5MyksSSgxMTI4LDIwOSxFMixqV3QpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2Zvcih3cihuLEdmZSwxKSxqZShSZShxZShlLChKSSgpLHg3dCkpKSk/amUoUmUocWUoZSxFN3QpKSl8fHUkKChyPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxyKSk6a2NlKG5ldyBMcHQsZSxSYyhuLDEpKSxvPVpuZShlKSxzPWhsZSh0aGlzLmEsbyksZD1zLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDIzMSksIShoLmUuYy5sZW5ndGg8PTEpJiYoU3luKHRoaXMuYixoKSxzYm4odGhpcy5iKSxtdShoLmQsbmV3IHRkKSk7bz1UaGUocykseGhlKG8pLG9yKG4pfSxQKFZxLCJTdHJlc3NMYXlvdXRQcm92aWRlciIsMTEyOCksSSgxMTI5LDEsVW4sdGQpLGwudGQ9ZnVuY3Rpb24oZSl7YXh0KHUoZSw0NDcpKX0sUChWcSwiU3RyZXNzTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTEyOSksSSg5OTAsMSx7fSxLenQpLGwuYz0wLGwuZT0wLGwuZz0wLFAoVnEsIlN0cmVzc01ham9yaXphdGlvbiIsOTkwKSxJKDM3OSwyMix7MzoxLDM1OjEsMjI6MSwzNzk6MX0sbWV0KTt2YXIgVXV0LFd1dCxLdXQsVDd0PWpyKFZxLCJTdHJlc3NNYWpvcml6YXRpb24vRGltZW5zaW9uIiwzNzksSHIsTXJuLG1aZSksYmJlO0koOTkxLDEsT2ksQ2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWVFlKHRoaXMuYSx1KGUsMTQ0KSx1KG4sMTQ0KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChWcSwiU3RyZXNzTWFqb3JpemF0aW9uL2xhbWJkYSQwJFR5cGUiLDk5MSksSSgxMjI5LDEse30sdFp0KSxQKG02LCJFbGtMYXllcmVkIiwxMjI5KSxJKDEyMzAsMSxVbixlZCksbC50ZD1mdW5jdGlvbihlKXthcG4odShlLDM3KSl9LFAobTYsIkVsa0xheWVyZWQvbGFtYmRhJDAkVHlwZSIsMTIzMCksSSgxMjMxLDEsVW4saGkpLGwudGQ9ZnVuY3Rpb24oZSl7WFFlKHRoaXMuYSx1KGUsMzcpKX0sUChtNiwiRWxrTGF5ZXJlZC9sYW1iZGEkMSRUeXBlIiwxMjMxKSxJKDEyNjMsMSx7fSxfVXQpO3ZhciB2YmUsd2JlLG1iZTtQKG02LCJHcmFwaENvbmZpZ3VyYXRvciIsMTI2MyksSSg3NTksMSxVbixncyksbC50ZD1mdW5jdGlvbihlKXtBYWUodGhpcy5hLHUoZSwxMCkpfSxQKG02LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMCRUeXBlIiw3NTkpLEkoNzYwLDEse30sUjUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHI0dCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sUChtNiwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDEkVHlwZSIsNzYwKSxJKDc2MSwxLFVuLHFpKSxsLnRkPWZ1bmN0aW9uKGUpe0FhZSh0aGlzLmEsdShlLDEwKSl9LFAobTYsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQyJFR5cGUiLDc2MSksSSgxMTI3LDIwOSxFMixRenQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyPUttbihuZXcgcnF0LGUpLEd0KHFlKGUsKFRlKCksankpKSk9PT1HdCgoJDAoKSxaZykpP19sbih0aGlzLmEscixuKTprcG4odGhpcy5hLHIsbiksYmhlKG5ldyBGSixyKX0sUChtNiwiTGF5ZXJlZExheW91dFByb3ZpZGVyIiwxMTI3KSxJKDM1NiwyMix7MzoxLDM1OjEsMjI6MSwzNTY6MX0seE0pO3ZhciBBZCxsYixvdSxxYyxJbyxDN3Q9anIobTYsIkxheWVyZWRQaGFzZXMiLDM1NixIcixkc24seVplKSx5YmU7SSgxNjUxLDEse30samVlKSxsLmk9MDt2YXIgeGJlO1AoekQsIkNvbXBvbmVudHNUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjUxKTt2YXIga2JlO0koMTY1MiwxLHt9LHV2KSxsLmVmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxsLmZmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxQKHpELCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci8xIiwxNjUyKSxJKDgxLDEsezgxOjF9KSxsLmk9MCxsLms9ITAsbC5vPVRzO3ZhciBZdXQ9UChCXywiQ05vZGUiLDgxKTtJKDQ2MCw4MSx7NDYwOjEsODE6MX0sQTJ0LEwzdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxQKHpELCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci9DUmVjdE5vZGUiLDQ2MCksSSgxNjIzLDEse30sajUpO3ZhciBYdXQsUXV0O1AoekQsIk9uZURpbWVuc2lvbmFsQ29tcG9uZW50c0NvbXBhY3Rpb24iLDE2MjMpLEkoMTYyNCwxLHt9LHBwKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB4cm4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKHpELCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQwJFR5cGUiLDE2MjQpLEkoMTYyNSwxLHt9LCQ1KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBObG4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKHpELCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDE2MjUpLEkoMTY1NCwxLHt9LFhZdCksUChCXywiQ0dyYXBoIiwxNjU0KSxJKDE4OSwxLHsxODk6MX0sWGl0KSxsLmI9MCxsLmM9MCxsLmU9MCxsLmc9ITAsbC5pPVRzLFAoQl8sIkNHcm91cCIsMTg5KSxJKDE2NTMsMSx7fSx3TCksbC5lZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sbC5mZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sUChCXyx3ZmUsMTY1MyksSSgxNjU1LDEse30sTG9lKSxsLmQ9ITE7dmFyIEViZSxadXQ9UChCXyx4ZmUsMTY1NSk7SSgxNjU2LDEse30sYmwpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGdidCgpLEZuKCksdSh1KGUsNDYpLmEsODEpLmQuZSE9MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoQl8sa2ZlLDE2NTYpLEkoODIzLDEse30sUnZ0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsUChCXyxFZmUsODIzKSxJKDE4MjUsMSx7fSxnWXQpLFAoVXEsVGZlLDE4MjUpO3ZhciBnTz1ZaShDMixiZmUpO0koMTgyNiwxLHszNjk6MX0sVlh0KSxsLktlPWZ1bmN0aW9uKGUpe3B2bih0aGlzLHUoZSw0NjYpKX0sUChVcSxDZmUsMTgyNiksSSgxODI3LDEsT2ksV1ApLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcG5uKHUoZSw4MSksdShuLDgxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChVcSxfZmUsMTgyNyksSSg0NjYsMSx7NDY2OjF9LExidCksbC5hPSExLFAoVXEsU2ZlLDQ2NiksSSgxODI4LDEsT2ksU2MpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUzFuKHUoZSw0NjYpLHUobiw0NjYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKFVxLEFmZSwxODI4KSxJKDE0MCwxLHsxNDA6MX0sYTgsT3Z0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT1udWxsfHx1eG4hPXNsKGUpPyExOihuPXUoZSwxNDApLFBjKHRoaXMuYyxuLmMpJiZQYyh0aGlzLmQsbi5kKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdnooY3Qob3QoWG4sMSksSWUsMSw1LFt0aGlzLmMsdGhpcy5kXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYytLYSt0aGlzLmQrKHRoaXMuYT8iY3giOiIiKSt0aGlzLmIrIikifSxsLmE9ITAsbC5jPTAsbC5kPTA7dmFyIHV4bj1QKEMyLCJQb2ludCIsMTQwKTtJKDQwNSwyMix7MzoxLDM1OjEsMjI6MSw0MDU6MX0scVIpO3ZhciBfdyxJeSxqNCxEeSxUYmU9anIoQzIsIlBvaW50L1F1YWRyYW50Iiw0MDUsSHIsSWluLHhaZSksQ2JlO0koMTY0MiwxLHt9LFp6dCksbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsbC5mPW51bGw7dmFyIF9iZSxTYmUsQWJlLExiZSxNYmU7UChDMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsIiwxNjQyKSxJKDU3NCwxLHszNjk6MX0sQnopLGwuS2U9ZnVuY3Rpb24oZSl7Z2FuKHRoaXMsdShlLDE0MCkpfSxsLmI9MDt2YXIgXzd0O1AoQzIsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXIiLDU3NCksSSgxNjQ0LDEsT2ksZ20pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaW5uKHllKGUpLHllKG4pKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLDE2NDQpLEkoMTY0MywxLHszNjk6MX0sY2VlKSxsLktlPWZ1bmN0aW9uKGUpe0Eybih0aGlzLHUoZSwxNDApKX0sbC5hPTAsbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsUChDMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlciIsMTY0MyksSSgxNjQ1LDEsT2ksZ2cpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb2luKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDAkVHlwZSIsMTY0NSksSSgxNjQ2LDEsT2ksazMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY2luKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZSIsMTY0NiksSSgxNjQ3LDEsT2ksUUspLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbGluKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZSIsMTY0NyksSSgxNjQ4LDEsT2ksJGIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdWluKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDMkVHlwZSIsMTY0OCksSSgxNjQ5LDEsT2ksWkspLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZjBuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZSIsMTY0OSksSSgxNjUwLDEse30sa1F0KSxQKEMyLCJTY2FubGluZSIsMTY1MCksSSgyMDA1LDEse30pLFAoeGQsIkFic3RyYWN0R3JhcGhQbGFjZXIiLDIwMDUpLEkoMzI1LDEsezMyNToxfSxnV3QpLGwubWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmYoZSk/KGxuKHRoaXMuYix1KFEoZSwoc2UoKSxOeSkpLDIxKSxlKSwhMCk6ITF9LGwubmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG49dShRKGUsKHNlKCksTnkpKSwyMSksbz11KEFpKE5pLG4pLDIxKSxzPW8uS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMjEpLCF1KEFpKHRoaXMuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIE5pO1AoeGQsIkNvbXBvbmVudEdyb3VwIiwzMjUpLEkoNzY1LDIwMDUse30sT3B0KSxsLm9mPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFModGhpcy5hKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMjUpLG4ubWYoZSkpcmV0dXJuO3VlKHRoaXMuYSxuZXcgZ1d0KGUpKX0sbC5sZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO2lmKHRoaXMuYS5jPVB0KFhuLEllLDEsMCw1LDEpLG4uYS5jPVB0KFhuLEllLDEsMCw1LDEpLGUuZGMoKSl7bi5mLmE9MCxuLmYuYj0wO3JldHVybn1mb3IoZD11KGUuWGIoMCksMzcpLExvKG4sZCksbz1lLktjKCk7by5PYigpOylzPXUoby5QYigpLDM3KSx0aGlzLm9mKHMpO2ZvcihZPW5ldyBUYSxoPVh0KHllKFEoZCwoVGUoKSxBTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXc9dShKKEMpLDMyNSksTT1EaGUodyxoKSxNZyhZaih3LmIpLFkuYSxZLmIpLFkuYSs9TS5hLFkuYis9TS5iO2lmKG4uZi5hPVkuYS1oLG4uZi5iPVkuYi1oLGplKFJlKFEoZCxXRykpKSYmR3QoUShkLFgwKSk9PT1HdCgocTAoKSxBNykpKXtmb3IoVj1lLktjKCk7Vi5PYigpOylGPXUoVi5QYigpLDM3KSx3XyhGLEYuYy5hLEYuYy5iKTtmb3Iocj1uZXcgSVQsX3h0KHIsZSxoKSxIPWUuS2MoKTtILk9iKCk7KUY9dShILlBiKCksMzcpLExpKEdmKEYuYyksci5lKTtMaShHZihuLmYpLHIuYSl9Zm9yKGs9bmV3IFModGhpcy5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwzMjUpLF9tdChuLFlqKHcuYikpfSxQKHhkLCJDb21wb25lbnRHcm91cEdyYXBoUGxhY2VyIiw3NjUpLEkoMTI5Myw3NjUse30sbHF0KSxsLm9mPWZ1bmN0aW9uKGUpe2pyZSh0aGlzLGUpfSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7aWYodGhpcy5hLmM9UHQoWG4sSWUsMSwwLDUsMSksbi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksZS5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihkPXUoZS5YYigwKSwzNyksTG8obixkKSxvPWUuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMzcpLGpyZSh0aGlzLHMpO2ZvcihCdD1uZXcgVGEsX3Q9bmV3IFRhLHR0PW5ldyBUYSxZPW5ldyBUYSxoPVh0KHllKFEoZCwoVGUoKSxBTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtpZih3PXUoSihDKSwzMjUpLE9wKHUoUShuLChjaSgpLGp3KSksMTAzKSkpe2Zvcih0dC5hPUJ0LmEsTHQ9bmV3IEQ5KFNDKFdudCh3LmIpLmEpLmEua2MoKSk7THQuYi5PYigpOylpZihndD11KFBSKEx0LmIuUGIoKSksMjEpLGd0LkhjKChiZSgpLE5uKSkpe3R0LmE9X3QuYTticmVha319ZWxzZSBpZihjOCh1KFEobixqdyksMTAzKSkpe2Zvcih0dC5iPUJ0LmIsTHQ9bmV3IEQ5KFNDKFdudCh3LmIpLmEpLmEua2MoKSk7THQuYi5PYigpOylpZihndD11KFBSKEx0LmIuUGIoKSksMjEpLGd0LkhjKChiZSgpLEJuKSkpe3R0LmI9X3QuYjticmVha319aWYoTT1EaGUodSh3LDU3MCksaCksTWcoWWoody5iKSx0dC5hLHR0LmIpLE9wKHUoUShuLGp3KSwxMDMpKSl7Zm9yKF90LmE9dHQuYStNLmEsWS5hPWIuTWF0aC5tYXgoWS5hLF90LmEpLEx0PW5ldyBEOShTQyhXbnQody5iKS5hKS5hLmtjKCkpO0x0LmIuT2IoKTspaWYoZ3Q9dShQUihMdC5iLlBiKCkpLDIxKSxndC5IYygoYmUoKSxtcikpKXtCdC5hPXR0LmErTS5hO2JyZWFrfV90LmI9dHQuYitNLmIsdHQuYj1fdC5iLFkuYj1iLk1hdGgubWF4KFkuYix0dC5iKX1lbHNlIGlmKGM4KHUoUShuLGp3KSwxMDMpKSl7Zm9yKF90LmI9dHQuYitNLmIsWS5iPWIuTWF0aC5tYXgoWS5iLF90LmIpLEx0PW5ldyBEOShTQyhXbnQody5iKS5hKS5hLmtjKCkpO0x0LmIuT2IoKTspaWYoZ3Q9dShQUihMdC5iLlBiKCkpLDIxKSxndC5IYygoYmUoKSxIbikpKXtCdC5iPXR0LmIrTS5iO2JyZWFrfV90LmE9dHQuYStNLmEsdHQuYT1fdC5hLFkuYT1iLk1hdGgubWF4KFkuYSx0dC5hKX19aWYobi5mLmE9WS5hLWgsbi5mLmI9WS5iLWgsamUoUmUoUShkLFdHKSkpJiZHdChRKGQsWDApKT09PUd0KChxMCgpLEE3KSkpe2ZvcihWPWUuS2MoKTtWLk9iKCk7KUY9dShWLlBiKCksMzcpLHdfKEYsRi5jLmEsRi5jLmIpO2ZvcihyPW5ldyBJVCxfeHQocixlLGgpLEg9ZS5LYygpO0guT2IoKTspRj11KEguUGIoKSwzNyksTGkoR2YoRi5jKSxyLmUpO0xpKEdmKG4uZiksci5hKX1mb3Ioaz1uZXcgUyh0aGlzLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDMyNSksX210KG4sWWoody5iKSl9LFAoeGQsIkNvbXBvbmVudEdyb3VwTW9kZWxPcmRlckdyYXBoUGxhY2VyIiwxMjkzKSxJKDQyMywyMix7MzoxLDM1OjEsMjI6MSw0MjM6MX0seWV0KTt2YXIgSnV0LFM3dCwkNCxBN3Q9anIoeGQsIkNvbXBvbmVudE9yZGVyaW5nU3RyYXRlZ3kiLDQyMyxIcixMcm4sa1plKSxJYmU7SSg2NTAsMSx7fSxJVCksUCh4ZCwiQ29tcG9uZW50c0NvbXBhY3RvciIsNjUwKSxJKDE0NjgsMTIsdWZlLGJKdCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gbF8odGhpcyx1KGUsMTQwKSl9LFAoeGQsIkNvbXBvbmVudHNDb21wYWN0b3IvSHVsbHBvaW50cyIsMTQ2OCksSSgxNDY1LDEsezg0MToxfSxlc2UpLGwuYT0hMSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29tcG9uZW50IiwxNDY1KSxJKDE0NjQsMSx0MCxKenQpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzLmEpfSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29ubmVjdGVkQ29tcG9uZW50cyIsMTQ2NCksSSgxNDY3LDEsezU5NDoxfSxJb2UpLGwuaGY9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5qZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdHN0KHRoaXMuZCl9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsRXh0ZXJuYWxFeHRlbnNpb24iLDE0NjcpLEkoMTQ2NiwxLHs1OTQ6MX0sbnF0KSxsLmpmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5nZj1mdW5jdGlvbigpe3JldHVybiB0c3QodGhpcy5kKX0sbC5oZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsVW5pb25FeHRlcm5hbEV4dGVuc2lvbiIsMTQ2NiksSSgxNDcwLDEse30sWWNlKSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL091dGVyU2VnbWVudHMiLDE0NzApLEkoMTQ2OSwxLHt9LHRxdCksUCh4ZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9TZWdtZW50cyIsMTQ2OSksSSgxMjY0LDEse30sVVh0KSxQKHhkLGE2dCwxMjY0KSxJKDEyNjUsMSxPaSxKSyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkaW4odShlLDM3KSx1KG4sMzcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHhkLCJDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjUpLEkoNTcwLDMyNSx7MzI1OjEsNTcwOjF9LHBKdCksbC5tZj1mdW5jdGlvbihlKXtyZXR1cm4gT3l0KHRoaXMsZSl9LGwubmY9ZnVuY3Rpb24oZSl7cmV0dXJuIExjZSh0aGlzLGUpfTt2YXIgUXI7UCh4ZCwiTW9kZWxPcmRlckNvbXBvbmVudEdyb3VwIiw1NzApLEkoMTI5MSwyMDA1LHt9LEtQKSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2U7aWYoZS5nYygpPT0xKXtCdD11KGUuWGIoMCksMzcpLEJ0IT1uJiYobi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksTnVlKG4sQnQsMCwwKSxMbyhuLEJ0KSxTd3Qobi5kLEJ0LmQpLG4uZi5hPUJ0LmYuYSxuLmYuYj1CdC5mLmIpO3JldHVybn1lbHNlIGlmKGUuZGMoKSl7bi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksbi5mLmE9MCxuLmYuYj0wO3JldHVybn1pZihHdChRKG4sKFRlKCksUDYpKSk9PT1HdCgoZXcoKSwkNCkpKXtmb3Ioaz1lLktjKCk7ay5PYigpOyl7Zm9yKGQ9dShrLlBiKCksMzcpLEx0PTAsdHQ9bmV3IFMoZC5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KVk9dShKKHR0KSwxMCksTHQrPXUoUShZLFB3ZSksMTkpLmE7ZC5wPUx0fXZuKCksZS5hZChuZXcgQmYpfWZvcihoPXUoZS5YYigwKSwzNyksbi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksTG8obixoKSxWPTAsWXQ9MCxDPWUuS2MoKTtDLk9iKCk7KWQ9dShDLlBiKCksMzcpLF90PWQuZixWPWIuTWF0aC5tYXgoVixfdC5hKSxZdCs9X3QuYSpfdC5iO2ZvcihWPWIuTWF0aC5tYXgoVixiLk1hdGguc3FydChZdCkqWHQoeWUoUShuLFVHKSkpKSxvPVh0KHllKFEobixBTykpKSxjZT0wLFNlPTAsSD0wLHI9byx3PWUuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMzcpLF90PWQuZixjZStfdC5hPlYmJihjZT0wLFNlKz1IK28sSD0wKSxndD1kLmMsd18oZCxjZStndC5hLFNlK2d0LmIpLEdmKGd0KSxyPWIuTWF0aC5tYXgocixjZStfdC5hKSxIPWIuTWF0aC5tYXgoSCxfdC5iKSxjZSs9X3QuYStvO2lmKG4uZi5hPXIsbi5mLmI9U2UrSCxqZShSZShRKGgsV0cpKSkpe2ZvcihzPW5ldyBJVCxfeHQocyxlLG8pLEY9ZS5LYygpO0YuT2IoKTspTT11KEYuUGIoKSwzNyksTGkoR2YoTS5jKSxzLmUpO0xpKEdmKG4uZikscy5hKX1fbXQobixlKX0sUCh4ZCwiU2ltcGxlUm93R3JhcGhQbGFjZXIiLDEyOTEpLEkoMTI5MiwxLE9pLEJmKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGxjbih1KGUsMzcpLHUobiwzNykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoeGQsIlNpbXBsZVJvd0dyYXBoUGxhY2VyLzEiLDEyOTIpO3ZhciBEYmU7SSgxMjYyLDEsd2QscG0pLGwuTGI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShRKHUoZSwyNDMpLmIsKFRlKCksX28pKSw3NCksISFuJiZuLmIhPTB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUoUSh1KGUsMjQzKS5iLChUZSgpLF9vKSksNzQpLCEhbiYmbi5iIT0wfSxQKFdxLCJDb21wb3VuZEdyYXBoUG9zdHByb2Nlc3Nvci8xIiwxMjYyKSxJKDEyNjEsMSxhcyxpcXQpLGwucGY9ZnVuY3Rpb24oZSxuKXtyc2UodGhpcyx1KGUsMzcpLG4pfSxQKFdxLCJDb21wb3VuZEdyYXBoUHJlcHJvY2Vzc29yIiwxMjYxKSxJKDQ0MSwxLHs0NDE6MX0sR3JlKSxsLmM9ITEsUChXcSwiQ29tcG91bmRHcmFwaFByZXByb2Nlc3Nvci9FeHRlcm5hbFBvcnQiLDQ0MSksSSgyNDMsMSx7MjQzOjF9LFRqKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHNudCh0aGlzLmMpKyI6IitDb2UodGhpcy5iKX0sUChXcSwiQ3Jvc3NIaWVyYXJjaHlFZGdlIiwyNDMpLEkoNzYzLDEsT2ksU2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSmZuKHRoaXMsdShlLDI0MyksdShuLDI0MykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoV3EsIkNyb3NzSGllcmFyY2h5RWRnZUNvbXBhcmF0b3IiLDc2MyksSSgyOTksMTM0LHszOjEsMjk5OjEsOTQ6MSwxMzQ6MX0pLGwucD0wLFAoSmMsIkxHcmFwaEVsZW1lbnQiLDI5OSksSSgxNywyOTksezM6MSwxNzoxLDI5OToxLDk0OjEsMTM0OjF9LHp2KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIENvZSh0aGlzKX07dmFyIHRsdD1QKEpjLCJMRWRnZSIsMTcpO0koMzcsMjk5LHszOjEsMjA6MSwzNzoxLDI5OToxLDk0OjEsMTM0OjF9LEttdCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTKHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RoPT0wPyJHLXVubGF5ZXJlZCIrUXAodGhpcy5hKTp0aGlzLmEuYy5sZW5ndGg9PTA/IkctbGF5ZXJlZCIrUXAodGhpcy5iKToiR1tsYXllcmxlc3MiK1FwKHRoaXMuYSkrIiwgbGF5ZXJzIitRcCh0aGlzLmIpKyJdIn07dmFyIE9iZT1QKEpjLCJMR3JhcGgiLDM3KSxOYmU7SSg2NTcsMSx7fSksbC5xZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUubn0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLmUsZSl9LGwucmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLm99LGwuc2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLnB9LGwuWGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHRoaXMuZSxlKX0sbC50Zj1mdW5jdGlvbihlKXt0aGlzLmUubi5hPWUuYSx0aGlzLmUubi5iPWUuYn0sbC51Zj1mdW5jdGlvbihlKXt0aGlzLmUuby5hPWUuYSx0aGlzLmUuby5iPWUuYn0sbC52Zj1mdW5jdGlvbihlKXt0aGlzLmUucD1lfSxQKEpjLCJMR3JhcGhBZGFwdGVycy9BYnN0cmFjdExTaGFwZUFkYXB0ZXIiLDY1NyksSSg1NzcsMSx7ODM5OjF9LFVpKSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9SGQodGhpcy5hLmIuYy5sZW5ndGgpLG49bmV3IFModGhpcy5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSx1ZSh0aGlzLmIsbmV3IEdhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLmI9bnVsbCxQKEpjLCJMR3JhcGhBZGFwdGVycy9MRWRnZUFkYXB0ZXIiLDU3NyksSSg2NTYsMSx7fSx0cnQpLGwueGY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYoIXRoaXMuYil7Zm9yKHRoaXMuYj1uZXcgbGUscz1uZXcgUyh0aGlzLmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLHRoaXMuYy5NYihvKSYmKHVlKHRoaXMuYixuZXcgQ2oodGhpcyxvLHRoaXMuZSkpLHRoaXMuZCkpe2lmKFZzKG8sKHNlKCksTjYpKSlmb3Iobj11KFEobyxONiksMTUpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDEwKSx1ZSh0aGlzLmIsbmV3IENqKHRoaXMsZSwhMSkpO2lmKFZzKG8sTDYpKWZvcihuPXUoUShvLEw2KSwxNSkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksMTApLHVlKHRoaXMuYixuZXcgQ2oodGhpcyxlLCExKSl9fXJldHVybiB0aGlzLmJ9LGwucWY9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgeWcoV2ZlKSl9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFEodGhpcy5hLGUpfSxsLnJmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxsLnNmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5wfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh0aGlzLmEsZSl9LGwudGY9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IHlnKFdmZSkpfSxsLnVmPWZ1bmN0aW9uKGUpe3RoaXMuYS5mLmE9ZS5hLHRoaXMuYS5mLmI9ZS5ifSxsLnZmPWZ1bmN0aW9uKGUpe3RoaXMuYS5wPWV9LGwuYj1udWxsLGwuZD0hMSxsLmU9ITEsUChKYywiTEdyYXBoQWRhcHRlcnMvTEdyYXBoQWRhcHRlciIsNjU2KSxJKDU3Niw2NTcsezE4MToxfSxHYSksUChKYywiTEdyYXBoQWRhcHRlcnMvTExhYmVsQWRhcHRlciIsNTc2KSxJKDU3NSw2NTcsezY4MDoxfSxDaiksbC55Zj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuemY9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSx2bigpLGlvfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9SGQodSh0aGlzLmUsMTApLmIuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTApLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSx1ZSh0aGlzLmEsbmV3IEdhKGUpKTtyZXR1cm4gdGhpcy5hfSxsLkFmPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmUsMTApLmQsbmV3IG52dChlLmQsZS5jLGUuYSxlLmIpfSxsLkJmPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCksdm4oKSxpb30sbC5DZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPUhkKHUodGhpcy5lLDEwKS5qLmMubGVuZ3RoKSxuPW5ldyBTKHUodGhpcy5lLDEwKS5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSksdWUodGhpcy5jLG5ldyBZR3QoZSx0aGlzLmQpKTtyZXR1cm4gdGhpcy5jfSxsLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTApLChzZSgpLEtUdCkpKSl9LGwuRWY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmQuYj1lLmIsdSh0aGlzLmUsMTApLmQuZD1lLmQsdSh0aGlzLmUsMTApLmQuYz1lLmMsdSh0aGlzLmUsMTApLmQuYT1lLmF9LGwuRmY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmYuYj1lLmIsdSh0aGlzLmUsMTApLmYuZD1lLmQsdSh0aGlzLmUsMTApLmYuYz1lLmMsdSh0aGlzLmUsMTApLmYuYT1lLmF9LGwuR2Y9ZnVuY3Rpb24oKXtLYW4odGhpcywoejkoKSxOYmUpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLFAoSmMsIkxHcmFwaEFkYXB0ZXJzL0xOb2RlQWRhcHRlciIsNTc1KSxJKDE3MjIsNjU3LHs4Mzg6MX0sWUd0KSxsLnpmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oR24oKSxIYykpcmV0dXJuIHZuKCksdm4oKSxpbztpZighdGhpcy5hKXtmb3IodGhpcy5hPW5ldyBsZSxyPW5ldyBTKHUodGhpcy5lLDExKS5lKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksdWUodGhpcy5hLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChzZSgpLFp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihqbyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDE3KSx1ZSh0aGlzLmEsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5hfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9SGQodSh0aGlzLmUsMTEpLmYuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTEpLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSx1ZSh0aGlzLmIsbmV3IEdhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLkJmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oR24oKSxIYykpcmV0dXJuIHZuKCksdm4oKSxpbztpZighdGhpcy5jKXtmb3IodGhpcy5jPW5ldyBsZSxyPW5ldyBTKHUodGhpcy5lLDExKS5nKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksdWUodGhpcy5jLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChzZSgpLFp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihNcyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDE3KSx1ZSh0aGlzLmMsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5jfSxsLkhmPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5lLDExKS5qfSxsLklmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTEpLChzZSgpLGtPKSkpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLFAoSmMsIkxHcmFwaEFkYXB0ZXJzL0xQb3J0QWRhcHRlciIsMTcyMiksSSgxNzIzLDEsT2ksbUwpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4genZuKHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChKYywiTEdyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDE3MjMpLEkoODA0LDEsdWksWVApLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCksejkoKSwhMH0sUChKYywiTEdyYXBoQWRhcHRlcnMvbGFtYmRhJDAkVHlwZSIsODA0KSxJKDM5MiwyOTksezM6MSwyOTk6MSwzOTI6MSw5NDoxLDEzNDoxfSksUChKYywiTFNoYXBlIiwzOTIpLEkoNzAsMzkyLHszOjEsMjk5OjEsNzA6MSwzOTI6MSw5NDoxLDEzNDoxfSxjSHQsdTJ0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bXRuKHRoaXMpLGU9PW51bGw/ImxhYmVsIjoibF8iK2V9LFAoSmMsIkxMYWJlbCIsNzApLEkoMjA3LDEsezM6MSw0OjEsMjA3OjEsNDE0OjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDIwNyk/KG49dShlLDIwNyksdGhpcy5kPT1uLmQmJnRoaXMuYT09bi5hJiZ0aGlzLmI9PW4uYiYmdGhpcy5jPT1uLmMpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gZT1vOCh0aGlzLmIpPDwxNixlfD1vOCh0aGlzLmEpJm1zLG49bzgodGhpcy5jKTw8MTYsbnw9bzgodGhpcy5kKSZtcyxlXm59LGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtmb3IoaD0wO2g8ZS5sZW5ndGgmJk1yZSgoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpKSxZZmUpOykrK2g7Zm9yKG49ZS5sZW5ndGg7bj4wJiZNcmUoKFJyKG4tMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4tMSkpLFhmZSk7KS0tbjtpZihoPG4pe009cHkoZS5zdWJzdHIoaCxuLWgpLCIsfDsiKTt0cnl7Zm9yKHc9TSxrPTAsQz13Lmxlbmd0aDtrPEM7KytrKXtpZihkPXdba10sbz1weShkLCI9Iiksby5sZW5ndGghPTIpdGhyb3cgcnQobmV3IFBuKCJFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4iKSk7cz11eShvWzBdKSxGPWx5KHV5KG9bMV0pKSxobihzLCJ0b3AiKT90aGlzLmQ9RjpobihzLCJsZWZ0Iik/dGhpcy5iPUY6aG4ocywiYm90dG9tIik/dGhpcy5hPUY6aG4ocywicmlnaHQiKSYmKHRoaXMuYz1GKX19Y2F0Y2goSCl7dGhyb3cgSD1XaShIKSxFdChILDEyNyk/KHI9SCxydChuZXcgUG4oUWZlK3IpKSk6cnQoSCl9fX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJbdG9wPSIrdGhpcy5kKyIsbGVmdD0iK3RoaXMuYisiLGJvdHRvbT0iK3RoaXMuYSsiLHJpZ2h0PSIrdGhpcy5jKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsUChxRCwiU3BhY2luZyIsMjA3KSxJKDE0MiwyMDcsWmZlLE05LGNVdCxudnQsd250KTt2YXIgTDd0PVAocUQsIkVsa01hcmdpbiIsMTQyKTtJKDY1MSwxNDIsWmZlLFZ0dCksUChKYywiTE1hcmdpbiIsNjUxKSxJKDEwLDM5Mix7MzoxLDI5OToxLDEwOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sSDApLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWGllKHRoaXMpfSxsLmk9ITE7dmFyIG8wPVAoSmMsIkxOb2RlIiwxMCk7SSgyNjcsMjIsezM6MSwzNToxLDIyOjEsMjY3OjF9LEs5KTt2YXIgajEseHMsU2wsWnMsRHMsSGMsZWx0PWpyKEpjLCJMTm9kZS9Ob2RlVHlwZSIsMjY3LEhyLGlhbixFWmUpLFBiZTtJKDExNiwyMDcsSmZlLHd4LE12LHB2dCk7dmFyIE03dD1QKHFELCJFbGtQYWRkaW5nIiwxMTYpO0koNzY0LDExNixKZmUsRnB0KSxQKEpjLCJMUGFkZGluZyIsNzY0KSxJKDExLDM5Mix7MzoxLDI5OToxLDExOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sTWMpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7cmV0dXJuIGU9bmV3IF9wLFZyKChlLmErPSJwXyIsZSksV3oodGhpcykpLHRoaXMuaSYmVnIoaGMoKGUuYSs9IlsiLGUpLHRoaXMuaSksIl0iKSx0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmdShGZSh0aGlzLmUsMCksMTcpLmMhPXRoaXMmJihuPXUoRmUodGhpcy5lLDApLDE3KS5jLFZyKChlLmErPSIgPDwgIixlKSxXeihuKSksVnIoaGMoKGUuYSs9IlsiLGUpLG4uaSksIl0iKSksdGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJnUoRmUodGhpcy5nLDApLDE3KS5kIT10aGlzJiYocj11KEZlKHRoaXMuZywwKSwxNykuZCxWcigoZS5hKz0iID4+ICIsZSksV3oocikpLFZyKGhjKChlLmErPSJbIixlKSxyLmkpLCJdIikpLGUuYX0sbC5jPSEwLGwuZD0hMTt2YXIgSTd0LEQ3dCxPN3QsTjd0LFA3dCxGN3QsRmJlPVAoSmMsIkxQb3J0IiwxMSk7SSgzOTcsMSx0MCxZcyksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFModGhpcy5hLmUpLG5ldyB6cyhlKX0sUChKYywiTFBvcnQvMSIsMzk3KSxJKDEyOTAsMSxyYSx6cyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5jfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFZvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtfQyh0aGlzLmEpfSxQKEpjLCJMUG9ydC8xLzEiLDEyOTApLEkoMzU5LDEsdDAsRXIpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBTKHRoaXMuYS5nKSxuZXcgUXQoZSl9LFAoSmMsIkxQb3J0LzIiLDM1OSksSSg3NjIsMSxyYSxRdCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5kfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFZvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtfQyh0aGlzLmEpfSxQKEpjLCJMUG9ydC8yLzEiLDc2MiksSSgxMjgzLDEsdDAsVkd0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFMxKHRoaXMpfSxQKEpjLCJMUG9ydC9Db21iaW5lSXRlciIsMTI4MyksSSgyMDEsMSxyYSxTMSksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlFiPWZ1bmN0aW9uKCl7cEh0KCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gcEModGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gVm8odGhpcy5hKT9KKHRoaXMuYSk6Sih0aGlzLmIpfSxQKEpjLCJMUG9ydC9Db21iaW5lSXRlci8xIiwyMDEpLEkoMTI4NSwxLHdkLGJwKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBfWXQoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBCdSgpLHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sUChKYywiTFBvcnQvbGFtYmRhJDAkVHlwZSIsMTI4NSksSSgxMjg0LDEsd2QsYm0pLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFNZdChlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5nLmMubGVuZ3RoIT0wfSxQKEpjLCJMUG9ydC9sYW1iZGEkMSRUeXBlIiwxMjg0KSxJKDEyODYsMSx3ZCx0WSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gQnUoKSx1KGUsMTEpLmo9PShiZSgpLE5uKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5qPT0oYmUoKSxObil9LFAoSmMsIkxQb3J0L2xhbWJkYSQyJFR5cGUiLDEyODYpLEkoMTI4NywxLHdkLHpiKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBCdSgpLHUoZSwxMSkuaj09KGJlKCksSG4pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gQnUoKSx1KGUsMTEpLmo9PShiZSgpLEhuKX0sUChKYywiTFBvcnQvbGFtYmRhJDMkVHlwZSIsMTI4NyksSSgxMjg4LDEsd2QsZVkpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5qPT0oYmUoKSxtcil9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBCdSgpLHUoZSwxMSkuaj09KGJlKCksbXIpfSxQKEpjLCJMUG9ydC9sYW1iZGEkNCRUeXBlIiwxMjg4KSxJKDEyODksMSx3ZCxuWSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gQnUoKSx1KGUsMTEpLmo9PShiZSgpLEJuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5qPT0oYmUoKSxCbil9LFAoSmMsIkxQb3J0L2xhbWJkYSQ1JFR5cGUiLDEyODkpLEkoMjksMjk5LHszOjEsMjA6MSwyOTk6MSwyOToxLDk0OjEsMTM0OjF9LENoKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMXyIrUm8odGhpcy5iLmIsdGhpcywwKStRcCh0aGlzLmEpfSxQKEpjLCJMYXllciIsMjkpLEkoMTM0MiwxLHt9LHJxdCksUChxZyx0MWUsMTM0MiksSSgxMzQ2LDEse30sejUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE1vKHUoZSw4MikpfSxQKHFnLCJFbGtHcmFwaEltcG9ydGVyLzBtZXRob2RyZWYkY29ubmVjdGFibGVTaGFwZVRvTm9kZSRUeXBlIiwxMzQ2KSxJKDEzNDksMSx7fSxEVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTW8odShlLDgyKSl9LFAocWcsIkVsa0dyYXBoSW1wb3J0ZXIvMW1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzNDkpLEkoMTM0MywxLFVuLGpuKSxsLnRkPWZ1bmN0aW9uKGUpe2pvZSh0aGlzLmEsdShlLDExOCkpfSxQKHFnLGUxZSwxMzQzKSxJKDEzNDQsMSxVbixfciksbC50ZD1mdW5jdGlvbihlKXtqb2UodGhpcy5hLHUoZSwxMTgpKX0sUChxZyxuMWUsMTM0NCksSSgxMzQ1LDEse30sWFApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbihKZW4odShlLDc5KSksMTYpKX0sUChxZyxyMWUsMTM0NSksSSgxMzQ3LDEsdWksaXIpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRYZSh0aGlzLmEsdShlLDMzKSl9LFAocWcsaTFlLDEzNDcpLEkoMTM0OCwxLHt9LGJrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odG5uKHUoZSw3OSkpLDE2KSl9LFAocWcsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsMTM0OCksSSgxMzUwLDEsdWksc3IpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGVYZSh0aGlzLmEsdShlLDMzKSl9LFAocWcsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsMTM1MCksSSgxMzUxLDEsdWksclkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZubih1KGUsNzkpKX0sUChxZywiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlIiwxMzUxKSxJKDEyNzgsMSx7fSxGSik7dmFyIEJiZTtQKHFnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyIiwxMjc4KSxJKDEyNzksMSx1aSxJYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gSFFlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMCRUeXBlIiwxMjc5KSxJKDEyODAsMSxVbiwkciksbC50ZD1mdW5jdGlvbihlKXt2TSgpLHVlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMSRUeXBlIiwxMjgwKSxJKDEyODEsMSx1aSxLaSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gQVFlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlIiwxMjgxKSxJKDEyODIsMSxVbixQbyksbC50ZD1mdW5jdGlvbihlKXt2TSgpLHVlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMyRUeXBlIiwxMjgyKSxJKDE0ODUsMSxhcyx2ayksbC5wZj1mdW5jdGlvbihlLG4pe01vbih1KGUsMzcpLG4pfSxQKCRuLCJDb21tZW50Tm9kZU1hcmdpbkNhbGN1bGF0b3IiLDE0ODUpLEkoMTQ4NiwxLHt9LGlZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlIiwxNDg2KSxJKDE0ODcsMSxVbixzWSksbC50ZD1mdW5jdGlvbihlKXtseW4odShlLDEwKSl9LFAoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNDg3KSxJKDE0ODgsMSxhcyxhWSksbC5wZj1mdW5jdGlvbihlLG4pe0V2bih1KGUsMzcpLG4pfSxQKCRuLCJDb21tZW50UG9zdHByb2Nlc3NvciIsMTQ4OCksSSgxNDg5LDEsYXMsb1kpLGwucGY9ZnVuY3Rpb24oZSxuKXtNNG4odShlLDM3KSxuKX0sUCgkbiwiQ29tbWVudFByZXByb2Nlc3NvciIsMTQ4OSksSSgxNDkwLDEsYXMsY1kpLGwucGY9ZnVuY3Rpb24oZSxuKXtVYm4odShlLDM3KSxuKX0sUCgkbiwiQ29uc3RyYWludHNQb3N0cHJvY2Vzc29yIiwxNDkwKSxJKDE0OTEsMSxhcyx1WSksbC5wZj1mdW5jdGlvbihlLG4pe0pvbih1KGUsMzcpLG4pfSxQKCRuLCJFZGdlQW5kTGF5ZXJDb25zdHJhaW50RWRnZVJldmVyc2VyIiwxNDkxKSxJKDE0OTIsMSxhcyxsWSksbC5wZj1mdW5jdGlvbihlLG4pe3psbih1KGUsMzcpLG4pfSxQKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IiLDE0OTIpLEkoMTQ5MywxLHt9LGhZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNDkzKSxJKDE0OTQsMSx1aSxmWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUG5uKHUoZSwxMCkpfSxQKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTQ5NCksSSgxNDk1LDEsVW4sZFkpLGwudGQ9ZnVuY3Rpb24oZSl7QTFuKHUoZSwxMCkpfSxQKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5NSksSSgxNDk2LDEsYXMsZ1kpLGwucGY9ZnVuY3Rpb24oZSxuKXt2Z24odShlLDM3KSxuKX0sUCgkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IiLDE0OTYpLEkoMTQ5NywxLHt9LHlMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE0OTcpLEkoMTQ5OCwxLFVuLHZLdCksbC50ZD1mdW5jdGlvbihlKXt2WWUodGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDEwKSl9LGwuYT0wLGwuYj0wLGwuYz0hMSxQKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNDk4KSxJKDE0OTksMSx1aSxwWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gR3QoUSh1KGUsNzApLChUZSgpLE1kKSkpPT09R3QoKEExKCksUzcpKX0sUCgkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5OSksSSgxNTAwLDEsVW4sTmMpLGwudGQ9ZnVuY3Rpb24oZSl7bmkodGhpcy5hLHUoZSw3MCkpfSxQKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNTAwKSxJKDE1MDEsMSx1aSxiWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gR3QoUSh1KGUsNzApLChUZSgpLE1kKSkpPT09R3QoKEExKCksWXkpKX0sUCgkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTUwMSksSSgxNTAyLDEsVW4sWmEpLGwudGQ9ZnVuY3Rpb24oZSl7bmkodGhpcy5hLHUoZSw3MCkpfSxQKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkNSRUeXBlIiwxNTAyKSxJKDE1NTEsMSxhcyxQSiksbC5wZj1mdW5jdGlvbihlLG4pe1l1bih1KGUsMzcpLG4pfTt2YXIgUmJlO1AoJG4sIkVuZExhYmVsU29ydGVyIiwxNTUxKSxJKDE1NTIsMSxPaSxPVCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBDaG4odShlLDQ1NiksdShuLDQ1NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIkVuZExhYmVsU29ydGVyLzEiLDE1NTIpLEkoNDU2LDEsezQ1NjoxfSxCWHQpLFAoJG4sIkVuZExhYmVsU29ydGVyL0xhYmVsR3JvdXAiLDQ1NiksSSgxNTUzLDEse30sUVApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHdNKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTUzKSxJKDE1NTQsMSx1aSxxNSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd00oKSx1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDEkVHlwZSIsMTU1NCksSSgxNTU1LDEsVW4sdlkpLGwudGQ9ZnVuY3Rpb24oZSl7QTBuKHUoZSwxMCkpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMiRUeXBlIiwxNTU1KSxJKDE1NTYsMSx1aSx3WSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd00oKSxHdChRKHUoZSw3MCksKFRlKCksTWQpKSk9PT1HdCgoQTEoKSxZeSkpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMyRUeXBlIiwxNTU2KSxJKDE1NTcsMSx1aSxtWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd00oKSxHdChRKHUoZSw3MCksKFRlKCksTWQpKSk9PT1HdCgoQTEoKSxTNykpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkNCRUeXBlIiwxNTU3KSxJKDE1MDMsMSxhcyx5WSksbC5wZj1mdW5jdGlvbihlLG4pe3h5bih0aGlzLHUoZSwzNykpfSxsLmI9MCxsLmM9MCxQKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yIiwxNTAzKSxJKDE1MDQsMSx7fSx4WSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE1MDQpLEkoMTUwNSwxLHt9LE5UKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKE1zKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDEkVHlwZSIsMTUwNSksSSgxNTA2LDEsdWkseEwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIVZhKHUoZSwxNykpfSxQKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQyJFR5cGUiLDE1MDYpLEkoMTUwNywxLHVpLFpQKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh1KGUsMTcpLChzZSgpLE4yKSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDMkVHlwZSIsMTUwNyksSSgxNTA4LDEsVW4sbWMpLGwudGQ9ZnVuY3Rpb24oZSl7TnduKHRoaXMuYSx1KGUsMTI4KSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZSIsMTUwOCksSSgxNTA5LDEsVW4sRTMpLGwudGQ9ZnVuY3Rpb24oZSl7QnN0KHUoZSwxNykuYSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDUkVHlwZSIsMTUwOSksSSg3OTIsMSxhcyxFYSksbC5wZj1mdW5jdGlvbihlLG4pe2czbih0aGlzLHUoZSwzNyksbil9LFAoJG4sIkdyYXBoVHJhbnNmb3JtZXIiLDc5MiksSSg1MTEsMjIsezM6MSwzNToxLDIyOjEsNTExOjF9LEFidCk7dmFyIG5sdCxwTyxqYmU9anIoJG4sIkdyYXBoVHJhbnNmb3JtZXIvTW9kZSIsNTExLEhyLHJybixQSmUpLCRiZTtJKDE1MTAsMSxhcyxUMyksbC5wZj1mdW5jdGlvbihlLG4pe0cybih1KGUsMzcpLG4pfSxQKCRuLCJIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3IiLDE1MTApLEkoMTUxMSwxLGFzLGtZKSxsLnBmPWZ1bmN0aW9uKGUsbil7Q29uKHUoZSwzNyksbil9LFAoJG4sIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yIiwxNTExKSxJKDE1MTIsMSxPaSxyZiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBGaG4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3Nvci9Ob2RlQ29tcGFyYXRvciIsMTUxMiksSSgxNTEzLDEsYXMsSDUpLGwucGY9ZnVuY3Rpb24oZSxuKXtWbW4odShlLDM3KSxuKX0sUCgkbiwiSGllcmFyY2hpY2FsUG9ydER1bW15U2l6ZVByb2Nlc3NvciIsMTUxMyksSSgxNTE0LDEsYXMsRVkpLGwucGY9ZnVuY3Rpb24oZSxuKXtxdm4odGhpcyx1KGUsMzcpLG4pfSxsLmE9MCxQKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIiLDE1MTQpLEkoMTUxNSwxLE9pLHdrKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFdYZSh1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xIiwxNTE1KSxJKDE1MTYsMSxPaSxSZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBvYW4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMiIsMTUxNiksSSgxNTE3LDEsYXMsVFkpLGwucGY9ZnVuY3Rpb24oZSxuKXtkMG4odShlLDM3KSxuKX0sUCgkbiwiSGllcmFyY2hpY2FsUG9ydFBvc2l0aW9uUHJvY2Vzc29yIiwxNTE3KSxJKDE1MTgsMSxhcyxCSiksbC5wZj1mdW5jdGlvbihlLG4pe2M1bih0aGlzLHUoZSwzNykpfSxsLmE9MCxsLmM9MDt2YXIgY0csdUc7UCgkbiwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3NvciIsMTUxOCksSSg1NzEsMSx7NTcxOjF9LENZKSxsLmI9LTEsbC5kPS0xLFAoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbiIsNTcxKSxJKDE1MTksMSx7fSxfWSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gR00oKSxqbyh1KGUsMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTUxOSksSSgxNTIwLDEse30sU1kpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEdNKCksTXModShlLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKCRuLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1MjApLEkoMTUyNiwxLGFzLFBUKSxsLnBmPWZ1bmN0aW9uKGUsbil7bW1uKHRoaXMsdShlLDM3KSxuKX0sUCgkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIiLDE1MjYpLEkoNzkzLDEse30sd3Z0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxQKCRuLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9NZXJnZVN0YXRlIiw3OTMpLEkoMTUyNywxLHt9LGtMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUiLDE1MjcpLEkoMTUyOCwxLHt9LEpQKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDEwKS5qLDE2KSl9LFAoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQxJFR5cGUiLDE1MjgpLEkoMTUyOSwxLFVuLEVMKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxMSkucD0tMX0sUCgkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZSIsMTUyOSksSSgxNTMwLDEsYXMsRzUpLGwucGY9ZnVuY3Rpb24oZSxuKXt2bW4odShlLDM3KSxuKX0sUCgkbiwiSHlwZXJub2Rlc1Byb2Nlc3NvciIsMTUzMCksSSgxNTMxLDEsYXMsQVkpLGwucGY9ZnVuY3Rpb24oZSxuKXt3bW4odShlLDM3KSxuKX0sUCgkbiwiSW5MYXllckNvbnN0cmFpbnRQcm9jZXNzb3IiLDE1MzEpLEkoMTUzMiwxLGFzLHRGKSxsLnBmPWZ1bmN0aW9uKGUsbil7S29uKHUoZSwzNyksbil9LFAoJG4sIklubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yIiwxNTMyKSxJKDE1MzMsMSxhcyxlRiksbC5wZj1mdW5jdGlvbihlLG4pe0M0bih0aGlzLHUoZSwzNykpfSxsLmE9VHMsbC5iPVRzLGwuYz1zcyxsLmQ9c3M7dmFyIGx4bj1QKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIiLDE1MzMpO0koMTUzNCwxLHt9LExZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlIiwxNTM0KSxJKDE1MzUsMSx7fSxKYSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWFhlKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDEkVHlwZSIsMTUzNSksSSgxNTM2LDEse30sTVkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNykuYy5pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUCgkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQyJFR5cGUiLDE1MzYpLEkoMTUzNywxLHt9LHZsKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBRWGUodGhpcy5hLHllKGUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMyRUeXBlIiwxNTM3KSxJKDE1MzgsMSx7fSx6ZiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gJFFlKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDQkVHlwZSIsMTUzOCksSSgxNTM5LDEse30seHApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHpRZSh0aGlzLmEseWUoZSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUCgkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQ1JFR5cGUiLDE1MzkpLEkoNzcsMjIsezM6MSwzNToxLDIyOjEsNzc6MSwyMzQ6MX0sd3MpLGwuS2Y9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nKXtjYXNlIDE1OnJldHVybiBuZXcgVVg7Y2FzZSAyMjpyZXR1cm4gbmV3IFdYO2Nhc2UgNDc6cmV0dXJuIG5ldyBYWDtjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyBDMztjYXNlIDMyOnJldHVybiBuZXcgdms7Y2FzZSA0MjpyZXR1cm4gbmV3IGFZO2Nhc2UgMTpyZXR1cm4gbmV3IG9ZO2Nhc2UgNDE6cmV0dXJuIG5ldyBjWTtjYXNlIDU2OnJldHVybiBuZXcgRWEoKHE4KCkscE8pKTtjYXNlIDA6cmV0dXJuIG5ldyBFYSgocTgoKSxubHQpKTtjYXNlIDI6cmV0dXJuIG5ldyB1WTtjYXNlIDU0OnJldHVybiBuZXcgbFk7Y2FzZSAzMzpyZXR1cm4gbmV3IGdZO2Nhc2UgNTE6cmV0dXJuIG5ldyB5WTtjYXNlIDU1OnJldHVybiBuZXcgVDM7Y2FzZSAxMzpyZXR1cm4gbmV3IGtZO2Nhc2UgMzg6cmV0dXJuIG5ldyBINTtjYXNlIDQ0OnJldHVybiBuZXcgRVk7Y2FzZSA0MDpyZXR1cm4gbmV3IFRZO2Nhc2UgOTpyZXR1cm4gbmV3IEJKO2Nhc2UgNDk6cmV0dXJuIG5ldyByV3Q7Y2FzZSAzNzpyZXR1cm4gbmV3IFBUO2Nhc2UgNDM6cmV0dXJuIG5ldyBHNTtjYXNlIDI3OnJldHVybiBuZXcgQVk7Y2FzZSAzMDpyZXR1cm4gbmV3IHRGO2Nhc2UgMzpyZXR1cm4gbmV3IGVGO2Nhc2UgMTg6cmV0dXJuIG5ldyBEWTtjYXNlIDI5OnJldHVybiBuZXcgT1k7Y2FzZSA1OnJldHVybiBuZXcgTUI7Y2FzZSA1MDpyZXR1cm4gbmV3IElZO2Nhc2UgMzQ6cmV0dXJuIG5ldyBSSjtjYXNlIDM2OnJldHVybiBuZXcgbWs7Y2FzZSA1MjpyZXR1cm4gbmV3IFBKO2Nhc2UgMTE6cmV0dXJuIG5ldyB2bTtjYXNlIDc6cmV0dXJuIG5ldyAkSjtjYXNlIDM5OnJldHVybiBuZXcgeWs7Y2FzZSA0NTpyZXR1cm4gbmV3IEJZO2Nhc2UgMTY6cmV0dXJuIG5ldyBGVDtjYXNlIDEwOnJldHVybiBuZXcgbmQ7Y2FzZSA0ODpyZXR1cm4gbmV3IENMO2Nhc2UgMjE6cmV0dXJuIG5ldyB4aztjYXNlIDIzOnJldHVybiBuZXcgZWV0KChadigpLERTKSk7Y2FzZSA4OnJldHVybiBuZXcgc0Y7Y2FzZSAxMjpyZXR1cm4gbmV3IFNMO2Nhc2UgNDpyZXR1cm4gbmV3IGpZO2Nhc2UgMTk6cmV0dXJuIG5ldyBnOTtjYXNlIDE3OnJldHVybiBuZXcgR1k7Y2FzZSA1MzpyZXR1cm4gbmV3IFZZO2Nhc2UgNjpyZXR1cm4gbmV3IGZGO2Nhc2UgMjU6cmV0dXJuIG5ldyBvcXQ7Y2FzZSA0NjpyZXR1cm4gbmV3IFlZO2Nhc2UgMzE6cmV0dXJuIG5ldyB6V3Q7Y2FzZSAxNDpyZXR1cm4gbmV3IExMO2Nhc2UgMjY6cmV0dXJuIG5ldyBKWDtjYXNlIDIwOnJldHVybiBuZXcgclg7Y2FzZSAyNDpyZXR1cm4gbmV3IGVldCgoWnYoKSxkVikpO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKEJvdCsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgQjd0LFI3dCxqN3QsJDd0LHo3dCxxN3QsSDd0LEc3dCxWN3QsVTd0LGhTLGxHLGhHLFc3dCxLN3QsWTd0LFg3dCxRN3QsWjd0LEo3dCxmUyx0VHQsZVR0LG5UdCxyVHQsaVR0LHJsdCxmRyxkRyxzVHQsZ0cscEcsYkcsZTcsbjcscjcsYVR0LHZHLHdHLG9UdCxtRyx5RyxjVHQsdVR0LGxUdCxoVHQseEcsaWx0LGJPLGtHLEVHLFRHLENHLGZUdCxkVHQsZ1R0LHBUdCxoeG49anIoJG4sdjZ0LDc3LEhyLEljZSxOSmUpLHpiZTtJKDE1NDAsMSxhcyxEWSksbC5wZj1mdW5jdGlvbihlLG4pe1M0bih1KGUsMzcpLG4pfSxQKCRuLCJJbnZlcnRlZFBvcnRQcm9jZXNzb3IiLDE1NDApLEkoMTU0MSwxLGFzLE9ZKSxsLnBmPWZ1bmN0aW9uKGUsbil7U3duKHUoZSwzNyksbil9LFAoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IiLDE1NDEpLEkoMTU0MiwxLHVpLE5ZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTQyKSxJKDE1NDMsMSx1aSxqZCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oR24oKSx4cyl9LFAoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU0MyksSSgxNTQ0LDEsVW4sd0t0KSxsLnRkPWZ1bmN0aW9uKGUpe3dZZSh0aGlzLmIsdGhpcy5hLHRoaXMuYyx1KGUsMTApKX0sbC5hPSExLGwuYz0hMSxQKCRuLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NDQpLEkoMTU0NSwxLGFzLE1CKSxsLnBmPWZ1bmN0aW9uKGUsbil7UTNuKHUoZSwzNyksbil9O3ZhciBxYmU7UCgkbiwiTGFiZWxEdW1teUluc2VydGVyIiwxNTQ1KSxJKDE1NDYsMSx3ZCxsdiksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gR3QoUSh1KGUsNzApLChUZSgpLE1kKSkpPT09R3QoKEExKCksXzcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KFEodShlLDcwKSwoVGUoKSxNZCkpKT09PUd0KChBMSgpLF83KSl9LFAoJG4sIkxhYmVsRHVtbXlJbnNlcnRlci8xIiwxNTQ2KSxJKDE1NDcsMSxhcyxJWSksbC5wZj1mdW5jdGlvbihlLG4pe0p5bih1KGUsMzcpLG4pfSxQKCRuLCJMYWJlbER1bW15UmVtb3ZlciIsMTU0NyksSSgxNTQ4LDEsdWksUFkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGplKFJlKFEodShlLDcwKSwoVGUoKSxVbHQpKSkpfSxQKCRuLCJMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNTQ4KSxJKDEzNTksMSxhcyxSSiksbC5wZj1mdW5jdGlvbihlLG4pe0Ezbih0aGlzLHUoZSwzNyksbil9LGwuYT1udWxsO3ZhciBzbHQ7UCgkbiwiTGFiZWxEdW1teVN3aXRjaGVyIiwxMzU5KSxJKDI4NiwxLHsyODY6MX0sTHVlKSxsLmM9MCxsLmQ9bnVsbCxsLmY9MCxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8iLDI4NiksSSgxMzYwLDEse30sbkYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFh4KCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZSIsMTM2MCksSSgxMzYxLDEsdWksckYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFh4KCksdShlLDEwKS5rPT0oR24oKSxTbCl9LFAoJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlIiwxMzYxKSxJKDEzNjIsMSx7fSxtZyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTFFlKHRoaXMuYSx1KGUsMTApKX0sUCgkbiwiTGFiZWxEdW1teVN3aXRjaGVyL2xhbWJkYSQyJFR5cGUiLDEzNjIpLEkoMTM2MywxLFVuLHNkKSxsLnRkPWZ1bmN0aW9uKGUpe0Flbih0aGlzLmEsdShlLDI4NikpfSxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDMkVHlwZSIsMTM2MyksSSgxMzY0LDEsT2ksRlkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmVuKHUoZSwyODYpLHUobiwyODYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDQkVHlwZSIsMTM2NCksSSg3OTEsMSxhcyxDMyksbC5wZj1mdW5jdGlvbihlLG4pe2pzbih1KGUsMzcpLG4pfSxQKCRuLCJMYWJlbE1hbmFnZW1lbnRQcm9jZXNzb3IiLDc5MSksSSgxNTQ5LDEsYXMsbWspLGwucGY9ZnVuY3Rpb24oZSxuKXtsdm4odShlLDM3KSxuKX0sUCgkbiwiTGFiZWxTaWRlU2VsZWN0b3IiLDE1NDkpLEkoMTU1MCwxLHVpLFRMKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqZShSZShRKHUoZSw3MCksKFRlKCksVWx0KSkpKX0sUCgkbiwiTGFiZWxTaWRlU2VsZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTU1MCksSSgxNTU4LDEsYXMsdm0pLGwucGY9ZnVuY3Rpb24oZSxuKXtVbW4odShlLDM3KSxuKX0sUCgkbiwiTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvciIsMTU1OCksSSgxNTU5LDEsYXMsJEopLGwucGY9ZnVuY3Rpb24oZSxuKXthYm4odShlLDM3KSxuKX07dmFyIGJUdDtQKCRuLCJMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IiLDE1NTkpLEkoMzYwLDIyLHszOjEsMzU6MSwyMjoxLDM2MDoxfSxIUik7dmFyIHZPLF9HLFNHLGFsdCxIYmU9anIoJG4sIkxheWVyQ29uc3RyYWludFByZXByb2Nlc3Nvci9IaWRkZW5Ob2RlQ29ubmVjdGlvbnMiLDM2MCxIcixEaW4sQ1plKSxHYmU7SSgxNTYwLDEsYXMseWspLGwucGY9ZnVuY3Rpb24oZSxuKXtYeW4odShlLDM3KSxuKX0sUCgkbiwiTGF5ZXJTaXplQW5kR3JhcGhIZWlnaHRDYWxjdWxhdG9yIiwxNTYwKSxJKDE1NjEsMSxhcyxCWSksbC5wZj1mdW5jdGlvbihlLG4pe0pibih1KGUsMzcpLG4pfSxQKCRuLCJMb25nRWRnZUpvaW5lciIsMTU2MSksSSgxNTYyLDEsYXMsRlQpLGwucGY9ZnVuY3Rpb24oZSxuKXtJeW4odShlLDM3KSxuKX0sUCgkbiwiTG9uZ0VkZ2VTcGxpdHRlciIsMTU2MiksSSgxNTYzLDEsYXMsbmQpLGwucGY9ZnVuY3Rpb24oZSxuKXtJM24odGhpcyx1KGUsMzcpLG4pfSxsLmQ9MCxsLmU9MCxsLmk9MCxsLmo9MCxsLms9MCxsLm49MCxQKCRuLCJOb2RlUHJvbW90aW9uIiwxNTYzKSxJKDE1NjQsMSx7fSxpRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQ2KSxGbigpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUCgkbiwiTm9kZVByb21vdGlvbi9sYW1iZGEkMCRUeXBlIiwxNTY0KSxJKDE1NjUsMSx7fSxrcCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWWVuKHRoaXMuYSx1KGUsNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuYT0wLFAoJG4sIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDEkVHlwZSIsMTU2NSksSSgxNTY2LDEse30scWYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFhlbih0aGlzLmEsdShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLmE9MCxQKCRuLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQyJFR5cGUiLDE1NjYpLEkoMTU2NywxLGFzLENMKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZTVuKHUoZSwzNyksbil9LFAoJG4sIk5vcnRoU291dGhQb3J0UG9zdHByb2Nlc3NvciIsMTU2NyksSSgxNTY4LDEsYXMseGspLGwucGY9ZnVuY3Rpb24oZSxuKXskNG4odShlLDM3KSxuKX0sUCgkbiwiTm9ydGhTb3V0aFBvcnRQcmVwcm9jZXNzb3IiLDE1NjgpLEkoMTU2OSwxLE9pLF9MKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHBjbih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIk5vcnRoU291dGhQb3J0UHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NjkpLEkoMTU3MCwxLGFzLHNGKSxsLnBmPWZ1bmN0aW9uKGUsbil7cm1uKHUoZSwzNyksbil9LFAoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3NvciIsMTU3MCksSSgxNTcxLDEsdWksUlkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHUoZSwxMCksKFRlKCksYjcpKX0sUCgkbiwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NzEpLEkoMTU3MiwxLFVuLGJ2KSxsLnRkPWZ1bmN0aW9uKGUpe3dubih0aGlzLmEsdShlLDEwKSl9LFAoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTcyKSxJKDE1NzMsMSxhcyxTTCksbC5wZj1mdW5jdGlvbihlLG4pe20ybih1KGUsMzcpLG4pfSxQKCRuLCJQYXJ0aXRpb25Qb3N0cHJvY2Vzc29yIiwxNTczKSxJKDE1NzQsMSxhcyxqWSksbC5wZj1mdW5jdGlvbihlLG4pe0xwbih1KGUsMzcpLG4pfSxQKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IiLDE1NzQpLEkoMTU3NSwxLHVpLCRZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh1KGUsMTApLChUZSgpLGI3KSl9LFAoJG4sIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTc1KSxJKDE1NzYsMSx7fSxhRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IEZ2KG5ldyBhcihscihNcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxQKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU3NiksSSgxNTc3LDEsdWksVjUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGtobih1KGUsMTcpKX0sUCgkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NzcpLEkoMTU3OCwxLFVuLG9GKSxsLnRkPWZ1bmN0aW9uKGUpe0Njbih1KGUsMTcpKX0sUCgkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDE1NzgpLEkoMTU3OSwxLGFzLGc5KSxsLnBmPWZ1bmN0aW9uKGUsbil7enduKHUoZSwzNyksbil9O3ZhciB2VHQsVmJlLFViZSxXYmUsd1R0LG1UdDtQKCRuLCJQb3J0TGlzdFNvcnRlciIsMTU3OSksSSgxNTgwLDEse30sVTUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEo4KCksdShlLDExKS5lfSxQKCRuLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTgwKSxJKDE1ODEsMSx7fSx6WSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gSjgoKSx1KGUsMTEpLmd9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQxJFR5cGUiLDE1ODEpLEkoMTU4MiwxLE9pLEFMKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEhadCh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUiLDE1ODIpLEkoMTU4MywxLE9pLHFZKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVmbih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQzJFR5cGUiLDE1ODMpLEkoMTU4NCwxLE9pLEhZKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFp1ZSh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE1ODQpLEkoMTU4NSwxLGFzLEdZKSxsLnBmPWZ1bmN0aW9uKGUsbil7dGJuKHUoZSwzNyksbil9LFAoJG4sIlBvcnRTaWRlUHJvY2Vzc29yIiwxNTg1KSxJKDE1ODYsMSxhcyxWWSksbC5wZj1mdW5jdGlvbihlLG4pe2V3bih1KGUsMzcpLG4pfSxQKCRuLCJSZXZlcnNlZEVkZ2VSZXN0b3JlciIsMTU4NiksSSgxNTkxLDEsYXMsb3F0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TWZuKHRoaXMsdShlLDM3KSxuKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIiLDE1OTEpLEkoMTU5MiwxLHt9LGNGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQwJFR5cGUiLDE1OTIpLEkoMTU5MywxLHVpLFVZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTU5MyksSSgxNTk0LDEsdWksV1kpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHUoZSwxMCksKHNlKCksZDcpKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZSIsMTU5NCksSSgxNTk1LDEse30sS1kpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChzZSgpLGQ3KSksNDAzKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDMkVHlwZSIsMTU5NSksSSgxNTk2LDEsVW4sX20pLGwudGQ9ZnVuY3Rpb24oZSl7ajBuKHRoaXMuYSx1KGUsNDAzKSl9LFAoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE1OTYpLEkoNzk0LDEsVW4sdUYpLGwudGQ9ZnVuY3Rpb24oZSl7dGduKHUoZSwxMDEpKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsNzk0KSxJKDE1OTcsMSxhcyxZWSksbC5wZj1mdW5jdGlvbihlLG4pe2pobih1KGUsMzcpLG4pfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IiLDE1OTcpLEkoMTU5OCwxLHt9LFhZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTk4KSxJKDE1OTksMSx1aSxRWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oR24oKSxEcyl9LFAoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTk5KSxJKDE2MDAsMSx1aSxsRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnModShlLDEwKSwoc2UoKSxkNykpfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTYwMCksSSgxNjAxLDEsVW4sWlkpLGwudGQ9ZnVuY3Rpb24oZSl7VTFuKHUoZSwxMCkpfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYwMSksSSgxNjAyLDEse30sSlkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sUCgkbiwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDE2MDIpLEkoMTYwMywxLFVuLGd4KSxsLnRkPWZ1bmN0aW9uKGUpe1Bpbih0aGlzLmEsdShlLDQwOSkpfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTYwMyksSSgxNjA0LDEsdWksaEYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsMTAxKS5pfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTYwNCksSSgxNjA1LDEsVW4sTzMpLGwudGQ9ZnVuY3Rpb24oZSl7bUtlKHRoaXMuYSx1KGUsMTAxKSl9LFAoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlIiwxNjA1KSxJKDE1ODcsMSxhcyxmRiksbC5wZj1mdW5jdGlvbihlLG4pe0Ribih1KGUsMzcpLG4pfSxQKCRuLCJTZWxmTG9vcFByZVByb2Nlc3NvciIsMTU4NyksSSgxNTg4LDEse30sZEYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sUCgkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU4OCksSSgxNTg5LDEse30sdFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MDkpLmF9LFAoJG4sIlNlbGZMb29wUHJlUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1ODkpLEkoMTU5MCwxLFVuLGVYKSxsLnRkPWZ1bmN0aW9uKGUpe1RYZSh1KGUsMTcpKX0sUCgkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTU5MCksSSgxNjA2LDEsYXMseld0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TDBuKHRoaXMsdShlLDM3KSxuKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIiLDE2MDYpLEkoMTYwNywxLHt9LGtrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIlNlbGZMb29wUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE2MDcpLEkoMTYwOCwxLHVpLFc1KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDEkVHlwZSIsMTYwOCksSSgxNjA5LDEsdWksQlQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHUoZSwxMCksKHNlKCksZDcpKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDIkVHlwZSIsMTYwOSksSSgxNjEwLDEse30sblgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChzZSgpLGQ3KSksNDAzKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTYxMCksSSgxNjExLDEsVW4sQkd0KSxsLnRkPWZ1bmN0aW9uKGUpe3Vubih0aGlzLmEsdGhpcy5iLHUoZSw0MDMpKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDQkVHlwZSIsMTYxMSksSSgxNjEyLDEsYXMsTEwpLGwucGY9ZnVuY3Rpb24oZSxuKXtaMm4odShlLDM3KSxuKX0sUCgkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IiLDE2MTIpLEkoMTYxMywxLHVpLFJUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTYxMyksSSgxNjE0LDEsdWksTUwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHJZdCh1KGUsMTApKS5fYigoVGUoKSxIeSkpfSxQKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjE0KSxJKDE2MTUsMSxPaSxnRiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBTb24odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjE1KSxJKDE2MTYsMSx7fSxwRiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBfbm4odShlLDEwKSx1KG4sMTApKX0sUCgkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYxNiksSSgxNjE4LDEsYXMsclgpLGwucGY9ZnVuY3Rpb24oZSxuKXtXbW4odShlLDM3KSxuKX0sUCgkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3NvciIsMTYxOCksSSgxNjE5LDEsdWksaVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZy5jLmxlbmd0aCE9MH0sUCgkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjE5KSxJKDE2MjAsMSxVbixweCksbC50ZD1mdW5jdGlvbihlKXtzZ24odGhpcy5hLHUoZSwxMSkpfSxQKCRuLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MjApLEkoMTY5Myw4MDMse30sWmVlKSxsLk1lPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3N3aXRjaCh0aGlzLmM9ZSx0aGlzLmEuZyl7Y2FzZSAyOm49bmV3IGxlLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IG1GKSxuZXcgcUd0KHRoaXMsbikpLGFEKHRoaXMsbmV3IHZGKSxtdShuLG5ldyBhWCksbi5jPVB0KFhuLEllLDEsMCw1LDEpLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IG9YKSxuZXcgTjMobikpLGFEKHRoaXMsbmV3IGNYKSxtdShuLG5ldyB1WCksbi5jPVB0KFhuLEllLDEsMCw1LDEpLHI9eFV0KGhuZShKaihuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyAkZCh0aGlzKSkpLG5ldyBsWCksdXMobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYy5hLmEsMTYpKSxuZXcgakd0KHIsbikpLGFEKHRoaXMsbmV3IGhYKSxtdShuLG5ldyBzWCksbi5jPVB0KFhuLEllLDEsMCw1LDEpO2JyZWFrO2Nhc2UgMzpzPW5ldyBsZSxhRCh0aGlzLG5ldyBiRiksbz14VXQoaG5lKEpqKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IFQ5KHRoaXMpKSksbmV3IHdGKSx1cyhSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyBmWCksbmV3IHpHdChvLHMpKSxhRCh0aGlzLG5ldyBkWCksbXUocyxuZXcgZ1gpLHMuYz1QdChYbixJZSwxLDAsNSwxKTticmVhaztkZWZhdWx0OnRocm93IHJ0KG5ldyBVenQpfX0sbC5iPTAsUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24iLDE2OTMpLEkoMTY5NCwxLHdkLGJGKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTQ1KX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KHUoZSw1NykuZywxNDUpfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjk0KSxJKDE2OTUsMSx7fSxUOSksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gUmduKHRoaXMuYSx1KGUsNTcpKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEkVHlwZSIsMTY5NSksSSgxNzAzLDEsT3EsUkd0KSxsLlZkPWZ1bmN0aW9uKCl7Y18odGhpcy5hLHRoaXMuYiwtMSl9LGwuYj0wLFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMCRUeXBlIiwxNzAzKSxJKDE3MDUsMSx3ZCx2RiksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQodShlLDU3KS5nLDE0NSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTQ1KX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDExJFR5cGUiLDE3MDUpLEkoMTcwNiwxLFVuLGFYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMiRUeXBlIiwxNzA2KSxJKDE3MDcsMSx1aSxvWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQodShlLDU3KS5nLDEwKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEzJFR5cGUiLDE3MDcpLEkoMTcwOSwxLFVuLE4zKSxsLnRkPWZ1bmN0aW9uKGUpe2hsbih0aGlzLmEsdShlLDU3KSl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNCRUeXBlIiwxNzA5KSxJKDE3MDgsMSxPcSxVR3QpLGwuVmQ9ZnVuY3Rpb24oKXtjXyh0aGlzLmIsdGhpcy5hLC0xKX0sbC5hPTAsUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE1JFR5cGUiLDE3MDgpLEkoMTcxMCwxLHdkLGNYKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTApfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQodShlLDU3KS5nLDEwKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUiLDE3MTApLEkoMTcxMSwxLFVuLHVYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNyRUeXBlIiwxNzExKSxJKDE3MTIsMSx7fSwkZCksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gamduKHRoaXMuYSx1KGUsNTcpKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE4JFR5cGUiLDE3MTIpLEkoMTcxMywxLHt9LGxYKSxsLkRlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOSRUeXBlIiwxNzEzKSxJKDE2OTYsMSx7fSx3RiksbC5EZT1mdW5jdGlvbigpe3JldHVybiAwfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMiRUeXBlIiwxNjk2KSxJKDE3MTUsMSxVbixqR3QpLGwudGQ9ZnVuY3Rpb24oZSl7VXRuKHRoaXMuYSx0aGlzLmIsdShlLDMwNykpfSxsLmE9MCxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjAkVHlwZSIsMTcxNSksSSgxNzE0LDEsT3EsJEd0KSxsLlZkPWZ1bmN0aW9uKCl7Y2NlKHRoaXMuYSx0aGlzLmIsLTEpfSxsLmI9MCxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjEkVHlwZSIsMTcxNCksSSgxNzE2LDEsd2QsaFgpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjIkVHlwZSIsMTcxNiksSSgxNzE3LDEsVW4sc1gpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDM2NSkuVmQoKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIzJFR5cGUiLDE3MTcpLEkoMTY5NywxLHVpLGZYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTApfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMyRUeXBlIiwxNjk3KSxJKDE2OTksMSxVbix6R3QpLGwudGQ9ZnVuY3Rpb24oZSl7V3RuKHRoaXMuYSx0aGlzLmIsdShlLDU3KSl9LGwuYT0wLFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ0JFR5cGUiLDE2OTkpLEkoMTY5OCwxLE9xLFdHdCksbC5WZD1mdW5jdGlvbigpe2NfKHRoaXMuYix0aGlzLmEsLTEpfSxsLmE9MCxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNSRUeXBlIiwxNjk4KSxJKDE3MDAsMSx3ZCxkWCksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ2JFR5cGUiLDE3MDApLEkoMTcwMSwxLFVuLGdYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ3JFR5cGUiLDE3MDEpLEkoMTcwMiwxLHVpLG1GKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTQ1KX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDgkVHlwZSIsMTcwMiksSSgxNzA0LDEsVW4scUd0KSxsLnRkPWZ1bmN0aW9uKGUpe0dhbih0aGlzLmEsdGhpcy5iLHUoZSw1NykpfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOSRUeXBlIiwxNzA0KSxJKDE1MjEsMSxhcyxyV3QpLGwucGY9ZnVuY3Rpb24oZSxuKXtSeW4odGhpcyx1KGUsMzcpLG4pfTt2YXIgS2JlO1AoQ3MsIkhvcml6b250YWxHcmFwaENvbXBhY3RvciIsMTUyMSksSSgxNTIyLDEse30sdzEpLGwuT2U9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIFBtdChlLG4pfHwocj1aMyhlKSxzPVozKG4pLHImJnIuaz09KEduKCkseHMpfHxzJiZzLms9PShHbigpLHhzKSk/MDoobz11KFEodGhpcy5hLmEsKHNlKCksWTQpKSwzMDQpLFpYZShvLHI/ci5rOihHbigpLFpzKSxzP3MuazooR24oKSxacykpKX0sbC5QZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztyZXR1cm4gUG10KGUsbik/MToocj1aMyhlKSxzPVozKG4pLG89dShRKHRoaXMuYS5hLChzZSgpLFk0KSksMzA0KSxNMnQobyxyP3IuazooR24oKSxacykscz9zLms6KEduKCksWnMpKSl9LFAoQ3MsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci8xIiwxNTIyKSxJKDE1MjMsMSx7fSxqVCksbC5OZT1mdW5jdGlvbihlLG4pe3JldHVybiBxOSgpLGUuYS5pPT0wfSxQKENzLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsMTUyMyksSSgxNTI0LDEse30semQpLGwuTmU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga25uKHRoaXMuYSxlLG4pfSxQKENzLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDEkVHlwZSIsMTUyNCksSSgxNjY0LDEse30sQnRlKTt2YXIgWWJlLFhiZTtQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjY0KSxJKDE2NzIsMSx1aSxwWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci8wbWV0aG9kcmVmJG5vbk51bGwkVHlwZSIsMTY3MiksSSgxNjY1LDEse30sYlgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksJG8oUSh1KHUoZSw1NykuZywxMCksKHNlKCksX2kpKSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDAkVHlwZSIsMTY2NSksSSgxNjY2LDEse30seUYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksJHJlKHUodShlLDU3KS5nLDE0NSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUiLDE2NjYpLEkoMTY3NSwxLHVpLHZYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLEV0KHUoZSw1NykuZywxMCl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUiLDE2NzUpLEkoMTY3NiwxLFVuLHdYKSxsLnRkPWZ1bmN0aW9uKGUpe3hubih1KGUsNTcpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTEkVHlwZSIsMTY3NiksSSgxNjc3LDEsdWksbVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksRXQodShlLDU3KS5nLDE0NSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEyJFR5cGUiLDE2NzcpLEkoMTY4MSwxLFVuLHlYKSxsLnRkPWZ1bmN0aW9uKGUpe191bih1KGUsNTcpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZSIsMTY4MSksSSgxNjc4LDEsVW4sQzkpLGwudGQ9ZnVuY3Rpb24oZSl7WFllKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNCRUeXBlIiwxNjc4KSxJKDE2NzksMSxVbixHYiksbC50ZD1mdW5jdGlvbihlKXtaWWUodGhpcy5hLHUoZSwxMTApKX0sbC5hPTAsUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTUkVHlwZSIsMTY3OSksSSgxNjgwLDEsVW4sblIpLGwudGQ9ZnVuY3Rpb24oZSl7UVllKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlIiwxNjgwKSxJKDE2ODIsMSx7fSx4WCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbGYoKSxuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKE1zKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE3JFR5cGUiLDE2ODIpLEkoMTY4MywxLHVpLGtYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLFZhKHUoZSwxNykpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOCRUeXBlIiwxNjgzKSxJKDE2ODQsMSxVbixEdHQpLGwudGQ9ZnVuY3Rpb24oZSl7RGFuKHRoaXMuYSx1KGUsMTcpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTkkVHlwZSIsMTY4NCksSSgxNjY4LDEsVW4sT3R0KSxsLnRkPWZ1bmN0aW9uKGUpe2Zpbih0aGlzLmEsdShlLDE0NSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyJFR5cGUiLDE2NjgpLEkoMTY4NSwxLHt9LHhGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjAkVHlwZSIsMTY4NSksSSgxNjg2LDEse30sRVgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksbmV3IFRuKG51bGwsbmV3IEZ2KG5ldyBhcihscihNcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlIiwxNjg2KSxJKDE2ODcsMSx7fSxrRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbGYoKSx1KFEodShlLDE3KSwoc2UoKSxOMikpLDE1KX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjIkVHlwZSIsMTY4NyksSSgxNjg4LDEsdWksVFgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRRZSh1KGUsMTUpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjMkVHlwZSIsMTY4OCksSSgxNjg5LDEsVW4sTnR0KSxsLnRkPWZ1bmN0aW9uKGUpe0xnbih0aGlzLmEsdShlLDE1KSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDI0JFR5cGUiLDE2ODkpLEkoMTY2NywxLFVuLEhHdCksbC50ZD1mdW5jdGlvbihlKXtKaW4odGhpcy5hLHRoaXMuYix1KGUsMTQ1KSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDMkVHlwZSIsMTY2NyksSSgxNjY5LDEse30sQ1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ0JFR5cGUiLDE2NjkpLEkoMTY3MCwxLHt9LF9YKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLG5ldyBUbihudWxsLG5ldyBGdihuZXcgYXIobHIoTXModShlLDEwKSkuYS5LYygpLG5ldyB6KSkpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNSRUeXBlIiwxNjcwKSxJKDE2NzEsMSx7fSwkVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbGYoKSx1KFEodShlLDE3KSwoc2UoKSxOMikpLDE1KX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNiRUeXBlIiwxNjcxKSxJKDE2NzMsMSxVbixQdHQpLGwudGQ9ZnVuY3Rpb24oZSl7b3BuKHRoaXMuYSx1KGUsMTUpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOCRUeXBlIiwxNjczKSxJKDE2NzQsMSxVbixHR3QpLGwudGQ9ZnVuY3Rpb24oZSl7eVhlKHRoaXMuYSx0aGlzLmIsdShlLDE0NSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ5JFR5cGUiLDE2NzQpLEkoMTY2MywxLHt9LFNYKSxsLkxlPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7Zm9yKHRoaXMuYT1lLHRoaXMuZD1uZXcgR3R0LHRoaXMuYz1QdChKRXQsSWUsMTIxLHRoaXMuYS5hLmEuYy5sZW5ndGgsMCwxKSx0aGlzLmI9MCxyPW5ldyBTKHRoaXMuYS5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMwNyksbi5kPXRoaXMuYixoPUR2KGJNKG5ldyBVYixuKSx0aGlzLmQpLHRoaXMuY1t0aGlzLmJdPWgsKyt0aGlzLmI7Zm9yKEczbih0aGlzKSxWNG4odGhpcyksdTJuKHRoaXMpLGNhdChtbnQodGhpcy5kKSxuZXcgWWspLG89bmV3IFModGhpcy5hLmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNTcpLHMuZC5jPXRoaXMuY1tzLmEuZF0uZStzLmIuYX0sbC5iPTAsUChDcywiTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uIiwxNjYzKSxJKDE0NSwxLHszNToxLDE0NToxfSx4XyksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRmFuKHRoaXMsdShlLDE0NSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRyZSh0aGlzKX0sUChDcywiVmVydGljYWxTZWdtZW50IiwxNDUpLEkoODI3LDEse30seTR0KSxsLmM9MCxsLmU9MCxsLmk9MCxQKFJfLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIiLDgyNyksSSg2NjMsMSx7NjYzOjF9LGduZSksbC5JYj1mdW5jdGlvbigpe3JldHVybiJBZGphY2VuY3lMaXN0IFtub2RlPSIrdGhpcy5kKyIsIGFkamFjZW5jaWVzPSAiK3RoaXMuYSsiXSJ9LGwuYj0wLGwuYz0wLGwuZj0wLFAoUl8sIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Iiw2NjMpLEkoMjg3LDEsezM1OjEsMjg3OjF9LGhXdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRXRuKHRoaXMsdShlLDI4NykpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeSBbcG9zaXRpb249Iit0aGlzLmMrIiwgY2FyZGluYWxpdHk9Iit0aGlzLmErIiwgY3VycmVudENhcmRpbmFsaXR5PSIrdGhpcy5iKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsUChSXywiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5IiwyODcpLEkoMTkyOSwxLHt9LEZhZSksbC5iPTAsbC5lPSExLFAoUl8sIkNyb3NzaW5nTWF0cml4RmlsbGVyIiwxOTI5KTt2YXIgUWJlPVlpKHMwLCJJSW5pdGlhbGl6YWJsZSIpO0koMTgwNCwxLEhELFFHdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt9LGwuTGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jIT0oWnYoKSxEUyl9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmU9UHQoVHIsWHIsMjUsdGhpcy5kLDE1LDEpfSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXsrK3RoaXMuZH0sbC5SZj1mdW5jdGlvbigpe3JldHVybiEwfSxsLlNmPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBPcmUodGhpcyxlLG4sciksaHNuKHRoaXMsbil9LGwuVGY9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj1LS2UobixlLmxlbmd0aCksT3JlKHRoaXMsZSxyLG4pLEpuZSh0aGlzLHIpfSxsLmQ9MCxQKFJfLCJHcmVlZHlTd2l0Y2hIZXVyaXN0aWMiLDE4MDQpLEkoMTkzMCwxLHt9LGxZdCksbC5iPTAsbC5kPTAsUChSXywiTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlciIsMTkzMCksSSgxOTE3LDEse30sZHVlKSxsLmE9ITEsUChSXywiU3dpdGNoRGVjaWRlciIsMTkxNyksSSgxMDEsMSx7MTAxOjF9LEdhZSksbC5hPW51bGwsbC5jPW51bGwsbC5pPW51bGwsUCh5NiwiU2VsZkh5cGVyTG9vcCIsMTAxKSxJKDE5MTYsMSx7fSxIaWUpLGwuYz0wLGwuZT0wLFAoeTYsIlNlbGZIeXBlckxvb3BMYWJlbHMiLDE5MTYpLEkoNDExLDIyLHszOjEsMzU6MSwyMjoxLDQxMToxfSxHUik7dmFyIF82LGk3LHM3LG9sdCxaYmU9anIoeTYsIlNlbGZIeXBlckxvb3BMYWJlbHMvQWxpZ25tZW50Iiw0MTEsSHIsT2luLF9aZSksSmJlO0koNDA5LDEsezQwOToxfSxBSnQpLFAoeTYsIlNlbGZMb29wRWRnZSIsNDA5KSxJKDQwMywxLHs0MDM6MX0sUGllKSxsLmE9ITEsUCh5NiwiU2VsZkxvb3BIb2xkZXIiLDQwMyksSSgxNzI0LDEsdWksTEYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZhKHUoZSwxNykpfSxQKHk2LCJTZWxmTG9vcEhvbGRlci9sYW1iZGEkMCRUeXBlIiwxNzI0KSxJKDExMywxLHsxMTM6MX0sR2llKSxsLmE9ITEsbC5jPSExLFAoeTYsIlNlbGZMb29wUG9ydCIsMTEzKSxJKDE3OTIsMSx1aSxNRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVmEodShlLDE3KSl9LFAoeTYsIlNlbGZMb29wUG9ydC9sYW1iZGEkMCRUeXBlIiwxNzkyKSxJKDM2MywyMix7MzoxLDM1OjEsMjI6MSwzNjM6MX0sa00pO3ZhciBBRyxMRyxNRyxJRyxERyx0MmU9anIoeTYsIlNlbGZMb29wVHlwZSIsMzYzLEhyLFRzbixJWmUpLGUyZTtJKDE3MzIsMSx7fSxISik7dmFyIG4yZSxyMmUsaTJlLHMyZTtQKEhsLCJQb3J0UmVzdG9yZXIiLDE3MzIpLEkoMzYxLDIyLHszOjEsMzU6MSwyMjoxLDM2MToxfSx4ZXQpO3ZhciBTdyxoYixBdyxjbHQ9anIoSGwsIlBvcnRSZXN0b3Jlci9Qb3J0U2lkZUFyZWEiLDM2MSxIcixQcm4sRFplKSxhMmU7SSgxNzMzLDEse30sXzMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDE1KS5PYygpfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZSIsMTczMyksSSgxNzM0LDEsVW4sTVgpLGwudGQ9ZnVuY3Rpb24oZSl7WnAoKSx1KGUsMTEzKS5jPSExfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTczNCksSSgxNzQzLDEsdWksSVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExKS5qPT0oYmUoKSxCbil9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTAkVHlwZSIsMTc0MyksSSgxNzQ0LDEse30sSFQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExMykuZH0sUChIbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMSRUeXBlIiwxNzQ0KSxJKDE3NDUsMSxVbixGdHQpLGwudGQ9ZnVuY3Rpb24oZSl7SktlKHRoaXMuYSx1KGUsMTEpKX0sUChIbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMiRUeXBlIiwxNzQ1KSxJKDE3MzUsMSxVbixCdHQpLGwudGQ9ZnVuY3Rpb24oZSl7c1FlKHRoaXMuYSx1KGUsMTAxKSl9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxNzM1KSxJKDE3MzYsMSxPaSxEWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBzb24odShlLDExMyksdShuLDExMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxNzM2KSxJKDE3MzcsMSx1aSxPWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gWnAoKSx1KGUsMTEzKS5jfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZSIsMTczNyksSSgxNzM4LDEsdWksQVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVvbih1KGUsMTEpKX0sUChIbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ1JFR5cGUiLDE3MzgpLEkoMTczOSwxLHVpLHpUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBacCgpLHUoZSwxMSkuaj09KGJlKCksTm4pfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDYkVHlwZSIsMTczOSksSSgxNzQwLDEsdWksRUYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExKS5qPT0oYmUoKSxIbil9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkNyRUeXBlIiwxNzQwKSxJKDE3NDEsMSx1aSxURiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gTmluKHUoZSwxMSkpfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDgkVHlwZSIsMTc0MSksSSgxNzQyLDEsdWksQ0YpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExKS5qPT0oYmUoKSxtcil9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkOSRUeXBlIiwxNzQyKSxJKDI3MCwyMix7MzoxLDM1OjEsMjI6MSwyNzA6MX0sUngpO3ZhciB1bHQsbGx0LGhsdCxmbHQsZGx0LGdsdCxwbHQsYmx0LHlUdD1qcihIbCwiUG9ydFNpZGVBc3NpZ25lci9UYXJnZXQiLDI3MCxIcixRYW4sU1plKSxvMmU7SSgxNzI1LDEse30sX0YpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFJpKG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5qLDE2KSksbmV3IHFUKX0sUChIbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMSRUeXBlIiwxNzI1KSxJKDE3MjYsMSx7fSxodiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExMykuZH0sUChIbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMiRUeXBlIiwxNzI2KSxJKDE3MjcsMSxVbixTRiksbC50ZD1mdW5jdGlvbihlKXtGcyh1KGUsMTEpLChiZSgpLE5uKSl9LFAoSGwsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDMkVHlwZSIsMTcyNyksSSgxNzI4LDEse30sQUYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMTMpLmR9LFAoSGwsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDQkVHlwZSIsMTcyOCksSSgxNzI5LDEsVW4sUnR0KSxsLnRkPWZ1bmN0aW9uKGUpe3NLZSh0aGlzLmEsdShlLDExKSl9LFAoSGwsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDUkVHlwZSIsMTcyOSksSSgxNzMwLDEsT2ksTFgpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUGVuKHUoZSwxMDEpLHUobiwxMDEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEhsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ2JFR5cGUiLDE3MzApLEkoMTczMSwxLE9pLEs1KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGN0bih1KGUsMTEzKSx1KG4sMTEzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChIbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNyRUeXBlIiwxNzMxKSxJKDgwNSwxLHVpLHFUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEzKS5jfSxQKEhsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ4JFR5cGUiLDgwNSksSSgyMDA5LDEse30pLFAoaWIsIkFic3RyYWN0U2VsZkxvb3BSb3V0ZXIiLDIwMDkpLEkoMTc1MCwxLE9pLE5YKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpRZSh1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChpYixJZmUsMTc1MCksSSgxNzUxLDEsT2ksUFgpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUVFlKHUoZSwxMDEpLHUobiwxMDEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKGliLERmZSwxNzUxKSxJKDE3OTMsMjAwOSx7fSxGWCksbC5VZj1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LFAoaWIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlciIsMTc5MyksSSgxNzk1LDEsVW4sS0d0KSxsLnRkPWZ1bmN0aW9uKGUpe0EzdCh0aGlzLmIsdGhpcy5hLHUoZSw4KSl9LFAoaWIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlci9sYW1iZGEkMCRUeXBlIiwxNzk1KSxJKDE3OTQsMTc5Myx7fSxCWCksbC5VZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbztyZXR1cm4gcz1lLmMuZCxoOChyLDAsTGkobmMocy5uKSxzLmEpKSxvPWUuZC5kLG5pKHIsTGkobmMoby5uKSxvLmEpKSxad24ocil9LFAoaWIsIlBvbHlsaW5lU2VsZkxvb3BSb3V0ZXIiLDE3OTQpLEkoMTc0NiwxLHt9LGpKKSxsLmE9bnVsbDt2YXIgejQ7UChpYiwiUm91dGluZ0RpcmVjdG9yIiwxNzQ2KSxJKDE3NDcsMSxPaSxSWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBodG4odShlLDExMyksdShuLDExMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoaWIsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMCRUeXBlIiwxNzQ3KSxJKDE3NDgsMSx7fSxqWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTFIoKSx1KGUsMTAxKS5qfSxQKGliLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTc0OCksSSgxNzQ5LDEsVW4sJFgpLGwudGQ9ZnVuY3Rpb24oZSl7TFIoKSx1KGUsMTUpLmFkKHo0KX0sUChpYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQyJFR5cGUiLDE3NDkpLEkoMTc1MiwxLHt9LHpYKSxQKGliLCJSb3V0aW5nU2xvdEFzc2lnbmVyIiwxNzUyKSxJKDE3NTMsMSx1aSxVayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gTVllKHRoaXMuYSx1KGUsMTAxKSl9LFAoaWIsIlJvdXRpbmdTbG90QXNzaWduZXIvbGFtYmRhJDAkVHlwZSIsMTc1MyksSSgxNzU0LDEsT2ksc00pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTnRuKHRoaXMuYSx1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChpYiwiUm91dGluZ1Nsb3RBc3NpZ25lci9sYW1iZGEkMSRUeXBlIiwxNzU0KSxJKDE3OTYsMTc5Myx7fSxxWCksbC5VZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQ7cmV0dXJuIHM9WHQoeWUoRnooZS5iLmcuYiwoVGUoKSxCNikpKSksZD1uZXcgZFd0KGN0KG90KFVzLDEpLHRlLDgsMCxbKGg9ZS5jLmQsTGkobmV3IHlvKGgubiksaC5hKSldKSksT2JuKGUsbixyLGQscyksbmkoZCwobz1lLmQuZCxMaShuZXcgeW8oby5uKSxvLmEpKSksc3NlKG5ldyBzeHQoZCkpfSxQKGliLCJTcGxpbmVTZWxmTG9vcFJvdXRlciIsMTc5NiksSSg1NzgsMSxPaSxvbmUsT0t0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEloZSh0aGlzLHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChqXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yIiw1NzgpLEkoMTc1NSwxLHVpLElMKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEpLmUuYy5sZW5ndGghPTB9LFAoal8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxNzU1KSxJKDE3NTYsMSx7fSxJRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShGZSh1KGUsMTEpLmUsMCksMTcpLmN9LFAoal8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMSRUeXBlIiwxNzU2KSxJKDE3NTcsMSx1aSxIWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExKS5lLmMubGVuZ3RoIT0wfSxQKGpfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDIkVHlwZSIsMTc1NyksSSgxNzU4LDEse30sR1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoRmUodShlLDExKS5lLDApLDE3KS5jfSxQKGpfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDMkVHlwZSIsMTc1OCksSSgxNzU5LDEsdWksVlgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sUChqXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQ0JFR5cGUiLDE3NTkpLEkoODA2LDEsT2ksUnRlLFhHdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBBWXQodGhpcyxlLG4pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoal8sIk1vZGVsT3JkZXJQb3J0Q29tcGFyYXRvciIsODA2KSxJKDgwMSwxLHt9LERGKSxsLlZmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGg7Zm9yKG89RGFlKG4pLHI9bmV3IGxlLGg9bi5mL28scz0xO3M8bzsrK3MpdWUocixkZShTcihrdShiLk1hdGgucm91bmQocypoKSkpKSk7cmV0dXJuIHJ9LGwuV2Y9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sUChrZCwiQVJEQ3V0SW5kZXhIZXVyaXN0aWMiLDgwMSksSSgxNDc5LDEsYXMsVVgpLGwucGY9ZnVuY3Rpb24oZSxuKXtnd24odShlLDM3KSxuKX0sUChrZCwiQnJlYWtpbmdQb2ludEluc2VydGVyIiwxNDc5KSxJKDMwNSwxLHszMDU6MX0sWnd0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IF9wLGUuYSs9IkJQSW5mb1siLGUuYSs9YAoJc3RhcnQ9YCxoYyhlLHRoaXMuaSksZS5hKz1gCgllbmQ9YCxoYyhlLHRoaXMuYSksZS5hKz1gCglub2RlU3RhcnRFZGdlPWAsaGMoZSx0aGlzLmUpLGUuYSs9YAoJc3RhcnRFbmRFZGdlPWAsaGMoZSx0aGlzLmopLGUuYSs9YAoJb3JpZ2luYWxFZGdlPWAsaGMoZSx0aGlzLmYpLGUuYSs9YAoJc3RhcnRJbkxheWVyRHVtbXk9YCxoYyhlLHRoaXMuayksZS5hKz1gCglzdGFydEluTGF5ZXJFZGdlPWAsaGMoZSx0aGlzLm4pLGUuYSs9YAoJZW5kSW5MYXllckR1bW15PWAsaGMoZSx0aGlzLmIpLGUuYSs9YAoJZW5kSW5MYXllckVkZ2U9YCxoYyhlLHRoaXMuYyksZS5hfSxQKGtkLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQlBJbmZvIiwzMDUpLEkoNjUyLDEsezY1MjoxfSxUcCksbC5hPSExLGwuYj0wLGwuYz0wLFAoa2QsIkJyZWFraW5nUG9pbnRJbnNlcnRlci9DdXQiLDY1MiksSSgxNDgwLDEsYXMsV1gpLGwucGY9ZnVuY3Rpb24oZSxuKXtHYm4odShlLDM3KSxuKX0sUChrZCwiQnJlYWtpbmdQb2ludFByb2Nlc3NvciIsMTQ4MCksSSgxNDgxLDEsdWksS1gpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHJlZSh1KGUsMTApKX0sUChrZCwiQnJlYWtpbmdQb2ludFByb2Nlc3Nvci8wbWV0aG9kcmVmJGlzRW5kJFR5cGUiLDE0ODEpLEkoMTQ4MiwxLHVpLFlYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBpZWUodShlLDEwKSl9LFAoa2QsIkJyZWFraW5nUG9pbnRQcm9jZXNzb3IvMW1ldGhvZHJlZiRpc1N0YXJ0JFR5cGUiLDE0ODIpLEkoMTQ4MywxLGFzLFhYKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZDJuKHRoaXMsdShlLDM3KSxuKX0sUChrZCwiQnJlYWtpbmdQb2ludFJlbW92ZXIiLDE0ODMpLEkoMTQ4NCwxLFVuLFFYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxMjgpLms9ITB9LFAoa2QsIkJyZWFraW5nUG9pbnRSZW1vdmVyL2xhbWJkYSQwJFR5cGUiLDE0ODQpLEkoNzk3LDEse30sZjV0KSxsLmI9MCxsLmU9MCxsLmY9MCxsLmo9MCxQKGtkLCJHcmFwaFN0YXRzIiw3OTcpLEkoNzk4LDEse30sT0YpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYi5NYXRoLm1heChYdCh5ZShlKSksWHQoeWUobikpKX0sUChrZCwiR3JhcGhTdGF0cy8wbWV0aG9kcmVmJG1heCRUeXBlIiw3OTgpLEkoNzk5LDEse30sTkYpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYi5NYXRoLm1heChYdCh5ZShlKSksWHQoeWUobikpKX0sUChrZCwiR3JhcGhTdGF0cy8ybWV0aG9kcmVmJG1heCRUeXBlIiw3OTkpLEkoMTY2MCwxLHt9LFpYKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpKZSh5ZShlKSx5ZShuKSl9LFAoa2QsIkdyYXBoU3RhdHMvbGFtYmRhJDEkVHlwZSIsMTY2MCksSSgxNjYxLDEse30sXzkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFVpZSh0aGlzLmEsdShlLDI5KSl9LFAoa2QsIkdyYXBoU3RhdHMvbGFtYmRhJDIkVHlwZSIsMTY2MSksSSgxNjYyLDEse30sclIpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFNjZSh0aGlzLmEsdShlLDI5KSl9LFAoa2QsIkdyYXBoU3RhdHMvbGFtYmRhJDYkVHlwZSIsMTY2MiksSSg4MDAsMSx7fSxQRiksbC5WZj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoUShlLChUZSgpLGJDdCkpLDE1KSxyfHwodm4oKSx2bigpLGlvKX0sbC5XZj1mdW5jdGlvbigpe3JldHVybiExfSxQKGtkLCJJQ3V0SW5kZXhDYWxjdWxhdG9yL01hbnVhbEN1dEluZGV4Q2FsY3VsYXRvciIsODAwKSxJKDgwMiwxLHt9LEZGKSxsLlZmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQ7Zm9yKFl0PShuLm49PW51bGwmJmJzZShuKSxuLm4pLGs9KG4uZD09bnVsbCYmYnNlKG4pLG4uZCksQnQ9UHQoaWEsdm8sMjUsWXQubGVuZ3RoLDE1LDEpLEJ0WzBdPVl0WzBdLEx0PVl0WzBdLEM9MTtDPFl0Lmxlbmd0aDtDKyspQnRbQ109QnRbQy0xXStZdFtDXSxMdCs9WXRbQ107Zm9yKG89RGFlKG4pLTEsZD11KFEoZSwoVGUoKSx2Q3QpKSwxOSkuYSxzPVRzLHI9bmV3IGxlLEg9Yi5NYXRoLm1heCgwLG8tZCk7SDw9Yi5NYXRoLm1pbihuLmYtMSxvK2QpO0grKyl7aWYodHQ9THQvKEgrMSksZ3Q9MCxNPTEsaD1uZXcgbGUsX3Q9VHMsRj0wLHc9MCxZPWtbMF0sSD09MClfdD1MdCx3PShuLmc9PW51bGwmJihuLmc9dW5lKG4sbmV3IE5GKSksWHQobi5nKSk7ZWxzZXtmb3IoO008bi5mOylCdFtNLTFdLWd0Pj10dCYmKHVlKGgsZGUoTSkpLF90PWIuTWF0aC5tYXgoX3QsQnRbTS0xXS1GKSx3Kz1ZLGd0Kz1CdFtNLTFdLWd0LEY9QnRbTS0xXSxZPWtbTV0pLFk9Yi5NYXRoLm1heChZLGtbTV0pLCsrTTt3Kz1ZfVY9Yi5NYXRoLm1pbigxL190LDEvbi5iL3cpLFY+cyYmKHM9VixyPWgpfXJldHVybiByfSxsLldmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoa2QsIk1TREN1dEluZGV4SGV1cmlzdGljIiw4MDIpLEkoMTYxNywxLGFzLEpYKSxsLnBmPWZ1bmN0aW9uKGUsbil7am1uKHUoZSwzNyksbil9LFAoa2QsIlNpbmdsZUVkZ2VHcmFwaFdyYXBwZXIiLDE2MTcpLEkoMjI3LDIyLHszOjEsMzU6MSwyMjoxLDIyNzoxfSxZOSk7dmFyIHE0LGE3LG83LE95LGRTLEg0LGM3PWpyKGtjLCJDZW50ZXJFZGdlTGFiZWxQbGFjZW1lbnRTdHJhdGVneSIsMjI3LEhyLFhzbixBWmUpLGMyZTtJKDQyMiwyMix7MzoxLDM1OjEsMjI6MSw0MjI6MX0sTWJ0KTt2YXIgeFR0LHZsdCxrVHQ9anIoa2MsIkNvbnN0cmFpbnRDYWxjdWxhdGlvblN0cmF0ZWd5Iiw0MjIsSHIsJG5uLExaZSksdTJlO0koMzE0LDIyLHszOjEsMzU6MSwyMjoxLDMxNDoxLDI0NjoxLDIzNDoxfSxrZXQpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gbW9lKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIG1vZSh0aGlzKX07dmFyIHdPLFM2LEVUdCxUVHQ9anIoa2MsIkNyb3NzaW5nTWluaW1pemF0aW9uU3RyYXRlZ3kiLDMxNCxIcixEcm4sTVplKSxsMmU7SSgzMzcsMjIsezM6MSwzNToxLDIyOjEsMzM3OjF9LEVldCk7dmFyIENUdCx3bHQsT0csX1R0PWpyKGtjLCJDdXR0aW5nU3RyYXRlZ3kiLDMzNyxIcixPcm4sT1plKSxoMmU7SSgzMzUsMjIsezM6MSwzNToxLDIyOjEsMzM1OjEsMjQ2OjEsMjM0OjF9LEVNKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIHNjZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBzY2UodGhpcyl9O3ZhciBTVHQsbWx0LGdTLHlsdCxwUyxBVHQ9anIoa2MsIkN5Y2xlQnJlYWtpbmdTdHJhdGVneSIsMzM1LEhyLGtzbixOWmUpLGYyZTtJKDQxOSwyMix7MzoxLDM1OjEsMjI6MSw0MTk6MX0sSWJ0KTt2YXIgTkcsTFR0LE1UdD1qcihrYywiRGlyZWN0aW9uQ29uZ3J1ZW5jeSIsNDE5LEhyLGpubixQWmUpLGQyZTtJKDQ1MCwyMix7MzoxLDM1OjEsMjI6MSw0NTA6MX0sVGV0KTt2YXIgdTcseGx0LEc0LGcyZT1qcihrYywiRWRnZUNvbnN0cmFpbnQiLDQ1MCxIcixOcm4sRlplKSxwMmU7SSgyNzYsMjIsezM6MSwzNToxLDIyOjEsMjc2OjF9LFg5KTt2YXIga2x0LEVsdCxUbHQsQ2x0LFBHLF9sdCxJVHQ9anIoa2MsIkVkZ2VMYWJlbFNpZGVTZWxlY3Rpb24iLDI3NixIcix0YW4sQlplKSxiMmU7SSg0NzksMjIsezM6MSwzNToxLDIyOjEsNDc5OjF9LERidCk7dmFyIEZHLERUdCxPVHQ9anIoa2MsIkVkZ2VTdHJhaWdodGVuaW5nU3RyYXRlZ3kiLDQ3OSxIcixSbm4sUlplKSx2MmU7SSgyNzQsMjIsezM6MSwzNToxLDIyOjEsMjc0OjF9LFE5KTt2YXIgU2x0LE5UdCxQVHQsQkcsRlR0LEJUdCxSVHQ9anIoa2MsIkZpeGVkQWxpZ25tZW50IiwyNzQsSHIsWnNuLGpaZSksdzJlO0koMjc1LDIyLHszOjEsMzU6MSwyMjoxLDI3NToxfSxaOSk7dmFyIGpUdCwkVHQselR0LHFUdCxiUyxIVHQsR1R0PWpyKGtjLCJHcmFwaENvbXBhY3Rpb25TdHJhdGVneSIsMjc1LEhyLFFzbiwkWmUpLG0yZTtJKDI1NiwyMix7MzoxLDM1OjEsMjI6MSwyNTY6MX0sRG0pO3ZhciBsNyxSRyxoNyxiaCx2UyxqRyxmNyxWNCwkRyx3UyxBbHQ9anIoa2MsIkdyYXBoUHJvcGVydGllcyIsMjU2LEhyLGpvbix6WmUpLHkyZTtJKDI5MiwyMix7MzoxLDM1OjEsMjI6MSwyOTI6MX0sQ2V0KTt2YXIgbU8sTGx0LE1sdCxJbHQ9anIoa2MsIkdyZWVkeVN3aXRjaFR5cGUiLDI5MixIcixCcm4scVplKSx4MmU7SSgzMDMsMjIsezM6MSwzNToxLDIyOjEsMzAzOjF9LF9ldCk7dmFyIEE2LHlPLFU0LGsyZT1qcihrYywiSW5MYXllckNvbnN0cmFpbnQiLDMwMyxIcixGcm4sSFplKSxFMmU7SSg0MjAsMjIsezM6MSwzNToxLDIyOjEsNDIwOjF9LE9idCk7dmFyIERsdCxWVHQsVVR0PWpyKGtjLCJJbnRlcmFjdGl2ZVJlZmVyZW5jZVBvaW50Iiw0MjAsSHIsem5uLEdaZSksVDJlLFdUdCxMNixMdyx6RyxLVHQsWVR0LHFHLFhUdCx4TyxIRyxtUyxNNixOeSxPbHQsR0csb2MsUVR0LE13LEdjLE5sdCxQbHQsa08sTzIsSXcsSTYsWlR0LEQ2LEVPLFB5LG4xLFJoLEZsdCxXNCxUYyxfaSxKVHQsdDl0LGU5dCxuOXQscjl0LEJsdCxWRyxadSxEdyxSbHQsTzYsVE8sJDEsSzQsZDcsWTQsWDQsZzcsTjIsaTl0LGpsdCwkbHQsTjY7SSgxNjMsMjIsezM6MSwzNToxLDIyOjEsMTYzOjF9LENNKTt2YXIgeVMsZmIseFMsRnksQ08sczl0PWpyKGtjLCJMYXllckNvbnN0cmFpbnQiLDE2MyxIcixDc24sVlplKSxDMmU7SSg4NDgsMSxJaCxVSiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdzZ0KSwiIiksIkRpcmVjdGlvbiBDb25ncnVlbmN5IiksIlNwZWNpZmllcyBob3cgZHJhd2luZ3Mgb2YgdGhlIHNhbWUgZ3JhcGggd2l0aCBkaWZmZXJlbnQgbGF5b3V0IGRpcmVjdGlvbnMgY29tcGFyZSB0byBlYWNoIG90aGVyOiBlaXRoZXIgYSBuYXR1cmFsIHJlYWRpbmcgZGlyZWN0aW9uIGlzIHByZXNlcnZlZCBvciB0aGUgZHJhd2luZ3MgYXJlIHJvdGF0ZWQgdmVyc2lvbnMgb2YgZWFjaCBvdGhlci4iKSxwOXQpLChqZygpLGNzKSksTVR0KSx1bigoWGYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxtNnQpLCIiKSwiRmVlZGJhY2sgRWRnZXMiKSwiV2hldGhlciBmZWVkYmFjayBlZGdlcyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgYnkgcm91dGluZyBhcm91bmQgdGhlIG5vZGVzLiIpLChGbigpLCExKSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEtxKSwiIiksIkludGVyYWN0aXZlIFJlZmVyZW5jZSBQb2ludCIpLCJEZXRlcm1pbmVzIHdoaWNoIHBvaW50IG9mIGEgbm9kZSBpcyBjb25zaWRlcmVkIGJ5IGludGVyYWN0aXZlIGxheW91dCBwaGFzZXMuIikseDl0KSxjcyksVVR0KSx1bihxbikpKSksYWEoZSxLcSwkb3QsYnZlKSxhYShlLEtxLCRfLHB2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHk2dCksIiIpLCJNZXJnZSBFZGdlcyIpLCJFZGdlcyB0aGF0IGhhdmUgbm8gcG9ydHMgYXJlIG1lcmdlZCBzbyB0aGV5IHRvdWNoIHRoZSBjb25uZWN0ZWQgbm9kZXMgYXQgdGhlIHNhbWUgcG9pbnRzLiBXaGVuIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLCBvbmUgcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgZGlyZWN0bHkgY29ubmVjdGVkIHRvIGEgbm9kZS4gV2hlbiBpdCBpcyBlbmFibGVkLCBhbGwgc3VjaCBpbmNvbWluZyBlZGdlcyBzaGFyZSBhbiBpbnB1dCBwb3J0LCBhbmQgYWxsIG91dGdvaW5nIGVkZ2VzIHNoYXJlIGFuIG91dHB1dCBwb3J0LiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseDZ0KSwiIiksIk1lcmdlIEhpZXJhcmNoeS1Dcm9zc2luZyBFZGdlcyIpLCJJZiBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIGFjdGl2ZSwgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzIHVzZSBhcyBmZXcgaGllcmFyY2hpY2FsIHBvcnRzIGFzIHBvc3NpYmxlLiBUaGV5IGFyZSBicm9rZW4gYnkgdGhlIGFsZ29yaXRobSwgd2l0aCBoaWVyYXJjaGljYWwgcG9ydHMgaW5zZXJ0ZWQgYXMgcmVxdWlyZWQuIFVzdWFsbHksIG9uZSBzdWNoIHBvcnQgaXMgY3JlYXRlZCBmb3IgZWFjaCBlZGdlIGF0IGVhY2ggaGllcmFyY2h5IGNyb3NzaW5nIHBvaW50LiBXaXRoIHRoaXMgb3B0aW9uIHNldCB0byB0cnVlLCB3ZSB0cnkgdG8gY3JlYXRlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUgaW4gdGhlIHByb2Nlc3MuIEluIHBhcnRpY3VsYXIsIGFsbCBlZGdlcyB0aGF0IGZvcm0gYSBoeXBlcmVkZ2UgY2FuIHNoYXJlIGEgcG9ydC4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUoUUtlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxrNnQpLCIiKSwiQWxsb3cgTm9uLUZsb3cgUG9ydHMgVG8gU3dpdGNoIFNpZGVzIiksIlNwZWNpZmllcyB3aGV0aGVyIG5vbi1mbG93IHBvcnRzIG1heSBzd2l0Y2ggc2lkZXMgaWYgdGhlaXIgbm9kZSdzIHBvcnQgY29uc3RyYWludHMgYXJlIGVpdGhlciBGSVhFRF9TSURFIG9yIEZJWEVEX09SREVSLiBBIG5vbi1mbG93IHBvcnQgaXMgYSBwb3J0IG9uIGEgc2lkZSB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBsYXlvdXQgZmxvdy4gRm9yIGluc3RhbmNlLCBnaXZlbiBhIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbiwgbm9ydGggYW5kIHNvdXRoIHBvcnRzIHdvdWxkIGJlIGNvbnNpZGVyZWQgbm9uLWZsb3cgcG9ydHMuIEZ1cnRoZXIgbm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNyaXRlcml1bSB3aGV0aGVyIHRvIHN3aXRjaCBzaWRlcyBvciBub3Qgc29sZWx5IHJlbGllcyBvbiB0aGUgbWluaW1pemF0aW9uIG9mIGVkZ2UgY3Jvc3NpbmdzLiBIZW5jZSwgZWRnZSBsZW5ndGggYW5kIG90aGVyIGFlc3RoZXRpY3MgY3JpdGVyaWEgYXJlIG5vdCBhZGRyZXNzZWQuIiksITEpLEFhKSxCcyksdW4oJDIpKSxjdChvdChBZSwxKSx0ZSwyLDYsWyJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub3J0aE9yU291dGhQb3J0Il0pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxFNnQpLCIiKSwiUG9ydCBTb3J0aW5nIFN0cmF0ZWd5IiksIk9ubHkgcmVsZXZhbnQgZm9yIG5vZGVzIHdpdGggRklYRURfU0lERSBwb3J0IGNvbnN0cmFpbnRzLiBEZXRlcm1pbmVzIHRoZSB3YXkgYSBub2RlJ3MgcG9ydHMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBzaWRlcyBvZiBhIG5vZGUgaWYgdGhlaXIgb3JkZXIgaXMgbm90IHByZXNjcmliZWQuIFRoZSBvcHRpb24gaXMgc2V0IG9uIHBhcmVudCBub2Rlcy4iKSxMOXQpLGNzKSxCQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVDZ0KSwiIiksIlRob3JvdWdobmVzcyIpLCJIb3cgbXVjaCBlZmZvcnQgc2hvdWxkIGJlIHNwZW50IHRvIHByb2R1Y2UgYSBuaWNlIGxheW91dC4iKSxkZSg3KSksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEM2dCksIiIpLCJBZGQgVW5uZWNlc3NhcnkgQmVuZHBvaW50cyIpLCJBZGRzIGJlbmQgcG9pbnRzIGV2ZW4gaWYgYW4gZWRnZSBkb2VzIG5vdCBjaGFuZ2UgZGlyZWN0aW9uLiBJZiB0cnVlLCBlYWNoIGxvbmcgZWRnZSBkdW1teSB3aWxsIGNvbnRyaWJ1dGUgYSBiZW5kIHBvaW50IHRvIGl0cyBlZGdlcyBhbmQgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzIHdpbGwgYWx3YXlzIGdldCBhIGJlbmQgcG9pbnQgd2hlcmUgdGhleSBjcm9zcyBoaWVyYXJjaHkgYm91bmRhcmllcy4gQnkgZGVmYXVsdCwgYmVuZCBwb2ludHMgYXJlIG9ubHkgYWRkZWQgd2hlcmUgYW4gZWRnZSBjaGFuZ2VzIGRpcmVjdGlvbi4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLF82dCksIiIpLCJHZW5lcmF0ZSBQb3NpdGlvbiBhbmQgTGF5ZXIgSURzIiksIklmIGVuYWJsZWQgcG9zaXRpb24gaWQgYW5kIGxheWVyIGlkIGFyZSBnZW5lcmF0ZWQsIHdoaWNoIGFyZSB1c3VhbGx5IG9ubHkgdXNlZCBpbnRlcm5hbGx5IHdoZW4gc2V0dGluZyB0aGUgaW50ZXJhY3RpdmVMYXlvdXQgb3B0aW9uLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkIG9uIHRoZSByb290IG5vZGUuIiksITEpLEFhKSxCcyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSwkb3QpLCJjeWNsZUJyZWFraW5nIiksIkN5Y2xlIEJyZWFraW5nIFN0cmF0ZWd5IiksIlN0cmF0ZWd5IGZvciBjeWNsZSBicmVha2luZy4gQ3ljbGUgYnJlYWtpbmcgbG9va3MgZm9yIGN5Y2xlcyBpbiB0aGUgZ3JhcGggYW5kIGRldGVybWluZXMgd2hpY2ggZWRnZXMgdG8gcmV2ZXJzZSB0byBicmVhayB0aGUgY3ljbGVzLiBSZXZlcnNlZCBlZGdlcyB3aWxsIGVuZCB1cCBwb2ludGluZyB0byB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHJlZ3VsYXIgZWRnZXMgKHRoYXQgaXMsIHJldmVyc2VkIGVkZ2VzIHdpbGwgcG9pbnQgbGVmdCBpZiBlZGdlcyB1c3VhbGx5IHBvaW50IHJpZ2h0KS4iKSxnOXQpLGNzKSxBVHQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsR0QpLGxjdCksIk5vZGUgTGF5ZXJpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIG5vZGUgbGF5ZXJpbmcuIiksVDl0KSxjcyksQ0N0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFM2dCksbGN0KSwiTGF5ZXIgQ29uc3RyYWludCIpLCJEZXRlcm1pbmVzIGEgY29uc3RyYWludCBvbiB0aGUgcGxhY2VtZW50IG9mIHRoZSBub2RlIHJlZ2FyZGluZyB0aGUgbGF5ZXJpbmcuIiksazl0KSxjcyksczl0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEE2dCksbGN0KSwiTGF5ZXIgQ2hvaWNlIENvbnN0cmFpbnQiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBsYXllciBwbGFjZW1lbnQgb2YgYSBub2RlLiBMZXQgaSBiZSB0aGUgdmFsdWUgb2YgdGVoIGNvbnN0cmFpbnQuIEFzc3VtZWQgdGhlIGRyYXdpbmcgaGFzIG4gbGF5ZXJzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgaW4gaS10aCBsYXllci4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBpbiB0aGUgbGFzdCBsYXllciBvZiB0aGUgZHJhd2luZy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG5vdCBwYXJ0IG9mIGFueSBvZiBFTEsgTGF5ZXJlZCdzIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgYnV0IGlzIG9ubHkgZXZhbHVhdGVkIGFzIHBhcnQgb2YgdGhlIGBJbnRlcmFjdGl2ZUxheWVyZWRHcmFwaFZpc2l0b3JgLCB3aGljaCBtdXN0IGJlIGFwcGxpZWQgbWFudWFsbHkgb3IgdXNlZCB2aWEgdGhlIGBEaWFncmFtTGF5b3V0RW5naW5lLiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEw2dCksbGN0KSwiTGF5ZXIgSUQiKSwiTGF5ZXIgaWRlbnRpZmllciB0aGF0IHdhcyBjYWxjdWxhdGVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHpvdCkscDFlKSwiVXBwZXIgQm91bmQgT24gV2lkdGggW01pbldpZHRoIExheWVyZXJdIiksIkRlZmluZXMgYSBsb29zZSB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgdGhlIE1pbldpZHRoIGxheWVyZXIuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIiksZGUoNCkpLGdjKSxqYSksdW4ocW4pKSkpLGFhKGUsem90LEdELEV2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHFvdCkscDFlKSwiVXBwZXIgTGF5ZXIgRXN0aW1hdGlvbiBTY2FsaW5nIEZhY3RvciBbTWluV2lkdGggTGF5ZXJlcl0iKSwiTXVsdGlwbGllZCB3aXRoIFVwcGVyIEJvdW5kIE9uIFdpZHRoIGZvciBkZWZpbmluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgbGF5ZXJzIHdoaWNoIGhhdmVuJ3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgYnV0IHdob3NlIG1heGltdW0gd2lkdGggaGFkIGJlZW4gKHJvdWdobHkpIGVzdGltYXRlZCBieSB0aGUgTWluV2lkdGggYWxnb3JpdGhtLiBDb21wZW5zYXRlcyBmb3IgdG9vIGhpZ2ggZXN0aW1hdGlvbnMuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIiksZGUoMikpLGdjKSxqYSksdW4ocW4pKSkpLGFhKGUscW90LEdELEN2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEhvdCksYjFlKSwiTm9kZSBQcm9tb3Rpb24gU3RyYXRlZ3kiKSwiUmVkdWNlcyBudW1iZXIgb2YgZHVtbXkgbm9kZXMgYWZ0ZXIgbGF5ZXJpbmcgcGhhc2UgKGlmIHBvc3NpYmxlKS4iKSxFOXQpLGNzKSxOQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsR290KSxiMWUpLCJNYXggTm9kZSBQcm9tb3Rpb24gSXRlcmF0aW9ucyIpLCJMaW1pdHMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBub2RlIHByb21vdGlvbi4iKSxkZSgwKSksZ2MpLGphKSx1bihxbikpKSksYWEoZSxHb3QsSG90LG51bGwpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWb3QpLCJsYXllcmluZy5jb2ZmbWFuR3JhaGFtIiksIkxheWVyIEJvdW5kIiksIlRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbGxvd2VkIHBlciBsYXllci4iKSxkZSh2aSkpLGdjKSxqYSksdW4ocW4pKSkpLGFhKGUsVm90LEdELHd2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCRfKSxWRCksIkNyb3NzaW5nIE1pbmltaXphdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiIpLGQ5dCksY3MpLFRUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxNNnQpLFZEKSwiRm9yY2UgTm9kZSBNb2RlbCBPcmRlciIpLCJUaGUgbm9kZSBvcmRlciBnaXZlbiBieSB0aGUgbW9kZWwgZG9lcyBub3QgY2hhbmdlIHRvIHByb2R1Y2UgYSBiZXR0ZXIgbGF5b3V0LiBFLmcuIGlmIG5vZGUgQSBpcyBiZWZvcmUgbm9kZSBCIGluIHRoZSBtb2RlbCB0aGlzIGlzIG5vdCBjaGFuZ2VkIGR1cmluZyBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBub2RlIG1vZGVsIG9yZGVyIGlzIGFscmVhZHkgcmVzcGVjdGVkIGJlZm9yZSBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNldHRpbmcgY29uc2lkZXJNb2RlbE9yZGVyLnN0cmF0ZWd5IHRvIE5PREVTX0FORF9FREdFUy4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFVvdCksVkQpLCJIaWVyYXJjaGljYWwgU3dlZXBpbmVzcyIpLCJIb3cgbGlrZWx5IGl0IGlzIHRvIHVzZSBjcm9zcy1oaWVyYXJjaHkgKDEpIHZzIGJvdHRvbS11cCAoLTEpLiIpLC4xKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLFVvdCxvSCxHMmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxXb3QpLFZEKSwiU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyB3aXRoaW4gYSBsYXllciBidXQgc3RpbGwgbWluaW1pemVzIGNyb3NzaW5ncyBiZXR3ZWVuIGVkZ2VzIGNvbm5lY3RpbmcgbG9uZyBlZGdlIGR1bW1pZXMuIERlcml2ZXMgdGhlIGRlc2lyZWQgb3JkZXIgZnJvbSBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSAnb3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uJyBsYXlvdXQgb3B0aW9uLiBSZXF1aXJlcyBhIGNyb3NzaW5nIG1pbmltaXphdGlvbiBzdHJhdGVneSB0aGF0IGlzIGFibGUgdG8gcHJvY2VzcyAnaW4tbGF5ZXInIGNvbnN0cmFpbnRzLiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhYShlLFdvdCwkXyxLMmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxJNnQpLFZEKSwiUG9zaXRpb24gQ2hvaWNlIENvbnN0cmFpbnQiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBwb3NpdGlvbiBwbGFjZW1lbnQgb2YgYSBub2RlIGluIGEgbGF5ZXIuIEFzc3VtZWQgdGhlIGxheWVyIGluIHdoaWNoIHRoZSBub2RlIHBsYWNlZCBpbmNsdWRlcyBuIG90aGVyIG5vZGVzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGktdGggcG9zaXRpb24uIFNob3VsZCBpPj1uIGJlIHRydWUgdGhlbiB0aGUgbm9kZSBpcyBwbGFjZWQgYXQgdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIGxheWVyLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksZGUoLTEpKSxnYyksamEpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRDZ0KSxWRCksIlBvc2l0aW9uIElEIiksIlBvc2l0aW9uIHdpdGhpbiBhIGxheWVyIHRoYXQgd2FzIGRldGVybWluZWQgYnkgRUxLIExheWVyZWQgZm9yIGEgbm9kZS4gVGhpcyBpcyBvbmx5IGdlbmVyYXRlZCBpZiBpbnRlcmFjdGl2ZUxheW90IG9yIGdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyBpcyBzZXQuIiksZGUoLTEpKSxnYyksamEpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTzZ0KSx2MWUpLCJHcmVlZHkgU3dpdGNoIEFjdGl2YXRpb24gVGhyZXNob2xkIiksIkJ5IGRlZmF1bHQgaXQgaXMgZGVjaWRlZCBhdXRvbWF0aWNhbGx5IGlmIHRoZSBncmVlZHkgc3dpdGNoIGlzIGFjdGl2YXRlZCBvciBub3QuIFRoZSBkZWNpc2lvbiBpcyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBncmFwaCAod2l0aG91dCBkdW1teSBub2RlcykgaXMgc21hbGxlciB0aGFuIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbi4gQSAnMCcgZW5mb3JjZXMgdGhlIGFjdGl2YXRpb24uIiksZGUoNDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsS290KSx2MWUpLCJHcmVlZHkgU3dpdGNoIENyb3NzaW5nIE1pbmltaXphdGlvbiIpLCJHcmVlZHkgU3dpdGNoIHN0cmF0ZWd5IGZvciBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoZSBncmVlZHkgc3dpdGNoIGhldXJpc3RpYyBpcyBleGVjdXRlZCBhZnRlciB0aGUgcmVndWxhciBjcm9zc2luZyBtaW5pbWl6YXRpb24gYXMgYSBwb3N0LXByb2Nlc3Nvci4gTm90ZSB0aGF0IGlmICdoaWVyYXJjaHlIYW5kbGluZycgaXMgc2V0IHRvICdJTkNMVURFX0NISUxEUkVOJywgdGhlICdncmVlZHlTd2l0Y2hIaWVyYXJjaGljYWwudHlwZScgb3B0aW9uIG11c3QgYmUgdXNlZC4iKSxmOXQpLGNzKSxJbHQpLHVuKHFuKSkpKSxhYShlLEtvdCwkXyxxMmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZcSksImNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbCIpLCJHcmVlZHkgU3dpdGNoIENyb3NzaW5nIE1pbmltaXphdGlvbiAoaGllcmFyY2hpY2FsKSIpLCJBY3RpdmF0ZXMgdGhlIGdyZWVkeSBzd2l0Y2ggaGV1cmlzdGljIGluIGNhc2UgaGllcmFyY2hpY2FsIGxheW91dCBpcyB1c2VkLiBUaGUgZGlmZmVyZW5jZXMgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgY2FzZSAoc2VlICdncmVlZHlTd2l0Y2gudHlwZScpIGFyZTogMSkgZ3JlZWR5IHN3aXRjaCBpcyBpbmFjdGl2ZSBieSBkZWZhdWx0LCAzKSBvbmx5IHRoZSBvcHRpb24gdmFsdWUgc2V0IG9uIHRoZSBub2RlIGF0IHdoaWNoIGhpZXJhcmNoaWNhbCBsYXlvdXQgc3RhcnRzIGlzIHJlbGV2YW50LCBhbmQgMikgaWYgaXQncyBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIsIGl0IHByb3Blcmx5IGFkZHJlc3NlcyBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMuIiksaDl0KSxjcyksSWx0KSx1bihxbikpKSksYWEoZSxZcSwkXyxqMmUpLGFhKGUsWXEsb0gsJDJlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTTQpLHcxZSksIk5vZGUgUGxhY2VtZW50IFN0cmF0ZWd5IiksIlN0cmF0ZWd5IGZvciBub2RlIHBsYWNlbWVudC4iKSxBOXQpLGNzKSxMQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsWHEpLHcxZSksIkZhdm9yIFN0cmFpZ2h0IEVkZ2VzIE92ZXIgQmFsYW5jaW5nIiksIkZhdm9yIHN0cmFpZ2h0IGVkZ2VzIG92ZXIgYSBiYWxhbmNlZCBub2RlIHBsYWNlbWVudC4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSB1c2VkICdlZGdlUm91dGluZycuIEZvciBhbiBvcnRob2dvbmFsIHN0eWxlIGl0IGlzIHNldCB0byB0cnVlLCBmb3IgYWxsIG90aGVyIHN0eWxlcyB0byBmYWxzZS4iKSxBYSksQnMpLHVuKHFuKSkpKSxhYShlLFhxLE00LEZ2ZSksYWEoZSxYcSxNNCxCdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZb3QpLG0xZSksIkJLIEVkZ2UgU3RyYWlnaHRlbmluZyIpLCJTcGVjaWZpZXMgd2hldGhlciB0aGUgQnJhbmRlcyBLb2VwZiBub2RlIHBsYWNlciB0cmllcyB0byBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHN0cmFpZ2h0IGVkZ2VzIGF0IHRoZSBleHBlbnNlIG9mIGRpYWdyYW0gc2l6ZS4gVGhlcmUgaXMgYSBzdWJ0bGUgZGlmZmVyZW5jZSB0byB0aGUgJ2Zhdm9yU3RyYWlnaHRFZGdlcycgb3B0aW9uLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYSBiYWxhbmNlZCBwbGFjZW1lbnQgb2YgdGhlIG5vZGVzIGlzIGRlc2lyZWQsIG9yIG5vdC4gSW4gYmsgdGVybXMgdGhpcyBtZWFucyBjb21iaW5pbmcgdGhlIGZvdXIgYWxpZ25tZW50cyBpbnRvIGEgc2luZ2xlIGJhbGFuY2VkIG9uZSwgb3Igbm90LiBUaGlzIG9wdGlvbiBvbiB0aGUgb3RoZXIgaGFuZCB0cmllcyB0byBzdHJhaWdodGVuIGFkZGl0aW9uYWwgZWRnZXMgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBlYWNoIG9mIHRoZSBmb3VyIGFsaWdubWVudHMuIiksQzl0KSxjcyksT1R0KSx1bihxbikpKSksYWEoZSxZb3QsTTQsRHZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWG90KSxtMWUpLCJCSyBGaXhlZCBBbGlnbm1lbnQiKSwiVGVsbHMgdGhlIEJLIG5vZGUgcGxhY2VyIHRvIHVzZSBhIGNlcnRhaW4gYWxpZ25tZW50IChvdXQgb2YgaXRzIGZvdXIpIGluc3RlYWQgb2YgdGhlIG9uZSBwcm9kdWNpbmcgdGhlIHNtYWxsZXN0IGhlaWdodCwgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBmb3VyLiIpLF85dCksY3MpLFJUdCksdW4ocW4pKSkpLGFhKGUsWG90LE00LE52ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFFvdCksIm5vZGVQbGFjZW1lbnQubGluZWFyU2VnbWVudHMiKSwiTGluZWFyIFNlZ21lbnRzIERlZmxlY3Rpb24gRGFtcGVuaW5nIiksIkRhbXBlbnMgdGhlIG1vdmVtZW50IG9mIG5vZGVzIHRvIGtlZXAgdGhlIGRpYWdyYW0gZnJvbSBnZXR0aW5nIHRvbyBsYXJnZS4iKSwuMyksRG8pLGNhKSx1bihxbikpKSksYWEoZSxRb3QsTTQsanZlKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsWm90KSwibm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleCIpLCJOb2RlIEZsZXhpYmlsaXR5IiksIkFpbXMgYXQgc2hvcnRlciBhbmQgc3RyYWlnaHRlciBlZGdlcy4gVHdvIGNvbmZpZ3VyYXRpb25zIGFyZSBwb3NzaWJsZTogKGEpIGFsbG93IHBvcnRzIHRvIG1vdmUgZnJlZWx5IG9uIHRoZSBzaWRlIHRoZXkgYXJlIGFzc2lnbmVkIHRvICh0aGUgb3JkZXIgaXMgYWx3YXlzIGRlZmluZWQgYmVmb3JlaGFuZCksIChiKSBhZGRpdGlvbmFsbHkgYWxsb3cgdG8gZW5sYXJnZSBhIG5vZGUgd2hlcmV2ZXIgaXQgaGVscHMuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBjb25maWd1cmVkIGZvciBhIG5vZGUsIHRoZSAnbm9kZUZsZXhpYmlsaXR5LmRlZmF1bHQnIHZhbHVlIGlzIHVzZWQsIHdoaWNoIGlzIHNwZWNpZmllZCBmb3IgdGhlIG5vZGUncyBwYXJlbnQuIiksY3MpLHVodCksdW4oSnMpKSkpLGFhKGUsWm90LE00LEh2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEpvdCksIm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgubm9kZUZsZXhpYmlsaXR5IiksIk5vZGUgRmxleGliaWxpdHkgRGVmYXVsdCIpLCJEZWZhdWx0IHZhbHVlIG9mIHRoZSAnbm9kZUZsZXhpYmlsaXR5JyBvcHRpb24gZm9yIHRoZSBjaGlsZHJlbiBvZiBhIGhpZXJhcmNoaWNhbCBub2RlLiIpLFM5dCksY3MpLHVodCksdW4ocW4pKSkpLGFhKGUsSm90LE00LHF2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE42dCkseTFlKSwiU2VsZi1Mb29wIERpc3RyaWJ1dGlvbiIpLCJBbHRlciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBsb29wcyBhcm91bmQgdGhlIG5vZGUuIEl0IG9ubHkgdGFrZXMgZWZmZWN0IGZvciBQb3J0Q29uc3RyYWludHMuRlJFRS4iKSx3OXQpLGNzKSwkQ3QpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUDZ0KSx5MWUpLCJTZWxmLUxvb3AgT3JkZXJpbmciKSwiQWx0ZXIgdGhlIG9yZGVyaW5nIG9mIHRoZSBsb29wcyB0aGV5IGNhbiBlaXRoZXIgYmUgc3RhY2tlZCBvciBzZXF1ZW5jZWQuIEl0IG9ubHkgdGFrZXMgZWZmZWN0IGZvciBQb3J0Q29uc3RyYWludHMuRlJFRS4iKSxtOXQpLGNzKSx6Q3QpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUXEpLCJlZGdlUm91dGluZy5zcGxpbmVzIiksIlNwbGluZSBSb3V0aW5nIE1vZGUiKSwiU3BlY2lmaWVzIHRoZSB3YXkgY29udHJvbCBwb2ludHMgYXJlIGFzc2VtYmxlZCBmb3IgZWFjaCBpbmRpdmlkdWFsIGVkZ2UuIENPTlNFUlZBVElWRSBlbnN1cmVzIHRoYXQgZWRnZXMgYXJlIHByb3Blcmx5IHJvdXRlZCBhcm91bmQgdGhlIG5vZGVzIGJ1dCBmZWVscyByYXRoZXIgb3J0aG9nb25hbCBhdCB0aW1lcy4gU0xPUFBZIHVzZXMgZmV3ZXIgY29udHJvbCBwb2ludHMgdG8gb2J0YWluIGN1cnZpZXIgZWRnZSByb3V0ZXMgYnV0IG1heSByZXN1bHQgaW4gZWRnZXMgb3ZlcmxhcHBpbmcgbm9kZXMuIikseTl0KSxjcyksSEN0KSx1bihxbikpKSksYWEoZSxRcSxVRCxzdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxacSksImVkZ2VSb3V0aW5nLnNwbGluZXMuc2xvcHB5IiksIlNsb3BweSBTcGxpbmUgTGF5ZXIgU3BhY2luZyBGYWN0b3IiKSwiU3BhY2luZyBmYWN0b3IgZm9yIHJvdXRpbmcgYXJlYSBiZXR3ZWVuIGxheWVycyB3aGVuIHVzaW5nIHNsb3BweSBzcGxpbmUgcm91dGluZy4iKSwuMiksRG8pLGNhKSx1bihxbikpKSksYWEoZSxacSxVRCxvdmUpLGFhKGUsWnEsUXEsY3ZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdGN0KSwiZWRnZVJvdXRpbmcucG9seWxpbmUiKSwiU2xvcGVkIEVkZ2UgWm9uZSBXaWR0aCIpLCJXaWR0aCBvZiB0aGUgc3RyaXAgdG8gdGhlIGxlZnQgYW5kIHRvIHRoZSByaWdodCBvZiBlYWNoIGxheWVyIHdoZXJlIHRoZSBwb2x5bGluZSBlZGdlIHJvdXRlciBpcyBhbGxvd2VkIHRvIHJlZnJhaW4gZnJvbSBlbnN1cmluZyB0aGF0IGVkZ2VzIGFyZSByb3V0ZWQgaG9yaXpvbnRhbGx5LiBUaGlzIHByZXZlbnRzIGF3a3dhcmQgYmVuZCBwb2ludHMgZm9yIG5vZGVzIHRoYXQgZXh0ZW50IGFsbW9zdCB0byB0aGUgZWRnZSBvZiB0aGVpciBsYXllci4iKSwyKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLHRjdCxVRCxldmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxGNnQpLEYxKSwiU3BhY2luZyBCYXNlIFZhbHVlIiksIkFuIG9wdGlvbmFsIGJhc2UgdmFsdWUgZm9yIGFsbCBvdGhlciBsYXlvdXQgb3B0aW9ucyBvZiB0aGUgJ3NwYWNpbmcnIGdyb3VwLiBJdCBjYW4gYmUgdXNlZCB0byBjb252ZW5pZW50bHkgYWx0ZXIgdGhlIG92ZXJhbGwgJ3NwYWNpb3VzbmVzcycgb2YgdGhlIGRyYXdpbmcuIFdoZW5ldmVyIGFuIGV4cGxpY2l0IHZhbHVlIGlzIHNldCBmb3IgdGhlIG90aGVyIGxheW91dCBvcHRpb25zLCB0aGlzIGJhc2UgdmFsdWUgd2lsbCBoYXZlIG5vIGVmZmVjdC4gVGhlIGJhc2UgdmFsdWUgaXMgbm90IGluaGVyaXRlZCwgaS5lLiBpdCBtdXN0IGJlIHNldCBmb3IgZWFjaCBoaWVyYXJjaGljYWwgbm9kZS4iKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQjZ0KSxGMSksIkVkZ2UgTm9kZSBCZXR3ZWVuIExheWVycyBTcGFjaW5nIiksIlRoZSBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGFyZSByb3V0ZWQgbmV4dCB0byB0aGUgbm9kZSdzIGxheWVyLiBGb3IgdGhlIHNwYWNpbmcgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMgdGhhdCBjcm9zcyB0aGUgbm9kZSdzIGxheWVyICdzcGFjaW5nLmVkZ2VOb2RlJyBpcyB1c2VkLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUjZ0KSxGMSksIkVkZ2UgRWRnZSBCZXR3ZWVuIExheWVyIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBlZGdlcyB0aGF0IGFyZSByb3V0ZWQgYmV0d2VlbiB0aGUgc2FtZSBwYWlyIG9mIGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLmVkZ2VFZGdlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIHBhaXJzIG9mIGVkZ2VzIGNyb3NzaW5nIHRoZSBzYW1lIGxheWVyLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsajZ0KSxGMSksIk5vZGUgTm9kZSBCZXR3ZWVuIExheWVycyBTcGFjaW5nIiksIlRoZSBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGFueSBwYWlyIG9mIG5vZGVzIG9mIHR3byBhZGphY2VudCBsYXllcnMuIE5vdGUgdGhhdCAnc3BhY2luZy5ub2RlTm9kZScgaXMgdXNlZCBmb3IgdGhlIHNwYWNpbmcgYmV0d2VlbiBub2RlcyB3aXRoaW4gdGhlIGxheWVyIGl0c2VsZi4iKSwyMCksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCQ2dCksWTZ0KSwiRGlyZWN0aW9uIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBoYXZlIGEgY2VydGFpbiBlZGdlIHBvaW50IGludG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgb3ZlcmFsbCBsYXlvdXQuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgdGhlIGN5Y2xlIGJyZWFraW5nIHBoYXNlLiIpLGRlKDApKSxnYyksamEpLHVuKElkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsejZ0KSxZNnQpLCJTaG9ydG5lc3MgUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGtlZXAgYW4gZWRnZSBhcyBzaG9ydCBhcyBwb3NzaWJsZS4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyB0aGUgbGF5ZXJpbmcgcGhhc2UuIiksZGUoMCkpLGdjKSxqYSksdW4oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxxNnQpLFk2dCksIlN0cmFpZ2h0bmVzcyBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8ga2VlcCBhbiBlZGdlIHN0cmFpZ2h0LCBpLmUuIGFsaWduZWQgd2l0aCBvbmUgb2YgdGhlIHR3byBheGVzLiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIG5vZGUgcGxhY2VtZW50LiIpLGRlKDApKSxnYyksamEpLHVuKElkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZWN0KSxYNnQpLEZmZSksIlRyaWVzIHRvIGZ1cnRoZXIgY29tcGFjdCBjb21wb25lbnRzIChkaXNjb25uZWN0ZWQgc3ViLWdyYXBocykuIiksITEpLEFhKSxCcyksdW4ocW4pKSkpLGFhKGUsZWN0LFBfLCEwKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSDZ0KSx4MWUpLCJQb3N0IENvbXBhY3Rpb24gU3RyYXRlZ3kiKSxrMWUpLG85dCksY3MpLEdUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHNnQpLHgxZSksIlBvc3QgQ29tcGFjdGlvbiBDb25zdHJhaW50IENhbGN1bGF0aW9uIiksazFlKSxhOXQpLGNzKSxrVHQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSnEpLFE2dCksIkhpZ2ggRGVncmVlIE5vZGUgVHJlYXRtZW50IiksIk1ha2VzIHJvb20gYXJvdW5kIGhpZ2ggZGVncmVlIG5vZGVzIHRvIHBsYWNlIGxlYWZzIGFuZCB0cmVlcy4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG5jdCksUTZ0KSwiSGlnaCBEZWdyZWUgTm9kZSBUaHJlc2hvbGQiKSwiV2hldGhlciBhIG5vZGUgaXMgY29uc2lkZXJlZCB0byBoYXZlIGEgaGlnaCBkZWdyZWUuIiksZGUoMTYpKSxnYyksamEpLHVuKHFuKSkpKSxhYShlLG5jdCxKcSwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHJjdCksUTZ0KSwiSGlnaCBEZWdyZWUgTm9kZSBNYXhpbXVtIFRyZWUgSGVpZ2h0IiksIk1heGltdW0gaGVpZ2h0IG9mIGEgc3VidHJlZSBjb25uZWN0ZWQgdG8gYSBoaWdoIGRlZ3JlZSBub2RlIHRvIGJlIG1vdmVkIHRvIHNlcGFyYXRlIGxheWVycy4iKSxkZSg1KSksZ2MpLGphKSx1bihxbikpKSksYWEoZSxyY3QsSnEsITApLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZMCksWjZ0KSwiR3JhcGggV3JhcHBpbmcgU3RyYXRlZ3kiKSwiRm9yIGNlcnRhaW4gZ3JhcGhzIGFuZCBjZXJ0YWluIHByZXNjcmliZWQgZHJhd2luZyBhcmVhcyBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIHNwbGl0IHRoZSBsYWlkIG91dCBncmFwaCBpbnRvIGNodW5rcyB0aGF0IGFyZSBwbGFjZWQgc2lkZSBieSBzaWRlLiBUaGUgZWRnZXMgdGhhdCBjb25uZWN0IGRpZmZlcmVudCBjaHVua3MgYXJlICd3cmFwcGVkJyBhcm91bmQgZnJvbSB0aGUgZW5kIG9mIG9uZSBjaHVuayB0byB0aGUgc3RhcnQgb2YgdGhlIG90aGVyIGNodW5rLiBUaGUgcG9pbnRzIGJldHdlZW4gdGhlIGNodW5rcyBhcmUgcmVmZXJyZWQgdG8gYXMgJ2N1dHMnLiIpLEQ5dCksY3MpLFdDdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0SCksWjZ0KSwiQWRkaXRpb25hbCBXcmFwcGVkIEVkZ2VzIFNwYWNpbmciKSwiVG8gdmlzdWFsbHkgc2VwYXJhdGUgZWRnZXMgdGhhdCBhcmUgd3JhcHBlZCBmcm9tIHJlZ3VsYXJseSByb3V0ZWQgZWRnZXMgYW4gYWRkaXRpb25hbCBzcGFjaW5nIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybSBvZiB0aGlzIGxheW91dCBvcHRpb24uIFRoZSBzcGFjaW5nIGlzIGFkZGVkIHRvIHRoZSByZWd1bGFyIGVkZ2VOb2RlIHNwYWNpbmcuIiksMTApLERvKSxjYSksdW4ocW4pKSkpLGFhKGUsdEgsWTAsbndlKSxhYShlLHRILFkwLHJ3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGVIKSxaNnQpLCJDb3JyZWN0aW9uIEZhY3RvciBmb3IgV3JhcHBpbmciKSwiQXQgdGltZXMgYW5kIGZvciBjZXJ0YWluIHR5cGVzIG9mIGdyYXBocyB0aGUgZXhlY3V0ZWQgd3JhcHBpbmcgbWF5IHByb2R1Y2UgcmVzdWx0cyB0aGF0IGFyZSBjb25zaXN0ZW50bHkgYmlhc2VkIGluIHRoZSBzYW1lIGZhc2hpb246IGVpdGhlciB3cmFwcGluZyB0byBvZnRlbiBvciB0byByYXJlbHkuIFRoaXMgZmFjdG9yIGNhbiBiZSB1c2VkIHRvIGNvcnJlY3QgdGhlIGJpYXMuIEludGVybmFsbHksIGl0IGlzIHNpbXBseSBtdWx0aXBsaWVkIHdpdGggdGhlICdhc3BlY3QgcmF0aW8nIGxheW91dCBvcHRpb24uIiksMSksRG8pLGNhKSx1bihxbikpKSksYWEoZSxlSCxZMCxzd2UpLGFhKGUsZUgsWTAsYXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsel8pLEUxZSksIkN1dHRpbmcgU3RyYXRlZ3kiKSwiVGhlIHN0cmF0ZWd5IGJ5IHdoaWNoIHRoZSBsYXllciBpbmRleGVzIGFyZSBkZXRlcm1pbmVkIGF0IHdoaWNoIHRoZSBsYXllcmluZyBjcnVtYmxlcyBpbnRvIGNodW5rcy4iKSxJOXQpLGNzKSxfVHQpLHVuKHFuKSkpKSxhYShlLHpfLFkwLGZ3ZSksYWEoZSx6XyxZMCxkd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxpY3QpLEUxZSksIk1hbnVhbGx5IFNwZWNpZmllZCBDdXRzIiksIkFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGhlciBvd24gY3V0cyBmb3IgYSBjZXJ0YWluIGdyYXBoLiIpLHExKSxwaCksdW4ocW4pKSkpLGFhKGUsaWN0LHpfLGN3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHNjdCksIndyYXBwaW5nLmN1dHRpbmcubXNkIiksIk1TRCBGcmVlZG9tIiksIlRoZSBNU0QgY3V0dGluZyBzdHJhdGVneSBzdGFydHMgd2l0aCBhbiBpbml0aWFsIGd1ZXNzIG9uIHRoZSBudW1iZXIgb2YgY2h1bmtzIHRoZSBncmFwaCBzaG91bGQgYmUgc3BsaXQgaW50by4gVGhlIGZyZWVkb20gc3BlY2lmaWVzIGhvdyBtdWNoIHRoZSBzdHJhdGVneSBtYXkgZGV2aWF0ZSBmcm9tIHRoaXMgZ3Vlc3MuIEUuZy4gaWYgYW4gaW5pdGlhbCBudW1iZXIgb2YgMyBpcyBjb21wdXRlZCwgYSBmcmVlZG9tIG9mIDEgYWxsb3dzIDIsIDMsIGFuZCA0IGN1dHMuIiksTTl0KSxnYyksamEpLHVuKHFuKSkpKSxhYShlLHNjdCx6Xyxsd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxuSCksVDFlKSwiVmFsaWRpZmljYXRpb24gU3RyYXRlZ3kiKSwiV2hlbiB3cmFwcGluZyBncmFwaHMsIG9uZSBjYW4gc3BlY2lmeSBpbmRpY2VzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGFzIHNwbGl0IHBvaW50cy4gVGhlIHZhbGlkaWZpY2F0aW9uIHN0cmF0ZWd5IG1ha2VzIHN1cmUgZXZlcnkgY29tcHV0ZWQgc3BsaXQgcG9pbnQgaXMgYWxsb3dlZC4iKSxPOXQpLGNzKSxVQ3QpLHVuKHFuKSkpKSxhYShlLG5ILFkwLEN3ZSksYWEoZSxuSCxZMCxfd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxySCksVDFlKSwiVmFsaWQgSW5kaWNlcyBmb3IgV3JhcHBpbmciKSxudWxsKSxxMSkscGgpLHVuKHFuKSkpKSxhYShlLHJILFkwLGt3ZSksYWEoZSxySCxZMCxFd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxpSCksSjZ0KSwiSW1wcm92ZSBDdXRzIiksIkZvciBnZW5lcmFsIGdyYXBocyBpdCBpcyBpbXBvcnRhbnQgdGhhdCBub3QgdG9vIG1hbnkgZWRnZXMgd3JhcCBiYWNrd2FyZHMuIFRodXMgYSBjb21wcm9taXNlIGJldHdlZW4gZXZlbmx5LWRpc3RyaWJ1dGVkIGN1dHMgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgY3V0IGVkZ2VzIGlzIHNvdWdodC4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYWEoZSxpSCxZMCx2d2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzSCksSjZ0KSwiRGlzdGFuY2UgUGVuYWx0eSBXaGVuIEltcHJvdmluZyBDdXRzIiksbnVsbCksMiksRG8pLGNhKSx1bihxbikpKSksYWEoZSxzSCxZMCxwd2UpLGFhKGUsc0gsaUgsITApLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxhY3QpLEo2dCksIkltcHJvdmUgV3JhcHBlZCBFZGdlcyIpLCJUaGUgaW5pdGlhbCB3cmFwcGluZyBpcyBwZXJmb3JtZWQgaW4gYSB2ZXJ5IHNpbXBsZSB3YXkuIEFzIGEgY29uc2VxdWVuY2UsIGVkZ2VzIHRoYXQgd3JhcCBmcm9tIG9uZSBjaHVuayB0byBhbm90aGVyIG1heSBiZSB1bm5lY2Vzc2FyaWx5IGxvbmcuIEFjdGl2YXRpbmcgdGhpcyBvcHRpb24gdHJpZXMgdG8gc2hvcnRlbiBzdWNoIGVkZ2VzLiIpLCEwKSxBYSksQnMpLHVuKHFuKSkpKSxhYShlLGFjdCxZMCxtd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWNnQpLGhjdCksIkVkZ2UgTGFiZWwgU2lkZSBTZWxlY3Rpb24iKSwiTWV0aG9kIHRvIGRlY2lkZSBvbiBlZGdlIGxhYmVsIHNpZGVzLiIpLHY5dCksY3MpLElUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxVNnQpLGhjdCksIkVkZ2UgQ2VudGVyIExhYmVsIFBsYWNlbWVudCBTdHJhdGVneSIpLCJEZXRlcm1pbmVzIGluIHdoaWNoIGxheWVyIGNlbnRlciBsYWJlbHMgb2YgbG9uZyBlZGdlcyBzaG91bGQgYmUgcGxhY2VkLiIpLGI5dCksY3MpLGM3KSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbWGddKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGFIKSxXRCksIkNvbnNpZGVyIE1vZGVsIE9yZGVyIiksIlByZXNlcnZlcyB0aGUgb3JkZXIgb2Ygbm9kZXMgYW5kIGVkZ2VzIGluIHRoZSBtb2RlbCBmaWxlIGlmIHRoaXMgZG9lcyBub3QgbGVhZCB0byBhZGRpdGlvbmFsIGVkZ2UgY3Jvc3NpbmdzLiBEZXBlbmRpbmcgb24gdGhlIHN0cmF0ZWd5IHRoaXMgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSBzaW5jZSB0aGUgbm9kZSBhbmQgZWRnZSBvcmRlciBtaWdodCBiZSBjb25mbGljdGluZy4iKSxsOXQpLGNzKSxGQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVzZ0KSxXRCksIk5vIE1vZGVsIE9yZGVyIiksIlNldCBvbiBhIG5vZGUgdG8gbm90IHNldCBhIG1vZGVsIG9yZGVyIGZvciB0aGlzIG5vZGUgZXZlbiB0aG91Z2ggaXQgaXMgYSByZWFsIG5vZGUuIiksITEpLEFhKSxCcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxvY3QpLFdEKSwiQ29uc2lkZXIgTW9kZWwgT3JkZXIgZm9yIENvbXBvbmVudHMiKSwiSWYgc2V0IHRvIE5PTkUgdGhlIHVzdWFsIG9yZGVyaW5nIHN0cmF0ZWd5IChieSBjdW11bGF0aXZlIG5vZGUgcHJpb3JpdHkgYW5kIHNpemUgb2Ygbm9kZXMpIGlzIHVzZWQuIElOU0lERV9QT1JUX1NJREVTIG9yZGVycyB0aGUgY29tcG9uZW50cyB3aXRoIGV4dGVybmFsIHBvcnRzIG9ubHkgaW5zaWRlIHRoZSBncm91cHMgd2l0aCB0aGUgc2FtZSBwb3J0IHNpZGUuIEZPUkNFX01PREVMX09SREVSIGVuZm9yY2VzIHRoZSBtb2RlIG9yZGVyIG9uIGNvbXBvbmVudHMuIFRoaXMgb3B0aW9uIG1pZ2h0IHByb2R1Y2UgYmFkIGFsaWdubWVudHMgYW5kIHN1YiBvcHRpbWFsIGRyYXdpbmdzIGluIHRlcm1zIG9mIHVzZWQgYXJlYSBzaW5jZSB0aGUgb3JkZXJpbmcgc2hvdWxkIGJlIHJlc3BlY3RlZC4iKSxjOXQpLGNzKSxBN3QpLHVuKHFuKSkpKSxhYShlLG9jdCxQXyxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSzZ0KSxXRCksIkxvbmcgRWRnZSBPcmRlcmluZyBTdHJhdGVneSIpLCJJbmRpY2F0ZXMgd2hldGhlciBsb25nIGVkZ2VzIGFyZSBzb3J0ZWQgdW5kZXIsIG92ZXIsIG9yIGVxdWFsIHRvIG5vZGVzIHRoYXQgaGF2ZSBubyBjb25uZWN0aW9uIHRvIGEgcHJldmlvdXMgbGF5ZXIgaW4gYSBsZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRvLWxlZnQgbGF5b3V0LiBVbmRlciBhbmQgb3ZlciBjaGFuZ2VzIHRvIHJpZ2h0IGFuZCBsZWZ0IGluIGEgdmVydGljYWwgbGF5b3V0LiIpLHU5dCksY3MpLFNDdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxjY3QpLFdEKSwiQ3Jvc3NpbmcgQ291bnRlciBOb2RlIE9yZGVyIEluZmx1ZW5jZSIpLCJJbmRpY2F0ZXMgd2l0aCB3aGF0IHBlcmNlbnRhZ2UgKDEgZm9yIDEwMCUpIHZpb2xhdGlvbnMgb2YgdGhlIG5vZGUgbW9kZWwgb3JkZXIgYXJlIHdlaWdodGVkIGFnYWluc3QgdGhlIGNyb3NzaW5ncyBlLmcuIGEgdmFsdWUgb2YgMC41IG1lYW5zIHR3byBtb2RlbCBvcmRlciB2aW9sYXRpb25zIGFyZSBhcyBpbXBvcnRhbnQgYXMgb24gZWRnZSBjcm9zc2luZy4gVGhpcyBhbGxvd3Mgc29tZSBlZGdlIGNyb3NzaW5ncyBpbiBmYXZvciBvZiBwcmVzZXJ2aW5nIHRoZSBtb2RlbCBvcmRlci4gSXQgaXMgYWR2aXNlZCB0byBzZXQgdGhpcyB2YWx1ZSB0byBhIHZlcnkgc21hbGwgcG9zaXRpdmUgdmFsdWUgKGUuZy4gMC4wMDEpIHRvIGhhdmUgbWluaW1hbCBjcm9zc2luZyBhbmQgYSBvcHRpbWFsIG5vZGUgb3JkZXIuIERlZmF1bHRzIHRvIG5vIGluZmx1ZW5jZSAoMCkuIiksMCksRG8pLGNhKSx1bihxbikpKSksYWEoZSxjY3QsYUgsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHVjdCksV0QpLCJDcm9zc2luZyBDb3VudGVyIFBvcnQgT3JkZXIgSW5mbHVlbmNlIiksIkluZGljYXRlcyB3aXRoIHdoYXQgcGVyY2VudGFnZSAoMSBmb3IgMTAwJSkgdmlvbGF0aW9ucyBvZiB0aGUgcG9ydCBtb2RlbCBvcmRlciBhcmUgd2VpZ2h0ZWQgYWdhaW5zdCB0aGUgY3Jvc3NpbmdzIGUuZy4gYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdHdvIG1vZGVsIG9yZGVyIHZpb2xhdGlvbnMgYXJlIGFzIGltcG9ydGFudCBhcyBvbiBlZGdlIGNyb3NzaW5nLiBUaGlzIGFsbG93cyBzb21lIGVkZ2UgY3Jvc3NpbmdzIGluIGZhdm9yIG9mIHByZXNlcnZpbmcgdGhlIG1vZGVsIG9yZGVyLiBJdCBpcyBhZHZpc2VkIHRvIHNldCB0aGlzIHZhbHVlIHRvIGEgdmVyeSBzbWFsbCBwb3NpdGl2ZSB2YWx1ZSAoZS5nLiAwLjAwMSkgdG8gaGF2ZSBtaW5pbWFsIGNyb3NzaW5nIGFuZCBhIG9wdGltYWwgcG9ydCBvcmRlci4gRGVmYXVsdHMgdG8gbm8gaW5mbHVlbmNlICgwKS4iKSwwKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLHVjdCxhSCxudWxsKSx6aGUoKG5ldyBEQixlKSl9O3ZhciBfMmUsUzJlLEEyZSxhOXQsTDJlLG85dCxNMmUsYzl0LEkyZSxEMmUsTzJlLHU5dCxOMmUsUDJlLGw5dCxGMmUsQjJlLFIyZSxoOXQsajJlLCQyZSx6MmUsZjl0LHEyZSxIMmUsRzJlLFYyZSxVMmUsVzJlLEsyZSxZMmUsZDl0LFgyZSxnOXQsUTJlLHA5dCxaMmUsYjl0LEoyZSx2OXQsdHZlLGV2ZSxudmUsdzl0LHJ2ZSxtOXQsaXZlLHk5dCxzdmUsYXZlLG92ZSxjdmUsdXZlLGx2ZSxodmUsZnZlLGR2ZSxndmUseDl0LHB2ZSxidmUsdnZlLHd2ZSxtdmUseXZlLGs5dCx4dmUsa3ZlLEV2ZSxUdmUsQ3ZlLF92ZSxTdmUsRTl0LEF2ZSxUOXQsTHZlLE12ZSxJdmUsQzl0LER2ZSxPdmUsXzl0LE52ZSxQdmUsRnZlLEJ2ZSxSdmUsanZlLCR2ZSx6dmUsUzl0LHF2ZSxIdmUsR3ZlLEE5dCxWdmUsTDl0LFV2ZSxXdmUsS3ZlLFl2ZSxYdmUsUXZlLFp2ZSxKdmUsdHdlLGV3ZSxud2UscndlLGl3ZSxzd2UsYXdlLG93ZSxjd2UsdXdlLE05dCxsd2UsaHdlLEk5dCxmd2UsZHdlLGd3ZSxwd2UsYndlLHZ3ZSx3d2UsbXdlLHl3ZSxEOXQseHdlLGt3ZSxFd2UsVHdlLE85dCxDd2UsX3dlO1Aoa2MsIkxheWVyZWRNZXRhRGF0YVByb3ZpZGVyIiw4NDgpLEkoOTg2LDEsSWgsREIpLGwuUWU9ZnVuY3Rpb24oZSl7emhlKGUpfTt2YXIgTGQsemx0LFVHLGtTLFdHLE45dCxLRyxQNixZRyxQOXQsRjl0LHFsdCxkYixIbHQsQnksQjl0LF9PLEdsdCxSOXQsU3dlLFhHLFZsdCxFUyxSeSxBd2UsVmwsajl0LCQ5dCxRRyxVbHQsTWQsWkcsWDAsejl0LHE5dCxIOXQsV2x0LEtsdCxHOXQsVWcsWWx0LFY5dCxqeSxVOXQsVzl0LEs5dCxKRywkeSxQMixZOXQsWDl0LF9vLFE5dCxMd2UsY3UsdFYsWjl0LEo5dCx0Q3QsWGx0LGVDdCxlVixuQ3QsckN0LG5WLE93LGlDdCxRbHQsVFMsc0N0LE53LENTLHJWLEYyLFpsdCxwNyxpVixCMixhQ3Qsb0N0LGNDdCxiNyx1Q3QsTXdlLEl3ZSxEd2UsT3dlLFB3LHp5LG9zLFdnLE53ZSxxeSxsQ3QsdjcsaEN0LEh5LFB3ZSx3NyxmQ3QsRjYsRndlLEJ3ZSxTTyxKbHQsZEN0LEFPLHhmLFE0LEI2LEZ3LFIyLHNWLEd5LHRodCxtNyx5NyxCdyxaNCxlaHQsTE8sX1MsU1Msbmh0LGdDdCxwQ3QsYkN0LHZDdCxyaHQsd0N0LG1DdCx5Q3QseEN0LGlodCxhVjtQKGtjLCJMYXllcmVkT3B0aW9ucyIsOTg2KSxJKDk4NywxLHt9LGVRKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFF6dCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChrYywiTGF5ZXJlZE9wdGlvbnMvTGF5ZXJlZEZhY3RvcnkiLDk4NyksSSgxMzcyLDEse30pLGwuYT0wO3ZhciBSd2U7UChFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIiLDEzNzIpLEkoNzc5LDEzNzIse30sbDN0KTt2YXIgb1YsandlO1Aoa2MsIkxheWVyZWRTcGFjaW5ncy9MYXllcmVkU3BhY2luZ3NCdWlsZGVyIiw3NzkpLEkoMzEzLDIyLHszOjEsMzU6MSwyMjoxLDMxMzoxLDI0NjoxLDIzNDoxfSxKOSksbC5LZj1mdW5jdGlvbigpe3JldHVybiB5Y2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4geWNlKHRoaXMpfTt2YXIgc2h0LGtDdCxFQ3QsY1YsYWh0LFRDdCxDQ3Q9anIoa2MsIkxheWVyaW5nU3RyYXRlZ3kiLDMxMyxIcixKc24sVVplKSwkd2U7SSgzNzgsMjIsezM6MSwzNToxLDIyOjEsMzc4OjF9LEFldCk7dmFyIG9odCxfQ3QsdVYsU0N0PWpyKGtjLCJMb25nRWRnZU9yZGVyaW5nU3RyYXRlZ3kiLDM3OCxIcixJcm4sV1plKSx6d2U7SSgxOTcsMjIsezM6MSwzNToxLDIyOjEsMTk3OjF9LFZSKTt2YXIgSjQsdDUsbFYsY2h0LHVodD1qcihrYywiTm9kZUZsZXhpYmlsaXR5IiwxOTcsSHIsUmluLEtaZSkscXdlO0koMzE1LDIyLHszOjEsMzU6MSwyMjoxLDMxNToxLDI0NjoxLDIzNDoxfSxUTSksbC5LZj1mdW5jdGlvbigpe3JldHVybiBpY2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gaWNlKHRoaXMpfTt2YXIgQVMsbGh0LGhodCxMUyxBQ3QsTEN0PWpyKGtjLCJOb2RlUGxhY2VtZW50U3RyYXRlZ3kiLDMxNSxIcix4c24sdEplKSxId2U7SSgyNjAsMjIsezM6MSwzNToxLDIyOjEsMjYwOjF9LEN4KTt2YXIgTUN0LE1PLElDdCxEQ3QsSU8sT0N0LGhWLGZWLE5DdD1qcihrYywiTm9kZVByb21vdGlvblN0cmF0ZWd5IiwyNjAsSHIsWmFuLFhaZSksR3dlO0koMzM5LDIyLHszOjEsMzU6MSwyMjoxLDMzOToxfSxMZXQpO3ZhciBQQ3QsZ2IsZmh0LEZDdD1qcihrYywiT3JkZXJpbmdTdHJhdGVneSIsMzM5LEhyLGpybixRWmUpLFZ3ZTtJKDQyMSwyMix7MzoxLDM1OjEsMjI6MSw0MjE6MX0sTmJ0KTt2YXIgZGh0LGdodCxCQ3Q9anIoa2MsIlBvcnRTb3J0aW5nU3RyYXRlZ3kiLDQyMSxIcixxbm4sWlplKSxVd2U7SSg0NTIsMjIsezM6MSwzNToxLDIyOjEsNDUyOjF9LE1ldCk7dmFyIEp1LGV1LE1TLFd3ZT1qcihrYywiUG9ydFR5cGUiLDQ1MixIcixScm4sWVplKSxLd2U7SSgzNzUsMjIsezM6MSwzNToxLDIyOjEsMzc1OjF9LElldCk7dmFyIFJDdCxwaHQsakN0LCRDdD1qcihrYywiU2VsZkxvb3BEaXN0cmlidXRpb25TdHJhdGVneSIsMzc1LEhyLCRybixKWmUpLFl3ZTtJKDM3NiwyMix7MzoxLDM1OjEsMjI6MSwzNzY6MX0sUGJ0KTt2YXIgRE8sYmh0LHpDdD1qcihrYywiU2VsZkxvb3BPcmRlcmluZ1N0cmF0ZWd5IiwzNzYsSHIsQm5uLGVKZSksWHdlO0koMzA0LDEsezMwNDoxfSxIbGUpLFAoa2MsIlNwYWNpbmdzIiwzMDQpLEkoMzM2LDIyLHszOjEsMzU6MSwyMjoxLDMzNjoxfSxEZXQpO3ZhciB2aHQscUN0LElTLEhDdD1qcihrYywiU3BsaW5lUm91dGluZ01vZGUiLDMzNixIcixxcm4sbkplKSxRd2U7SSgzMzgsMjIsezM6MSwzNToxLDIyOjEsMzM4OjF9LE9ldCk7dmFyIHdodCxHQ3QsVkN0LFVDdD1qcihrYywiVmFsaWRpZnlTdHJhdGVneSIsMzM4LEhyLEhybixySmUpLFp3ZTtJKDM3NywyMix7MzoxLDM1OjEsMjI6MSwzNzc6MX0sTmV0KTt2YXIgVnksbWh0LHg3LFdDdD1qcihrYywiV3JhcHBpbmdTdHJhdGVneSIsMzc3LEhyLHpybixpSmUpLEp3ZTtJKDEzODMsMSx6YyxZSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSx0bWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtPeW4odGhpcyx1KGUsMzcpLG4pfTt2YXIgdG1lO1AobEgsIkRlcHRoRmlyc3RDeWNsZUJyZWFrZXIiLDEzODMpLEkoNzgyLDEsemMsS3Z0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGVtZX0sbC5wZj1mdW5jdGlvbihlLG4pe0k1bih0aGlzLHUoZSwzNyksbil9LGwuWmY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoRmUoZSx6eih0aGlzLmQsZS5jLmxlbmd0aCkpLDEwKX07dmFyIGVtZTtQKGxILCJHcmVlZHlDeWNsZUJyZWFrZXIiLDc4MiksSSgxMzg2LDc4Mix6YyxNVnQpLGwuWmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG89bnVsbCxuPXZpLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLFZzKHIsKHNlKCksVGMpKSYmdShRKHIsVGMpLDE5KS5hPG4mJihuPXUoUShyLFRjKSwxOSkuYSxvPXIpO3JldHVybiBvfHx1KEZlKGUsenoodGhpcy5kLGUuYy5sZW5ndGgpKSwxMCl9LFAobEgsIkdyZWVkeU1vZGVsT3JkZXJDeWNsZUJyZWFrZXIiLDEzODYpLEkoMTM4NCwxLHpjLHpKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLG5tZX0sbC5wZj1mdW5jdGlvbihlLG4pe2Uzbih0aGlzLHUoZSwzNyksbil9O3ZhciBubWU7UChsSCwiSW50ZXJhY3RpdmVDeWNsZUJyZWFrZXIiLDEzODQpLEkoMTM4NSwxLHpjLHFKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHJtZX0sbC5wZj1mdW5jdGlvbihlLG4pe24zbih0aGlzLHUoZSwzNyksbil9LGwuYT0wLGwuYj0wO3ZhciBybWU7UChsSCwiTW9kZWxPcmRlckN5Y2xlQnJlYWtlciIsMTM4NSksSSgxMzg5LDEsemMsa0d0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGltZX0sbC5wZj1mdW5jdGlvbihlLG4pe1A1bih0aGlzLHUoZSwzNyksbil9O3ZhciBpbWU7UChFeSwiQ29mZm1hbkdyYWhhbUxheWVyZXIiLDEzODkpLEkoMTM5MCwxLE9pLGlSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHVwbih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEV5LCJDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlIiwxMzkwKSxJKDEzOTEsMSxPaSxqdHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWXRuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRXksIkNvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUiLDEzOTEpLEkoMTM5MiwxLHpjLERMKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBIcywoV2EoKSxBZCksKHJvKCkscmx0KSksbGIscjcpLG91LG43KX0sbC5wZj1mdW5jdGlvbihlLG4pe1I0bih0aGlzLHUoZSwzNyksbil9LFAoRXksIkludGVyYWN0aXZlTGF5ZXJlciIsMTM5MiksSSg1NjksMSx7NTY5OjF9LHNxdCksbC5hPTAsbC5jPTAsUChFeSwiSW50ZXJhY3RpdmVMYXllcmVyL0xheWVyU3BhbiIsNTY5KSxJKDEzODgsMSx6YyxJQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSxzbWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtndm4odGhpcyx1KGUsMzcpLG4pfTt2YXIgc21lO1AoRXksIkxvbmdlc3RQYXRoTGF5ZXJlciIsMTM4OCksSSgxMzk1LDEsemMsVkopLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksYmkoYmkoYmkobmV3IEhzLChXYSgpLEFkKSwocm8oKSxoUykpLGxiLHI3KSxvdSxuNyl9LGwucGY9ZnVuY3Rpb24oZSxuKXtvNW4odGhpcyx1KGUsMzcpLG4pfSxsLmE9MCxsLmI9MCxsLmQ9MDt2YXIgS0N0LFlDdDtQKEV5LCJNaW5XaWR0aExheWVyZXIiLDEzOTUpLEkoMTM5NiwxLE9pLEVwKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5jbih0aGlzLHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChFeSwiTWluV2lkdGhMYXllcmVyL01pbk91dGdvaW5nRWRnZXNDb21wYXJhdG9yIiwxMzk2KSxJKDEzODcsMSx6YyxHSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSxhbWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtDM24odGhpcyx1KGUsMzcpLG4pfTt2YXIgYW1lO1AoRXksIk5ldHdvcmtTaW1wbGV4TGF5ZXJlciIsMTM4NyksSSgxMzkzLDEsemMsSFd0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBIcywoV2EoKSxBZCksKHJvKCksaFMpKSxsYixyNyksb3UsbjcpfSxsLnBmPWZ1bmN0aW9uKGUsbil7ZjRuKHRoaXMsdShlLDM3KSxuKX0sbC5kPTAsbC5mPTAsbC5nPTAsbC5pPTAsbC5zPTAsbC50PTAsbC51PTAsUChFeSwiU3RyZXRjaFdpZHRoTGF5ZXJlciIsMTM5MyksSSgxMzk0LDEsT2ksblEpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gT3NuKHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChFeSwiU3RyZXRjaFdpZHRoTGF5ZXJlci8xIiwxMzk0KSxJKDQwMiwxLFBrdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLl9mPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4ganVlKHRoaXMsZSxuLHIpfSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5nPVB0KHIzLF8xZSwyNSx0aGlzLmQsMTUsMSksdGhpcy5mPVB0KHIzLF8xZSwyNSx0aGlzLmQsMTUsMSl9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt0aGlzLmVbZV09UHQoVHIsWHIsMjUsbltlXS5sZW5ndGgsMTUsMSl9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3M9cltlXVtuXSxzLnA9bix0aGlzLmVbZV1bbl09bn0sbC5RZj1mdW5jdGlvbihlLG4scixzKXt1KEZlKHNbZV1bbl0uaixyKSwxMSkucD10aGlzLmQrK30sbC5iPTAsbC5jPTAsbC5kPTAsUCgkdSwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yIiw0MDIpLEkoMTYzMywxLE9pLGFNKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIF9obih0aGlzLmEsdShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCR1LCJBYnN0cmFjdEJhcnljZW50ZXJQb3J0RGlzdHJpYnV0b3IvbGFtYmRhJDAkVHlwZSIsMTYzMyksSSg4MTcsMSxIRCxYd3QpLGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5QZj1mdW5jdGlvbihlLG4scil7fSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpe30sbC5MZj1mdW5jdGlvbigpe3JldHVybiExfSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5jPXRoaXMuZS5hLHRoaXMuZz10aGlzLmYuZ30sbC5PZj1mdW5jdGlvbihlLG4pe25bZV1bMF0uYy5wPWV9LGwuUmY9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5hZz1mdW5jdGlvbihlLG4scixzKXtyP1VzZSh0aGlzLGUpOihYc2UodGhpcyxlLHMpLHJoZSh0aGlzLGUsbikpLGUuYy5sZW5ndGg+MSYmKGplKFJlKFEoRmEoKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksKFRlKCksQnkpKSkpP2djZShlLHRoaXMuZCx1KHRoaXMsNjYwKSk6KHZuKCksWHMoZSx0aGlzLmQpKSxObmUodGhpcy5lLGUpKX0sbC5TZj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTTtmb3IobiE9c1l0KHIsZS5sZW5ndGgpJiYoaD1lW24tKHI/MTotMSldLG1tdCh0aGlzLmYsaCxyPyhzbygpLGV1KTooc28oKSxKdSkpKSxvPWVbbl1bMF0sTT0hc3x8by5rPT0oR24oKSx4cyksQz1fMShlW25dKSx0aGlzLmFnKEMsTSwhMSxyKSxkPTAsaz1uZXcgUyhDKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxMCksZVtuXVtkKytdPXc7cmV0dXJuITF9LGwuVGY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPXNZdChuLGUubGVuZ3RoKSxoPV8xKGVbZF0pLHRoaXMuYWcoaCwhMSwhMCxuKSxyPTAsbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksZVtkXVtyKytdPXM7cmV0dXJuITF9LFAoJHUsIkJhcnljZW50ZXJIZXVyaXN0aWMiLDgxNyksSSg2NTgsMSx7NjU4OjF9LFdrKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkJhcnljZW50ZXJTdGF0ZSBbbm9kZT0iK3RoaXMuYysiLCBzdW1tZWRXZWlnaHQ9Iit0aGlzLmQrIiwgZGVncmVlPSIrdGhpcy5iKyIsIGJhcnljZW50ZXI9Iit0aGlzLmErIiwgdmlzaXRlZD0iK3RoaXMuZSsiXSJ9LGwuYj0wLGwuZD0wLGwuZT0hMTt2YXIgb21lPVAoJHUsIkJhcnljZW50ZXJIZXVyaXN0aWMvQmFyeWNlbnRlclN0YXRlIiw2NTgpO0koMTgwMiwxLE9pLHNSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGZkbih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCR1LCJCYXJ5Y2VudGVySGV1cmlzdGljL2xhbWJkYSQwJFR5cGUiLDE4MDIpLEkoODE2LDEsSEQseDR0KSxsLk1mPWZ1bmN0aW9uKCl7fSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLk9mPWZ1bmN0aW9uKGUsbil7dGhpcy5hW2VdPVB0KG9tZSx7MzoxLDQ6MSw1OjEsMjAxODoxfSw2NTgsbltlXS5sZW5ndGgsMCwxKSx0aGlzLmJbZV09UHQoY21lLHszOjEsNDoxLDU6MSwyMDE5OjF9LDIzMyxuW2VdLmxlbmd0aCwwLDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXtCaWUodGhpcyxyW2VdW25dLCEwKX0sbC5jPSExLFAoJHUsIkZvcnN0ZXJDb25zdHJhaW50UmVzb2x2ZXIiLDgxNiksSSgyMzMsMSx7MjMzOjF9LHRRdCxxbGUpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuO2ZvcihuPW5ldyBfcCxuLmErPSJbIixlPTA7ZTx0aGlzLmQubGVuZ3RoO2UrKylWcihuLFhpZSh0aGlzLmRbZV0pKSx4MSh0aGlzLmcsdGhpcy5kWzBdKS5hIT1udWxsJiZWcihWcigobi5hKz0iPCIsbiksRlllKHgxKHRoaXMuZyx0aGlzLmRbMF0pLmEpKSwiPiIpLGU8dGhpcy5kLmxlbmd0aC0xJiYobi5hKz1LYSk7cmV0dXJuKG4uYSs9Il0iLG4pLmF9LGwuYT0wLGwuYz0wLGwuZj0wO3ZhciBjbWU9UCgkdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9Db25zdHJhaW50R3JvdXAiLDIzMyk7SSgxNzk3LDEsVW4sJHR0KSxsLnRkPWZ1bmN0aW9uKGUpe0JpZSh0aGlzLmEsdShlLDEwKSwhMSl9LFAoJHUsIkZvcnN0ZXJDb25zdHJhaW50UmVzb2x2ZXIvbGFtYmRhJDAkVHlwZSIsMTc5NyksSSgyMTQsMSx7MjE0OjEsMjI1OjF9LEtsZSksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLk9mPWZ1bmN0aW9uKGUsbil7fSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5yPVB0KFRyLFhyLDI1LHRoaXMubiwxNSwxKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbztvPXJbZV1bbl0scz1vLmUscyYmdWUodGhpcy5iLHMpfSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpeysrdGhpcy5ufSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGloZSh0aGlzLmUsbmV3IHFzKX0sbC5nPSExLGwuaT0hMSxsLm49MCxsLnM9ITEsUCgkdSwiR3JhcGhJbmZvSG9sZGVyIiwyMTQpLEkoMTgzMiwxLEhELHRRKSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLl9mPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gciYmbj4wP2dydCh0aGlzLmEsZVtuLTFdLGVbbl0pOiFyJiZuPGUubGVuZ3RoLTE/Z3J0KHRoaXMuYSxlW25dLGVbbisxXSk6Y2l0KHRoaXMuYSxlW25dLHI/KGJlKCksQm4pOihiZSgpLEhuKSksemJuKHRoaXMsZSxuLHIpfSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5kPVB0KFRyLFhyLDI1LHRoaXMuYywxNSwxKSx0aGlzLmE9bmV3IEhNKHRoaXMuZCl9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3M9cltlXVtuXSx0aGlzLmMrPXMuai5jLmxlbmd0aH0sbC5jPTAsUCgkdSwiR3JlZWR5UG9ydERpc3RyaWJ1dG9yIiwxODMyKSxJKDE0MDEsMSx6YyxPQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gd3VuKHUoZSwzNykpfSxsLnBmPWZ1bmN0aW9uKGUsbil7ejNuKHUoZSwzNyksbil9O3ZhciB1bWU7UCgkdSwiSW50ZXJhY3RpdmVDcm9zc2luZ01pbmltaXplciIsMTQwMSksSSgxNDAyLDEsT2ksbCR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFkxbih0aGlzLHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUCgkdSwiSW50ZXJhY3RpdmVDcm9zc2luZ01pbmltaXplci8xIiwxNDAyKSxJKDUwNywxLHs1MDc6MSwxMjM6MSw1MToxfSxlZXQpLGwuWWY9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHUoZSwzNyksbj1paihsbWUpLGJpKG4sKFdhKCksb3UpLChybygpLHhHKSksbn0sbC5wZj1mdW5jdGlvbihlLG4pe3Rtbih0aGlzLHUoZSwzNyksbil9LGwuZT0wO3ZhciBsbWU7UCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyIiw1MDcpLEkoMTM5OCwxLFVuLGgkdCksbC50ZD1mdW5jdGlvbihlKXskbW4odGhpcy5hLHUoZSwyMTQpKX0sUCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyLzBtZXRob2RyZWYkY29tcGFyZURpZmZlcmVudFJhbmRvbWl6ZWRMYXlvdXRzJFR5cGUiLDEzOTgpLEkoMTM5OSwxLFVuLGYkdCksbC50ZD1mdW5jdGlvbihlKXtodW4odGhpcy5hLHUoZSwyMTQpKX0sUCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyLzFtZXRob2RyZWYkbWluaW1pemVDcm9zc2luZ3NOb0NvdW50ZXIkVHlwZSIsMTM5OSksSSgxNDAwLDEsVW4sZCR0KSxsLnRkPWZ1bmN0aW9uKGUpe2lsZSh0aGlzLmEsdShlLDIxNCkpfSxQKCR1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMm1ldGhvZHJlZiRtaW5pbWl6ZUNyb3NzaW5nc1dpdGhDb3VudGVyJFR5cGUiLDE0MDApLEkoNDU0LDIyLHszOjEsMzU6MSwyMjoxLDQ1NDoxfSxQZXQpO3ZhciBPTyxEUyxkVixobWU9anIoJHUsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci9Dcm9zc01pblR5cGUiLDQ1NCxIcixHcm4sc0plKSxmbWU7SSgxMzk3LDEsdWksRWspLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGx5dCgpLHUoZSwyOSkuYS5jLmxlbmd0aD09MH0sUCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyL2xhbWJkYSQwJFR5cGUiLDEzOTcpLEkoMTc5OSwxLEhELHZRdCksbC5NZj1mdW5jdGlvbigpe30sbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpe30sbC5PZj1mdW5jdGlvbihlLG4pe25bZV1bMF0uYy5wPWUsdGhpcy5iW2VdPVB0KGRtZSx7MzoxLDQ6MSw1OjEsMTk0NDoxfSw2NTksbltlXS5sZW5ndGgsMCwxKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHMucD1uLEppKHRoaXMuYltlXSxuLG5ldyByUSl9LFAoJHUsIkxheWVyU3dlZXBUeXBlRGVjaWRlciIsMTc5OSksSSg2NTksMSx7NjU5OjF9LHJRKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk5vZGVJbmZvIFtjb25uZWN0ZWRFZGdlcz0iK3RoaXMuYSsiLCBoaWVyYXJjaGljYWxJbmZsdWVuY2U9Iit0aGlzLmIrIiwgcmFuZG9tSW5mbHVlbmNlPSIrdGhpcy5jKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTA7dmFyIGRtZT1QKCR1LCJMYXllclN3ZWVwVHlwZURlY2lkZXIvTm9kZUluZm8iLDY1OSk7SSgxODAwLDEsd2QsaVEpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBDKG5ldyBTMSh1KGUsMTEpLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBDKG5ldyBTMSh1KGUsMTEpLmIpKX0sUCgkdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQwJFR5cGUiLDE4MDApLEkoMTgwMSwxLHdkLHNRKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBwQyhuZXcgUzEodShlLDExKS5iKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBwQyhuZXcgUzEodShlLDExKS5iKSl9LFAoJHUsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9sYW1iZGEkMSRUeXBlIiwxODAxKSxJKDE4MzMsNDAyLFBrdCxpSHQpLGwuJGY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRjtzd2l0Y2goQz10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihzPTAsbz0wLGs9bmV3IFMoZS5qKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoSihrKSwxMSksZC5lLmMubGVuZ3RoIT0wJiYoKytzLGQuaj09KGJlKCksTm4pJiYrK28pO2ZvcihoPW4rbyxGPW4rcyx3PWl3KGUsKHNvKCksSnUpKS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMSksZC5qPT0oYmUoKSxObik/KENbZC5wXT1oLC0taCk6KENbZC5wXT1GLC0tRik7cmV0dXJuIHN9Y2FzZSAyOntmb3IoTT0wLHc9aXcoZSwoc28oKSxldSkpLktjKCk7dy5PYigpOylkPXUody5QYigpLDExKSwrK00sQ1tkLnBdPW4rTTtyZXR1cm4gTX1kZWZhdWx0OnRocm93IHJ0KG5ldyB1TSl9fSxQKCR1LCJMYXllclRvdGFsUG9ydERpc3RyaWJ1dG9yIiwxODMzKSxJKDY2MCw4MTcsezY2MDoxLDIyNToxfSxKZWUpLGwuYWc9ZnVuY3Rpb24oZSxuLHIscyl7cj9Vc2UodGhpcyxlKTooWHNlKHRoaXMsZSxzKSxyaGUodGhpcyxlLG4pKSxlLmMubGVuZ3RoPjEmJihqZShSZShRKEZhKChBbigwLGUuYy5sZW5ndGgpLHUoZS5jWzBdLDEwKSkpLChUZSgpLEJ5KSkpKT9nY2UoZSx0aGlzLmQsdGhpcyk6KHZuKCksWHMoZSx0aGlzLmQpKSxqZShSZShRKEZhKChBbigwLGUuYy5sZW5ndGgpLHUoZS5jWzBdLDEwKSkpLEJ5KSkpfHxObmUodGhpcy5lLGUpKX0sUCgkdSwiTW9kZWxPcmRlckJhcnljZW50ZXJIZXVyaXN0aWMiLDY2MCksSSgxODAzLDEsT2ksZyR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFcwbih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCR1LCJNb2RlbE9yZGVyQmFyeWNlbnRlckhldXJpc3RpYy9sYW1iZGEkMCRUeXBlIiwxODAzKSxJKDE0MDMsMSx6YyxKSiksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPWlqKGdtZSksYmkobiwoV2EoKSxvdSksKHJvKCkseEcpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7RG5uKCh1KGUsMzcpLG4pKX07dmFyIGdtZTtQKCR1LCJOb0Nyb3NzaW5nTWluaW1pemVyIiwxNDAzKSxJKDc5Niw0MDIsUGt0LGlidCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtzd2l0Y2goRj10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihvPTAsaD0wLE09bmV3IFMoZS5qKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMSksay5lLmMubGVuZ3RoIT0wJiYoKytvLGsuaj09KGJlKCksTm4pJiYrK2gpO2ZvcihzPTEvKG8rMSksZD1uK2gqcyxWPW4rMS1zLEM9aXcoZSwoc28oKSxKdSkpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExKSxrLmo9PShiZSgpLE5uKT8oRltrLnBdPWQsZC09cyk6KEZbay5wXT1WLFYtPXMpO2JyZWFrfWNhc2UgMjp7Zm9yKHc9MCxNPW5ldyBTKGUuaik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksMTEpLGsuZy5jLmxlbmd0aD09MHx8Kyt3O2ZvcihzPTEvKHcrMSksSD1uK3MsQz1pdyhlLChzbygpLGV1KSkuS2MoKTtDLk9iKCk7KWs9dShDLlBiKCksMTEpLEZbay5wXT1ILEgrPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIlBvcnQgdHlwZSBpcyB1bmRlZmluZWQiKSl9cmV0dXJuIDF9LFAoJHUsIk5vZGVSZWxhdGl2ZVBvcnREaXN0cmlidXRvciIsNzk2KSxJKDgwNywxLHt9LElZdCxDYWUpLFAoJHUsIlN3ZWVwQ29weSIsODA3KSxJKDE3OTgsMSxIRCxiaWUpLGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt2YXIgZTtlPVB0KFRyLFhyLDI1LHRoaXMuZiwxNSwxKSx0aGlzLmQ9bmV3IGskdChlKSx0aGlzLmE9bmV3IEhNKGUpfSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt2YXIgZDtkPXUoRmUoaFtlXVtuXS5qLHIpLDExKSxvLmM9PWQmJm8uYy5pLmM9PW8uZC5pLmMmJisrdGhpcy5lW2VdfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0sdGhpcy5jW2VdPXRoaXMuY1tlXXxzLms9PShHbigpLEhjKX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUoRmUoc1tlXVtuXS5qLHIpLDExKSxvLnA9dGhpcy5mKyssby5nLmMubGVuZ3RoK28uZS5jLmxlbmd0aD4xJiYoby5qPT0oYmUoKSxIbik/dGhpcy5iW2VdPSEwOm8uaj09Qm4mJmU+MCYmKHRoaXMuYltlLTFdPSEwKSl9LGwuZj0wLFAoczAsIkFsbENyb3NzaW5nc0NvdW50ZXIiLDE3OTgpLEkoNTg3LDEse30scnopLGwuYj0wLGwuZD0wLFAoczAsIkJpbmFyeUluZGV4ZWRUcmVlIiw1ODcpLEkoNTI0LDEse30sSE0pO3ZhciBYQ3QsZ1Y7UChzMCwiQ3Jvc3NpbmdzQ291bnRlciIsNTI0KSxJKDE5MDYsMSxPaSxwJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUHRuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDAkVHlwZSIsMTkwNiksSSgxOTA3LDEsT2ksYiR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZ0bih0aGlzLmEsdShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQxJFR5cGUiLDE5MDcpLEkoMTkwOCwxLE9pLHYkdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBCdG4odGhpcy5hLHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChzMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMiRUeXBlIiwxOTA4KSxJKDE5MDksMSxPaSx3JHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnRuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDMkVHlwZSIsMTkwOSksSSgxOTEwLDEsVW4sbSR0KSxsLnRkPWZ1bmN0aW9uKGUpe21hbih0aGlzLmEsdShlLDExKSl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDQkVHlwZSIsMTkxMCksSSgxOTExLDEsdWkseSR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBPWWUodGhpcy5hLHUoZSwxMSkpfSxQKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ1JFR5cGUiLDE5MTEpLEkoMTkxMiwxLFVuLHgkdCksbC50ZD1mdW5jdGlvbihlKXtfVnQodGhpcyxlKX0sUChzMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNiRUeXBlIiwxOTEyKSxJKDE5MTMsMSxVbixaR3QpLGwudGQ9ZnVuY3Rpb24oZSl7dmFyIG47ZzgoKSxxcCh0aGlzLmIsKG49dGhpcy5hLHUoZSwxMSksbikpfSxQKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ3JFR5cGUiLDE5MTMpLEkoODI2LDEsd2QsQkYpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGc4KCksVnModShlLDExKSwoc2UoKSxadSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZzgoKSxWcyh1KGUsMTEpLChzZSgpLFp1KSl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDgkVHlwZSIsODI2KSxJKDE5MDUsMSx7fSxrJHQpLFAoczAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIiLDE5MDUpLEkoNDY3LDEsezM1OjEsNDY3OjF9LHFXdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gYmhuKHRoaXMsdShlLDQ2NykpfSxsLmI9MCxsLmM9MCxsLmU9MCxsLmY9MDt2YXIgZnhuPVAoczAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlIiw0NjcpO0koMzYyLDEsezM1OjEsMzYyOjF9LGUkKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBnYm4odGhpcyx1KGUsMzYyKSl9LGwuYj0wLGwuYz0wO3ZhciBwbWU9UChzMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIiLDM2Mik7SSg1MjMsMjIsezM6MSwzNToxLDIyOjEsNTIzOjF9LEZidCk7dmFyIE9TLE5TLGJtZT1qcihzMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIvVHlwZSIsNTIzLEhyLEhubixhSmUpLHZtZTtJKDE0MDUsMSx6YyxLSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKT93bWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe1Axbih0aGlzLHUoZSwzNyksbil9O3ZhciB3bWU7UCh1bywiSW50ZXJhY3RpdmVOb2RlUGxhY2VyIiwxNDA1KSxJKDE0MDYsMSx6YyxXSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKT9tbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe21mbih0aGlzLHUoZSwzNyksbil9O3ZhciBtbWUscFYsYlY7UCh1bywiTGluZWFyU2VnbWVudHNOb2RlUGxhY2VyIiwxNDA2KSxJKDI1NywxLHszNToxLDI1NzoxfSxOcHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIFZLZSh0aGlzLHUoZSwyNTcpKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSwyNTcpPyhuPXUoZSwyNTcpLHRoaXMuYj09bi5iKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4ibHMiK1FwKHRoaXMuZSl9LGwuYT0wLGwuYj0wLGwuYz0tMSxsLmQ9LTEsbC5nPTA7dmFyIHltZT1QKHVvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCIsMjU3KTtJKDE0MDgsMSx6YyxwWXQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSk/eG1lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtFNW4odGhpcyx1KGUsMzcpLG4pfSxsLmI9MCxsLmc9MDt2YXIgeG1lO1AodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyIiwxNDA4KSxJKDE0MjcsMSxPaSxhUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkdSh1KGUsMTkpLmEsdShuLDE5KS5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8wbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQyNyksSSgxNDI5LDEsT2ksb1EpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZHUodShlLDE5KS5hLHUobiwxOSkuYSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvMW1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0MjkpLEkoNjQ5LDEsezY0OToxfSxKR3QpO3ZhciBkeG49UCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvRWRnZVJlcCIsNjQ5KTtJKDQwMSwxLHs0MDE6MX0sX3d0KSxsLmI9ITE7dmFyIGd4bj1QKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9Ob2RlUmVwIiw0MDEpO0koNTA4LDEyLHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDEyOjEsMTQ6MSwxNToxLDU0OjEsNTA4OjF9LGNxdCksUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aCIsNTA4KSxJKDE0MDksMSx7fSxjUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE3KS5kLmkua30sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMCRUeXBlIiwxNDA5KSxJKDE0MTAsMSx1aSx1USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDI2Nyk9PShHbigpLFpzKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMSRUeXBlIiwxNDEwKSxJKDE0MTEsMSx7fSxsUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE3KS5kLml9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL1BhdGgvbGFtYmRhJDIkVHlwZSIsMTQxMSksSSgxNDEyLDEsdWksRSR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfV3QoaGllKHUoZSwxMCkpKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMyRUeXBlIiwxNDEyKSxJKDE0MTMsMSx1aSxoUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVHRuKHUoZSwxMSkpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMCRUeXBlIiwxNDEzKSxJKDE0MTQsMSxVbix0VnQpLGwudGQ9ZnVuY3Rpb24oZSl7eFhlKHRoaXMuYSx0aGlzLmIsdShlLDExKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxJFR5cGUiLDE0MTQpLEkoMTQyMywxLFVuLFQkdCksbC50ZD1mdW5jdGlvbihlKXt6Z24odGhpcy5hLHUoZSwxNykpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTAkVHlwZSIsMTQyMyksSSgxNDI0LDEse30sZlEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE9sKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTEkVHlwZSIsMTQyNCksSSgxNDI1LDEsVW4sQyR0KSxsLnRkPWZ1bmN0aW9uKGUpe0J2bih0aGlzLmEsdShlLDEwKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMiRUeXBlIiwxNDI1KSxJKDE0MjYsMSx7fSxkUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxkZSh1KGUsMTIxKS5lKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEzJFR5cGUiLDE0MjYpLEkoMTQyOCwxLHt9LGdRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLGRlKHUoZSwxMjEpLmUpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTUkVHlwZSIsMTQyOCksSSgxNDMwLDEsdWkscFEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIE9sKCksdShlLDQwMSkuYy5rPT0oR24oKSxEcyl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxNyRUeXBlIiwxNDMwKSxJKDE0MzEsMSx1aSxiUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSx1KGUsNDAxKS5jLmouYy5sZW5ndGg+MX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE4JFR5cGUiLDE0MzEpLEkoMTQzMiwxLFVuLGtYdCksbC50ZD1mdW5jdGlvbihlKXtTbG4odGhpcy5jLHRoaXMuYix0aGlzLmQsdGhpcy5hLHUoZSw0MDEpKX0sbC5jPTAsbC5kPTAsUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE5JFR5cGUiLDE0MzIpLEkoMTQxNSwxLHt9LHZRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQxNSksSSgxNDMzLDEsVW4sXyR0KSxsLnRkPWZ1bmN0aW9uKGUpe21YZSh0aGlzLmEsdShlLDExKSl9LGwuYT0wLFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMCRUeXBlIiwxNDMzKSxJKDE0MzQsMSx7fSxZNSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMSRUeXBlIiwxNDM0KSxJKDE0MzUsMSxVbixTJHQpLGwudGQ9ZnVuY3Rpb24oZSl7TlhlKHRoaXMuYSx1KGUsMTApKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIyJFR5cGUiLDE0MzUpLEkoMTQzNiwxLHVpLFJGKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfV3QoZSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMyRUeXBlIiwxNDM2KSxJKDE0MzcsMSx7fSx3USksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNCRUeXBlIiwxNDM3KSxJKDE0MzgsMSx1aSxBJHQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuICRZZSh0aGlzLmEsdShlLDEwKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNSRUeXBlIiwxNDM4KSxJKDE0MzksMSxVbixlVnQpLGwudGQ9ZnVuY3Rpb24oZSl7dWduKHRoaXMuYSx0aGlzLmIsdShlLDEwKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNiRUeXBlIiwxNDM5KSxJKDE0NDAsMSx1aSxtUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSwhVmEodShlLDE3KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNyRUeXBlIiwxNDQwKSxJKDE0NDEsMSx1aSx5USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSwhVmEodShlLDE3KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOCRUeXBlIiwxNDQxKSxJKDE0NDIsMSx7fSxMJHQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSVhlKHRoaXMuYSx1KGUsMjkpLHUobiwyOSkpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjkkVHlwZSIsMTQ0MiksSSgxNDE2LDEse30sakYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE9sKCksbmV3IFRuKG51bGwsbmV3IEZ2KG5ldyBhcihscihNcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMyRUeXBlIiwxNDE2KSxJKDE0MTcsMSx1aSx4USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSx3aW4odShlLDE3KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ0JFR5cGUiLDE0MTcpLEkoMTQxOCwxLFVuLE0kdCksbC50ZD1mdW5jdGlvbihlKXtGbW4odGhpcy5hLHUoZSwxNykpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNSRUeXBlIiwxNDE4KSxJKDE0MTksMSx7fSxHVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ2JFR5cGUiLDE0MTkpLEkoMTQyMCwxLHVpLGtRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLHUoZSwxMCkuaz09KEduKCksRHMpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNyRUeXBlIiwxNDIwKSxJKDE0MjEsMSx7fSxFUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKHowKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ4JFR5cGUiLDE0MjEpLEkoMTQyMiwxLHVpLFRRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLHd0bih1KGUsMTcpKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDkkVHlwZSIsMTQyMiksSSgxNDA0LDEsemMscDkpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSk/a21lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXt2eW4odShlLDM3KSxuKX07dmFyIGttZTtQKHVvLCJTaW1wbGVOb2RlUGxhY2VyIiwxNDA0KSxJKDE4MCwxLHsxODA6MX0seDQpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT0iIix0aGlzLmM9PShkZCgpLFJ3KT9lKz1nNjp0aGlzLmM9PUtnJiYoZSs9ZDYpLHRoaXMubz09KEUxKCksajIpP2UrPXlvdDp0aGlzLm89PXoxP2UrPSJVUCI6ZSs9IkJBTEFOQ0VEIixlfSxQKHNiLCJCS0FsaWduZWRMYXlvdXQiLDE4MCksSSg1MTYsMjIsezM6MSwzNToxLDIyOjEsNTE2OjF9LFJidCk7dmFyIEtnLFJ3LEVtZT1qcihzYiwiQktBbGlnbmVkTGF5b3V0L0hEaXJlY3Rpb24iLDUxNixIcixWbm4sb0plKSxUbWU7SSg1MTUsMjIsezM6MSwzNToxLDIyOjEsNTE1OjF9LEJidCk7dmFyIGoyLHoxLENtZT1qcihzYiwiQktBbGlnbmVkTGF5b3V0L1ZEaXJlY3Rpb24iLDUxNSxIcixVbm4sY0plKSxfbWU7SSgxNjM0LDEse30sblZ0KSxQKHNiLCJCS0FsaWduZXIiLDE2MzQpLEkoMTYzNywxLHt9LFBzZSksUChzYiwiQktDb21wYWN0b3IiLDE2MzcpLEkoNjU0LDEsezY1NDoxfSxDUSksbC5hPTAsUChzYiwiQktDb21wYWN0b3IvQ2xhc3NFZGdlIiw2NTQpLEkoNDU4LDEsezQ1ODoxfSxhcXQpLGwuYT1udWxsLGwuYj0wLFAoc2IsIkJLQ29tcGFjdG9yL0NsYXNzTm9kZSIsNDU4KSxJKDE0MDcsMSx6YyxBVnQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSk/U21lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtSNW4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9ITE7dmFyIFNtZTtQKHNiLCJCS05vZGVQbGFjZXIiLDE0MDcpLEkoMTYzNSwxLHt9LF9RKSxsLmQ9MCxQKHNiLCJOZWlnaGJvcmhvb2RJbmZvcm1hdGlvbiIsMTYzNSksSSgxNjM2LDEsT2ksSSR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFZhbih0aGlzLHUoZSw0NiksdShuLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChzYiwiTmVpZ2hib3Job29kSW5mb3JtYXRpb24vTmVpZ2hib3JDb21wYXJhdG9yIiwxNjM2KSxJKDgwOCwxLHt9KSxQKHNiLCJUaHJlc2hvbGRTdHJhdGVneSIsODA4KSxJKDE3NjMsODA4LHt9LGhxdCksbC5iZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYS5vPT0oRTEoKSx6MSk/c3M6VHN9LGwuY2c9ZnVuY3Rpb24oKXt9LFAoc2IsIlRocmVzaG9sZFN0cmF0ZWd5L051bGxUaHJlc2hvbGRTdHJhdGVneSIsMTc2MyksSSg1NzksMSx7NTc5OjF9LHJWdCksbC5jPSExLGwuZD0hMSxQKHNiLCJUaHJlc2hvbGRTdHJhdGVneS9Qb3N0cHJvY2Vzc2FibGUiLDU3OSksSSgxNzY0LDgwOCx7fSxmcXQpLGwuYmc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtyZXR1cm4gbz1uPT1yLHM9dGhpcy5hLmFbci5wXT09bixvfHxzPyhoPWUsdGhpcy5hLmM9PShkZCgpLFJ3KT8obyYmKGg9eWF0KHRoaXMsbiwhMCkpLCFpc05hTihoKSYmIWlzRmluaXRlKGgpJiZzJiYoaD15YXQodGhpcyxyLCExKSkpOihvJiYoaD15YXQodGhpcyxuLCEwKSksIWlzTmFOKGgpJiYhaXNGaW5pdGUoaCkmJnMmJihoPXlhdCh0aGlzLHIsITEpKSksaCk6ZX0sbC5jZz1mdW5jdGlvbigpe2Zvcih2YXIgZSxuLHIscyxvO3RoaXMuZC5iIT0wOylvPXUoY3JuKHRoaXMuZCksNTc5KSxzPW5sZSh0aGlzLG8pLHMuYSYmKGU9cy5hLHI9amUodGhpcy5hLmZbdGhpcy5hLmdbby5iLnBdLnBdKSwhKCFyJiYhVmEoZSkmJmUuYy5pLmM9PWUuZC5pLmMpJiYobj11Y2UodGhpcyxvKSxufHxLWWUodGhpcy5lLG8pKSk7Zm9yKDt0aGlzLmUuYS5jLmxlbmd0aCE9MDspdWNlKHRoaXMsdShtcmUodGhpcy5lKSw1NzkpKX0sUChzYiwiVGhyZXNob2xkU3RyYXRlZ3kvU2ltcGxlVGhyZXNob2xkU3RyYXRlZ3kiLDE3NjQpLEkoNjM1LDEsezYzNToxLDI0NjoxLDIzNDoxfSxTUSksbC5LZj1mdW5jdGlvbigpe3JldHVybiBMbmUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gTG5lKHRoaXMpfTt2YXIgeWh0O1AoYmN0LCJFZGdlUm91dGVyRmFjdG9yeSIsNjM1KSxJKDE0NTgsMSx6YyxpZCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gYnZuKHUoZSwzNykpfSxsLnBmPWZ1bmN0aW9uKGUsbil7VHluKHUoZSwzNyksbil9O3ZhciBBbWUsTG1lLE1tZSxJbWUsRG1lLFFDdCxPbWUsTm1lO1AoYmN0LCJPcnRob2dvbmFsRWRnZVJvdXRlciIsMTQ1OCksSSgxNDUxLDEsemMsTFZ0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiAkMW4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXtHNG4odGhpcyx1KGUsMzcpLG4pfTt2YXIgUG1lLEZtZSxCbWUsUm1lLE5PLGptZTtQKGJjdCwiUG9seWxpbmVFZGdlUm91dGVyIiwxNDUxKSxJKDE0NTIsMSx3ZCxBUSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gZHl0KHUoZSwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZHl0KHUoZSwxMCkpfSxQKGJjdCwiUG9seWxpbmVFZGdlUm91dGVyLzEiLDE0NTIpLEkoMTgwOSwxLHVpLExRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5jPT0oVmYoKSxwYil9LFAoSmYsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTgwOSksSSgxODEwLDEse30sTVEpLGwuR2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmR9LFAoSmYsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTgxMCksSSgxODExLDEsdWksSVEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmM9PShWZigpLHBiKX0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMiRUeXBlIiwxODExKSxJKDE4MTIsMSx7fSxYNSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMyRUeXBlIiwxODEyKSxJKDE4MTMsMSx7fSxEUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNCRUeXBlIiwxODEzKSxJKDE4MTQsMSx7fSxPUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNSRUeXBlIiwxODE0KSxJKDExMiwxLHszNToxLDExMjoxfSxMSSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gVUtlKHRoaXMsdShlLDExMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDExMik/KG49dShlLDExMiksdGhpcy5nPT1uLmcpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzO2ZvcihlPW5ldyBJbCgieyIpLHM9bmV3IFModGhpcy5uKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMSksbj1aSShyLmkpLG49PW51bGwmJihuPSJuIityS3Qoci5pKSksZS5hKz0iIituLHMuYTxzLmMuYy5sZW5ndGgmJihlLmErPSIsIik7cmV0dXJuIGUuYSs9In0iLGUuYX0sbC5hPTAsbC5iPTAsbC5jPU5hTixsLmQ9MCxsLmc9MCxsLmk9MCxsLm89MCxsLnM9TmFOLFAoSmYsIkh5cGVyRWRnZVNlZ21lbnQiLDExMiksSSgxMjksMSx7MTI5OjF9LHQyKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiLT4iK3RoaXMuYisiICgiK3JRZSh0aGlzLmMpKyIpIn0sbC5kPTAsUChKZiwiSHlwZXJFZGdlU2VnbWVudERlcGVuZGVuY3kiLDEyOSksSSg1MjAsMjIsezM6MSwzNToxLDIyOjEsNTIwOjF9LGpidCk7dmFyIHBiLFV5LCRtZT1qcihKZiwiSHlwZXJFZGdlU2VnbWVudERlcGVuZGVuY3kvRGVwZW5kZW5jeVR5cGUiLDUyMCxIcixHbm4sdUplKSx6bWU7SSgxODE1LDEse30sRCR0KSxQKEpmLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIiLDE4MTUpLEkoMTgxNiwxLHt9LHVIdCksbC5hPTAsbC5iPTAsUChKZiwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0FyZWFSYXRpbmciLDE4MTYpLEkoMzI5LDEsezMyOToxfSx5bnQpLGwuYT0wLGwuYj0wLGwuYz0wLFAoSmYsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9GcmVlQXJlYSIsMzI5KSxJKDE4MTcsMSxPaSwkUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBKUWUodShlLDExMiksdShuLDExMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoSmYsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMCRUeXBlIiwxODE3KSxJKDE4MTgsMSxVbixFWHQpLGwudGQ9ZnVuY3Rpb24oZSl7aXNuKHRoaXMuYSx0aGlzLmQsdGhpcy5jLHRoaXMuYix1KGUsMTEyKSl9LGwuYj0wLFAoSmYsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMSRUeXBlIiwxODE4KSxJKDE4MTksMSx7fSx6USksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwxMTIpLmUsMTYpKX0sUChKZiwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQyJFR5cGUiLDE4MTkpLEkoMTgyMCwxLHt9LHFRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDExMikuaiwxNikpfSxQKEpmLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDMkVHlwZSIsMTgyMCksSSgxODIxLDEse30sSFEpLGwuRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFh0KHllKGUpKX0sUChKZiwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQ0JFR5cGUiLDE4MjEpLEkoNjU1LDEse30sR250KSxsLmE9MCxsLmI9MCxsLmM9MCxQKEpmLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvciIsNjU1KSxJKDE2MzgsMSx7fSxHUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwxMTIpLmUsMTYpKX0sUChKZiwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTYzOCksSSgxNjM5LDEse30sVlEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTEyKS5qLDE2KSl9LFAoSmYsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDE2MzkpLEkoNjYxLDEse30pLFAodmN0LCJCYXNlUm91dGluZ0RpcmVjdGlvblN0cmF0ZWd5Iiw2NjEpLEkoMTgwNyw2NjEse30sZHF0KSxsLmRnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7aWYoIShlLnImJiFlLnEpKWZvcihNPW4rZS5vKnIsQz1uZXcgUyhlLm4pO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMSksRj1LbyhjdChvdChVcywxKSx0ZSw4LDAsW2suaS5uLGsubixrLmFdKSkuYSx3PW5ldyBTKGsuZyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTcpLFZhKGQpfHwoWT1kLmQsdHQ9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtZLmkubixZLm4sWS5hXSkpLmEsYi5NYXRoLmFicyhGLXR0KT55ZCYmKGg9TSxvPWUscz1uZXcgJGUoRixoKSxuaShkLmEscyksZncodGhpcyxkLG8scywhMSksSD1lLnIsSCYmKFY9WHQoeWUoUWYoSC5lLDApKSkscz1uZXcgJGUoVixoKSxuaShkLmEscyksZncodGhpcyxkLG8scywhMSksaD1uK0gubypyLG89SCxzPW5ldyAkZShWLGgpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCExKSkscz1uZXcgJGUodHQsaCksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITEpKSl9LGwuZWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaS5uLmErZS5uLmErZS5hLmF9LGwuZmc9ZnVuY3Rpb24oKXtyZXR1cm4gYmUoKSxtcn0sbC5nZz1mdW5jdGlvbigpe3JldHVybiBiZSgpLE5ufSxQKHZjdCwiTm9ydGhUb1NvdXRoUm91dGluZ1N0cmF0ZWd5IiwxODA3KSxJKDE4MDgsNjYxLHt9LGdxdCksbC5kZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKCEoZS5yJiYhZS5xKSlmb3IoTT1uLWUubypyLEM9bmV3IFMoZS5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLEY9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtrLmkubixrLm4say5hXSkpLmEsdz1uZXcgUyhrLmcpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDE3KSxWYShkKXx8KFk9ZC5kLHR0PUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbWS5pLm4sWS5uLFkuYV0pKS5hLGIuTWF0aC5hYnMoRi10dCk+eWQmJihoPU0sbz1lLHM9bmV3ICRlKEYsaCksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITEpLEg9ZS5yLEgmJihWPVh0KHllKFFmKEguZSwwKSkpLHM9bmV3ICRlKFYsaCksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITEpLGg9bi1ILm8qcixvPUgscz1uZXcgJGUoVixoKSxuaShkLmEscyksZncodGhpcyxkLG8scywhMSkpLHM9bmV3ICRlKHR0LGgpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCExKSkpfSxsLmVnPWZ1bmN0aW9uKGUpe3JldHVybiBlLmkubi5hK2Uubi5hK2UuYS5hfSxsLmZnPWZ1bmN0aW9uKCl7cmV0dXJuIGJlKCksTm59LGwuZ2c9ZnVuY3Rpb24oKXtyZXR1cm4gYmUoKSxtcn0sUCh2Y3QsIlNvdXRoVG9Ob3J0aFJvdXRpbmdTdHJhdGVneSIsMTgwOCksSSgxODA2LDY2MSx7fSxwcXQpLGwuZGc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZighKGUuciYmIWUucSkpZm9yKE09bitlLm8qcixDPW5ldyBTKGUubik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxGPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbay5pLm4say5uLGsuYV0pKS5iLHc9bmV3IFMoay5nKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxNyksVmEoZCl8fChZPWQuZCx0dD1LbyhjdChvdChVcywxKSx0ZSw4LDAsW1kuaS5uLFkubixZLmFdKSkuYixiLk1hdGguYWJzKEYtdHQpPnlkJiYoaD1NLG89ZSxzPW5ldyAkZShoLEYpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCEwKSxIPWUucixIJiYoVj1YdCh5ZShRZihILmUsMCkpKSxzPW5ldyAkZShoLFYpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCEwKSxoPW4rSC5vKnIsbz1ILHM9bmV3ICRlKGgsViksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITApKSxzPW5ldyAkZShoLHR0KSxuaShkLmEscyksZncodGhpcyxkLG8scywhMCkpKX0sbC5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pLm4uYitlLm4uYitlLmEuYn0sbC5mZz1mdW5jdGlvbigpe3JldHVybiBiZSgpLEhufSxsLmdnPWZ1bmN0aW9uKCl7cmV0dXJuIGJlKCksQm59LFAodmN0LCJXZXN0VG9FYXN0Um91dGluZ1N0cmF0ZWd5IiwxODA2KSxJKDgxMywxLHt9LHN4dCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBRcCh0aGlzLmEpfSxsLmI9MCxsLmM9ITEsbC5kPSExLGwuZj0wLFAoVHksIk51YlNwbGluZSIsODEzKSxJKDQwNywxLHs0MDc6MX0sUmNlLHJRdCksUChUeSwiTnViU3BsaW5lL1BvbGFyQ1AiLDQwNyksSSgxNDUzLDEsemMsU3NlKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiBMZG4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXt1NW4odGhpcyx1KGUsMzcpLG4pfTt2YXIgcW1lLEhtZSxHbWUsVm1lLFVtZTtQKFR5LCJTcGxpbmVFZGdlUm91dGVyIiwxNDUzKSxJKDI2OCwxLHsyNjg6MX0sUyQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgLT4oIit0aGlzLmMrIikgIit0aGlzLmJ9LGwuYz0wLFAoVHksIlNwbGluZUVkZ2VSb3V0ZXIvRGVwZW5kZW5jeSIsMjY4KSxJKDQ1NSwyMix7MzoxLDM1OjEsMjI6MSw0NTU6MX0sJGJ0KTt2YXIgYmIsZTUsV21lPWpyKFR5LCJTcGxpbmVFZGdlUm91dGVyL1NpZGVUb1Byb2Nlc3MiLDQ1NSxIcixXbm4sbEplKSxLbWU7SSgxNDU0LDEsdWksalEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJfKCksIXUoZSwxMjgpLm99LFAoVHksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTQ1NCksSSgxNDU1LDEse30sUlEpLGwuR2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGJfKCksdShlLDEyOCkudisxfSxQKFR5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQxJFR5cGUiLDE0NTUpLEkoMTQ1NiwxLFVuLGlWdCksbC50ZD1mdW5jdGlvbihlKXt5dG4odGhpcy5hLHRoaXMuYix1KGUsNDYpKX0sUChUeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNDU2KSxJKDE0NTcsMSxVbixzVnQpLGwudGQ9ZnVuY3Rpb24oZSl7eHRuKHRoaXMuYSx0aGlzLmIsdShlLDQ2KSl9LFAoVHksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTQ1NyksSSgxMjgsMSx7MzU6MSwxMjg6MX0sZW9lLGh4dCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gV0tlKHRoaXMsdShlLDEyOCkpfSxsLmI9MCxsLmU9ITEsbC5mPTAsbC5nPTAsbC5qPSExLGwuaz0hMSxsLm49MCxsLm89ITEsbC5wPSExLGwucT0hMSxsLnM9MCxsLnU9MCxsLnY9MCxsLkY9MCxQKFR5LCJTcGxpbmVTZWdtZW50IiwxMjgpLEkoNDU5LDEsezQ1OToxfSxWVCksbC5hPTAsbC5iPSExLGwuYz0hMSxsLmQ9ITEsbC5lPSExLGwuZj0wLFAoVHksIlNwbGluZVNlZ21lbnQvRWRnZUluZm9ybWF0aW9uIiw0NTkpLEkoMTIzNCwxLHt9LE5RKSxQKHFfLGE2dCwxMjM0KSxJKDEyMzUsMSxPaSxQUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBycG4odShlLDEzNSksdShuLDEzNSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAocV8samZlLDEyMzUpLEkoMTIzMywxLHt9LENIdCksUChxXywiTXJUcmVlIiwxMjMzKSxJKDM5MywyMix7MzoxLDM1OjEsMjI6MSwzOTM6MSwyNDY6MSwyMzQ6MX0sVVIpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gX29lKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIF9vZSh0aGlzKX07dmFyIHZWLFBTLFBPLEZTLFpDdD1qcihxXywiVHJlZUxheW91dFBoYXNlcyIsMzkzLEhyLGppbixoSmUpLFltZTtJKDExMzAsMjA5LEUyLFZXdCksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2ZvcihqZShSZShxZShlLChodygpLGlfdCkpKSl8fHUkKChyPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxyKSksZD0odz1uZXcgQSQsTG8odyxlKSxKdCh3LChmYygpLGpTKSxlKSxrPW5ldyBDcixLd24oZSx3LGspLGhtbihlLHcsayksdyksaD1pbW4odGhpcy5hLGQpLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTM1KSxUZG4odGhpcy5iLHMsUmMobiwxL2guYy5sZW5ndGgpKTtkPUI1bihoKSx1NG4oZCl9LFAocV8sIlRyZWVMYXlvdXRQcm92aWRlciIsMTEzMCksSSgxODQ3LDEsdDAsRlEpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LFAocV8sIlRyZWVVdGlsLzEiLDE4NDcpLEkoMTg0OCwxLHQwLEJRKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSxyOCgpLFpFfSxQKHFfLCJUcmVlVXRpbC8yIiwxODQ4KSxJKDUwMiwxMzQsezM6MSw1MDI6MSw5NDoxLDEzNDoxfSksbC5nPTAsUChIXywiVEdyYXBoRWxlbWVudCIsNTAyKSxJKDE4OCw1MDIsezM6MSwxODg6MSw1MDI6MSw5NDoxLDEzNDoxfSxMd3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iJiZ0aGlzLmM/YiQodGhpcy5iKSsiLT4iK2IkKHRoaXMuYyk6ImVfIitIaSh0aGlzKX0sUChIXywiVEVkZ2UiLDE4OCksSSgxMzUsMTM0LHszOjEsMTM1OjEsOTQ6MSwxMzQ6MX0sQSQpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihvPW51bGwscz1laSh0aGlzLmIsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDg2KSxvKz0oci5jPT1udWxsfHxyLmMubGVuZ3RoPT0wPyJuXyIrci5nOiJuXyIrci5jKStgCmA7Zm9yKG49ZWkodGhpcy5hLDApO24uYiE9bi5kLmM7KWU9dSh0aShuKSwxODgpLG8rPShlLmImJmUuYz9iJChlLmIpKyItPiIrYiQoZS5jKToiZV8iK0hpKGUpKStgCmA7cmV0dXJuIG99O3ZhciBweG49UChIXywiVEdyYXBoIiwxMzUpO0koNjMzLDUwMix7MzoxLDUwMjoxLDYzMzoxLDk0OjEsMTM0OjF9KSxQKEhfLCJUU2hhcGUiLDYzMyksSSg4Niw2MzMsezM6MSw1MDI6MSw4NjoxLDYzMzoxLDk0OjEsMTM0OjF9LHlpdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBiJCh0aGlzKX07dmFyIGJ4bj1QKEhfLCJUTm9kZSIsODYpO0koMjU1LDEsdDAsQ3ApLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPWVpKHRoaXMuYS5kLDApLG5ldyBieChlKX0sUChIXywiVE5vZGUvMiIsMjU1KSxJKDM1OCwxLHJhLGJ4KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aSh0aGlzLmEpLDE4OCkuY30sbC5PYj1mdW5jdGlvbigpe3JldHVybiBrUih0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7SCQodGhpcy5hKX0sUChIXywiVE5vZGUvMi8xIiwzNTgpLEkoMTg0MCwxLGFzLEdXdCksbC5wZj1mdW5jdGlvbihlLG4pe1Ntbih0aGlzLHUoZSwxMzUpLG4pfSxQKHg2LCJGYW5Qcm9jZXNzb3IiLDE4NDApLEkoMzI3LDIyLHszOjEsMzU6MSwyMjoxLDMyNzoxLDIzNDoxfSx0QyksbC5LZj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IE1xdDtjYXNlIDE6cmV0dXJuIG5ldyBHV3Q7Y2FzZSAyOnJldHVybiBuZXcgUTU7Y2FzZSAzOnJldHVybiBuZXcgVVE7Y2FzZSA0OnJldHVybiBuZXcgS1E7Y2FzZSA1OnJldHVybiBuZXcgT0w7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oQm90Kyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciB4aHQsa2h0LEVodCxUaHQsQ2h0LHdWLFhtZT1qcih4Nix2NnQsMzI3LEhyLGVhbixmSmUpLFFtZTtJKDE4NDMsMSxhcyxVUSksbC5wZj1mdW5jdGlvbihlLG4pe3Vibih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MCxQKHg2LCJMZXZlbEhlaWdodFByb2Nlc3NvciIsMTg0MyksSSgxODQ0LDEsdDAsV1EpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LFAoeDYsIkxldmVsSGVpZ2h0UHJvY2Vzc29yLzEiLDE4NDQpLEkoMTg0MSwxLGFzLFE1KSxsLnBmPWZ1bmN0aW9uKGUsbil7YmduKHRoaXMsdShlLDEzNSksbil9LGwuYT0wLFAoeDYsIk5laWdoYm9yc1Byb2Nlc3NvciIsMTg0MSksSSgxODQyLDEsdDAsJEYpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LFAoeDYsIk5laWdoYm9yc1Byb2Nlc3Nvci8xIiwxODQyKSxJKDE4NDUsMSxhcyxLUSksbC5wZj1mdW5jdGlvbihlLG4pe2Nibih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MCxQKHg2LCJOb2RlUG9zaXRpb25Qcm9jZXNzb3IiLDE4NDUpLEkoMTgzOSwxLGFzLE1xdCksbC5wZj1mdW5jdGlvbihlLG4pe055bih0aGlzLHUoZSwxMzUpKX0sUCh4NiwiUm9vdFByb2Nlc3NvciIsMTgzOSksSSgxODQ2LDEsYXMsT0wpLGwucGY9ZnVuY3Rpb24oZSxuKXtIdW4odShlLDEzNSkpfSxQKHg2LCJVbnRyZWVpZnllciIsMTg0Nik7dmFyIEZPLEJTLFptZSxfaHQsbVYsUlMsU2h0LHlWLHhWLGs3LGpTLGtWLFlnLEpDdCxKbWUsQWh0LFd5LExodCx0X3Q7SSg4NTEsMSxJaCxMMyksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRmt0KSwiIiksIldlaWdodGluZyBvZiBOb2RlcyIpLCJXaGljaCB3ZWlnaHRpbmcgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgbm9kZSBvcmRlci4iKSxuX3QpLChqZygpLGNzKSksdV90KSx1bigoWGYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxCa3QpLCIiKSwiU2VhcmNoIE9yZGVyIiksIldoaWNoIHNlYXJjaCBvcmRlciB0byB1c2Ugd2hlbiBjb21wdXRpbmcgYSBzcGFubmluZyB0cmVlLiIpLGVfdCksY3MpLGhfdCksdW4ocW4pKSkpLFpsZSgobmV3IEtMLGUpKX07dmFyIHR5ZSxlX3QsZXllLG5fdDtQKGZILCJNclRyZWVNZXRhRGF0YVByb3ZpZGVyIiw4NTEpLEkoOTk0LDEsSWgsS0wpLGwuUWU9ZnVuY3Rpb24oZSl7WmxlKGUpfTt2YXIgbnllLHJfdCxyeWUsaXllLHN5ZSxheWUsaV90LG95ZSxzX3QsY3llLEVWLGFfdCx1eWUsb190LGx5ZTtQKGZILCJNclRyZWVPcHRpb25zIiw5OTQpLEkoOTk1LDEse30sWVEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgVld0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKGZILCJNclRyZWVPcHRpb25zL01ydHJlZUZhY3RvcnkiLDk5NSksSSg0ODAsMjIsezM6MSwzNToxLDIyOjEsNDgwOjF9LHpidCk7dmFyIE1odCxjX3QsdV90PWpyKGZILCJPcmRlcldlaWdodGluZyIsNDgwLEhyLFlubixkSmUpLGh5ZTtJKDQyNSwyMix7MzoxLDM1OjEsMjI6MSw0MjU6MX0scWJ0KTt2YXIgbF90LElodCxoX3Q9anIoZkgsIlRyZWVpZnlpbmdPcmRlciIsNDI1LEhyLEtubixwSmUpLGZ5ZTtJKDE0NTksMSx6YyxXTCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksZHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7cW9uKHRoaXMsdShlLDEzNSksbil9O3ZhciBkeWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDF0cmVlaWZ5IiwiREZTVHJlZWlmeWVyIiwxNDU5KSxJKDE0NjAsMSx6YyxRSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksZ3llfSxsLnBmPWZ1bmN0aW9uKGUsbil7X2duKHRoaXMsdShlLDEzNSksbil9O3ZhciBneWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsIk5vZGVPcmRlcmVyIiwxNDYwKSxJKDE0NjEsMSx6YyxYSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSkscHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7SHZuKHRoaXMsdShlLDEzNSksbil9LGwuYT0wO3ZhciBweWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDNwbGFjZSIsIk5vZGVQbGFjZXIiLDE0NjEpLEkoMTQ2MiwxLHpjLE5CKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTM1KSxieWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtwMW4odShlLDEzNSksbil9O3ZhciBieWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDRyb3V0ZSIsIkVkZ2VSb3V0ZXIiLDE0NjIpO3ZhciAkUztJKDQ5NSwyMix7MzoxLDM1OjEsMjI6MSw0OTU6MSwyNDY6MSwyMzQ6MX0sSGJ0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIGlpZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBpaWUodGhpcyl9O3ZhciBUVixFNyxmX3Q9anIoUmt0LCJSYWRpYWxMYXlvdXRQaGFzZXMiLDQ5NSxIcixYbm4sZ0plKSx2eWU7SSgxMTMxLDIwOSxFMixUSHQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHc7aWYocj1vb2UodGhpcyxlKSx3cihuLCJSYWRpYWwgbGF5b3V0IixyLmMubGVuZ3RoKSxqZShSZShxZShlLChheSgpLGtfdCkpKSl8fHUkKChzPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxzKSksdz1EZG4oZSksYm8oZSwoYkMoKSwkUyksdyksIXcpdGhyb3cgcnQobmV3IFBuKCJUaGUgZ2l2ZW4gZ3JhcGggaXMgbm90IGEgdHJlZSEiKSk7Zm9yKG89WHQoeWUocWUoZSxTVikpKSxvPT0wJiYobz14b2UoZSkpLGJvKGUsU1YsbyksZD1uZXcgUyhvb2UodGhpcyxlKSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksNTEpLGgucGYoZSxSYyhuLDEpKTtvcihuKX0sUChSa3QsIlJhZGlhbExheW91dFByb3ZpZGVyIiwxMTMxKSxJKDU0OSwxLE9pLEVSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGl3bih0aGlzLmEsdGhpcy5iLHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sbC5hPTAsbC5iPTAsUChSa3QsIlJhZGlhbFV0aWwvbGFtYmRhJDAkVHlwZSIsNTQ5KSxJKDEzNzUsMSxhcyxRUSksbC5wZj1mdW5jdGlvbihlLG4pe0Uzbih1KGUsMzMpLG4pfSxQKE8xZSwiQ2FsY3VsYXRlR3JhcGhTaXplIiwxMzc1KSxJKDQ0MiwyMix7MzoxLDM1OjEsMjI6MSw0NDI6MSwyMzQ6MX0sRmV0KSxsLktmPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgekY7Y2FzZSAxOnJldHVybiBuZXcgWFE7Y2FzZSAyOnJldHVybiBuZXcgUVE7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oQm90Kyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBEaHQsT2h0LE5odCx3eWU9anIoTzFlLHY2dCw0NDIsSHIsVnJuLGJKZSksbXllO0koNjQ1LDEse30pLGwuZT0xLGwuZz0wLFAoeWN0LCJBYnN0cmFjdFJhZGl1c0V4dGVuc2lvbkNvbXBhY3Rpb24iLDY0NSksSSgxNzcyLDY0NSx7fSxrV3QpLGwuaGc9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2Zvcih0aGlzLmM9dShxZShlLChiQygpLCRTKSksMzMpLGt0dCh0aGlzLHRoaXMuYyksdGhpcy5kPWlzdCh1KHFlKGUsKGF5KCksQk8pKSwyOTMpKSxrPXUocWUoZSxGaHQpLDE5KSxrJiZwdih0aGlzLGsuYSksdz15ZShxZShlLChjaSgpLEgyKSkpLGs5KHRoaXMsKE9uKHcpLHcpKSxDPWd5KHRoaXMuYyksdGhpcy5kJiZ0aGlzLmQubGcoQyksbXduKHRoaXMsQyksZD1uZXcgd2woY3Qob3QobnMsMSksTjFlLDMzLDAsW3RoaXMuY10pKSxyPTA7cjwyO3IrKylmb3Iobj0wO248Qy5jLmxlbmd0aDtuKyspbz1uZXcgd2woY3Qob3QobnMsMSksTjFlLDMzLDAsWyhBbihuLEMuYy5sZW5ndGgpLHUoQy5jW25dLDMzKSldKSksaD1uPEMuYy5sZW5ndGgtMT8oQW4obisxLEMuYy5sZW5ndGgpLHUoQy5jW24rMV0sMzMpKTooQW4oMCxDLmMubGVuZ3RoKSx1KEMuY1swXSwzMykpLHM9bj09MD91KEZlKEMsQy5jLmxlbmd0aC0xKSwzMyk6KEFuKG4tMSxDLmMubGVuZ3RoKSx1KEMuY1tuLTFdLDMzKSksZ2FlKHRoaXMsKEFuKG4sQy5jLmxlbmd0aCksdShDLmNbbl0sMzMpLGQpLHMsaCxvKX0sUCh5Y3QsIkFubnVsdXNXZWRnZUNvbXBhY3Rpb24iLDE3NzIpLEkoMTM3NCwxLGFzLFhRKSxsLnBmPWZ1bmN0aW9uKGUsbil7RjFuKHUoZSwzMyksbil9LFAoeWN0LCJHZW5lcmFsQ29tcGFjdG9yIiwxMzc0KSxJKDE3NzEsNjQ1LHt9LFpRKSxsLmhnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3I9dShxZShlLChiQygpLCRTKSksMzMpLHRoaXMuZj1yLHRoaXMuYj1pc3QodShxZShlLChheSgpLEJPKSksMjkzKSksbz11KHFlKGUsRmh0KSwxOSksbyYmcHYodGhpcyxvLmEpLHM9eWUocWUoZSwoY2koKSxIMikpKSxrOSh0aGlzLChPbihzKSxzKSksbj1neShyKSx0aGlzLmImJnRoaXMuYi5sZyhuKSxWYWUodGhpcyxuKX0sbC5hPTAsUCh5Y3QsIlJhZGlhbENvbXBhY3Rpb24iLDE3NzEpLEkoMTc3OSwxLHt9LEpRKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZDtmb3IodGhpcy5hPWUsbj0wLGQ9Z3koZSkscz0wLGg9bmV3IFMoZCk7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDMzKSwrK3Mscj1zO3I8ZC5jLmxlbmd0aDtyKyspT21uKHRoaXMsbywoQW4ocixkLmMubGVuZ3RoKSx1KGQuY1tyXSwzMykpKSYmKG4rPTEpO3JldHVybiBufSxQKCRrdCwiQ3Jvc3NpbmdNaW5pbWl6YXRpb25Qb3NpdGlvbiIsMTc3OSksSSgxNzc3LDEse30sdFopLGwuaWc9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFY7Zm9yKHM9MCxyPW5ldyBhcihscihHMChlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDc5KSx3PU1vKHUoU3QoKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jKSwwKSw4MikpLEM9dy5pK3cuZy8yLE09dy5qK3cuZi8yLG89ZS5pK2UuZy8yLGg9ZS5qK2UuZi8yLEY9bmV3IFRhLEYuYT1DLW8sRi5iPU0taCxkPW5ldyAkZShGLmEsRi5iKSxoRShkLGUuZyxlLmYpLEYuYS09ZC5hLEYuYi09ZC5iLG89Qy1GLmEsaD1NLUYuYixrPW5ldyAkZShGLmEsRi5iKSxoRShrLHcuZyx3LmYpLEYuYS09ay5hLEYuYi09ay5iLEM9bytGLmEsTT1oK0YuYixIPUMtbyxWPU0taCxzKz1iLk1hdGguc3FydChIKkgrVipWKTtyZXR1cm4gc30sUCgka3QsIkVkZ2VMZW5ndGhPcHRpbWl6YXRpb24iLDE3NzcpLEkoMTc3OCwxLHt9LGVaKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKHM9MCxyPW5ldyBhcihscihHMChlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDc5KSx3PU1vKHUoU3QoKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jKSwwKSw4MikpLGs9dy5pK3cuZy8yLEM9dy5qK3cuZi8yLG89dShxZSh3LChjaSgpLHo2KSksOCksaD1lLmkrby5hK2UuZy8yLGQ9ZS5qK28uYitlLmYsTT1rLWgsRj1DLWQscys9Yi5NYXRoLnNxcnQoTSpNK0YqRik7cmV0dXJuIHN9LFAoJGt0LCJFZGdlTGVuZ3RoUG9zaXRpb25PcHRpbWl6YXRpb24iLDE3NzgpLEkoMTM3Myw2NDUsYXMsekYpLGwucGY9ZnVuY3Rpb24oZSxuKXskYm4odGhpcyx1KGUsMzMpLG4pfSxQKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3ZlcmxhcHMiLCJSYWRpdXNFeHRlbnNpb25PdmVybGFwUmVtb3ZhbCIsMTM3MyksSSg0MjYsMjIsezM6MSwzNToxLDIyOjEsNDI2OjF9LEdidCk7dmFyIGRfdCxQaHQsZ190PWpyKEdfLCJBbm51bHVzV2VkZ2VDcml0ZXJpYSIsNDI2LEhyLFFubix2SmUpLHl5ZTtJKDM4MCwyMix7MzoxLDM1OjEsMjI6MSwzODA6MX0sQmV0KTt2YXIgQ1YscF90LGJfdCx2X3Q9anIoR18sSnh0LDM4MCxIcixVcm4sd0plKSx4eWU7SSg4NTIsMSxJaCxaSiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsemt0KSwiIiksIk9yZGVyIElEIiksIlRoZSBpZCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gb3JkZXIgZm9yIG5vZGVzIG9mIG9uZSByYWRpdXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gc29ydCB0aGVtIGluIHRoZSBsYXllciBhY2NvcmRpbmdseS4iKSxkZSgwKSksKGpnKCksZ2MpKSxqYSksdW4oKFhmKCksSnMpKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscWt0KSwiIiksIlJhZGl1cyIpLCJUaGUgcmFkaXVzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgcmFkaXVzIGZvciB0aGUgcmFkaWFsIGxheW91dGVyLiIpLDApLERvKSxjYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxrY3QpLCIiKSwiQ29tcGFjdGlvbiIpLCJXaXRoIHRoZSBjb21wYWN0ZXIgb3B0aW9uIGl0IGNhbiBiZSBkZXRlcm1pbmVkIGhvdyBjb21wYWN0aW9uIG9uIHRoZSBncmFwaCBpcyBkb25lLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gbm9uZSwgdGhlIHJhZGlhbCBjb21wYWN0aW9uIG9yIHRoZSBjb21wYWN0aW9uIG9mIHdlZGdlcyBzZXBhcmF0ZWx5LiIpLHdfdCksY3MpLHZfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxFY3QpLCIiKSwiQ29tcGFjdGlvbiBTdGVwIFNpemUiKSwiRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHN0ZXBzIHdpdGggd2hpY2ggdGhlIGNvbXBhY3Rpb24gaXMgZG9uZS4gU3RlcCBzaXplIDEgY29ycmVsYXRlcyB0byBhIGNvbXBhY3Rpb24gb2YgMSBwaXhlbCBwZXIgSXRlcmF0aW9uLiIpLGRlKDEpKSxnYyksamEpLHVuKHFuKSkpKSxhYShlLEVjdCxrY3QsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEhrdCksIiIpLCJTb3J0ZXIiKSwiU29ydCB0aGUgbm9kZXMgcGVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNvcnRpbmcgYWxnb3JpdGhtLiBUaGUgc3RyYXRlZ2llcyBhcmUgbm9uZSwgYnkgdGhlIGdpdmVuIG9yZGVyIGlkLCBvciBzb3J0aW5nIHRoZW0gYnkgcG9sYXIgY29vcmRpbmF0ZXMuIikseV90KSxjcyksSV90KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEdrdCksIiIpLCJBbm51bHVzIFdlZGdlIENyaXRlcmlhIiksIkRldGVybWluZSBob3cgdGhlIHdlZGdlIGZvciB0aGUgbm9kZSBwbGFjZW1lbnQgaXMgY2FsY3VsYXRlZC4gSXQgY2FuIGJlIGNob3NlbiBiZXR3ZWVuIHdlZGdlIGRldGVybWluYXRpb24gYnkgdGhlIG51bWJlciBvZiBsZWF2ZXMgb3IgYnkgdGhlIG1heGltdW0gc3VtIG9mIGRpYWdvbmFscy4iKSx4X3QpLGNzKSxnX3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVmt0KSwiIiksIlRyYW5zbGF0aW9uIE9wdGltaXphdGlvbiIpLCJGaW5kIHRoZSBvcHRpbWFsIHRyYW5zbGF0aW9uIG9mIHRoZSBub2RlcyBvZiB0aGUgZmlyc3QgcmFkaWkgYWNjb3JkaW5nIHRvIHRoaXMgY3JpdGVyaWEuIEZvciBleGFtcGxlIGVkZ2UgY3Jvc3NpbmdzIGNhbiBiZSBtaW5pbWl6ZWQuIiksbV90KSxjcyksQV90KSx1bihxbikpKSksZGhlKChuZXcgUEIsZSkpfTt2YXIga3llLEV5ZSx3X3QsVHllLG1fdCxDeWUsX3llLFN5ZSx5X3QsQXllLHhfdDtQKEdfLCJSYWRpYWxNZXRhRGF0YVByb3ZpZGVyIiw4NTIpLEkoOTk2LDEsSWgsUEIpLGwuUWU9ZnVuY3Rpb24oZSl7ZGhlKGUpfTt2YXIgRmh0LEJodCxMeWUsTXllLEl5ZSxEeWUsa190LEVfdCxfVixPeWUsTnllLFNWLEJPLFB5ZSxUX3Q7UChHXywiUmFkaWFsT3B0aW9ucyIsOTk2KSxJKDk5NywxLHt9LG5aKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFRIdCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChHXywiUmFkaWFsT3B0aW9ucy9SYWRpYWxGYWN0b3J5Iiw5OTcpLEkoMzQwLDIyLHszOjEsMzU6MSwyMjoxLDM0MDoxfSxXUik7dmFyIENfdCxfX3QsU190LFJodCxBX3Q9anIoR18sIlJhZGlhbFRyYW5zbGF0aW9uU3RyYXRlZ3kiLDM0MCxIciwkaW4sbUplKSxGeWU7SSgyOTMsMjIsezM6MSwzNToxLDIyOjEsMjkzOjF9LFJldCk7dmFyIExfdCxqaHQsTV90LElfdD1qcihHXywiU29ydGluZ1N0cmF0ZWd5IiwyOTMsSHIsS3JuLHlKZSksQnllO0koMTQ0OSwxLHpjLHFGKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzMpLG51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtZYm4odGhpcyx1KGUsMzMpLG4pfSxsLmM9MCxQKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMXBvc2l0aW9uIiwiRWFkZXNSYWRpYWwiLDE0NDkpLEkoMTc3NSwxLHt9LHJaKSxsLmpnPWZ1bmN0aW9uKGUpe3JldHVybiBKaWUoZSl9LFAoUDFlLCJBbm51bHVzV2VkZ2VCeUxlYWZzIiwxNzc1KSxJKDE3NzYsMSx7fSxIRiksbC5qZz1mdW5jdGlvbihlKXtyZXR1cm4gYWFlKHRoaXMsZSl9LFAoUDFlLCJBbm51bHVzV2VkZ2VCeU5vZGVTcGFjZSIsMTc3NiksSSgxNDUwLDEsemMsR0YpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMyksbnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe29kbih0aGlzLHUoZSwzMyksbil9LFAoIm9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAycm91dGluZyIsIlN0cmFpZ2h0TGluZUVkZ2VSb3V0ZXIiLDE0NTApLEkoODExLDEse30sVnB0KSxsLmtnPWZ1bmN0aW9uKGUpe30sbC5sZz1mdW5jdGlvbihlKXskenQodGhpcyxlKX0sUChVa3QsIklEU29ydGVyIiw4MTEpLEkoMTc3NCwxLE9pLFZGKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIElvbih1KGUsMzMpLHUobiwzMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoVWt0LCJJRFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNzc0KSxJKDE3NzMsMSx7fSxybmUpLGwua2c9ZnVuY3Rpb24oZSl7bFp0KHRoaXMsZSl9LGwubGc9ZnVuY3Rpb24oZSl7dmFyIG47ZS5kYygpfHwodGhpcy5lfHwobj1hWXQodShlLlhiKDApLDMzKSksbFp0KHRoaXMsbikpLCR6dCh0aGlzLmUsZSkpfSxQKFVrdCwiUG9sYXJDb29yZGluYXRlU29ydGVyIiwxNzczKSxJKDExMzYsMjA5LEUyLGlaKSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHI7aWYod3IobiwiUmVjdGFuZ2xlIFBhY2tpbmciLDEpLG4ubiYmbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSkscj1YdCh5ZShxZShlLChLc3QoKSxXeWUpKSkpLHR0PXUocWUoZSxHX3QpLDM4MSksX3Q9amUoUmUocWUoZSx6X3QpKSksU2U9amUoUmUocWUoZSxIX3QpKSksRj1qZShSZShxZShlLFJfdCkpKSxXZT11KHFlKGUsdDNlKSwxMTYpLGNlPVh0KHllKHFlKGUsbjNlKSkpLG89amUoUmUocWUoZSxVX3QpKSksSD1qZShSZShxZShlLGpfdCkpKSxMdD1qZShSZShxZShlLCRfdCkpKSxocj1YdCh5ZShxZShlLFdfdCkpKSxSbj0oIWUuYSYmKGUuYT1uZXcgaGUobnMsZSwxMCwxMSkpLGUuYSksbm5lKFJuKSxMdCl7Zm9yKFk9bmV3IGxlLGs9bmV3IGVyKFJuKTtrLmUhPWsuaS5nYygpOylkPXUoZHIoayksMzMpLHIyKGQsUk8pJiYoWS5jW1kuYy5sZW5ndGhdPWQpO2ZvcihDPW5ldyBTKFkpO0MuYTxDLmMuYy5sZW5ndGg7KWQ9dShKKEMpLDMzKSxqJChSbixkKTtmb3Iodm4oKSxYcyhZLG5ldyBzWiksTT1uZXcgUyhZKTtNLmE8TS5jLmMubGVuZ3RoOylkPXUoSihNKSwzMyksUWU9dShxZShkLFJPKSwxOSkuYSxRZT1iLk1hdGgubWluKFFlLFJuLmkpLEpDKFJuLFFlLGQpO2ZvcihndD0wLHc9bmV3IGVyKFJuKTt3LmUhPXcuaS5nYygpOylkPXUoZHIodyksMzMpLGJvKGQsQl90LGRlKGd0KSksKytndH1ZdD1HNHQoZSksWXQuYS09V2UuYitXZS5jLFl0LmItPVdlLmQrV2UuYSxCdD1ZdC5hLGhyPDB8fGhyPFl0LmE/KFY9bmV3IG1LdChyLHR0LF90KSxoPV93bihWLFJuLGNlLFdlKSxuLm4mJm4ubiYmZSYmaGYobixmZihlKSwoQ2woKSxZbCkpKTpoPW5ldyBUbnQocixociwwLCh5RSgpLEhTKSksWXQuYSs9V2UuYitXZS5jLFl0LmIrPVdlLmQrV2UuYSxTZXx8KG5uZShSbiksem49bmV3IE1adChyLEYsSCxvLGNlKSxCdD1iLk1hdGgubWF4KFl0LmEsaC5jKSxoPWk0bih6bixSbixCdCxZdCxuLGUsV2UpKSxyY24oUm4sV2UpLGd3KGUsaC5jKyhXZS5iK1dlLmMpLGguYisoV2UuZCtXZS5hKSwhMSwhMCksamUoUmUocWUoZSxxX3QpKSl8fHUkKChzPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxzKSksbi5uJiZuLm4mJmUmJmhmKG4sZmYoZSksKENsKCksWWwpKSxvcihuKX0sUChqMWUsIlJlY3RQYWNraW5nTGF5b3V0UHJvdmlkZXIiLDExMzYpLEkoMTEzNywxLE9pLHNaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEtjbih1KGUsMzMpLHUobiwzMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoajFlLCJSZWN0UGFja2luZ0xheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDExMzcpLEkoMTI1NiwxLHt9LG1LdCksbC5hPTAsbC5jPSExLFAoZEgsIkFyZWFBcHByb3hpbWF0aW9uIiwxMjU2KTt2YXIgRF90PVlpKGRILCJCZXN0Q2FuZGlkYXRlRmlsdGVyIik7SSg2MzgsMSx7NTI2OjF9LFVUKSxsLm1nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7Zm9yKGs9bmV3IGxlLGg9c3Msdz1uZXcgUyhlKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwyMjApLGg9Yi5NYXRoLm1pbihoLChkLmMrKHIuYityLmMpKSooZC5iKyhyLmQrci5hKSkpO2ZvcihvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMCksKHMuYysoci5iK3IuYykpKihzLmIrKHIuZCtyLmEpKT09aCYmKGsuY1trLmMubGVuZ3RoXT1zKTtyZXR1cm4ga30sUChkSCwiQXJlYUZpbHRlciIsNjM4KSxJKDYzOSwxLHs1MjY6MX0sTkwpLGwubWc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3Iodz1uZXcgbGUsaz1zcyxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDIyMCksaz1iLk1hdGgubWluKGssYi5NYXRoLmFicygoaC5jKyhyLmIrci5jKSkvKGguYisoci5kK3IuYSkpLW4pKTtmb3Iobz1uZXcgUyhlKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwyMjApLGIuTWF0aC5hYnMoKHMuYysoci5iK3IuYykpLyhzLmIrKHIuZCtyLmEpKS1uKT09ayYmKHcuY1t3LmMubGVuZ3RoXT1zKTtyZXR1cm4gd30sUChkSCwiQXNwZWN0UmF0aW9GaWx0ZXIiLDYzOSksSSg2MzcsMSx7NTI2OjF9LFdUKSxsLm1nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7Zm9yKGs9bmV3IGxlLGg9VHMsdz1uZXcgUyhlKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwyMjApLGg9Yi5NYXRoLm1heChoLHF2dChkLmMrKHIuYityLmMpLGQuYisoci5kK3IuYSksZC5hKSk7Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIwKSxxdnQocy5jKyhyLmIrci5jKSxzLmIrKHIuZCtyLmEpLHMuYSk9PWgmJihrLmNbay5jLmxlbmd0aF09cyk7cmV0dXJuIGt9LFAoZEgsIlNjYWxlTWVhc3VyZUZpbHRlciIsNjM3KSxJKDM4MSwyMix7MzoxLDM1OjEsMjI6MSwzODE6MX0samV0KTt2YXIgT190LE5fdCwkaHQsUF90PWpyKFRjdCwiT3B0aW1pemF0aW9uR29hbCIsMzgxLEhyLFdybix4SmUpLFJ5ZTtJKDg1NiwxLEloLGpCKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxXa3QpLCIiKSwiT3B0aW1pemF0aW9uIEdvYWwiKSwiT3B0aW1pemF0aW9uIGdvYWwgZm9yIGFwcHJveGltYXRpb24gb2YgdGhlIGJvdW5kaW5nIGJveCBnaXZlbiBieSB0aGUgZmlyc3QgaXRlcmF0aW9uLiBEZXRlcm1pbmVzIHdoZXRoZXIgbGF5b3V0IGlzIHNvcnRlZCBieSB0aGUgbWF4aW11bSBzY2FsaW5nLCBhc3BlY3QgcmF0aW8sIG9yIGFyZWEuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhlIGFzcGVjdCByYXRpbyBtaWdodCBiZSBuZWFybHkgaWdub3JlZC4iKSxGX3QpLChqZygpLGNzKSksUF90KSx1bigoWGYoKSxKcykpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLa3QpLCIiKSwiU2hpZnQgTGFzdCBQbGFjZWQuIiksIldoZW4gcGxhY2luZyBhIHJlY3RhbmdsZSBiZWhpbmQgb3IgYmVsb3cgdGhlIGxhc3QgcGxhY2VkIHJlY3RhbmdsZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCBpdCBpcyBzb21ldGltZXMgcG9zc2libGUgdG8gc2hpZnQgdGhlIHJlY3RhbmdsZSBmdXJ0aGVyIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LCByZXN1bHRpbmcgaW4gbGVzcyB3aGl0ZXNwYWNlLiBUcnVlIChkZWZhdWx0KSBlbmFibGVzIHRoZSBzaGlmdCBhbmQgZmFsc2UgZGlzYWJsZXMgaXQuIERpc2FibGluZyB0aGUgc2hpZnQgcHJvZHVjZXMgYSBncmVhdGVyIGFwcHJveGltYXRlZCBhcmVhIGJ5IHRoZSBmaXJzdCBpdGVyYXRpb24gYW5kIGEgbGF5b3V0LCB3aGVuIHVzaW5nIE9OTFkgdGhlIGZpcnN0IGl0ZXJhdGlvbiAoZGVmYXVsdCBub3QgdGhlIGNhc2UpLCB3aGVyZSBpdCBpcyBzb21ldGltZXMgaW1wb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBzaXplIHRyYW5zZm9ybWF0aW9uIG9mIHJlY3RhbmdsZXMgdGhhdCB3aWxsIGZpbGwgdGhlIGJvdW5kaW5nIGJveCBhbmQgZWxpbWluYXRlIGVtcHR5IHNwYWNlcy4iKSwoRm4oKSwhMCkpLEFhKSxCcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZa3QpLCIiKSwiQ3VycmVudCBwb3NpdGlvbiBvZiBhIG5vZGUgaW4gdGhlIG9yZGVyIG9mIG5vZGVzIiksIlRoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlLiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFhrdCksIiIpLCJEZXNpcmVkIGluZGV4IG9mIG5vZGUiKSwiVGhlIHJlY3RhbmdsZXMgYXJlIG9yZGVyZWQuIE5vcm1hbGx5IGFjY29yZGluZyB0byB0aGVpciBkZWZpbml0aW9uIHRoZSB0aGUgbW9kZWwuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzcGVjaWZ5IGEgZGVzaXJlZCBwb3NpdGlvbiB0aGF0IGhhcyBwcmVmZXJlbmNlIG92ZXIgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFFrdCksIiIpLCJPbmx5IEFyZWEgQXBwcm94aW1hdGlvbiIpLCJJZiBlbmFibGVkIG9ubHkgdGhlIHdpZHRoIGFwcHJveGltYXRpb24gc3RlcCBpcyBleGVjdXRlZCBhbmQgdGhlIG5vZGVzIGFyZSBwbGFjZWQgYWNjb3JkaW5nbHkuIFRoZSBub2RlcyBhcmUgbGF5b3V0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwYWNraW5nU3RyYXRlZ3kuIElmIHNldCB0byB0cnVlIG5vdCBleHBhbnNpb24gb2Ygbm9kZXMgaXMgdGFraW5nIHBsYWNlLiIpLCExKSxBYSksQnMpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWmt0KSwiIiksIkNvbXBhY3QgUm93cyIpLCJFbmFibGVzIGNvbXBhY3Rpb24uIENvbXBhY3RzIGJsb2NrcyBpZiB0aGV5IGRvIG5vdCB1c2UgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSByb3cuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBoYXZlIGEgc21hbGxlciBkcmF3aW5nLiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBhbGwgbm9kZXMgYXJlIHBsYWNlZCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gcm93cy4iKSwhMCksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLENjdCksIiIpLCJGaXQgQXNwZWN0IFJhdGlvIiksIkV4cGFuZHMgbm9kZXMgaWYgZXhwYW5kTm9kZXMgaXMgdHJ1ZSB0byBmaXQgdGhlIGFzcGVjdCByYXRpbyBpbnN0ZWFkIG9mIG9ubHkgaW4gdGhlaXIgYm91bmRzLiBUaGUgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIHRoZSB1c2VkIHBhY2tpbmdTdHJhdGVneSBpcyBBU1BFQ1RfUkFUSU9fRFJJVkVOLCBvdGhlcndpc2UgdGhpcyBtYXkgcmVzdWx0IGluIHVucmVhc29uYWJsZSBuZG9lIGV4cGFuc2lvbi4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYWEoZSxDY3QsZ0gsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEprdCksIiIpLCJUYXJnZXQgV2lkdGgiKSwiT3B0aW9uIHRvIHBsYWNlIHRoZSByZWN0YW5nbGVzIGluIHRoZSBnaXZlbiB0YXJnZXQgd2lkdGggaW5zdGVhZCBvZiBhcHByb3hpbWF0aW5nIHRoZSB3aWR0aCB1c2luZyB0aGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8uIFRoZSBwYWRkaW5nIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzLiBNZWFuaW5nIGEgZHJhd2luZyB3aWxsIGhhdmUgd2lkdGggb2YgdGFyZ2V0d2lkdGggKyBob3Jpem9udGFsIHBhZGRpbmcuIiksLTEpLERvKSxjYSksdW4oSnMpKSkpLFBoZSgobmV3IEJrLGUpKX07dmFyIGp5ZSwkeWUsenllLHF5ZSxIeWUsR3llLEZfdCxWeWUsVXllO1AoVGN0LCJSZWN0UGFja2luZ01ldGFEYXRhUHJvdmlkZXIiLDg1NiksSSgxMDA0LDEsSWgsQmspLGwuUWU9ZnVuY3Rpb24oZSl7UGhlKGUpfTt2YXIgV3llLEt5ZSxCX3QsUk8sUl90LGpfdCwkX3QsWXllLHpfdCxYeWUsUXllLFp5ZSxKeWUscV90LEhfdCxHX3QsdDNlLFZfdCxlM2UsVV90LG4zZSxXX3Q7UChUY3QsIlJlY3RQYWNraW5nT3B0aW9ucyIsMTAwNCksSSgxMDA1LDEse30sYVopLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgaVosZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoVGN0LCJSZWN0UGFja2luZ09wdGlvbnMvUmVjdHBhY2tpbmdGYWN0b3J5IiwxMDA1KSxJKDEyNTcsMSx7fSxNWnQpLGwuYT0wLGwuYj0hMSxsLmM9MCxsLmQ9MCxsLmU9ITEsbC5mPSExLGwuZz0wLFAoIm9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuc2Vjb25kaXRlcmF0aW9uIiwiUm93RmlsbGluZ0FuZENvbXBhY3Rpb24iLDEyNTcpLEkoMTg3LDEsezE4NzoxfSx4aXQpLGwuYT0wLGwuYz0hMSxsLmQ9MCxsLmU9MCxsLmY9MCxsLmc9MCxsLmk9MCxsLms9ITEsbC5vPXNzLGwucD1zcyxsLnI9MCxsLnM9MCxsLnQ9MCxQKFlELCJCbG9jayIsMTg3KSxJKDIxMSwxLHsyMTE6MX0sZiQpLGwuYT0wLGwuYj0wLGwuZD0wLGwuZT0wLGwuZj0wLFAoWUQsIkJsb2NrUm93IiwyMTEpLEkoNDQzLDEsezQ0MzoxfSxQd3QpLGwuYj0wLGwuYz0wLGwuZD0wLGwuZT0wLGwuZj0wLFAoWUQsIkJsb2NrU3RhY2siLDQ0MyksSSgyMjAsMSx7MjIwOjF9LFRudCx1M3QpLGwuYT0wLGwuYj0wLGwuYz0wLGwuZD0wLGwuZT0wO3ZhciB2eG49UChZRCwiRHJhd2luZ0RhdGEiLDIyMCk7SSgzNTUsMjIsezM6MSwzNToxLDIyOjEsMzU1OjF9LF9NKTt2YXIgUjYsbjUselMscVMsSFMscjNlPWpyKFlELCJEcmF3aW5nRGF0YURlc2NyaXB0b3IiLDM1NSxIcixFc24sa0plKSxpM2U7SSgyMDAsMSx7MjAwOjF9LFZ3dCksbC5iPTAsbC5jPTAsbC5lPTAsbC5mPTAsUChZRCwiUmVjdFJvdyIsMjAwKSxJKDc1NiwxLHt9LCR5dCksbC5qPTAsUChDeSx0MWUsNzU2KSxJKDEyNDUsMSx7fSxvWiksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gSHAoZS5hLGUuYil9LFAoQ3ksZTFlLDEyNDUpLEkoMTI0NiwxLHt9LE8kdCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gTXNuKHRoaXMuYSxlKX0sUChDeSxuMWUsMTI0NiksSSgxMjQ3LDEse30sTiR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBCaG4odGhpcy5hLGUpfSxQKEN5LHIxZSwxMjQ3KSxJKDEyNDgsMSx7fSxQJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9jbih0aGlzLmEsZSl9LFAoQ3ksIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTI0OCksSSgxMjQ5LDEse30sRiR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiB2cG4odGhpcy5hLGUpfSxQKEN5LGkxZSwxMjQ5KSxJKDExMzMsMjA5LEUyLF9IdCksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IocjIoZSwockQoKSxEVikpJiYoVj1CcihxZShlLCh1c3QoKSxnU3QpKSksaD1zYXQoejgoKSxWKSxoJiYoZD11KGxydChoLmYpLDIwOSksZC5aZShlLFJjKG4sMSkpKSksYm8oZSxXaHQsKGhJKCksSVYpKSxibyhlLEtodCwoaUQoKSxVaHQpKSxibyhlLFlodCwoTkkoKSxPVikpLHc9dShxZShlLCh1c3QoKSxoU3QpKSwxOSkuYSx3cihuLCJPdmVybGFwIHJlbW92YWwiLDEpLGplKFJlKHFlKGUsVDNlKSkpLGs9bmV3IHFzLEM9bmV3IEIkdChrKSxzPW5ldyAkeXQscj1GaGUocyxlKSxNPSEwLG89MDtvPHcmJk07KXtpZihqZShSZShxZShlLGZTdCkpKSl7aWYoay5hLiRiKCksZ2duKG5ldyBUVXQoQyksci5pKSxrLmEuZ2MoKT09MClicmVhaztyLmU9a31mb3IodyQodGhpcy5iKSxVZCh0aGlzLmIsKEdJKCksQVYpLChIOSgpLGpPKSksVWQodGhpcy5iLExWLHIuZyksVWQodGhpcy5iLE1WLChJUigpLEhodCkpLHRoaXMuYT1UcSh0aGlzLmIsciksSD1uZXcgUyh0aGlzLmEpO0guYTxILmMuYy5sZW5ndGg7KUY9dShKKEgpLDUxKSxGLnBmKHIsUmMobiwxKSk7STFuKHMsciksTT1qZShSZShRKHIsKEc4KCksbjd0KSkpKSwrK299UWxlKHMsciksb3Iobil9LFAoQ3ksIk92ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIiLDExMzMpLEkoMTEzNCwxLHt9LEIkdCksUChDeSwiT3ZlcmxhcFJlbW92YWxMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlIiwxMTM0KSxJKDQzNywyMix7MzoxLDM1OjEsMjI6MSw0Mzc6MX0sJGV0KTt2YXIgQVYsTFYsTVYsemh0PWpyKEN5LCJTUE9yRVBoYXNlcyIsNDM3LEhyLFlybixFSmUpLHMzZTtJKDEyNTUsMSx7fSxTSHQpLFAoQ3ksIlNocmlua1RyZWUiLDEyNTUpLEkoMTEzNSwyMDksRTIsRHF0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtyMihlLChyRCgpLERWKSkmJihkPUJyKHFlKGUsRFYpKSxvPXNhdCh6OCgpLGQpLG8mJihoPXUobHJ0KG8uZiksMjA5KSxoLlplKGUsUmMobiwxKSkpKSxzPW5ldyAkeXQscj1GaGUocyxlKSx0Mm4odGhpcy5hLHIsUmMobiwxKSksUWxlKHMscil9LFAoQ3ksIlNocmlua1RyZWVMYXlvdXRQcm92aWRlciIsMTEzNSksSSgzMDAsMTM0LHszOjEsMzAwOjEsOTQ6MSwxMzQ6MX0sYVF0KSxsLmM9ITEsUCgib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5ncmFwaCIsIkdyYXBoIiwzMDApLEkoNDgyLDIyLHszOjEsMzU6MSwyMjoxLDQ4MjoxLDI0NjoxLDIzNDoxfSxFR3QpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdXJlKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHVyZSh0aGlzKX07dmFyIHFodCxLX3Q9anIoX3ksSnh0LDQ4MixIcixhbm4sVEplKSxhM2U7SSg1NTEsMjIsezM6MSwzNToxLDIyOjEsNTUxOjEsMjQ2OjEsMjM0OjF9LEVXdCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBuZXcgVUZ9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVGfTt2YXIgSGh0LG8zZT1qcihfeSwiT3ZlcmxhcFJlbW92YWxTdHJhdGVneSIsNTUxLEhyLG9ubixDSmUpLGMzZTtJKDQzMCwyMix7MzoxLDM1OjEsMjI6MSw0MzA6MX0sVmJ0KTt2YXIgSVYsR2h0LFlfdD1qcihfeSwiUm9vdFNlbGVjdGlvbiIsNDMwLEhyLEpubixfSmUpLHUzZTtJKDMxNiwyMix7MzoxLDM1OjEsMjI6MSwzMTY6MX0sU00pO3ZhciBYX3QsVmh0LFVodCxRX3QsWl90LEpfdD1qcihfeSwiU3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIiwzMTYsSHIseXNuLFNKZSksbDNlO0koMTAwMiwxLEloLEZCKSxsLlFlPWZ1bmN0aW9uKGUpe1NsZShlKX07dmFyIHRTdCxlU3QsaDNlLGYzZSxuU3QsclN0LFdodCxLaHQsWWh0LGQzZSxnM2UsRFY7UChfeSwiU3BvcmVDb21wYWN0aW9uT3B0aW9ucyIsMTAwMiksSSgxMDAzLDEse30sUEwpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgRHF0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKF95LCJTcG9yZUNvbXBhY3Rpb25PcHRpb25zL1Nwb3JlQ29tcGFjdGlvbkZhY3RvcnkiLDEwMDMpLEkoODU1LDEsSWgsQkIpLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLF9jdCksIiIpLCJVbmRlcmx5aW5nIExheW91dCBBbGdvcml0aG0iKSwiQSBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgZ3JhcGggYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC4gSWYgdGhpcyBpcyBudWxsLCBub3RoaW5nIGlzIGFwcGxpZWQgYmVmb3JlIGNvbXBhY3Rpb24uIiksKGpnKCksVDcpKSxBZSksdW4oKFhmKCkscW4pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTGN0KSwic3RydWN0dXJlIiksIlN0cnVjdHVyZSBFeHRyYWN0aW9uIFN0cmF0ZWd5IiksIlRoaXMgb3B0aW9uIGRlZmluZXMgd2hhdCBraW5kIG9mIHRyaWFuZ3VsYXRpb24gb3Igb3RoZXIgcGFydGl0aW9uaW5nIG9mIHRoZSBwbGFuZSBpcyBhcHBsaWVkIHRvIHRoZSB2ZXJ0aWNlcy4iKSx1U3QpLGNzKSxwU3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdDh0KSxNY3QpLCJUcmVlIENvbnN0cnVjdGlvbiBTdHJhdGVneSIpLCJXaGV0aGVyIGEgbWluaW11bSBzcGFubmluZyB0cmVlIG9yIGEgbWF4aW11bSBzcGFubmluZyB0cmVlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZC4iKSxvU3QpLGNzKSx2U3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZTh0KSxNY3QpLCJDb3N0IEZ1bmN0aW9uIGZvciBTcGFubmluZyBUcmVlIiksIlRoZSBjb3N0IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBzcGFubmluZyB0cmVlLiIpLGFTdCksY3MpLEpfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxTY3QpLE1jdCksIlJvb3Qgbm9kZSBmb3Igc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iKSwiVGhlIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUgdGhhdCBpcyBwcmVmZXJyZWQgYXMgdGhlIHJvb3Qgb2YgdGhlIHNwYW5uaW5nIHRyZWUuIElmIHRoaXMgaXMgbnVsbCwgdGhlIGZpcnN0IG5vZGUgaXMgY2hvc2VuLiIpLG51bGwpLFQ3KSxBZSksdW4ocW4pKSkpLGFhKGUsU2N0LEFjdCx5M2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxBY3QpLE1jdCksIlJvb3Qgc2VsZWN0aW9uIGZvciBzcGFubmluZyB0cmVlIiksIlRoaXMgc2V0cyB0aGUgbWV0aG9kIHVzZWQgdG8gc2VsZWN0IGEgcm9vdCBub2RlIGZvciB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3Bhbm5pbmcgdHJlZSIpLHNTdCksY3MpLFlfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxuOHQpLFg2dCksIkNvbXBhY3Rpb24gU3RyYXRlZ3kiKSwiVGhpcyBvcHRpb24gZGVmaW5lcyBob3cgdGhlIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iKSxpU3QpLGNzKSxLX3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscjh0KSxYNnQpLCJPcnRob2dvbmFsIENvbXBhY3Rpb24iKSwiUmVzdHJpY3RzIHRoZSB0cmFuc2xhdGlvbiBvZiBub2RlcyB0byBvcnRob2dvbmFsIGRpcmVjdGlvbnMgaW4gdGhlIGNvbXBhY3Rpb24gcGhhc2UuIiksKEZuKCksITEpKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsaTh0KSwkMWUpLCJVcHBlciBsaW1pdCBmb3IgaXRlcmF0aW9ucyBvZiBvdmVybGFwIHJlbW92YWwiKSxudWxsKSxkZSg2NCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzOHQpLCQxZSksIldoZXRoZXIgdG8gcnVuIGEgc3VwcGxlbWVudGFyeSBzY2FubGluZSBvdmVybGFwIGNoZWNrLiIpLG51bGwpLCEwKSxBYSksQnMpLHVuKHFuKSkpKSxPdWUoKG5ldyBSQixlKSksU2xlKChuZXcgRkIsZSkpfTt2YXIgcDNlLGlTdCxiM2UsdjNlLHczZSxtM2UseTNlLHgzZSxzU3QsazNlLGFTdCxFM2Usb1N0LGNTdCx1U3QsbFN0O1AoX3ksIlNwb3JlTWV0YURhdGFQcm92aWRlciIsODU1KSxJKCRnLDEsSWgsUkIpLGwuUWU9ZnVuY3Rpb24oZSl7T3VlKGUpfTt2YXIgVDNlLGhTdCxmU3QsZFN0LEMzZSxnU3Q7UChfeSwiU3BvcmVPdmVybGFwUmVtb3ZhbE9wdGlvbnMiLCRnKSxJKDEwMDEsMSx7fSxjWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBfSHQsZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoX3ksIlNwb3JlT3ZlcmxhcFJlbW92YWxPcHRpb25zL1Nwb3JlT3ZlcmxhcEZhY3RvcnkiLDEwMDEpLEkoNTMwLDIyLHszOjEsMzU6MSwyMjoxLDUzMDoxLDI0NjoxLDIzNDoxfSxkWHQpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gbHJlKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIGxyZSh0aGlzKX07dmFyIGpPLHBTdD1qcihfeSwiU3RydWN0dXJlRXh0cmFjdGlvblN0cmF0ZWd5Iiw1MzAsSHIsY25uLEFKZSksXzNlO0koNDI5LDIyLHszOjEsMzU6MSwyMjoxLDQyOToxLDI0NjoxLDIzNDoxfSxVYnQpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gc2llKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHNpZSh0aGlzKX07dmFyIGJTdCxPVix2U3Q9anIoX3ksIlRyZWVDb25zdHJ1Y3Rpb25TdHJhdGVneSIsNDI5LEhyLFpubixMSmUpLFMzZTtJKDE0NDMsMSx6Yyx1WiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMwMCksbmV3IEhzfSxsLnBmPWZ1bmN0aW9uKGUsbil7ejFuKHUoZSwzMDApLG4pfSxQKHoxZSwiRGVsYXVuYXlUcmlhbmd1bGF0aW9uUGhhc2UiLDE0NDMpLEkoMTQ0NCwxLFVuLFIkdCksbC50ZD1mdW5jdGlvbihlKXt1ZSh0aGlzLmEsdShlLDY1KS5hKX0sUCh6MWUsIkRlbGF1bmF5VHJpYW5ndWxhdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NDQpLEkoNzgzLDEsemMsR3B0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzAwKSxuZXcgSHN9LGwucGY9ZnVuY3Rpb24oZSxuKXt0aGlzLm5nKHUoZSwzMDApLG4pfSxsLm5nPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO3dyKG4sIk1pbmltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iLDEpLGUuZD9zPWUuZC5hOnM9dShGZShlLmksMCksNjUpLmEsamUoUmUoUShlLChHOCgpLHVTKSkpKT9vPUNhdChlLmUscywocj1lLmIscikpOm89Q2F0KGUuZSxzLGUuYiksVm5lKHRoaXMsbyxlKSxvcihuKX0sUChJY3QsIk1pblNUUGhhc2UiLDc4MyksSSgxNDQ2LDc4Myx6YyxicXQpLGwubmc9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDt3cihuLCJNYXhpbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uIiwxKSxyPW5ldyBqJHQoZSksZS5kP289ZS5kLmM6bz11KEZlKGUuaSwwKSw2NSkuYyxqZShSZShRKGUsKEc4KCksdVMpKSkpP2g9Q2F0KGUuZSxvLChzPXIscykpOmg9Q2F0KGUuZSxvLHIpLFZuZSh0aGlzLGgsZSksb3Iobil9LFAoSWN0LCJNYXhTVFBoYXNlIiwxNDQ2KSxJKDE0NDcsMSx7fSxqJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIElZZSh0aGlzLmEsZSl9LFAoSWN0LCJNYXhTVFBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NDcpLEkoMTQ0NSwxLFVuLCQkdCksbC50ZD1mdW5jdGlvbihlKXtrWGUodGhpcy5hLHUoZSw2NSkpfSxQKEljdCwiTWluU1RQaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDQ1KSxJKDc4NSwxLHpjLFVGKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzAwKSxuZXcgSHN9LGwucGY9ZnVuY3Rpb24oZSxuKXt0MG4odGhpcyx1KGUsMzAwKSxuKX0sbC5hPSExLFAoRGN0LCJHcm93VHJlZVBoYXNlIiw3ODUpLEkoNzg2LDEsVW4seXZ0KSxsLnRkPWZ1bmN0aW9uKGUpe3Zjbih0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMjIxKSl9LFAoRGN0LCJHcm93VHJlZVBoYXNlL2xhbWJkYSQwJFR5cGUiLDc4NiksSSgxNDQ4LDEsemMsbFopLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMDApLG5ldyBIc30sbC5wZj1mdW5jdGlvbihlLG4pe3Vmbih0aGlzLHUoZSwzMDApLG4pfSxQKERjdCwiU2hyaW5rVHJlZUNvbXBhY3Rpb25QaGFzZSIsMTQ0OCksSSg3ODQsMSxVbix4dnQpLGwudGQ9ZnVuY3Rpb24oZSl7enBuKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHUoZSwyMjEpKX0sUChEY3QsIlNocmlua1RyZWVDb21wYWN0aW9uUGhhc2UvbGFtYmRhJDAkVHlwZSIsNzg0KTt2YXIgd1N0PVlpKEVjLCJJR3JhcGhFbGVtZW50VmlzaXRvciIpO0koODYwLDEsezUyNzoxfSxlWnQpLGwub2c9ZnVuY3Rpb24oZSl7dmFyIG47bj1Xdm4odGhpcyxlKSxMbyhuLHUoSm4odGhpcy5iLGUpLDk0KSksVmJuKHRoaXMsZSxuKX07dmFyIEEzZSxMM2U7UChTNCwiTGF5b3V0Q29uZmlndXJhdG9yIiw4NjApO3ZhciB3eG49WWkoUzQsIkxheW91dENvbmZpZ3VyYXRvci9JUHJvcGVydHlIb2xkZXJPcHRpb25GaWx0ZXIiKTtJKDkzMiwxLHsxOTMzOjF9LGhaKSxsLnBnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFF4KCksIWUuWGUobil9LFAoUzQsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMCRUeXBlIiw5MzIpLEkoOTMzLDEsezE5MzM6MX0sZlopLGwucGc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga0h0KGUsbil9LFAoUzQsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw5MzMpLEkoOTMxLDEsezgzMToxfSxkWiksbC5xZz1mdW5jdGlvbihlLG4pe3JldHVybiBReCgpLCFlLlhlKG4pfSxQKFM0LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDIkVHlwZSIsOTMxKSxJKDkzNCwxLHVpLGFWdCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gV2VuKHRoaXMuYSx0aGlzLmIsdShlLDE5MzMpKX0sUChTNCwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQzJFR5cGUiLDkzNCksSSg4NTgsMSx7fSxnWiksUChTNCwiUmVjdXJzaXZlR3JhcGhMYXlvdXRFbmdpbmUiLDg1OCksSSgyOTYsNjAsVTAsVXp0LEYzKSxQKFM0LCJVbnN1cHBvcnRlZENvbmZpZ3VyYXRpb25FeGNlcHRpb24iLDI5NiksSSg0NTMsNjAsVTAsRjkpLFAoUzQsIlVuc3VwcG9ydGVkR3JhcGhFeGNlcHRpb24iLDQ1MyksSSg3NTQsMSx7fSksUChFYywiQWJzdHJhY3RSYW5kb21MaXN0QWNjZXNzb3IiLDc1NCksSSg1MDAsNzU0LHt9LGREKSxsLnJnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuZD0hMCxsLmU9ITAsbC5mPTAsUCh6RSwiQWxnb3JpdGhtQXNzZW1ibGVyIiw1MDApLEkoMTIzNiwxLHVpLHBaKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiEhdShlLDEyMyl9LFAoekUsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMCRUeXBlIiwxMjM2KSxJKDEyMzcsMSx7fSx6JHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFhLZSh0aGlzLmEsdShlLDEyMykpfSxQKHpFLCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDEkVHlwZSIsMTIzNyksSSgxMjM4LDEsdWksYlopLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsODApfSxQKHpFLCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDIkVHlwZSIsMTIzOCksSSgxMjM5LDEsVW4scSR0KSxsLnRkPWZ1bmN0aW9uKGUpe1JsKHRoaXMuYSx1KGUsODApKX0sUCh6RSwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQzJFR5cGUiLDEyMzkpLEkoMTI0MCwxLFVuLG9WdCksbC50ZD1mdW5jdGlvbihlKXt1UWUodGhpcy5hLHRoaXMuYix1KGUsMjM0KSl9LFAoekUsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkNCRUeXBlIiwxMjQwKSxJKDEzNTUsMSxPaSx2WiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBFbm4odShlLDIzNCksdShuLDIzNCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoekUsIkVudW1CYXNlZEZhY3RvcnlDb21wYXJhdG9yIiwxMzU1KSxJKDgwLDc1NCx7ODA6MX0sSHMpLGwucmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFzfSxsLmE9MCxQKHpFLCJMYXlvdXRQcm9jZXNzb3JDb25maWd1cmF0aW9uIiw4MCksSSgxMDEzLDEsezUyNzoxfSxZTCksbC5vZz1mdW5jdGlvbihlKXtVQyhJM2UsbmV3IEgkdChlKSl9O3ZhciBNM2UsSTNlLEQzZTtQKFFvLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIiLDEwMTMpLEkoMTAxNCwxLFVuLHdaKSxsLnRkPWZ1bmN0aW9uKGUpe2Zhbih1KGUsMTYwKSl9LFAoUW8sIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMCRUeXBlIiwxMDE0KSxJKDEwMTUsMSxVbixtWiksbC50ZD1mdW5jdGlvbihlKXtQbG4odShlLDE2MCkpfSxQKFFvLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDEkVHlwZSIsMTAxNSksSSgxMDE2LDEse30sSCR0KSxsLk9kPWZ1bmN0aW9uKGUsbil7bFFlKHRoaXMuYSx1KGUsMTQ2KSx1KG4sMzgpKX0sUChRbywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQyJFR5cGUiLDEwMTYpLEkoMTQ5LDEsezY4NjoxLDE0OToxfSx3MiksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gb210KHRoaXMsZSl9LGwuc2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLnRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQmcodGhpcy5jKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgQWxnb3JpdGhtOiAiK3RoaXMuY307dmFyIG14bj1QKFFvLCJMYXlvdXRBbGdvcml0aG1EYXRhIiwxNDkpO0koMjYzLDEse30scGcpLFAoUW8sIkxheW91dEFsZ29yaXRobURhdGEvQnVpbGRlciIsMjYzKSxJKDEwMTcsMSx7NTI3OjF9LHlaKSxsLm9nPWZ1bmN0aW9uKGUpe0V0KGUsMjM5KSYmIWplKFJlKGUuV2UoKGNpKCksJFYpKSkpJiZNbW4odShlLDMzKSl9LFAoUW8sIkxheW91dEFsZ29yaXRobVJlc29sdmVyIiwxMDE3KSxJKDIyOSwxLHs2ODY6MSwyMjk6MX0sengpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMjI5KT9obih0aGlzLmIsdShlLDIyOSkuYik6ITF9LGwuc2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLnRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQmcodGhpcy5iKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgVHlwZTogIit0aGlzLmJ9LFAoUW8sIkxheW91dENhdGVnb3J5RGF0YSIsMjI5KSxJKDM0NCwxLHt9LHdtKSxQKFFvLCJMYXlvdXRDYXRlZ29yeURhdGEvQnVpbGRlciIsMzQ0KSxJKDg2NywxLHt9LGt1ZSk7dmFyIFhodDtQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UiLDg2NyksSSg4NjgsMSx7fSxKWXQpLFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeSIsODY4KSxJKDQ3OCwxLHs0Nzg6MX0sV0YpLFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeS9UcmlwbGUiLDQ3OCksSSg4NjksMSxENCx4WiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgVGF9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMCRUeXBlIiw4NjkpLEkoODcwLDEsU3ksa1opLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5jKHUoZSw4KSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMSRUeXBlIiw4NzApLEkoODc5LDEsRDQsRVopLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxlfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEwJFR5cGUiLDg3OSksSSg4ODAsMSxTeSxUWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB1KHUoZSwxMikpfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDExJFR5cGUiLDg4MCksSSg4ODEsMSxENCxDWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgUWl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTIkVHlwZSIsODgxKSxJKDg4MiwxLFN5LF9aKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBVTSh1KGUsNjgpKX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMyRUeXBlIiw4ODIpLEkoODgzLDEsRDQsU1opLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFzfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE0JFR5cGUiLDg4MyksSSg4ODQsMSxTeSxBWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gcyQodShlLDUzKSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTUkVHlwZSIsODg0KSxJKDg4NSwxLEQ0LExaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBMH0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNiRUeXBlIiw4ODUpLEkoODg2LDEsU3ksQWMpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIEUkKHUoZSw1MykpfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE3JFR5cGUiLDg4NiksSSg4ODcsMSxENCxNWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgTXB0fSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE4JFR5cGUiLDg4NyksSSg4ODgsMSxTeSxLVCksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gU0t0KHUoZSwyMDgpKX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxOSRUeXBlIiw4ODgpLEkoODcxLDEsRDQsdGMpLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IER1fSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDIkVHlwZSIsODcxKSxJKDg3MiwxLFN5LEtjKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeVIodShlLDc0KSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMyRUeXBlIiw4NzIpLEkoODczLDEsRDQsemkpLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE05fSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDQkVHlwZSIsODczKSxJKDg3NCwxLFN5LEZMKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd250KHUoZSwxNDIpKX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ1JFR5cGUiLDg3NCksSSg4NzUsMSxENCxEWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgd3h9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNiRUeXBlIiw4NzUpLEkoODc2LDEsU3ksT1opLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwdnQodShlLDExNikpfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDckVHlwZSIsODc2KSxJKDg3NywxLEQ0LFo1KSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXdX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ4JFR5cGUiLDg3NyksSSg4NzgsMSxTeSxtbSksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0ZSh1KGUsMzczKSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkOSRUeXBlIiw4NzgpO3ZhciBRaHQ9WWkoQkQsIklQcm9wZXJ0eSIpO0koMjMsMSx7MzU6MSw2ODY6MSwyMzoxLDE0NjoxfSxYZSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gUFhlKHRoaXMsdShlLDE0NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIzKT9obih0aGlzLmYsdShlLDIzKS5mKTpFdChlLDE0NikmJmhuKHRoaXMuZix1KGUsMTQ2KS50ZygpKX0sbC53Zz1mdW5jdGlvbigpe3ZhciBlO2lmKEV0KHRoaXMuYiw0KSl7aWYoZT1fM3QodGhpcy5iKSxlPT1udWxsKXRocm93IHJ0KG5ldyBGbyhHMWUrdGhpcy5mKyInLiBNYWtlIHN1cmUgaXQncyB0eXBlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgIisoTDAodU4pLHVOLmspK2E4dCkpO3JldHVybiBlfWVsc2UgcmV0dXJuIHRoaXMuYn0sbC5zZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwudGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBCZyh0aGlzLmYpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dCBPcHRpb246ICIrdGhpcy5mfSxQKFFvLCJMYXlvdXRPcHRpb25EYXRhIiwyMyksSSgyNCwxLHt9LFVlKSxQKFFvLCJMYXlvdXRPcHRpb25EYXRhL0J1aWxkZXIiLDI0KSxJKDE3NSwyMix7MzoxLDM1OjEsMjI6MSwxNzU6MX0sQU0pO3ZhciBJZCxYZyxKcyxxbiwkMixRZz1qcihRbywiTGF5b3V0T3B0aW9uRGF0YS9UYXJnZXQiLDE3NSxIcixtc24sTUplKSxPM2U7SSgyNzcsMjIsezM6MSwzNToxLDIyOjEsMjc3OjF9LF94KTt2YXIgQWEsRG8sY3MsajYsZ2MscTEsVDcsbVN0LE4zZT1qcihRbywiTGF5b3V0T3B0aW9uRGF0YS9UeXBlIiwyNzcsSHIsWGFuLElKZSksUDNlLEdTLHlTdDtJKDExMCwxLHsxMTA6MX0sQXgsaWgsbyQpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PW51bGx8fCFFdChlLDExMCk/ITE6KG49dShlLDExMCksUGModGhpcy5jLG4uYykmJlBjKHRoaXMuZCxuLmQpJiZQYyh0aGlzLmIsbi5iKSYmUGModGhpcy5hLG4uYSkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KGN0KG90KFhuLDEpLEllLDEsNSxbdGhpcy5jLHRoaXMuZCx0aGlzLmIsdGhpcy5hXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIlJlY3RbeD0iK3RoaXMuYysiLHk9Iit0aGlzLmQrIix3PSIrdGhpcy5iKyIsaD0iK3RoaXMuYSsiXSJ9LGwuYT0wLGwuYj0wLGwuYz0wLGwuZD0wLFAocUQsIkVsa1JlY3RhbmdsZSIsMTEwKSxJKDgsMSx7MzoxLDQ6MSw4OjEsNDE0OjF9LFRhLGJydCwkZSx5byksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gWWVlKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gbzgodGhpcy5hKStGZm4obzgodGhpcy5iKSl9LGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9MDtzPGUubGVuZ3RoJiZMcmUoKFJyKHMsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChzKSksWWZlKTspKytzO2ZvcihuPWUubGVuZ3RoO24+MCYmTHJlKChScihuLTEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuLTEpKSxYZmUpOyktLW47aWYocz49bil0aHJvdyBydChuZXcgUG4oIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhbnkgbnVtYmVycy4iKSk7aWYobz1weShlLnN1YnN0cihzLG4tcyksYCx8O3xccnwKYCksby5sZW5ndGghPTIpdGhyb3cgcnQobmV3IFBuKCJFeGFjdGx5IHR3byBudW1iZXJzIGFyZSBleHBlY3RlZCwgIitvLmxlbmd0aCsiIHdlcmUgZm91bmQuIikpO3RyeXt0aGlzLmE9bHkodXkob1swXSkpLHRoaXMuYj1seSh1eShvWzFdKSl9Y2F0Y2goaCl7dGhyb3cgaD1XaShoKSxFdChoLDEyNyk/KHI9aCxydChuZXcgUG4oUWZlK3IpKSk6cnQoaCl9fSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYSsiLCIrdGhpcy5iKyIpIn0sbC5hPTAsbC5iPTA7dmFyIFVzPVAocUQsIktWZWN0b3IiLDgpO0koNzQsNjgsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw2ODoxLDE1OjEsNzQ6MSw0MTQ6MX0sRHUseVIsZFd0KSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGV1bih0aGlzKX0sbC5KZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQ7cz1weShlLGAsfDt8XFwofFxcKXxcXFt8XFxdfFxce3xcXH18IHwJfApgKSxfaCh0aGlzKTt0cnl7Zm9yKHI9MCxoPTAsbz0wLGQ9MDtyPHMubGVuZ3RoOylzW3JdIT1udWxsJiZ1eShzW3JdKS5sZW5ndGg+MCYmKGglMj09MD9vPWx5KHNbcl0pOmQ9bHkoc1tyXSksaD4wJiZoJTIhPTAmJm5pKHRoaXMsbmV3ICRlKG8sZCkpLCsraCksKytyfWNhdGNoKHcpe3Rocm93IHc9V2kodyksRXQodywxMjcpPyhuPXcscnQobmV3IFBuKCJUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQgZm9yIHZlY3RvcnMuIituKSkpOnJ0KHcpfX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scjtmb3IoZT1uZXcgSWwoIigiKSxuPWVpKHRoaXMsMCk7bi5iIT1uLmQuYzspcj11KHRpKG4pLDgpLFZyKGUsci5hKyIsIityLmIpLG4uYiE9bi5kLmMmJihlLmErPSI7ICIpO3JldHVybihlLmErPSIpIixlKS5hfTt2YXIgeFN0PVAocUQsIktWZWN0b3JDaGFpbiIsNzQpO0koMjQ4LDIyLHszOjEsMzU6MSwyMjoxLDI0ODoxfSxlQyk7dmFyIFpodCxOVixQViwkTyx6TyxGVixrU3Q9anIoT2gsIkFsaWdubWVudCIsMjQ4LEhyLFlzbixESmUpLEYzZTtJKDk3OSwxLEloLHR0dCksbC5RZT1mdW5jdGlvbihlKXtXdWUoZSl9O3ZhciBFU3QsSmh0LEIzZSxUU3QsQ1N0LFIzZSxfU3QsajNlLCQzZSxTU3QsQVN0LHozZTtQKE9oLCJCb3hMYXlvdXRlck9wdGlvbnMiLDk3OSksSSg5ODAsMSx7fSxJWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBCWixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChPaCwiQm94TGF5b3V0ZXJPcHRpb25zL0JveEZhY3RvcnkiLDk4MCksSSgyOTEsMjIsezM6MSwzNToxLDIyOjEsMjkxOjF9LG5DKTt2YXIgcU8sdGZ0LEhPLEdPLFZPLGVmdCxuZnQ9anIoT2gsIkNvbnRlbnRBbGlnbm1lbnQiLDI5MSxIcixLc24sT0plKSxxM2U7SSg2ODQsMSxJaCx5cCksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsVTFlKSwiIiksIkxheW91dCBBbGdvcml0aG0iKSwiU2VsZWN0IGEgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobS4iKSwoamcoKSxUNykpLEFlKSx1bigoWGYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxXMWUpLCIiKSwiUmVzb2x2ZWQgTGF5b3V0IEFsZ29yaXRobSIpLCJNZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0uIikscTEpLG14biksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxna3QpLCIiKSwiQWxpZ25tZW50IiksIkFsaWdubWVudCBvZiB0aGUgc2VsZWN0ZWQgbm9kZSByZWxhdGl2ZSB0byBvdGhlciBub2RlczsgdGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgdXNlZCBhbGdvcml0aG0uIiksTFN0KSxjcyksa1N0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGI2KSwiIiksIkFzcGVjdCBSYXRpbyIpLCJUaGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8gb2YgdGhlIGRyYXdpbmcsIHRoYXQgaXMgdGhlIHF1b3RpZW50IG9mIHdpZHRoIGJ5IGhlaWdodC4iKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsYzh0KSwiIiksIkJlbmQgUG9pbnRzIiksIkEgZml4ZWQgbGlzdCBvZiBiZW5kIHBvaW50cyBmb3IgdGhlIGVkZ2UuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCByb3V0aW5nIGZvciBhbiBlZGdlLiBUaGUgdmVjdG9yIGNoYWluIG11c3QgaW5jbHVkZSB0aGUgc291cmNlIHBvaW50LCBhbnkgYmVuZCBwb2ludHMsIGFuZCB0aGUgdGFyZ2V0IHBvaW50LCBzbyBpdCBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHBvaW50cy4iKSxxMSkseFN0KSx1bihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGNIKSwiIiksIkNvbnRlbnQgQWxpZ25tZW50IiksIlNwZWNpZmllcyBob3cgdGhlIGNvbnRlbnQgb2YgYSBub2RlIGFyZSBhbGlnbmVkLiBFYWNoIG5vZGUgY2FuIGluZGl2aWR1YWxseSBjb250cm9sIHRoZSBhbGlnbm1lbnQgb2YgaXRzIGNvbnRlbnRzLiBJLmUuIGlmIGEgbm9kZSBzaG91bGQgYmUgYWxpZ25lZCB0b3AgbGVmdCBpbiBpdHMgcGFyZW50IG5vZGUsIHRoZSBwYXJlbnQgbm9kZSBzaG91bGQgc3BlY2lmeSB0aGF0IG9wdGlvbi4iKSxJU3QpLGo2KSxuZnQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsS0QpLCIiKSwiRGVidWcgTW9kZSIpLCJXaGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLiIpLChGbigpLCExKSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHZrdCksIiIpLFF4dCksIk92ZXJhbGwgZGlyZWN0aW9uIG9mIGVkZ2VzOiBob3Jpem9udGFsIChyaWdodCAvIGxlZnQpIG9yIHZlcnRpY2FsIChkb3duIC8gdXApLiIpLERTdCksY3MpLFdTKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFVEKSwiIiksIkVkZ2UgUm91dGluZyIpLCJXaGF0IGtpbmQgb2YgZWRnZSByb3V0aW5nIHN0eWxlIHNob3VsZCBiZSBhcHBsaWVkIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBBbGdvcml0aG1zIG1heSBhbHNvIHNldCB0aGlzIG9wdGlvbiB0byBzaW5nbGUgZWRnZXMgaW4gb3JkZXIgdG8gbWFyayB0aGVtIGFzIHNwbGluZXMuIFRoZSBiZW5kIHBvaW50IGxpc3Qgb2YgZWRnZXMgd2l0aCB0aGlzIG9wdGlvbiBzZXQgdG8gU1BMSU5FUyBtdXN0IGJlIGludGVycHJldGVkIGFzIGNvbnRyb2wgcG9pbnRzIGZvciBhIHBpZWNld2lzZSBjdWJpYyBzcGxpbmUuIiksUFN0KSxjcykscGZ0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGdIKSwiIiksIkV4cGFuZCBOb2RlcyIpLCJJZiBhY3RpdmUsIG5vZGVzIGFyZSBleHBhbmRlZCB0byBmaWxsIHRoZSBhcmVhIG9mIHRoZWlyIHBhcmVudC4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG9IKSwiIiksIkhpZXJhcmNoeSBIYW5kbGluZyIpLCJEZXRlcm1pbmVzIHdoZXRoZXIgc2VwYXJhdGUgbGF5b3V0IHJ1bnMgYXJlIHRyaWdnZXJlZCBmb3IgZGlmZmVyZW50IGNvbXBvdW5kIG5vZGVzIGluIGEgaGllcmFyY2hpY2FsIGdyYXBoLiBTZXR0aW5nIGEgbm9kZSdzIGhpZXJhcmNoeSBoYW5kbGluZyB0byBgSU5DTFVERV9DSElMRFJFTmAgd2lsbCBsYXkgb3V0IHRoYXQgbm9kZSBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyBpbiBhIHNpbmdsZSBsYXlvdXQgcnVuLCB1bnRpbCBhIGRlc2NlbmRhbnQgaXMgZW5jb3VudGVyZWQgd2hpY2ggaGFzIGl0cyBoaWVyYXJjaHkgaGFuZGxpbmcgc2V0IHRvIGBTRVBBUkFURV9DSElMRFJFTmAuIEluIGdlbmVyYWwsIGBTRVBBUkFURV9DSElMRFJFTmAgd2lsbCBlbnN1cmUgdGhhdCBhIG5ldyBsYXlvdXQgcnVuIGlzIHRyaWdnZXJlZCBmb3IgYSBub2RlIHdpdGggdGhhdCBzZXR0aW5nLiBJbmNsdWRpbmcgbXVsdGlwbGUgbGV2ZWxzIG9mIGhpZXJhcmNoeSBpbiBhIHNpbmdsZSBsYXlvdXQgcnVuIG1heSBhbGxvdyBjcm9zcy1oaWVyYXJjaGljYWwgZWRnZXMgdG8gYmUgbGFpZCBvdXQgcHJvcGVybHkuIElmIHRoZSByb290IG5vZGUgaXMgc2V0IHRvIGBJTkhFUklUYCAob3Igbm90IHNldCBhdCBhbGwpLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyBgU0VQQVJBVEVfQ0hJTERSRU5gLiIpLGpTdCksY3MpLFRBdCksamkocW4sY3Qob3QoUWcsMSksYWUsMTc1LDAsW0pzXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx3dyksIiIpLCJQYWRkaW5nIiksIlRoZSBwYWRkaW5nIHRvIGJlIGxlZnQgdG8gYSBwYXJlbnQgZWxlbWVudCdzIGJvcmRlciB3aGVuIHBsYWNpbmcgY2hpbGQgZWxlbWVudHMuIFRoaXMgY2FuIGFsc28gc2VydmUgYXMgYW4gb3V0cHV0IG9wdGlvbiBvZiBhIGxheW91dCBhbGdvcml0aG0gaWYgbm9kZSBzaXplIGNhbGN1bGF0aW9uIGlzIHNldHVwIGFwcHJvcHJpYXRlbHkuIiksWVN0KSxxMSksTTd0KSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbSnNdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCREKSwiIiksIkludGVyYWN0aXZlIiksIldoZXRoZXIgdGhlIGFsZ29yaXRobSBzaG91bGQgYmUgcnVuIGluIGludGVyYWN0aXZlIG1vZGUgZm9yIHRoZSBjb250ZW50IG9mIGEgcGFyZW50IG5vZGUuIFdoYXQgdGhpcyBtZWFucyBleGFjdGx5IGRlcGVuZHMgb24gaG93IHRoZSBzcGVjaWZpYyBhbGdvcml0aG0gaW50ZXJwcmV0cyB0aGlzIG9wdGlvbi4gVXN1YWxseSBpbiB0aGUgaW50ZXJhY3RpdmUgbW9kZSBhbGdvcml0aG1zIHRyeSB0byBtb2RpZnkgdGhlIGN1cnJlbnQgbGF5b3V0IGFzIGxpdHRsZSBhcyBwb3NzaWJsZS4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHBjdCksIiIpLCJpbnRlcmFjdGl2ZSBMYXlvdXQiKSwiV2hldGhlciB0aGUgZ3JhcGggc2hvdWxkIGJlIGNoYW5nZWFibGUgaW50ZXJhY3RpdmVseSBhbmQgYnkgc2V0dGluZyBjb25zdHJhaW50cyIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRl8pLCIiKSwiT21pdCBOb2RlIE1pY3JvIExheW91dCIpLCJOb2RlIG1pY3JvIGxheW91dCBjb21wcmlzZXMgdGhlIGNvbXB1dGF0aW9uIG9mIG5vZGUgZGltZW5zaW9ucyAoaWYgcmVxdWVzdGVkKSwgdGhlIHBsYWNlbWVudCBvZiBwb3J0cyBhbmQgdGhlaXIgbGFiZWxzLCBhbmQgdGhlIHBsYWNlbWVudCBvZiBub2RlIGxhYmVscy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnQgb2YgYW55IHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0gYW5kIHNob3VsZG4ndCBoYXZlIGFueSBuZWdhdGl2ZSBpbXBhY3Qgb24gdGhlIGxheW91dCBhbGdvcml0aG0ncyBwZXJmb3JtYW5jZSBpdHNlbGYuIFlldCwgaWYgYW55IHVuZm9yZXNlZW4gYmVoYXZpb3Igb2NjdXJzLCB0aGlzIG9wdGlvbiBhbGxvd3MgdG8gZGVhY3RpdmF0ZSB0aGUgbWljcm8gbGF5b3V0LiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTm90KSwiIiksIlBvcnQgQ29uc3RyYWludHMiKSwiRGVmaW5lcyBjb25zdHJhaW50cyBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcnRzIG9mIGEgbm9kZS4iKSx0QXQpLGNzKSxTQXQpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsdUgpLCIiKSwiUG9zaXRpb24iKSwiVGhlIHBvc2l0aW9uIG9mIGEgbm9kZSwgcG9ydCwgb3IgbGFiZWwuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCBwb3NpdGlvbi4iKSxxMSksVXMpLGppKEpzLGN0KG90KFFnLDEpLGFlLDE3NSwwLFskMixYZ10pKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsakQpLCIiKSwiUHJpb3JpdHkiKSwiRGVmaW5lcyB0aGUgcHJpb3JpdHkgb2YgYW4gb2JqZWN0OyBpdHMgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtIGFuZCB0aGUgY29udGV4dCB3aGVyZSBpdCBpcyB1c2VkLiIpLGdjKSxqYSksamkoSnMsY3Qob3QoUWcsMSksYWUsMTc1LDAsW0lkXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxIcSksIiIpLCJSYW5kb21pemF0aW9uIFNlZWQiKSwiU2VlZCB1c2VkIGZvciBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIHRvIGNvbnRyb2wgdGhlIGxheW91dCBhbGdvcml0aG0uIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgc2VlZCBzaGFsbCBiZSBkZXRlcm1pbmVkIHBzZXVkby1yYW5kb21seSAoZS5nLiBmcm9tIHRoZSBzeXN0ZW0gdGltZSkuIiksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLFBfKSwiIiksIlNlcGFyYXRlIENvbm5lY3RlZCBDb21wb25lbnRzIiksIldoZXRoZXIgZWFjaCBjb25uZWN0ZWQgY29tcG9uZW50IHNob3VsZCBiZSBwcm9jZXNzZWQgc2VwYXJhdGVseS4iKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsX2t0KSwiIiksIkp1bmN0aW9uIFBvaW50cyIpLCJUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCBhcyBvcHRpb24sIGJ1dCBhcyBvdXRwdXQgb2YgdGhlIGxheW91dCBhbGdvcml0aG1zLiBJdCBpcyBhdHRhY2hlZCB0byBlZGdlcyBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9pbnRzIHdoZXJlIGp1bmN0aW9uIHN5bWJvbHMgc2hvdWxkIGJlIGRyYXduIGluIG9yZGVyIHRvIHJlcHJlc2VudCBoeXBlcmVkZ2VzIHdpdGggb3J0aG9nb25hbCByb3V0aW5nLiBXaGV0aGVyIHN1Y2ggcG9pbnRzIGFyZSBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gbGF5b3V0IGFsZ29yaXRobSBhbmQgZWRnZSByb3V0aW5nIHN0eWxlLiBUaGUgcG9pbnRzIGFyZSBwdXQgaW50byB0aGUgdmVjdG9yIGNoYWluIHdpdGggbm8gc3BlY2lmaWMgb3JkZXIuIikselN0KSxxMSkseFN0KSx1bihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLExrdCksIiIpLCJDb21tZW50IEJveCIpLCJXaGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIGNvbW1lbnQgYm94IGluc3RlYWQgb2YgYSByZWd1bGFyIG5vZGUuIEluIHRoYXQgY2FzZSBpdHMgcGxhY2VtZW50IHNob3VsZCBiZSBzaW1pbGFyIHRvIGhvdyBsYWJlbHMgYXJlIGhhbmRsZWQuIEFueSBlZGdlcyBpbmNpZGVudCB0byBhIGNvbW1lbnQgYm94IHNwZWNpZnkgdG8gd2hpY2ggZ3JhcGggZWxlbWVudHMgdGhlIGNvbW1lbnQgaXMgcmVsYXRlZC4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE1rdCksIiIpLCJIeXBlcm5vZGUiKSwiV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBhIGh5cGVybm9kZS4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLFc1biksIiIpLCJMYWJlbCBNYW5hZ2VyIiksIkxhYmVsIG1hbmFnZXJzIGNhbiBzaG9ydGVuIGxhYmVscyB1cG9uIGEgbGF5b3V0IGFsZ29yaXRobSdzIHJlcXVlc3QuIikscTEpLFR4biksamkocW4sY3Qob3QoUWcsMSksYWUsMTc1LDAsW1hnXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxEa3QpLCIiKSwiTWFyZ2lucyIpLCJNYXJnaW5zIGRlZmluZSBhZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgYWN0dWFsIGJvdW5kcyBvZiBhIGdyYXBoIGVsZW1lbnQuIEZvciBpbnN0YW5jZSwgcG9ydHMgb3IgbGFiZWxzIGJlaW5nIHBsYWNlZCBvbiB0aGUgb3V0c2lkZSBvZiBhIG5vZGUncyBib3JkZXIgbWlnaHQgaW50cm9kdWNlIHN1Y2ggYSBtYXJnaW4uIFRoZSBtYXJnaW4gaXMgdXNlZCB0byBndWFyYW50ZWUgbm9uLW92ZXJsYXAgb2Ygb3RoZXIgZ3JhcGggZWxlbWVudHMgd2l0aCB0aG9zZSBwb3J0cyBvciBsYWJlbHMuIikscVN0KSxxMSksTDd0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGZrdCksIiIpLCJObyBMYXlvdXQiKSwiTm8gbGF5b3V0IGlzIGRvbmUgZm9yIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQuIFRoaXMgaXMgdXNlZCB0byBtYXJrIHBhcnRzIG9mIGEgZGlhZ3JhbSB0byBhdm9pZCB0aGVpciBpbmNsdXNpb24gaW4gdGhlIGxheW91dCBncmFwaCwgb3IgdG8gbWFyayBwYXJ0cyBvZiB0aGUgbGF5b3V0IGdyYXBoIHRvIHByZXZlbnQgbGF5b3V0IGVuZ2luZXMgZnJvbSBwcm9jZXNzaW5nIHRoZW0uIElmIHlvdSB3aXNoIHRvIGV4Y2x1ZGUgdGhlIGNvbnRlbnRzIG9mIGEgY29tcG91bmQgbm9kZSBmcm9tIGF1dG9tYXRpYyBsYXlvdXQsIHdoaWxlIHRoZSBub2RlIGl0c2VsZiBpcyBzdGlsbCBjb25zaWRlcmVkIG9uIGl0cyBvd24gbGF5ZXIsIHVzZSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIGZvciB0aGF0IG5vZGUuIiksITEpLEFhKSxCcyksamkoSnMsY3Qob3QoUWcsMSksYWUsMTc1LDAsW0lkLCQyLFhnXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLMWUpLCIiKSwiU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gcmVjdXJzaXZlIGxheW91dC4gSXQgY2F1c2VzIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUncyBzaXplIHRvIGJlIGFkanVzdGVkLCBhbmQgaXRzIHBvcnRzIGFuZCBsYWJlbHMgdG8gYmUgc2l6ZWQgYW5kIHBsYWNlZCBhY2NvcmRpbmdseSBhZnRlciB0aGUgbGF5b3V0IG9mIHRoYXQgbm9kZSBoYXMgYmVlbiBkZXRlcm1pbmVkIChhbmQgYmVmb3JlIHRoZSBub2RlIGl0c2VsZiBhbmQgaXRzIHNpYmxpbmdzIGFyZSBhcnJhbmdlZCkuIFRoZSBzY2FsaW5nIGlzIG5vdCByZXZlcnRlZCBhZnRlcndhcmRzLCBzbyB0aGUgcmVzdWx0aW5nIGxheW91dCBncmFwaCBjb250YWlucyB0aGUgYWRqdXN0ZWQgc2l6ZSBhbmQgcG9zaXRpb24gZGF0YS4gVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaWYgJ0xheW91dCBIaWVyYXJjaHknIGlzIHNldC4iKSwxKSxEbyksY2EpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWTFlKSwiIiksIkFuaW1hdGUiKSwiV2hldGhlciB0aGUgc2hpZnQgZnJvbSB0aGUgb2xkIGxheW91dCB0byB0aGUgbmV3IGNvbXB1dGVkIGxheW91dCBzaGFsbCBiZSBhbmltYXRlZC4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFgxZSksIiIpLCJBbmltYXRpb24gVGltZSBGYWN0b3IiKSwiRmFjdG9yIGZvciBjb21wdXRhdGlvbiBvZiBhbmltYXRpb24gdGltZS4gVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBsb25nZXIgdGhlIGFuaW1hdGlvbiB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgMCwgdGhlIHJlc3VsdGluZyB0aW1lIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWluaW11bSBkZWZpbmVkIGJ5ICdNaW5pbWFsIEFuaW1hdGlvbiBUaW1lJy4iKSxkZSgxMDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUTFlKSwiIiksIkxheW91dCBBbmNlc3RvcnMiKSwiV2hldGhlciB0aGUgaGllcmFyY2h5IGxldmVscyBvbiB0aGUgcGF0aCBmcm9tIHRoZSBzZWxlY3RlZCBlbGVtZW50IHRvIHRoZSByb290IG9mIHRoZSBkaWFncmFtIHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoZSBsYXlvdXQgcHJvY2Vzcy4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFoxZSksIiIpLCJNYXhpbWFsIEFuaW1hdGlvbiBUaW1lIiksIlRoZSBtYXhpbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4iKSxkZSg0ZTMpKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSjFlKSwiIiksIk1pbmltYWwgQW5pbWF0aW9uIFRpbWUiKSwiVGhlIG1pbmltYWwgdGltZSBmb3IgYW5pbWF0aW9ucywgaW4gbWlsbGlzZWNvbmRzLiIpLGRlKDQwMCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0ZGUpLCIiKSwiUHJvZ3Jlc3MgQmFyIiksIldoZXRoZXIgYSBwcm9ncmVzcyBiYXIgc2hhbGwgYmUgZGlzcGxheWVkIGR1cmluZyBsYXlvdXQgY29tcHV0YXRpb25zLiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZWRlKSwiIiksIlZhbGlkYXRlIEdyYXBoIiksIldoZXRoZXIgdGhlIGdyYXBoIHNoYWxsIGJlIHZhbGlkYXRlZCBiZWZvcmUgYW55IGxheW91dCBhbGdvcml0aG0gaXMgYXBwbGllZC4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGVycm9yIGlzIGZvdW5kLCB0aGUgbGF5b3V0IHByb2Nlc3MgaXMgYWJvcnRlZCBhbmQgYSBtZXNzYWdlIGlzIHNob3duIHRvIHRoZSB1c2VyLiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbmRlKSwiIiksIlZhbGlkYXRlIE9wdGlvbnMiKSwiV2hldGhlciBsYXlvdXQgb3B0aW9ucyBzaGFsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIGFueSBsYXlvdXQgYWxnb3JpdGhtIGlzIGFwcGxpZWQuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBmb3VuZCwgdGhlIGxheW91dCBwcm9jZXNzIGlzIGFib3J0ZWQgYW5kIGEgbWVzc2FnZSBpcyBzaG93biB0byB0aGUgdXNlci4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHJkZSksIiIpLCJab29tIHRvIEZpdCIpLCJXaGV0aGVyIHRoZSB6b29tIGxldmVsIHNoYWxsIGJlIHNldCB0byB2aWV3IHRoZSB3aG9sZSBkaWFncmFtIGFmdGVyIGxheW91dC4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG84dCksImJveCIpLCJCb3ggTGF5b3V0IE1vZGUiKSwiQ29uZmlndXJlcyB0aGUgcGFja2luZyBtb2RlIHVzZWQgYnkgdGhlIHtAbGluayBCb3hMYXlvdXRQcm92aWRlcn0uIElmIFNJTVBMRSBpcyBub3QgcmVxdWlyZWQgKG5laXRoZXIgcHJpb3JpdGllcyBhcmUgdXNlZCBub3IgdGhlIGludGVyYWN0aXZlIG1vZGUpLCBHUk9VUF9ERUMgY2FuIGltcHJvdmUgdGhlIHBhY2tpbmcgYW5kIGRlY3JlYXNlIHRoZSBhcmVhLiBHUk9VUF9NSVhFRCBhbmQgR1JPVVBfSU5DIG1heSwgaW4gdmVyeSBzcGVjaWZpYyBzY2VuYXJpb3MsIHdvcmsgYmV0dGVyLiIpLE1TdCksY3MpLE9BdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0a3QpLEYxKSwiQ29tbWVudCBDb21tZW50IFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIGNvbW1lbnQgYm94IGFuZCBvdGhlciBjb21tZW50IGJveGVzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBub2RlLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGNvbW1lbnQgYm94ZXMgb2YgZGlmZmVyZW50IG5vZGVzIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG5vZGUtbm9kZSBzcGFjaW5nLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZWt0KSxGMSksIkNvbW1lbnQgTm9kZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBub2RlIGFuZCBpdHMgY29ubmVjdGVkIGNvbW1lbnQgYm94ZXMuIFRoZSBzcGFjZSBsZWZ0IGJldHdlZW4gYSBub2RlIGFuZCB0aGUgY29tbWVudHMgb2YgYW5vdGhlciBub2RlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG5vZGUtbm9kZSBzcGFjaW5nLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQW90KSxGMSksIkNvbXBvbmVudHMgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIHBhaXJzIG9mIGNvbm5lY3RlZCBjb21wb25lbnRzLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IGlmICdzZXBhcmF0ZUNvbm5lY3RlZENvbXBvbmVudHMnIGlzIGFjdGl2YXRlZC4iKSwyMCksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG5rdCksRjEpLCJFZGdlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhbnkgdHdvIGVkZ2VzLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyBjYW4gc29tZXdoYXQgZWFzaWx5IGJlIHNhdGlzZmllZCBmb3IgdGhlIHNlZ21lbnRzIG9mIG9ydGhvZ29uYWxseSBkcmF3biBlZGdlcywgaXQgaXMgaGFyZGVyIGZvciBnZW5lcmFsIHBvbHlsaW5lcyBvciBzcGxpbmVzLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsT290KSxGMSksIkVkZ2UgTGFiZWwgU3BhY2luZyIpLCJUaGUgbWluaW1hbCBkaXN0YW5jZSB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIGxhYmVsIGFuZCB0aGUgZWRnZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ2VkZ2VsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMiksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHJrdCksRjEpLCJFZGdlIE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcy4iKSwxMCksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGlrdCksRjEpLCJMYWJlbCBTcGFjaW5nIiksIkRldGVybWluZXMgdGhlIGFtb3VudCBvZiBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gdHdvIGxhYmVscyBvZiB0aGUgc2FtZSBncmFwaCBlbGVtZW50LiIpLDApLERvKSxjYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxva3QpLEYxKSwiTGFiZWwgTm9kZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbGFiZWxzIGFuZCB0aGUgYm9yZGVyIG9mIG5vZGUgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdub2RlbGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDUpLERvKSxjYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxza3QpLEYxKSwiSG9yaXpvbnRhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQiKSwiSG9yaXpvbnRhbCBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIHBvcnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAncG9ydGxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSwxKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYWt0KSxGMSksIlZlcnRpY2FsIHNwYWNpbmcgYmV0d2VlbiBMYWJlbCBhbmQgUG9ydCIpLCJWZXJ0aWNhbCBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIHBvcnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAncG9ydGxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSwxKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsa3kpLEYxKSwiTm9kZSBTcGFjaW5nIiksIlRoZSBtaW5pbWFsIGRpc3RhbmNlIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGVhY2ggdHdvIG5vZGVzLiIpLDIwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsY2t0KSxGMSksIk5vZGUgU2VsZiBMb29wIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIG5vZGUgYW5kIGl0cyBzZWxmIGxvb3BzLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdWt0KSxGMSksIlBvcnQgU3BhY2luZyIpLCJTcGFjaW5nIGJldHdlZW4gcGFpcnMgb2YgcG9ydHMgb2YgdGhlIHNhbWUgbm9kZS4iKSwxMCksRG8pLGNhKSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbSnNdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGxrdCksRjEpLCJJbmRpdmlkdWFsIFNwYWNpbmciKSwiQWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzcGFjaW5nIHZhbHVlcyBmb3IgZ3JhcGggZWxlbWVudHMgdGhhdCBzaGFsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgZWxlbWVudCdzIHBhcmVudC4iKSxxMSksRTRlKSxqaShKcyxjdChvdChRZywxKSxhZSwxNzUsMCxbSWQsJDIsWGddKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE9rdCksRjEpLCJBZGRpdGlvbmFsIFBvcnQgU3BhY2UiKSwiQWRkaXRpb25hbCBzcGFjZSBhcm91bmQgdGhlIHNldHMgb2YgcG9ydHMgb24gZWFjaCBub2RlIHNpZGUuIEZvciBlYWNoIHNpZGUgb2YgYSBub2RlLCB0aGlzIG9wdGlvbiBjYW4gcmVzZXJ2ZSBhZGRpdGlvbmFsIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvcnRzIG9uIGVhY2ggc2lkZS4gRm9yIGV4YW1wbGUsIGEgdG9wIHNwYWNpbmcgb2YgMjAgbWFrZXMgc3VyZSB0aGF0IHRoZSBmaXJzdCBwb3J0IG9uIHRoZSB3ZXN0ZXJuIGFuZCBlYXN0ZXJuIHNpZGUgaXMgMjAgdW5pdHMgYXdheSBmcm9tIHRoZSBub3J0aGVybiBib3JkZXIuIiksbEF0KSxxMSksTDd0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGdjdCksYWRlKSwiTGF5b3V0IFBhcnRpdGlvbiIpLCJQYXJ0aXRpb24gdG8gd2hpY2ggdGhlIG5vZGUgYmVsb25ncy4gVGhpcyByZXF1aXJlcyBMYXlvdXQgUGFydGl0aW9uaW5nIHRvIGJlIGFjdGl2ZS4gTm9kZXMgd2l0aCBsb3dlciBwYXJ0aXRpb24gSURzIHdpbGwgYXBwZWFyIHRvIHRoZSBsZWZ0IG9mIG5vZGVzIHdpdGggaGlnaGVyIHBhcnRpdGlvbiBJRHMgKGFzc3VtaW5nIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uKS4iKSxnYyksamEpLGppKHFuLGN0KG90KFFnLDEpLGFlLDE3NSwwLFtKc10pKSkpKSxhYShlLGdjdCxkY3QsWDNlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZGN0KSxhZGUpLCJMYXlvdXQgUGFydGl0aW9uaW5nIiksIldoZXRoZXIgdG8gYWN0aXZhdGUgcGFydGl0aW9uZWQgbGF5b3V0LiBUaGlzIHdpbGwgYWxsb3cgdG8gZ3JvdXAgbm9kZXMgdGhyb3VnaCB0aGUgTGF5b3V0IFBhcnRpdGlvbiBvcHRpb24uIGEgcGFpciBvZiBub2RlcyB3aXRoIGRpZmZlcmVudCBwYXJ0aXRpb24gaW5kaWNlcyBpcyB0aGVuIHBsYWNlZCBzdWNoIHRoYXQgdGhlIG5vZGUgd2l0aCBsb3dlciBpbmRleCBpcyBwbGFjZWQgdG8gdGhlIGxlZnQgb2YgdGhlIG90aGVyIG5vZGUgKHdpdGggbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uKS4gRGVwZW5kaW5nIG9uIHRoZSBsYXlvdXQgYWxnb3JpdGhtLCB0aGlzIG1heSBvbmx5IGJlIGd1YXJhbnRlZWQgdG8gd29yayBpZiBhbGwgbm9kZXMgaGF2ZSBhIGxheW91dCBwYXJ0aXRpb24gY29uZmlndXJlZCwgb3IgYXQgbGVhc3QgaWYgZWRnZXMgdGhhdCBjcm9zcyBwYXJ0aXRpb25zIGFyZSBub3QgcGFydCBvZiBhIHBhcnRpdGlvbi1jcm9zc2luZyBjeWNsZS4iKSxYU3QpLEFhKSxCcyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx3a3QpLG9kZSksIk5vZGUgTGFiZWwgUGFkZGluZyIpLCJEZWZpbmUgcGFkZGluZyBmb3Igbm9kZSBsYWJlbHMgdGhhdCBhcmUgcGxhY2VkIGluc2lkZSBvZiBhIG5vZGUuIiksR1N0KSxxMSksTTd0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFJFKSxvZGUpLCJOb2RlIExhYmVsIFBsYWNlbWVudCIpLCJIaW50cyBmb3Igd2hlcmUgbm9kZSBsYWJlbHMgYXJlIHRvIGJlIHBsYWNlZDsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLFZTdCksajYpLGxvKSxqaShKcyxjdChvdChRZywxKSxhZSwxNzUsMCxbWGddKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHhrdCksYkgpLCJQb3J0IEFsaWdubWVudCIpLCJEZWZpbmVzIHRoZSBkZWZhdWx0IHBvcnQgZGlzdHJpYnV0aW9uIGZvciBhIG5vZGUuIE1heSBiZSBvdmVycmlkZGVuIGZvciBlYWNoIHNpZGUgaW5kaXZpZHVhbGx5LiIpLFpTdCksY3MpLFFTKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGtrdCksYkgpLCJQb3J0IEFsaWdubWVudCAoTm9ydGgpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBub3J0aGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLGNzKSxRUyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxFa3QpLGJIKSwiUG9ydCBBbGlnbm1lbnQgKFNvdXRoKSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgc291dGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxjcyksUVMpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsVGt0KSxiSCksIlBvcnQgQWxpZ25tZW50IChXZXN0KSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgd2VzdGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLGNzKSxRUyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxDa3QpLGJIKSwiUG9ydCBBbGlnbm1lbnQgKEVhc3QpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBlYXN0ZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksY3MpLFFTKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEw0KSxOY3QpLCJOb2RlIFNpemUgQ29uc3RyYWludHMiKSwiV2hhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgYSBub2RlJ3Mgc2l6ZS4gRW1wdHkgc2l6ZSBjb25zdHJhaW50cyBzcGVjaWZ5IHRoYXQgYSBub2RlJ3Mgc2l6ZSBpcyBhbHJlYWR5IGZpeGVkIGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQuIiksVVN0KSxqNiksdEEpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdjYpLE5jdCksIk5vZGUgU2l6ZSBPcHRpb25zIiksIk9wdGlvbnMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc2l6ZSBjb25zdHJhaW50cyBzZXQgb24gYSBub2RlLiBFYWNoIG1lbWJlciBvZiB0aGUgc2V0IHNwZWNpZmllcyBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBzaXplcy4gVGhlIGVtcHR5IHNldCBjb3JyZXNwb25kcyB0byBubyBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuIiksS1N0KSxqNiksTEF0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHc2KSxOY3QpLCJOb2RlIFNpemUgTWluaW11bSIpLCJUaGUgbWluaW1hbCBzaXplIHRvIHdoaWNoIGEgbm9kZSBjYW4gYmUgcmVkdWNlZC4iKSxXU3QpLHExKSxVcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxmY3QpLE5jdCksIkZpeGVkIEdyYXBoIFNpemUiKSwiQnkgZGVmYXVsdCwgdGhlIGZpeGVkIGxheW91dCBwcm92aWRlciB3aWxsIGVubGFyZ2UgYSBncmFwaCB1bnRpbCBpdCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBpdHMgY2hpbGRyZW4uIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgaXQgd29uJ3QgZG8gc28uIiksITEpLEFhKSxCcyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxTa3QpLGhjdCksIkVkZ2UgTGFiZWwgUGxhY2VtZW50IiksIkdpdmVzIGEgaGludCBvbiB3aGVyZSB0byBwdXQgZWRnZSBsYWJlbHMuIiksT1N0KSxjcyksZkF0KSx1bihYZykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEdxKSxoY3QpLCJJbmxpbmUgRWRnZSBMYWJlbHMiKSwiSWYgdHJ1ZSwgYW4gZWRnZSBsYWJlbCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gaXRzIGVkZ2UuIE1heSBvbmx5IGFwcGx5IHRvIGNlbnRlciBlZGdlIGxhYmVscy4gVGhpcyBraW5kIG9mIGxhYmVsIHBsYWNlbWVudCBpcyBvbmx5IGFkdmlzYWJsZSBpZiB0aGUgbGFiZWwncyByZW5kZXJpbmcgaXMgc3VjaCB0aGF0IGl0IGlzIG5vdCBjcm9zc2VkIGJ5IGl0cyBlZGdlIGFuZCB0aHVzIHN0YXlzIGxlZ2libGUuIiksITEpLEFhKSxCcyksdW4oWGcpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxLNW4pLCJmb250IiksIkZvbnQgTmFtZSIpLCJGb250IG5hbWUgdXNlZCBmb3IgYSBsYWJlbC4iKSxUNyksQWUpLHVuKFhnKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsaWRlKSwiZm9udCIpLCJGb250IFNpemUiKSwiRm9udCBzaXplIHVzZWQgZm9yIGEgbGFiZWwuIiksZ2MpLGphKSx1bihYZykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLElrdCksUGN0KSwiUG9ydCBBbmNob3IgT2Zmc2V0IiksIlRoZSBvZmZzZXQgdG8gdGhlIHBvcnQgcG9zaXRpb24gd2hlcmUgY29ubmVjdGlvbnMgc2hhbGwgYmUgYXR0YWNoZWQuIikscTEpLFVzKSx1bigkMikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLEFrdCksUGN0KSwiUG9ydCBJbmRleCIpLCJUaGUgaW5kZXggb2YgYSBwb3J0IGluIHRoZSBmaXhlZCBvcmRlciBhcm91bmQgYSBub2RlLiBUaGUgb3JkZXIgaXMgYXNzdW1lZCBhcyBjbG9ja3dpc2UsIHN0YXJ0aW5nIHdpdGggdGhlIGxlZnRtb3N0IHBvcnQgb24gdGhlIHRvcCBzaWRlLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX09SREVSIGFuZCBubyBzcGVjaWZpYyBwb3NpdGlvbnMgYXJlIGdpdmVuIGZvciB0aGUgcG9ydHMuIEFkZGl0aW9uYWxseSwgdGhlIG9wdGlvbiAnUG9ydCBTaWRlJyBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBjYXNlLiIpLGdjKSxqYSksdW4oJDIpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxka3QpLFBjdCksIlBvcnQgU2lkZSIpLCJUaGUgc2lkZSBvZiBhIG5vZGUgb24gd2hpY2ggYSBwb3J0IGlzIHNpdHVhdGVkLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4iKSxyQXQpLGNzKSxYYSksdW4oJDIpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxoa3QpLFBjdCksIlBvcnQgQm9yZGVyIE9mZnNldCIpLCJUaGUgb2Zmc2V0IG9mIHBvcnRzIG9uIHRoZSBub2RlIGJvcmRlci4gV2l0aCBhIHBvc2l0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBub2RlLCB3aGlsZSB3aXRoIGEgbmVnYXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIHRvd2FyZHMgdGhlIGluc2lkZS4gQW4gb2Zmc2V0IG9mIDAgbWVhbnMgdGhhdCB0aGUgcG9ydCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIG5vZGUgYm9yZGVyLCBpLmUuIGlmIHRoZSBwb3J0IHNpZGUgaXMgbm9ydGgsIHRoZSBwb3J0J3Mgc291dGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3Mgbm9ydGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIGVhc3QsIHRoZSBwb3J0J3Mgd2VzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBlYXN0IGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBzb3V0aCwgdGhlIHBvcnQncyBub3J0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHNvdXRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyB3ZXN0LCB0aGUgcG9ydCdzIGVhc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyB3ZXN0IGJvcmRlci4iKSxEbyksY2EpLHVuKCQyKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsakUpLHU4dCksIlBvcnQgTGFiZWwgUGxhY2VtZW50IiksIkRlY2lkZXMgb24gYSBwbGFjZW1lbnQgbWV0aG9kIGZvciBwb3J0IGxhYmVsczsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLGVBdCksajYpLEdWKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG1rdCksdTh0KSwiUG9ydCBMYWJlbHMgTmV4dCB0byBQb3J0IiksIlVzZSAncG9ydExhYmVscy5wbGFjZW1lbnQnOiBORVhUX1RPX1BPUlRfT0ZfUE9TU0lCTEUuIiksITEpLEFhKSxCcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx5a3QpLHU4dCksIlRyZWF0IFBvcnQgTGFiZWxzIGFzIEdyb3VwIiksIklmIHRoaXMgb3B0aW9uIGlzIHRydWUgKGRlZmF1bHQpLCB0aGUgbGFiZWxzIG9mIGEgcG9ydCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBncm91cCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRlcmluZyB0aGVtIG5leHQgdG8gdGhlaXIgcG9ydC4gSWYgdGhpcyBvcHRpb24gaXMgZmFsc2UsIG9ubHkgdGhlIGZpcnN0IGxhYmVsIHdpbGwgYmUgY2VudGVyZWQgbmV4dCB0byB0aGUgcG9ydCwgd2l0aCB0aGUgb3RoZXJzIGJlaW5nIHBsYWNlZCBiZWxvdy4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gbGFiZWxzIG9mIGVhc3Rlcm4gYW5kIHdlc3Rlcm4gcG9ydHMgYW5kIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgbGFiZWxzIGFyZSBub3QgcGxhY2VkIG5leHQgdG8gdGhlaXIgcG9ydC4iKSwhMCksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHBrdCksY2RlKSwiQWN0aXZhdGUgSW5zaWRlIFNlbGYgTG9vcHMiKSwiV2hldGhlciB0aGlzIG5vZGUgYWxsb3dzIHRvIHJvdXRlIHNlbGYgbG9vcHMgaW5zaWRlIG9mIGl0IGluc3RlYWQgb2YgYXJvdW5kIGl0LiBJZiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIG1ha2UgdGhlIG5vZGUgYSBjb21wb3VuZCBub2RlIGlmIGl0IGlzbid0IGFscmVhZHksIGFuZCB3aWxsIHJlcXVpcmUgdGhlIGxheW91dCBhbGdvcml0aG0gdG8gc3VwcG9ydCBjb21wb3VuZCBub2RlcyB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cy4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGJrdCksY2RlKSwiSW5zaWRlIFNlbGYgTG9vcCIpLCJXaGV0aGVyIGEgc2VsZiBsb29wIHNob3VsZCBiZSByb3V0ZWQgaW5zaWRlIGEgbm9kZSBpbnN0ZWFkIG9mIGFyb3VuZCB0aGF0IG5vZGUuIiksITEpLEFhKSxCcyksdW4oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxMb3QpLCJlZGdlIiksIkVkZ2UgVGhpY2tuZXNzIiksIlRoZSB0aGlja25lc3Mgb2YgYW4gZWRnZS4gVGhpcyBpcyBhIGhpbnQgb24gdGhlIGxpbmUgd2lkdGggdXNlZCB0byBkcmF3IGFuIGVkZ2UsIHBvc3NpYmx5IHJlcXVpcmluZyBtb3JlIHNwYWNlIHRvIGJlIHJlc2VydmVkIGZvciBpdC4iKSwxKSxEbyksY2EpLHVuKElkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsc2RlKSwiZWRnZSIpLCJFZGdlIFR5cGUiKSwiVGhlIHR5cGUgb2YgYW4gZWRnZS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIFVNTCBjbGFzcyBkaWFncmFtcywgd2hlcmUgYXNzb2NpYXRpb25zIG11c3QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIGdlbmVyYWxpemF0aW9ucy4iKSxCU3QpLGNzKSx3QXQpLHVuKElkKSkpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sVm4pLCJMYXllcmVkIiksJ1RoZSBsYXllci1iYXNlZCBtZXRob2Qgd2FzIGludHJvZHVjZWQgYnkgU3VnaXlhbWEsIFRhZ2F3YSBhbmQgVG9kYSBpbiAxOTgxLiBJdCBlbXBoYXNpemVzIHRoZSBkaXJlY3Rpb24gb2YgZWRnZXMgYnkgcG9pbnRpbmcgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIHRoZSBzYW1lIGRpcmVjdGlvbi4gVGhlIG5vZGVzIGFyZSBhcnJhbmdlZCBpbiBsYXllcnMsIHdoaWNoIGFyZSBzb21ldGltZXMgY2FsbGVkICJoaWVyYXJjaGllcyIsIGFuZCB0aGVuIHJlb3JkZXJlZCBzdWNoIHRoYXQgdGhlIG51bWJlciBvZiBlZGdlIGNyb3NzaW5ncyBpcyBtaW5pbWl6ZWQuIEFmdGVyd2FyZHMsIGNvbmNyZXRlIGNvb3JkaW5hdGVzIGFyZSBjb21wdXRlZCBmb3IgdGhlIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzLicpKSksRzkoZSxuZXcgengoUjkoSmsoWmsobmV3IHdtLCJvcmcuZWNsaXBzZS5lbGsub3J0aG9nb25hbCIpLCJPcnRob2dvbmFsIiksYE9ydGhvZ29uYWwgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGUgInRvcG9sb2d5LXNoYXBlLW1ldHJpY3MiIGFwcHJvYWNoIGJ5IEJhdGluaSwgTmFyZGVsbGkgYW5kIFRhbWFzc2lhICc4Ni4gVGhlIGZpcnN0IHBoYXNlIGRldGVybWluZXMgdGhlIHRvcG9sb2d5IG9mIHRoZSBkcmF3aW5nIGJ5IGFwcGx5aW5nIGEgcGxhbmFyaXphdGlvbiB0ZWNobmlxdWUsIHdoaWNoIHJlc3VsdHMgaW4gYSBwbGFuYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiBUaGUgb3J0aG9nb25hbCBzaGFwZSBpcyBjb21wdXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlLCB3aGljaCBhaW1zIGF0IG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBlZGdlIGJlbmRzLCBhbmQgaXMgY2FsbGVkIG9ydGhvZ29uYWxpemF0aW9uLiBUaGUgdGhpcmQgcGhhc2UgbGVhZHMgdG8gY29uY3JldGUgY29vcmRpbmF0ZXMgZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzIGJ5IGFwcGx5aW5nIGEgY29tcGFjdGlvbiBtZXRob2QsIHRodXMgZGVmaW5pbmcgdGhlIG1ldHJpY3MuYCkpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20scWwpLCJGb3JjZSIpLCJMYXlvdXQgYWxnb3JpdGhtcyB0aGF0IGZvbGxvdyBwaHlzaWNhbCBhbmFsb2dpZXMgYnkgc2ltdWxhdGluZyBhIHN5c3RlbSBvZiBhdHRyYWN0aXZlIGFuZCByZXB1bHNpdmUgZm9yY2VzLiBUaGUgZmlyc3Qgc3VjY2Vzc2Z1bCBtZXRob2Qgb2YgdGhpcyBraW5kIHdhcyBwcm9wb3NlZCBieSBFYWRlcyBpbiAxOTg0LiIpKSksRzkoZSxuZXcgengoUjkoSmsoWmsobmV3IHdtLCJvcmcuZWNsaXBzZS5lbGsuY2lyY2xlIiksIkNpcmNsZSIpLCJDaXJjdWxhciBsYXlvdXQgYWxnb3JpdGhtcyBlbXBoYXNpemUgY3ljbGVzIG9yIGJpY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgYSBncmFwaCBieSBhcnJhbmdpbmcgdGhlbSBpbiBjaXJjbGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiBhIGRyYXdpbmcgaXMgZGVzaXJlZCB3aGVyZSBzdWNoIGNvbXBvbmVudHMgYXJlIGNsZWFybHkgZ3JvdXBlZCwgb3Igd2hlcmUgY3ljbGVzIGFyZSBzaG93biBhcyBwcm9taW5lbnQgT1BUSU9OUyBvZiB0aGUgZ3JhcGguIikpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sRDFlKSwiVHJlZSIpLCJTcGVjaWFsaXplZCBsYXlvdXQgbWV0aG9kcyBmb3IgdHJlZXMsIGkuZS4gYWN5Y2xpYyBncmFwaHMuIFRoZSByZWd1bGFyIHN0cnVjdHVyZSBvZiBncmFwaHMgdGhhdCBoYXZlIG5vIHVuZGlyZWN0ZWQgY3ljbGVzIGNhbiBiZSBlbXBoYXNpemVkIHVzaW5nIGFuIGFsZ29yaXRobSBvZiB0aGlzIHR5cGUuIikpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sIm9yZy5lY2xpcHNlLmVsay5wbGFuYXIiKSwiUGxhbmFyIiksIkFsZ29yaXRobXMgdGhhdCByZXF1aXJlIGEgcGxhbmFyIG9yIHVwd2FyZCBwbGFuYXIgZ3JhcGguIE1vc3Qgb2YgdGhlc2UgYWxnb3JpdGhtcyBhcmUgdGhlb3JldGljYWxseSBpbnRlcmVzdGluZywgYnV0IG5vdCBwcmFjdGljYWxseSB1c2FibGUuIikpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sVGQpLCJSYWRpYWwiKSwiUmFkaWFsIGxheW91dCBhbGdvcml0aG1zIHVzdWFsbHkgcG9zaXRpb24gdGhlIG5vZGVzIG9mIHRoZSBncmFwaCBvbiBjb25jZW50cmljIGNpcmNsZXMuIikpKSxEdWUoKG5ldyAkQixlKSksV3VlKChuZXcgdHR0LGUpKSxjdWUoKG5ldyB6QixlKSl9O3ZhciBWUyxIM2UsTFN0LCQ2LEczZSxWM2UsTVN0LFUzZSxCVixJU3QsVU8sancsRFN0LHJmdCxpZnQsT1N0LE5TdCxQU3QsRlN0LEJTdCxSU3QscjUsalN0LFczZSxXTyxzZnQsUlYsJFN0LGk1LHpTdCxLTyxxU3QsSFN0LEdTdCxzNSxWU3QsejIsVVN0LGpWLGE1LFdTdCx2YixLU3QsJFYsWU8scTIsWVN0LEszZSxYU3QsWTNlLFgzZSxRU3QsWlN0LGFmdCxvZnQsY2Z0LHVmdCxKU3QsaGwsVVMsdEF0LGxmdCxoZnQsS3ksZUF0LG5BdCxvNSxyQXQsejYselYsZmZ0LEM3LFEzZSxkZnQsWjNlLEozZSxpQXQsdDRlLHNBdCxlNGUscTYsYUF0LHFWLG9BdCxjQXQsSDIsbjRlLHVBdCxsQXQsaEF0O1AoT2gsIkNvcmVPcHRpb25zIiw2ODQpLEkoMTAzLDIyLHszOjEsMzU6MSwyMjoxLDEwMzoxfSxMTSk7dmFyIFEwLGpoLGtmLGMwLFowLFdTPWpyKE9oLFF4dCwxMDMsSHIsdnNuLEZKZSkscjRlO0koMjcyLDIyLHszOjEsMzU6MSwyMjoxLDI3MjoxfSx6ZXQpO3ZhciBfNyxZeSxTNyxmQXQ9anIoT2gsIkVkZ2VMYWJlbFBsYWNlbWVudCIsMjcyLEhyLFFybixCSmUpLGk0ZTtJKDIxOCwyMix7MzoxLDM1OjEsMjI6MSwyMTg6MX0sS1IpO3ZhciBBNyxYTyxINixnZnQscGZ0PWpyKE9oLCJFZGdlUm91dGluZyIsMjE4LEhyLEhpbixSSmUpLHM0ZTtJKDMxMiwyMix7MzoxLDM1OjEsMjI6MSwzMTI6MX0sckMpO3ZhciBkQXQsZ0F0LHBBdCxiQXQsYmZ0LHZBdCx3QXQ9anIoT2gsIkVkZ2VUeXBlIiwzMTIsSHIscmFuLGpKZSksYTRlO0koOTc3LDEsSWgsJEIpLGwuUWU9ZnVuY3Rpb24oZSl7RHVlKGUpfTt2YXIgbUF0LHlBdCx4QXQsa0F0LG80ZSxFQXQsS1M7UChPaCwiRml4ZWRMYXlvdXRlck9wdGlvbnMiLDk3NyksSSg5NzgsMSx7fSxCTCksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBQWixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChPaCwiRml4ZWRMYXlvdXRlck9wdGlvbnMvRml4ZWRGYWN0b3J5Iiw5NzgpLEkoMzM0LDIyLHszOjEsMzU6MSwyMjoxLDMzNDoxfSxxZXQpO3ZhciBaZyxIVixZUyxUQXQ9anIoT2gsIkhpZXJhcmNoeUhhbmRsaW5nIiwzMzQsSHIsWHJuLCRKZSksYzRlO0koMjg1LDIyLHszOjEsMzU6MSwyMjoxLDI4NToxfSxZUik7dmFyIHUwLHdiLFFPLFpPLHU0ZT1qcihPaCwiTGFiZWxTaWRlIiwyODUsSHIscWluLHpKZSksbDRlO0koOTMsMjIsezM6MSwzNToxLDIyOjEsOTM6MX0sJDMpO3ZhciBKMCxFZiwkaCxUZixVbCxDZix6aCxsMCxfZixsbz1qcihPaCwiTm9kZUxhYmVsUGxhY2VtZW50Iiw5MyxIcixhb24scUplKSxoNGU7SSgyNDksMjIsezM6MSwzNToxLDIyOjEsMjQ5OjF9LE1NKTt2YXIgQ0F0LFhTLG1iLF9BdCxKTyxRUz1qcihPaCwiUG9ydEFsaWdubWVudCIsMjQ5LEhyLHdzbixISmUpLGY0ZTtJKDk4LDIyLHszOjEsMzU6MSwyMjoxLDk4OjF9LGlDKTt2YXIgRzIsVmMsaDAsTDcsSDEseWIsU0F0PWpyKE9oLCJQb3J0Q29uc3RyYWludHMiLDk4LEhyLCRzbixHSmUpLGQ0ZTtJKDI3MywyMix7MzoxLDM1OjEsMjI6MSwyNzM6MX0sc0MpO3ZhciBaUyxKUyx0Zyx0Tix4YixHNixHVj1qcihPaCwiUG9ydExhYmVsUGxhY2VtZW50IiwyNzMsSHIsbmFuLFZKZSksZzRlO0koNjEsMjIsezM6MSwzNToxLDIyOjEsNjE6MX0sSU0pO3ZhciBIbixObix2aCx3aCxDdSx1dSxHMSxTZix0bCxxdSxVYyxlbCxfdSxTdSxBZixXbCxLbCxxaCxtcixabyxCbixYYT1qcihPaCwiUG9ydFNpZGUiLDYxLEhyLGdzbixLSmUpLHA0ZTtJKDk4MSwxLEloLHpCKSxsLlFlPWZ1bmN0aW9uKGUpe2N1ZShlKX07dmFyIGI0ZSx2NGUsQUF0LHc0ZSxtNGU7UChPaCwiUmFuZG9tTGF5b3V0ZXJPcHRpb25zIiw5ODEpLEkoOTgyLDEse30selopLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgSFosZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoT2gsIlJhbmRvbUxheW91dGVyT3B0aW9ucy9SYW5kb21GYWN0b3J5Iiw5ODIpLEkoMzc0LDIyLHszOjEsMzU6MSwyMjoxLDM3NDoxfSxYUik7dmFyIFh5LGVOLG5OLFYyLHRBPWpyKE9oLCJTaXplQ29uc3RyYWludCIsMzc0LEhyLHppbixVSmUpLHk0ZTtJKDI1OSwyMix7MzoxLDM1OjEsMjI6MSwyNTk6MX0sejMpO3ZhciByTixWVixNNyx2ZnQsaU4sZUEsVVYsV1YsS1YsTEF0PWpyKE9oLCJTaXplT3B0aW9ucyIsMjU5LEhyLGRvbixXSmUpLHg0ZTtJKDM3MCwxLHsxOTQ5OjF9LFlrKSxsLmI9ITEsbC5jPTAsbC5kPS0xLGwuZT1udWxsLGwuZj1udWxsLGwuZz0tMSxsLmo9ITEsbC5rPSExLGwubj0hMSxsLm89MCxsLnE9MCxsLnI9MCxQKEVjLCJCYXNpY1Byb2dyZXNzTW9uaXRvciIsMzcwKSxJKDk3MiwyMDksRTIsQlopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07c3dpdGNoKHdyKG4sIkJveCBsYXlvdXQiLDIpLG89bE0oeWUocWUoZSwoZXEoKSx6M2UpKSkpLGg9dShxZShlLCQzZSksMTE2KSxyPWplKFJlKHFlKGUsVFN0KSkpLHM9amUoUmUocWUoZSxDU3QpKSksdShxZShlLEpodCksMzExKS5nKXtjYXNlIDA6ZD0odz1uZXcgUHUoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKSx2bigpLFhzKHcsbmV3IEckdChzKSksdyksaz1HNHQoZSksQz15ZShxZShlLEVTdCkpLChDPT1udWxsfHwoT24oQyksQzw9MCkpJiYoQz0xLjMpLE09WjRuKGQsbyxoLGsuYSxrLmIsciwoT24oQyksQykpLGd3KGUsTS5hLE0uYiwhMSwhMCk7YnJlYWs7ZGVmYXVsdDpLeW4oZSxvLGgscil9b3Iobil9LFAoRWMsIkJveExheW91dFByb3ZpZGVyIiw5NzIpLEkoOTczLDEsT2ksRyR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIybih0aGlzLHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sbC5hPSExLFAoRWMsIkJveExheW91dFByb3ZpZGVyLzEiLDk3MyksSSgxNTcsMSx7MTU3OjF9LFUkLGZXdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM/SDV0KHRoaXMuYyk6UXAodGhpcy5iKX0sUChFYywiQm94TGF5b3V0UHJvdmlkZXIvR3JvdXAiLDE1NyksSSgzMTEsMjIsezM6MSwzNToxLDIyOjEsMzExOjF9LFFSKTt2YXIgTUF0LElBdCxEQXQsd2Z0LE9BdD1qcihFYywiQm94TGF5b3V0UHJvdmlkZXIvUGFja2luZ01vZGUiLDMxMSxIcixHaW4sWUplKSxrNGU7SSg5NzQsMSxPaSxSWiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBtbm4odShlLDE1NyksdShuLDE1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDk3NCksSSg5NzUsMSxPaSxLRiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBmbm4odShlLDE1NyksdShuLDE1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQxJFR5cGUiLDk3NSksSSg5NzYsMSxPaSxqWiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkbm4odShlLDE1NyksdShuLDE1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQyJFR5cGUiLDk3NiksSSgxMzY1LDEsezgzMToxfSwkWiksbC5xZz1mdW5jdGlvbihlLG4pe3JldHVybiBEUigpLCFFdChuLDE2MCl8fGtIdCgoUXgoKSx1KGUsMTYwKSksbil9LFAoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQwJFR5cGUiLDEzNjUpLEkoMTM2NiwxLFVuLFYkdCksbC50ZD1mdW5jdGlvbihlKXtydW4odGhpcy5hLHUoZSwxNDYpKX0sUChFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDEkVHlwZSIsMTM2NiksSSgxMzY3LDEsVW4sRlopLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDk0KSxEUigpfSxQKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMiRUeXBlIiwxMzY3KSxJKDEzNzEsMSxVbixVJHQpLGwudGQ9ZnVuY3Rpb24oZSl7QW9uKHRoaXMuYSx1KGUsOTQpKX0sUChFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDMkVHlwZSIsMTM3MSksSSgxMzY5LDEsdWksY1Z0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBIY24odGhpcy5hLHRoaXMuYix1KGUsMTQ2KSl9LFAoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ0JFR5cGUiLDEzNjkpLEkoMTM2OCwxLHVpLHVWdCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gYVFlKHRoaXMuYSx0aGlzLmIsdShlLDgzMSkpfSxQKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNSRUeXBlIiwxMzY4KSxJKDEzNzAsMSxVbixsVnQpLGwudGQ9ZnVuY3Rpb24oZSl7YWVuKHRoaXMuYSx0aGlzLmIsdShlLDE0NikpfSxQKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNiRUeXBlIiwxMzcwKSxJKDkzNSwxLHt9LE5aKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsVXQoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKEVjLCJFbGtVdGlsL2xhbWJkYSQwJFR5cGUiLDkzNSksSSg5MzYsMSxVbixoVnQpLGwudGQ9ZnVuY3Rpb24oZSl7d3BuKHRoaXMuYSx0aGlzLmIsdShlLDc5KSl9LGwuYT0wLGwuYj0wLFAoRWMsIkVsa1V0aWwvbGFtYmRhJDEkVHlwZSIsOTM2KSxJKDkzNywxLFVuLGZWdCksbC50ZD1mdW5jdGlvbihlKXt3S2UodGhpcy5hLHRoaXMuYix1KGUsMjAyKSl9LGwuYT0wLGwuYj0wLFAoRWMsIkVsa1V0aWwvbGFtYmRhJDIkVHlwZSIsOTM3KSxJKDkzOCwxLFVuLGRWdCksbC50ZD1mdW5jdGlvbihlKXt1WGUodGhpcy5hLHRoaXMuYix1KGUsMTM3KSl9LGwuYT0wLGwuYj0wLFAoRWMsIkVsa1V0aWwvbGFtYmRhJDMkVHlwZSIsOTM4KSxJKDkzOSwxLFVuLFckdCksbC50ZD1mdW5jdGlvbihlKXtrdG4odGhpcy5hLHUoZSw0NjkpKX0sUChFYywiRWxrVXRpbC9sYW1iZGEkNCRUeXBlIiw5MzkpLEkoMzQyLDEsezM1OjEsMzQyOjF9LEtXZSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gQlhlKHRoaXMsdShlLDIzNikpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDM0Mik/KG49dShlLDM0MiksdGhpcy5hPT1uLmEpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHBzKHRoaXMuYSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgKGV4Y2x1c2l2ZSkifSxsLmE9MCxQKEVjLCJFeGNsdXNpdmVCb3VuZHMvRXhjbHVzaXZlTG93ZXJCb3VuZCIsMzQyKSxJKDExMzgsMjA5LEUyLFBaKSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWU7Zm9yKHdyKG4sIkZpeGVkIExheW91dCIsMSksaD11KHFlKGUsKGNpKCksTlN0KSksMjE4KSxGPTAsSD0wLF90PW5ldyBlcigoIWUuYSYmKGUuYT1uZXcgaGUobnMsZSwxMCwxMSkpLGUuYSkpO190LmUhPV90LmkuZ2MoKTspe2ZvcihndD11KGRyKF90KSwzMyksUWU9dShxZShndCwoYnooKSxLUykpLDgpLFFlJiYobTEoZ3QsUWUuYSxRZS5iKSx1KHFlKGd0LHlBdCksMTc0KS5IYygoX2woKSxYeSkpJiYoVj11KHFlKGd0LGtBdCksOCksVi5hPjAmJlYuYj4wJiZndyhndCxWLmEsVi5iLCEwLCEwKSkpLEY9Yi5NYXRoLm1heChGLGd0LmkrZ3QuZyksSD1iLk1hdGgubWF4KEgsZ3QuaitndC5mKSxDPW5ldyBlcigoIWd0Lm4mJihndC5uPW5ldyBoZShxbyxndCwxLDcpKSxndC5uKSk7Qy5lIT1DLmkuZ2MoKTspdz11KGRyKEMpLDEzNyksUWU9dShxZSh3LEtTKSw4KSxRZSYmbTEodyxRZS5hLFFlLmIpLEY9Yi5NYXRoLm1heChGLGd0Lmkrdy5pK3cuZyksSD1iLk1hdGgubWF4KEgsZ3Quait3Lmordy5mKTtmb3IoY2U9bmV3IGVyKCghZ3QuYyYmKGd0LmM9bmV3IGhlKGZsLGd0LDksOSkpLGd0LmMpKTtjZS5lIT1jZS5pLmdjKCk7KWZvcihZdD11KGRyKGNlKSwxMTgpLFFlPXUocWUoWXQsS1MpLDgpLFFlJiZtMShZdCxRZS5hLFFlLmIpLFNlPWd0LmkrWXQuaSxXZT1ndC5qK1l0LmosRj1iLk1hdGgubWF4KEYsU2UrWXQuZyksSD1iLk1hdGgubWF4KEgsV2UrWXQuZiksaz1uZXcgZXIoKCFZdC5uJiYoWXQubj1uZXcgaGUocW8sWXQsMSw3KSksWXQubikpO2suZSE9ay5pLmdjKCk7KXc9dShkcihrKSwxMzcpLFFlPXUocWUodyxLUyksOCksUWUmJm0xKHcsUWUuYSxRZS5iKSxGPWIuTWF0aC5tYXgoRixTZSt3Lmkrdy5nKSxIPWIuTWF0aC5tYXgoSCxXZSt3Lmordy5mKTtmb3Iobz1uZXcgYXIobHIoRzAoZ3QpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylyPXUoTHIobyksNzkpLE09RWhlKHIpLEY9Yi5NYXRoLm1heChGLE0uYSksSD1iLk1hdGgubWF4KEgsTS5iKTtmb3Iocz1uZXcgYXIobHIoZkQoZ3QpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksNzkpLHRzKFpkKHIpKSE9ZSYmKE09RWhlKHIpLEY9Yi5NYXRoLm1heChGLE0uYSksSD1iLk1hdGgubWF4KEgsTS5iKSl9aWYoaD09KHEwKCksQTcpKWZvcihMdD1uZXcgZXIoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtMdC5lIT1MdC5pLmdjKCk7KWZvcihndD11KGRyKEx0KSwzMykscz1uZXcgYXIobHIoRzAoZ3QpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksNzkpLGQ9cG1uKHIpLGQuYj09MD9ibyhyLGk1LG51bGwpOmJvKHIsaTUsZCk7amUoUmUocWUoZSwoYnooKSx4QXQpKSkpfHwoQnQ9dShxZShlLG80ZSksMTE2KSx0dD1GK0J0LmIrQnQuYyxZPUgrQnQuZCtCdC5hLGd3KGUsdHQsWSwhMCwhMCkpLG9yKG4pfSxQKEVjLCJGaXhlZExheW91dFByb3ZpZGVyIiwxMTM4KSxJKDM3MywxMzQsezM6MSw0MTQ6MSwzNzM6MSw5NDoxLDEzNDoxfSxXdSwkdGUpLGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKGUpdHJ5e2ZvcihrPXB5KGUsIjssOyIpLGg9ayxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKXtpZihvPWhbZF0scj1weShvLCJcXDoiKSxzPWJ4dCh6OCgpLHJbMF0pLCFzKXRocm93IHJ0KG5ldyBQbigiSW52YWxpZCBvcHRpb24gaWQ6ICIrclswXSkpO2lmKEM9Z3h0KHMsclsxXSksQz09bnVsbCl0aHJvdyBydChuZXcgUG4oIkludmFsaWQgb3B0aW9uIHZhbHVlOiAiK3JbMV0pKTtDPT1udWxsPyghdGhpcy5xJiYodGhpcy5xPW5ldyBDciksVXgodGhpcy5xLHMpKTooIXRoaXMucSYmKHRoaXMucT1uZXcgQ3IpLGtpKHRoaXMucSxzLEMpKX19Y2F0Y2goTSl7dGhyb3cgTT1XaShNKSxFdChNLDEwMik/KG49TSxydChuZXcgd3JlKG4pKSk6cnQoTSl9fSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9QnIoUGwocHUoKHRoaXMucT90aGlzLnE6KHZuKCksdm4oKSxhMCkpLnZjKCkuT2MoKSxuZXcgTXUpLFltKG5ldyBMS3QsbmV3IGRhLG5ldyBOZSxuZXcgbWUsY3Qob3QobGwsMSksYWUsMTMyLDAsW10pKSkpLGV9O3ZhciBFNGU9UChFYywiSW5kaXZpZHVhbFNwYWNpbmdzIiwzNzMpO0koOTcxLDEse30sTXUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHlubih1KGUsNDIpKX0sUChFYywiSW5kaXZpZHVhbFNwYWNpbmdzL2xhbWJkYSQwJFR5cGUiLDk3MSksSSg3MDksMSx7fSxvWXQpLGwuYz0wLFAoRWMsIkluc3RhbmNlUG9vbCIsNzA5KSxJKDEyNzUsMSx7fSxxWiksUChFYywiTG9nZ2VkR3JhcGgiLDEyNzUpLEkoMzk2LDIyLHszOjEsMzU6MSwyMjoxLDM5NjoxfSxaUik7dmFyIE5BdCxZbCxQQXQsRkF0LFQ0ZT1qcihFYywiTG9nZ2VkR3JhcGgvVHlwZSIsMzk2LEhyLFZpbixYSmUpLEM0ZTtJKDQ2LDEsezIwOjEsNDY6MX0sbGEpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIEV0KGUsNDYpPyhyPXUoZSw0Niksbj10aGlzLmE9PW51bGw/ci5hPT1udWxsOnlpKHRoaXMuYSxyLmEpLHM9dGhpcy5iPT1udWxsP3IuYj09bnVsbDp5aSh0aGlzLmIsci5iKSxuJiZzKTohMX0sbC5IYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtyZXR1cm4gcj10aGlzLmE9PW51bGw/MDpIaSh0aGlzLmEpLGU9ciZtcyxuPXImLTY1NTM2LGg9dGhpcy5iPT1udWxsPzA6SGkodGhpcy5iKSxzPWgmbXMsbz1oJi02NTUzNixlXm8+PjE2Jm1zfG5eczw8MTZ9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEskdCh0aGlzKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PW51bGwmJnRoaXMuYj09bnVsbD8icGFpcihudWxsLG51bGwpIjp0aGlzLmE9PW51bGw/InBhaXIobnVsbCwiKyRvKHRoaXMuYikrIikiOnRoaXMuYj09bnVsbD8icGFpcigiKyRvKHRoaXMuYSkrIixudWxsKSI6InBhaXIoIiskbyh0aGlzLmEpKyIsIiskbyh0aGlzLmIpKyIpIn0sUChFYywiUGFpciIsNDYpLEkoOTgzLDEscmEsSyR0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5jJiYoIXRoaXMuYiYmdGhpcy5hLmEhPW51bGx8fHRoaXMuYS5iIT1udWxsKX0sbC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMmJiF0aGlzLmImJnRoaXMuYS5hIT1udWxsKXJldHVybiB0aGlzLmI9ITAsdGhpcy5hLmE7aWYoIXRoaXMuYyYmdGhpcy5hLmIhPW51bGwpcmV0dXJuIHRoaXMuYz0hMCx0aGlzLmEuYjt0aHJvdyBydChuZXcgbGMpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbD90aGlzLmEuYj1udWxsOnRoaXMuYiYmdGhpcy5hLmEhPW51bGwmJih0aGlzLmEuYT1udWxsKSxydChuZXcgSXUpfSxsLmI9ITEsbC5jPSExLFAoRWMsIlBhaXIvMSIsOTgzKSxJKDQ0OCwxLHs0NDg6MX0sVFh0KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBQYyh0aGlzLmEsdShlLDQ0OCkuYSkmJlBjKHRoaXMuYyx1KGUsNDQ4KS5jKSYmUGModGhpcy5kLHUoZSw0NDgpLmQpJiZQYyh0aGlzLmIsdShlLDQ0OCkuYil9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdnooY3Qob3QoWG4sMSksSWUsMSw1LFt0aGlzLmEsdGhpcy5jLHRoaXMuZCx0aGlzLmJdKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0thK3RoaXMuYytLYSt0aGlzLmQrS2ErdGhpcy5iKyIpIn0sUChFYywiUXVhZHJ1cGxlIiw0NDgpLEkoMTEyNiwyMDksRTIsSFopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2lmKHdyKG4sIlJhbmRvbSBMYXlvdXQiLDEpLCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKS5pPT0wKXtvcihuKTtyZXR1cm59aD11KHFlKGUsKHkzdCgpLHc0ZSkpLDE5KSxoJiZoLmEhPTA/bz1uZXcgVCQoaC5hKTpvPW5ldyB6aXQscj1sTSh5ZShxZShlLGI0ZSkpKSxkPWxNKHllKHFlKGUsbTRlKSkpLHM9dShxZShlLHY0ZSksMTE2KSxMNG4oZSxvLHIsZCxzKSxvcihuKX0sUChFYywiUmFuZG9tTGF5b3V0UHJvdmlkZXIiLDExMjYpO3ZhciBfNGU7SSg1NTMsMSx7fSksbC5xZj1mdW5jdGlvbigpe3JldHVybiBuZXcgJGUodGhpcy5mLmksdGhpcy5mLmopfSxsLldlPWZ1bmN0aW9uKGUpe3JldHVybiBYWHQoZSwoY2koKSxobCkpP3FlKHRoaXMuZixTNGUpOnFlKHRoaXMuZixlKX0sbC5yZj1mdW5jdGlvbigpe3JldHVybiBuZXcgJGUodGhpcy5mLmcsdGhpcy5mLmYpfSxsLnNmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5YZT1mdW5jdGlvbihlKXtyZXR1cm4gcjIodGhpcy5mLGUpfSxsLnRmPWZ1bmN0aW9uKGUpe3l1KHRoaXMuZixlLmEpLHh1KHRoaXMuZixlLmIpfSxsLnVmPWZ1bmN0aW9uKGUpe1F2KHRoaXMuZixlLmEpLFh2KHRoaXMuZixlLmIpfSxsLnZmPWZ1bmN0aW9uKGUpe3RoaXMuZz1lfSxsLmc9MDt2YXIgUzRlO1AoVV8sIkVsa0dyYXBoQWRhcHRlcnMvQWJzdHJhY3RFbGtHcmFwaEVsZW1lbnRBZGFwdGVyIiw1NTMpLEkoNTU0LDEsezgzOToxfSxhUiksbC53Zj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYilmb3IodGhpcy5iPXkkKFpqKHRoaXMuYSkuaSksbj1uZXcgZXIoWmoodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDEzNyksdWUodGhpcy5iLG5ldyBuZXQoZSkpO3JldHVybiB0aGlzLmJ9LGwuYj1udWxsLFAoVV8sIkVsa0dyYXBoQWRhcHRlcnMvRWxrRWRnZUFkYXB0ZXIiLDU1NCksSSgzMDEsNTUzLHt9LFNtKSxsLnhmPWZ1bmN0aW9uKCl7cmV0dXJuIFRzZSh0aGlzKX0sbC5hPW51bGwsUChVXywiRWxrR3JhcGhBZGFwdGVycy9FbGtHcmFwaEFkYXB0ZXIiLDMwMSksSSg2MzAsNTUzLHsxODE6MX0sbmV0KSxQKFVfLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0xhYmVsQWRhcHRlciIsNjMwKSxJKDYyOSw1NTMsezY4MDoxfSxybnQpLGwud2Y9ZnVuY3Rpb24oKXtyZXR1cm4gSWZuKHRoaXMpfSxsLkFmPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dShxZSh0aGlzLmYsKGNpKCksS08pKSwxNDIpLCFlJiYoZT1uZXcgTTkpLGV9LGwuQ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gRGZuKHRoaXMpfSxsLkVmPWZ1bmN0aW9uKGUpe3ZhciBuO249bmV3IHdudChlKSxibyh0aGlzLmYsKGNpKCksS08pLG4pfSxsLkZmPWZ1bmN0aW9uKGUpe2JvKHRoaXMuZiwoY2koKSxxMiksbmV3IHB2dChlKSl9LGwueWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLnpmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9bmV3IGxlLG49bmV3IGFyKGxyKGZEKHUodGhpcy5mLDMzKSkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSw3OSksdWUodGhpcy5hLG5ldyBhUihlKSk7cmV0dXJuIHRoaXMuYX0sbC5CZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPW5ldyBsZSxuPW5ldyBhcihscihHMCh1KHRoaXMuZiwzMykpLmEuS2MoKSxuZXcgeikpO3pyKG4pOyllPXUoTHIobiksNzkpLHVlKHRoaXMuYyxuZXcgYVIoZSkpO3JldHVybiB0aGlzLmN9LGwuRGY9ZnVuY3Rpb24oKXtyZXR1cm4gaSQodSh0aGlzLmYsMzMpKS5pIT0wfHxqZShSZSh1KHRoaXMuZiwzMykuV2UoKGNpKCksV08pKSkpfSxsLkdmPWZ1bmN0aW9uKCl7a2FuKHRoaXMsKEltKCksXzRlKSl9LGwuYT1udWxsLGwuYj1udWxsLGwuYz1udWxsLGwuZD1udWxsLGwuZT1udWxsLFAoVV8sIkVsa0dyYXBoQWRhcHRlcnMvRWxrTm9kZUFkYXB0ZXIiLDYyOSksSSgxMjY2LDU1Myx7ODM4OjF9LEV6dCksbC53Zj1mdW5jdGlvbigpe3JldHVybiAkZm4odGhpcyl9LGwuemY9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmEpZm9yKHRoaXMuYT1IZCh1KHRoaXMuZiwxMTgpLnhnKCkuaSksbj1uZXcgZXIodSh0aGlzLmYsMTE4KS54ZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNzkpLHVlKHRoaXMuYSxuZXcgYVIoZSkpO3JldHVybiB0aGlzLmF9LGwuQmY9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmMpZm9yKHRoaXMuYz1IZCh1KHRoaXMuZiwxMTgpLnlnKCkuaSksbj1uZXcgZXIodSh0aGlzLmYsMTE4KS55ZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNzkpLHVlKHRoaXMuYyxuZXcgYVIoZSkpO3JldHVybiB0aGlzLmN9LGwuSGY9ZnVuY3Rpb24oKXtyZXR1cm4gdSh1KHRoaXMuZiwxMTgpLldlKChjaSgpLG81KSksNjEpfSxsLklmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iocz1rMSh1KHRoaXMuZiwxMTgpKSxyPW5ldyBlcih1KHRoaXMuZiwxMTgpLnlnKCkpO3IuZSE9ci5pLmdjKCk7KWZvcihlPXUoZHIociksNzkpLHc9bmV3IGVyKCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYykpO3cuZSE9dy5pLmdjKCk7KXtpZihkPXUoZHIodyksODIpLFptKE1vKGQpLHMpKXJldHVybiEwO2lmKE1vKGQpPT1zJiZqZShSZShxZShlLChjaSgpLHNmdCkpKSkpcmV0dXJuITB9Zm9yKG49bmV3IGVyKHUodGhpcy5mLDExOCkueGcoKSk7bi5lIT1uLmkuZ2MoKTspZm9yKGU9dShkcihuKSw3OSksaD1uZXcgZXIoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSk7aC5lIT1oLmkuZ2MoKTspaWYobz11KGRyKGgpLDgyKSxabShNbyhvKSxzKSlyZXR1cm4hMDtyZXR1cm4hMX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsUChVXywiRWxrR3JhcGhBZGFwdGVycy9FbGtQb3J0QWRhcHRlciIsMTI2NiksSSgxMjY3LDEsT2ksR1opLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY3duKHUoZSwxMTgpLHUobiwxMTgpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKFVfLCJFbGtHcmFwaEFkYXB0ZXJzL1BvcnRDb21wYXJhdG9yIiwxMjY3KTt2YXIga2I9WWkoZGgsIkVPYmplY3QiKSxJNz1ZaShPNCxoZGUpLEhoPVlpKE80LGZkZSksc049WWkoTzQsZGRlKSxhTj1ZaShPNCwiRWxrU2hhcGUiKSxicj1ZaShPNCxnZGUpLFdzPVlpKE80LGw4dCksWmk9WWkoTzQscGRlKSxvTj1ZaShkaCxiZGUpLG5BPVlpKGRoLCJFRmFjdG9yeSIpLEE0ZSxtZnQ9WWkoZGgsdmRlKSxyMT1ZaShkaCwiRVBhY2thZ2UiKSx0YSxMNGUsTTRlLEJBdCxZVixJNGUsUkF0LGpBdCwkQXQsRWIsRDRlLE80ZSxxbz1ZaShPNCxoOHQpLG5zPVlpKE80LGY4dCksZmw9WWkoTzQsZDh0KTtJKDkwLDEsd2RlKSxsLkpnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS2coKSxudWxsfSxsLktnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuTGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LZygpLCExfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuTmc9ZnVuY3Rpb24oZSl7bWkodGhpcyxlKX0sUChrNiwiQmFzaWNOb3RpZmllckltcGwiLDkwKSxJKDk3LDkwLGtkZSksbC5uaD1mdW5jdGlvbigpe3JldHVybiBtbCh0aGlzKX0sbC5PZz1mdW5jdGlvbihlLG4pe3JldHVybiBlfSxsLlBnPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5RZz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1ubyh1KHluKHRoaXMuVGcoKSx0aGlzLlZnKCkpLDE4KSksdGhpcy5laCgpLmloKHRoaXMsbi5uLG4uZixlKX0sbC5SZz1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuU2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB6bCh0aGlzLGUsbixyKX0sbC5UZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLlBnKCkmJihlPXRoaXMuUGcoKS5jaygpLGUpP2U6dGhpcy56aCgpfSxsLlVnPWZ1bmN0aW9uKCl7cmV0dXJuIEdzdCh0aGlzKX0sbC5WZz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuV2c9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXRoaXMucGgoKS5kaygpLCFuJiZ0aGlzLlBnKCkuaWsobj0oVjkoKSxlPUR3dChwZCh0aGlzLlRnKCkpKSxlPT1udWxsP1NmdDpuZXcgTk0odGhpcyxlKSkpLG59LGwuWGc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZX0sbC5ZZz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1lLkdqKCksbj9lLmFqKCk6VmkodGhpcy5UZygpLGUpfSxsLlpnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5QZygpLGU/ZS5maygpOm51bGx9LGwuJGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZygpP3RoaXMuUGcoKS5jaygpOm51bGx9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBqeih0aGlzLGUsbixyKX0sbC5haD1mdW5jdGlvbihlKXtyZXR1cm4gSTgodGhpcyxlKX0sbC5iaD1mdW5jdGlvbihlLG4pe3JldHVybiBQcnQodGhpcyxlLG4pfSxsLmRoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5QZygpLCEhZSYmZS5naygpfSxsLmVoPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5maD1mdW5jdGlvbigpe3JldHVybiBEeih0aGlzKX0sbC5naD1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gZTYodGhpcyxlLG4scyl9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoeW4odGhpcy5UZygpLG4pLDY2KSxzLk5qKCkuUWoodGhpcyx0aGlzLnloKCksbi10aGlzLkFoKCksZSxyKX0sbC5paD1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gYyQodGhpcyxlLG4scyl9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoeW4odGhpcy5UZygpLG4pLDY2KSxzLk5qKCkuUmoodGhpcyx0aGlzLnloKCksbi10aGlzLkFoKCksZSxyKX0sbC5raD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5QZygpJiYhIXRoaXMuUGcoKS5laygpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiBlc3QodGhpcyxlKX0sbC5taD1mdW5jdGlvbihlKXtyZXR1cm4gZFF0KHRoaXMsZSl9LGwub2g9ZnVuY3Rpb24oZSl7cmV0dXJuIFJsZSh0aGlzLGUpfSxsLnBoPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5xaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBnKCk/dGhpcy5QZygpLmVrKCk6bnVsbH0sbC5yaD1mdW5jdGlvbigpe3JldHVybiBEeih0aGlzKX0sbC5zaD1mdW5jdGlvbihlLG4pe2pzdCh0aGlzLGUsbil9LGwudGg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmhrKGUpfSxsLnVoPWZ1bmN0aW9uKGUpe3RoaXMucGgoKS5rayhlKX0sbC52aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuamsoZSl9LGwud2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gaD10aGlzLlpnKCksaCYmZSYmKG49QmEoaC5WaygpLHRoaXMsbiksaC5aayh0aGlzKSkscz10aGlzLmVoKCkscyYmKGFhdCh0aGlzLHRoaXMuZWgoKSx0aGlzLlZnKCkpLkJiJllhPyhvPXMuZmgoKSxvJiYoZT8haCYmby5aayh0aGlzKTpvLllrKHRoaXMpKSk6KG49KHI9dGhpcy5WZygpLHI+PTA/dGhpcy5RZyhuKTp0aGlzLmVoKCkuaWgodGhpcywtMS1yLG51bGwsbikpLG49dGhpcy5TZyhudWxsLC0xLG4pKSksdGhpcy51aChlKSxufSxsLnhoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYocj10aGlzLlRnKCksaD1WaShyLGUpLG49dGhpcy5BaCgpLGg+PW4pcmV0dXJuIHUoZSw2NikuTmooKS5Vaih0aGlzLHRoaXMueWgoKSxoLW4pO2lmKGg8PS0xKWlmKGQ9RTQoKFJ1KCksbWEpLHIsZSksZCl7aWYodG8oKSx1KGQsNjYpLk9qKCl8fChkPXF4KEVvKG1hLGQpKSksbz0ocz10aGlzLllnKGQpLHUocz49MD90aGlzLl9nKHMsITAsITApOmx3KHRoaXMsZCwhMCksMTUzKSksaz1kLlpqKCksaz4xfHxrPT0tMSlyZXR1cm4gdSh1KG8sMjE1KS5obChlLCExKSw3Nil9ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK0ZjdCkpO2Vsc2UgaWYoZS4kaigpKXJldHVybiBzPXRoaXMuWWcoZSksdShzPj0wP3RoaXMuX2cocywhMSwhMCk6bHcodGhpcyxlLCExKSw3Nik7cmV0dXJuIHc9bmV3IE9WdCh0aGlzLGUpLHd9LGwueWg9ZnVuY3Rpb24oKXtyZXR1cm4gT210KHRoaXMpfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuKGpwKCksTG4pLlN9LGwuQWg9ZnVuY3Rpb24oKXtyZXR1cm4gWm4odGhpcy56aCgpKX0sbC5CaD1mdW5jdGlvbihlKXtOc3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBiZih0aGlzKX0sUChNbiwiQmFzaWNFT2JqZWN0SW1wbCIsOTcpO3ZhciBONGU7SSgxMTQsOTcsezEwNToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MX0pLGwuQ2g9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49Tm10KHRoaXMpLG5bZV19LGwuRGg9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyPU5tdCh0aGlzKSxKaShyLGUsbil9LGwuRWg9ZnVuY3Rpb24oZSl7dmFyIG47bj1ObXQodGhpcyksSmkobixlLG51bGwpfSxsLkpnPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcyw0KSwxMjYpfSxsLktnPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5MZz1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjQpIT0wfSxsLlBnPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5GaD1mdW5jdGlvbihlKXt0Nih0aGlzLDIsZSl9LGwuUmc9ZnVuY3Rpb24oZSxuKXt0aGlzLkRiPW48PDE2fHRoaXMuRGImMjU1LHRoaXMuRmgoZSl9LGwuVGc9ZnVuY3Rpb24oKXtyZXR1cm4gYnUodGhpcyl9LGwuVmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EYj4+MTZ9LGwuV2c9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBWOSgpLG49RHd0KHBkKChlPXUoSW4odGhpcywxNiksMjYpLGV8fHRoaXMuemgoKSkpKSxuPT1udWxsP1NmdDpuZXcgTk0odGhpcyxuKX0sbC5NZz1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjEpPT0wfSxsLlpnPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcywxMjgpLDE5MzUpfSxsLiRnPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcywxNiksMjYpfSxsLmRoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImMzIpIT0wfSxsLmVoPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcywyKSw0OSl9LGwua2g9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiY2NCkhPTB9LGwucGg9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLnFoPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcyw2NCksMjgxKX0sbC50aD1mdW5jdGlvbihlKXt0Nih0aGlzLDE2LGUpfSxsLnVoPWZ1bmN0aW9uKGUpe3Q2KHRoaXMsMTI4LGUpfSxsLnZoPWZ1bmN0aW9uKGUpe3Q2KHRoaXMsNjQsZSl9LGwueWg9ZnVuY3Rpb24oKXtyZXR1cm4gaXUodGhpcyl9LGwuRGI9MCxQKE1uLCJNaW5pbWFsRU9iamVjdEltcGwiLDExNCksSSgxMTUsMTE0LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLkZoPWZ1bmN0aW9uKGUpe3RoaXMuQ2I9ZX0sbC5laD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNifSxQKE1uLCJNaW5pbWFsRU9iamVjdEltcGwvQ29udGFpbmVyIiwxMTUpLEkoMTk4NSwxMTUsezEwNToxLDQxMzoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFYzdCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIE80dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gR3d0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtNeXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksTzRlfSxsLkJoPWZ1bmN0aW9uKGUpe215dCh0aGlzLGUpfSxsLlZlPWZ1bmN0aW9uKCl7cmV0dXJuIFZpZSh0aGlzKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gcWUodGhpcyxlKX0sbC5YZT1mdW5jdGlvbihlKXtyZXR1cm4gcjIodGhpcyxlKX0sbC5ZZT1mdW5jdGlvbihlLG4pe3JldHVybiBibyh0aGlzLGUsbil9LFAoXzIsIkVNYXBQcm9wZXJ0eUhvbGRlckltcGwiLDE5ODUpLEkoNTY3LDExNSx7MTA1OjEsNDY5OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSx2cCksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5ifXJldHVybiBqeih0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmIhPTB9cmV0dXJuIGVzdCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDpXJCh0aGlzLFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgMTpLJCh0aGlzLFh0KHllKG4pKSk7cmV0dXJufWpzdCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gWmMoKSxMNGV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpXJCh0aGlzLDApO3JldHVybjtjYXNlIDE6SyQodGhpcywwKTtyZXR1cm59TnN0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9iZih0aGlzKTooZT1uZXcgVGgoYmYodGhpcykpLGUuYSs9IiAoeDogIixSMyhlLHRoaXMuYSksZS5hKz0iLCB5OiAiLFIzKGUsdGhpcy5iKSxlLmErPSIpIixlLmEpfSxsLmE9MCxsLmI9MCxQKF8yLCJFbGtCZW5kUG9pbnRJbXBsIiw1NjcpLEkoNzIzLDE5ODUsezEwNToxLDQxMzoxLDE2MDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFl5dCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIEFzdCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGZpdCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gaHl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtsNHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksSTRlfSxsLkJoPWZ1bmN0aW9uKGUpe1Z5dCh0aGlzLGUpfSxsLnpnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30sbC5BZz1mdW5jdGlvbigpe3JldHVybiBaaih0aGlzKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBqaXQodGhpcyl9LGwuaz1udWxsLFAoXzIsIkVsa0dyYXBoRWxlbWVudEltcGwiLDcyMyksSSg3MjQsNzIzLHsxMDU6MSw0MTM6MSwxNjA6MSw0NzA6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBzM3QodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGYzdCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7aDR0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLEQ0ZX0sbC5CaD1mdW5jdGlvbihlKXt2M3QodGhpcyxlKX0sbC5CZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuQ2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLkRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5FZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9LGwuRmc9ZnVuY3Rpb24oZSxuKXtzaih0aGlzLGUsbil9LGwuR2c9ZnVuY3Rpb24oZSxuKXttMSh0aGlzLGUsbil9LGwuSGc9ZnVuY3Rpb24oZSl7eXUodGhpcyxlKX0sbC5JZz1mdW5jdGlvbihlKXt4dSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIE9zdCh0aGlzKX0sbC5mPTAsbC5nPTAsbC5pPTAsbC5qPTAsUChfMiwiRWxrU2hhcGVJbXBsIiw3MjQpLEkoNzI1LDcyNCx7MTA1OjEsNDEzOjEsODI6MSwxNjA6MSw0NzA6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBqM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBpNHQodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBzNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIEF5dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7ZzV0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLE00ZX0sbC5CaD1mdW5jdGlvbihlKXtJM3QodGhpcyxlKX0sbC54Zz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IENuKFdzLHRoaXMsOCw1KSksdGhpcy5kfSxsLnlnPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oV3MsdGhpcyw3LDQpKSx0aGlzLmV9LFAoXzIsIkVsa0Nvbm5lY3RhYmxlU2hhcGVJbXBsIiw3MjUpLEkoMzUyLDcyMyx7MTA1OjEsNDEzOjEsNzk6MSwxNjA6MSwzNTI6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sZnYpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ0dCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiBySSh0aGlzKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx0aGlzLmI7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksdGhpcy5jO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShaaSx0aGlzLDYsNikpLHRoaXMuYTtjYXNlIDc6cmV0dXJuIEZuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gRm4oKSwhIWdfKHRoaXMpO2Nhc2UgOTpyZXR1cm4gRm4oKSwhIXV3KHRoaXMpO2Nhc2UgMTA6cmV0dXJuIEZuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApfXJldHVybiBZeXQodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/dDR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLFcydCh0aGlzLHUoZSwzMykscik7Y2FzZSA0OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSksUWModGhpcy5iLGUscik7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksUWModGhpcy5jLGUscik7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKFppLHRoaXMsNiw2KSksUWModGhpcy5hLGUscil9cmV0dXJuIEFzdCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7c3dpdGNoKG4pe2Nhc2UgMzpyZXR1cm4gVzJ0KHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSxCYSh0aGlzLmIsZSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSxCYSh0aGlzLmMsZSxyKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoWmksdGhpcyw2LDYpKSxCYSh0aGlzLmEsZSxyKX1yZXR1cm4gZml0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuISFySSh0aGlzKTtjYXNlIDQ6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSA2OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDc6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gZ18odGhpcyk7Y2FzZSA5OnJldHVybiB1dyh0aGlzKTtjYXNlIDEwOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSksdGhpcy5iLmkhPTAmJighdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKX1yZXR1cm4gaHl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAzOlhzdCh0aGlzLHUobiwzMykpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx4cih0aGlzLmIpLCF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSkscnModGhpcy5iLHUobiwxNCkpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx4cih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSkscnModGhpcy5jLHUobiwxNCkpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoWmksdGhpcyw2LDYpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKFppLHRoaXMsNiw2KSkscnModGhpcy5hLHUobiwxNCkpO3JldHVybn1sNHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksQkF0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDM6WHN0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDohdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHhyKHRoaXMuYik7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBoZShaaSx0aGlzLDYsNikpLHhyKHRoaXMuYSk7cmV0dXJufVZ5dCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEVsZSh0aGlzKX0sUChfMiwiRWxrRWRnZUltcGwiLDM1MiksSSg0MzksMTk4NSx7MTA1OjEsNDEzOjEsMjAyOjEsNDM5OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LHJkKSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBYM3QodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qO2Nhc2UgMjpyZXR1cm4gdGhpcy5rO2Nhc2UgMzpyZXR1cm4gdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhIaCx0aGlzLDUpKSx0aGlzLmE7Y2FzZSA2OnJldHVybiBsUXQodGhpcyk7Y2FzZSA3OnJldHVybiBuP2FzdCh0aGlzKTp0aGlzLmk7Y2FzZSA4OnJldHVybiBuP3NzdCh0aGlzKTp0aGlzLmY7Y2FzZSA5OnJldHVybiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLHRoaXMuZztjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IENuKFppLHRoaXMsMTAsOSkpLHRoaXMuZTtjYXNlIDExOnJldHVybiB0aGlzLmR9cmV0dXJuIFYzdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/WDN0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEsydCh0aGlzLHUoZSw3OSkscik7Y2FzZSA5OnJldHVybiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLFFjKHRoaXMuZyxlLHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oWmksdGhpcywxMCw5KSksUWModGhpcy5lLGUscil9cmV0dXJuIGg9dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoWmMoKSxZVikpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKChaYygpLFlWKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7c3dpdGNoKG4pe2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhIaCx0aGlzLDUpKSxCYSh0aGlzLmEsZSxyKTtjYXNlIDY6cmV0dXJuIEsydCh0aGlzLG51bGwscik7Y2FzZSA5OnJldHVybiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLEJhKHRoaXMuZyxlLHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oWmksdGhpcywxMCw5KSksQmEodGhpcy5lLGUscil9cmV0dXJuIE80dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiB0aGlzLmohPTA7Y2FzZSAyOnJldHVybiB0aGlzLmshPTA7Y2FzZSAzOnJldHVybiB0aGlzLmIhPTA7Y2FzZSA0OnJldHVybiB0aGlzLmMhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDY6cmV0dXJuISFsUXQodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5pO2Nhc2UgODpyZXR1cm4hIXRoaXMuZjtjYXNlIDk6cmV0dXJuISF0aGlzLmcmJnRoaXMuZy5pIT0wO2Nhc2UgMTA6cmV0dXJuISF0aGlzLmUmJnRoaXMuZS5pIT0wO2Nhc2UgMTE6cmV0dXJuIHRoaXMuZCE9bnVsbH1yZXR1cm4gR3d0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOkI4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSAyOmo4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSAzOkY4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSA0OlI4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IFNzKEhoLHRoaXMsNSkpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgU3MoSGgsdGhpcyw1KSkscnModGhpcy5hLHUobiwxNCkpO3JldHVybjtjYXNlIDY6VGNlKHRoaXMsdShuLDc5KSk7cmV0dXJuO2Nhc2UgNzpKJCh0aGlzLHUobiw4MikpO3JldHVybjtjYXNlIDg6WiQodGhpcyx1KG4sODIpKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLHhyKHRoaXMuZyksIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oWmksdGhpcyw5LDEwKSkscnModGhpcy5nLHUobiwxNCkpO3JldHVybjtjYXNlIDEwOiF0aGlzLmUmJih0aGlzLmU9bmV3IENuKFppLHRoaXMsMTAsOSkpLHhyKHRoaXMuZSksIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oWmksdGhpcywxMCw5KSkscnModGhpcy5lLHUobiwxNCkpO3JldHVybjtjYXNlIDExOm55dCh0aGlzLEJyKG4pKTtyZXR1cm59TXl0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLFlWfSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDE6QjgodGhpcywwKTtyZXR1cm47Y2FzZSAyOmo4KHRoaXMsMCk7cmV0dXJuO2Nhc2UgMzpGOCh0aGlzLDApO3JldHVybjtjYXNlIDQ6UjgodGhpcywwKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IFNzKEhoLHRoaXMsNSkpLHhyKHRoaXMuYSk7cmV0dXJuO2Nhc2UgNjpUY2UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OkokKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgODpaJCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6IXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oWmksdGhpcyw5LDEwKSkseHIodGhpcy5nKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5lJiYodGhpcy5lPW5ldyBDbihaaSx0aGlzLDEwLDkpKSx4cih0aGlzLmUpO3JldHVybjtjYXNlIDExOm55dCh0aGlzLG51bGwpO3JldHVybn1teXQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBxb2UodGhpcyl9LGwuYj0wLGwuYz0wLGwuZD1udWxsLGwuaj0wLGwuaz0wLFAoXzIsIkVsa0VkZ2VTZWN0aW9uSW1wbCIsNDM5KSxJKDE1MCwxMTUsezEwNToxLDkyOjEsOTA6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBlPT0wPyghdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYik6b2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0wPyghdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksUWModGhpcy5BYixlLHIpKToobz11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4odGhpcy56aCgpKSxlLHIpKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztyZXR1cm4gbj09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKSk6KG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKSl9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PTA/ISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA6c2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwub2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGt4dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwudWg9ZnVuY3Rpb24oZSl7dDYodGhpcywxMjgsZSl9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxaNGV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJufWxoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dGhpcy5CYnw9MX0sbC5IaD1mdW5jdGlvbihlKXtyZXR1cm4gbV8odGhpcyxlKX0sbC5CYj0wLFAoTW4sIkVNb2RlbEVsZW1lbnRJbXBsIiwxNTApLEkoNzA0LDE1MCx7MTA1OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSxxQiksbC5JaD1mdW5jdGlvbihlLG4pe3JldHVybiBKbGUodGhpcyxlLG4pfSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYodGhpcy5hIT1GbChlKXx8ZS5CYiYyNTYpdGhyb3cgcnQobmV3IFBuKFJjdCtlLnpiK2t3KSk7Zm9yKHM9U28oZSk7TGMocy5hKS5pIT0wOyl7aWYocj11KEVEKHMsMCwobj11KFN0KExjKHMuYSksMCksODcpLGg9bi5jLEV0KGgsODgpP3UoaCwyNik6KGRuKCksV2gpKSksMjYpLGN3KHIpKXJldHVybiBvPUZsKHIpLk5oKCkuSmgociksdShvLDQ5KS50aChlKSxvO3M9U28ocil9cmV0dXJuKGUuRCE9bnVsbD9lLkQ6ZS5CKT09ImphdmEudXRpbC5NYXAkRW50cnkiP25ldyBLS3QoZSk6bmV3IE52dChlKX0sbC5LaD1mdW5jdGlvbihlLG4pe3JldHVybiBwdyh0aGlzLGUsbil9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLmF9cmV0dXJuIG9oKHRoaXMsZS1abigoZG4oKSxTYikpLHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fFNiKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLFFjKHRoaXMuQWIsZSxyKTtjYXNlIDE6cmV0dXJuIHRoaXMuYSYmKHI9dSh0aGlzLmEsNDkpLmloKHRoaXMsNCxyMSxyKSksSHl0KHRoaXMsdShlLDIzNSkscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxTYikpLG4pLDY2KSxvLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLFNiKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSAxOnJldHVybiBIeXQodGhpcyxudWxsLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksU2IpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxTYikpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuISF0aGlzLmF9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxTYikpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fFNiKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOlRhZSh0aGlzLHUobiwyMzUpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLFNiKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8U2IpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksU2J9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpUYWUodGhpcyxudWxsKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLFNiKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8U2IpLGUpKX07dmFyIHJBLHpBdCxQNGU7UChNbiwiRUZhY3RvcnlJbXBsIiw3MDQpLEkod2YsNzA0LHsxMDU6MSwyMDE0OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSxKNSksbC5JaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMTI6cmV0dXJuIHUobiwxNDYpLnRnKCk7Y2FzZSAxMzpyZXR1cm4gJG8obik7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7c3dpdGNoKGUuRz09LTEmJihlLkc9KG49RmwoZSksbj9GZyhuLk1oKCksZSk6LTEpKSxlLkcpe2Nhc2UgNDpyZXR1cm4gaD1uZXcgWVQsaDtjYXNlIDY6cmV0dXJuIGQ9bmV3IEJwdCxkO2Nhc2UgNzpyZXR1cm4gdz1uZXcgUnB0LHc7Y2FzZSA4OnJldHVybiBzPW5ldyBmdixzO2Nhc2UgOTpyZXR1cm4gcj1uZXcgdnAscjtjYXNlIDEwOnJldHVybiBvPW5ldyByZCxvO2Nhc2UgMTE6cmV0dXJuIGs9bmV3IFlGLGs7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oUmN0K2UuemIra3cpKX19LGwuS2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS55aigpKXtjYXNlIDEzOmNhc2UgMTI6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxQKF8yLCJFbGtHcmFwaEZhY3RvcnlJbXBsIix3ZiksSSg0MzgsMTUwLHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9KSxsLldnPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gbj0oZT11KEluKHRoaXMsMTYpLDI2KSxEd3QocGQoZXx8dGhpcy56aCgpKSkpLG49PW51bGw/KFY5KCksVjkoKSxTZnQpOm5ldyBwV3QodGhpcyxuKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMubmUoKX1yZXR1cm4gb2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsfXJldHVybiBzaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6dGhpcy5MaChCcihuKSk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxKNGV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTp0aGlzLkxoKG51bGwpO3JldHVybn1saCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSxsLkxoPWZ1bmN0aW9uKGUpe1hjKHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWEModGhpcyl9LGwuemI9bnVsbCxQKE1uLCJFTmFtZWRFbGVtZW50SW1wbCIsNDM4KSxJKDE3OSw0MzgsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSwxMTQ6MSwxMTU6MSw2NzU6MX0sWVh0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBSc2UodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLnliO2Nhc2UgMzpyZXR1cm4gdGhpcy54YjtjYXNlIDQ6cmV0dXJuIHRoaXMuc2I7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxpMSx0aGlzKSksdGhpcy5yYjtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBJeChyMSx0aGlzLDYsNykpLHRoaXMudmI7Y2FzZSA3OnJldHVybiBuP3RoaXMuRGI+PjE2PT03P3UodGhpcy5DYiwyMzUpOm51bGw6aFF0KHRoaXMpfXJldHVybiBvaCh0aGlzLGUtWm4oKGRuKCksbnApKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHxucCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLFFjKHRoaXMuQWIsZSxyKTtjYXNlIDQ6cmV0dXJuIHRoaXMuc2ImJihyPXUodGhpcy5zYiw0OSkuaWgodGhpcywxLG5BLHIpKSxXeXQodGhpcyx1KGUsNDcxKSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBxbSh0aGlzLGkxLHRoaXMpKSxRYyh0aGlzLnJiLGUscik7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgSXgocjEsdGhpcyw2LDcpKSxRYyh0aGlzLnZiLGUscik7Y2FzZSA3OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1JzZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSx6bCh0aGlzLGUsNyxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLG5wKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksbnApKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDQ6cmV0dXJuIFd5dCh0aGlzLG51bGwscik7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxpMSx0aGlzKSksQmEodGhpcy5yYixlLHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IEl4KHIxLHRoaXMsNiw3KSksQmEodGhpcy52YixlLHIpO2Nhc2UgNzpyZXR1cm4gemwodGhpcyxudWxsLDcscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxucCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLG5wKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMueWIhPW51bGw7Y2FzZSAzOnJldHVybiB0aGlzLnhiIT1udWxsO2Nhc2UgNDpyZXR1cm4hIXRoaXMuc2I7Y2FzZSA1OnJldHVybiEhdGhpcy5yYiYmdGhpcy5yYi5pIT0wO2Nhc2UgNjpyZXR1cm4hIXRoaXMudmImJnRoaXMudmIuaSE9MDtjYXNlIDc6cmV0dXJuISFoUXQodGhpcyl9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxucCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fG5wKSxlKSl9LGwub2g9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49TTJuKHRoaXMsZSksbnx8a3h0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOlhjKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6YXoodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMzpzeih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA0OkRzdCh0aGlzLHUobiw0NzEpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxpMSx0aGlzKSkseHIodGhpcy5yYiksIXRoaXMucmImJih0aGlzLnJiPW5ldyBxbSh0aGlzLGkxLHRoaXMpKSxycyh0aGlzLnJiLHUobiwxNCkpO3JldHVybjtjYXNlIDY6IXRoaXMudmImJih0aGlzLnZiPW5ldyBJeChyMSx0aGlzLDYsNykpLHhyKHRoaXMudmIpLCF0aGlzLnZiJiYodGhpcy52Yj1uZXcgSXgocjEsdGhpcyw2LDcpKSxycyh0aGlzLnZiLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksbnApKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHxucCksZSksbil9LGwudmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZihlJiZ0aGlzLnJiKWZvcihyPW5ldyBlcih0aGlzLnJiKTtyLmUhPXIuaS5nYygpOyluPWRyKHIpLEV0KG4sMzUxKSYmKHUobiwzNTEpLnc9bnVsbCk7dDYodGhpcyw2NCxlKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLG5wfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6WGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmF6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMzpzeih0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6RHN0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNTohdGhpcy5yYiYmKHRoaXMucmI9bmV3IHFtKHRoaXMsaTEsdGhpcykpLHhyKHRoaXMucmIpO3JldHVybjtjYXNlIDY6IXRoaXMudmImJih0aGlzLnZiPW5ldyBJeChyMSx0aGlzLDYsNykpLHhyKHRoaXMudmIpO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksbnApKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxucCksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7bXN0KHRoaXMpfSxsLk1oPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBxbSh0aGlzLGkxLHRoaXMpKSx0aGlzLnJifSxsLk5oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2J9LGwuT2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51Yn0sbC5QaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnhifSxsLlFoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWJ9LGwuUmg9ZnVuY3Rpb24oZSl7dGhpcy51Yj1lfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/WEModGhpcyk6KGU9bmV3IFRoKFhDKHRoaXMpKSxlLmErPSIgKG5zVVJJOiAiLGZvKGUsdGhpcy55YiksZS5hKz0iLCBuc1ByZWZpeDogIixmbyhlLHRoaXMueGIpLGUuYSs9IikiLGUuYSl9LGwueGI9bnVsbCxsLnliPW51bGwsUChNbiwiRVBhY2thZ2VJbXBsIiwxNzkpLEkoNTU1LDE3OSx7MTA1OjEsMjAxNjoxLDU1NToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSwxMTQ6MSwxMTU6MSw2NzU6MX0sUW9lKSxsLnE9ITEsbC5yPSExO3ZhciBGNGU9ITE7UChfMiwiRWxrR3JhcGhQYWNrYWdlSW1wbCIsNTU1KSxJKDM1NCw3MjQsezEwNToxLDQxMzoxLDE2MDoxLDEzNzoxLDQ3MDoxLDM1NDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxZVCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gUTN0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuIGZRdCh0aGlzKTtjYXNlIDg6cmV0dXJuIHRoaXMuYX1yZXR1cm4gczN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSA3OnJldHVybiB0aGlzLkNiJiYocj0ocz10aGlzLkRiPj4xNixzPj0wP1EzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1zLG51bGwscikpKSxZdnQodGhpcyx1KGUsMTYwKSxyKX1yZXR1cm4gQXN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbj09Nz9ZdnQodGhpcyxudWxsLHIpOmZpdCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiEhZlF0KHRoaXMpO2Nhc2UgODpyZXR1cm4haG4oIiIsdGhpcy5hKX1yZXR1cm4gZjN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSA3OkE1dCh0aGlzLHUobiwxNjApKTtyZXR1cm47Y2FzZSA4OlltdCh0aGlzLEJyKG4pKTtyZXR1cm59aDR0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLFJBdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA3OkE1dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6WW10KHRoaXMsIiIpO3JldHVybn12M3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBSYWUodGhpcyl9LGwuYT0iIixQKF8yLCJFbGtMYWJlbEltcGwiLDM1NCksSSgyMzksNzI1LHsxMDU6MSw0MTM6MSw4MjoxLDE2MDoxLDMzOjEsNDcwOjEsMjM5OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LEJwdCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gZTR0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoZmwsdGhpcyw5LDkpKSx0aGlzLmM7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShucyx0aGlzLDEwLDExKSksdGhpcy5hO2Nhc2UgMTE6cmV0dXJuIHRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgaGUoV3MsdGhpcywxMiwzKSksdGhpcy5iO2Nhc2UgMTM6cmV0dXJuIEZuKCksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIGozdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBoZShmbCx0aGlzLDksOSkpLFFjKHRoaXMuYyxlLHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLFFjKHRoaXMuYSxlLHIpO2Nhc2UgMTE6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/ZTR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLHJ2dCh0aGlzLHUoZSwzMykscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBoZShXcyx0aGlzLDEyLDMpKSxRYyh0aGlzLmIsZSxyKX1yZXR1cm4gaTR0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2gobil7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKGZsLHRoaXMsOSw5KSksQmEodGhpcy5jLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShucyx0aGlzLDEwLDExKSksQmEodGhpcy5hLGUscik7Y2FzZSAxMTpyZXR1cm4gcnZ0KHRoaXMsbnVsbCxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IGhlKFdzLHRoaXMsMTIsMykpLEJhKHRoaXMuYixlLHIpfXJldHVybiBzNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSAxMTpyZXR1cm4hIXRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMTM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEF5dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBoZShmbCx0aGlzLDksOSkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoZmwsdGhpcyw5LDkpKSxycyh0aGlzLmMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHJzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMTpDNXQodGhpcyx1KG4sMzMpKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5iJiYodGhpcy5iPW5ldyBoZShXcyx0aGlzLDEyLDMpKSx4cih0aGlzLmIpLCF0aGlzLmImJih0aGlzLmI9bmV3IGhlKFdzLHRoaXMsMTIsMykpLHJzKHRoaXMuYix1KG4sMTQpKTtyZXR1cm59ZzV0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLGpBdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA5OiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKGZsLHRoaXMsOSw5KSkseHIodGhpcy5jKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5hJiYodGhpcy5hPW5ldyBoZShucyx0aGlzLDEwLDExKSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSAxMTpDNXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5iJiYodGhpcy5iPW5ldyBoZShXcyx0aGlzLDEyLDMpKSx4cih0aGlzLmIpO3JldHVybn1JM3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBINXQodGhpcyl9LFAoXzIsIkVsa05vZGVJbXBsIiwyMzkpLEkoMTg2LDcyNSx7MTA1OjEsNDEzOjEsODI6MSwxNjA6MSwxMTg6MSw0NzA6MSwxODY6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sUnB0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBaM3QodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIGU9PTk/azEodGhpcyk6ajN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSA5OnJldHVybiB0aGlzLkNiJiYocj0ocz10aGlzLkRiPj4xNixzPj0wP1ozdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1zLG51bGwscikpKSxZMnQodGhpcyx1KGUsMzMpLHIpfXJldHVybiBpNHQodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuPT05P1kydCh0aGlzLG51bGwscik6czR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiBlPT05PyEhazEodGhpcyk6QXl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSA5OlQ1dCh0aGlzLHUobiwzMykpO3JldHVybn1nNXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksJEF0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDk6VDV0KHRoaXMsbnVsbCk7cmV0dXJufUkzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFR1ZSh0aGlzKX0sUChfMiwiRWxrUG9ydEltcGwiLDE4Nik7dmFyIEI0ZT1ZaShSYSwiQmFzaWNFTWFwL0VudHJ5Iik7SSgxMDkyLDExNSx7MTA1OjEsNDI6MSw5MjoxLDkwOjEsMTMzOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LFlGKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSXYodGhpcyl9LGwuVWg9ZnVuY3Rpb24oZSl7WG10KHRoaXMsdShlLDE0NikpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmN9cmV0dXJuIGp6KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmMhPW51bGx9cmV0dXJuIGVzdCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDpYbXQodGhpcyx1KG4sMTQ2KSk7cmV0dXJuO2Nhc2UgMTpKbXQodGhpcyxuKTtyZXR1cm59anN0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLEVifSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6WG10KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTpKbXQodGhpcyxudWxsKTtyZXR1cm59TnN0KHRoaXMsZSl9LGwuU2g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5hPT0tMSYmKGU9dGhpcy5iLHRoaXMuYT1lP0hpKGUpOjApLHRoaXMuYX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuVGg9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dGhpcy5jLEptdCh0aGlzLGUpLG59LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9iZih0aGlzKTooZT1uZXcgX3AsVnIoVnIoVnIoZSx0aGlzLmI/dGhpcy5iLnRnKCk6VHUpLFBvdCksZEModGhpcy5jKSksZS5hKX0sbC5hPS0xLGwuYz1udWxsO3ZhciAkdz1QKF8yLCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeUltcGwiLDEwOTIpO0koOTg0LDEse30sWEYpLFAod2EsIkpzb25BZGFwdGVyIiw5ODQpLEkoMjEwLDYwLFUwLGFkKSxQKHdhLCJKc29uSW1wb3J0RXhjZXB0aW9uIiwyMTApLEkoODU3LDEse30sanNlKSxQKHdhLCJKc29uSW1wb3J0ZXIiLDg1NyksSSg4OTEsMSx7fSxnVnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMCRUeXBlIiw4OTEpLEkoODkyLDEse30scFZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEkVHlwZSIsODkyKSxJKDkwMCwxLHt9LFkkdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxMCRUeXBlIiw5MDApLEkoOTAyLDEse30sYlZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDExJFR5cGUiLDkwMiksSSg5MDMsMSx7fSx2VnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTIkVHlwZSIsOTAzKSxJKDkwOSwxLHt9LExYdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxMyRUeXBlIiw5MDkpLEkoOTA4LDEse30sQVh0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE0JFR5cGUiLDkwOCksSSg5MDQsMSx7fSx3VnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTUkVHlwZSIsOTA0KSxJKDkwNSwxLHt9LG1WdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxNiRUeXBlIiw5MDUpLEkoOTA2LDEse30seVZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE3JFR5cGUiLDkwNiksSSg5MDcsMSx7fSx4VnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTgkVHlwZSIsOTA3KSxJKDkxMiwxLHt9LFgkdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxOSRUeXBlIiw5MTIpLEkoODkzLDEse30sUSR0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIkVHlwZSIsODkzKSxJKDkxMCwxLHt9LFokdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyMCRUeXBlIiw5MTApLEkoOTExLDEse30sSiR0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIxJFR5cGUiLDkxMSksSSg5MTUsMSx7fSx0enQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjIkVHlwZSIsOTE1KSxJKDkxMywxLHt9LGV6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyMyRUeXBlIiw5MTMpLEkoOTE0LDEse30sbnp0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI0JFR5cGUiLDkxNCksSSg5MTcsMSx7fSxyenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjUkVHlwZSIsOTE3KSxJKDkxNiwxLHt9LGl6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyNiRUeXBlIiw5MTYpLEkoOTE4LDEsVW4sa1Z0KSxsLnRkPWZ1bmN0aW9uKGUpe3Nhbih0aGlzLmIsdGhpcy5hLEJyKGUpKX0sUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyNyRUeXBlIiw5MTgpLEkoOTE5LDEsVW4sRVZ0KSxsLnRkPWZ1bmN0aW9uKGUpe2Fhbih0aGlzLmIsdGhpcy5hLEJyKGUpKX0sUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyOCRUeXBlIiw5MTkpLEkoOTIwLDEse30sVFZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI5JFR5cGUiLDkyMCksSSg4OTYsMSx7fSxzenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMyRUeXBlIiw4OTYpLEkoOTIxLDEse30sQ1Z0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMwJFR5cGUiLDkyMSksSSg5MjIsMSx7fSxhenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzEkVHlwZSIsOTIyKSxJKDkyMywxLHt9LG96dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzMiRUeXBlIiw5MjMpLEkoOTI0LDEse30sY3p0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMzJFR5cGUiLDkyNCksSSg5MjUsMSx7fSx1enQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzQkVHlwZSIsOTI1KSxJKDg1OSwxLHt9LGx6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzNSRUeXBlIiw4NTkpLEkoOTI5LDEse30seUt0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM2JFR5cGUiLDkyOSksSSg5MjYsMSxVbixoenQpLGwudGQ9ZnVuY3Rpb24oZSl7dXNuKHRoaXMuYSx1KGUsNDY5KSl9LFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzckVHlwZSIsOTI2KSxJKDkyNywxLFVuLElWdCksbC50ZD1mdW5jdGlvbihlKXtCWWUodGhpcy5hLHRoaXMuYix1KGUsMjAyKSl9LFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzgkVHlwZSIsOTI3KSxJKDkyOCwxLFVuLERWdCksbC50ZD1mdW5jdGlvbihlKXtSWWUodGhpcy5hLHRoaXMuYix1KGUsMjAyKSl9LFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzkkVHlwZSIsOTI4KSxJKDg5NCwxLHt9LGZ6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ0JFR5cGUiLDg5NCksSSg5MzAsMSxVbixkenQpLGwudGQ9ZnVuY3Rpb24oZSl7bHNuKHRoaXMuYSx1KGUsOCkpfSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDQwJFR5cGUiLDkzMCksSSg4OTUsMSx7fSxnenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkNSRUeXBlIiw4OTUpLEkoODk5LDEse30scHp0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDYkVHlwZSIsODk5KSxJKDg5NywxLHt9LGJ6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ3JFR5cGUiLDg5NyksSSg4OTgsMSx7fSx2enQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkOCRUeXBlIiw4OTgpLEkoOTAxLDEse30sd3p0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDkkVHlwZSIsOTAxKSxJKDk0OCwxLFVuLG16dCksbC50ZD1mdW5jdGlvbihlKXtCeCh0aGlzLmEsbmV3IEhtKEJyKGUpKSl9LFAod2EsIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMCRUeXBlIiw5NDgpLEkoOTQ5LDEsVW4seXp0KSxsLnRkPWZ1bmN0aW9uKGUpe19lbih0aGlzLmEsdShlLDIzNykpfSxQKHdhLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDEkVHlwZSIsOTQ5KSxJKDk1MCwxLFVuLHh6dCksbC50ZD1mdW5jdGlvbihlKXtFcm4odGhpcy5hLHUoZSwxNDkpKX0sUCh3YSwiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQyJFR5cGUiLDk1MCksSSg5NTEsMSxVbixrenQpLGwudGQ9ZnVuY3Rpb24oZSl7U2VuKHRoaXMuYSx1KGUsMTc1KSl9LFAod2EsIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMyRUeXBlIiw5NTEpLEkoMjM3LDIyLHszOjEsMzU6MSwyMjoxLDIzNzoxfSxTeCk7dmFyIFhWLFFWLHlmdCxaVixKVix0VSx4ZnQsa2Z0LGVVPWpyKEJELCJHcmFwaEZlYXR1cmUiLDIzNyxIcixZYW4sUUplKSxSNGU7SSgxMywxLHszNToxLDE0NjoxfSxHaSxPcyxtbixlbyksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRlhlKHRoaXMsdShlLDE0NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBYWHQodGhpcyxlKX0sbC53Zz1mdW5jdGlvbigpe3JldHVybiBEZSh0aGlzKX0sbC50Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQmcodGhpcy5iKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LFAoQkQsIlByb3BlcnR5IiwxMyksSSg4MTgsMSxPaSxicHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGxuKHRoaXMsdShlLDk0KSx1KG4sOTQpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEJELCJQcm9wZXJ0eUhvbGRlckNvbXBhcmF0b3IiLDgxOCksSSg2OTUsMSxyYSx2cHQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBsYW4odGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtwSHQoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5hfSxQKHlILCJFbGtHcmFwaFV0aWwvQW5jZXN0b3JJdGVyYXRvciIsNjk1KTt2YXIgcUF0PVlpKFJhLCJFTGlzdCIpO0koNjcsNTIsezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjF9KSxsLlZjPWZ1bmN0aW9uKGUsbil7SkModGhpcyxlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBNcih0aGlzLGUpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHl5dCh0aGlzLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHJzKHRoaXMsZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE14KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sbC5haT1mdW5jdGlvbigpe3JldHVybiEwfSxsLmJpPWZ1bmN0aW9uKGUsbil7fSxsLmNpPWZ1bmN0aW9uKCl7fSxsLmRpPWZ1bmN0aW9uKGUsbil7QnJ0KHRoaXMsZSxuKX0sbC5laT1mdW5jdGlvbihlLG4scil7fSxsLmZpPWZ1bmN0aW9uKGUsbil7fSxsLmdpPWZ1bmN0aW9uKGUsbixyKXt9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGx1ZSh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHB5dCh0aGlzKX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlcih0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTHgodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7dmFyIG47aWYobj10aGlzLmdjKCksZTwwfHxlPm4pdGhyb3cgcnQobmV3IGptKGUsbikpO3JldHVybiBuZXcgcW50KHRoaXMsZSl9LGwuamk9ZnVuY3Rpb24oZSxuKXt0aGlzLmlpKGUsdGhpcy5YYyhuKSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGokKHRoaXMsZSl9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB1NCh0aGlzLGUsbil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbzN0KHRoaXMpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUTgodGhpcyxuKX0sUChSYSwiQWJzdHJhY3RFTGlzdCIsNjcpLEkoNjMsNjcsX2QsdHgsS3Ysb3l0KSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIExzdCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGZzZSh0aGlzLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7ekkodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe3VJKHRoaXMsZSl9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIEFtdCh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7UkModGhpcyl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZFKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0KHRoaXMsZSl9LGwucWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzOysrdGhpcy5qLHI9dGhpcy5nPT1udWxsPzA6dGhpcy5nLmxlbmd0aCxlPnImJihzPXRoaXMuZyxuPXIrKHIvMnwwKSs0LG48ZSYmKG49ZSksdGhpcy5nPXRoaXMucmkobikscyE9bnVsbCYmSWMocywwLHRoaXMuZywwLHRoaXMuaSkpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBPc2UodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmk9PTB9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcXN0KHRoaXMsZSxuKX0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gUHQoWG4sSWUsMSxlLDUsMSl9LGwua2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ1tlXX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gcjYodGhpcyxlKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiBLcnQodGhpcyxlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBKd3QodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG0zdCh0aGlzLGUpfSxsLmk9MDt2YXIgSEF0PVAoUmEsIkJhc2ljRUxpc3QiLDYzKSxHQXQ9WWkoUmEsIlRyZWVJdGVyYXRvciIpO0koNjk0LDYzLFljdCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZz09bnVsbCYmIXRoaXMuYz9Gd3QodGhpcyk6dGhpcy5nPT1udWxsfHx0aGlzLmkhPTAmJnUodGhpcy5nW3RoaXMuaS0xXSw0NykuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBhcSh0aGlzKX0sbC5RYj1mdW5jdGlvbigpe2lmKCF0aGlzLmUpdGhyb3cgcnQobmV3IEZvKCJUaGVyZSBpcyBubyB2YWxpZCBvYmplY3QgdG8gcmVtb3ZlLiIpKTt0aGlzLmUuUWIoKX0sbC5jPSExLFAoUmEsIkFic3RyYWN0VHJlZUl0ZXJhdG9yIiw2OTQpLEkoNjg1LDY5NCxZY3QscjJ0KSxsLnNpPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUoZSw1NikuV2coKS5LYygpLEV0KG4sMjc5KSYmdShuLDI3OSkuTmsobmV3IFVaKSxufSxQKHlILCJFbGtHcmFwaFV0aWwvUHJvcGVydGllc1NraXBwaW5nVHJlZUl0ZXJhdG9yIiw2ODUpLEkoOTUyLDEse30sVVopLFAoeUgsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IvMSIsOTUyKTt2YXIgY04sRWZ0LHVOPVAoeUgsIkVsa1JlZmxlY3QiLG51bGwpO0koODg5LDEsU3ksWFQpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGckKCksUHNuKHUoZSwxNzQpKX0sUCh5SCwiRWxrUmVmbGVjdC9sYW1iZGEkMCRUeXBlIiw4ODkpO3ZhciBUYjtZaShSYSwiUmVzb3VyY2VMb2NhdG9yIiksSSgxMDUxLDEse30pLFAoUmEsIkRlbGVnYXRpbmdSZXNvdXJjZUxvY2F0b3IiLDEwNTEpLEkoMTA1MiwxMDUxLHt9KSxQKCJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIiwiRU1GUGx1Z2luIiwxMDUyKTt2YXIgVGZ0PVlpKHMwZSwiQWRhcHRlciIpLHl4bj1ZaShzMGUsIk5vdGlmaWNhdGlvbiIpO0koMTE1MywxLE04dCksbC50aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwudWk9ZnVuY3Rpb24oZSl7fSxsLnZpPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfSxsLndpPWZ1bmN0aW9uKGUpe3RoaXMuZD09ZSYmKHRoaXMuZD1udWxsKX0sbC5kPW51bGwsUChrNiwiQWRhcHRlckltcGwiLDExNTMpLEkoMTk5NSw2NyxhMGUpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZDN0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoKyt0aGlzLmosZS5kYygpKXJldHVybiExO2ZvcihuPXRoaXMuVmkoKSxzPWUuS2MoKTtzLk9iKCk7KXI9cy5QYigpLHRoaXMuSWkodGhpcy5vaShuLHIpKSwrK247cmV0dXJuITB9LGwuWGg9ZnVuY3Rpb24oZSxuKXtBV3QodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe25YdCh0aGlzLGUpfSxsLkdpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSmkoKX0sbC4kYj1mdW5jdGlvbigpe2pNKHRoaXMsdGhpcy5WaSgpLHRoaXMuV2koKSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTGkoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTWkoZSl9LGwuSGk9ZnVuY3Rpb24oZSxuKXt0aGlzLlNpKCkuam0oKX0sbC5JaT1mdW5jdGlvbihlKXt0aGlzLlNpKCkuam0oKX0sbC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCl9LGwuS2k9ZnVuY3Rpb24oKXt0aGlzLlNpKCkuam0oKX0sbC5MaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuTWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLk5pPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5PaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuUGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuUWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlJpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlRpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5VaT1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5WaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5XaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5YaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuWWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTmkoZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGkoZSx0aGlzLk9pKGUpKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBpKCl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuUWkoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SaSgpfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE00dCh0aGlzLGUsbil9LGwua2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuT2koZSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIERqKHRoaXMsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dGhpcy5YYyhlKSxuPj0wPyh0aGlzLiRjKG4pLCEwKTohMX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLlVpKGUsdGhpcy5vaShlLG4pKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlZpKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XaSgpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlhpKGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWkoKX0sUChSYSwiRGVsZWdhdGluZ0VMaXN0IiwxOTk1KSxJKDE5OTYsMTk5NSxhMGUpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWjV0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5WaCh0aGlzLlZpKCksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtZb2UodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpeyRvZSh0aGlzLGUpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYmooKX0sbC4kYj1mdW5jdGlvbigpe0NfKHRoaXMpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBaWHQodGhpcyxlLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe21pKHRoaXMuQWkoKSxlKX0sbC5faT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLmNqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuZGo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5laj1mdW5jdGlvbigpe3JldHVybiExfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuUmkoKX0sbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIHRoaXMuZWooKT8ocz10aGlzLmZqKCkscj1NNHQodGhpcyxlLG4pLHRoaXMuJGkodGhpcy5aaSg3LGRlKG4pLHIsZSxzKSkscik6TTR0KHRoaXMsZSxuKX0sbC4kYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyZXR1cm4gdGhpcy5laigpPyhyPW51bGwscz10aGlzLmZqKCksbj10aGlzLlppKDQsbz1Eaih0aGlzLGUpLG51bGwsZSxzKSx0aGlzLmJqKCkmJm8/KHI9dGhpcy5kaihvLHIpLHI/KHIuRWkobiksci5GaSgpKTp0aGlzLiRpKG4pKTpyPyhyLkVpKG4pLHIuRmkoKSk6dGhpcy4kaShuKSxvKToobz1Eaih0aGlzLGUpLHRoaXMuYmooKSYmbyYmKHI9dGhpcy5kaihvLG51bGwpLHImJnIuRmkoKSksbyl9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcmxlKHRoaXMsZSxuKX0sUChrNiwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsIiwxOTk2KSxJKDE0MywxLFFEKSxsLkVpPWZ1bmN0aW9uKGUpe3JldHVybiB2NHQodGhpcyxlKX0sbC5GaT1mdW5jdGlvbigpe1VydCh0aGlzKX0sbC54aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5naj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybi0xfSxsLnppPWZ1bmN0aW9uKCl7cmV0dXJuIEhjZSh0aGlzKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLkJpPWZ1bmN0aW9uKCl7cmV0dXJuIE81dCh0aGlzKX0sbC5DaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vfSxsLmhqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOnN3aXRjaChvPWUueGkoKSxvKXtjYXNlIDE6Y2FzZSAyOmlmKGg9ZS5BaSgpLEd0KGgpPT09R3QodGhpcy5BaSgpKSYmdGhpcy55aShudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5nPWUuemkoKSxlLnhpKCk9PTEmJih0aGlzLmQ9MSksITB9Y2FzZSA0Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSA0OntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuQWkoKSkmJnRoaXMueWkobnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIEM9cHh0KHRoaXMpLGs9dGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubyxkPWUuQ2koKSx0aGlzLmQ9NixGPW5ldyBLdigyKSxrPD1kPyhNcihGLHRoaXMubiksTXIoRixlLkJpKCkpLHRoaXMuZz1jdChvdChUciwxKSxYciwyNSwxNSxbdGhpcy5vPWssZCsxXSkpOihNcihGLGUuQmkoKSksTXIoRix0aGlzLm4pLHRoaXMuZz1jdChvdChUciwxKSxYciwyNSwxNSxbdGhpcy5vPWQsa10pKSx0aGlzLm49RixDfHwodGhpcy5vPS0yLXRoaXMuby0xKSwhMDticmVha319YnJlYWt9Y2FzZSA2Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSA0OntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuQWkoKSkmJnRoaXMueWkobnVsbCk9PWUueWkobnVsbCkpe2ZvcihDPXB4dCh0aGlzKSxkPWUuQ2koKSxNPXUodGhpcy5nLDQ4KSxzPVB0KFRyLFhyLDI1LE0ubGVuZ3RoKzEsMTUsMSksbj0wO248TS5sZW5ndGgmJih3PU1bbl0sdzw9ZCk7KXNbbisrXT13LCsrZDtmb3Iocj11KHRoaXMubiwxNSksci5WYyhuLGUuQmkoKSksc1tuXT1kOysrbjxzLmxlbmd0aDspc1tuXT1NW24tMV07cmV0dXJuIHRoaXMuZz1zLEN8fCh0aGlzLm89LTItc1swXSksITB9YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzO3N3aXRjaChzPW5ldyBUaChBcCh0aGlzLmdtKSsiQCIrKG49SGkodGhpcyk+Pj4wLG4udG9TdHJpbmcoMTYpKSkscy5hKz0iIChldmVudFR5cGU6ICIsdGhpcy5kKXtjYXNlIDE6e3MuYSs9IlNFVCI7YnJlYWt9Y2FzZSAyOntzLmErPSJVTlNFVCI7YnJlYWt9Y2FzZSAzOntzLmErPSJBREQiO2JyZWFrfWNhc2UgNTp7cy5hKz0iQUREX01BTlkiO2JyZWFrfWNhc2UgNDp7cy5hKz0iUkVNT1ZFIjticmVha31jYXNlIDY6e3MuYSs9IlJFTU9WRV9NQU5ZIjticmVha31jYXNlIDc6e3MuYSs9Ik1PVkUiO2JyZWFrfWNhc2UgODp7cy5hKz0iUkVNT1ZJTkdfQURBUFRFUiI7YnJlYWt9Y2FzZSA5OntzLmErPSJSRVNPTFZFIjticmVha31kZWZhdWx0Ont1ZXQocyx0aGlzLmQpO2JyZWFrfX1pZihJdWUodGhpcykmJihzLmErPSIsIHRvdWNoOiB0cnVlIikscy5hKz0iLCBwb3NpdGlvbjogIix1ZXQocyx0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vKSxzLmErPSIsIG5vdGlmaWVyOiAiLG9DKHMsdGhpcy5BaSgpKSxzLmErPSIsIGZlYXR1cmU6ICIsb0Mocyx0aGlzLl9pKCkpLHMuYSs9Iiwgb2xkVmFsdWU6ICIsb0MocyxPNXQodGhpcykpLHMuYSs9IiwgbmV3VmFsdWU6ICIsdGhpcy5kPT02JiZFdCh0aGlzLmcsNDgpKXtmb3Iocj11KHRoaXMuZyw0OCkscy5hKz0iWyIsZT0wO2U8ci5sZW5ndGg7KXMuYSs9cltlXSwrK2U8ci5sZW5ndGgmJihzLmErPUthKTtzLmErPSJdIn1lbHNlIG9DKHMsSGNlKHRoaXMpKTtyZXR1cm4gcy5hKz0iLCBpc1RvdWNoOiAiLGtnKHMsSXVlKHRoaXMpKSxzLmErPSIsIHdhc1NldDogIixrZyhzLHB4dCh0aGlzKSkscy5hKz0iKSIscy5hfSxsLmQ9MCxsLmU9MCxsLmY9MCxsLmo9MCxsLms9MCxsLm89MCxsLnA9MCxQKGs2LCJOb3RpZmljYXRpb25JbXBsIiwxNDMpLEkoMTE2NywxNDMsUUQsWlh0KSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5faSgpfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuYWooKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuQWkoKX0sUChrNiwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsLzEiLDExNjcpLEkoMjQyLDYzLF9kLGV4LFNwKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBvaWUodGhpcyx1KGUsMzY2KSl9LGwuRWk9ZnVuY3Rpb24oZSl7cmV0dXJuIG9pZSh0aGlzLGUpfSxsLkZpPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihlPTA7ZTx0aGlzLmk7KytlKW49dSh0aGlzLmdbZV0sMzY2KSxyPW4uQWkoKSxyIT1udWxsJiZuLnhpKCkhPS0xJiZ1KHIsOTIpLk5nKG4pfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBQdCh5eG4sSWUsMzY2LGUsMCwxKX0sUChrNiwiTm90aWZpY2F0aW9uQ2hhaW5JbXBsIiwyNDIpLEkoMTM3OCw5MCx3ZGUpLGwuS2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZiYxKSE9MH0sbC5mPTEsUChrNiwiTm90aWZpZXJJbXBsIiwxMzc4KSxJKDE5OTMsNjMsX2QpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaGF0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5WaCh0aGlzLmksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXthNXQodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe0hzdCh0aGlzLGUpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYmooKX0sbC4kYj1mdW5jdGlvbigpe3hyKHRoaXMpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBKWHQodGhpcyxlLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe21pKHRoaXMuQWkoKSxlKX0sbC5faT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLmlqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuY2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5kaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRfKHRoaXMsZSxuKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gZHkodGhpcyxlKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB3bGUodGhpcyxlLG4pfSxsLmpqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwua2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5saj1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LFAoazYsIk5vdGlmeWluZ0xpc3RJbXBsIiwxOTkzKSxJKDExNjYsMTQzLFFELEpYdCksbC5faT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuX2koKX0sbC55aT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLmFqKCl9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkFpKCl9LFAoazYsIk5vdGlmeWluZ0xpc3RJbXBsLzEiLDExNjYpLEkoOTUzLDYzLF9kLElXdCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pPjEwPygoIXRoaXMuYnx8dGhpcy5jLmohPXRoaXMuYSkmJih0aGlzLmI9bmV3IHlDKHRoaXMpLHRoaXMuYT10aGlzLmopLFMwKHRoaXMuYixlKSk6ZkUodGhpcyxlKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLmE9MCxQKFJhLCJBYnN0cmFjdEVMaXN0LzEiLDk1MyksSSgyOTUsNzMsc290LGptKSxQKFJhLCJBYnN0cmFjdEVMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMjk1KSxJKDQwLDEscmEsZXIpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuaS5qIT10aGlzLmYpdGhyb3cgcnQobmV3IGVoKX0sbC5uaj1mdW5jdGlvbigpe3JldHVybiBkcih0aGlzKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPXRoaXMuaS5nYygpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmooKX0sbC5RYj1mdW5jdGlvbigpe3VfKHRoaXMpfSxsLmU9MCxsLmY9MCxsLmc9LTEsUChSYSwiQWJzdHJhY3RFTGlzdC9FSXRlcmF0b3IiLDQwKSxJKDI3OCw0MCxKZCxMeCxxbnQpLGwuUWI9ZnVuY3Rpb24oKXt1Xyh0aGlzKX0sbC5SYj1mdW5jdGlvbihlKXtnaWUodGhpcyxlKX0sbC5vaj1mdW5jdGlvbigpe3ZhciBlO3RyeXtyZXR1cm4gZT10aGlzLmQuWGIoLS10aGlzLmUpLHRoaXMubWooKSx0aGlzLmc9dGhpcy5lLGV9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxFdChuLDczKT8odGhpcy5taigpLHJ0KG5ldyBsYykpOnJ0KG4pfX0sbC5waj1mdW5jdGlvbihlKXtwc2UodGhpcyxlKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPTB9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2ooKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUtMX0sbC5XYj1mdW5jdGlvbihlKXt0aGlzLnBqKGUpfSxQKFJhLCJBYnN0cmFjdEVMaXN0L0VMaXN0SXRlcmF0b3IiLDI3OCksSSgzNDEsNDAscmEsTXgpLGwubmo9ZnVuY3Rpb24oKXtyZXR1cm4gbnN0KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sUChSYSwiQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDM0MSksSSgzODUsMjc4LEpkLFBNLGx2dCksbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLm5qPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e3JldHVybiBlPXRoaXMuYy5raSh0aGlzLmUpLHRoaXMubWooKSx0aGlzLmc9dGhpcy5lKyssZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpPyh0aGlzLm1qKCkscnQobmV3IGxjKSk6cnQobil9fSxsLm9qPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e3JldHVybiBlPXRoaXMuYy5raSgtLXRoaXMuZSksdGhpcy5taigpLHRoaXMuZz10aGlzLmUsZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpPyh0aGlzLm1qKCkscnQobmV3IGxjKSk6cnQobil9fSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxQKFJhLCJBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VMaXN0SXRlcmF0b3IiLDM4NSksSSgxOTgyLDY3LG8wZSksbC5WaD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYobz1uLmdjKCksbyE9MCl7Zm9yKEM9dShJbih0aGlzLmEsNCksMTI2KSxNPUM9PW51bGw/MDpDLmxlbmd0aCxIPU0rbyxzPVRpdCh0aGlzLEgpLEY9TS1lLEY+MCYmSWMoQyxlLHMsZStvLEYpLGs9bi5LYygpLGQ9MDtkPG87KytkKXc9ay5QYigpLHI9ZStkLFhldChzLHIsUTgodGhpcyx3KSk7Zm9yKGNFKHRoaXMscyksaD0wO2g8bzsrK2gpdz1zW2VdLHRoaXMuYmkoZSx3KSwrK2U7cmV0dXJuITB9ZWxzZSByZXR1cm4rK3RoaXMuaiwhMX0sbC5XaD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYocz1lLmdjKCkscyE9MCl7Zm9yKGs9KHI9dShJbih0aGlzLmEsNCksMTI2KSxyPT1udWxsPzA6ci5sZW5ndGgpLEM9aytzLG49VGl0KHRoaXMsQyksdz1lLktjKCksaD1rO2g8QzsrK2gpZD13LlBiKCksWGV0KG4saCxROCh0aGlzLGQpKTtmb3IoY0UodGhpcyxuKSxvPWs7bzxDOysrbylkPW5bb10sdGhpcy5iaShvLGQpO3JldHVybiEwfWVsc2UgcmV0dXJuKyt0aGlzLmosITF9LGwuWGg9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDtzPXUoSW4odGhpcy5hLDQpLDEyNiksbz1zPT1udWxsPzA6cy5sZW5ndGgscj1UaXQodGhpcyxvKzEpLGg9UTgodGhpcyxuKSxlIT1vJiZJYyhzLGUscixlKzEsby1lKSxKaShyLGUsaCksY0UodGhpcyxyKSx0aGlzLmJpKGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3M9KHI9dShJbih0aGlzLmEsNCksMTI2KSxyPT1udWxsPzA6ci5sZW5ndGgpLG49VGl0KHRoaXMscysxKSxYZXQobixzLFE4KHRoaXMsZSkpLGNFKHRoaXMsbiksdGhpcy5iaShzLGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtSnQodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9ZdCh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXt2YXIgbixyO2lmKHI9KG49dShJbih0aGlzLmEsNCksMTI2KSxuPT1udWxsPzA6bi5sZW5ndGgpLGU8MHx8ZT5yKXRocm93IHJ0KG5ldyBqbShlLHIpKTtyZXR1cm4gbmV3IHVYdCh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGUsbjsrK3RoaXMuaixlPXUoSW4odGhpcy5hLDQpLDEyNiksbj1lPT1udWxsPzA6ZS5sZW5ndGgsY0UodGhpcyxudWxsKSxCcnQodGhpcyxuLGUpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYobj11KEluKHRoaXMuYSw0KSwxMjYpLG4hPW51bGwpe2lmKGUhPW51bGwpe2ZvcihzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylpZihyPXNbb10seWkoZSxyKSlyZXR1cm4hMH1lbHNlIGZvcihzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylpZihyPXNbb10sR3Qocik9PT1HdChlKSlyZXR1cm4hMH1yZXR1cm4hMX0sbC5YYj1mdW5jdGlvbihlKXt2YXIgbixyO2lmKG49dShJbih0aGlzLmEsNCksMTI2KSxyPW49PW51bGw/MDpuLmxlbmd0aCxlPj1yKXRocm93IHJ0KG5ldyBqbShlLHIpKTtyZXR1cm4gbltlXX0sbC5YYz1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYobj11KEluKHRoaXMuYSw0KSwxMjYpLG4hPW51bGwpe2lmKGUhPW51bGwpe2ZvcihyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKHlpKGUsbltyXSkpcmV0dXJuIHJ9ZWxzZSBmb3Iocj0wLHM9bi5sZW5ndGg7cjxzOysrcilpZihHdChuW3JdKT09PUd0KGUpKXJldHVybiByfXJldHVybi0xfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcy5hLDQpLDEyNik9PW51bGx9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdKdCh0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRFl0KHRoaXMpfSxsLlpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYocj0obj11KEluKHRoaXMuYSw0KSwxMjYpLG49PW51bGw/MDpuLmxlbmd0aCksZTwwfHxlPnIpdGhyb3cgcnQobmV3IGptKGUscikpO3JldHVybiBuZXcgY1h0KHRoaXMsZSl9LGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87aWYocj1raWUodGhpcyksbz1yPT1udWxsPzA6ci5sZW5ndGgsZT49byl0aHJvdyBydChuZXcgbW8oV2N0K2UrUzIrbykpO2lmKG4+PW8pdGhyb3cgcnQobmV3IG1vKEtjdCtuK1MyK28pKTtyZXR1cm4gcz1yW25dLGUhPW4mJihlPG4/SWMocixlLHIsZSsxLG4tZSk6SWMocixuKzEscixuLGUtbiksSmkocixlLHMpLGNFKHRoaXMscikpLHN9LGwua2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoSW4odGhpcy5hLDQpLDEyNilbZV19LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIENwbih0aGlzLGUpfSxsLm1pPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gcj1raWUodGhpcykscz1yW2VdLFhldChyLGUsUTgodGhpcyxuKSksY0UodGhpcyxyKSxzfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dShJbih0aGlzLmEsNCksMTI2KSxlPT1udWxsPzA6ZS5sZW5ndGh9LGwuUGM9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7cmV0dXJuIGU9dShJbih0aGlzLmEsNCksMTI2KSxyPWU9PW51bGw/MDplLmxlbmd0aCxuPVB0KFRmdCxKY3QsNDE1LHIsMCwxKSxyPjAmJkljKGUsMCxuLDAsciksbn0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIG49dShJbih0aGlzLmEsNCksMTI2KSxzPW49PW51bGw/MDpuLmxlbmd0aCxzPjAmJihlLmxlbmd0aDxzJiYocj1DSShzbChlKS5jLHMpLGU9ciksSWMobiwwLGUsMCxzKSksZS5sZW5ndGg+cyYmSmkoZSxzLG51bGwpLGV9O3ZhciBqNGU7UChSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QiLDE5ODIpLEkoMTAzOCw0MCxyYSx3SnQpLGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxHdCh1KEluKHRoaXMuYi5hLDQpLDEyNikpIT09R3QodGhpcy5hKSl0aHJvdyBydChuZXcgZWgpfSxsLlFiPWZ1bmN0aW9uKCl7dV8odGhpcyksdGhpcy5hPXUoSW4odGhpcy5iLmEsNCksMTI2KX0sUChSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUl0ZXJhdG9yIiwxMDM4KSxJKDcwNiwyNzgsSmQsRFl0LGNYdCksbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fEd0KHUoSW4odGhpcy5iLmEsNCksMTI2KSkhPT1HdCh0aGlzLmEpKXRocm93IHJ0KG5ldyBlaCl9LGwucGo9ZnVuY3Rpb24oZSl7cHNlKHRoaXMsZSksdGhpcy5hPXUoSW4odGhpcy5iLmEsNCksMTI2KX0sbC5RYj1mdW5jdGlvbigpe3VfKHRoaXMpLHRoaXMuYT11KEluKHRoaXMuYi5hLDQpLDEyNil9LFAoUmEsIkFycmF5RGVsZWdhdGluZ0VMaXN0L0VMaXN0SXRlcmF0b3IiLDcwNiksSSgxMDM5LDM0MSxyYSxtSnQpLGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxHdCh1KEluKHRoaXMuYi5hLDQpLDEyNikpIT09R3QodGhpcy5hKSl0aHJvdyBydChuZXcgZWgpfSxQKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDEwMzkpLEkoNzA3LDM4NSxKZCxPWXQsdVh0KSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8R3QodShJbih0aGlzLmIuYSw0KSwxMjYpKSE9PUd0KHRoaXMuYSkpdGhyb3cgcnQobmV3IGVoKX0sUChSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvciIsNzA3KSxJKDYwNiwyOTUsc290LFZldCksUChSYSwiQmFzaWNFTGlzdC9CYXNpY0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDYwNiksSSg2OTYsNjMsX2QsWWJ0KSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5GYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5HYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5xaT1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmgoKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRoKCl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2goZSl9LGwuaWk9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLmppPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC4kYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLk1jPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxQKFJhLCJCYXNpY0VMaXN0L1VubW9kaWZpYWJsZUVMaXN0Iiw2OTYpLEkoNzA1LDEsezM6MSwyMDoxLDE0OjEsMTU6MSw1ODoxLDU4OToxfSksbC5WYz1mdW5jdGlvbihlLG4pe19YZSh0aGlzLGUsdShuLDQyKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZRZSh0aGlzLHUoZSw0MikpfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoU3QodGhpcy5jLGUpLDEzMyl9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdSh0aGlzLmMuaWkoZSxuKSw0Mil9LGwuamk9ZnVuY3Rpb24oZSxuKXtTWGUodGhpcyxlLHUobiw0MikpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcy5jLiRjKGUpLDQyKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB5ZW4odGhpcyxlLHUobiw0MikpfSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5jLldjKGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5HYyhlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIElJKHRoaXMuYyxlKX0sbC5xaj1mdW5jdGlvbigpe3ZhciBlLG4scjtpZih0aGlzLmQ9PW51bGwpe2Zvcih0aGlzLmQ9UHQoSEF0LEk4dCw2MywyKnRoaXMuZisxLDAsMSkscj10aGlzLmUsdGhpcy5mPTAsbj10aGlzLmMuS2MoKTtuLmUhPW4uaS5nYygpOyllPXUobi5uaigpLDEzMykscXoodGhpcyxlKTt0aGlzLmU9cn19LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGlLdCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHB5dCh0aGlzLmMpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuWGMoZSl9LGwucmo9ZnVuY3Rpb24oKXt0aGlzLmM9bmV3IFR6dCh0aGlzKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmY9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLktjKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLlljKCl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5aYyhlKX0sbC5zaj1mdW5jdGlvbigpe3JldHVybiBmSSh0aGlzKX0sbC50aj1mdW5jdGlvbihlLG4scil7cmV0dXJuIG5ldyB4S3QoZSxuLHIpfSxsLnVqPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3cH0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gQmVlKHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBLZCh0aGlzLmMsZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLlFjKGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIG8zdCh0aGlzLmMpfSxsLmU9MCxsLmY9MCxQKFJhLCJCYXNpY0VNYXAiLDcwNSksSSgxMDMzLDYzLF9kLFR6dCksbC5iaT1mdW5jdGlvbihlLG4pe3VLZSh0aGlzLHUobiwxMzMpKX0sbC5laT1mdW5jdGlvbihlLG4scil7dmFyIHM7Kysocz10aGlzLHUobiwxMzMpLHMpLmEuZX0sbC5maT1mdW5jdGlvbihlLG4pe2xLZSh0aGlzLHUobiwxMzMpKX0sbC5naT1mdW5jdGlvbihlLG4scil7SlhlKHRoaXMsdShuLDEzMyksdShyLDEzMykpfSxsLmRpPWZ1bmN0aW9uKGUsbil7U25lKHRoaXMuYSl9LFAoUmEsIkJhc2ljRU1hcC8xIiwxMDMzKSxJKDEwMzQsNjMsX2Qsd3ApLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHh4bixjMGUsNjEyLGUsMCwxKX0sUChSYSwiQmFzaWNFTWFwLzIiLDEwMzQpLEkoMTAzNSxOMSxqdSxDenQpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBXaXQodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhmOCgpLGxOLmEpOm5ldyBhSHQodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmEuZixJeih0aGlzLmEsZSksdGhpcy5hLmYhPW59LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LFAoUmEsIkJhc2ljRU1hcC8zIiwxMDM1KSxJKDEwMzYsMjgsd3ksX3p0KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gaHVlKHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oZjgoKSxsTi5hKTpuZXcgb0h0KHRoaXMuYSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LFAoUmEsIkJhc2ljRU1hcC80IiwxMDM2KSxJKDEwMzcsTjEsanUsU3p0KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYodGhpcy5hLmY+MCYmRXQoZSw0MikmJih0aGlzLmEucWooKSxrPXUoZSw0Miksdz1rLmNkKCksbz13PT1udWxsPzA6SGkodyksaD1YMnQodGhpcy5hLG8pLG49dGhpcy5hLmRbaF0sbikpe2ZvcihyPXUobi5nLDM2NyksQz1uLmksZD0wO2Q8QzsrK2QpaWYocz1yW2RdLHMuU2goKT09byYmcy5GYihrKSlyZXR1cm4hMH1yZXR1cm4hMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oZjgoKSxsTi5hKTpuZXcgaXJ0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJjZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxQKFJhLCJCYXNpY0VNYXAvNSIsMTAzNyksSSg2MTMsMSxyYSxpcnQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIhPS0xfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyBydChuZXcgZWgpO2lmKHRoaXMuYj09LTEpdGhyb3cgcnQobmV3IGxjKTtyZXR1cm4gdGhpcy5kPXRoaXMuYSx0aGlzLmU9dGhpcy5iLFZzZSh0aGlzKSxlPXUodGhpcy5mLmRbdGhpcy5kXS5nW3RoaXMuZV0sMTMzKSx0aGlzLnZqKGUpfSxsLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyBydChuZXcgZWgpO2lmKHRoaXMuZT09LTEpdGhyb3cgcnQobmV3IEl1KTt0aGlzLmYuYy5NYyhTdCh0aGlzLmYuZFt0aGlzLmRdLHRoaXMuZSkpLHRoaXMuYz10aGlzLmYuZSx0aGlzLmU9LTEsdGhpcy5hPT10aGlzLmQmJnRoaXMuYiE9LTEmJi0tdGhpcy5ifSxsLnZqPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxsLmE9MCxsLmI9LTEsbC5jPTAsbC5kPTAsbC5lPTAsUChSYSwiQmFzaWNFTWFwL0Jhc2ljRU1hcEl0ZXJhdG9yIiw2MTMpLEkoMTAzMSw2MTMscmEsYUh0KSxsLnZqPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNkKCl9LFAoUmEsIkJhc2ljRU1hcC9CYXNpY0VNYXBLZXlJdGVyYXRvciIsMTAzMSksSSgxMDMyLDYxMyxyYSxvSHQpLGwudmo9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGQoKX0sUChSYSwiQmFzaWNFTWFwL0Jhc2ljRU1hcFZhbHVlSXRlcmF0b3IiLDEwMzIpLEkoMTAzMCwxLGJ3LEF6dCksbC53Yz1mdW5jdGlvbihlKXtVQyh0aGlzLGUpfSxsLnljPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gJGl0KHRoaXMsZSxuLHIpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gJFZ0KHRoaXMsZSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGh1ZSh0aGlzLmEsZSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gcXNuKHRoaXMuYSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGlLdCh0aGlzLmEsZSl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFlmKHRoaXMuYSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBweXQodGhpcy5hLmMpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIEhzbih0aGlzLmEpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFl6KHRoaXMuYSxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBJeih0aGlzLmEsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbzN0KHRoaXMuYS5jKX0sbC5DYz1mdW5jdGlvbigpe3JldHVybiB6c24odGhpcy5hKX0sUChSYSwiQmFzaWNFTWFwL0RlbGVnYXRpbmdNYXAiLDEwMzApLEkoNjEyLDEsezQyOjEsMTMzOjEsNjEyOjF9LHhLdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSwodGhpcy5iIT1udWxsP3lpKHRoaXMuYixuLmNkKCkpOkd0KHRoaXMuYik9PT1HdChuLmNkKCkpKSYmKHRoaXMuYyE9bnVsbD95aSh0aGlzLmMsbi5kZCgpKTpHdCh0aGlzLmMpPT09R3Qobi5kZCgpKSkpOiExfSxsLlNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYV4odGhpcy5jPT1udWxsPzA6SGkodGhpcy5jKSl9LGwuVGg9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuVWg9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IFZiKX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMsdGhpcy5jPWUsbn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIrIi0+Iit0aGlzLmN9LGwuYT0wO3ZhciB4eG49UChSYSwiQmFzaWNFTWFwL0VudHJ5SW1wbCIsNjEyKTtJKDUzNiwxLHt9LFRrKSxQKFJhLCJCYXNpY0VNYXAvVmlldyIsNTM2KTt2YXIgbE47SSg3NjgsMSx7fSksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gcDV0KCh2bigpLGlvKSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBTeXQoKHZuKCksaW8pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBRcCgodm4oKSxpbykpfSxQKFJhLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0Iiw3NjgpLEkoMTMxMiwxLEpkLFFGKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuUGI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgbGMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuVWI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgbGMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LFAoUmEsIkVDb2xsZWN0aW9ucy9CYXNpY0VtcHR5VW5tb2RpZmlhYmxlRUxpc3QvMSIsMTMxMiksSSgxMzEwLDc2OCx7MjA6MSwxNDoxLDE1OjEsNTg6MX0sdnF0KSxsLlZjPWZ1bmN0aW9uKGUsbil7QUh0KCl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIExIdCgpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE1IdCgpfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBJSHQoKX0sbC4kYj1mdW5jdGlvbigpe0RIdCgpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpidCgodm4oKSxlKSksbnVsbH0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4tMX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiEwfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBPSHQoKX0sbC5qaT1mdW5jdGlvbihlLG4pe05IdCgpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBIdCgpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBGSHQoKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBCSHQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm4oKSxuZXcgS2QoaW8sZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBadnQoKHZuKCksaW8pKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gdm4oKSxYSShpbyxlKX0sUChSYSwiRUNvbGxlY3Rpb25zL0VtcHR5VW5tb2RpZmlhYmxlRUxpc3QiLDEzMTApLEkoMTMxMSw3NjgsezIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjF9LHdxdCksbC5WYz1mdW5jdGlvbihlLG4pe0FIdCgpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBMSHQoKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiBNSHQoKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gSUh0KCl9LGwuJGI9ZnVuY3Rpb24oKXtESHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBaYnQoKHZuKCksZSkpLG51bGx9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuLTF9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmF9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gT0h0KCl9LGwuamk9ZnVuY3Rpb24oZSxuKXtOSHQoKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBQSHQoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gRkh0KCl9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQkh0KCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5hZD1mdW5jdGlvbihlKXtlNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZuKCksbmV3IEtkKGlvLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gWnZ0KCh2bigpLGlvKSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZuKCksWEkoaW8sZSl9LGwuc2o9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSx2bigpLGEwfSxQKFJhLCJFQ29sbGVjdGlvbnMvRW1wdHlVbm1vZGlmaWFibGVFTWFwIiwxMzExKTt2YXIgVkF0PVlpKFJhLCJFbnVtZXJhdG9yIiksblU7SSgyODEsMSx7MjgxOjF9LGVhdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcz09PWU/ITA6RXQoZSwyODEpPyhuPXUoZSwyODEpLHRoaXMuZj09bi5mJiZ6dG4odGhpcy5pLG4uaSkmJkFudCh0aGlzLmEsdGhpcy5mJjI1Nj9uLmYmMjU2P24uYTpudWxsOm4uZiYyNTY/bnVsbDpuLmEpJiZBbnQodGhpcy5kLG4uZCkmJkFudCh0aGlzLmcsbi5nKSYmQW50KHRoaXMuZSxuLmUpJiZQaG4odGhpcyxuKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHF1ZSh0aGlzKX0sbC5mPTA7dmFyICQ0ZT0wLHo0ZT0wLHE0ZT0wLEg0ZT0wLFVBdD0wLFdBdD0wLEtBdD0wLFlBdD0wLFhBdD0wLEc0ZSxpQT0wLHNBPTAsVjRlPTAsVTRlPTAsclUsUUF0O1AoUmEsIlVSSSIsMjgxKSxJKDEwOTEsNDMsXzQsbXF0KSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUoeG8odGhpcyxCcihlKSx1KG4sMjgxKSksMjgxKX0sUChSYSwiVVJJL1VSSUNhY2hlIiwxMDkxKSxJKDQ5Nyw2MyxfZCxDayxOaiksbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxQKFJhLCJVbmlxdWVFTGlzdCIsNDk3KSxJKDU4MSw2MCxVMCxGJCksUChSYSwiV3JhcHBlZEV4Y2VwdGlvbiIsNTgxKTt2YXIgWnI9WWkoZGgsaDBlKSxReT1ZaShkaCxmMGUpLEF1PVlpKGRoLGQwZSksWnk9WWkoZGgsZzBlKSxpMT1ZaShkaCxwMGUpLEdoPVlpKGRoLCJFQ2xhc3MiKSxDZnQ9WWkoZGgsIkVEYXRhVHlwZSIpLFc0ZTtJKDExODMsNDMsXzQseXF0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKT9GYyh0aGlzLGUpOmVjKEFvKHRoaXMuZixlKSl9LFAoZGgsIkVEYXRhVHlwZS9JbnRlcm5hbC9Db252ZXJzaW9uRGVsZWdhdGUvRmFjdG9yeS9SZWdpc3RyeS9JbXBsIiwxMTgzKTt2YXIgaVU9WWkoZGgsIkVFbnVtIiksZWc9WWkoZGgsYjBlKSxobz1ZaShkaCx2MGUpLFZoPVlpKGRoLHcwZSksVWgsenc9WWkoZGgsbTBlKSxKeT1ZaShkaCx5MGUpO0koMTAyOSwxLHt9LFZaKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk5JTCJ9LFAoZGgsIkVTdHJ1Y3R1cmFsRmVhdHVyZS9JbnRlcm5hbC9EeW5hbWljVmFsdWVIb2xkZXIvMSIsMTAyOSk7dmFyIEs0ZTtJKDEwMjgsNDMsXzQseHF0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKT9GYyh0aGlzLGUpOmVjKEFvKHRoaXMuZixlKSl9LFAoZGgsIkVTdHJ1Y3R1cmFsRmVhdHVyZS9JbnRlcm5hbC9TZXR0aW5nRGVsZWdhdGUvRmFjdG9yeS9SZWdpc3RyeS9JbXBsIiwxMDI4KTt2YXIgbHU9WWkoZGgseDBlKSxWNj1ZaShkaCwiRVZhbGlkYXRvci9QYXR0ZXJuTWF0Y2hlciIpLFpBdCxKQXQsTG4sSmcsdDMsQ2IsWTRlLFg0ZSxRNGUsX2IsdHAsU2IscXcsVjEsWjRlLEo0ZSxXaCxlcCx0NWUsbnAsZTMsYzUsUWEsZTVlLG41ZSxIdyxzVT1ZaSgkaSwiRmVhdHVyZU1hcC9FbnRyeSIpO0koNTM1LDEsezcyOjF9LEpSKSxsLmFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LFAoTW4sIkJhc2ljRU9iamVjdEltcGwvMSIsNTM1KSxJKDEwMjcsMSx0dXQsT1Z0KSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiBQcnQodGhpcy5hLHRoaXMuYixlKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiBkUXQodGhpcy5hLHRoaXMuYil9LGwuV2I9ZnVuY3Rpb24oZSl7Tnd0KHRoaXMuYSx0aGlzLmIsZSl9LGwuWGo9ZnVuY3Rpb24oKXtCZW4odGhpcy5hLHRoaXMuYil9LFAoTW4sIkJhc2ljRU9iamVjdEltcGwvNCIsMTAyNyksSSgxOTgzLDEsezEwODoxfSksbC5iaz1mdW5jdGlvbihlKXt0aGlzLmU9ZT09MD9yNWU6UHQoWG4sSWUsMSxlLDUsMSl9LGwuQ2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZVtlXX0sbC5EaD1mdW5jdGlvbihlLG4pe3RoaXMuZVtlXT1ufSxsLkVoPWZ1bmN0aW9uKGUpe3RoaXMuZVtlXT1udWxsfSxsLmNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5kaz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuZWs9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLmZrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5naz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPW51bGx9LGwuaGs9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuaWs9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5qaz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLmtrPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfTt2YXIgcjVlO1AoTW4sIkJhc2ljRU9iamVjdEltcGwvRVByb3BlcnRpZXNIb2xkZXJCYXNlSW1wbCIsMTk4MyksSSgxODUsMTk4Myx7MTA4OjF9LHRoKSxsLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5laz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuaWs9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuams9ZnVuY3Rpb24oZSl7dGhpcy5iPWV9LFAoTW4sIkJhc2ljRU9iamVjdEltcGwvRVByb3BlcnRpZXNIb2xkZXJJbXBsIiwxODUpLEkoNTA2LDk3LGtkZSxfayksbC5LZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuUGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rfSxsLlJnPWZ1bmN0aW9uKGUsbil7dGhpcy5nPWUsdGhpcy5pPW59LGwuVGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qJjI/dGhpcy5waCgpLmNrKCk6dGhpcy56aCgpfSxsLlZnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5NZz1mdW5jdGlvbigpe3JldHVybih0aGlzLmomMSkhPTB9LGwuZWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLmtoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaiY0KSE9MH0sbC5waD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmt9LGwudGg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmhrKGUpLGU/dGhpcy5qfD0yOnRoaXMuaiY9LTN9LGwudmg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmprKGUpLGU/dGhpcy5qfD00OnRoaXMuaiY9LTV9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4oanAoKSxMbikuU30sbC5pPTAsbC5qPTEsUChNbiwiRU9iamVjdEltcGwiLDUwNiksSSg3ODAsNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjF9LE52dCksbC5DaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lW2VdfSxsLkRoPWZ1bmN0aW9uKGUsbil7dGhpcy5lW2VdPW59LGwuRWg9ZnVuY3Rpb24oZSl7dGhpcy5lW2VdPW51bGx9LGwuVGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLllnPWZ1bmN0aW9uKGUpe3JldHVybiBWaSh0aGlzLmQsZSl9LGwuJGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH0sbC5waD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmsmJih0aGlzLms9bmV3IFpGKSx0aGlzLmt9LGwudGg9ZnVuY3Rpb24oZSl7dGhpcy5kPWV9LGwueWg9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5lPT1udWxsJiYoZT1abih0aGlzLmQpLHRoaXMuZT1lPT0wP2k1ZTpQdChYbixJZSwxLGUsNSwxKSksdGhpc30sbC5BaD1mdW5jdGlvbigpe3JldHVybiAwfTt2YXIgaTVlO1AoTW4sIkR5bmFtaWNFT2JqZWN0SW1wbCIsNzgwKSxJKDEzNzYsNzgwLHsxMDU6MSw0MjoxLDkyOjEsOTA6MSwxMzM6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MX0sS0t0KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBJdih0aGlzKX0sbC50aD1mdW5jdGlvbihlKXt0aGlzLmQ9ZSx0aGlzLmI9Z0QoZSwia2V5IiksdGhpcy5jPWdEKGUsWV8pfSxsLlNoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT09LTEmJihlPVdydCh0aGlzLHRoaXMuYiksdGhpcy5hPWU9PW51bGw/MDpIaShlKSksdGhpcy5hfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIFdydCh0aGlzLHRoaXMuYil9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gV3J0KHRoaXMsdGhpcy5jKX0sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5VaD1mdW5jdGlvbihlKXtOd3QodGhpcyx0aGlzLmIsZSl9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49V3J0KHRoaXMsdGhpcy5jKSxOd3QodGhpcyx0aGlzLmMsZSksbn0sbC5hPTAsUChNbiwiRHluYW1pY0VPYmplY3RJbXBsL0Jhc2ljRU1hcEVudHJ5IiwxMzc2KSxJKDEzNzcsMSx7MTA4OjF9LFpGKSxsLmJrPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuQ2g9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5EaD1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuRWg9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5jaz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuZGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5maz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuZ2s9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLmhrPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuaWs9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuams9ZnVuY3Rpb24oZSl7dGhpcy5iPWV9LGwua2s9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LFAoTW4sIkR5bmFtaWNFT2JqZWN0SW1wbC9EeW5hbWljRVByb3BlcnRpZXNIb2xkZXJJbXBsIiwxMzc3KSxJKDUxMCwxNTAsezEwNToxLDkyOjEsOTA6MSw1OTA6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSw1MTA6MSwxNTA6MSwxMTQ6MSwxMTU6MX0sSkYpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIEozdCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5kO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHRoaXMpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyB5bCgoZG4oKSxRYSksY2MsdGhpcykpLGZJKHRoaXMuYikpO2Nhc2UgMzpyZXR1cm4gd1F0KHRoaXMpO2Nhc2UgNDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhrYix0aGlzLDQpKSx0aGlzLmE7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IFUzKGtiLHRoaXMsNSkpLHRoaXMuY31yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLEpnKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8SmcpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAzOnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0ozdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxYdnQodGhpcyx1KGUsMTQ3KSxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLEpnKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksSmcpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHRoaXMpKSxraih0aGlzLmIsZSxyKTtjYXNlIDM6cmV0dXJuIFh2dCh0aGlzLG51bGwscik7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IFNzKGtiLHRoaXMsNCkpLEJhKHRoaXMuYSxlLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksSmcpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxKZykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuZCE9bnVsbDtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5mIT0wO2Nhc2UgMzpyZXR1cm4hIXdRdCh0aGlzKTtjYXNlIDQ6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTB9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxKZykpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fEpnKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOl90bih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHlsKChkbigpLFFhKSxjYyx0aGlzKSksbHoodGhpcy5iLG4pO3JldHVybjtjYXNlIDM6RGNlKHRoaXMsdShuLDE0NykpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgU3Moa2IsdGhpcyw0KSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhrYix0aGlzLDQpKSxycyh0aGlzLmEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBVMyhrYix0aGlzLDUpKSx4cih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IFUzKGtiLHRoaXMsNSkpLHJzKHRoaXMuYyx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLEpnKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8SmcpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksSmd9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTp0eXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHlsKChkbigpLFFhKSxjYyx0aGlzKSksdGhpcy5iLmMuJGIoKTtyZXR1cm47Y2FzZSAzOkRjZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgU3Moa2IsdGhpcyw0KSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IFUzKGtiLHRoaXMsNSkpLHhyKHRoaXMuYyk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSxKZykpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fEpnKSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gV3JlKHRoaXMpfSxsLmQ9bnVsbCxQKE1uLCJFQW5ub3RhdGlvbkltcGwiLDUxMCksSSgxNTEsNzA1LEQ4dCxUbCksbC5YaD1mdW5jdGlvbihlLG4pe2NYZSh0aGlzLGUsdShuLDQyKSl9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gblplKHRoaXMsdShlLDQyKSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gdSh1KHRoaXMuYyw2OSkucGkoZSksMTMzKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYyw2OSkuWmgoKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYyw2OSkuJGgoKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLmMsNjkpLl9oKGUpfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGtqKHRoaXMsZSxuKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLmMsNzYpLldqKGUpfSxsLnJqPWZ1bmN0aW9uKCl7fSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5jLDc2KS5maigpfSxsLnRqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz11KEZsKHRoaXMuYikuTmgoKS5KaCh0aGlzLmIpLDEzMykscy5UaChlKSxzLlVoKG4pLHMuZWQociksc30sbC51aj1mdW5jdGlvbigpe3JldHVybiBuZXcgbXB0KHRoaXMpfSxsLldiPWZ1bmN0aW9uKGUpe2x6KHRoaXMsZSl9LGwuWGo9ZnVuY3Rpb24oKXt1KHRoaXMuYyw3NikuWGooKX0sUCgkaSwiRWNvcmVFTWFwIiwxNTEpLEkoMTU4LDE1MSxEOHQseWwpLGwucWo9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYodGhpcy5kPT1udWxsKXtmb3IoaD1QdChIQXQsSTh0LDYzLDIqdGhpcy5mKzEsMCwxKSxyPXRoaXMuYy5LYygpO3IuZSE9ci5pLmdjKCk7KW49dShyLm5qKCksMTMzKSxzPW4uU2goKSxvPShzJnZpKSVoLmxlbmd0aCxlPWhbb10sIWUmJihlPWhbb109bmV3IG1wdCh0aGlzKSksZS5GYyhuKTt0aGlzLmQ9aH19LFAoTW4sIkVBbm5vdGF0aW9uSW1wbC8xIiwxNTgpLEkoMjg0LDQzOCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDI4NDoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBkZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gZGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIEZuKCksISF0aGlzLiRqKCk7Y2FzZSA3OnJldHVybiBGbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0xoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucX1yZXR1cm4gb2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDk6cmV0dXJuIFZudCh0aGlzLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abih0aGlzLnpoKCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCl9cmV0dXJuIHNoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnRoaXMuTGgoQnIobikpO3JldHVybjtjYXNlIDI6TmcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6UGcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6SWcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6dGhpcy5vayh1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6ZjIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPU8xKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxuNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnRoaXMuTGgobnVsbCk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6SWcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMub2soMSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1PMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybn1saCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5HaD1mdW5jdGlvbigpe0xoKHRoaXMpLHRoaXMuQmJ8PTF9LGwuWWo9ZnVuY3Rpb24oKXtyZXR1cm4gTGgodGhpcyl9LGwuWmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50fSxsLiRqPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy50LGU+MXx8ZT09LTF9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiY1MTIpIT0wfSxsLm5rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEt5dCh0aGlzLGUsbil9LGwub2s9ZnVuY3Rpb24oZSl7dHkodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBzNXQodGhpcyl9LGwucz0wLGwudD0xLFAoTW4sIkVUeXBlZEVsZW1lbnRJbXBsIiwyODQpLEkoNDQ5LDI4NCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsNDQ5OjEsMjg0OjEsMTE0OjEsMTE1OjEsNjc3OjF9KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBMc2UodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBkZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gZGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIEZuKCksISF0aGlzLiRqKCk7Y2FzZSA3OnJldHVybiBGbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0xoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBGbigpLCEhKHRoaXMuQmImd2YpO2Nhc2UgMTE6cmV0dXJuIEZuKCksISEodGhpcy5CYiZBeSk7Y2FzZSAxMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnl5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gbUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnp1KTtjYXNlIDE2OnJldHVybiBGbigpLCEhKHRoaXMuQmImYmQpO2Nhc2UgMTc6cmV0dXJuIFZtKHRoaXMpfXJldHVybiBvaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAxNzpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9Mc2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDE3LHIpfXJldHVybiBoPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsaXUodGhpcyksbi1abih0aGlzLnpoKCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gVm50KHRoaXMscik7Y2FzZSAxNzpyZXR1cm4gemwodGhpcyxudWxsLDE3LHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abih0aGlzLnpoKCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4odGhpcy5CYiZ3Zik9PTA7Y2FzZSAxMTpyZXR1cm4odGhpcy5CYiZBeSkhPTA7Y2FzZSAxMjpyZXR1cm4odGhpcy5CYiZ5eSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIG1FKHRoaXMpIT1udWxsO2Nhc2UgMTU6cmV0dXJuKHRoaXMuQmImenUpIT0wO2Nhc2UgMTY6cmV0dXJuKHRoaXMuQmImYmQpIT0wO2Nhc2UgMTc6cmV0dXJuISFWbSh0aGlzKX1yZXR1cm4gc2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6bXJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6TmcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6UGcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6SWcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6dGhpcy5vayh1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6ZjIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPU8xKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bkUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDExOnNFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMjpyRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTM6WGJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDE1OmlFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxNjphRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxlNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkV0KHRoaXMuQ2IsODgpJiZoeShybCh1KHRoaXMuQ2IsODgpKSw0KSxYYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6TmcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMzpQZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSA0OklnKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKDEpO3JldHVybjtjYXNlIDg6ZjIodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OnI9TzEodGhpcyxudWxsLG51bGwpLHImJnIuRmkoKTtyZXR1cm47Y2FzZSAxMDpuRSh0aGlzLCEwKTtyZXR1cm47Y2FzZSAxMTpzRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMjpyRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMzp0aGlzLmk9bnVsbCxleih0aGlzLG51bGwpO3JldHVybjtjYXNlIDE1OmlFKHRoaXMsITEpO3JldHVybjtjYXNlIDE2OmFFKHRoaXMsITEpO3JldHVybn1saCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5HaD1mdW5jdGlvbigpe2s4KEVvKChSdSgpLG1hKSx0aGlzKSksTGgodGhpcyksdGhpcy5CYnw9MX0sbC5Haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuemo9ZnVuY3Rpb24oKXtyZXR1cm4gbUUodGhpcyl9LGwuSGo9ZnVuY3Rpb24oKXtyZXR1cm4gVm0odGhpcyl9LGwuTGo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5waz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ufSxsLk1qPWZ1bmN0aW9uKCl7cmV0dXJuIFF6KHRoaXMpfSxsLk5qPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO3JldHVybiB0aGlzLnB8fChyPVZtKHRoaXMpLChyLmk9PW51bGwmJnBkKHIpLHIuaSkubGVuZ3RoLHM9dGhpcy5MaigpLHMmJlpuKFZtKHMpKSxvPUxoKHRoaXMpLGQ9by5CaigpLGU9ZD9kLmkmMT9kPT1kbD9CczpkPT1Ucj9qYTpkPT1yMz9YRTpkPT1pYT9jYTpkPT1MYj9UdzpkPT1mNT9DdzpkPT1IdT9FNjphUzpkOm51bGwsbj1tRSh0aGlzKSx3PW8uemooKSxhbG4odGhpcyksdGhpcy5CYiZiZCYmKChoPWE0dCgoUnUoKSxtYSkscikpJiZoIT10aGlzfHwoaD1xeChFbyhtYSx0aGlzKSkpKT90aGlzLnA9bmV3IFBWdCh0aGlzLGgpOnRoaXMuJGooKT90aGlzLnJrKCk/cz90aGlzLkJiJnp1P2U/dGhpcy5zaygpP3RoaXMucD1uZXcgWmIoNDcsZSx0aGlzLHMpOnRoaXMucD1uZXcgWmIoNSxlLHRoaXMscyk6dGhpcy5zaygpP3RoaXMucD1uZXcgZTIoNDYsdGhpcyxzKTp0aGlzLnA9bmV3IGUyKDQsdGhpcyxzKTplP3RoaXMuc2soKT90aGlzLnA9bmV3IFpiKDQ5LGUsdGhpcyxzKTp0aGlzLnA9bmV3IFpiKDcsZSx0aGlzLHMpOnRoaXMuc2soKT90aGlzLnA9bmV3IGUyKDQ4LHRoaXMscyk6dGhpcy5wPW5ldyBlMig2LHRoaXMscyk6dGhpcy5CYiZ6dT9lP2U9PU0yP3RoaXMucD1uZXcgQ2coNTAsQjRlLHRoaXMpOnRoaXMuc2soKT90aGlzLnA9bmV3IENnKDQzLGUsdGhpcyk6dGhpcy5wPW5ldyBDZygxLGUsdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgU2coNDIsdGhpcyk6dGhpcy5wPW5ldyBTZygwLHRoaXMpOmU/ZT09TTI/dGhpcy5wPW5ldyBDZyg0MSxCNGUsdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgQ2coNDUsZSx0aGlzKTp0aGlzLnA9bmV3IENnKDMsZSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBTZyg0NCx0aGlzKTp0aGlzLnA9bmV3IFNnKDIsdGhpcyk6RXQobywxNDgpP2U9PXNVP3RoaXMucD1uZXcgU2coNDAsdGhpcyk6dGhpcy5CYiY1MTI/dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgQ2coOSxlLHRoaXMpOnRoaXMucD1uZXcgU2coOCx0aGlzKTplP3RoaXMucD1uZXcgQ2coMTEsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDEwLHRoaXMpOnRoaXMuQmImenU/ZT90aGlzLnA9bmV3IENnKDEzLGUsdGhpcyk6dGhpcy5wPW5ldyBTZygxMix0aGlzKTplP3RoaXMucD1uZXcgQ2coMTUsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDE0LHRoaXMpOnM/KGs9cy50LGs+MXx8az09LTE/dGhpcy5zaygpP3RoaXMuQmImenU/ZT90aGlzLnA9bmV3IFpiKDI1LGUsdGhpcyxzKTp0aGlzLnA9bmV3IGUyKDI0LHRoaXMscyk6ZT90aGlzLnA9bmV3IFpiKDI3LGUsdGhpcyxzKTp0aGlzLnA9bmV3IGUyKDI2LHRoaXMscyk6dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgWmIoMjksZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMjgsdGhpcyxzKTplP3RoaXMucD1uZXcgWmIoMzEsZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMzAsdGhpcyxzKTp0aGlzLnNrKCk/dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgWmIoMzMsZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMzIsdGhpcyxzKTplP3RoaXMucD1uZXcgWmIoMzUsZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMzQsdGhpcyxzKTp0aGlzLkJiJnp1P2U/dGhpcy5wPW5ldyBaYigzNyxlLHRoaXMscyk6dGhpcy5wPW5ldyBlMigzNix0aGlzLHMpOmU/dGhpcy5wPW5ldyBaYigzOSxlLHRoaXMscyk6dGhpcy5wPW5ldyBlMigzOCx0aGlzLHMpKTp0aGlzLnNrKCk/dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgQ2coMTcsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDE2LHRoaXMpOmU/dGhpcy5wPW5ldyBDZygxOSxlLHRoaXMpOnRoaXMucD1uZXcgU2coMTgsdGhpcyk6dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgQ2coMjEsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDIwLHRoaXMpOmU/dGhpcy5wPW5ldyBDZygyMyxlLHRoaXMpOnRoaXMucD1uZXcgU2coMjIsdGhpcyk6dGhpcy5xaygpP3RoaXMuc2soKT90aGlzLnA9bmV3IGtLdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyBPd3QodShvLDI2KSx0aGlzLHMpOkV0KG8sMTQ4KT9lPT1zVT90aGlzLnA9bmV3IFNnKDQwLHRoaXMpOnRoaXMuQmImenU/ZT90aGlzLnA9bmV3IHlZdChuLHcsdGhpcywoVWl0KCksZD09VHI/YUx0OmQ9PWRsP2VMdDpkPT1MYj9vTHQ6ZD09cjM/c0x0OmQ9PWlhP2lMdDpkPT1mNT9jTHQ6ZD09SHU/bkx0OmQ9PW1oP3JMdDpBZnQpKTp0aGlzLnA9bmV3IERYdCh1KG8sMTQ4KSxuLHcsdGhpcyk6ZT90aGlzLnA9bmV3IG1ZdChuLHcsdGhpcywoVWl0KCksZD09VHI/YUx0OmQ9PWRsP2VMdDpkPT1MYj9vTHQ6ZD09cjM/c0x0OmQ9PWlhP2lMdDpkPT1mNT9jTHQ6ZD09SHU/bkx0OmQ9PW1oP3JMdDpBZnQpKTp0aGlzLnA9bmV3IElYdCh1KG8sMTQ4KSxuLHcsdGhpcyk6dGhpcy5yaygpP3M/dGhpcy5CYiZ6dT90aGlzLnNrKCk/dGhpcy5wPW5ldyBUS3QodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgVHZ0KHUobywyNiksdGhpcyxzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBFS3QodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgeG50KHUobywyNiksdGhpcyxzKTp0aGlzLkJiJnp1P3RoaXMuc2soKT90aGlzLnA9bmV3IG1XdCh1KG8sMjYpLHRoaXMpOnRoaXMucD1uZXcgUjJ0KHUobywyNiksdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgd1d0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBvbnQodShvLDI2KSx0aGlzKTp0aGlzLnNrKCk/cz90aGlzLkJiJnp1P3RoaXMucD1uZXcgQ0t0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3IGt2dCh1KG8sMjYpLHRoaXMscyk6dGhpcy5CYiZ6dT90aGlzLnA9bmV3IHlXdCh1KG8sMjYpLHRoaXMpOnRoaXMucD1uZXcgajJ0KHUobywyNiksdGhpcyk6cz90aGlzLkJiJnp1P3RoaXMucD1uZXcgX0t0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3IEV2dCh1KG8sMjYpLHRoaXMscyk6dGhpcy5CYiZ6dT90aGlzLnA9bmV3IHhXdCh1KG8sMjYpLHRoaXMpOnRoaXMucD1uZXcgUGoodShvLDI2KSx0aGlzKSksdGhpcy5wfSxsLklqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImd2YpIT0wfSxsLnFrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Kaj1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJmJkKSE9MH0sbC5Paj1mdW5jdGlvbigpe3JldHVybiBZcnQodGhpcyl9LGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Laj1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJnp1KSE9MH0sbC50az1mdW5jdGlvbihlKXt0aGlzLms9ZX0sbC5MaD1mdW5jdGlvbihlKXttcnQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBwcSh0aGlzKX0sbC5lPSExLGwubj0wLFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwiLDQ0OSksSSgzMjIsNDQ5LHsxMDU6MSw5MjoxLDkwOjEsMzQ6MSwxNDc6MSwxOTE6MSw1NjoxLDE3MDoxLDY2OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDMyMjoxLDE1MDoxLDQ0OToxLDI4NDoxLDExNDoxLDExNToxLDY3NzoxfSxVdHQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gZGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGRlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBGbigpLCEhZTV0KHRoaXMpO2Nhc2UgNzpyZXR1cm4gRm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9MaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJndmKTtjYXNlIDExOnJldHVybiBGbigpLCEhKHRoaXMuQmImQXkpO2Nhc2UgMTI6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ5eSk7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qO2Nhc2UgMTQ6cmV0dXJuIG1FKHRoaXMpO2Nhc2UgMTU6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ6dSk7Y2FzZSAxNjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJmJkKTtjYXNlIDE3OnJldHVybiBWbSh0aGlzKTtjYXNlIDE4OnJldHVybiBGbigpLCEhKHRoaXMuQmImZGMpO2Nhc2UgMTk6cmV0dXJuIG4/ZGl0KHRoaXMpOkRKdCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLHQzKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dDMpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIGU1dCh0aGlzKTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4odGhpcy5CYiZ3Zik9PTA7Y2FzZSAxMTpyZXR1cm4odGhpcy5CYiZBeSkhPTA7Y2FzZSAxMjpyZXR1cm4odGhpcy5CYiZ5eSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIG1FKHRoaXMpIT1udWxsO2Nhc2UgMTU6cmV0dXJuKHRoaXMuQmImenUpIT0wO2Nhc2UgMTY6cmV0dXJuKHRoaXMuQmImYmQpIT0wO2Nhc2UgMTc6cmV0dXJuISFWbSh0aGlzKTtjYXNlIDE4OnJldHVybih0aGlzLkJiJmRjKSE9MDtjYXNlIDE5OnJldHVybiEhREp0KHRoaXMpfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksdDMpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0MyksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOm1ydCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOk5nKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA0OklnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OmxIdCh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9TzEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm47Y2FzZSAxMDpuRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTE6c0UodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEyOnJFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMzpYYnQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMTU6aUUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE2OmFFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxODpSaXQodGhpcyxqZShSZShuKSkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksdDMpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0MyksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSx0M30sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiw4OCkmJmh5KHJsKHUodGhpcy5DYiw4OCkpLDQpLFhjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6SWcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMuYj0wLHR5KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1PMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybjtjYXNlIDEwOm5FKHRoaXMsITApO3JldHVybjtjYXNlIDExOnNFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOnJFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLGV6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6aUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6YUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTg6Uml0KHRoaXMsITEpO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksdDMpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0MyksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7ZGl0KHRoaXMpLGs4KEVvKChSdSgpLG1hKSx0aGlzKSksTGgodGhpcyksdGhpcy5CYnw9MX0sbC4kaj1mdW5jdGlvbigpe3JldHVybiBlNXQodGhpcyl9LGwubms9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5iPTAsdGhpcy5hPW51bGwsS3l0KHRoaXMsZSxuKX0sbC5vaz1mdW5jdGlvbihlKXtsSHQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P3BxKHRoaXMpOihlPW5ldyBUaChwcSh0aGlzKSksZS5hKz0iIChpRDogIixrZyhlLCh0aGlzLkJiJmRjKSE9MCksZS5hKz0iKSIsZS5hKX0sbC5iPTAsUChNbiwiRUF0dHJpYnV0ZUltcGwiLDMyMiksSSgzNTEsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTM4OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMzUxOjEsMTUwOjEsMTE0OjEsMTE1OjEsNjc2OjF9KSxsLnVrPWZ1bmN0aW9uKGUpe3JldHVybiBlLlRnKCk9PXRoaXN9LGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHdzdCh0aGlzLGUpfSxsLlJnPWZ1bmN0aW9uKGUsbil7dGhpcy53PW51bGwsdGhpcy5EYj1uPDwxNnx0aGlzLkRiJjI1NSx0aGlzLkNiPWV9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBjdyh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6cmV0dXJuIG4/RmwodGhpcyk6QzgodGhpcyk7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHRoaXMuQX1yZXR1cm4gb2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksUWModGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD93c3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDYscil9cmV0dXJuIGg9dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB6bCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSksQmEodGhpcy5BLGUscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhY3codGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFDOCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wfXJldHVybiBzaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6cCQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjpLZXQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNTpDRSh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkscnModGhpcy5BLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksWTRlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiwxNzkpJiYodSh0aGlzLkNiLDE3OSkudGI9bnVsbCksWGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlo4KHRoaXMsbnVsbCksJDgodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6Q0UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSk7cmV0dXJufWxoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnlqPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRz09LTEmJih0aGlzLkc9KGU9RmwodGhpcyksZT9GZyhlLk1oKCksdGhpcyk6LTEpKSx0aGlzLkd9LGwuemo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5Baj1mdW5jdGlvbigpe3JldHVybiBGbCh0aGlzKX0sbC52az1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ9LGwuQmo9ZnVuY3Rpb24oKXtyZXR1cm4gY3codGhpcyl9LGwuQ2o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkJ9LGwuRGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBsYXQodGhpcyxlKX0sbC53az1mdW5jdGlvbihlKXt0aGlzLnY9ZX0sbC54az1mdW5jdGlvbihlKXtjbmUodGhpcyxlKX0sbC55az1mdW5jdGlvbihlKXt0aGlzLkM9ZX0sbC5MaD1mdW5jdGlvbihlKXtwJCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFN6KHRoaXMpfSxsLkM9bnVsbCxsLkQ9bnVsbCxsLkc9LTEsUChNbiwiRUNsYXNzaWZpZXJJbXBsIiwzNTEpLEkoODgsMzUxLHsxMDU6MSw5MjoxLDkwOjEsMjY6MSwxMzg6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSw4ODoxLDM1MToxLDE1MDoxLDQ3MzoxLDExNDoxLDExNToxLDY3NjoxfSxYTCksbC51az1mdW5jdGlvbihlKXtyZXR1cm4gcVFlKHRoaXMsZS5UZygpKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gbnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6cmV0dXJuIG4/RmwodGhpcyk6QzgodGhpcyk7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgOTpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSAxMDpyZXR1cm4gU28odGhpcyk7Y2FzZSAxMTpyZXR1cm4hdGhpcy5xJiYodGhpcy5xPW5ldyBoZShWaCx0aGlzLDExLDEwKSksdGhpcy5xO2Nhc2UgMTI6cmV0dXJuIGs0KHRoaXMpO2Nhc2UgMTM6cmV0dXJuIGtfKHRoaXMpO2Nhc2UgMTQ6cmV0dXJuIGtfKHRoaXMpLHRoaXMucjtjYXNlIDE1OnJldHVybiBrNCh0aGlzKSx0aGlzLms7Y2FzZSAxNjpyZXR1cm4gVjR0KHRoaXMpO2Nhc2UgMTc6cmV0dXJuIHBhdCh0aGlzKTtjYXNlIDE4OnJldHVybiBwZCh0aGlzKTtjYXNlIDE5OnJldHVybiBjcSh0aGlzKTtjYXNlIDIwOnJldHVybiBrNCh0aGlzKSx0aGlzLm87Y2FzZSAyMTpyZXR1cm4hdGhpcy5zJiYodGhpcy5zPW5ldyBoZShBdSx0aGlzLDIxLDE3KSksdGhpcy5zO2Nhc2UgMjI6cmV0dXJuIExjKHRoaXMpO2Nhc2UgMjM6cmV0dXJuIHRhdCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLENiKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8Q2IpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP3dzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSx6bCh0aGlzLGUsNixyKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IGhlKFZoLHRoaXMsMTEsMTApKSxRYyh0aGlzLnEsZSxyKTtjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IGhlKEF1LHRoaXMsMjEsMTcpKSxRYyh0aGlzLnMsZSxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLENiKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksQ2IpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIHpsKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSxCYSh0aGlzLkEsZSxyKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IGhlKFZoLHRoaXMsMTEsMTApKSxCYSh0aGlzLnEsZSxyKTtjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IGhlKEF1LHRoaXMsMjEsMTcpKSxCYSh0aGlzLnMsZSxyKTtjYXNlIDIyOnJldHVybiBCYShMYyh0aGlzKSxlLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksQ2IpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxDYikpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGwmJnRoaXMuRD09dGhpcy5GO2Nhc2UgMzpyZXR1cm4hIWN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIUM4KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTA7Y2FzZSA4OnJldHVybih0aGlzLkJiJjI1NikhPTA7Y2FzZSA5OnJldHVybih0aGlzLkJiJjUxMikhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMudSYmTGModGhpcy51LmEpLmkhPTAmJiEodGhpcy5uJiZvc3QodGhpcy5uKSk7Y2FzZSAxMTpyZXR1cm4hIXRoaXMucSYmdGhpcy5xLmkhPTA7Y2FzZSAxMjpyZXR1cm4gazQodGhpcykuaSE9MDtjYXNlIDEzOnJldHVybiBrXyh0aGlzKS5pIT0wO2Nhc2UgMTQ6cmV0dXJuIGtfKHRoaXMpLHRoaXMuci5pIT0wO2Nhc2UgMTU6cmV0dXJuIGs0KHRoaXMpLHRoaXMuay5pIT0wO2Nhc2UgMTY6cmV0dXJuIFY0dCh0aGlzKS5pIT0wO2Nhc2UgMTc6cmV0dXJuIHBhdCh0aGlzKS5pIT0wO2Nhc2UgMTg6cmV0dXJuIHBkKHRoaXMpLmkhPTA7Y2FzZSAxOTpyZXR1cm4gY3EodGhpcykuaSE9MDtjYXNlIDIwOnJldHVybiBrNCh0aGlzKSwhIXRoaXMubztjYXNlIDIxOnJldHVybiEhdGhpcy5zJiZ0aGlzLnMuaSE9MDtjYXNlIDIyOnJldHVybiEhdGhpcy5uJiZvc3QodGhpcy5uKTtjYXNlIDIzOnJldHVybiB0YXQodGhpcykuaSE9MH1yZXR1cm4gc2godGhpcyxlLVpuKChkbigpLENiKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8Q2IpLGUpKX0sbC5vaD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmk9PW51bGx8fHRoaXMucSYmdGhpcy5xLmkhPTA/bnVsbDpnRCh0aGlzLGUpLG58fGt4dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpwJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOktldCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1OkNFKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSxycyh0aGlzLkEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODpYeXQodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDk6UXl0KHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMDpDXyhTbyh0aGlzKSkscnMoU28odGhpcyksdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgaGUoVmgsdGhpcywxMSwxMCkpLHhyKHRoaXMucSksIXRoaXMucSYmKHRoaXMucT1uZXcgaGUoVmgsdGhpcywxMSwxMCkpLHJzKHRoaXMucSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBoZShBdSx0aGlzLDIxLDE3KSkseHIodGhpcy5zKSwhdGhpcy5zJiYodGhpcy5zPW5ldyBoZShBdSx0aGlzLDIxLDE3KSkscnModGhpcy5zLHUobiwxNCkpO3JldHVybjtjYXNlIDIyOnhyKExjKHRoaXMpKSxycyhMYyh0aGlzKSx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLENiKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8Q2IpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksQ2J9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpFdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxYYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6WjgodGhpcyxudWxsKSwkOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpDRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm47Y2FzZSA4Olh5dCh0aGlzLCExKTtyZXR1cm47Y2FzZSA5OlF5dCh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMDp0aGlzLnUmJkNfKHRoaXMudSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgaGUoVmgsdGhpcywxMSwxMCkpLHhyKHRoaXMucSk7cmV0dXJuO2Nhc2UgMjE6IXRoaXMucyYmKHRoaXMucz1uZXcgaGUoQXUsdGhpcywyMSwxNykpLHhyKHRoaXMucyk7cmV0dXJuO2Nhc2UgMjI6dGhpcy5uJiZ4cih0aGlzLm4pO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksQ2IpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxDYiksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZihrNCh0aGlzKSxrXyh0aGlzKSxWNHQodGhpcykscGF0KHRoaXMpLHBkKHRoaXMpLGNxKHRoaXMpLHRhdCh0aGlzKSxSQyhzdG4ocmwodGhpcykpKSx0aGlzLnMpZm9yKGU9MCxuPXRoaXMucy5pO2U8bjsrK2UpRk0oU3QodGhpcy5zLGUpKTtpZih0aGlzLnEpZm9yKGU9MCxuPXRoaXMucS5pO2U8bjsrK2UpRk0oU3QodGhpcy5xLGUpKTtPZygoUnUoKSxtYSksdGhpcykubmUoKSx0aGlzLkJifD0xfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGQ0dCh0aGlzKX0sbC5rPW51bGwsbC5yPW51bGw7dmFyIGFBLHM1ZSxfZnQ7UChNbiwiRUNsYXNzSW1wbCIsODgpLEkoMTk5NCwxOTkzLFQwZSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBoYXQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiBoYXQodGhpcyx0aGlzLmksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXthNXQodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe0hzdCh0aGlzLGUpfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFFjKHRoaXMsZSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gQW10KHRoaXMsZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQmEodGhpcyxlLG4pfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHdsZSh0aGlzLGUsbil9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE14KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sUCgkaSwiTm90aWZ5aW5nSW50ZXJuYWxFTGlzdEltcGwiLDE5OTQpLEkoNjIyLDE5OTQsem8pLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsZSh0aGlzLGUpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIERDKHRoaXMsZSxuLHIscyxvKX0sbC4kaT1mdW5jdGlvbihlKXtLayh0aGlzLGUpfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzfSxsLmFrPWZ1bmN0aW9uKCl7cmV0dXJuIHluKHRoaXMuZS5UZygpLHRoaXMuYWooKSl9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5haygpfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIFZpKHRoaXMuZS5UZygpLHRoaXMuYWsoKSl9LGwuems9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmFrKCkuWWooKSwyNikuQmooKX0sbC5Baz1mdW5jdGlvbigpe3JldHVybiBubyh1KHRoaXMuYWsoKSwxOCkpLm59LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEZnKHRoaXMsZSl9LGwuY2o9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHRoaXMuRGsoKT90aGlzLkJrKCk/ci5naCh0aGlzLmUsdGhpcy5BaygpLHRoaXMuemsoKSxuKTpyLmdoKHRoaXMuZSxWaShyLlRnKCksbm8odSh0aGlzLmFrKCksMTgpKSksbnVsbCxuKTpyLmdoKHRoaXMuZSwtMS10aGlzLmFqKCksbnVsbCxuKX0sbC5kaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9yLmloKHRoaXMuZSx0aGlzLkFrKCksdGhpcy56aygpLG4pOnIuaWgodGhpcy5lLFZpKHIuVGcoKSxubyh1KHRoaXMuYWsoKSwxOCkpKSxudWxsLG4pOnIuaWgodGhpcy5lLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRFp0KHRoaXMuZCxlKX0sbC5laj1mdW5jdGlvbigpe3JldHVybiBtbCh0aGlzLmUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaSE9MH0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gQ0kodGhpcy5kLGUpfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuRmsoKSYmdGhpcy5FaygpP282KHRoaXMsZSx1KG4sNTYpKTpufSxsLkdrPWZ1bmN0aW9uKGUpe3JldHVybiBlLmtoKCk/S3AodGhpcy5lLHUoZSw0OSkpOmV9LGwuV2I9ZnVuY3Rpb24oZSl7SVV0KHRoaXMsZSl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gYnRlKHRoaXMpfSxsLlFjPWZ1bmN0aW9uKGUpe3ZhciBuO2lmKHRoaXMuRWsoKSlmb3Iobj10aGlzLmktMTtuPj0wOy0tbilTdCh0aGlzLG4pO3JldHVybiBtM3QodGhpcyxlKX0sbC5Yaj1mdW5jdGlvbigpe3hyKHRoaXMpfSxsLm9pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEllZSh0aGlzLGUsbil9LFAoJGksIkVjb3JlRUxpc3QiLDYyMiksSSg0OTYsNjIyLHpvLFdNKSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5jPTAsUCgkaSwiRU9iamVjdEVMaXN0Iiw0OTYpLEkoODUsNDk2LHpvLFNzKSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5yaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdCIsODUpLEkoNTQ1LDg1LHpvLGhqKSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5iPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLG1sKHRoaXMuZSk/KGU9dGhpcy5iLHRoaXMuYj0hMSxtaSh0aGlzLmUsbmV3IGRmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYj0hMX0sbC5iPSExLFAoJGksIkVPYmplY3RDb250YWlubWVudEVMaXN0L1Vuc2V0dGFibGUiLDU0NSksSSgxMTQwLDU0NSx6byx2WXQpLGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiByPXUodF8odGhpcyxlLG4pLDg3KSxtbCh0aGlzLmUpJiZLayh0aGlzLG5ldyBnSSh0aGlzLmEsNywoZG4oKSxYNGUpLGRlKG4pLChzPXIuYyxFdChzLDg4KT91KHMsMjYpOldoKSxlKSkscn0sbC5qaj1mdW5jdGlvbihlLG4pe3JldHVybiBXbG4odGhpcyx1KGUsODcpLG4pfSxsLmtqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVsbih0aGlzLHUoZSw4Nyksbil9LGwubGo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBLMW4odGhpcyx1KGUsODcpLHUobiw4Nykscil9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiBEQyh0aGlzLGUsbixyLHMsdGhpcy5pPjEpO2Nhc2UgNTpyZXR1cm4gREModGhpcyxlLG4scixzLHRoaXMuaS11KHIsMTUpLmdjKCk+MCk7ZGVmYXVsdDpyZXR1cm4gbmV3IEYwKHRoaXMuZSxlLHRoaXMuYyxuLHIscywhMCl9fSxsLmlqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gb3N0KHRoaXMpfSxsLlhqPWZ1bmN0aW9uKCl7eHIodGhpcyl9LFAoTW4sIkVDbGFzc0ltcGwvMSIsMTE0MCksSSgxMTU0LDExNTMsTTh0KSxsLnVpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHI9ZS54aSgpLHIhPTgpe2lmKHM9TWhuKGUpLHM9PTApc3dpdGNoKHIpe2Nhc2UgMTpjYXNlIDk6e3c9ZS5CaSgpLHchPW51bGwmJihuPXJsKHUodyw0NzMpKSwhbi5jJiYobi5jPW5ldyB4bSksaiQobi5jLGUuQWkoKSkpLGQ9ZS56aSgpLGQhPW51bGwmJihvPXUoZCw0NzMpLG8uQmImMXx8KG49cmwobyksIW4uYyYmKG4uYz1uZXcgeG0pLE1yKG4uYyx1KGUuQWkoKSwyNikpKSk7YnJlYWt9Y2FzZSAzOntkPWUuemkoKSxkIT1udWxsJiYobz11KGQsNDczKSxvLkJiJjF8fChuPXJsKG8pLCFuLmMmJihuLmM9bmV3IHhtKSxNcihuLmMsdShlLkFpKCksMjYpKSkpO2JyZWFrfWNhc2UgNTp7aWYoZD1lLnppKCksZCE9bnVsbClmb3IoaD11KGQsMTQpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ3Myksby5CYiYxfHwobj1ybChvKSwhbi5jJiYobi5jPW5ldyB4bSksTXIobi5jLHUoZS5BaSgpLDI2KSkpO2JyZWFrfWNhc2UgNDp7dz1lLkJpKCksdyE9bnVsbCYmKG89dSh3LDQ3Myksby5CYiYxfHwobj1ybChvKSwhbi5jJiYobi5jPW5ldyB4bSksaiQobi5jLGUuQWkoKSkpKTticmVha31jYXNlIDY6e2lmKHc9ZS5CaSgpLHchPW51bGwpZm9yKGg9dSh3LDE0KS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0NzMpLG8uQmImMXx8KG49cmwobyksIW4uYyYmKG4uYz1uZXcgeG0pLGokKG4uYyxlLkFpKCkpKTticmVha319dGhpcy5IayhzKX19LGwuSGs9ZnVuY3Rpb24oZSl7YnVlKHRoaXMsZSl9LGwuYj02MyxQKE1uLCJFU3VwZXJBZGFwdGVyIiwxMTU0KSxJKDExNTUsMTE1NCxNOHQsTHp0KSxsLkhrPWZ1bmN0aW9uKGUpe2h5KHRoaXMsZSl9LFAoTW4sIkVDbGFzc0ltcGwvMTAiLDExNTUpLEkoMTE0NCw2OTYsem8pLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTHN0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gZnNlKHRoaXMsZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXt6SSh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dUkodGhpcyxlKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gQW10KHRoaXMsZSl9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gS3J0KHRoaXMsZSxuKX0sbC5saz1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE14KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sbC5taz1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXN9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuWGo9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxQKCRpLCJFY29yZUVMaXN0L1VubW9kaWZpYWJsZUVMaXN0IiwxMTQ0KSxJKDMxOSwxMTQ0LHpvLHEzKSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoJGksIkVjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QvRmFzdENvbXBhcmUiLDMxOSksSSgxMTQ3LDMxOSx6byx0cmUpLGwuWGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKEV0KGUsMTcwKSYmKG49dShlLDE3MCkscj1uLmFqKCksciE9LTEpKXtmb3Iocz10aGlzLmk7cjxzOysrcilpZihHdCh0aGlzLmdbcl0pPT09R3QoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9LFAoTW4sIkVDbGFzc0ltcGwvMUVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXNMaXN0IiwxMTQ3KSxJKDExNDEsNDk3LF9kLG54KSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBQdChobyxDMGUsODcsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoTW4sIkVDbGFzc0ltcGwvMUVHZW5lcmljU3VwZXJUeXBlRUxpc3QiLDExNDEpLEkoNjIzLDQ5NyxfZCxxYiksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQXUsUDQsMTcwLGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzFFU3RydWN0dXJhbEZlYXR1cmVVbmlxdWVFTGlzdCIsNjIzKSxJKDc0MSw0OTcsX2QsQzApLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEp5LFA0LDE4LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzFSZWZlcmVuY2VMaXN0Iiw3NDEpLEkoMTE0Miw0OTcsX2QsTXp0KSxsLmJpPWZ1bmN0aW9uKGUsbil7WHRuKHRoaXMsdShuLDM0KSl9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFp5LFA0LDM0LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzIiLDExNDIpLEkoMTE0Myw0OTcsX2QsbXApLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFp5LFA0LDM0LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzMiLDExNDMpLEkoMTE0NSwzMTksem8sTkt0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBKSmUodGhpcyx1KGUsMzQpKX0sbC5ZaD1mdW5jdGlvbihlKXtvWWUodGhpcyx1KGUsMzQpKX0sUChNbiwiRUNsYXNzSW1wbC80IiwxMTQ1KSxJKDExNDYsMzE5LHpvLFBLdCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gdHRuKHRoaXMsdShlLDE4KSl9LGwuWWg9ZnVuY3Rpb24oZSl7Y1llKHRoaXMsdShlLDE4KSl9LFAoTW4sIkVDbGFzc0ltcGwvNSIsMTE0NiksSSgxMTQ4LDQ5NyxfZCxTMyksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gUHQoVmgsTzh0LDU5LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzYiLDExNDgpLEkoMTE0OSw0OTcsX2QsU2spLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEp5LFA0LDE4LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzciLDExNDkpLEkoMTk5NywxOTk2LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjEsNjk6MX0pLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWjV0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gWjV0KHRoaXMsdGhpcy5WaSgpLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7WW9lKHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXskb2UodGhpcyxlKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBiZm4odGhpcyxlLG4pfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuICRobih0aGlzLGUsbil9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcmxlKHRoaXMsZSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5PaShlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgTXgodGhpcyl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5KaSgpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sUCgkaSwiRGVsZWdhdGluZ05vdGlmeWluZ0ludGVybmFsRUxpc3RJbXBsIiwxOTk3KSxJKDc0MiwxOTk3LE44dCksbC5haT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLEV0KGUsMTQ4KSYmIUV0KGUsNDU3KSYmKGUuQmooKS5pJjEpPT0wfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYodGhpcy5GaygpKXtpZihrPXRoaXMuVmkoKSxrPjQpaWYodGhpcy53aihlKSl7aWYodGhpcy5yaygpKXtpZihzPXUoZSw0OSkscj1zLlVnKCksdz1yPT10aGlzLmImJih0aGlzLkRrKCk/cy5PZyhzLlZnKCksdSh5bihidSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKSwyNikuQmooKSk9PW5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkubjotMS1zLlZnKCk9PXRoaXMuYWooKSksdGhpcy5FaygpJiYhdyYmIXImJnMuWmcoKSl7Zm9yKG89MDtvPGs7KytvKWlmKG49Rm50KHRoaXMsdGhpcy5PaShvKSksR3Qobik9PT1HdChlKSlyZXR1cm4hMH1yZXR1cm4gd31lbHNlIGlmKHRoaXMuRGsoKSYmIXRoaXMuQ2soKSl7aWYoaD11KGUsNTYpLmFoKG5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkpLEd0KGgpPT09R3QodGhpcy5iKSlyZXR1cm4hMDtpZihoPT1udWxsfHwhdShoLDU2KS5raCgpKXJldHVybiExfX1lbHNlIHJldHVybiExO2lmKGQ9dGhpcy5MaShlKSx0aGlzLkVrKCkmJiFkKXtmb3Iobz0wO288azsrK28paWYocz1GbnQodGhpcyx0aGlzLk9pKG8pKSxHdChzKT09PUd0KGUpKXJldHVybiEwfXJldHVybiBkfWVsc2UgcmV0dXJuIHRoaXMuTGkoZSl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IEYwKHRoaXMuYixlLHRoaXMuYWooKSxuLHIscyxvKX0sbC4kaT1mdW5jdGlvbihlKXttaSh0aGlzLmIsZSl9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXN9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4geW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIFZpKGJ1KHRoaXMuYikseW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4hIXluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLkJqKCl9LGwuYmo9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXluKGJ1KHRoaXMuYiksdGhpcy5haigpKSxFdChuLDk5KT8oZT11KG4sMTgpLChlLkJiJmRjKSE9MHx8ISFubyh1KG4sMTgpKSk6ITF9LGwuQ2s9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztyZXR1cm4gbj15bihidSh0aGlzLmIpLHRoaXMuYWooKSksRXQobiw5OSk/KGU9dShuLDE4KSxyPW5vKGUpLCEhciYmKHM9ci50LHM+MXx8cz09LTEpKTohMX0sbC5Eaz1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gbj15bihidSh0aGlzLmIpLHRoaXMuYWooKSksRXQobiw5OSk/KGU9dShuLDE4KSxyPW5vKGUpLCEhcik6ITF9LGwuRWs9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXluKGJ1KHRoaXMuYiksdGhpcy5haigpKSxFdChuLDk5KT8oZT11KG4sMTgpLChlLkJiJllhKSE9MCk6ITF9LGwuWGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87aWYocz10aGlzLlFpKGUpLHM+PTApcmV0dXJuIHM7aWYodGhpcy5GaygpKXtmb3Iocj0wLG89dGhpcy5WaSgpO3I8bzsrK3IpaWYobj1GbnQodGhpcyx0aGlzLk9pKHIpKSxHdChuKT09PUd0KGUpKXJldHVybiByfXJldHVybi0xfSxsLmNqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP3IuZ2godGhpcy5iLG5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkubix1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDI2KS5CaigpLG4pOnIuZ2godGhpcy5iLFZpKHIuVGcoKSxubyh1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpKSxudWxsLG4pOnIuZ2godGhpcy5iLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLmRqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP3IuaWgodGhpcy5iLG5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkubix1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDI2KS5CaigpLG4pOnIuaWgodGhpcy5iLFZpKHIuVGcoKSxubyh1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpKSxudWxsLG4pOnIuaWgodGhpcy5iLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLnJrPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gbj15bihidSh0aGlzLmIpLHRoaXMuYWooKSksRXQobiw5OSk/KGU9dShuLDE4KSwoZS5CYiZkYykhPTApOiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuIEV0KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDg4KX0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4geW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCkud2ooZSl9LGwuZWo9ZnVuY3Rpb24oKXtyZXR1cm4gbWwodGhpcy5iKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiF0aGlzLlJpKCl9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4geW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLmhpKCl9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRUQodGhpcyxlLG4pfSxsLldiPWZ1bmN0aW9uKGUpe0NfKHRoaXMpLHJzKHRoaXMsdShlLDE1KSl9LGwuUGM9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLkVrKCkpZm9yKGU9dGhpcy5WaSgpLTE7ZT49MDstLWUpRUQodGhpcyxlLHRoaXMuT2koZSkpO3JldHVybiB0aGlzLldpKCl9LGwuUWM9ZnVuY3Rpb24oZSl7dmFyIG47aWYodGhpcy5FaygpKWZvcihuPXRoaXMuVmkoKS0xO24+PTA7LS1uKUVEKHRoaXMsbix0aGlzLk9pKG4pKTtyZXR1cm4gdGhpcy5YaShlKX0sbC5Yaj1mdW5jdGlvbigpe0NfKHRoaXMpfSxsLm9pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHB0ZSh0aGlzLGUsbil9LFAoJGksIkRlbGVnYXRpbmdFY29yZUVMaXN0Iiw3NDIpLEkoMTE1MCw3NDIsTjh0LERXdCksbC5IaT1mdW5jdGlvbihlLG4pe2JRZSh0aGlzLGUsdShuLDI2KSl9LGwuSWk9ZnVuY3Rpb24oZSl7bFhlKHRoaXMsdShlLDI2KSl9LGwuT2k9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj11KFN0KExjKHRoaXMuYSksZSksODcpLHI9bi5jLEV0KHIsODgpP3UociwyNik6KGRuKCksV2gpfSxsLlRpPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49dShkeShMYyh0aGlzLmEpLGUpLDg3KSxyPW4uYyxFdChyLDg4KT91KHIsMjYpOihkbigpLFdoKX0sbC5VaT1mdW5jdGlvbihlLG4pe3JldHVybiB2Zm4odGhpcyxlLHUobiwyNikpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbnVsbH0sbC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSXp0KHRoaXMpfSxsLktpPWZ1bmN0aW9uKCl7eHIoTGModGhpcy5hKSl9LGwuTGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFZyZSh0aGlzLGUpfSxsLk1pPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIVZyZSh0aGlzLG4pKXJldHVybiExO3JldHVybiEwfSxsLk5pPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihFdChlLDE1KSYmKHM9dShlLDE1KSxzLmdjKCk9PUxjKHRoaXMuYSkuaSkpe2ZvcihuPXMuS2MoKSxyPW5ldyBlcih0aGlzKTtuLk9iKCk7KWlmKEd0KG4uUGIoKSkhPT1HdChkcihyKSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9LGwuUGk9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihyPTEsbj1uZXcgZXIoTGModGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDg3KSxzPShvPWUuYyxFdChvLDg4KT91KG8sMjYpOihkbigpLFdoKSkscj0zMSpyKyhzP0l2KHMpOjApO3JldHVybiByfSxsLlFpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2ZvcihzPTAscj1uZXcgZXIoTGModGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49dShkcihyKSw4NyksR3QoZSk9PT1HdCgobz1uLmMsRXQobyw4OCk/dShvLDI2KTooZG4oKSxXaCkpKSlyZXR1cm4gczsrK3N9cmV0dXJuLTF9LGwuUmk9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5hKS5pPT0wfSxsLlNpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuVmk9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5hKS5pfSxsLldpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPUxjKHRoaXMuYSkuaSxvPVB0KFhuLEllLDEsaCw1LDEpLHI9MCxuPW5ldyBlcihMYyh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLG9bcisrXT0ocz1lLmMsRXQocyw4OCk/dShzLDI2KTooZG4oKSxXaCkpO3JldHVybiBvfSxsLlhpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3O2Zvcih3PUxjKHRoaXMuYSkuaSxlLmxlbmd0aDx3JiYobz1DSShzbChlKS5jLHcpLGU9byksZS5sZW5ndGg+dyYmSmkoZSx3LG51bGwpLHM9MCxyPW5ldyBlcihMYyh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksODcpLGg9KGQ9bi5jLEV0KGQsODgpP3UoZCwyNik6KGRuKCksV2gpKSxKaShlLHMrKyxoKTtyZXR1cm4gZX0sbC5ZaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKG89bmV3IHhnLG8uYSs9IlsiLGU9TGModGhpcy5hKSxuPTAscz1MYyh0aGlzLmEpLmk7bjxzOylmbyhvLGRDKChyPXUoU3QoZSxuKSw4NykuYyxFdChyLDg4KT91KHIsMjYpOihkbigpLFdoKSkpKSwrK248cyYmKG8uYSs9S2EpO3JldHVybiBvLmErPSJdIixvLmF9LGwuJGk9ZnVuY3Rpb24oZSl7fSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIDEwfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Daz1mdW5jdGlvbigpe3JldHVybiExfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsODgpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIGJpbih0aGlzLmEpfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRUNsYXNzSW1wbC84IiwxMTUwKSxJKDExNTEsMTk2NCxJRSxJenQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIF9JKHRoaXMuYSxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzLmEuYSkuaX0sUChNbiwiRUNsYXNzSW1wbC84LzEiLDExNTEpLEkoMTE1Miw0OTcsX2QsUVQpLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGkxLEllLDEzOCxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sUChNbiwiRUNsYXNzSW1wbC85IiwxMTUyKSxJKDExMzksNTMsQnh0LGtxdCksUChNbiwiRUNsYXNzSW1wbC9NeUhhc2hTZXQiLDExMzkpLEkoNTY2LDM1MSx7MTA1OjEsOTI6MSw5MDoxLDEzODoxLDE0ODoxLDgzNDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDM1MToxLDE1MDoxLDExNDoxLDExNToxLDY3NjoxfSxsUiksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy56aigpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9GbCh0aGlzKTpDOCh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjI1Nil9cmV0dXJuIG9oKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhY3codGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFDOCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpPT0wfXJldHVybiBzaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6cCQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjpLZXQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNTpDRSh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkscnModGhpcy5BLHUobiwxNCkpO3JldHVybjtjYXNlIDg6eHoodGhpcyxqZShSZShuKSkpO3JldHVybn1maCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksUTRlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiwxNzkpJiYodSh0aGlzLkNiLDE3OSkudGI9bnVsbCksWGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlo4KHRoaXMsbnVsbCksJDgodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6Q0UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODp4eih0aGlzLCEwKTtyZXR1cm59bGgodGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtPZygoUnUoKSxtYSksdGhpcykubmUoKSx0aGlzLkJifD0xfSxsLkZqPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2lmKCF0aGlzLmMmJihlPXZjZShGbCh0aGlzKSksIWUuZGMoKSkpZm9yKHI9ZS5LYygpO3IuT2IoKTspbj1CcihyLlBiKCkpLG1fKHRoaXMsbikmJlp1bih0aGlzKTtyZXR1cm4gdGhpcy5ifSxsLnpqPWZ1bmN0aW9uKCl7dmFyIGU7aWYoIXRoaXMuZSl7ZT1udWxsO3RyeXtlPWN3KHRoaXMpfWNhdGNoKG4pe2lmKG49V2kobiksIUV0KG4sMTAyKSl0aHJvdyBydChuKX10aGlzLmQ9bnVsbCxlJiZlLmkmMSYmKGU9PWRsP3RoaXMuZD0oRm4oKSxJMik6ZT09VHI/dGhpcy5kPWRlKDApOmU9PXIzP3RoaXMuZD1uZXcgRDMoMCk6ZT09aWE/dGhpcy5kPTA6ZT09TGI/dGhpcy5kPWcyKDApOmU9PWY1P3RoaXMuZD1lRSgwKTplPT1IdT90aGlzLmQ9RUkoMCk6dGhpcy5kPURJKDApKSx0aGlzLmU9ITB9cmV0dXJuIHRoaXMuZH0sbC5Faj1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjI1NikhPTB9LGwuSWs9ZnVuY3Rpb24oZSl7ZSYmKHRoaXMuRD0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvciIpfSxsLnhrPWZ1bmN0aW9uKGUpe2NuZSh0aGlzLGUpLHRoaXMuSWsoZSl9LGwueWs9ZnVuY3Rpb24oZSl7dGhpcy5DPWUsdGhpcy5lPSExfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/U3oodGhpcyk6KGU9bmV3IFRoKFN6KHRoaXMpKSxlLmErPSIgKHNlcmlhbGl6YWJsZTogIixrZyhlLCh0aGlzLkJiJjI1NikhPTApLGUuYSs9IikiLGUuYSl9LGwuYz0hMSxsLmQ9bnVsbCxsLmU9ITEsUChNbiwiRURhdGFUeXBlSW1wbCIsNTY2KSxJKDQ1Nyw1NjYsezEwNToxLDkyOjEsOTA6MSwxMzg6MSwxNDg6MSw4MzQ6MSw2NzE6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwzNTE6MSw0NTc6MSwxNTA6MSwxMTQ6MSwxMTU6MSw2NzY6MX0sRXF0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gY3codGhpcyk7Y2FzZSA0OnJldHVybiBGeXQodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP0ZsKHRoaXMpOkM4KHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZWcsdGhpcyw5LDUpKSx0aGlzLmF9cmV0dXJuIG9oKHRoaXMsZS1abigoZG4oKSxfYikpLHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fF9iKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksUWModGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD93c3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDYscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSksUWModGhpcy5hLGUscil9cmV0dXJuIGg9dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxfYikpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLF9iKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB6bCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSksQmEodGhpcy5BLGUscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSksQmEodGhpcy5hLGUscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxfYikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLF9iKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhY3codGhpcyk7Y2FzZSA0OnJldHVybiEhRnl0KHRoaXMpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhQzgodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksX2IpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxfYiksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpwJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOktldCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1OkNFKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSxycyh0aGlzLkEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODp4eih0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBoZShlZyx0aGlzLDksNSkpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZWcsdGhpcyw5LDUpKSxycyh0aGlzLmEsdShuLDE0KSk7cmV0dXJufWZoKHRoaXMsZS1abigoZG4oKSxfYikpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fF9iKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLF9ifSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiwxNzkpJiYodSh0aGlzLkNiLDE3OSkudGI9bnVsbCksWGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlo4KHRoaXMsbnVsbCksJDgodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6Q0UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODp4eih0aGlzLCEwKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSkseHIodGhpcy5hKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLF9iKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8X2IpLGUpKX0sbC5HaD1mdW5jdGlvbigpe3ZhciBlLG47aWYodGhpcy5hKWZvcihlPTAsbj10aGlzLmEuaTtlPG47KytlKUZNKFN0KHRoaXMuYSxlKSk7T2coKFJ1KCksbWEpLHRoaXMpLm5lKCksdGhpcy5CYnw9MX0sbC56aj1mdW5jdGlvbigpe3JldHVybiBGeXQodGhpcyl9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LGwuSWs9ZnVuY3Rpb24oZSl7fSxQKE1uLCJFRW51bUltcGwiLDQ1NyksSSg1NzMsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTk0MDoxLDY3ODoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDU3MzoxLDE1MDoxLDExNDoxLDExNToxfSxXenQpLGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0sbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gQnNlKHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBkZSh0aGlzLmQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5iP3RoaXMuYjp0aGlzLmE7Y2FzZSA0OnJldHVybiBvPXRoaXMuYyxvPz90aGlzLnpiO2Nhc2UgNTpyZXR1cm4gdGhpcy5EYj4+MTY9PTU/dSh0aGlzLkNiLDY3MSk6bnVsbH1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLHRwKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dHApLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSA1OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0JzZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSx6bCh0aGlzLGUsNSxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLHRwKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksdHApKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDU6cmV0dXJuIHpsKHRoaXMsbnVsbCw1LHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksdHApKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSx0cCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLmQhPTA7Y2FzZSAzOnJldHVybiEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT1udWxsO2Nhc2UgNTpyZXR1cm4hISh0aGlzLkRiPj4xNj09NSYmdSh0aGlzLkNiLDY3MSkpfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksdHApKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0cCksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpYYyh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnRpdCh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgMzpEb2UodGhpcyx1KG4sMTk0MCkpO3JldHVybjtjYXNlIDQ6bml0KHRoaXMsQnIobikpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksdHApKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0cCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSx0cH0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlhjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjp0aXQodGhpcywwKTtyZXR1cm47Y2FzZSAzOkRvZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6bml0KHRoaXMsbnVsbCk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSx0cCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRwKSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmMsZT8/dGhpcy56Yn0sbC5iPW51bGwsbC5jPW51bGwsbC5kPTAsUChNbiwiRUVudW1MaXRlcmFsSW1wbCIsNTczKTt2YXIga3huPVlpKE1uLCJFRmFjdG9yeUltcGwvSW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQiKTtJKDQ4OSwxLHsyMDE1OjF9LG9NKSxQKE1uLCJFRmFjdG9yeUltcGwvMUNsaWVudEludGVybmFsRURhdGVUaW1lRm9ybWF0Iiw0ODkpLEkoMjQxLDExNSx7MTA1OjEsOTI6MSw5MDoxLDg3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMjQxOjEsMTE0OjEsMTE1OjF9LHd2KSxsLlNnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcj16bCh0aGlzLGUsbixyKSx0aGlzLmUmJkV0KGUsMTcwKSYmKHM9b3EodGhpcyx0aGlzLmUpLHMhPXRoaXMuYyYmKHI9X0UodGhpcyxzLHIpKSkscn0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5mO2Nhc2UgMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBTcyhobyx0aGlzLDEpKSx0aGlzLmQ7Y2FzZSAyOnJldHVybiBuP3dxKHRoaXMpOnRoaXMuYztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuZTtjYXNlIDU6cmV0dXJuIG4/bHN0KHRoaXMpOnRoaXMuYX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLHF3KSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8cXcpLGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gUHJlKHRoaXMsbnVsbCxyKTtjYXNlIDE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgU3MoaG8sdGhpcywxKSksQmEodGhpcy5kLGUscik7Y2FzZSAzOnJldHVybiBOcmUodGhpcyxudWxsLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCkscXcpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxxdykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuZjtjYXNlIDE6cmV0dXJuISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYztjYXNlIDM6cmV0dXJuISF0aGlzLmI7Y2FzZSA0OnJldHVybiEhdGhpcy5lO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gc2godGhpcyxlLVpuKChkbigpLHF3KSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8cXcpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6ZWFlKHRoaXMsdShuLDg3KSk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBTcyhobyx0aGlzLDEpKSx4cih0aGlzLmQpLCF0aGlzLmQmJih0aGlzLmQ9bmV3IFNzKGhvLHRoaXMsMSkpLHJzKHRoaXMuZCx1KG4sMTQpKTtyZXR1cm47Y2FzZSAzOnA0dCh0aGlzLHUobiw4NykpO3JldHVybjtjYXNlIDQ6RDR0KHRoaXMsdShuLDgzNikpO3JldHVybjtjYXNlIDU6UDgodGhpcyx1KG4sMTM4KSk7cmV0dXJufWZoKHRoaXMsZS1abigoZG4oKSxxdykpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHF3KSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHF3fSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6ZWFlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBTcyhobyx0aGlzLDEpKSx4cih0aGlzLmQpO3JldHVybjtjYXNlIDM6cDR0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpENHQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OlA4KHRoaXMsbnVsbCk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSxxdykpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHF3KSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgSWwoYmYodGhpcykpLGUuYSs9IiAoZXhwcmVzc2lvbjogIixtYXQodGhpcyxlKSxlLmErPSIpIixlLmF9O3ZhciB0THQ7UChNbiwiRUdlbmVyaWNUeXBlSW1wbCIsMjQxKSxJKDE5NjksMTk2NCxDSCksbC5YaD1mdW5jdGlvbihlLG4pe0xXdCh0aGlzLGUsbil9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTFd0KHRoaXMsdGhpcy5nYygpLGUpLG59LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFFmKHRoaXMuR2koKSxlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRoKCl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFB6dCh0aGlzKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oKDApfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkdpKCkuWmMoZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcnkodGhpcyxlLCEwKSxufSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gcz15c3QodGhpcyxuKSxyPXRoaXMuWmMoZSksci5SYihzKSxzfSxsLmppPWZ1bmN0aW9uKGUsbil7dmFyIHI7cnkodGhpcyxuLCEwKSxyPXRoaXMuWmMoZSksci5SYihuKX0sUCgkaSwiQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdCIsMTk2OSksSSg0ODYsMTk2OSxDSCxOTSksbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gUWYodGhpcy5HaSgpLGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbD8oRWcoKSxFZygpLGhOKTp0aGlzLkprKCl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRVdCh0aGlzLmEsdGhpcy5iKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PW51bGw/KEVnKCksRWcoKSxoTik6dGhpcy5KaygpfSxsLl9oPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZihlPDB8fGU+MSl0aHJvdyBydChuZXcgbW8oWF8rZSsiLCBzaXplPTAiKSk7cmV0dXJuIEVnKCksRWcoKSxoTn1mb3Iocj10aGlzLkprKCksbj0wO248ZTsrK24paHoocik7cmV0dXJuIHJ9LGwuZGM9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYodGhpcy5iIT1udWxsKXtmb3Iocj0wO3I8dGhpcy5iLmxlbmd0aDsrK3IpaWYoZT10aGlzLmJbcl0sIXRoaXMuTWsoKXx8dGhpcy5hLm1oKGUpKXtpZihoPXRoaXMuYS5iaChlLCExKSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKG49dShoLDE1Mykscz0wLG89bi5nYygpO3M8bzsrK3MpaWYoVll0KG4uaWwocykpJiZuLmpsKHMpIT1udWxsKXJldHVybiExfWVsc2UgaWYoZS4kaigpKXtpZighdShoLDE0KS5kYygpKXJldHVybiExfWVsc2UgaWYoaCE9bnVsbClyZXR1cm4hMX19cmV0dXJuITB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gcnl0KHRoaXMpfSxsLlpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZihlIT0wKXRocm93IHJ0KG5ldyBtbyhYXytlKyIsIHNpemU9MCIpKTtyZXR1cm4gRWcoKSxFZygpLGhOfWZvcihyPXRoaXMuTGsoKT90aGlzLktrKCk6dGhpcy5KaygpLG49MDtuPGU7KytuKWh6KHIpO3JldHVybiByfSxsLmlpPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5qaT1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuSms9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJqKHRoaXMuYSx0aGlzLmIpfSxsLktrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCMnQodGhpcy5hLHRoaXMuYil9LGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5nYz1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saCxkO2lmKG89MCx0aGlzLmIhPW51bGwpe2ZvcihyPTA7cjx0aGlzLmIubGVuZ3RoOysrcilpZihlPXRoaXMuYltyXSwhdGhpcy5NaygpfHx0aGlzLmEubWgoZSkpaWYoZD10aGlzLmEuYmgoZSwhMSksdG8oKSx1KGUsNjYpLk9qKCkpZm9yKG49dShkLDE1Mykscz0wLGg9bi5nYygpO3M8aDsrK3MpVll0KG4uaWwocykpJiZuLmpsKHMpIT1udWxsJiYrK287ZWxzZSBlLiRqKCk/bys9dShkLDE0KS5nYygpOmQhPW51bGwmJisrb31yZXR1cm4gb30sbC5Naz1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgU2Z0O1AoJGksIkVDb250ZW50c0VMaXN0Iiw0ODYpLEkoMTE1Niw0ODYsQ0gscFd0KSxsLkprPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiV3QodGhpcy5hLHRoaXMuYil9LGwuS2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZXdCh0aGlzLmEsdGhpcy5iKX0sbC5Naz1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFTmFtZWRFbGVtZW50SW1wbC8xIiwxMTU2KSxJKDI3OSwxLF9ILGJqKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5Oaz1mdW5jdGlvbihlKXtpZih0aGlzLmchPTB8fHRoaXMuZSl0aHJvdyBydChuZXcgRm8oIkl0ZXJhdG9yIGFscmVhZHkgaW4gdXNlIG9yIGFscmVhZHkgZmlsdGVyZWQiKSk7dGhpcy5lPWV9LGwuT2I9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7c3dpdGNoKHRoaXMuZyl7Y2FzZSAzOmNhc2UgMjpyZXR1cm4hMDtjYXNlIDE6cmV0dXJuITE7Y2FzZS0zOnRoaXMucD90aGlzLnAuUGIoKTorK3RoaXMubjtkZWZhdWx0OmlmKCF0aGlzLmt8fCh0aGlzLnA/IVVhZSh0aGlzLHRoaXMucCk6IU9vZSh0aGlzKSkpe2Zvcig7dGhpcy5kPHRoaXMuYy5sZW5ndGg7KWlmKG49dGhpcy5jW3RoaXMuZCsrXSwoIXRoaXMuZXx8bi5HaigpIT1JN3x8bi5haigpIT0wKSYmKCF0aGlzLk1rKCl8fHRoaXMuYi5taChuKSkpe2lmKGg9dGhpcy5iLmJoKG4sdGhpcy5MaygpKSx0aGlzLmY9KHRvKCksdShuLDY2KS5PaigpKSx0aGlzLmZ8fG4uJGooKSl7aWYodGhpcy5MaygpPyhzPXUoaCwxNSksdGhpcy5rPXMpOihzPXUoaCw2OSksdGhpcy5rPXRoaXMuaj1zKSxFdCh0aGlzLmssNTQpPyh0aGlzLnA9bnVsbCx0aGlzLm89dGhpcy5rLmdjKCksdGhpcy5uPTApOnRoaXMucD10aGlzLmo/dGhpcy5qLiRoKCk6dGhpcy5rLlljKCksdGhpcy5wP1VhZSh0aGlzLHRoaXMucCk6T29lKHRoaXMpKXJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLnBpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9ZWxzZSBpZihoIT1udWxsKXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCxyPWgsdGhpcy5pPXIsdGhpcy5nPTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZj0hMSx0aGlzLmc9MSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLnBpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9fSxsLlNiPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO3N3aXRjaCh0aGlzLmcpe2Nhc2UtMzpjYXNlLTI6cmV0dXJuITA7Y2FzZS0xOnJldHVybiExO2Nhc2UgMzp0aGlzLnA/dGhpcy5wLlViKCk6LS10aGlzLm47ZGVmYXVsdDppZighdGhpcy5rfHwodGhpcy5wPyFXYWUodGhpcyx0aGlzLnApOiFzb2UodGhpcykpKXtmb3IoO3RoaXMuZD4wOylpZihuPXRoaXMuY1stLXRoaXMuZF0sKCF0aGlzLmV8fG4uR2ooKSE9STd8fG4uYWooKSE9MCkmJighdGhpcy5NaygpfHx0aGlzLmIubWgobikpKXtpZihoPXRoaXMuYi5iaChuLHRoaXMuTGsoKSksdGhpcy5mPSh0bygpLHUobiw2NikuT2ooKSksdGhpcy5mfHxuLiRqKCkpe2lmKHRoaXMuTGsoKT8ocz11KGgsMTUpLHRoaXMuaz1zKToocz11KGgsNjkpLHRoaXMuaz10aGlzLmo9cyksRXQodGhpcy5rLDU0KT8odGhpcy5vPXRoaXMuay5nYygpLHRoaXMubj10aGlzLm8pOnRoaXMucD10aGlzLmo/dGhpcy5qLl9oKHRoaXMuay5nYygpKTp0aGlzLmsuWmModGhpcy5rLmdjKCkpLHRoaXMucD9XYWUodGhpcyx0aGlzLnApOnNvZSh0aGlzKSlyZXR1cm4gbz10aGlzLnA/dGhpcy5wLlViKCk6dGhpcy5qP3RoaXMuai5waSgtLXRoaXMubik6dGhpcy5rLlhiKC0tdGhpcy5uKSx0aGlzLmY/KGU9dShvLDcyKSxlLmFrKCkscj1lLmRkKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0tMywhMH1lbHNlIGlmKGghPW51bGwpcmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHI9aCx0aGlzLmk9cix0aGlzLmc9LTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZz0tMSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuVWIoKTp0aGlzLmo/dGhpcy5qLnBpKC0tdGhpcy5uKTp0aGlzLmsuWGIoLS10aGlzLm4pLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPS0zLCEwfX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBoeih0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuVWI9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmc8LTF8fHRoaXMuU2IoKSlyZXR1cm4tLXRoaXMuYSx0aGlzLmc9MCxlPXRoaXMuaSx0aGlzLlNiKCksZTt0aHJvdyBydChuZXcgbGMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5Maz1mdW5jdGlvbigpe3JldHVybiExfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuTWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5hPTAsbC5kPTAsbC5mPSExLGwuZz0wLGwubj0wLGwubz0wO3ZhciBoTjtQKCRpLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsIiwyNzkpLEkoNjk3LDI3OSxfSCxCMnQpLGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRUNvbnRlbnRzRUxpc3QvUmVzb2x2aW5nRmVhdHVyZUl0ZXJhdG9ySW1wbCIsNjk3KSxJKDExNTcsNjk3LF9ILHZXdCksbC5Naz1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFTmFtZWRFbGVtZW50SW1wbC8xLzEiLDExNTcpLEkoMTE1OCwyNzksX0gsYld0KSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoTW4sIkVOYW1lZEVsZW1lbnRJbXBsLzEvMiIsMTE1OCksSSgzNiwxNDMsUUQsS20sU3J0LFFzLHFydCxGMCxkZix6bXQsVlF0LHFtdCxVUXQsZm10LFdRdCxWbXQsS1F0LGRtdCxZUXQsSG10LFhRdCxDQyxnSSxzcnQsR210LFFRdCxnbXQsWlF0KSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIENtdCh0aGlzKX0sbC5naj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPUNtdCh0aGlzKSxlP2UuemooKTpudWxsfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmI9PS0xJiZ0aGlzLmEmJih0aGlzLmI9dGhpcy5jLlhnKHRoaXMuYS5haigpLHRoaXMuYS5HaigpKSksdGhpcy5jLk9nKHRoaXMuYixlKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuaGo9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1DbXQodGhpcyksZT9lLktqKCk6ITF9LGwuYj0tMSxQKE1uLCJFTm90aWZpY2F0aW9uSW1wbCIsMzYpLEkoMzk5LDI4NCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsNTk6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsMzk5OjEsMjg0OjEsMTE0OjEsMTE1OjF9LFd0dCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gJHNlKHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBkZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gZGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIEZuKCksaD10aGlzLnQsaD4xfHxoPT0tMTtjYXNlIDc6cmV0dXJuIEZuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/TGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD91KHRoaXMuQ2IsMjYpOm51bGw7Y2FzZSAxMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBPdShsdSx0aGlzLDExKSksdGhpcy5kO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLHRoaXMuYztjYXNlIDEzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3ICRNKHRoaXMsdGhpcykpLHRoaXMuYTtjYXNlIDE0OnJldHVybiBpbCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLGVwKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8ZXApLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAxMDpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD8kc2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDEwLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLFFjKHRoaXMuYyxlLHIpfXJldHVybiBoPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksZXApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxlcCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gVm50KHRoaXMscik7Y2FzZSAxMDpyZXR1cm4gemwodGhpcyxudWxsLDEwLHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgT3UobHUsdGhpcywxMSkpLEJhKHRoaXMuZCxlLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLEJhKHRoaXMuYyxlLHIpO2Nhc2UgMTQ6cmV0dXJuIEJhKGlsKHRoaXMpLGUscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxlcCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLGVwKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyLHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBzPXRoaXMudCxzPjF8fHM9PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiEhKHRoaXMuRGI+PjE2PT0xMCYmdSh0aGlzLkNiLDI2KSk7Y2FzZSAxMTpyZXR1cm4hIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAxMjpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMzpyZXR1cm4hIXRoaXMuYSYmaWwodGhpcy5hLmEpLmkhPTAmJiEodGhpcy5iJiZjc3QodGhpcy5iKSk7Y2FzZSAxNDpyZXR1cm4hIXRoaXMuYiYmY3N0KHRoaXMuYil9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxlcCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fGVwKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6WGModGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMzpQZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgNDpJZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0eSh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9TzEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBPdShsdSx0aGlzLDExKSkseHIodGhpcy5kKSwhdGhpcy5kJiYodGhpcy5kPW5ldyBPdShsdSx0aGlzLDExKSkscnModGhpcy5kLHUobiwxNCkpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSx4cih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSxycyh0aGlzLmMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgJE0odGhpcyx0aGlzKSksQ18odGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyAkTSh0aGlzLHRoaXMpKSxycyh0aGlzLmEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTQ6eHIoaWwodGhpcykpLHJzKGlsKHRoaXMpLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksZXApKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHxlcCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxlcH0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6WGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOk5nKHRoaXMsITApO3JldHVybjtjYXNlIDM6UGcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpJZyh0aGlzLDApO3JldHVybjtjYXNlIDU6dHkodGhpcywxKTtyZXR1cm47Y2FzZSA4OmYyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPU8xKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgT3UobHUsdGhpcywxMSkpLHhyKHRoaXMuZCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5hJiZDXyh0aGlzLmEpO3JldHVybjtjYXNlIDE0OnRoaXMuYiYmeHIodGhpcy5iKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLGVwKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8ZXApLGUpKX0sbC5HaD1mdW5jdGlvbigpe3ZhciBlLG47aWYodGhpcy5jKWZvcihlPTAsbj10aGlzLmMuaTtlPG47KytlKUZNKFN0KHRoaXMuYyxlKSk7TGgodGhpcyksdGhpcy5CYnw9MX0sUChNbiwiRU9wZXJhdGlvbkltcGwiLDM5OSksSSg1MDUsNzQyLE44dCwkTSksbC5IaT1mdW5jdGlvbihlLG4pe3BRZSh0aGlzLGUsdShuLDEzOCkpfSxsLklpPWZ1bmN0aW9uKGUpe2hYZSh0aGlzLHUoZSwxMzgpKX0sbC5PaT1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPXUoU3QoaWwodGhpcy5hKSxlKSw4Nykscj1uLmMscnx8KGRuKCksVjEpfSxsLlRpPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49dShkeShpbCh0aGlzLmEpLGUpLDg3KSxyPW4uYyxyfHwoZG4oKSxWMSl9LGwuVWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZmhuKHRoaXMsZSx1KG4sMTM4KSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBudWxsfSxsLkppPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEenQodGhpcyl9LGwuS2k9ZnVuY3Rpb24oKXt4cihpbCh0aGlzLmEpKX0sbC5MaT1mdW5jdGlvbihlKXtyZXR1cm4gS3JlKHRoaXMsZSl9LGwuTWk9ZnVuY3Rpb24oZSl7dmFyIG4scjtmb3Iocj1lLktjKCk7ci5PYigpOylpZihuPXIuUGIoKSwhS3JlKHRoaXMsbikpcmV0dXJuITE7cmV0dXJuITB9LGwuTmk9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKEV0KGUsMTUpJiYocz11KGUsMTUpLHMuZ2MoKT09aWwodGhpcy5hKS5pKSl7Zm9yKG49cy5LYygpLHI9bmV3IGVyKHRoaXMpO24uT2IoKTspaWYoR3Qobi5QYigpKSE9PUd0KGRyKHIpKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0sbC5QaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKHI9MSxuPW5ldyBlcihpbCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLHM9KG89ZS5jLG98fChkbigpLFYxKSkscj0zMSpyKyhzP0hpKHMpOjApO3JldHVybiByfSxsLlFpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2ZvcihzPTAscj1uZXcgZXIoaWwodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49dShkcihyKSw4NyksR3QoZSk9PT1HdCgobz1uLmMsb3x8KGRuKCksVjEpKSkpcmV0dXJuIHM7KytzfXJldHVybi0xfSxsLlJpPWZ1bmN0aW9uKCl7cmV0dXJuIGlsKHRoaXMuYSkuaT09MH0sbC5TaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLlZpPWZ1bmN0aW9uKCl7cmV0dXJuIGlsKHRoaXMuYSkuaX0sbC5XaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtmb3IoaD1pbCh0aGlzLmEpLmksbz1QdChYbixJZSwxLGgsNSwxKSxyPTAsbj1uZXcgZXIoaWwodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDg3KSxvW3IrK109KHM9ZS5jLHN8fChkbigpLFYxKSk7cmV0dXJuIG99LGwuWGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHc9aWwodGhpcy5hKS5pLGUubGVuZ3RoPHcmJihvPUNJKHNsKGUpLmMsdyksZT1vKSxlLmxlbmd0aD53JiZKaShlLHcsbnVsbCkscz0wLHI9bmV3IGVyKGlsKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw4NyksaD0oZD1uLmMsZHx8KGRuKCksVjEpKSxKaShlLHMrKyxoKTtyZXR1cm4gZX0sbC5ZaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKG89bmV3IHhnLG8uYSs9IlsiLGU9aWwodGhpcy5hKSxuPTAscz1pbCh0aGlzLmEpLmk7bjxzOylmbyhvLGRDKChyPXUoU3QoZSxuKSw4NykuYyxyfHwoZG4oKSxWMSkpKSksKytuPHMmJihvLmErPUthKTtyZXR1cm4gby5hKz0iXSIsby5hfSxsLiRpPWZ1bmN0aW9uKGUpe30sbC5haj1mdW5jdGlvbigpe3JldHVybiAxM30sbC5Caz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDEzOCl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gcGluKHRoaXMuYSl9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5uaT1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFT3BlcmF0aW9uSW1wbC8xIiw1MDUpLEkoMTM0MCwxOTY0LElFLER6dCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIGlsKHRoaXMuYS5hKS5pfSxQKE1uLCJFT3BlcmF0aW9uSW1wbC8xLzEiLDEzNDApLEkoMTM0MSw1NDUsem8sd1l0KSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gcj11KHRfKHRoaXMsZSxuKSw4NyksbWwodGhpcy5lKSYmS2sodGhpcyxuZXcgZ0kodGhpcy5hLDcsKGRuKCksdDVlKSxkZShuKSwocz1yLmMsc3x8VjEpLGUpKSxyfSxsLmpqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEF1bih0aGlzLHUoZSw4Nyksbil9LGwua2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTHVuKHRoaXMsdShlLDg3KSxuKX0sbC5saj1mdW5jdGlvbihlLG4scil7cmV0dXJuIEFobih0aGlzLHUoZSw4NyksdShuLDg3KSxyKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIERDKHRoaXMsZSxuLHIscyx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiBEQyh0aGlzLGUsbixyLHMsdGhpcy5pLXUociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgRjAodGhpcy5lLGUsdGhpcy5jLG4scixzLCEwKX19LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiBjc3QodGhpcyl9LGwuWGo9ZnVuY3Rpb24oKXt4cih0aGlzKX0sUChNbiwiRU9wZXJhdGlvbkltcGwvMiIsMTM0MSksSSg0OTgsMSx7MTkzODoxLDQ5ODoxfSxOVnQpLFAoTW4sIkVQYWNrYWdlSW1wbC8xIiw0OTgpLEkoMTYsODUsem8saGUpLGwuems9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLkFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmI9MCxQKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0IiwxNiksSSgzNTMsMTYsem8sSXgpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvUmVzb2x2aW5nIiwzNTMpLEkoMjk4LDM1Myx6byxxbSksbC5jaT1mdW5jdGlvbigpe3RoaXMuYS50Yj1udWxsfSxQKE1uLCJFUGFja2FnZUltcGwvMiIsMjk4KSxJKDEyMjgsMSx7fSx0QiksUChNbiwiRVBhY2thZ2VJbXBsLzMiLDEyMjgpLEkoNzE4LDQzLF80LGpwdCksbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSk/YXJ0KHRoaXMsZSk6ISFBbyh0aGlzLmYsZSl9LFAoTW4sIkVQYWNrYWdlUmVnaXN0cnlJbXBsIiw3MTgpLEkoNTA5LDI4NCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjAxNzoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSw1MDk6MSwyODQ6MSwxMTQ6MSwxMTU6MX0sS3R0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiB6c2UodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBGbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIGRlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBkZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gRm4oKSxoPXRoaXMudCxoPjF8fGg9PS0xO2Nhc2UgNzpyZXR1cm4gRm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9MaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gdGhpcy5EYj4+MTY9PTEwP3UodGhpcy5DYiw1OSk6bnVsbH1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLGUzKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8ZTMpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAxMDpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD96c2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDEwLHIpfXJldHVybiBoPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksZTMpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxlMykpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gVm50KHRoaXMscik7Y2FzZSAxMDpyZXR1cm4gemwodGhpcyxudWxsLDEwLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksZTMpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxlMykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gcz10aGlzLnQscz4xfHxzPT0tMTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4hISh0aGlzLkRiPj4xNj09MTAmJnUodGhpcy5DYiw1OSkpfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksZTMpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxlMyksZSkpfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksZTN9LFAoTW4sIkVQYXJhbWV0ZXJJbXBsIiw1MDkpLEkoOTksNDQ5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxODoxLDE3MDoxLDY2OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDk5OjEsNDQ5OjEsMjg0OjEsMTE0OjEsMTE1OjEsNjc3OjF9LHEydCksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQ7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gZGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGRlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBGbigpLGQ9dGhpcy50LGQ+MXx8ZD09LTE7Y2FzZSA3OnJldHVybiBGbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0xoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBGbigpLCEhKHRoaXMuQmImd2YpO2Nhc2UgMTE6cmV0dXJuIEZuKCksISEodGhpcy5CYiZBeSk7Y2FzZSAxMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnl5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gbUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnp1KTtjYXNlIDE2OnJldHVybiBGbigpLCEhKHRoaXMuQmImYmQpO2Nhc2UgMTc6cmV0dXJuIFZtKHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEZuKCksISEodGhpcy5CYiZkYyk7Y2FzZSAxOTpyZXR1cm4gRm4oKSxoPW5vKHRoaXMpLCEhKGgmJmguQmImZGMpO2Nhc2UgMjA6cmV0dXJuIEZuKCksISEodGhpcy5CYiZZYSk7Y2FzZSAyMTpyZXR1cm4gbj9ubyh0aGlzKTp0aGlzLmI7Y2FzZSAyMjpyZXR1cm4gbj9DeXQodGhpcyk6eUp0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgVTMoWnksdGhpcywyMykpLHRoaXMuYX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLGM1KSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8YzUpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBvPXRoaXMudCxvPjF8fG89PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJndmKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJkF5KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJnl5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gbUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZ6dSkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZiZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIVZtKHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZGMpIT0wO2Nhc2UgMTk6cmV0dXJuIHM9bm8odGhpcyksISFzJiYocy5CYiZkYykhPTA7Y2FzZSAyMDpyZXR1cm4odGhpcy5CYiZZYSk9PTA7Y2FzZSAyMTpyZXR1cm4hIXRoaXMuYjtjYXNlIDIyOnJldHVybiEheUp0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksYzUpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxjNSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOm1ydCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOk5nKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA0OklnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OnR5KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmYyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1PMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybjtjYXNlIDEwOm5FKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMTpzRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTI6ckUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEzOlhidCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxNTppRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTY6YUUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE4Omtybih0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMjA6bjN0KHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAyMTpleXQodGhpcyx1KG4sMTgpKTtyZXR1cm47Y2FzZSAyMzohdGhpcy5hJiYodGhpcy5hPW5ldyBVMyhaeSx0aGlzLDIzKSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBVMyhaeSx0aGlzLDIzKSkscnModGhpcy5hLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksYzUpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHxjNSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxjNX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiw4OCkmJmh5KHJsKHUodGhpcy5DYiw4OCkpLDQpLFhjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6SWcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnR5KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1PMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybjtjYXNlIDEwOm5FKHRoaXMsITApO3JldHVybjtjYXNlIDExOnNFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOnJFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLGV6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6aUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6YUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTg6ZTN0KHRoaXMsITEpLEV0KHRoaXMuQ2IsODgpJiZoeShybCh1KHRoaXMuQ2IsODgpKSwyKTtyZXR1cm47Y2FzZSAyMDpuM3QodGhpcywhMCk7cmV0dXJuO2Nhc2UgMjE6ZXl0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgVTMoWnksdGhpcywyMykpLHhyKHRoaXMuYSk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSxjNSkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fGM1KSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtDeXQodGhpcyksazgoRW8oKFJ1KCksbWEpLHRoaXMpKSxMaCh0aGlzKSx0aGlzLkJifD0xfSxsLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIG5vKHRoaXMpfSxsLnFrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bm8odGhpcyksISFlJiYoZS5CYiZkYykhPTB9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZkYykhPTB9LGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZZYSkhPTB9LGwubms9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5jPW51bGwsS3l0KHRoaXMsZSxuKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P3BxKHRoaXMpOihlPW5ldyBUaChwcSh0aGlzKSksZS5hKz0iIChjb250YWlubWVudDogIixrZyhlLCh0aGlzLkJiJmRjKSE9MCksZS5hKz0iLCByZXNvbHZlUHJveGllczogIixrZyhlLCh0aGlzLkJiJllhKSE9MCksZS5hKz0iKSIsZS5hKX0sUChNbiwiRVJlZmVyZW5jZUltcGwiLDk5KSxJKDU0OCwxMTUsezEwNToxLDQyOjEsOTI6MSw5MDoxLDEzMzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDU0ODoxLDExNDoxLDExNToxfSxXWiksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5IYj1mdW5jdGlvbigpe3JldHVybiBJdih0aGlzKX0sbC5VaD1mdW5jdGlvbihlKXtTdG4odGhpcyxCcihlKSl9LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHB0bih0aGlzLEJyKGUpKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jfXJldHVybiBvaCh0aGlzLGUtWm4oKGRuKCksUWEpKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHxRYSksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmIhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmMhPW51bGx9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxRYSkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fFFhKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOkF0bih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxOlptdCh0aGlzLEJyKG4pKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLFFhKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8UWEpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksUWF9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpRbXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOlptdCh0aGlzLG51bGwpO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksUWEpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxRYSksZSkpfSxsLlNoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT09LTEmJihlPXRoaXMuYix0aGlzLmE9ZT09bnVsbD8wOkJnKGUpKSx0aGlzLmF9LGwuVGg9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9iZih0aGlzKTooZT1uZXcgVGgoYmYodGhpcykpLGUuYSs9IiAoa2V5OiAiLGZvKGUsdGhpcy5iKSxlLmErPSIsIHZhbHVlOiAiLGZvKGUsdGhpcy5jKSxlLmErPSIpIixlLmEpfSxsLmE9LTEsbC5iPW51bGwsbC5jPW51bGw7dmFyIGNjPVAoTW4sIkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbCIsNTQ4KSxhNWU9WWkoJGksIkZlYXR1cmVNYXAvRW50cnkvSW50ZXJuYWwiKTtJKDU2NSwxLFNIKSxsLk9rPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlBrKHUoZSw0OSkpfSxsLlBrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLk9rKGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIHRoaXM9PT1lPyEwOkV0KGUsNzIpPyhuPXUoZSw3Miksbi5haygpPT10aGlzLmM/KHI9dGhpcy5kZCgpLHI9PW51bGw/bi5kZCgpPT1udWxsOnlpKHIsbi5kZCgpKSk6ITEpOiExfSxsLmFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5IYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZGQoKSxIaSh0aGlzLmMpXihlPT1udWxsPzA6SGkoZSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gZT10aGlzLmMsbj1GbChlLkhqKCkpLlBoKCksZS5uZSgpLChuIT1udWxsJiZuLmxlbmd0aCE9MD9uKyI6IitlLm5lKCk6ZS5uZSgpKSsiPSIrdGhpcy5kZCgpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0Jhc2ljRmVhdHVyZU1hcEVudHJ5Iiw1NjUpLEkoNzc2LDU2NSxTSCxRMnQpLGwuUGs9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRMnQodGhpcy5jLGUpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIEdvbih0aGlzLGUsdGhpcy5hLG4scil9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBWb24odGhpcyxlLHRoaXMuYSxuLHIpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0NvbnRhaW5tZW50VXBkYXRpbmdGZWF0dXJlTWFwRW50cnkiLDc3NiksSSgxMzE0LDEse30sUFZ0KSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9dShJOChlLHRoaXMuYiksMjE1KSxoLm5sKHRoaXMuYSkuV2oocyl9LGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD11KEk4KGUsdGhpcy5iKSwyMTUpLGguZWwodGhpcy5hLHMsbyl9LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD11KEk4KGUsdGhpcy5iKSwyMTUpLGguZmwodGhpcy5hLHMsbyl9LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoSTgoZSx0aGlzLmIpLDIxNSkscy5ubCh0aGlzLmEpLmZqKCl9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG87bz11KEk4KGUsdGhpcy5iKSwyMTUpLG8ubmwodGhpcy5hKS5XYihzKX0sbC5Vaj1mdW5jdGlvbihlLG4scil7cmV0dXJuIHUoSTgoZSx0aGlzLmIpLDIxNSkubmwodGhpcy5hKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz11KEk4KGUsdGhpcy5iKSwyMTUpLHMubmwodGhpcy5hKS5YaigpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlRmVhdHVyZU1hcERlbGVnYXRvciIsMTMxNCksSSg4OSwxLHt9LENnLFpiLFNnLGUyKSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7aWYoaD1uLkNoKHIpLGg9PW51bGwmJm4uRGgocixoPUFxKHRoaXMsZSkpLCFvKXN3aXRjaCh0aGlzLmUpe2Nhc2UgNTA6Y2FzZSA0MTpyZXR1cm4gdShoLDU4OSkuc2ooKTtjYXNlIDQwOnJldHVybiB1KGgsMjE1KS5rbCgpfXJldHVybiBofSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZDtyZXR1cm4gZD1uLkNoKHIpLGQ9PW51bGwmJm4uRGgocixkPUFxKHRoaXMsZSkpLGg9dShkLDY5KS5sayhzLG8pLGh9LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1uLkNoKHIpLGghPW51bGwmJihvPXUoaCw2OSkubWsocyxvKSksb30sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9bi5DaChyKSxzIT1udWxsJiZ1KHMsNzYpLmZqKCl9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG87bz11KG4uQ2gociksNzYpLCFvJiZuLkRoKHIsbz1BcSh0aGlzLGUpKSxvLldiKHMpfSxsLlVqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3JldHVybiBvPW4uQ2gociksbz09bnVsbCYmbi5EaChyLG89QXEodGhpcyxlKSksRXQobyw3Nik/dShvLDc2KToocz11KG4uQ2gociksMTUpLG5ldyBOenQocykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXUobi5DaChyKSw3NiksIXMmJm4uRGgocixzPUFxKHRoaXMsZSkpLHMuWGooKX0sbC5iPTAsbC5lPTAsUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZU1hbnkiLDg5KSxJKDUwNCwxLHt9KSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dGhyb3cgcnQobmV3IE9yKX0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3Rocm93IHJ0KG5ldyBPcil9LGwuVWo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuZXcgTVh0KHRoaXMsZSxuLHIpfTt2YXIgZjA7UChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZSIsNTA0KSxJKDEzMzEsMSx0dXQsTVh0KSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuUGoodGhpcy5jLHRoaXMuZCx0aGlzLmIsZSwhMCl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlNqKHRoaXMuYyx0aGlzLmQsdGhpcy5iKX0sbC5XYj1mdW5jdGlvbihlKXt0aGlzLmEuVGoodGhpcy5jLHRoaXMuZCx0aGlzLmIsZSl9LGwuWGo9ZnVuY3Rpb24oKXt0aGlzLmEuVmoodGhpcy5jLHRoaXMuZCx0aGlzLmIpfSxsLmI9MCxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlLzEiLDEzMzEpLEkoNzY5LDUwNCx7fSxPd3QpLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gYWF0KGUsZS5laCgpLGUuVmcoKSk9PXRoaXMuYj90aGlzLnNrKCkmJnM/R3N0KGUpOmUuZWgoKTpudWxsfSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZDtyZXR1cm4gZS5laCgpJiYobz0oaD1lLlZnKCksaD49MD9lLlFnKG8pOmUuZWgoKS5paChlLC0xLWgsbnVsbCxvKSkpLGQ9VmkoZS5UZygpLHRoaXMuZSksZS5TZyhzLGQsbyl9LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1WaShlLlRnKCksdGhpcy5lKSxlLlNnKG51bGwsaCxvKX0sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9VmkoZS5UZygpLHRoaXMuZSksISFlLmVoKCkmJmUuVmcoKT09c30sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoLGQsdyxrO2lmKHMhPW51bGwmJiFsYXQodGhpcy5hLHMpKXRocm93IHJ0KG5ldyBYayhBSCsoRXQocyw1Nik/ZDR0KHUocyw1NikuVGcoKSk6Qm10KHNsKHMpKSkrTEgrdGhpcy5hKyInIikpO2lmKG89ZS5laCgpLGQ9VmkoZS5UZygpLHRoaXMuZSksR3QocykhPT1HdChvKXx8ZS5WZygpIT1kJiZzIT1udWxsKXtpZihsRShlLHUocyw1NikpKXRocm93IHJ0KG5ldyBQbihLXytlLkliKCkpKTtrPW51bGwsbyYmKGs9KGg9ZS5WZygpLGg+PTA/ZS5RZyhrKTplLmVoKCkuaWgoZSwtMS1oLG51bGwsaykpKSx3PXUocyw0OSksdyYmKGs9dy5naChlLFZpKHcuVGcoKSx0aGlzLmIpLG51bGwsaykpLGs9ZS5TZyh3LGQsayksayYmay5GaSgpfWVsc2UgZS5MZygpJiZlLk1nKCkmJm1pKGUsbmV3IFFzKGUsMSxkLHMscykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZDtzPWUuZWgoKSxzPyhkPShvPWUuVmcoKSxvPj0wP2UuUWcobnVsbCk6ZS5laCgpLmloKGUsLTEtbyxudWxsLG51bGwpKSxoPVZpKGUuVGcoKSx0aGlzLmUpLGQ9ZS5TZyhudWxsLGgsZCksZCYmZC5GaSgpKTplLkxnKCkmJmUuTWcoKSYmbWkoZSxuZXcgQ0MoZSwxLHRoaXMuZSxudWxsLG51bGwpKX0sbC5zaz1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlQ29udGFpbmVyIiw3NjkpLEkoMTMxNSw3Njkse30sa0t0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXJSZXNvbHZpbmciLDEzMTUpLEkoNTYzLDUwNCx7fSksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPW4uQ2gociksaD09bnVsbD90aGlzLmI6R3QoaCk9PT1HdChmMCk/bnVsbDpofSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGwmJihHdChzKT09PUd0KGYwKXx8IXlpKHMsdGhpcy5iKSl9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG8saDtlLkxnKCkmJmUuTWcoKT8obz0oaD1uLkNoKHIpLGg9PW51bGw/dGhpcy5iOkd0KGgpPT09R3QoZjApP251bGw6aCkscz09bnVsbD90aGlzLmMhPW51bGw/KG4uRGgocixudWxsKSxzPXRoaXMuYik6dGhpcy5iIT1udWxsP24uRGgocixmMCk6bi5EaChyLG51bGwpOih0aGlzLlNrKHMpLG4uRGgocixzKSksbWkoZSx0aGlzLmQuVGsoZSwxLHRoaXMuZSxvLHMpKSk6cz09bnVsbD90aGlzLmMhPW51bGw/bi5EaChyLG51bGwpOnRoaXMuYiE9bnVsbD9uLkRoKHIsZjApOm4uRGgocixudWxsKToodGhpcy5TayhzKSxuLkRoKHIscykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO2UuTGcoKSYmZS5NZygpPyhzPShvPW4uQ2gociksbz09bnVsbD90aGlzLmI6R3Qobyk9PT1HdChmMCk/bnVsbDpvKSxuLkVoKHIpLG1pKGUsdGhpcy5kLlRrKGUsMSx0aGlzLmUscyx0aGlzLmIpKSk6bi5FaChyKX0sbC5Taz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgR3p0KX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEiLDU2MyksSShGNCwxLHt9LGVCKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBDQyhlLG4scixzLG8pfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IHNydChlLG4scixzLG8saCl9O3ZhciBlTHQsbkx0LHJMdCxpTHQsc0x0LGFMdCxvTHQsQWZ0LGNMdDtQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yIixGNCksSSgxMzMyLEY0LHt9LG5CKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBnbXQoZSxuLHIsamUoUmUocykpLGplKFJlKG8pKSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgWlF0KGUsbixyLGplKFJlKHMpKSxqZShSZShvKSksaCl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMSIsMTMzMiksSSgxMzMzLEY0LHt9LHJCKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyB6bXQoZSxuLHIsdShzLDIxNykuYSx1KG8sMjE3KS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBWUXQoZSxuLHIsdShzLDIxNykuYSx1KG8sMjE3KS5hLGgpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzIiLDEzMzMpLEkoMTMzNCxGNCx7fSxBayksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgcW10KGUsbixyLHUocywxNzIpLmEsdShvLDE3MikuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgVVF0KGUsbixyLHUocywxNzIpLmEsdShvLDE3MikuYSxoKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8zIiwxMzM0KSxJKDEzMzUsRjQse30saUIpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IGZtdChlLG4scixYdCh5ZShzKSksWHQoeWUobykpKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBXUXQoZSxuLHIsWHQoeWUocykpLFh0KHllKG8pKSxoKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci80IiwxMzM1KSxJKDEzMzYsRjQse30sc0IpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IFZtdChlLG4scix1KHMsMTU1KS5hLHUobywxNTUpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IEtRdChlLG4scix1KHMsMTU1KS5hLHUobywxNTUpLmEsaCl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNSIsMTMzNiksSSgxMzM3LEY0LHt9LEtaKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBkbXQoZSxuLHIsdShzLDE5KS5hLHUobywxOSkuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgWVF0KGUsbixyLHUocywxOSkuYSx1KG8sMTkpLmEsaCl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNiIsMTMzNyksSSgxMzM4LEY0LHt9LExrKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBIbXQoZSxuLHIsdShzLDE2MikuYSx1KG8sMTYyKS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBYUXQoZSxuLHIsdShzLDE2MikuYSx1KG8sMTYyKS5hLGgpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzciLDEzMzgpLEkoMTMzOSxGNCx7fSxNayksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgR210KGUsbixyLHUocywxODQpLmEsdShvLDE4NCkuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgUVF0KGUsbixyLHUocywxODQpLmEsdShvLDE4NCkuYSxoKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci84IiwxMzM5KSxJKDEzMTcsNTYzLHt9LElYdCksbC5Taz1mdW5jdGlvbihlKXtpZighdGhpcy5hLndqKGUpKXRocm93IHJ0KG5ldyBYayhBSCtzbChlKStMSCt0aGlzLmErIiciKSl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhRHluYW1pYyIsMTMxNyksSSgxMzE4LDU2Myx7fSxtWXQpLGwuU2s9ZnVuY3Rpb24oZSl7fSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVN0YXRpYyIsMTMxOCksSSg3NzAsNTYzLHt9KSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGx9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG8saDtlLkxnKCkmJmUuTWcoKT8obz0hMCxoPW4uQ2gociksaD09bnVsbD8obz0hMSxoPXRoaXMuYik6R3QoaCk9PT1HdChmMCkmJihoPW51bGwpLHM9PW51bGw/dGhpcy5jIT1udWxsPyhuLkRoKHIsbnVsbCkscz10aGlzLmIpOm4uRGgocixmMCk6KHRoaXMuU2socyksbi5EaChyLHMpKSxtaShlLHRoaXMuZC5VayhlLDEsdGhpcy5lLGgscywhbykpKTpzPT1udWxsP3RoaXMuYyE9bnVsbD9uLkRoKHIsbnVsbCk6bi5EaChyLGYwKToodGhpcy5TayhzKSxuLkRoKHIscykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO2UuTGcoKSYmZS5NZygpPyhzPSEwLG89bi5DaChyKSxvPT1udWxsPyhzPSExLG89dGhpcy5iKTpHdChvKT09PUd0KGYwKSYmKG89bnVsbCksbi5FaChyKSxtaShlLHRoaXMuZC5VayhlLDIsdGhpcy5lLG8sdGhpcy5iLHMpKSk6bi5FaChyKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlIiw3NzApLEkoMTMxOSw3NzAse30sRFh0KSxsLlNrPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmEud2ooZSkpdGhyb3cgcnQobmV3IFhrKEFIK3NsKGUpK0xIK3RoaXMuYSsiJyIpKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlRHluYW1pYyIsMTMxOSksSSgxMzIwLDc3MCx7fSx5WXQpLGwuU2s9ZnVuY3Rpb24oZSl7fSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVTdGF0aWMiLDEzMjApLEkoMzk4LDUwNCx7fSxQaiksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoLGQsdyxrLEM7aWYoQz1uLkNoKHIpLHRoaXMuS2ooKSYmR3QoQyk9PT1HdChmMCkpcmV0dXJuIG51bGw7aWYodGhpcy5zaygpJiZzJiZDIT1udWxsKXtpZih3PXUoQyw0OSksdy5raCgpJiYoaz1LcChlLHcpLHchPWspKXtpZighbGF0KHRoaXMuYSxrKSl0aHJvdyBydChuZXcgWGsoQUgrc2woaykrTEgrdGhpcy5hKyInIikpO24uRGgocixDPWspLHRoaXMucmsoKSYmKGg9dShrLDQ5KSxkPXcuaWgoZSx0aGlzLmI/Vmkody5UZygpLHRoaXMuYik6LTEtVmkoZS5UZygpLHRoaXMuZSksbnVsbCxudWxsKSwhaC5laCgpJiYoZD1oLmdoKGUsdGhpcy5iP1ZpKGguVGcoKSx0aGlzLmIpOi0xLVZpKGUuVGcoKSx0aGlzLmUpLG51bGwsZCkpLGQmJmQuRmkoKSksZS5MZygpJiZlLk1nKCkmJm1pKGUsbmV3IENDKGUsOSx0aGlzLmUsdyxrKSl9cmV0dXJuIEN9ZWxzZSByZXR1cm4gQ30sbC5Raj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoLGQ7cmV0dXJuIGQ9bi5DaChyKSxHdChkKT09PUd0KGYwKSYmKGQ9bnVsbCksbi5EaChyLHMpLHRoaXMuYmooKT9HdChkKSE9PUd0KHMpJiZkIT1udWxsJiYoaD11KGQsNDkpLG89aC5paChlLFZpKGguVGcoKSx0aGlzLmIpLG51bGwsbykpOnRoaXMucmsoKSYmZCE9bnVsbCYmKG89dShkLDQ5KS5paChlLC0xLVZpKGUuVGcoKSx0aGlzLmUpLG51bGwsbykpLGUuTGcoKSYmZS5NZygpJiYoIW8mJihvPW5ldyBTcCg0KSksby5FaShuZXcgQ0MoZSwxLHRoaXMuZSxkLHMpKSksb30sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPW4uQ2gociksR3QoaCk9PT1HdChmMCkmJihoPW51bGwpLG4uRWgociksZS5MZygpJiZlLk1nKCkmJighbyYmKG89bmV3IFNwKDQpKSx0aGlzLktqKCk/by5FaShuZXcgQ0MoZSwyLHRoaXMuZSxoLG51bGwpKTpvLkVpKG5ldyBDQyhlLDEsdGhpcy5lLGgsbnVsbCkpKSxvfSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGx9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG8saCxkLHcsaztpZihzIT1udWxsJiYhbGF0KHRoaXMuYSxzKSl0aHJvdyBydChuZXcgWGsoQUgrKEV0KHMsNTYpP2Q0dCh1KHMsNTYpLlRnKCkpOkJtdChzbChzKSkpK0xIK3RoaXMuYSsiJyIpKTtrPW4uQ2gociksdz1rIT1udWxsLHRoaXMuS2ooKSYmR3Qoayk9PT1HdChmMCkmJihrPW51bGwpLGQ9bnVsbCx0aGlzLmJqKCk/R3QoaykhPT1HdChzKSYmKGshPW51bGwmJihvPXUoayw0OSksZD1vLmloKGUsVmkoby5UZygpLHRoaXMuYiksbnVsbCxkKSkscyE9bnVsbCYmKG89dShzLDQ5KSxkPW8uZ2goZSxWaShvLlRnKCksdGhpcy5iKSxudWxsLGQpKSk6dGhpcy5yaygpJiZHdChrKSE9PUd0KHMpJiYoayE9bnVsbCYmKGQ9dShrLDQ5KS5paChlLC0xLVZpKGUuVGcoKSx0aGlzLmUpLG51bGwsZCkpLHMhPW51bGwmJihkPXUocyw0OSkuZ2goZSwtMS1WaShlLlRnKCksdGhpcy5lKSxudWxsLGQpKSkscz09bnVsbCYmdGhpcy5LaigpP24uRGgocixmMCk6bi5EaChyLHMpLGUuTGcoKSYmZS5NZygpPyhoPW5ldyBzcnQoZSwxLHRoaXMuZSxrLHMsdGhpcy5LaigpJiYhdyksZD8oZC5FaShoKSxkLkZpKCkpOm1pKGUsaCkpOmQmJmQuRmkoKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdzt3PW4uQ2gociksZD13IT1udWxsLHRoaXMuS2ooKSYmR3Qodyk9PT1HdChmMCkmJih3PW51bGwpLGg9bnVsbCx3IT1udWxsJiYodGhpcy5iaigpPyhzPXUodyw0OSksaD1zLmloKGUsVmkocy5UZygpLHRoaXMuYiksbnVsbCxoKSk6dGhpcy5yaygpJiYoaD11KHcsNDkpLmloKGUsLTEtVmkoZS5UZygpLHRoaXMuZSksbnVsbCxoKSkpLG4uRWgociksZS5MZygpJiZlLk1nKCk/KG89bmV3IHNydChlLHRoaXMuS2ooKT8yOjEsdGhpcy5lLHcsbnVsbCxkKSxoPyhoLkVpKG8pLGguRmkoKSk6bWkoZSxvKSk6aCYmaC5GaSgpfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5zaz1mdW5jdGlvbigpe3JldHVybiExfSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0IiwzOTgpLEkoNTY0LDM5OCx7fSxvbnQpLGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudCIsNTY0KSxJKDEzMjMsNTY0LHt9LHdXdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50UmVzb2x2aW5nIiwxMzIzKSxJKDc3Miw1NjQse30sUjJ0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRVbnNldHRhYmxlIiw3NzIpLEkoMTMyNSw3NzIse30sbVd0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRVbnNldHRhYmxlUmVzb2x2aW5nIiwxMzI1KSxJKDY0MCw1NjQse30seG50KSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZSIsNjQwKSxJKDEzMjQsNjQwLHt9LEVLdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VSZXNvbHZpbmciLDEzMjQpLEkoNzczLDY0MCx7fSxUdnQpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlVW5zZXR0YWJsZSIsNzczKSxJKDEzMjYsNzczLHt9LFRLdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlUmVzb2x2aW5nIiwxMzI2KSxJKDY0MSwzOTgse30sajJ0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nIiw2NDEpLEkoMTMyNyw2NDEse30seVd0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nVW5zZXR0YWJsZSIsMTMyNyksSSg3NzQsNjQxLHt9LGt2dCksbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZ1dpdGhJbnZlcnNlIiw3NzQpLEkoMTMyOCw3NzQse30sQ0t0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2VVbnNldHRhYmxlIiwxMzI4KSxJKDEzMjEsMzk4LHt9LHhXdCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFVuc2V0dGFibGUiLDEzMjEpLEkoNzcxLDM5OCx7fSxFdnQpLGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RXaXRoSW52ZXJzZSIsNzcxKSxJKDEzMjIsNzcxLHt9LF9LdCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlVW5zZXR0YWJsZSIsMTMyMiksSSg3NzUsNTY1LFNILG13dCksbC5Qaz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG13dCh0aGlzLmEsdGhpcy5jLGUpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFZzbih0aGlzLGUsdGhpcy5iLHIpfSxsLlJrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gVXNuKHRoaXMsZSx0aGlzLmIscil9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW52ZXJzZVVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Iiw3NzUpLEkoMTMyOSwxLHR1dCxOenQpLGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5maj1mdW5jdGlvbigpe3JldHVybiBFdCh0aGlzLmEsOTUpP3UodGhpcy5hLDk1KS5maigpOiF0aGlzLmEuZGMoKX0sbC5XYj1mdW5jdGlvbihlKXt0aGlzLmEuJGIoKSx0aGlzLmEuR2ModShlLDE1KSl9LGwuWGo9ZnVuY3Rpb24oKXtFdCh0aGlzLmEsOTUpP3UodGhpcy5hLDk1KS5YaigpOnRoaXMuYS4kYigpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NldHRpbmdNYW55IiwxMzI5KSxJKDEzMzAsNTY1LFNILCRadCksbC5Paz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGxudCgoRGkoKSx1QSksdGhpcy5iLkloKHRoaXMuYSxlKSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NpbXBsZUNvbnRlbnRGZWF0dXJlTWFwRW50cnkiLDEzMzApLEkoNjQyLDU2NSxTSCxsbnQpLGwuT2s9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBsbnQodGhpcy5jLGUpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NpbXBsZUZlYXR1cmVNYXBFbnRyeSIsNjQyKSxJKDM5MSw0OTcsX2QseG0pLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEdoLEllLDI2LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFU3VwZXJBZGFwdGVyLzEiLDM5MSksSSg0NDQsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw4MzY6MSw0OToxLDk3OjEsMTUwOjEsNDQ0OjEsMTE0OjEsMTE1OjF9LFJMKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgeEModGhpcyxobyx0aGlzKSksdGhpcy5hfXJldHVybiBvaCh0aGlzLGUtWm4oKGRuKCksSHcpKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHxIdyksZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSAyOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHhDKHRoaXMsaG8sdGhpcykpLEJhKHRoaXMuYSxlLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksSHcpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxIdykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MH1yZXR1cm4gc2godGhpcyxlLVpuKChkbigpLEh3KSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8SHcpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6WGModGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyB4Qyh0aGlzLGhvLHRoaXMpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IHhDKHRoaXMsaG8sdGhpcykpLHJzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLEh3KSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8SHcpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksSHd9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpYYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYSYmKHRoaXMuYT1uZXcgeEModGhpcyxobyx0aGlzKSkseHIodGhpcy5hKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLEh3KSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8SHcpLGUpKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsIiw0NDQpLEkoNDQ1LDg1LHpvLHhDKSxsLmNqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVkbih0aGlzLHUoZSw4Nyksbil9LGwuZGo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV2RuKHRoaXMsdShlLDg3KSxuKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzEiLDQ0NSksSSg2MzQsNDMsXzQsWXR0KSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjUih0aGlzKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIiLDYzNCksSSg1NTYsTjEsanUsY1IpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFdXdCh0aGlzLHUoZSw4NykpfSxsLkdjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztmb3Iocz0hMSxyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksODcpLGtpKHRoaXMuYSxuLCIiKT09bnVsbCYmKHM9ITApO3JldHVybiBzfSxsLiRiPWZ1bmN0aW9uKCl7WXUodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4ga2wodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IGgyKG5ldyB3Zyh0aGlzLmEpLmEpLG5ldyB1UihlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gT0p0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gJDkodGhpcy5hKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMSIsNTU2KSxJKDU1NywxLHJhLHVSKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdShZdih0aGlzLmEpLmNkKCksODcpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5ifSxsLlFiPWZ1bmN0aW9uKCl7bHRlKHRoaXMuYSl9LFAoTW4sIkVUeXBlUGFyYW1ldGVySW1wbC8yLzEvMSIsNTU3KSxJKDEyNzYsNDMsXzQsVHF0KSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKT9hcnQodGhpcyxlKTohIUFvKHRoaXMuZixlKX0sbC54Yz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPWVhKGUpP0ZjKHRoaXMsZSk6ZWMoQW8odGhpcy5mLGUpKSxFdChuLDgzNyk/KHI9dShuLDgzNyksbj1yLl9qKCksa2kodGhpcyx1KGUsMjM1KSxuKSxuKTpuPz8oZT09bnVsbD8oZGV0KCksYzVlKTpudWxsKX0sUChNbiwiRVZhbGlkYXRvclJlZ2lzdHJ5SW1wbCIsMTI3NiksSSgxMzEzLDcwNCx7MTA1OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsMTk0MToxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0sWVopLGwuSWg9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS55aigpKXtjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAzMTpjYXNlIDMyOmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDg6Y2FzZSA0OTpjYXNlIDIwOnJldHVybiBuPT1udWxsP251bGw6JG8obik7Y2FzZSAyNTpyZXR1cm4gdG9uKG4pO2Nhc2UgMjc6cmV0dXJuIHZhbihuKTtjYXNlIDI4OnJldHVybiB3YW4obik7Y2FzZSAyOTpyZXR1cm4gbj09bnVsbD9udWxsOlNVdChyQVswXSx1KG4sMTk5KSk7Y2FzZSA0MTpyZXR1cm4gbj09bnVsbD8iIjpBcCh1KG4sMjkwKSk7Y2FzZSA0MjpyZXR1cm4gJG8obik7Y2FzZSA1MDpyZXR1cm4gQnIobik7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7c3dpdGNoKGUuRz09LTEmJihlLkc9KEg9RmwoZSksSD9GZyhILk1oKCksZSk6LTEpKSxlLkcpe2Nhc2UgMDpyZXR1cm4gcj1uZXcgVXR0LHI7Y2FzZSAxOnJldHVybiBuPW5ldyBKRixuO2Nhc2UgMjpyZXR1cm4gcz1uZXcgWEwscztjYXNlIDQ6cmV0dXJuIG89bmV3IGxSLG87Y2FzZSA1OnJldHVybiBoPW5ldyBFcXQsaDtjYXNlIDY6cmV0dXJuIGQ9bmV3IFd6dCxkO2Nhc2UgNzpyZXR1cm4gdz1uZXcgcUIsdztjYXNlIDEwOnJldHVybiBDPW5ldyBfayxDO2Nhc2UgMTE6cmV0dXJuIE09bmV3IFd0dCxNO2Nhc2UgMTI6cmV0dXJuIEY9bmV3IFlYdCxGO2Nhc2UgMTM6cmV0dXJuIFY9bmV3IEt0dCxWO2Nhc2UgMTQ6cmV0dXJuIFk9bmV3IHEydCxZO2Nhc2UgMTc6cmV0dXJuIHR0PW5ldyBXWix0dDtjYXNlIDE4OnJldHVybiBrPW5ldyB3dixrO2Nhc2UgMTk6cmV0dXJuIGd0PW5ldyBSTCxndDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihSY3QrZS56YitrdykpfX0sbC5LaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2J0KG4pO2Nhc2UgMjE6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgTnAobik7Y2FzZSAyMzpjYXNlIDIyOnJldHVybiBuPT1udWxsP251bGw6c2huKG4pO2Nhc2UgMjY6Y2FzZSAyNDpyZXR1cm4gbj09bnVsbD9udWxsOkVJKCRsKG4sLTEyOCwxMjcpPDwyND4+MjQpO2Nhc2UgMjU6cmV0dXJuIGJibihuKTtjYXNlIDI3OnJldHVybiBxZm4obik7Y2FzZSAyODpyZXR1cm4gSGZuKG4pO2Nhc2UgMjk6cmV0dXJuIGgwbihuKTtjYXNlIDMyOmNhc2UgMzE6cmV0dXJuIG49PW51bGw/bnVsbDpseShuKTtjYXNlIDM4OmNhc2UgMzc6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgU3B0KG4pO2Nhc2UgNDA6Y2FzZSAzOTpyZXR1cm4gbj09bnVsbD9udWxsOmRlKCRsKG4sX2EsdmkpKTtjYXNlIDQxOnJldHVybiBudWxsO2Nhc2UgNDI6cmV0dXJuIG49PW51bGwsbnVsbDtjYXNlIDQ0OmNhc2UgNDM6cmV0dXJuIG49PW51bGw/bnVsbDpnMihTcShuKSk7Y2FzZSA0OTpjYXNlIDQ4OnJldHVybiBuPT1udWxsP251bGw6ZUUoJGwobixNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MDpyZXR1cm4gbjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihIRStlLm5lKCkra3cpKX19LFAoTW4sIkVjb3JlRmFjdG9yeUltcGwiLDEzMTMpLEkoNTQ3LDE3OSx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjM1OjEsMTA4OjEsMTkzOToxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSw1NDc6MSwxMTQ6MSwxMTU6MSw2NzU6MX0sZlh0KSxsLmdiPSExLGwuaGI9ITE7dmFyIHVMdCxvNWU9ITE7UChNbiwiRWNvcmVQYWNrYWdlSW1wbCIsNTQ3KSxJKDExODQsMSx7ODM3OjF9LFhaKSxsLl9qPWZ1bmN0aW9uKCl7cmV0dXJuIFFVdCgpLHU1ZX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xIiwxMTg0KSxJKDExOTMsMSxpaSxRWiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNDcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChvTixJZSwxNDcsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzEwIiwxMTkzKSxJKDExOTQsMSxpaSxaWiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTEpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChtZnQsSWUsMTkxLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xMSIsMTE5NCksSSgxMTk1LDEsaWksSlopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTYpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChrYixJZSw1NixlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTIiLDExOTUpLEkoMTE5NiwxLGlpLHRKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDM5OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFZoLE84dCw1OSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTMiLDExOTYpLEkoMTE5NywxLGlpLGVKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIzNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHIxLEllLDIzNSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTQiLDExOTcpLEkoMTE5OCwxLGlpLG5KKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDUwOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHp3LEllLDIwMTcsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE1IiwxMTk4KSxJKDExOTksMSxpaSxhQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw5OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEp5LFA0LDE4LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xNiIsMTE5OSksSSgxMjAwLDEsaWksckopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTcwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQXUsUDQsMTcwLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xNyIsMTIwMCksSSgxMjAxLDEsaWksaUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNDcyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoUXksSWUsNDcyLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xOCIsMTIwMSksSSgxMjAyLDEsaWksc0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTQ4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoY2MsYzBlLDU0OCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTkiLDEyMDIpLEkoMTE4NSwxLGlpLG9CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDMyMil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFp5LFA0LDM0LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8yIiwxMTg1KSxJKDEyMDMsMSxpaSxJayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwyNDEpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChobyxDMGUsODcsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzIwIiwxMjAzKSxJKDEyMDQsMSxpaSxaVCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw0NDQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChsdSxJZSw4MzYsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzIxIiwxMjA0KSxJKDEyMDUsMSxpaSxjQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gT20oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEJzLHRlLDQ3NixlLDgsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjIiLDEyMDUpLEkoMTIwNiwxLGlpLGFKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEh1LHRlLDE5MCxlLDAsMil9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjMiLDEyMDYpLEkoMTIwNywxLGlpLHVCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIxNyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEU2LHRlLDIxNyxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjQiLDEyMDcpLEkoMTIwOCwxLGlpLGxCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE3Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGFTLHRlLDE3MixlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjUiLDEyMDgpLEkoMTIwOSwxLGlpLG9KKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE5OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEhILHRlLDE5OSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjYiLDEyMDkpLEkoMTIxMCwxLGlpLEpUKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChTTHQsSWUsMjExMCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjciLDEyMTApLEkoMTIxMSwxLGlpLGttKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBObShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoY2EsdGUsMzMzLGUsNywxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8yOCIsMTIxMSksSSgxMjEyLDEsaWksaEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChxQXQseHksNTgsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzI5IiwxMjEyKSxJKDExODYsMSxpaSxmQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw1MTApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChacix7MzoxLDQ6MSw1OjEsMTkzNDoxfSw1OTAsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMiLDExODYpLEkoMTIxMywxLGlpLGNKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDU3Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFZBdCxJZSwxOTQwLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMCIsMTIxMyksSSgxMjE0LDEsaWksdUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTUzKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoZ0x0LHh5LDE1MyxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMzEiLDEyMTQpLEkoMTIxNSwxLGlpLHQ5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDcyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoc1UsTjBlLDcyLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMiIsMTIxNSksSSgxMjE2LDEsaWksZEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTU1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoWEUsdGUsMTU1LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMyIsMTIxNiksSSgxMjE3LDEsaWksZ0IpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChqYSx0ZSwxOSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMzQiLDEyMTcpLEkoMTIxOCwxLGlpLHVjKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDI5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFU4dCxJZSwyOTAsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM1IiwxMjE4KSxJKDEyMTksMSxpaSxsSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChUdyx0ZSwxNjIsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM2IiwxMjE5KSxJKDEyMjAsMSxpaSxwQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw4Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFc4dCxJZSw4MyxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMzciLDEyMjApLEkoMTIyMSwxLGlpLGU5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDU5MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGxMdCxJZSw1OTEsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM4IiwxMjIxKSxJKDEyMjIsMSxpaSxoSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQUx0LEllLDIxMTEsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM5IiwxMjIyKSxJKDExODcsMSxpaSxmSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw4OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEdoLEllLDI2LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC80IiwxMTg3KSxJKDEyMjMsMSxpaSxuOSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChDdyx0ZSwxODQsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQwIiwxMjIzKSxJKDEyMjQsMSxpaSxiQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQxIiwxMjI0KSxJKDEyMjUsMSxpaSxyOSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw1ODgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChHQXQsSWUsNTg4LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC80MiIsMTIyNSksSSgxMjI2LDEsaWksaTkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KExMdCx0ZSwyMTEyLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC80MyIsMTIyNiksSSgxMjI3LDEsaWksUmYpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNDIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChNMixEcSw0MixlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvNDQiLDEyMjcpLEkoMTE4OCwxLGlpLGpMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDEzOCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGkxLEllLDEzOCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvNSIsMTE4OCksSSgxMTg5LDEsaWksJEwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTQ4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQ2Z0LEllLDE0OCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvNiIsMTE4OSksSSgxMTkwLDEsaWkscngpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNDU3KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoaVUsSWUsNjcxLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC83IiwxMTkwKSxJKDExOTEsMSxpaSxkSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw1NzMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChlZyxJZSw2NzgsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzgiLDExOTEpLEkoMTE5MiwxLGlpLGdKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDQ3MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KG5BLEllLDQ3MSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvOSIsMTE5MiksSSgxMDI1LDE5ODIsbzBlLHFxdCksbC5iaT1mdW5jdGlvbihlLG4pe0l1bih0aGlzLHUobiw0MTUpKX0sbC5maT1mdW5jdGlvbihlLG4pe25vZSh0aGlzLGUsdShuLDQxNSkpfSxQKE1uLCJNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0IiwxMDI1KSxJKDEwMjYsMTQzLFFELHJYdCksbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYX0sUChNbiwiTWluaW1hbEVPYmplY3RJbXBsLzFBcnJheURlbGVnYXRpbmdBZGFwdGVyTGlzdC8xIiwxMDI2KSxJKDEwNTMsMTA1Mix7fSxtVXQpLFAoIm9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4iLCJFY29yZVBsdWdpbiIsMTA1Myk7dmFyIGxMdD1ZaShQMGUsIlJlc291cmNlIik7SSg3ODEsMTM3OCxGMGUpLGwuWWs9ZnVuY3Rpb24oZSl7fSxsLlprPWZ1bmN0aW9uKGUpe30sbC5Waz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHp0dCh0aGlzKSksdGhpcy5hfSxsLldrPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYocz1lLmxlbmd0aCxzPjApaWYoUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Nyl7Zm9yKGg9bmV3IFljKDQpLG89MSxuPTE7bjxzOysrbilScihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobik9PTQ3JiYodWUoaCxvPT1uPyIiOmUuc3Vic3RyKG8sbi1vKSksbz1uKzEpO3JldHVybiB1ZShoLGUuc3Vic3RyKG8pKSxPMW4odGhpcyxoKX1lbHNlIFJyKHMtMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHMtMSk9PTYzJiYocj11dnQoZSxFdSg2Mykscy0yKSxyPjAmJihlPWUuc3Vic3RyKDAscikpKTtyZXR1cm4gSmduKHRoaXMsZSl9LGwuWGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEFwKHRoaXMuZ20pKyJAIisoZT1IaSh0aGlzKT4+PjAsZS50b1N0cmluZygxNikpKyIgdXJpPSciK3RoaXMuZCsiJyJ9LGwuYj0hMSxQKGV1dCwiUmVzb3VyY2VJbXBsIiw3ODEpLEkoMTM3OSw3ODEsRjBlLEZ6dCksUChldXQsIkJpbmFyeVJlc291cmNlSW1wbCIsMTM3OSksSSgxMTY5LDY5NCxZY3QpLGwuc2k9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTYpP05ubih0aGlzLHUoZSw1NikpOkV0KGUsNTkxKT9uZXcgZXIodShlLDU5MSkuVmsoKSk6R3QoZSk9PT1HdCh0aGlzLmYpP3UoZSwxNCkuS2MoKTooZjgoKSxsTi5hKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBpNXQodGhpcyl9LGwuYT0hMSxQKCRpLCJFY29yZVV0aWwvQ29udGVudFRyZWVJdGVyYXRvciIsMTE2OSksSSgxMzgwLDExNjksWWN0LE5ZdCksbC5zaT1mdW5jdGlvbihlKXtyZXR1cm4gR3QoZSk9PT1HdCh0aGlzLmYpP3UoZSwxNSkuS2MoKTpuZXcgdlp0KHUoZSw1NikpfSxQKGV1dCwiUmVzb3VyY2VJbXBsLzUiLDEzODApLEkoNjQ4LDE5OTQsVDBlLHp0dCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pPD00P2ZFKHRoaXMsZSk6RXQoZSw0OSkmJnUoZSw0OSkuWmcoKT09dGhpcy5hfSxsLmJpPWZ1bmN0aW9uKGUsbil7ZT09dGhpcy5pLTEmJih0aGlzLmEuYnx8KHRoaXMuYS5iPSEwKSl9LGwuZGk9ZnVuY3Rpb24oZSxuKXtlPT0wP3RoaXMuYS5ifHwodGhpcy5hLmI9ITApOkJydCh0aGlzLGUsbil9LGwuZmk9ZnVuY3Rpb24oZSxuKXt9LGwuZ2k9ZnVuY3Rpb24oZSxuLHIpe30sbC5haj1mdW5jdGlvbigpe3JldHVybiAyfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmNqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSxuPXIud2godGhpcy5hLG4pLG59LGwuZGo9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHIud2gobnVsbCxuKX0sbC5laj1mdW5jdGlvbigpe3JldHVybiExfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGtiLEllLDU2LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKGV1dCwiUmVzb3VyY2VJbXBsL0NvbnRlbnRzRUxpc3QiLDY0OCksSSg5NTcsMTk2NCxJRSxQenQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5faChlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sUCgkaSwiQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdC8xIiw5NTcpO3ZhciBoTHQsZkx0LG1hLGRMdDtJKDYyNCwxLHt9LEZLdCk7dmFyIGFVLG9VO1AoJGksIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YSIsNjI0KSxJKDExNjAsMSx7fSxGVnQpLGwuJGs9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5faz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PS0yJiZ2Zyh0aGlzLGEwbih0aGlzLmQsdGhpcy5iKSksdGhpcy5hfSxsLmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSx2bigpLGlvfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz09VUUmJkkzKHRoaXMsT2llKHRoaXMuZCx0aGlzLmIpKSx0aGlzLmN9LGwuY2w9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5hPS0yLGwuYz1VRSxQKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRUNsYXNzRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNjApLEkoMTE2MSwxLHt9LHJadCksbC4kaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PShMOCgpLGFVKSYmZHB0KHRoaXMsazJuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmF9LGwuX2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM9PShMOCgpLGFVKSYmVHR0KHRoaXMsRTJuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmN9LGwuYmw9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kJiZDdHQodGhpcyxrd24odGhpcy5mLHRoaXMuYikpLHRoaXMuZH0sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmU9PVVFJiZRQih0aGlzLE9pZSh0aGlzLmYsdGhpcy5iKSksdGhpcy5lfSxsLmNsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZz09LTImJlpCKHRoaXMsQ2RuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmd9LGwuZT1VRSxsLmc9LTIsUCgkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VEYXRhVHlwZUV4dGVuZGVkTWV0YURhdGFJbXBsIiwxMTYxKSxJKDExNTksMSx7fSxSVnQpLGwuYj0hMSxsLmM9ITEsUCgkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VQYWNrYWdlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNTkpLEkoMTE2MiwxLHt9LG5adCksbC5jPS0yLGwuZT1VRSxsLmY9VUUsUCgkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VTdHJ1Y3R1cmFsRmVhdHVyZUV4dGVuZGVkTWV0YURhdGFJbXBsIiwxMTYyKSxJKDU4NSw2MjIsem8sU2opLGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5jPTAsUCgkaSwiRURhdGFUeXBlRUxpc3QiLDU4NSk7dmFyIGdMdD1ZaSgkaSwiRmVhdHVyZU1hcCIpO0koNzUsNTg1LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsMTUzOjEsMjE1OjEsMTkzNzoxLDY5OjEsOTU6MX0saXMpLGwuVmM9ZnVuY3Rpb24oZSxuKXt3Mm4odGhpcyxlLHUobiw3MikpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBCYm4odGhpcyx1KGUsNzIpKX0sbC5ZaD1mdW5jdGlvbihlKXtFZW4odGhpcyx1KGUsNzIpKX0sbC5jaj1mdW5jdGlvbihlLG4pe3JldHVybiByWmUodGhpcyx1KGUsNzIpLG4pfSxsLmRqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGh2dCh0aGlzLHUoZSw3Miksbil9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gJHduKHRoaXMsZSxuKX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBtM24odGhpcyxlLHUobiw3MikpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGN2bih0aGlzLGUsdShuLDcyKSl9LGwuamo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaVplKHRoaXMsdShlLDcyKSxuKX0sbC5raj1mdW5jdGlvbihlLG4pe3JldHVybiBvS3QodGhpcyx1KGUsNzIpLG4pfSxsLmxqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gY2RuKHRoaXMsdShlLDcyKSx1KG4sNzIpLHIpfSxsLm9pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFNzdCh0aGlzLGUsdShuLDcyKSl9LGwuZGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVTV0KHRoaXMsZSxuKX0sbC5XYz1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtmb3IoQz1uZXcgS3Yobi5nYygpKSxvPW4uS2MoKTtvLk9iKCk7KWlmKHM9dShvLlBiKCksNzIpLGg9cy5haygpLFYwKHRoaXMuZSxoKSkoIWguaGkoKXx8IWskKHRoaXMsaCxzLmRkKCkpJiYhZkUoQyxzKSkmJk1yKEMscyk7ZWxzZXtmb3IoTT1hdSh0aGlzLmUuVGcoKSxoKSxyPXUodGhpcy5nLDExOSksZD0hMCx3PTA7dzx0aGlzLmk7Kyt3KWlmKGs9clt3XSxNLnJsKGsuYWsoKSkpe3UodTQodGhpcyx3LHMpLDcyKSxkPSExO2JyZWFrfWQmJk1yKEMscyl9cmV0dXJuIHl5dCh0aGlzLGUsQyl9LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihrPW5ldyBLdihlLmdjKCkpLHM9ZS5LYygpO3MuT2IoKTspaWYocj11KHMuUGIoKSw3Miksbz1yLmFrKCksVjAodGhpcy5lLG8pKSghby5oaSgpfHwhayQodGhpcyxvLHIuZGQoKSkmJiFmRShrLHIpKSYmTXIoayxyKTtlbHNle2ZvcihDPWF1KHRoaXMuZS5UZygpLG8pLG49dSh0aGlzLmcsMTE5KSxoPSEwLGQ9MDtkPHRoaXMuaTsrK2QpaWYodz1uW2RdLEMucmwody5haygpKSl7dSh1NCh0aGlzLGQsciksNzIpLGg9ITE7YnJlYWt9aCYmTXIoayxyKX1yZXR1cm4gcnModGhpcyxrKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5qPS0xLGhhdCh0aGlzLHRoaXMuaSxlKX0sbC5lbD1mdW5jdGlvbihlLG4scil7cmV0dXJuICQ1dCh0aGlzLGUsbixyKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiB3RCh0aGlzLGUsbil9LGwuZmw9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB1eHQodGhpcyxlLG4scil9LGwuZ2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbC5obD1mdW5jdGlvbihlLG4pe3JldHVybiBrRCh0aGlzLGUsbil9LGwuaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoU3QodGhpcyxlKSw3MikuYWsoKX0sbC5qbD1mdW5jdGlvbihlKXtyZXR1cm4gdShTdCh0aGlzLGUpLDcyKS5kZCgpfSxsLmtsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmlqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGw9ZnVuY3Rpb24oZSl7cmV0dXJuIVZJKHRoaXMsZSl9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGE1ZSxOMGUsMzMyLGUsMCwxKX0sbC5Haz1mdW5jdGlvbihlKXtyZXR1cm4gY250KHRoaXMsZSl9LGwuV2I9ZnVuY3Rpb24oZSl7UU0odGhpcyxlKX0sbC5tbD1mdW5jdGlvbihlLG4pe2txKHRoaXMsZSxuKX0sbC5ubD1mdW5jdGlvbihlKXtyZXR1cm4gV2VlKHRoaXMsZSl9LGwub2w9ZnVuY3Rpb24oZSl7dnNlKHRoaXMsZSl9LFAoJGksIkJhc2ljRmVhdHVyZU1hcCIsNzUpLEkoMTg1MSwxLEpkKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7aWYodGhpcy5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3pqKHRoaXMpO3RyeXtxY2UodGhpcy5lLHRoaXMuYix0aGlzLmEsZSksdGhpcy5kPXRoaXMuZS5qLCR6KHRoaXMpfWNhdGNoKG4pe3Rocm93IG49V2kobiksRXQobiw3Myk/cnQobmV3IGVoKTpydChuKX19LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gX2l0KHRoaXMpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHZyZSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiAkeih0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuVWI9ZnVuY3Rpb24oKXt2YXIgZTtpZih2cmUodGhpcykpcmV0dXJuIHpqKHRoaXMpLHRoaXMuZz0tLXRoaXMuYSx0aGlzLkxrKCkmJihlPWRfKHRoaXMuZSx0aGlzLmIsdGhpcy5jLHRoaXMuYSx0aGlzLmopLHRoaXMuaj1lKSx0aGlzLmk9MCx0aGlzLmo7dGhyb3cgcnQobmV3IGxjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEtMX0sbC5RYj1mdW5jdGlvbigpe2lmKHRoaXMuZz09LTEpdGhyb3cgcnQobmV3IEl1KTt6aih0aGlzKTt0cnl7amFlKHRoaXMuZSx0aGlzLmIsdGhpcy5nKSx0aGlzLmQ9dGhpcy5lLmosdGhpcy5nPHRoaXMuYSYmKC0tdGhpcy5hLC0tdGhpcy5jKSwtLXRoaXMuZ31jYXRjaChlKXt0aHJvdyBlPVdpKGUpLEV0KGUsNzMpP3J0KG5ldyBlaCk6cnQoZSl9fSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuV2I9ZnVuY3Rpb24oZSl7aWYodGhpcy5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3pqKHRoaXMpO3RyeXtmbGUodGhpcy5lLHRoaXMuYix0aGlzLmcsZSksdGhpcy5kPXRoaXMuZS5qfWNhdGNoKG4pe3Rocm93IG49V2kobiksRXQobiw3Myk/cnQobmV3IGVoKTpydChuKX19LGwuYT0wLGwuYz0wLGwuZD0wLGwuZj0hMSxsLmc9MCxsLmk9MCxQKCRpLCJGZWF0dXJlTWFwVXRpbC9CYXNpY0ZlYXR1cmVFSXRlcmF0b3IiLDE4NTEpLEkoNDEwLDE4NTEsSmQsVTgpLGwucGw9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7Zm9yKHI9dGhpcy5lLmksZT11KHRoaXMuZS5nLDExOSk7dGhpcy5jPHI7KXtpZihuPWVbdGhpcy5jXSx0aGlzLmsucmwobi5haygpKSlyZXR1cm4gdGhpcy5qPXRoaXMuZj9uOm4uZGQoKSx0aGlzLmk9MiwhMDsrK3RoaXMuY31yZXR1cm4gdGhpcy5pPTEsdGhpcy5nPS0xLCExfSxsLnFsPWZ1bmN0aW9uKCl7dmFyIGUsbjtmb3IoZT11KHRoaXMuZS5nLDExOSk7LS10aGlzLmM+PTA7KWlmKG49ZVt0aGlzLmNdLHRoaXMuay5ybChuLmFrKCkpKXJldHVybiB0aGlzLmo9dGhpcy5mP246bi5kZCgpLHRoaXMuaT0tMiwhMDtyZXR1cm4gdGhpcy5pPS0xLHRoaXMuZz0tMSwhMX0sUCgkaSwiQmFzaWNGZWF0dXJlTWFwL0ZlYXR1cmVFSXRlcmF0b3IiLDQxMCksSSg2NjIsNDEwLEpkLFVldCksbC5Maz1mdW5jdGlvbigpe3JldHVybiEwfSxQKCRpLCJCYXNpY0ZlYXR1cmVNYXAvUmVzb2x2aW5nRmVhdHVyZUVJdGVyYXRvciIsNjYyKSxJKDk1NSw0ODYsQ0gsTFV0KSxsLkdpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LFAoJGksIkVDb250ZW50c0VMaXN0LzEiLDk1NSksSSg5NTYsNDg2LENILHRVdCksbC5Maz1mdW5jdGlvbigpe3JldHVybiExfSxQKCRpLCJFQ29udGVudHNFTGlzdC8yIiw5NTYpLEkoOTU0LDI3OSxfSCxNVXQpLGwuTms9ZnVuY3Rpb24oZSl7fSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sUCgkaSwiRUNvbnRlbnRzRUxpc3QvRmVhdHVyZUl0ZXJhdG9ySW1wbC8xIiw5NTQpLEkoODI1LDU4NSx6byxiMnQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcyksbWwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgZGYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsUCgkaSwiRURhdGFUeXBlRUxpc3QvVW5zZXR0YWJsZSIsODI1KSxJKDE4NDksNTg1LHpvLFJVdCksbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxQKCRpLCJFRGF0YVR5cGVVbmlxdWVFTGlzdCIsMTg0OSksSSgxODUwLDgyNSx6byxqVXQpLGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRURhdGFUeXBlVW5pcXVlRUxpc3QvVW5zZXR0YWJsZSIsMTg1MCksSSgxMzksODUsem8sT3UpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RDb250YWlubWVudEVMaXN0L1Jlc29sdmluZyIsMTM5KSxJKDExNjMsNTQ1LHpvLEJVdCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG82KHRoaXMsZSx1KG4sNTYpKX0sUCgkaSwiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvVW5zZXR0YWJsZS9SZXNvbHZpbmciLDExNjMpLEkoNzQ4LDE2LHpvLGl2dCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTt4cih0aGlzKSxtbCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsbWkodGhpcy5lLG5ldyBkZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxQKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUiLDc0OCksSSgxMTczLDc0OCx6byxLV3QpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9SZXNvbHZpbmciLDExNzMpLEkoNzQzLDQ5Nix6byxwMnQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcyksbWwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgZGYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsUCgkaSwiRU9iamVjdEVMaXN0L1Vuc2V0dGFibGUiLDc0MyksSSgzMjgsNDk2LHpvLFUzKSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbzYodGhpcyxlLHUobiw1NikpfSxQKCRpLCJFT2JqZWN0UmVzb2x2aW5nRUxpc3QiLDMyOCksSSgxNjQxLDc0Myx6bywkVXQpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlIiwxNjQxKSxJKDEzODEsMSx7fSxwSik7dmFyIGM1ZTtQKCRpLCJFT2JqZWN0VmFsaWRhdG9yIiwxMzgxKSxJKDU0Niw0OTYsem8sVWopLGwuems9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLkFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYj0wLFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0Iiw1NDYpLEkoMTE3Niw1NDYsem8sWVd0KSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L01hbnlJbnZlcnNlIiwxMTc2KSxJKDYyNSw1NDYsem8sZm50KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLG1sKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxtaSh0aGlzLmUsbmV3IGRmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUiLDYyNSksSSgxMTc1LDYyNSx6byxYV3QpLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZSIsMTE3NSksSSg3NDksNTQ2LHpvLHN2dCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG82KHRoaXMsZSx1KG4sNTYpKX0sUCgkaSwiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QiLDc0OSksSSgzMSw3NDksem8sQ24pLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvTWFueUludmVyc2UiLDMxKSxJKDc1MCw2MjUsem8sYXZ0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbzYodGhpcyxlLHUobiw1NikpfSxQKCRpLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlIiw3NTApLEkoMTE3NCw3NTAsem8sUVd0KSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUvTWFueUludmVyc2UiLDExNzQpLEkoMTE2NCw2MjIsem8pLGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE3OTIpPT0wfSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5ifD0xfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY0KSE9MH0sbC5iaj1mdW5jdGlvbigpe3JldHVybih0aGlzLmImNDApIT0wfSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNikhPTB9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjgpIT0wfSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiZBeSkhPTB9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjMyKSE9MH0sbC5Gaz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImd2YpIT0wfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmQ/RFp0KHRoaXMuZCxlKTp0aGlzLmFrKCkuWWooKS53aihlKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmImMj8odGhpcy5iJjEpIT0wOnRoaXMuaSE9MH0sbC5oaT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTI4KSE9MH0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLHRoaXMuYiYyJiYobWwodGhpcy5lKT8oZT0odGhpcy5iJjEpIT0wLHRoaXMuYiY9LTIsS2sodGhpcyxuZXcgZGYodGhpcy5lLDIsVmkodGhpcy5lLlRnKCksdGhpcy5haygpKSxlLCExKSkpOnRoaXMuYiY9LTIpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNTM2KT09MH0sbC5iPTAsUCgkaSwiRWNvcmVFTGlzdC9HZW5lcmljIiwxMTY0KSxJKDExNjUsMTE2NCx6byx6WHQpLGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKCRpLCJFY29yZUVMaXN0L0R5bmFtaWMiLDExNjUpLEkoNzQ3LDYzLF9kLG1wdCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gQ0kodGhpcy5hLmEsZSl9LFAoJGksIkVjb3JlRU1hcC8xIiw3NDcpLEkoNzQ2LDg1LHpvLGl3dCksbC5iaT1mdW5jdGlvbihlLG4pe3F6KHRoaXMuYix1KG4sMTMzKSl9LGwuZGk9ZnVuY3Rpb24oZSxuKXtTbmUodGhpcy5iKX0sbC5laT1mdW5jdGlvbihlLG4scil7dmFyIHM7Kysocz10aGlzLmIsdShuLDEzMykscykuZX0sbC5maT1mdW5jdGlvbihlLG4pe0ZpdCh0aGlzLmIsdShuLDEzMykpfSxsLmdpPWZ1bmN0aW9uKGUsbixyKXtGaXQodGhpcy5iLHUociwxMzMpKSxHdChyKT09PUd0KG4pJiZ1KHIsMTMzKS5UaChmWGUodShuLDEzMykuY2QoKSkpLHF6KHRoaXMuYix1KG4sMTMzKSl9LFAoJGksIkVjb3JlRU1hcC9EZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0Iiw3NDYpLEkoMTE3MSwxNTEsRDh0LCRlZSksUCgkaSwiRWNvcmVFTWFwL1Vuc2V0dGFibGUiLDExNzEpLEkoMTE3Miw3NDYsem8sWld0KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLG1sKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxtaSh0aGlzLmUsbmV3IGRmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLFAoJGksIkVjb3JlRU1hcC9VbnNldHRhYmxlL1Vuc2V0dGFibGVEZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0IiwxMTcyKSxJKDExNjgsMjI4LF80LEdZdCksbC5hPSExLGwuYj0hMSxQKCRpLCJFY29yZVV0aWwvQ29waWVyIiwxMTY4KSxJKDc0NSwxLHJhLHZadCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGRpZSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBkaWUodGhpcyksZT10aGlzLmIsdGhpcy5iPW51bGwsZX0sbC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxQKCRpLCJFY29yZVV0aWwvUHJvcGVyQ29udGVudEl0ZXJhdG9yIiw3NDUpLEkoMTM4MiwxMzgxLHt9LEhCKTt2YXIgdTVlO1AoJGksIkVjb3JlVmFsaWRhdG9yIiwxMzgyKTt2YXIgbDVlO1lpKCRpLCJGZWF0dXJlTWFwVXRpbC9WYWxpZGF0b3IiKSxJKDEyNjAsMSx7MTk0MjoxfSxiSiksbC5ybD1mdW5jdGlvbihlKXtyZXR1cm4hMH0sUCgkaSwiRmVhdHVyZU1hcFV0aWwvMSIsMTI2MCksSSg3NTcsMSx7MTk0MjoxfSx4eHQpLGwucmw9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuYz09ZT8hMDoobj1SZShKbih0aGlzLmEsZSkpLG49PW51bGw/cnduKHRoaXMsZSk/KENKdCh0aGlzLmEsZSwoRm4oKSxZRSkpLCEwKTooQ0p0KHRoaXMuYSxlLChGbigpLEkyKSksITEpOm49PShGbigpLFlFKSl9LGwuZT0hMTt2YXIgTGZ0O1AoJGksIkZlYXR1cmVNYXBVdGlsL0Jhc2ljVmFsaWRhdG9yIiw3NTcpLEkoNzU4LDQzLF80LGgydCksUCgkaSwiRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IvQ2FjaGUiLDc1OCksSSg1MDEsNTIsezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1ODoxLDc2OjEsNjk6MSw5NToxfSxETSksbC5WYz1mdW5jdGlvbihlLG4pe3FjZSh0aGlzLmMsdGhpcy5iLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFU1dCh0aGlzLmMsdGhpcy5iLGUpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHd5bih0aGlzLmMsdGhpcy5iLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIGhDKHRoaXMsZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtqYW4odGhpcy5jLHRoaXMuYixlLG4pfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuICQ1dCh0aGlzLmMsdGhpcy5iLGUsbil9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHhxKHRoaXMuYyx0aGlzLmIsZSwhMSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gaFV0KHRoaXMuYyx0aGlzLmIpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIEpZZSh0aGlzLmMsdGhpcy5iKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gR3NuKHRoaXMuYyx0aGlzLmIsZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTVd0KHRoaXMsZSxuKX0sbC4kYj1mdW5jdGlvbigpe3Z4KHRoaXMpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBrJCh0aGlzLmMsdGhpcy5iLGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBIb24odGhpcy5jLHRoaXMuYixlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4geHEodGhpcy5jLHRoaXMuYixlLCEwKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc30sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gZXNuKHRoaXMuYyx0aGlzLmIsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGoodGhpcyl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4hVkkodGhpcy5jLHRoaXMuYil9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gU2FuKHRoaXMuYyx0aGlzLmIpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIEFhbih0aGlzLmMsdGhpcy5iKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gJHVuKHRoaXMuYyx0aGlzLmIsZSl9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYWxlKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5qaT1mdW5jdGlvbihlLG4pe1Jzbih0aGlzLmMsdGhpcy5iLGUsbil9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGphZSh0aGlzLmMsdGhpcy5iLGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBUd24odGhpcy5jLHRoaXMuYixlKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBmbGUodGhpcy5jLHRoaXMuYixlLG4pfSxsLldiPWZ1bmN0aW9uKGUpe2lxKHRoaXMuYyx0aGlzLmIpLGhDKHRoaXMsdShlLDE1KSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSnVuKHRoaXMuYyx0aGlzLmIpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIFpybih0aGlzLmMsdGhpcy5iKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gbnNuKHRoaXMuYyx0aGlzLmIsZSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuO2ZvcihuPW5ldyB4ZyxuLmErPSJbIixlPWhVdCh0aGlzLmMsdGhpcy5iKTtfaXQoZSk7KWZvKG4sZEMoJHooZSkpKSxfaXQoZSkmJihuLmErPUthKTtyZXR1cm4gbi5hKz0iXSIsbi5hfSxsLlhqPWZ1bmN0aW9uKCl7aXEodGhpcy5jLHRoaXMuYil9LFAoJGksIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTGlzdCIsNTAxKSxJKDYyNywzNixRRCxBcnQpLGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuIFpDKHRoaXMsZSl9LGwuRGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHc7c3dpdGNoKHRoaXMuZCl7Y2FzZSAxOmNhc2UgMjp7aWYoaD1lLkFpKCksR3QoaCk9PT1HdCh0aGlzLmMpJiZaQyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmc9ZS56aSgpLGUueGkoKT09MSYmKHRoaXMuZD0xKSwhMDticmVha31jYXNlIDM6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDM6e2lmKGg9ZS5BaSgpLEd0KGgpPT09R3QodGhpcy5jKSYmWkModGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5kPTUsbj1uZXcgS3YoMiksTXIobix0aGlzLmcpLE1yKG4sZS56aSgpKSx0aGlzLmc9biwhMDticmVha319YnJlYWt9Y2FzZSA1Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSAzOntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpDKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHI9dSh0aGlzLmcsMTQpLHIuRmMoZS56aSgpKSwhMDticmVha319YnJlYWt9Y2FzZSA0Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSAzOntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpDKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZD0xLHRoaXMuZz1lLnppKCksITA7YnJlYWt9Y2FzZSA0OntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpDKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZD02LHc9bmV3IEt2KDIpLE1yKHcsdGhpcy5uKSxNcih3LGUuQmkoKSksdGhpcy5uPXcsZD1jdChvdChUciwxKSxYciwyNSwxNSxbdGhpcy5vLGUuQ2koKV0pLHRoaXMuZz1kLCEwO2JyZWFrfX1icmVha31jYXNlIDY6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDQ6e2lmKGg9ZS5BaSgpLEd0KGgpPT09R3QodGhpcy5jKSYmWkModGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gcj11KHRoaXMubiwxNCksci5GYyhlLkJpKCkpLGQ9dSh0aGlzLmcsNDgpLHM9UHQoVHIsWHIsMjUsZC5sZW5ndGgrMSwxNSwxKSxJYyhkLDAscywwLGQubGVuZ3RoKSxzW2QubGVuZ3RoXT1lLkNpKCksdGhpcy5nPXMsITA7YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0sUCgkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVOb3RpZmljYXRpb25JbXBsIiw2MjcpLEkoNTUyLDUwMSx7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU4OjEsNzY6MSwxNTM6MSwyMTU6MSwxOTM3OjEsNjk6MSw5NToxfSxJaiksbC5kbD1mdW5jdGlvbihlLG4pe3JldHVybiBVNXQodGhpcy5jLGUsbil9LGwuZWw9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkNXQodGhpcy5jLGUsbixyKX0sbC5mbD1mdW5jdGlvbihlLG4scil7cmV0dXJuIHV4dCh0aGlzLmMsZSxuLHIpfSxsLmdsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuaGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga0QodGhpcy5jLGUsbil9LGwuaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoeHEodGhpcy5jLHRoaXMuYixlLCExKSw3MikuYWsoKX0sbC5qbD1mdW5jdGlvbihlKXtyZXR1cm4gdSh4cSh0aGlzLmMsdGhpcy5iLGUsITEpLDcyKS5kZCgpfSxsLmtsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5sbD1mdW5jdGlvbihlKXtyZXR1cm4hVkkodGhpcy5jLGUpfSxsLm1sPWZ1bmN0aW9uKGUsbil7a3EodGhpcy5jLGUsbil9LGwubmw9ZnVuY3Rpb24oZSl7cmV0dXJuIFdlZSh0aGlzLmMsZSl9LGwub2w9ZnVuY3Rpb24oZSl7dnNlKHRoaXMuYyxlKX0sUCgkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUZlYXR1cmVNYXAiLDU1MiksSSgxMjU5LDEsdHV0LGpWdCksbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4geHEodGhpcy5iLHRoaXMuYSwtMSxlKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiFWSSh0aGlzLmIsdGhpcy5hKX0sbC5XYj1mdW5jdGlvbihlKXtrcSh0aGlzLmIsdGhpcy5hLGUpfSxsLlhqPWZ1bmN0aW9uKCl7aXEodGhpcy5iLHRoaXMuYSl9LFAoJGksIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVWYWx1ZSIsMTI1OSk7dmFyIFU2LE1mdCxJZnQsVzYsaDVlLGZOPVlpKE5ILCJBbnlUeXBlIik7SSg2NjYsNjAsVTAscmV0KSxQKE5ILCJJbnZhbGlkRGF0YXR5cGVWYWx1ZUV4Y2VwdGlvbiIsNjY2KTt2YXIgY1U9WWkoTkgsUjBlKSxkTj1ZaShOSCxqMGUpLHBMdD1ZaShOSCwkMGUpLGY1ZSxwYyxiTHQsVTIsZDVlLGc1ZSxwNWUsYjVlLHY1ZSx3NWUsbTVlLHk1ZSx4NWUsazVlLEU1ZSx1NSxUNWUsbDUsb0EsQzVlLEd3LGdOLHBOLF81ZSxjQSx1QTtJKDgzMCw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSw4NDM6MX0sJHB0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSwyMTUpKS5rbCgpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iLmIpfXJldHVybiBvaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx3RCh0aGlzLmMsZSxyKTtjYXNlIDE6cmV0dXJuKCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKERpKCksVTIpKSwxNTMpLDY5KSkubWsoZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksd0QodGhpcy5iLGUscil9cmV0dXJuIHM9dSh5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksbiksNjYpLHMuTmooKS5Saih0aGlzLE9tdCh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuISghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpLmRjKCk7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MH1yZXR1cm4gc2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6dGhpcy56aCgpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgaXModGhpcywwKSksUU0odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKERpKCksVTIpKSwxNTMpLDIxNSkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksUU0odGhpcy5iLG4pO3JldHVybn1maCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gRGkoKSxiTHR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx4cih0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IGlzKHRoaXMsMikpLHhyKHRoaXMuYik7cmV0dXJufWxoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5qJjQ/YmYodGhpcyk6KGU9bmV3IFRoKGJmKHRoaXMpKSxlLmErPSIgKG1peGVkOiAiLG9DKGUsdGhpcy5jKSxlLmErPSIsIGFueUF0dHJpYnV0ZTogIixvQyhlLHRoaXMuYiksZS5hKz0iKSIsZS5hKX0sUCh5cywiQW55VHlwZUltcGwiLDgzMCksSSg2NjcsNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjEsMjAyMToxLDY2NzoxfSx2QiksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5ifXJldHVybiBvaCh0aGlzLGUtWm4oKERpKCksdTUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp1NSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYSE9bnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYiE9bnVsbH1yZXR1cm4gc2godGhpcyxlLVpuKChEaSgpLHU1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6dTUsZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDpMdHQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMTpwcHQodGhpcyxCcihuKSk7cmV0dXJufWZoKHRoaXMsZS1abigoRGkoKSx1NSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOnU1LGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIERpKCksdTV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDp0aGlzLmE9bnVsbDtyZXR1cm47Y2FzZSAxOnRoaXMuYj1udWxsO3JldHVybn1saCh0aGlzLGUtWm4oKERpKCksdTUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp1NSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5qJjQ/YmYodGhpcyk6KGU9bmV3IFRoKGJmKHRoaXMpKSxlLmErPSIgKGRhdGE6ICIsZm8oZSx0aGlzLmEpLGUuYSs9IiwgdGFyZ2V0OiAiLGZvKGUsdGhpcy5iKSxlLmErPSIpIixlLmEpfSxsLmE9bnVsbCxsLmI9bnVsbCxQKHlzLCJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsIiw2NjcpLEkoNjY4LDgzMCx7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDg0MzoxLDIwMjI6MSw2Njg6MX0sX3F0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSwyMTUpKS5rbCgpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iLmIpO2Nhc2UgMzpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSxCcihrRCh0aGlzLmMsKERpKCksb0EpLCEwKSk7Y2FzZSA0OnJldHVybiBvdnQodGhpcy5hLCghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSxCcihrRCh0aGlzLmMsKERpKCksb0EpLCEwKSkpKTtjYXNlIDU6cmV0dXJuIHRoaXMuYX1yZXR1cm4gb2godGhpcyxlLVpuKChEaSgpLGw1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6bDUsZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuISghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpLmRjKCk7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MDtjYXNlIDM6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaXModGhpcywwKSksQnIoa0QodGhpcy5jLChEaSgpLG9BKSwhMCkpIT1udWxsO2Nhc2UgNDpyZXR1cm4gb3Z0KHRoaXMuYSwoIXRoaXMuYyYmKHRoaXMuYz1uZXcgaXModGhpcywwKSksQnIoa0QodGhpcy5jLChEaSgpLG9BKSwhMCkpKSkhPW51bGw7Y2FzZSA1OnJldHVybiEhdGhpcy5hfXJldHVybiBzaCh0aGlzLGUtWm4oKERpKCksbDUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTpsNSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLFFNKHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSwyMTUpKS5XYihuKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IGlzKHRoaXMsMikpLFFNKHRoaXMuYixuKTtyZXR1cm47Y2FzZSAzOlV3dCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA0OlV3dCh0aGlzLGN2dCh0aGlzLmEsbikpO3JldHVybjtjYXNlIDU6d2ModGhpcyx1KG4sMTQ4KSk7cmV0dXJufWZoKHRoaXMsZS1abigoRGkoKSxsNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOmw1LGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIERpKCksbDV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx4cih0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IGlzKHRoaXMsMikpLHhyKHRoaXMuYik7cmV0dXJuO2Nhc2UgMzohdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSxrcSh0aGlzLmMsKERpKCksb0EpLG51bGwpO3JldHVybjtjYXNlIDQ6VXd0KHRoaXMsY3Z0KHRoaXMuYSxudWxsKSk7cmV0dXJuO2Nhc2UgNTp0aGlzLmE9bnVsbDtyZXR1cm59bGgodGhpcyxlLVpuKChEaSgpLGw1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6bDUsZSkpfSxQKHlzLCJTaW1wbGVBbnlUeXBlSW1wbCIsNjY4KSxJKDY2OSw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSwyMDIzOjEsNjY5OjF9LENxdCksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gcj8oIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdGhpcy5hKTooIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdGhpcy5hLmIpO2Nhc2UgMTpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgVGwoKGRuKCksUWEpLGNjLHRoaXMsMSkpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDEpKSxmSSh0aGlzLmIpKTtjYXNlIDI6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBUbCgoZG4oKSxRYSksY2MsdGhpcywyKSksZkkodGhpcy5jKSk7Y2FzZSAzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLEJjKHRoaXMuYSwoRGkoKSxnTikpO2Nhc2UgNDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSxCYyh0aGlzLmEsKERpKCkscE4pKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksQmModGhpcy5hLChEaSgpLGNBKSk7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLEJjKHRoaXMuYSwoRGkoKSx1QSkpfXJldHVybiBvaCh0aGlzLGUtWm4oKERpKCksR3cpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTpHdyxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLHdEKHRoaXMuYSxlLHIpO2Nhc2UgMTpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBUbCgoZG4oKSxRYSksY2MsdGhpcywxKSksa2oodGhpcy5iLGUscik7Y2FzZSAyOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSxraih0aGlzLmMsZSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksTVd0KEJjKHRoaXMuYSwoRGkoKSxjQSkpLGUscil9cmV0dXJuIHM9dSh5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTooRGkoKSxHdyksbiksNjYpLHMuTmooKS5Saih0aGlzLE9tdCh0aGlzKSxuLVpuKChEaSgpLEd3KSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDE6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5mIT0wO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmYhPTA7Y2FzZSAzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCksZ04pKSk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCkscE4pKSk7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCksY0EpKSk7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCksdUEpKSl9cmV0dXJuIHNoKHRoaXMsZS1abigoRGkoKSxHdykpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOkd3LGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksUU0odGhpcy5hLG4pO3JldHVybjtjYXNlIDE6IXRoaXMuYiYmKHRoaXMuYj1uZXcgVGwoKGRuKCksUWEpLGNjLHRoaXMsMSkpLGx6KHRoaXMuYixuKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSxseih0aGlzLmMsbik7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSx2eChCYyh0aGlzLmEsKERpKCksZ04pKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksaEMoQmModGhpcy5hLGdOKSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLHZ4KEJjKHRoaXMuYSwoRGkoKSxwTikpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSxoQyhCYyh0aGlzLmEscE4pLHUobiwxNCkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLGNBKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLGhDKEJjKHRoaXMuYSxjQSksdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSx2eChCYyh0aGlzLmEsKERpKCksdUEpKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksaEMoQmModGhpcy5hLHVBKSx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChEaSgpLEd3KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6R3csZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gRGkoKSxHd30sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLHhyKHRoaXMuYSk7cmV0dXJuO2Nhc2UgMTohdGhpcy5iJiYodGhpcy5iPW5ldyBUbCgoZG4oKSxRYSksY2MsdGhpcywxKSksdGhpcy5iLmMuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSx0aGlzLmMuYy4kYigpO3JldHVybjtjYXNlIDM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLGdOKSkpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLHBOKSkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLGNBKSkpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLHVBKSkpO3JldHVybn1saCh0aGlzLGUtWm4oKERpKCksR3cpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTpHdyxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5qJjQ/YmYodGhpcyk6KGU9bmV3IFRoKGJmKHRoaXMpKSxlLmErPSIgKG1peGVkOiAiLG9DKGUsdGhpcy5hKSxlLmErPSIpIixlLmEpfSxQKHlzLCJYTUxUeXBlRG9jdW1lbnRSb290SW1wbCIsNjY5KSxJKDE5MTksNzA0LHsxMDU6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjEsMjAyNDoxfSxFbSksbC5JaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxNjpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMjY6Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNjpjYXNlIDM3OmNhc2UgNDQ6Y2FzZSA0NTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MzpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDU4OmNhc2UgNjA6Y2FzZSA2MTpjYXNlIDQ6cmV0dXJuIG49PW51bGw/bnVsbDokbyhuKTtjYXNlIDE5OmNhc2UgMjg6Y2FzZSAyOTpjYXNlIDM1OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQxOmNhc2UgNDY6Y2FzZSA1MjpjYXNlIDU0OmNhc2UgNTpyZXR1cm4gQnIobik7Y2FzZSA2OnJldHVybiB2UWUodShuLDE5MCkpO2Nhc2UgMTI6Y2FzZSA0NzpjYXNlIDQ5OmNhc2UgMTE6cmV0dXJuIEpsZSh0aGlzLGUsbik7Y2FzZSAxMzpyZXR1cm4gbj09bnVsbD9udWxsOml5bih1KG4sMjQwKSk7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiBuPT1udWxsP251bGw6Z2VuKFh0KHllKG4pKSk7Y2FzZSAxNzpyZXR1cm4gbmFlKChEaSgpLG4pKTtjYXNlIDE4OnJldHVybiBuYWUobik7Y2FzZSAyMTpjYXNlIDIwOnJldHVybiBuPT1udWxsP251bGw6cGVuKHUobiwxNTUpLmEpO2Nhc2UgMjc6cmV0dXJuIHdRZSh1KG4sMTkwKSk7Y2FzZSAzMDpyZXR1cm4gd3NlKChEaSgpLHUobiwxNSkpKTtjYXNlIDMxOnJldHVybiB3c2UodShuLDE1KSk7Y2FzZSA0MDpyZXR1cm4geVFlKChEaSgpLG4pKTtjYXNlIDQyOnJldHVybiByYWUoKERpKCksbikpO2Nhc2UgNDM6cmV0dXJuIHJhZShuKTtjYXNlIDU5OmNhc2UgNDg6cmV0dXJuIG1RZSgoRGkoKSxuKSk7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7c3dpdGNoKGUuRz09LTEmJihlLkc9KHI9RmwoZSkscj9GZyhyLk1oKCksZSk6LTEpKSxlLkcpe2Nhc2UgMDpyZXR1cm4gbj1uZXcgJHB0LG47Y2FzZSAxOnJldHVybiBzPW5ldyB2QixzO2Nhc2UgMjpyZXR1cm4gbz1uZXcgX3F0LG87Y2FzZSAzOnJldHVybiBoPW5ldyBDcXQsaDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihSY3QrZS56YitrdykpfX0sbC5LaD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O3N3aXRjaChlLnlqKCkpe2Nhc2UgNTpjYXNlIDUyOmNhc2UgNDpyZXR1cm4gbjtjYXNlIDY6cmV0dXJuIE5obihuKTtjYXNlIDg6Y2FzZSA3OnJldHVybiBuPT1udWxsP251bGw6eGRuKG4pO2Nhc2UgOTpyZXR1cm4gbj09bnVsbD9udWxsOkVJKCRsKChzPSRjKG4sITApLHMubGVuZ3RoPjAmJihScigwLHMubGVuZ3RoKSxzLmNoYXJDb2RlQXQoMCk9PTQzKT9zLnN1YnN0cigxKTpzKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMDpyZXR1cm4gbj09bnVsbD9udWxsOkVJKCRsKChvPSRjKG4sITApLG8ubGVuZ3RoPjAmJihScigwLG8ubGVuZ3RoKSxvLmNoYXJDb2RlQXQoMCk9PTQzKT9vLnN1YnN0cigxKTpvKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMTpyZXR1cm4gQnIocHcodGhpcywoRGkoKSxwNWUpLG4pKTtjYXNlIDEyOnJldHVybiBCcihwdyh0aGlzLChEaSgpLGI1ZSksbikpO2Nhc2UgMTM6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2J0KCRjKG4sITApKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIHFibihuKTtjYXNlIDE2OnJldHVybiBCcihwdyh0aGlzLChEaSgpLHY1ZSksbikpO2Nhc2UgMTc6cmV0dXJuIFRpZSgoRGkoKSxuKSk7Y2FzZSAxODpyZXR1cm4gVGllKG4pO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDM1OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQxOmNhc2UgNTQ6Y2FzZSAxOTpyZXR1cm4gJGMobiwhMCk7Y2FzZSAyMTpjYXNlIDIwOnJldHVybiBRYm4obik7Y2FzZSAyMjpyZXR1cm4gQnIocHcodGhpcywoRGkoKSx3NWUpLG4pKTtjYXNlIDIzOnJldHVybiBCcihwdyh0aGlzLChEaSgpLG01ZSksbikpO2Nhc2UgMjQ6cmV0dXJuIEJyKHB3KHRoaXMsKERpKCkseTVlKSxuKSk7Y2FzZSAyNTpyZXR1cm4gQnIocHcodGhpcywoRGkoKSx4NWUpLG4pKTtjYXNlIDI2OnJldHVybiBCcihwdyh0aGlzLChEaSgpLGs1ZSksbikpO2Nhc2UgMjc6cmV0dXJuIExobihuKTtjYXNlIDMwOnJldHVybiBDaWUoKERpKCksbikpO2Nhc2UgMzE6cmV0dXJuIENpZShuKTtjYXNlIDMyOnJldHVybiBuPT1udWxsP251bGw6ZGUoJGwoKE09JGMobiwhMCksTS5sZW5ndGg+MCYmKFJyKDAsTS5sZW5ndGgpLE0uY2hhckNvZGVBdCgwKT09NDMpP00uc3Vic3RyKDEpOk0pLF9hLHZpKSk7Y2FzZSAzMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBOcCgoRj0kYyhuLCEwKSxGLmxlbmd0aD4wJiYoUnIoMCxGLmxlbmd0aCksRi5jaGFyQ29kZUF0KDApPT00Myk/Ri5zdWJzdHIoMSk6RikpO2Nhc2UgMzQ6cmV0dXJuIG49PW51bGw/bnVsbDpkZSgkbCgoSD0kYyhuLCEwKSxILmxlbmd0aD4wJiYoUnIoMCxILmxlbmd0aCksSC5jaGFyQ29kZUF0KDApPT00Myk/SC5zdWJzdHIoMSk6SCksX2EsdmkpKTtjYXNlIDM2OnJldHVybiBuPT1udWxsP251bGw6ZzIoU3EoKFY9JGMobiwhMCksVi5sZW5ndGg+MCYmKFJyKDAsVi5sZW5ndGgpLFYuY2hhckNvZGVBdCgwKT09NDMpP1Yuc3Vic3RyKDEpOlYpKSk7Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOmcyKFNxKChZPSRjKG4sITApLFkubGVuZ3RoPjAmJihScigwLFkubGVuZ3RoKSxZLmNoYXJDb2RlQXQoMCk9PTQzKT9ZLnN1YnN0cigxKTpZKSkpO2Nhc2UgNDA6cmV0dXJuIFZsbigoRGkoKSxuKSk7Y2FzZSA0MjpyZXR1cm4gX2llKChEaSgpLG4pKTtjYXNlIDQzOnJldHVybiBfaWUobik7Y2FzZSA0NDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBOcCgodHQ9JGMobiwhMCksdHQubGVuZ3RoPjAmJihScigwLHR0Lmxlbmd0aCksdHQuY2hhckNvZGVBdCgwKT09NDMpP3R0LnN1YnN0cigxKTp0dCkpO2Nhc2UgNDU6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgTnAoKGd0PSRjKG4sITApLGd0Lmxlbmd0aD4wJiYoUnIoMCxndC5sZW5ndGgpLGd0LmNoYXJDb2RlQXQoMCk9PTQzKT9ndC5zdWJzdHIoMSk6Z3QpKTtjYXNlIDQ2OnJldHVybiAkYyhuLCExKTtjYXNlIDQ3OnJldHVybiBCcihwdyh0aGlzLChEaSgpLEU1ZSksbikpO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gR2xuKChEaSgpLG4pKTtjYXNlIDQ5OnJldHVybiBCcihwdyh0aGlzLChEaSgpLFQ1ZSksbikpO2Nhc2UgNTA6cmV0dXJuIG49PW51bGw/bnVsbDplRSgkbCgoTHQ9JGMobiwhMCksTHQubGVuZ3RoPjAmJihScigwLEx0Lmxlbmd0aCksTHQuY2hhckNvZGVBdCgwKT09NDMpP0x0LnN1YnN0cigxKTpMdCksTUgsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTE6cmV0dXJuIG49PW51bGw/bnVsbDplRSgkbCgoaD0kYyhuLCEwKSxoLmxlbmd0aD4wJiYoUnIoMCxoLmxlbmd0aCksaC5jaGFyQ29kZUF0KDApPT00Myk/aC5zdWJzdHIoMSk6aCksTUgsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTM6cmV0dXJuIEJyKHB3KHRoaXMsKERpKCksQzVlKSxuKSk7Y2FzZSA1NTpyZXR1cm4gbj09bnVsbD9udWxsOmVFKCRsKChkPSRjKG4sITApLGQubGVuZ3RoPjAmJihScigwLGQubGVuZ3RoKSxkLmNoYXJDb2RlQXQoMCk9PTQzKT9kLnN1YnN0cigxKTpkKSxNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NjpyZXR1cm4gbj09bnVsbD9udWxsOmVFKCRsKCh3PSRjKG4sITApLHcubGVuZ3RoPjAmJihScigwLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQoMCk9PTQzKT93LnN1YnN0cigxKTp3KSxNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NzpyZXR1cm4gbj09bnVsbD9udWxsOmcyKFNxKChrPSRjKG4sITApLGsubGVuZ3RoPjAmJihScigwLGsubGVuZ3RoKSxrLmNoYXJDb2RlQXQoMCk9PTQzKT9rLnN1YnN0cigxKTprKSkpO2Nhc2UgNTg6cmV0dXJuIG49PW51bGw/bnVsbDpnMihTcSgoQz0kYyhuLCEwKSxDLmxlbmd0aD4wJiYoUnIoMCxDLmxlbmd0aCksQy5jaGFyQ29kZUF0KDApPT00Myk/Qy5zdWJzdHIoMSk6QykpKTtjYXNlIDYwOnJldHVybiBuPT1udWxsP251bGw6ZGUoJGwoKHI9JGMobiwhMCksci5sZW5ndGg+MCYmKFJyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKT09NDMpP3Iuc3Vic3RyKDEpOnIpLF9hLHZpKSk7Y2FzZSA2MTpyZXR1cm4gbj09bnVsbD9udWxsOmRlKCRsKCRjKG4sITApLF9hLHZpKSk7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fTt2YXIgUzVlLHZMdCxBNWUsd0x0O1AoeXMsIlhNTFR5cGVGYWN0b3J5SW1wbCIsMTkxOSksSSg1ODYsMTc5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTc5OjEsMTE0OjEsMTE1OjEsNjc1OjEsMTk0NToxLDU4NjoxfSxoWHQpLGwuTj0hMSxsLk89ITE7dmFyIEw1ZT0hMTtQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwiLDU4NiksSSgxODUyLDEsezgzNzoxfSxpeCksbC5faj1mdW5jdGlvbigpe3JldHVybiB0eHQoKSxSNWV9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xIiwxODUyKSxJKDE4NjEsMSxpaSxoMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMTAiLDE4NjEpLEkoMTg2MiwxLGlpLHdCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMSIsMTg2MiksSSgxODYzLDEsaWksbUIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzEyIiwxODYzKSxJKDE4NjQsMSxpaSx5QiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gTm0oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGNhLHRlLDMzMyxlLDcsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMyIsMTg2NCksSSgxODY1LDEsaWkseEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE0IiwxODY1KSxJKDE4NjYsMSxpaSxrQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE1IiwxODY2KSxJKDE4NjcsMSxpaSxFQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE2IiwxODY3KSxJKDE4NjgsMSxpaSxqZiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMTciLDE4NjgpLEkoMTg2OSwxLGlpLGh1KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE1NSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFhFLHRlLDE1NSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xOCIsMTg2OSksSSgxODcwLDEsaWksdkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE5IiwxODcwKSxJKDE4NTMsMSxpaSx3SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw4NDMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChmTixJZSw4NDMsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMiIsMTg1MyksSSgxODcxLDEsaWksbUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzIwIiwxODcxKSxJKDE4NzIsMSxpaSxmdSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMjEiLDE4NzIpLEkoMTg3MywxLGlpLHM5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yMiIsMTg3MyksSSgxODc0LDEsaWksVEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzIzIiwxODc0KSxJKDE4NzUsMSxpaSxDQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChIdSx0ZSwxOTAsZSwwLDIpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMjQiLDE4NzUpLEkoMTg3NiwxLGlpLHN4KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNSIsMTg3NiksSSgxODc3LDEsaWkseUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI2IiwxODc3KSxJKDE4NzgsMSxpaSxEayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI3IiwxODc4KSxJKDE4NzksMSxpaSx4SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI4IiwxODc5KSxJKDE4ODAsMSxpaSxfQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMjkiLDE4ODApLEkoMTg1NCwxLGlpLGtKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDY2Nyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGNVLEllLDIwMjEsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMyIsMTg1NCksSSgxODgxLDEsaWksRUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChqYSx0ZSwxOSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMCIsMTg4MSksSSgxODgyLDEsaWksYTkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzMxIiwxODgyKSxJKDE4ODMsMSxpaSxTQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChUdyx0ZSwxNjIsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMzIiLDE4ODMpLEkoMTg4NCwxLGlpLHpMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMyIsMTg4NCksSSgxODg1LDEsaWksbzkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM0IiwxODg1KSxJKDE4ODYsMSxpaSxUSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMzUiLDE4ODYpLEkoMTg4NywxLGlpLENKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNiIsMTg4NyksSSgxODg4LDEsaWkscUwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChwaCx4eSwxNSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNyIsMTg4OCksSSgxODg5LDEsaWksYzkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChwaCx4eSwxNSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zOCIsMTg4OSksSSgxODkwLDEsaWksZjEpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM5IiwxODkwKSxJKDE4NTUsMSxpaSxPayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw2NjgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChkTixJZSwyMDIyLGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQiLDE4NTUpLEkoMTg5MSwxLGlpLF9KKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MCIsMTg5MSksSSgxODkyLDEsaWksTmspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQxIiwxODkyKSxJKDE4OTMsMSxpaSxITCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDIiLDE4OTMpLEkoMTg5NCwxLGlpLEhiKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MyIsMTg5NCksSSgxODk1LDEsaWksdTkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ0IiwxODk1KSxJKDE4OTYsMSxpaSxHTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChDdyx0ZSwxODQsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDUiLDE4OTYpLEkoMTg5NywxLGlpLCRmKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC80NiIsMTg5NyksSSgxODk4LDEsaWksbDkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ3IiwxODk4KSxJKDE4OTksMSxpaSxkMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDgiLDE4OTkpLEkobmIsMSxpaSxnMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChDdyx0ZSwxODQsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDkiLG5iKSxJKDE4NTYsMSxpaSxTSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw2NjkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChwTHQsSWUsMjAyMyxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC81IiwxODU2KSxJKDE5MDEsMSxpaSxBSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChUdyx0ZSwxNjIsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNTAiLDE5MDEpLEkoMTkwMiwxLGlpLEEzKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MSIsMTkwMiksSSgxOTAzLDEsaWksUGspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChqYSx0ZSwxOSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MiIsMTkwMyksSSgxODU3LDEsaWksRmspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzYiLDE4NTcpLEkoMTg1OCwxLGlpLGg5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEh1LHRlLDE5MCxlLDAsMil9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC83IiwxODU4KSxJKDE4NTksMSxpaSxMSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gT20oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEJzLHRlLDQ3NixlLDgsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC84IiwxODU5KSxJKDE4NjAsMSxpaSxheCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwyMTcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChFNix0ZSwyMTcsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvOSIsMTg2MCk7dmFyIFUxLHJwLGxBLHVVLHZ0O0koNTAsNjAsVTAsRnIpLFAoVmcsIlJlZ0V4L1BhcnNlRXhjZXB0aW9uIiw1MCksSSg4MjAsMSx7fSxWTCksbC5zbD1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmomJmJhKHRoaXMuaSxlKT09NjN9LGwudGw9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2lmKHRoaXMuYyE9MTApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGtIKSkpKTtzd2l0Y2goZT10aGlzLmEsZSl7Y2FzZSAxMDE6ZT0yNzticmVhaztjYXNlIDEwMjplPTEyO2JyZWFrO2Nhc2UgMTEwOmU9MTA7YnJlYWs7Y2FzZSAxMTQ6ZT0xMzticmVhaztjYXNlIDExNjplPTk7YnJlYWs7Y2FzZSAxMjA6aWYoZmkodGhpcyksdGhpcy5jIT0wKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZykpKSk7aWYodGhpcy5hPT0xMjMpe289MCxyPTA7ZG97aWYoZmkodGhpcyksdGhpcy5jIT0wKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZykpKSk7aWYoKG89YjIodGhpcy5hKSk8MClicmVhaztpZihyPnIqMTYpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFFkZSkpKSk7cj1yKjE2K299d2hpbGUoITApO2lmKHRoaXMuYSE9MTI1KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxaZGUpKSkpO2lmKHI+V0UpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEpkZSkpKSk7ZT1yfWVsc2V7aWYobz0wLHRoaXMuYyE9MHx8KG89YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKHI9byxmaSh0aGlzKSx0aGlzLmMhPTB8fChvPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtyPXIqMTYrbyxlPXJ9YnJlYWs7Y2FzZSAxMTc6aWYocz0wLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49cyxmaSh0aGlzKSx0aGlzLmMhPTB8fChzPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtpZihuPW4qMTYrcyxmaSh0aGlzKSx0aGlzLmMhPTB8fChzPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtpZihuPW4qMTYrcyxmaSh0aGlzKSx0aGlzLmMhPTB8fChzPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtuPW4qMTYrcyxlPW47YnJlYWs7Y2FzZSAxMTg6aWYoZmkodGhpcyksdGhpcy5jIT0wfHwocz1iMih0aGlzLmEpKTwwKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZykpKSk7aWYobj1zLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLG4+V0UpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLCJwYXJzZXIuZGVzY2FwcGUuNCIpKSkpO2U9bjticmVhaztjYXNlIDY1OmNhc2UgOTA6Y2FzZSAxMjI6dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLHQwZSkpKSl9cmV0dXJuIGV9LGwudWw9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAxMDA6cj0odGhpcy5lJjMyKT09MzI/dGIoIk5kIiwhMCk6KGdpKCksbFUpO2JyZWFrO2Nhc2UgNjg6cj0odGhpcy5lJjMyKT09MzI/dGIoIk5kIiwhMSk6KGdpKCksVEx0KTticmVhaztjYXNlIDExOTpyPSh0aGlzLmUmMzIpPT0zMj90YigiSXNXb3JkIiwhMCk6KGdpKCksTjcpO2JyZWFrO2Nhc2UgODc6cj0odGhpcy5lJjMyKT09MzI/dGIoIklzV29yZCIsITEpOihnaSgpLF9MdCk7YnJlYWs7Y2FzZSAxMTU6cj0odGhpcy5lJjMyKT09MzI/dGIoIklzU3BhY2UiLCEwKTooZ2koKSxLNik7YnJlYWs7Y2FzZSA4MzpyPSh0aGlzLmUmMzIpPT0zMj90YigiSXNTcGFjZSIsITEpOihnaSgpLENMdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgR28oKG49ZSx0Z2Urbi50b1N0cmluZygxNikpKSl9cmV0dXJuIHJ9LGwudmw9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2Zvcih0aGlzLmI9MSxmaSh0aGlzKSxuPW51bGwsdGhpcy5jPT0wJiZ0aGlzLmE9PTk0PyhmaSh0aGlzKSxlP009KGdpKCksZ2koKSxuZXcgTmwoNSkpOihuPShnaSgpLGdpKCksbmV3IE5sKDQpKSxqYyhuLDAsV0UpLE09bmV3IE5sKDQpKSk6TT0oZ2koKSxnaSgpLG5ldyBObCg0KSksbz0hMDsoSD10aGlzLmMpIT0xJiYhKEg9PTAmJnRoaXMuYT09OTMmJiFvKTspe2lmKG89ITEscj10aGlzLmEscz0hMSxIPT0xMClzd2l0Y2gocil7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6dnkoTSx0aGlzLnVsKHIpKSxzPSEwO2JyZWFrO2Nhc2UgMTA1OmNhc2UgNzM6Y2FzZSA5OTpjYXNlIDY3OnI9dGhpcy5MbChNLHIpLHI8MCYmKHM9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYoRj1uNXQodGhpcyxyKSwhRil0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUWN0KSkpKTt2eShNLEYpLHM9ITA7YnJlYWs7ZGVmYXVsdDpyPXRoaXMudGwoKX1lbHNlIGlmKEg9PTIwKXtpZihkPWw4KHRoaXMuaSw1OCx0aGlzLmQpLGQ8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksXzh0KSkpKTtpZih3PSEwLGJhKHRoaXMuaSx0aGlzLmQpPT05NCYmKCsrdGhpcy5kLHc9ITEpLGg9RGwodGhpcy5pLHRoaXMuZCxkKSxrPWZ0ZShoLHcsKHRoaXMuZSY1MTIpPT01MTIpLCFrKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxVZGUpKSkpO2lmKHZ5KE0saykscz0hMCxkKzE+PXRoaXMuanx8YmEodGhpcy5pLGQrMSkhPTkzKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxfOHQpKSkpO3RoaXMuZD1kKzJ9aWYoZmkodGhpcyksIXMpaWYodGhpcy5jIT0wfHx0aGlzLmEhPTQ1KWpjKE0scixyKTtlbHNle2lmKGZpKHRoaXMpLChIPXRoaXMuYyk9PTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEVIKSkpKTtIPT0wJiZ0aGlzLmE9PTkzPyhqYyhNLHIsciksamMoTSw0NSw0NSkpOihDPXRoaXMuYSxIPT0xMCYmKEM9dGhpcy50bCgpKSxmaSh0aGlzKSxqYyhNLHIsQykpfSh0aGlzLmUmd2YpPT13ZiYmdGhpcy5jPT0wJiZ0aGlzLmE9PTQ0JiZmaSh0aGlzKX1pZih0aGlzLmM9PTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEVIKSkpKTtyZXR1cm4gbiYmKF9fKG4sTSksTT1uKSxiNChNKSxUXyhNKSx0aGlzLmI9MCxmaSh0aGlzKSxNfSxsLndsPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7Zm9yKHI9dGhpcy52bCghMSk7KHM9dGhpcy5jKSE9NzspaWYoZT10aGlzLmEscz09MCYmKGU9PTQ1fHxlPT0zOCl8fHM9PTQpe2lmKGZpKHRoaXMpLHRoaXMuYyE9OSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksS2RlKSkpKTtpZihuPXRoaXMudmwoITEpLHM9PTQpdnkocixuKTtlbHNlIGlmKGU9PTQ1KV9fKHIsbik7ZWxzZSBpZihlPT0zOClXbGUocixuKTtlbHNlIHRocm93IHJ0KG5ldyBHbygiQVNTRVJUIikpfWVsc2UgdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFlkZSkpKSk7cmV0dXJuIGZpKHRoaXMpLHJ9LGwueGw9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBlPXRoaXMuYS00OCxuPShnaSgpLGdpKCksbmV3IGhydCgxMixudWxsLGUpKSwhdGhpcy5nJiYodGhpcy5nPW5ldyBmUiksaFIodGhpcy5nLG5ldyB5cHQoZSkpLGZpKHRoaXMpLG59LGwueWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxENWV9LGwuemw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxJNWV9LGwuQWw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkJsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5DbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxVY24oKX0sbC5EbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLE41ZX0sbC5FbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLEY1ZX0sbC5GbD1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuZD49dGhpcy5qfHwoKGU9YmEodGhpcy5pLHRoaXMuZCsrKSkmNjU1MDQpIT02NCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksSGRlKSkpKTtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBWZCgwLGUtNjQpfSxsLkdsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLExtbigpfSxsLkhsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksQjVlfSxsLklsPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9KGdpKCksZ2koKSxuZXcgVmQoMCwxMDUpKSxmaSh0aGlzKSxlfSxsLkpsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksUDVlfSxsLktsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksTzVlfSxsLkxsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMudGwoKX0sbC5NbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLGtMdH0sbC5ObD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87aWYodGhpcy5kKzE+PXRoaXMuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksJGRlKSkpKTtpZihzPS0xLG49bnVsbCxlPWJhKHRoaXMuaSx0aGlzLmQpLDQ5PD1lJiZlPD01Nyl7aWYocz1lLTQ4LCF0aGlzLmcmJih0aGlzLmc9bmV3IGZSKSxoUih0aGlzLmcsbmV3IHlwdChzKSksKyt0aGlzLmQsYmEodGhpcy5pLHRoaXMuZCkhPTQxKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7Kyt0aGlzLmR9ZWxzZSBzd2l0Y2goZT09NjMmJi0tdGhpcy5kLGZpKHRoaXMpLG49Q3h0KHRoaXMpLG4uZSl7Y2FzZSAyMDpjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpicmVhaztjYXNlIDg6aWYodGhpcy5jIT03KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgRnIocXIoKE5yKCksemRlKSkpKX1pZihmaSh0aGlzKSxvPXN3KHRoaXMpLHI9bnVsbCxvLmU9PTIpe2lmKG8uZW0oKSE9Mil0aHJvdyBydChuZXcgRnIocXIoKE5yKCkscWRlKSkpKTtyPW8uYW0oMSksbz1vLmFtKDApfWlmKHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO3JldHVybiBmaSh0aGlzKSxnaSgpLGdpKCksbmV3IEd0ZShzLG4sbyxyKX0sbC5PbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLEVMdH0sbC5QbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9V2ooMjQsc3codGhpcykpLHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlFsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1XaigyMCxzdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuUmw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPVdqKDIyLHN3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5TbD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKGU9MCxyPTAsbj0tMTt0aGlzLmQ8dGhpcy5qJiYobj1iYSh0aGlzLmksdGhpcy5kKSxvPW81dChuKSxvIT0wKTspZXw9bywrK3RoaXMuZDtpZih0aGlzLmQ+PXRoaXMuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksVDh0KSkpKTtpZihuPT00NSl7Zm9yKCsrdGhpcy5kO3RoaXMuZDx0aGlzLmomJihuPWJhKHRoaXMuaSx0aGlzLmQpLG89bzV0KG4pLG8hPTApOylyfD1vLCsrdGhpcy5kO2lmKHRoaXMuZD49dGhpcy5qKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxUOHQpKSkpfWlmKG49PTU4KXtpZigrK3RoaXMuZCxmaSh0aGlzKSxzPVlZdChzdyh0aGlzKSxlLHIpLHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO2ZpKHRoaXMpfWVsc2UgaWYobj09NDEpKyt0aGlzLmQsZmkodGhpcykscz1ZWXQoc3codGhpcyksZSxyKTtlbHNlIHRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxqZGUpKSkpO3JldHVybiBzfSxsLlRsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1XaigyMSxzdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuVWw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPVdqKDIzLHN3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5WbD1mdW5jdGlvbigpe3ZhciBlLG47aWYoZmkodGhpcyksZT10aGlzLmYrKyxuPVJudChzdyh0aGlzKSxlKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksbn0sbC5XbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9Um50KHN3KHRoaXMpLDApLHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlhsPWZ1bmN0aW9uKGUpe3JldHVybiBmaSh0aGlzKSx0aGlzLmM9PTU/KGZpKHRoaXMpLEJqKGUsKGdpKCksZ2koKSxuZXcgV20oOSxlKSkpKTpCaihlLChnaSgpLGdpKCksbmV3IFdtKDMsZSkpKX0sbC5ZbD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZmkodGhpcyksbj0oZ2koKSxnaSgpLG5ldyBsQygyKSksdGhpcy5jPT01PyhmaSh0aGlzKSxtMihuLGZBKSxtMihuLGUpKToobTIobixlKSxtMihuLGZBKSksbn0sbC5abD1mdW5jdGlvbihlKXtyZXR1cm4gZmkodGhpcyksdGhpcy5jPT01PyhmaSh0aGlzKSxnaSgpLGdpKCksbmV3IFdtKDksZSkpOihnaSgpLGdpKCksbmV3IFdtKDMsZSkpfSxsLmE9MCxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MSxsLmc9bnVsbCxsLmo9MCxQKFZnLCJSZWdFeC9SZWdleFBhcnNlciIsODIwKSxJKDE4MjQsODIwLHt9LFNxdCksbC5zbD1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC50bD1mdW5jdGlvbigpe3JldHVybiBGNXQodGhpcyl9LGwudWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGtFKGUpfSxsLnZsPWZ1bmN0aW9uKGUpe3JldHVybiBqaGUodGhpcyl9LGwud2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLnhsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC55bD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuemw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkFsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGtFKDY3KX0sbC5CbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxrRSg3Myl9LGwuQ2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkRsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5FbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuRmw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksa0UoOTkpfSxsLkdsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5IbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuSWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksa0UoMTA1KX0sbC5KbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuS2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkxsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZ5KGUsa0UobikpLC0xfSxsLk1sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgVmQoMCw5NCl9LGwuTmw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLk9sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgVmQoMCwzNil9LGwuUGw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLlFsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5SbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuU2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLlRsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5VbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuVmw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPVJudChzdyh0aGlzKSwwKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5XbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuWGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZpKHRoaXMpLEJqKGUsKGdpKCksZ2koKSxuZXcgV20oMyxlKSkpfSxsLllsPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBmaSh0aGlzKSxuPShnaSgpLGdpKCksbmV3IGxDKDIpKSxtMihuLGUpLG0yKG4sZkEpLG59LGwuWmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgV20oMyxlKX07dmFyIGg1PW51bGwsRDc9bnVsbDtQKFZnLCJSZWdFeC9QYXJzZXJGb3JYTUxTY2hlbWEiLDE4MjQpLEkoMTE3LDEsS0UsdnYpLGwuJGw9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IEdvKCJOb3Qgc3VwcG9ydGVkLiIpKX0sbC5fbD1mdW5jdGlvbigpe3JldHVybi0xfSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsfSxsLmJtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuY209ZnVuY3Rpb24oZSl7fSxsLmRtPWZ1bmN0aW9uKGUpe30sbC5lbT1mdW5jdGlvbigpe3JldHVybiAwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm0oMCl9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZT09MTE/Ii4iOiIifSxsLmU9MDt2YXIgbUx0LE83LGhBLE01ZSx5THQsbjM9bnVsbCxsVSxEZnQ9bnVsbCx4THQsZkEsT2Z0PW51bGwsa0x0LEVMdCxUTHQsQ0x0LF9MdCxJNWUsSzYsRDVlLE81ZSxONWUsUDVlLE43LEY1ZSxCNWUsRXhuPVAoVmcsIlJlZ0V4L1Rva2VuIiwxMTcpO0koMTM2LDExNyx7MzoxLDEzNjoxLDExNzoxfSxObCksbC5mbT1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYodGhpcy5lPT00KWlmKHRoaXM9PXhMdClyPSIuIjtlbHNlIGlmKHRoaXM9PWxVKXI9IlxcZCI7ZWxzZSBpZih0aGlzPT1ONylyPSJcXHciO2Vsc2UgaWYodGhpcz09SzYpcj0iXFxzIjtlbHNle2ZvcihzPW5ldyB4ZyxzLmErPSJbIixuPTA7bjx0aGlzLmIubGVuZ3RoO24rPTIpZSZ3ZiYmbj4wJiYocy5hKz0iLCIpLHRoaXMuYltuXT09PXRoaXMuYltuKzFdP2ZvKHMseEQodGhpcy5iW25dKSk6KGZvKHMseEQodGhpcy5iW25dKSkscy5hKz0iLSIsZm8ocyx4RCh0aGlzLmJbbisxXSkpKTtzLmErPSJdIixyPXMuYX1lbHNlIGlmKHRoaXM9PVRMdClyPSJcXEQiO2Vsc2UgaWYodGhpcz09X0x0KXI9IlxcVyI7ZWxzZSBpZih0aGlzPT1DTHQpcj0iXFxTIjtlbHNle2ZvcihzPW5ldyB4ZyxzLmErPSJbXiIsbj0wO248dGhpcy5iLmxlbmd0aDtuKz0yKWUmd2YmJm4+MCYmKHMuYSs9IiwiKSx0aGlzLmJbbl09PT10aGlzLmJbbisxXT9mbyhzLHhEKHRoaXMuYltuXSkpOihmbyhzLHhEKHRoaXMuYltuXSkpLHMuYSs9Ii0iLGZvKHMseEQodGhpcy5iW24rMV0pKSk7cy5hKz0iXSIscj1zLmF9cmV0dXJuIHJ9LGwuYT0hMSxsLmM9ITEsUChWZywiUmVnRXgvUmFuZ2VUb2tlbiIsMTM2KSxJKDU4NCwxLHs1ODQ6MX0seXB0KSxsLmE9MCxQKFZnLCJSZWdFeC9SZWdleFBhcnNlci9SZWZlcmVuY2VQb3NpdGlvbiIsNTg0KSxJKDU4MywxLHszOjEsNTgzOjF9LFJIdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09bnVsbHx8IUV0KGUsNTgzKT8hMToobj11KGUsNTgzKSxobih0aGlzLmIsbi5iKSYmdGhpcy5hPT1uLmEpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEJnKHRoaXMuYisiLyIrTTV0KHRoaXMuYSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5mbSh0aGlzLmEpfSxsLmE9MCxQKFZnLCJSZWdFeC9SZWd1bGFyRXhwcmVzc2lvbiIsNTgzKSxJKDIyMywxMTcsS0UsVmQpLGwuX2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztzd2l0Y2godGhpcy5lKXtjYXNlIDA6c3dpdGNoKHRoaXMuYSl7Y2FzZSAxMjQ6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNjM6Y2FzZSA0MDpjYXNlIDQxOmNhc2UgNDY6Y2FzZSA5MTpjYXNlIDEyMzpjYXNlIDkyOnM9IlxcIitobnQodGhpcy5hJm1zKTticmVhaztjYXNlIDEyOnM9IlxcZiI7YnJlYWs7Y2FzZSAxMDpzPSJcXG4iO2JyZWFrO2Nhc2UgMTM6cz0iXFxyIjticmVhaztjYXNlIDk6cz0iXFx0IjticmVhaztjYXNlIDI3OnM9IlxcZSI7YnJlYWs7ZGVmYXVsdDp0aGlzLmE+PVlhPyhyPShuPXRoaXMuYT4+PjAsIjAiK24udG9TdHJpbmcoMTYpKSxzPSJcXHYiK0RsKHIsci5sZW5ndGgtNixyLmxlbmd0aCkpOnM9IiIraG50KHRoaXMuYSZtcyl9YnJlYWs7Y2FzZSA4OnRoaXM9PWtMdHx8dGhpcz09RUx0P3M9IiIraG50KHRoaXMuYSZtcyk6cz0iXFwiK2hudCh0aGlzLmEmbXMpO2JyZWFrO2RlZmF1bHQ6cz1udWxsfXJldHVybiBzfSxsLmE9MCxQKFZnLCJSZWdFeC9Ub2tlbi9DaGFyVG9rZW4iLDIyMyksSSgzMDksMTE3LEtFLFdtKSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmF9LGwuY209ZnVuY3Rpb24oZSl7dGhpcy5iPWV9LGwuZG09ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbC5mbT1mdW5jdGlvbihlKXt2YXIgbjtpZih0aGlzLmU9PTMpaWYodGhpcy5jPDAmJnRoaXMuYjwwKW49dGhpcy5hLmZtKGUpKyIqIjtlbHNlIGlmKHRoaXMuYz09dGhpcy5iKW49dGhpcy5hLmZtKGUpKyJ7Iit0aGlzLmMrIn0iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI+PTApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLCIrdGhpcy5iKyJ9IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLH0iO2Vsc2UgdGhyb3cgcnQobmV3IEdvKCJUb2tlbiN0b1N0cmluZygpOiBDTE9TVVJFICIrdGhpcy5jK0thK3RoaXMuYikpO2Vsc2UgaWYodGhpcy5jPDAmJnRoaXMuYjwwKW49dGhpcy5hLmZtKGUpKyIqPyI7ZWxzZSBpZih0aGlzLmM9PXRoaXMuYiluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyJ9PyI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYj49MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsIit0aGlzLmIrIn0/IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLH0/IjtlbHNlIHRocm93IHJ0KG5ldyBHbygiVG9rZW4jdG9TdHJpbmcoKTogTk9OR1JFRURZQ0xPU1VSRSAiK3RoaXMuYytLYSt0aGlzLmIpKTtyZXR1cm4gbn0sbC5iPTAsbC5jPTAsUChWZywiUmVnRXgvVG9rZW4vQ2xvc3VyZVRva2VuIiwzMDkpLEkoODIxLDExNyxLRSxmd3QpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PTA/dGhpcy5hOnRoaXMuYn0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAyfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLmIuZT09MyYmdGhpcy5iLmFtKDApPT10aGlzLmE/bj10aGlzLmEuZm0oZSkrIisiOnRoaXMuYi5lPT05JiZ0aGlzLmIuYW0oMCk9PXRoaXMuYT9uPXRoaXMuYS5mbShlKSsiKz8iOm49dGhpcy5hLmZtKGUpKygiIit0aGlzLmIuZm0oZSkpLG59LFAoVmcsIlJlZ0V4L1Rva2VuL0NvbmNhdFRva2VuIiw4MjEpLEkoMTgyMiwxMTcsS0UsR3RlKSxsLmFtPWZ1bmN0aW9uKGUpe2lmKGU9PTApcmV0dXJuIHRoaXMuZDtpZihlPT0xKXJldHVybiB0aGlzLmI7dGhyb3cgcnQobmV3IEdvKCJJbnRlcm5hbCBFcnJvcjogIitlKSl9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPzI6MX0sbC5mbT1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5jPjA/bj0iKD8oIit0aGlzLmMrIikiOnRoaXMuYS5lPT04P249Iig/KCIrdGhpcy5hKyIpIjpuPSIoPyIrdGhpcy5hLHRoaXMuYj9uKz10aGlzLmQrInwiK3RoaXMuYisiKSI6bis9dGhpcy5kKyIpIixufSxsLmM9MCxQKFZnLCJSZWdFeC9Ub2tlbi9Db25kaXRpb25Ub2tlbiIsMTgyMiksSSgxODIzLDExNyxLRSxHUXQpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYn0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3JldHVybiIoPyIrKHRoaXMuYT09MD8iIjpNNXQodGhpcy5hKSkrKHRoaXMuYz09MD8iIjpNNXQodGhpcy5jKSkrIjoiK3RoaXMuYi5mbShlKSsiKSJ9LGwuYT0wLGwuYz0wLFAoVmcsIlJlZ0V4L1Rva2VuL01vZGlmaWVyVG9rZW4iLDE4MjMpLEkoODIyLDExNyxLRSx3d3QpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChuPW51bGwsdGhpcy5lKXtjYXNlIDY6dGhpcy5iPT0wP249Iig/OiIrdGhpcy5hLmZtKGUpKyIpIjpuPSIoIit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjA6bj0iKD89Iit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjE6bj0iKD8hIit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjI6bj0iKD88PSIrdGhpcy5hLmZtKGUpKyIpIjticmVhaztjYXNlIDIzOm49Iig/PCEiK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyNDpuPSIoPz4iK3RoaXMuYS5mbShlKSsiKSJ9cmV0dXJuIG59LGwuYj0wLFAoVmcsIlJlZ0V4L1Rva2VuL1BhcmVuVG9rZW4iLDgyMiksSSg1MjEsMTE3LHszOjEsMTE3OjEsNTIxOjF9LGhydCksbC5ibT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZT09MTI/IlxcIit0aGlzLmE6QnBuKHRoaXMuYil9LGwuYT0wLFAoVmcsIlJlZ0V4L1Rva2VuL1N0cmluZ1Rva2VuIiw1MjEpLEkoNDY1LDExNyxLRSxsQyksbC4kbD1mdW5jdGlvbihlKXttMih0aGlzLGUpfSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiB1KFJ2KHRoaXMuYSxlKSwxMTcpfSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT90aGlzLmEuYS5jLmxlbmd0aDowfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYodGhpcy5lPT0xKXtpZih0aGlzLmEuYS5jLmxlbmd0aD09MiluPXUoUnYodGhpcy5hLDApLDExNykscj11KFJ2KHRoaXMuYSwxKSwxMTcpLHIuZT09MyYmci5hbSgwKT09bj9vPW4uZm0oZSkrIisiOnIuZT09OSYmci5hbSgwKT09bj9vPW4uZm0oZSkrIis/IjpvPW4uZm0oZSkrKCIiK3IuZm0oZSkpO2Vsc2V7Zm9yKGg9bmV3IHhnLHM9MDtzPHRoaXMuYS5hLmMubGVuZ3RoO3MrKylmbyhoLHUoUnYodGhpcy5hLHMpLDExNykuZm0oZSkpO289aC5hfXJldHVybiBvfWlmKHRoaXMuYS5hLmMubGVuZ3RoPT0yJiZ1KFJ2KHRoaXMuYSwxKSwxMTcpLmU9PTcpbz11KFJ2KHRoaXMuYSwwKSwxMTcpLmZtKGUpKyI/IjtlbHNlIGlmKHRoaXMuYS5hLmMubGVuZ3RoPT0yJiZ1KFJ2KHRoaXMuYSwwKSwxMTcpLmU9PTcpbz11KFJ2KHRoaXMuYSwxKSwxMTcpLmZtKGUpKyI/PyI7ZWxzZXtmb3IoaD1uZXcgeGcsZm8oaCx1KFJ2KHRoaXMuYSwwKSwxMTcpLmZtKGUpKSxzPTE7czx0aGlzLmEuYS5jLmxlbmd0aDtzKyspaC5hKz0ifCIsZm8oaCx1KFJ2KHRoaXMuYSxzKSwxMTcpLmZtKGUpKTtvPWguYX1yZXR1cm4gb30sUChWZywiUmVnRXgvVG9rZW4vVW5pb25Ub2tlbiIsNDY1KSxJKDUxOCwxLHs1OTI6MX0saE0pLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LFAoaWdlLCJYTUxUeXBlVXRpbC9QYXR0ZXJuTWF0Y2hlckltcGwiLDUxOCksSSgxNjIyLDEzODEse30sQUIpO3ZhciBSNWU7UChpZ2UsIlhNTFR5cGVWYWxpZGF0b3IiLDE2MjIpLEkoMjY0LDEsdDAsUWIpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybih0aGlzLmItdGhpcy5hKSp0aGlzLmM8MD9BYjpuZXcgUHAodGhpcyl9LGwuYT0wLGwuYj0wLGwuYz0wO3ZhciBBYjtQKFY4dCwiRXhjbHVzaXZlUmFuZ2UiLDI2NCksSSgxMDY4LDEsSmQsTUopLGwuUmI9ZnVuY3Rpb24oZSl7dShlLDE5KSxkWGUoKX0sbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGlZZSgpfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHNZZSgpfSxsLldiPWZ1bmN0aW9uKGUpe3UoZSwxOSkscFhlKCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyB5ZyhvZ2UpKX0sUChWOHQsIkV4Y2x1c2l2ZVJhbmdlLzEiLDEwNjgpLEkoMjU0LDEsSmQsUHApLGwuUmI9ZnVuY3Rpb24oZSl7dShlLDE5KSxnWGUoKX0sbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGR1bih0aGlzKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB1YW4odGhpcyl9LGwuV2I9ZnVuY3Rpb24oZSl7dShlLDE5KSxiWGUoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuYzwwP3RoaXMuYT49dGhpcy5jLmI6dGhpcy5hPD10aGlzLmMuYn0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI+MH0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgeWcob2dlKSl9LGwuYT0wLGwuYj0wLFAoVjh0LCJFeGNsdXNpdmVSYW5nZS9SYW5nZUl0ZXJhdG9yIiwyNTQpO3ZhciBtaD15OChUSCwiQyIpLFRyPXk4KHRTLCJJIiksZGw9eTgodTYsIloiKSxMYj15OChlUywiSiIpLEh1PXk4KFFfLCJCIiksaWE9eTgoWl8sIkQiKSxyMz15OChKXywiRiIpLGY1PXk4KG5TLCJTIiksVHhuPVlpKCJvcmcuZWNsaXBzZS5lbGsuY29yZS5sYWJlbHMiLCJJTGFiZWxNYW5hZ2VyIiksU0x0PVlpKFJhLCJEaWFnbm9zdGljQ2hhaW4iKSxBTHQ9WWkoUDBlLCJSZXNvdXJjZVNldCIpLExMdD1QKFJhLCJJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIixudWxsKSxqNWU9KHZSKCkscHNuKSwkNWU9JDVlPWlkbjtsb24ocktlKSxGb24oInBlcm1Qcm9wcyIsW1tbQkgsUkhdLFtqSCwiZ2Vja28xXzgiXV0sW1tCSCxSSF0sW2pILCJpZTEwIl1dLFtbQkgsUkhdLFtqSCwiaWU4Il1dLFtbQkgsUkhdLFtqSCwiaWU5Il1dLFtbQkgsUkhdLFtqSCwic2FmYXJpIl1dXSksJDVlKG51bGwsImVsayIsbnVsbCl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBkMDwidSI/ZDA6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM6W2Z1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKE4sQil7aWYoIShOIGluc3RhbmNlb2YgQikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYihOLEIpe2lmKCFOKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIEImJih0eXBlb2YgQj09Im9iamVjdCJ8fHR5cGVvZiBCPT0iZnVuY3Rpb24iKT9COk59ZnVuY3Rpb24gRShOLEIpe2lmKHR5cGVvZiBCIT0iZnVuY3Rpb24iJiZCIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIEIpO04ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQiYmQi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpOLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLEImJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKE4sQik6Ti5fX3Byb3RvX189Qil9dmFyIF89ZigiLi9lbGstYXBpLmpzIikuZGVmYXVsdCxMPWZ1bmN0aW9uKE4pe0UoQixOKTtmdW5jdGlvbiBCKCl7dmFyIGo9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O20odGhpcyxCKTt2YXIgUj1PYmplY3QuYXNzaWduKHt9LGopLHo9ITE7dHJ5e2YucmVzb2x2ZSgid2ViLXdvcmtlciIpLHo9ITB9Y2F0Y2h7fWlmKGoud29ya2VyVXJsKWlmKHope3ZhciBLPWYoIndlYi13b3JrZXIiKTtSLndvcmtlckZhY3Rvcnk9ZnVuY3Rpb24odXQpe3JldHVybiBuZXcgSyh1dCl9fWVsc2UgY29uc29sZS53YXJuKGBXZWIgd29ya2VyIHJlcXVlc3RlZCBidXQgJ3dlYi13b3JrZXInIHBhY2thZ2Ugbm90IGluc3RhbGxlZC4gCkNvbnNpZGVyIGluc3RhbGxpbmcgdGhlIHBhY2thZ2Ugb3IgcGFzcyB5b3VyIG93biAnd29ya2VyRmFjdG9yeScgdG8gRUxLJ3MgY29uc3RydWN0b3IuCi4uLiBGYWxsaW5nIGJhY2sgdG8gbm9uLXdlYiB3b3JrZXIgdmVyc2lvbi5gKTtpZighUi53b3JrZXJGYWN0b3J5KXt2YXIgaXQ9ZigiLi9lbGstd29ya2VyLm1pbi5qcyIpLHN0PWl0LldvcmtlcjtSLndvcmtlckZhY3Rvcnk9ZnVuY3Rpb24odXQpe3JldHVybiBuZXcgc3QodXQpfX1yZXR1cm4gYih0aGlzLChCLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKEIpKS5jYWxsKHRoaXMsUikpfXJldHVybiBCfShfKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocC5leHBvcnRzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxwLmV4cG9ydHM9TCxMLmRlZmF1bHQ9TH0seyIuL2Vsay1hcGkuanMiOjEsIi4vZWxrLXdvcmtlci5taW4uanMiOjIsIndlYi13b3JrZXIiOjR9XSw0OltmdW5jdGlvbihmLHAsdil7cC5leHBvcnRzPVdvcmtlcn0se31dfSx7fSxbM10pKDMpfSl9KShranQpO3ZhciBjVWU9a2p0LmV4cG9ydHM7Y29uc3QgdVVlPUI3KGNVZSksRWp0PW5ldyB1VWU7bGV0IGl2PXt9O2NvbnN0IGxVZT17fTtsZXQgUDU9e307Y29uc3QgaFVlPWFzeW5jIGZ1bmN0aW9uKGksYSxmLHAsdixtLGIpe2NvbnN0IF89Zi5zZWxlY3QoYFtpZD0iJHthfSJdYCkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLEw9T2JqZWN0LmtleXMoaSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKEwubWFwKGFzeW5jIGZ1bmN0aW9uKE4pe2NvbnN0IEI9aVtOXTtsZXQgaj0iZGVmYXVsdCI7Qi5jbGFzc2VzLmxlbmd0aD4wJiYoaj1CLmNsYXNzZXMuam9pbigiICIpKSxqPWorIiBmbG93Y2hhcnQtbGFiZWwiO2NvbnN0IFI9ZW0oQi5zdHlsZXMpO2xldCB6PUIudGV4dCE9PXZvaWQgMD9CLnRleHQ6Qi5pZDtjb25zdCBLPXt3aWR0aDowLGhlaWdodDowfSxpdD1be2lkOkIuaWQrIi13ZXN0IixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiV0VTVCJ9fSx7aWQ6Qi5pZCsiLWVhc3QiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJFQVNUIn19LHtpZDpCLmlkKyItc291dGgiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJTT1VUSCJ9fSx7aWQ6Qi5pZCsiLW5vcnRoIixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiTk9SVEgifX1dO2xldCBzdD0wLHV0PSIiLGJ0PXt9O3N3aXRjaChCLnR5cGUpe2Nhc2Uicm91bmQiOnN0PTUsdXQ9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjp1dD0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjp1dD0icXVlc3Rpb24iLGJ0PXtwb3J0Q29uc3RyYWludHM6IkZJWEVEX1NJREUifTticmVhaztjYXNlImhleGFnb24iOnV0PSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6dXQ9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6dXQ9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0Ijp1dD0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6dXQ9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjp1dD0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOnV0PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6dXQ9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjp1dD0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjp1dD0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjp1dD0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6dXQ9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjp1dD0icmVjdCI7YnJlYWs7Y2FzZSJkb3VibGVjaXJjbGUiOnV0PSJkb3VibGVjaXJjbGUiO2JyZWFrO2RlZmF1bHQ6dXQ9InJlY3QifWNvbnN0IG10PXtsYWJlbFN0eWxlOlIubGFiZWxTdHlsZSxzaGFwZTp1dCxsYWJlbFRleHQ6eixsYWJlbFR5cGU6Qi5sYWJlbFR5cGUscng6c3Qscnk6c3QsY2xhc3M6aixzdHlsZTpSLnN0eWxlLGlkOkIuaWQsbGluazpCLmxpbmssbGlua1RhcmdldDpCLmxpbmtUYXJnZXQsdG9vbHRpcDp2LmRiLmdldFRvb2x0aXAoQi5pZCl8fCIiLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoQi5pZCksaGF2ZUNhbGxiYWNrOkIuaGF2ZUNhbGxiYWNrLHdpZHRoOkIudHlwZT09PSJncm91cCI/NTAwOnZvaWQgMCxkaXI6Qi5kaXIsdHlwZTpCLnR5cGUscHJvcHM6Qi5wcm9wcyxwYWRkaW5nOkxlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9O2xldCB5dCxkdDtpZihtdC50eXBlIT09Imdyb3VwIilkdD1hd2FpdCB4QnQoXyxtdCxCLmRpcikseXQ9ZHQubm9kZSgpLmdldEJCb3goKTtlbHNle3AuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtjb25zdHtzaGFwZVN2Zzp3dCxiYm94Olh9PWF3YWl0IE9kKF8sbXQsdm9pZCAwLCEwKTtLLndpZHRoPVgud2lkdGgsSy53cmFwcGluZ1dpZHRoPUxlKCkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsSy5oZWlnaHQ9WC5oZWlnaHQsSy5sYWJlbE5vZGU9d3Qubm9kZSgpLG10LmxhYmVsRGF0YT1LfWNvbnN0IGh0PXtpZDpCLmlkLHBvcnRzOkIudHlwZT09PSJkaWFtb25kIj9pdDpbXSxsYXlvdXRPcHRpb25zOmJ0LGxhYmVsVGV4dDp6LGxhYmVsRGF0YTpLLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoQi5pZCksd2lkdGg6eXQ9PW51bGw/dm9pZCAwOnl0LndpZHRoLGhlaWdodDp5dD09bnVsbD92b2lkIDA6eXQuaGVpZ2h0LHR5cGU6Qi50eXBlLGVsOmR0LHBhcmVudDptLnBhcmVudEJ5SWRbQi5pZF19O1A1W210LmlkXT1odH0pKSxifSxUanQ9KGksYSxmKT0+e2NvbnN0IHA9e1RCOntpbjp7bm9ydGg6Im5vcnRoIn0sb3V0Ontzb3V0aDoid2VzdCIsd2VzdDoiZWFzdCIsZWFzdDoic291dGgifX0sTFI6e2luOnt3ZXN0OiJ3ZXN0In0sb3V0OntlYXN0OiJzb3V0aCIsc291dGg6Im5vcnRoIixub3J0aDoiZWFzdCJ9fSxSTDp7aW46e2Vhc3Q6ImVhc3QifSxvdXQ6e3dlc3Q6Im5vcnRoIixub3J0aDoic291dGgiLHNvdXRoOiJ3ZXN0In19LEJUOntpbjp7c291dGg6InNvdXRoIn0sb3V0Ontub3J0aDoiZWFzdCIsZWFzdDoid2VzdCIsd2VzdDoibm9ydGgifX19O3JldHVybiBwLlREPXAuVEIsVXQuaW5mbygiYWJjODgiLGYsYSxpKSxwW2ZdW2FdW2ldfSxDanQ9KGksYSxmKT0+e2lmKFV0LmluZm8oImdldE5leHRQb3J0IGFiYzg4Iix7bm9kZTppLGVkZ2VEaXJlY3Rpb246YSxncmFwaERpcmVjdGlvbjpmfSksIWl2W2ldKXN3aXRjaChmKXtjYXNlIlRCIjpjYXNlIlREIjppdltpXT17aW5Qb3NpdGlvbjoibm9ydGgiLG91dFBvc2l0aW9uOiJzb3V0aCJ9O2JyZWFrO2Nhc2UiQlQiOml2W2ldPXtpblBvc2l0aW9uOiJzb3V0aCIsb3V0UG9zaXRpb246Im5vcnRoIn07YnJlYWs7Y2FzZSJSTCI6aXZbaV09e2luUG9zaXRpb246ImVhc3QiLG91dFBvc2l0aW9uOiJ3ZXN0In07YnJlYWs7Y2FzZSJMUiI6aXZbaV09e2luUG9zaXRpb246Indlc3QiLG91dFBvc2l0aW9uOiJlYXN0In07YnJlYWt9Y29uc3QgcD1hPT09ImluIj9pdltpXS5pblBvc2l0aW9uOml2W2ldLm91dFBvc2l0aW9uO3JldHVybiBhPT09ImluIj9pdltpXS5pblBvc2l0aW9uPVRqdChpdltpXS5pblBvc2l0aW9uLGEsZik6aXZbaV0ub3V0UG9zaXRpb249VGp0KGl2W2ldLm91dFBvc2l0aW9uLGEsZikscH0sZlVlPShpLGEpPT57bGV0IGY9aS5zdGFydCxwPWkuZW5kO2NvbnN0IHY9ZixtPXAsYj1QNVtmXSxFPVA1W3BdO3JldHVybiFifHwhRT97c291cmNlOmYsdGFyZ2V0OnB9OihiLnR5cGU9PT0iZGlhbW9uZCImJihmPWAke2Z9LSR7Q2p0KGYsIm91dCIsYSl9YCksRS50eXBlPT09ImRpYW1vbmQiJiYocD1gJHtwfS0ke0NqdChwLCJpbiIsYSl9YCkse3NvdXJjZTpmLHRhcmdldDpwLHNvdXJjZUlkOnYsdGFyZ2V0SWQ6bX0pfSxkVWU9ZnVuY3Rpb24oaSxhLGYscCl7VXQuaW5mbygiYWJjNzggZWRnZXMgPSAiLGkpO2NvbnN0IHY9cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKTtsZXQgbT17fSxiPWEuZGIuZ2V0RGlyZWN0aW9uKCksRSxfO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBMPWVtKGkuZGVmYXVsdFN0eWxlKTtFPUwuc3R5bGUsXz1MLmxhYmVsU3R5bGV9cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihMKXtjb25zdCBOPSJMLSIrTC5zdGFydCsiLSIrTC5lbmQ7bVtOXT09PXZvaWQgMD8obVtOXT0wLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsTixtW05dKSk6KG1bTl0rKyxVdC5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLE4sbVtOXSkpO2xldCBCPU4rIi0iK21bTl07VXQuaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsTixCLG1bTl0pO2NvbnN0IGo9IkxTLSIrTC5zdGFydCxSPSJMRS0iK0wuZW5kLHo9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaCh6Lm1pbmxlbj1MLmxlbmd0aHx8MSxMLnR5cGU9PT0iYXJyb3dfb3BlbiI/ei5hcnJvd2hlYWQ9Im5vbmUiOnouYXJyb3doZWFkPSJub3JtYWwiLHouYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLHouYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIixMLnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjp6LmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6ei5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6ei5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOnouYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjp6LmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjp6LmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIjticmVha31sZXQgSz0iIixpdD0iIjtzd2l0Y2goTC5zdHJva2Upe2Nhc2Uibm9ybWFsIjpLPSJmaWxsOm5vbmU7IixFIT09dm9pZCAwJiYoSz1FKSxfIT09dm9pZCAwJiYoaXQ9Xyksei50aGlja25lc3M9Im5vcm1hbCIsei5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOnoudGhpY2tuZXNzPSJub3JtYWwiLHoucGF0dGVybj0iZG90dGVkIix6LnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjp6LnRoaWNrbmVzcz0idGhpY2siLHoucGF0dGVybj0ic29saWQiLHouc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyI7YnJlYWt9aWYoTC5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgZHQ9ZW0oTC5zdHlsZSk7Sz1kdC5zdHlsZSxpdD1kdC5sYWJlbFN0eWxlfXouc3R5bGU9ei5zdHlsZSs9Syx6LmxhYmVsU3R5bGU9ei5sYWJlbFN0eWxlKz1pdCxMLmludGVycG9sYXRlIT09dm9pZCAwP3ouY3VydmU9WDIoTC5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/ei5jdXJ2ZT1YMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6ei5jdXJ2ZT1YMihsVWUuY3VydmUsaWcpLEwudGV4dD09PXZvaWQgMD9MLnN0eWxlIT09dm9pZCAwJiYoei5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOih6LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIix6LmxhYmVscG9zPSJjIiksei5sYWJlbFR5cGU9TC5sYWJlbFR5cGUsei5sYWJlbD1MLnRleHQucmVwbGFjZShZci5saW5lQnJlYWtSZWdleCxgCmApLEwuc3R5bGU9PT12b2lkIDAmJih6LnN0eWxlPXouc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lOyIpLHoubGFiZWxTdHlsZT16LmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSx6LmlkPUIsei5jbGFzc2VzPSJmbG93Y2hhcnQtbGluayAiK2orIiAiK1I7Y29uc3Qgc3Q9Q0J0KHYseikse3NvdXJjZTp1dCx0YXJnZXQ6YnQsc291cmNlSWQ6bXQsdGFyZ2V0SWQ6eXR9PWZVZShMLGIpO1V0LmRlYnVnKCJhYmM3OCBzb3VyY2UgYW5kIHRhcmdldCIsdXQsYnQpLGYuZWRnZXMucHVzaCh7aWQ6ImUiK0wuc3RhcnQrTC5lbmQsc291cmNlczpbdXRdLHRhcmdldHM6W2J0XSxzb3VyY2VJZDptdCx0YXJnZXRJZDp5dCxsYWJlbEVsOnN0LGxhYmVsczpbe3dpZHRoOnoud2lkdGgsaGVpZ2h0OnouaGVpZ2h0LG9yZ1dpZHRoOnoud2lkdGgsb3JnSGVpZ2h0OnouaGVpZ2h0LHRleHQ6ei5sYWJlbCxsYXlvdXRPcHRpb25zOnsiZWRnZUxhYmVscy5pbmxpbmUiOiJ0cnVlIiwiZWRnZUxhYmVscy5wbGFjZW1lbnQiOiJDRU5URVIifX1dLGVkZ2VEYXRhOnp9KX0pLGZ9LGdVZT1mdW5jdGlvbihpLGEsZixwLHYpe2xldCBtPSIiO3N3aXRjaChwJiYobT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxtPW0ucmVwbGFjZSgvXCgvZywiXFwoIiksbT1tLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLmFycm93VHlwZVN0YXJ0KXtjYXNlImFycm93X2Nyb3NzIjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1jcm9zc1N0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1iYXJiU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNpcmNsZVN0YXJ0KSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWV4dGVuc2lvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNvbXBvc2l0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItbG9sbGlwb3BTdGFydCkiKTticmVha31zd2l0Y2goYS5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWxvbGxpcG9wRW5kKSIpO2JyZWFrfX0scFVlPWZ1bmN0aW9uKGksYSl7cmV0dXJuIFV0LmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLGEuZGIuZ2V0Q2xhc3NlcygpfSxiVWU9ZnVuY3Rpb24oaSl7Y29uc3QgYT17cGFyZW50QnlJZDp7fSxjaGlsZHJlbkJ5SWQ6e319LGY9aS5nZXRTdWJHcmFwaHMoKTtyZXR1cm4gVXQuaW5mbygiU3ViZ3JhcGhzIC0gIixmKSxmLmZvckVhY2goZnVuY3Rpb24ocCl7cC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHYpe2EucGFyZW50QnlJZFt2XT1wLmlkLGEuY2hpbGRyZW5CeUlkW3AuaWRdPT09dm9pZCAwJiYoYS5jaGlsZHJlbkJ5SWRbcC5pZF09W10pLGEuY2hpbGRyZW5CeUlkW3AuaWRdLnB1c2godil9KX0pLGYuZm9yRWFjaChmdW5jdGlvbihwKXtwLmlkLGEucGFyZW50QnlJZFtwLmlkXSE9PXZvaWQgMCYmYS5wYXJlbnRCeUlkW3AuaWRdfSksYX0sdlVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPW9VZShpLGEsZik7aWYocD09PXZvaWQgMHx8cD09PSJyb290IilyZXR1cm57eDowLHk6MH07Y29uc3Qgdj1QNVtwXS5vZmZzZXQ7cmV0dXJue3g6di5wb3NYLHk6di5wb3NZfX0sd1VlPWZ1bmN0aW9uKGksYSxmLHAsdixtKXtjb25zdCBiPXZVZShhLnNvdXJjZUlkLGEudGFyZ2V0SWQsdiksRT1hLnNlY3Rpb25zWzBdLnN0YXJ0UG9pbnQsXz1hLnNlY3Rpb25zWzBdLmVuZFBvaW50LE49KGEuc2VjdGlvbnNbMF0uYmVuZFBvaW50cz9hLnNlY3Rpb25zWzBdLmJlbmRQb2ludHM6W10pLm1hcChidD0+W2J0LngrYi54LGJ0LnkrYi55XSksQj1bW0UueCtiLngsRS55K2IueV0sLi4uTixbXy54K2IueCxfLnkrYi55XV0se3g6aix5OlJ9PVRCdChhLmVkZ2VEYXRhKSx6PVo3KCkueChqKS55KFIpLmN1cnZlKGlnKSxLPWkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIseihCKSkuYXR0cigiY2xhc3MiLCJwYXRoICIrZi5jbGFzc2VzKS5hdHRyKCJmaWxsIiwibm9uZSIpLGl0PWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxzdD15cihpdC5ub2RlKCkuYXBwZW5kQ2hpbGQoYS5sYWJlbEVsKSksdXQ9c3Qubm9kZSgpLmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7c3QuYXR0cigid2lkdGgiLHV0LndpZHRoKSxzdC5hdHRyKCJoZWlnaHQiLHV0LmhlaWdodCksaXQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7YS5sYWJlbHNbMF0ueCtiLnh9LCAke2EubGFiZWxzWzBdLnkrYi55fSlgKSxnVWUoSyxmLHAudHlwZSxwLmFycm93TWFya2VyQWJzb2x1dGUsbSl9LF9qdD0oaSxhKT0+e2kuZm9yRWFjaChmPT57Zi5jaGlsZHJlbnx8KGYuY2hpbGRyZW49W10pO2NvbnN0IHA9YS5jaGlsZHJlbkJ5SWRbZi5pZF07cCYmcC5mb3JFYWNoKHY9PntmLmNoaWxkcmVuLnB1c2goUDVbdl0pfSksX2p0KGYuY2hpbGRyZW4sYSl9KX0sbVVlPWFzeW5jIGZ1bmN0aW9uKGksYSxmLHApe3ZhciBodDtwLmRiLmNsZWFyKCksUDU9e30saXY9e30scC5kYi5zZXRHZW4oImdlbi0yIikscC5wYXJzZXIucGFyc2UoaSk7Y29uc3Qgdj15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigic3R5bGUiLCJoZWlnaHQ6NDAwcHgiKS5hdHRyKCJpZCIsImN5Iik7bGV0IG09e2lkOiJyb290IixsYXlvdXRPcHRpb25zOnsiZWxrLmhpZXJhcmNoeUhhbmRsaW5nIjoiSU5DTFVERV9DSElMRFJFTiIsIm9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIjoiW3RvcD0xMDAsIGxlZnQ9MTAwLCBib3R0b209MTEwLCByaWdodD0xMTBdIiwiZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiOiIzMCIsImVsay5kaXJlY3Rpb24iOiJET1dOIn0sY2hpbGRyZW46W10sZWRnZXM6W119O3N3aXRjaChVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCB1c2luZyB2MyByZW5kZXJlciIsRWp0KSxwLmRiLmdldERpcmVjdGlvbigpKXtjYXNlIkJUIjptLmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iVVAiO2JyZWFrO2Nhc2UiVEIiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJET1dOIjticmVhaztjYXNlIkxSIjptLmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iUklHSFQiO2JyZWFrO2Nhc2UiUkwiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJMRUZUIjticmVha31jb25zdHtzZWN1cml0eUxldmVsOkUsZmxvd2NoYXJ0Ol99PUxlKCk7bGV0IEw7RT09PSJzYW5kYm94IiYmKEw9eXIoIiNpIithKSk7Y29uc3QgTj15cihFPT09InNhbmRib3giP0wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEI9RT09PSJzYW5kYm94Ij9MLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LGo9Ti5zZWxlY3QoYFtpZD0iJHthfSJdYCk7SUZ0KGosWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0scC50eXBlLGEpO2NvbnN0IHo9cC5kYi5nZXRWZXJ0aWNlcygpO2xldCBLO2NvbnN0IGl0PXAuZGIuZ2V0U3ViR3JhcGhzKCk7VXQuaW5mbygiU3ViZ3JhcGhzIC0gIixpdCk7Zm9yKGxldCB3dD1pdC5sZW5ndGgtMTt3dD49MDt3dC0tKUs9aXRbd3RdLHAuZGIuYWRkVmVydGV4KEsuaWQse3RleHQ6Sy50aXRsZSx0eXBlOksubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxLLmNsYXNzZXMsSy5kaXIpO2NvbnN0IHN0PWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaHMiKSx1dD1iVWUocC5kYik7bT1hd2FpdCBoVWUoeixhLE4sQixwLHV0LG0pO2NvbnN0IGJ0PWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlcyBlZGdlUGF0aCIpLG10PXAuZGIuZ2V0RWRnZXMoKTttPWRVZShtdCxwLG0saiksT2JqZWN0LmtleXMoUDUpLmZvckVhY2god3Q9Pntjb25zdCBYPVA1W3d0XTtYLnBhcmVudHx8bS5jaGlsZHJlbi5wdXNoKFgpLHV0LmNoaWxkcmVuQnlJZFt3dF0hPT12b2lkIDAmJihYLmxhYmVscz1be3RleHQ6WC5sYWJlbFRleHQsbGF5b3V0T3B0aW9uczp7Im5vZGVMYWJlbHMucGxhY2VtZW50IjoiW0hfQ0VOVEVSLCBWX1RPUCwgSU5TSURFXSJ9LHdpZHRoOlgubGFiZWxEYXRhLndpZHRoLGhlaWdodDpYLmxhYmVsRGF0YS5oZWlnaHR9XSxkZWxldGUgWC54LGRlbGV0ZSBYLnksZGVsZXRlIFgud2lkdGgsZGVsZXRlIFguaGVpZ2h0KX0pLF9qdChtLmNoaWxkcmVuLHV0KSxVdC5pbmZvKCJhZnRlciBsYXlvdXQiLEpTT04uc3RyaW5naWZ5KG0sbnVsbCwyKSk7Y29uc3QgZHQ9YXdhaXQgRWp0LmxheW91dChtKTtTanQoMCwwLGR0LmNoaWxkcmVuLGosc3QscCwwKSxVdC5pbmZvKCJhZnRlciBsYXlvdXQiLGR0KSwoaHQ9ZHQuZWRnZXMpPT1udWxsfHxodC5tYXAod3Q9Pnt3VWUoYnQsd3Qsd3QuZWRnZURhdGEscCx1dCxhKX0pLGNUKHt9LGosXy5kaWFncmFtUGFkZGluZyxfLnVzZU1heFdpZHRoKSx2LnJlbW92ZSgpfSxTanQ9KGksYSxmLHAsdixtLGIpPT57Zi5mb3JFYWNoKGZ1bmN0aW9uKEUpe2lmKEUpaWYoUDVbRS5pZF0ub2Zmc2V0PXtwb3NYOkUueCtpLHBvc1k6RS55K2EseDppLHk6YSxkZXB0aDpiLHdpZHRoOkUud2lkdGgsaGVpZ2h0OkUuaGVpZ2h0fSxFLnR5cGU9PT0iZ3JvdXAiKXtjb25zdCBfPXYuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCIpO18uaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCBzdWJncmFwaC1sdmwtIitiJTUrIiBub2RlIikuYXR0cigieCIsRS54K2kpLmF0dHIoInkiLEUueSthKS5hdHRyKCJ3aWR0aCIsRS53aWR0aCkuYXR0cigiaGVpZ2h0IixFLmhlaWdodCk7Y29uc3QgTD1fLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxOPUxlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/RS5sYWJlbERhdGEud2lkdGgvMjowO0wuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7RS5sYWJlbHNbMF0ueCtpK0UueCtOfSwgJHtFLmxhYmVsc1swXS55K2ErRS55KzN9KWApLEwubm9kZSgpLmFwcGVuZENoaWxkKEUubGFiZWxEYXRhLmxhYmVsTm9kZSksVXQuaW5mbygiSWQgKFVHSCk9ICIsRS50eXBlLEUubGFiZWxzKX1lbHNlIFV0LmluZm8oIklkIChVR0gpPSAiLEUuaWQpLEUuZWwuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7RS54K2krRS53aWR0aC8yfSwgJHtFLnkrYStFLmhlaWdodC8yfSlgKX0pLGYuZm9yRWFjaChmdW5jdGlvbihFKXtFJiZFLnR5cGU9PT0iZ3JvdXAiJiZTanQoaStFLngsYStFLnksRS5jaGlsZHJlbixwLHYsbSxiKzEpfSl9LHlVZT17Z2V0Q2xhc3NlczpwVWUsZHJhdzptVWV9LHhVZT1pPT57bGV0IGE9IiI7Zm9yKGxldCBmPTA7Zjw1O2YrKylhKz1gCiAgICAgIC5zdWJncmFwaC1sdmwtJHtmfSB7CiAgICAgICAgZmlsbDogJHtpW2BzdXJmYWNlJHtmfWBdfTsKICAgICAgICBzdHJva2U6ICR7aVtgc3VyZmFjZVBlZXIke2Z9YF19OwogICAgICB9CiAgICBgO3JldHVybiBhfSxrVWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e2RiOmpJZSxyZW5kZXJlcjp5VWUscGFyc2VyOiRkdCxzdHlsZXM6aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuIHsKICAgIGZpbGw6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICB9CiAgLnN1YmdyYXBoIHsKICAgIHN0cm9rZS13aWR0aDoyOwogICAgcng6MzsKICB9CiAgLy8gLnN1YmdyYXBoLWx2bC0xIHsKICAvLyAgIGZpbGw6I2NjYzsKICAvLyAgIC8vIHN0cm9rZTpibGFjazsKICAvLyB9CgogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KCiAgJHt4VWUoaSl9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBqZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihqLFIseixLKXtmb3Ioej16fHx7fSxLPWoubGVuZ3RoO0stLTt6W2pbS11dPVIpO3JldHVybiB6fSxhPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMjAsMjFdLGY9WzEsOV0scD1bMSwxMF0sdj1bMSwxMV0sbT1bMSwxMl0sYj1bMSwxM10sRT1bMSwxNl0sXz1bMSwxN10sTD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsdGltZWxpbmU6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyxwZXJpb2Rfc3RhdGVtZW50OjE4LGV2ZW50X3N0YXRlbWVudDoxOSxwZXJpb2Q6MjAsZXZlbnQ6MjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDIwOiJwZXJpb2QiLDIxOiJldmVudCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMTgsMV0sWzE5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFIseixLLGl0LHN0LHV0LGJ0KXt2YXIgbXQ9dXQubGVuZ3RoLTE7c3dpdGNoKHN0KXtjYXNlIDE6cmV0dXJuIHV0W210LTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOnV0W210LTFdLnB1c2godXRbbXRdKSx0aGlzLiQ9dXRbbXQtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9dXRbbXRdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODppdC5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZSh1dFttdF0uc3Vic3RyKDYpKSx0aGlzLiQ9dXRbbXRdLnN1YnN0cig2KTticmVhaztjYXNlIDk6dGhpcy4kPXV0W210XS50cmltKCksaXQuZ2V0Q29tbW9uRGIoKS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMTp0aGlzLiQ9dXRbbXRdLnRyaW0oKSxpdC5nZXRDb21tb25EYigpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjppdC5hZGRTZWN0aW9uKHV0W210XS5zdWJzdHIoOCkpLHRoaXMuJD11dFttdF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6aXQuYWRkVGFzayh1dFttdF0sMCwiIiksdGhpcy4kPXV0W210XTticmVhaztjYXNlIDE2Oml0LmFkZEV2ZW50KHV0W210XS5zdWJzdHIoMikpLHRoaXMuJD11dFttdF07YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkoYSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOmYsMTI6cCwxNDp2LDE2Om0sMTc6YiwxODoxNCwxOToxNSwyMDpFLDIxOl99LGkoYSxbMiw3XSx7MTpbMiwxXX0pLGkoYSxbMiwzXSksezk6MTgsMTE6ZiwxMjpwLDE0OnYsMTY6bSwxNzpiLDE4OjE0LDE5OjE1LDIwOkUsMjE6X30saShhLFsyLDVdKSxpKGEsWzIsNl0pLGkoYSxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0saShhLFsyLDExXSksaShhLFsyLDEyXSksaShhLFsyLDEzXSksaShhLFsyLDE0XSksaShhLFsyLDE1XSksaShhLFsyLDE2XSksaShhLFsyLDRdKSxpKGEsWzIsOV0pLGkoYSxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOmZ1bmN0aW9uKFIseil7aWYoei5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFIpO2Vsc2V7dmFyIEs9bmV3IEVycm9yKFIpO3Rocm93IEsuaGFzaD16LEt9fSxwYXJzZTpmdW5jdGlvbihSKXt2YXIgej10aGlzLEs9WzBdLGl0PVtdLHN0PVtudWxsXSx1dD1bXSxidD10aGlzLnRhYmxlLG10PSIiLHl0PTAsZHQ9MCxodD0yLHd0PTEsWD11dC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwdD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFU9e3l5Ont9fTtmb3IodmFyIHh0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseHQpJiYoVS55eVt4dF09dGhpcy55eVt4dF0pO3B0LnNldElucHV0KFIsVS55eSksVS55eS5sZXhlcj1wdCxVLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBwdC55eWxsb2M+InUiJiYocHQueXlsbG9jPXt9KTt2YXIgbnQ9cHQueXlsbG9jO3V0LnB1c2gobnQpO3ZhciBPdD1wdC5vcHRpb25zJiZwdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgVS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1VLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE50KCl7dmFyIHZlO3JldHVybiB2ZT1pdC5wb3AoKXx8cHQubGV4KCl8fHd0LHR5cGVvZiB2ZSE9Im51bWJlciImJih2ZSBpbnN0YW5jZW9mIEFycmF5JiYoaXQ9dmUsdmU9aXQucG9wKCkpLHZlPXouc3ltYm9sc19bdmVdfHx2ZSksdmV9Zm9yKHZhciBxdCxDdCxaLFR0LEh0PXt9LEl0LEZ0LGtlLHBuOzspe2lmKEN0PUtbSy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tDdF0/Wj10aGlzLmRlZmF1bHRBY3Rpb25zW0N0XTooKHF0PT09bnVsbHx8dHlwZW9mIHF0PiJ1IikmJihxdD1OdCgpKSxaPWJ0W0N0XSYmYnRbQ3RdW3F0XSksdHlwZW9mIFo+InUifHwhWi5sZW5ndGh8fCFaWzBdKXt2YXIgTWU9IiI7cG49W107Zm9yKEl0IGluIGJ0W0N0XSl0aGlzLnRlcm1pbmFsc19bSXRdJiZJdD5odCYmcG4ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0l0XSsiJyIpO3B0LnNob3dQb3NpdGlvbj9NZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh5dCsxKStgOgpgK3B0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcG4uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txdF18fHF0KSsiJyI6TWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeXQrMSkrIjogVW5leHBlY3RlZCAiKyhxdD09d3Q/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcXRdfHxxdCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTWUse3RleHQ6cHQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3F0XXx8cXQsbGluZTpwdC55eWxpbmVubyxsb2M6bnQsZXhwZWN0ZWQ6cG59KX1pZihaWzBdaW5zdGFuY2VvZiBBcnJheSYmWi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0N0KyIsIHRva2VuOiAiK3F0KTtzd2l0Y2goWlswXSl7Y2FzZSAxOksucHVzaChxdCksc3QucHVzaChwdC55eXRleHQpLHV0LnB1c2gocHQueXlsbG9jKSxLLnB1c2goWlsxXSkscXQ9bnVsbCxkdD1wdC55eWxlbmcsbXQ9cHQueXl0ZXh0LHl0PXB0Lnl5bGluZW5vLG50PXB0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoRnQ9dGhpcy5wcm9kdWN0aW9uc19bWlsxXV1bMV0sSHQuJD1zdFtzdC5sZW5ndGgtRnRdLEh0Ll8kPXtmaXJzdF9saW5lOnV0W3V0Lmxlbmd0aC0oRnR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp1dFt1dC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp1dFt1dC5sZW5ndGgtKEZ0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnV0W3V0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sT3QmJihIdC5fJC5yYW5nZT1bdXRbdXQubGVuZ3RoLShGdHx8MSldLnJhbmdlWzBdLHV0W3V0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLFR0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShIdCxbbXQsZHQseXQsVS55eSxaWzFdLHN0LHV0XS5jb25jYXQoWCkpLHR5cGVvZiBUdDwidSIpcmV0dXJuIFR0O0Z0JiYoSz1LLnNsaWNlKDAsLTEqRnQqMiksc3Q9c3Quc2xpY2UoMCwtMSpGdCksdXQ9dXQuc2xpY2UoMCwtMSpGdCkpLEsucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1taWzFdXVswXSksc3QucHVzaChIdC4kKSx1dC5wdXNoKEh0Ll8kKSxrZT1idFtLW0subGVuZ3RoLTJdXVtLW0subGVuZ3RoLTFdXSxLLnB1c2goa2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxOPWZ1bmN0aW9uKCl7dmFyIGo9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oeixLKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHosSyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3Ioeil9LHNldElucHV0OmZ1bmN0aW9uKFIseil7cmV0dXJuIHRoaXMueXk9enx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Uix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Uix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Uix0aGlzLm1hdGNoZWQrPVI7dmFyIHo9Ui5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHo/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFJ9LHVucHV0OmZ1bmN0aW9uKFIpe3ZhciB6PVIubGVuZ3RoLEs9Ui5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVIrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXopLHRoaXMub2Zmc2V0LT16O3ZhciBpdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxLLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Sy5sZW5ndGgtMSk7dmFyIHN0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLPyhLLmxlbmd0aD09PWl0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkraXRbaXQubGVuZ3RoLUsubGVuZ3RoXS5sZW5ndGgtS1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXp9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bc3RbMF0sc3RbMF0rdGhpcy55eWxlbmctel0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFIpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShSKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oUi5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Iuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLm1hdGNoO3JldHVybiBSLmxlbmd0aDwyMCYmKFIrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVIubGVuZ3RoKSksKFIuc3Vic3RyKDAsMjApKyhSLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgUj10aGlzLnBhc3RJbnB1dCgpLHo9bmV3IEFycmF5KFIubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUit0aGlzLnVwY29taW5nSW5wdXQoKStgCmAreisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oUix6KXt2YXIgSyxpdCxzdDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoc3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoc3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaXQ9UlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksaXQmJih0aGlzLnl5bGluZW5vKz1pdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjppdD9pdFtpdC5sZW5ndGgtMV0ubGVuZ3RoLWl0W2l0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9UlswXSx0aGlzLm1hdGNoKz1SWzBdLHRoaXMubWF0Y2hlcz1SLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVJbMF0sSz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyx6LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEspcmV0dXJuIEs7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHV0IGluIHN0KXRoaXNbdXRdPXN0W3V0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBSLHosSyxpdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBzdD10aGlzLl9jdXJyZW50UnVsZXMoKSx1dD0wO3V0PHN0Lmxlbmd0aDt1dCsrKWlmKEs9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tzdFt1dF1dKSxLJiYoIXp8fEtbMF0ubGVuZ3RoPnpbMF0ubGVuZ3RoKSl7aWYoej1LLGl0PXV0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFI9dGhpcy50ZXN0X21hdGNoKEssc3RbdXRdKSxSIT09ITEpcmV0dXJuIFI7aWYodGhpcy5fYmFja3RyYWNrKXt6PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHo/KFI9dGhpcy50ZXN0X21hdGNoKHosc3RbaXRdKSxSIT09ITE/UjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5uZXh0KCk7cmV0dXJuIHp8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHope3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh6KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgej10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB6PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oeil7cmV0dXJuIHo9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh6fHwwKSx6Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbel06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeil7dGhpcy5iZWdpbih6KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih6LEssaXQsc3Qpe3N3aXRjaChpdCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzp0aW1lbGluZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzo6XHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGp9KCk7TC5sZXhlcj1OO2Z1bmN0aW9uIEIoKXt0aGlzLnl5PXt9fXJldHVybiBCLnByb3RvdHlwZT1MLEwuUGFyc2VyPUIsbmV3IEJ9KCk7amd0LnBhcnNlcj1qZ3Q7Y29uc3QgRVVlPWpndDtsZXQgcEw9IiIsQWp0PTA7Y29uc3QgJGd0PVtdLEdLPVtdLGJMPVtdLExqdD0oKT0+TE90LE1qdD1mdW5jdGlvbigpeyRndC5sZW5ndGg9MCxHSy5sZW5ndGg9MCxwTD0iIixiTC5sZW5ndGg9MCxhcCgpfSxJanQ9ZnVuY3Rpb24oaSl7cEw9aSwkZ3QucHVzaChpKX0sRGp0PWZ1bmN0aW9uKCl7cmV0dXJuICRndH0sT2p0PWZ1bmN0aW9uKCl7bGV0IGk9Qmp0KCk7Y29uc3QgYT0xMDA7bGV0IGY9MDtmb3IoOyFpJiZmPGE7KWk9Qmp0KCksZisrO3JldHVybiBHSy5wdXNoKC4uLmJMKSxHS30sTmp0PWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPXtpZDpBanQrKyxzZWN0aW9uOnBMLHR5cGU6cEwsdGFzazppLHNjb3JlOmF8fDAsZXZlbnRzOmY/W2ZdOltdfTtiTC5wdXNoKHApfSxQanQ9ZnVuY3Rpb24oaSl7YkwuZmluZChmPT5mLmlkPT09QWp0LTEpLmV2ZW50cy5wdXNoKGkpfSxGanQ9ZnVuY3Rpb24oaSl7Y29uc3QgYT17c2VjdGlvbjpwTCx0eXBlOnBMLGRlc2NyaXB0aW9uOmksdGFzazppLGNsYXNzZXM6W119O0dLLnB1c2goYSl9LEJqdD1mdW5jdGlvbigpe2NvbnN0IGk9ZnVuY3Rpb24oZil7cmV0dXJuIGJMW2ZdLnByb2Nlc3NlZH07bGV0IGE9ITA7Zm9yKGNvbnN0W2YscF1vZiBiTC5lbnRyaWVzKCkpaShmKSxhPWEmJnAucHJvY2Vzc2VkO3JldHVybiBhfSxUVWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFkZEV2ZW50OlBqdCxhZGRTZWN0aW9uOklqdCxhZGRUYXNrOk5qdCxhZGRUYXNrT3JnOkZqdCxjbGVhcjpNanQsZGVmYXVsdDp7Y2xlYXI6TWp0LGdldENvbW1vbkRiOkxqdCxhZGRTZWN0aW9uOklqdCxnZXRTZWN0aW9uczpEanQsZ2V0VGFza3M6T2p0LGFkZFRhc2s6Tmp0LGFkZFRhc2tPcmc6Rmp0LGFkZEV2ZW50OlBqdH0sZ2V0Q29tbW9uRGI6TGp0LGdldFNlY3Rpb25zOkRqdCxnZXRUYXNrczpPanR9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQ1VlPTEyLFZLPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1pLmFwcGVuZCgicmVjdCIpO3JldHVybiBmLmF0dHIoIngiLGEueCksZi5hdHRyKCJ5IixhLnkpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigid2lkdGgiLGEud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixhLmhlaWdodCksZi5hdHRyKCJyeCIsYS5yeCksZi5hdHRyKCJyeSIsYS5yeSksYS5jbGFzcyE9PXZvaWQgMCYmZi5hdHRyKCJjbGFzcyIsYS5jbGFzcyksZn0sX1VlPWZ1bmN0aW9uKGksYSl7Y29uc3QgcD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gpLmF0dHIoImN5IixhLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSx2PWkuYXBwZW5kKCJnIik7di5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixhLmN4LTE1LzMpLmF0dHIoImN5IixhLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3grMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIG0oXyl7Y29uc3QgTD1MQSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krMikrIikiKX1mdW5jdGlvbiBiKF8pe2NvbnN0IEw9TEEoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krNykrIikiKX1mdW5jdGlvbiBFKF8pe18uYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGEuY3gtNSkuYXR0cigieTEiLGEuY3krNykuYXR0cigieDIiLGEuY3grNSkuYXR0cigieTIiLGEuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gYS5zY29yZT4zP20odik6YS5zY29yZTwzP2Iodik6RSh2KSxwfSxTVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gZi5hdHRyKCJjeCIsYS5jeCksZi5hdHRyKCJjeSIsYS5jeSksZi5hdHRyKCJjbGFzcyIsImFjdG9yLSIrYS5wb3MpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigiciIsYS5yKSxmLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixmLmNsYXNzKSxhLnRpdGxlIT09dm9pZCAwJiZmLmFwcGVuZCgidGl0bGUiKS50ZXh0KGEudGl0bGUpLGZ9LFJqdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS50ZXh0LnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIiAiKSxwPWkuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixhLngpLHAuYXR0cigieSIsYS55KSxwLmF0dHIoImNsYXNzIiwibGVnZW5kIikscC5zdHlsZSgidGV4dC1hbmNob3IiLGEuYW5jaG9yKSxhLmNsYXNzIT09dm9pZCAwJiZwLmF0dHIoImNsYXNzIixhLmNsYXNzKTtjb25zdCB2PXAuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiB2LmF0dHIoIngiLGEueCthLnRleHRNYXJnaW4qMiksdi50ZXh0KGYpLHB9LEFVZT1mdW5jdGlvbihpLGEpe2Z1bmN0aW9uIGYodixtLGIsRSxfKXtyZXR1cm4gdisiLCIrbSsiICIrKHYrYikrIiwiK20rIiAiKyh2K2IpKyIsIisobStFLV8pKyIgIisoditiLV8qMS4yKSsiLCIrKG0rRSkrIiAiK3YrIiwiKyhtK0UpfWNvbnN0IHA9aS5hcHBlbmQoInBvbHlnb24iKTtwLmF0dHIoInBvaW50cyIsZihhLngsYS55LDUwLDIwLDcpKSxwLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxhLnk9YS55K2EubGFiZWxNYXJnaW4sYS54PWEueCsuNSphLmxhYmVsTWFyZ2luLFJqdChpLGEpfSxMVWU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9aS5hcHBlbmQoImciKSx2PXpndCgpO3YueD1hLngsdi55PWEueSx2LmZpbGw9YS5maWxsLHYud2lkdGg9Zi53aWR0aCx2LmhlaWdodD1mLmhlaWdodCx2LmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrYS5udW0sdi5yeD0zLHYucnk9MyxWSyhwLHYpLCRqdChmKShhLnRleHQscCx2Lngsdi55LHYud2lkdGgsdi5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrYS5udW19LGYsYS5jb2xvdXIpfTtsZXQgamp0PS0xO2NvbnN0IE1VZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1hLngrZi53aWR0aC8yLHY9aS5hcHBlbmQoImciKTtqanQrKztjb25zdCBtPTMwMCs1KjMwO3YuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIitqanQpLmF0dHIoIngxIixwKS5hdHRyKCJ5MSIsYS55KS5hdHRyKCJ4MiIscCkuYXR0cigieTIiLG0pLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxfVWUodix7Y3g6cCxjeTozMDArKDUtYS5zY29yZSkqMzAsc2NvcmU6YS5zY29yZX0pO2NvbnN0IGI9emd0KCk7Yi54PWEueCxiLnk9YS55LGIuZmlsbD1hLmZpbGwsYi53aWR0aD1mLndpZHRoLGIuaGVpZ2h0PWYuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrYS5udW0sYi5yeD0zLGIucnk9MyxWSyh2LGIpLGEueCsxNCwkanQoZikoYS50YXNrLHYsYi54LGIueSxiLndpZHRoLGIuaGVpZ2h0LHtjbGFzczoidGFzayJ9LGYsYS5jb2xvdXIpfSxJVWU9ZnVuY3Rpb24oaSxhKXtWSyhpLHt4OmEuc3RhcnR4LHk6YS5zdGFydHksd2lkdGg6YS5zdG9weC1hLnN0YXJ0eCxoZWlnaHQ6YS5zdG9weS1hLnN0YXJ0eSxmaWxsOmEuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxEVWU9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCwidGV4dC1hbmNob3IiOiJzdGFydCIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MH19LHpndD1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LCRqdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodixtLGIsRSxfLEwsTixCKXtjb25zdCBqPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUrTC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixCKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHYpO3AoaixOKX1mdW5jdGlvbiBhKHYsbSxiLEUsXyxMLE4sQixqKXtjb25zdHt0YXNrRm9udFNpemU6Uix0YXNrRm9udEZhbWlseTp6fT1CLEs9di5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBpdD0wO2l0PEsubGVuZ3RoO2l0Kyspe2NvbnN0IHN0PWl0KlItUiooSy5sZW5ndGgtMSkvMix1dD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFKS5hdHRyKCJmaWxsIixqKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixSKS5zdHlsZSgiZm9udC1mYW1pbHkiLHopO3V0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK18vMikuYXR0cigiZHkiLHN0KS50ZXh0KEtbaXRdKSx1dC5hdHRyKCJ5IixFK0wvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAodXQsTil9fWZ1bmN0aW9uIGYodixtLGIsRSxfLEwsTixCKXtjb25zdCBqPW0uYXBwZW5kKCJzd2l0Y2giKSx6PWouYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsTCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHYpLGEodixqLGIsRSxfLEwsTixCKSxwKHosTil9ZnVuY3Rpb24gcCh2LG0pe2Zvcihjb25zdCBiIGluIG0pYiBpbiBtJiZ2LmF0dHIoYixtW2JdKX1yZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIHYudGV4dFBsYWNlbWVudD09PSJmbyI/Zjp2LnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOmF9fSgpLE9VZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07ZnVuY3Rpb24gemp0KGksYSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9eXIodGhpcykscD1mLnRleHQoKS5zcGxpdCgvKFxzK3w8YnI+KS8pLnJldmVyc2UoKSx2LG09W10sYj0xLjEsRT1mLmF0dHIoInkiKSxfPXBhcnNlRmxvYXQoZi5hdHRyKCJkeSIpKSxMPWYudGV4dChudWxsKS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsRSkuYXR0cigiZHkiLF8rImVtIik7Zm9yKGxldCBOPTA7TjxwLmxlbmd0aDtOKyspdj1wW3AubGVuZ3RoLTEtTl0sbS5wdXNoKHYpLEwudGV4dChtLmpvaW4oIiAiKS50cmltKCkpLChMLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT5hfHx2PT09Ijxicj4iKSYmKG0ucG9wKCksTC50ZXh0KG0uam9pbigiICIpLnRyaW0oKSksdj09PSI8YnI+Ij9tPVsiIl06bT1bdl0sTD1mLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixFKS5hdHRyKCJkeSIsYisiZW0iKS50ZXh0KHYpKX0pfWNvbnN0IE5VZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PWYlQ1VlLTEsbT1pLmFwcGVuZCgiZyIpO2Euc2VjdGlvbj12LG0uYXR0cigiY2xhc3MiLChhLmNsYXNzP2EuY2xhc3MrIiAiOiIiKSsidGltZWxpbmUtbm9kZSAiKygic2VjdGlvbi0iK3YpKTtjb25zdCBiPW0uYXBwZW5kKCJnIiksRT1tLmFwcGVuZCgiZyIpLEw9RS5hcHBlbmQoInRleHQiKS50ZXh0KGEuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoemp0LGEud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksTj1wLmZvbnRTaXplJiZwLmZvbnRTaXplLnJlcGxhY2U/cC5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOnAuZm9udFNpemU7cmV0dXJuIGEuaGVpZ2h0PUwuaGVpZ2h0K04qMS4xKi41K2EucGFkZGluZyxhLmhlaWdodD1NYXRoLm1heChhLmhlaWdodCxhLm1heEhlaWdodCksYS53aWR0aD1hLndpZHRoKzIqYS5wYWRkaW5nLEUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS53aWR0aC8yKyIsICIrYS5wYWRkaW5nLzIrIikiKSxGVWUoYixhLHYpLGF9LFBVZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLG09cC5hcHBlbmQoInRleHQiKS50ZXh0KGEuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoemp0LGEud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksYj1mLmZvbnRTaXplJiZmLmZvbnRTaXplLnJlcGxhY2U/Zi5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOmYuZm9udFNpemU7cmV0dXJuIHAucmVtb3ZlKCksbS5oZWlnaHQrYioxLjEqLjUrYS5wYWRkaW5nfSxGVWU9ZnVuY3Rpb24oaSxhLGYpe2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrYS50eXBlKS5hdHRyKCJkIixgTTAgJHthLmhlaWdodC01fSB2JHstYS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Eud2lkdGgtMio1fSBxNSwwIDUsNSB2JHthLmhlaWdodC01fSBIMCBaYCksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK2YpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsYS5oZWlnaHQpLmF0dHIoIngyIixhLndpZHRoKS5hdHRyKCJ5MiIsYS5oZWlnaHQpfSxBVD17ZHJhd1JlY3Q6VkssZHJhd0NpcmNsZTpTVWUsZHJhd1NlY3Rpb246TFVlLGRyYXdUZXh0OlJqdCxkcmF3TGFiZWw6QVVlLGRyYXdUYXNrOk1VZSxkcmF3QmFja2dyb3VuZFJlY3Q6SVVlLGdldFRleHRPYmo6RFVlLGdldE5vdGVSZWN0OnpndCxpbml0R3JhcGhpY3M6T1VlLGRyYXdOb2RlOk5VZSxnZXRWaXJ0dWFsTm9kZUhlaWdodDpQVWV9LEJVZT1mdW5jdGlvbihpLGEsZixwKXt2YXIgWCxwdDtjb25zdCB2PUxlKCksbT12LmxlZnRNYXJnaW4/PzUwO1V0LmRlYnVnKCJ0aW1lbGluZSIscC5kYik7Y29uc3QgYj12LnNlY3VyaXR5TGV2ZWw7bGV0IEU7Yj09PSJzYW5kYm94IiYmKEU9eXIoIiNpIithKSk7Y29uc3QgTD15cihiPT09InNhbmRib3giP0Uubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrYSk7TC5hcHBlbmQoImciKTtjb25zdCBOPXAuZGIuZ2V0VGFza3MoKSxCPXAuZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtVdC5kZWJ1ZygidGFzayIsTiksQVQuaW5pdEdyYXBoaWNzKEwpO2NvbnN0IGo9cC5kYi5nZXRTZWN0aW9ucygpO1V0LmRlYnVnKCJzZWN0aW9ucyIsaik7bGV0IFI9MCx6PTAsSz0wLGl0PTAsc3Q9NTArbSx1dD01MDtpdD01MDtsZXQgYnQ9MCxtdD0hMDtqLmZvckVhY2goZnVuY3Rpb24oVSl7Y29uc3QgeHQ9e251bWJlcjpidCxkZXNjcjpVLHNlY3Rpb246YnQsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OlJ9LG50PUFULmdldFZpcnR1YWxOb2RlSGVpZ2h0KEwseHQsdik7VXQuZGVidWcoInNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLG50KSxSPU1hdGgubWF4KFIsbnQrMjApfSk7bGV0IHl0PTAsZHQ9MDtVdC5kZWJ1ZygidGFza3MubGVuZ3RoIixOLmxlbmd0aCk7Zm9yKGNvbnN0W1UseHRdb2YgTi5lbnRyaWVzKCkpe2NvbnN0IG50PXtudW1iZXI6VSxkZXNjcjp4dCxzZWN0aW9uOnh0LnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Onp9LE90PUFULmdldFZpcnR1YWxOb2RlSGVpZ2h0KEwsbnQsdik7VXQuZGVidWcoInRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLE90KSx6PU1hdGgubWF4KHosT3QrMjApLHl0PU1hdGgubWF4KHl0LHh0LmV2ZW50cy5sZW5ndGgpO2xldCBOdD0wO2ZvcihsZXQgcXQ9MDtxdDx4dC5ldmVudHMubGVuZ3RoO3F0Kyspe2NvbnN0IFo9e2Rlc2NyOnh0LmV2ZW50c1txdF0sc2VjdGlvbjp4dC5zZWN0aW9uLG51bWJlcjp4dC5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07TnQrPUFULmdldFZpcnR1YWxOb2RlSGVpZ2h0KEwsWix2KX1kdD1NYXRoLm1heChkdCxOdCl9VXQuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLFIpLFV0LmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3Iix6KSxqJiZqLmxlbmd0aD4wP2ouZm9yRWFjaChVPT57Y29uc3QgeHQ9Ti5maWx0ZXIocXQ9PnF0LnNlY3Rpb249PT1VKSxudD17bnVtYmVyOmJ0LGRlc2NyOlUsc2VjdGlvbjpidCx3aWR0aDoyMDAqTWF0aC5tYXgoeHQubGVuZ3RoLDEpLTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OlJ9O1V0LmRlYnVnKCJzZWN0aW9uTm9kZSIsbnQpO2NvbnN0IE90PUwuYXBwZW5kKCJnIiksTnQ9QVQuZHJhd05vZGUoT3QsbnQsYnQsdik7VXQuZGVidWcoInNlY3Rpb25Ob2RlIG91dHB1dCIsTnQpLE90LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N0fSwgJHtpdH0pYCksdXQrPVIrNTAseHQubGVuZ3RoPjAmJnFqdChMLHh0LGJ0LHN0LHV0LHosdix5dCxkdCxSLCExKSxzdCs9MjAwKk1hdGgubWF4KHh0Lmxlbmd0aCwxKSx1dD1pdCxidCsrfSk6KG10PSExLHFqdChMLE4sYnQsc3QsdXQseix2LHl0LGR0LFIsITApKTtjb25zdCBodD1MLm5vZGUoKS5nZXRCQm94KCk7VXQuZGVidWcoImJvdW5kcyIsaHQpLEImJkwuYXBwZW5kKCJ0ZXh0IikudGV4dChCKS5hdHRyKCJ4IixodC53aWR0aC8yLW0pLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDIwKSxLPW10P1IreisxNTA6eisxMDAsTC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG0pLmF0dHIoInkxIixLKS5hdHRyKCJ4MiIsaHQud2lkdGgrMyptKS5hdHRyKCJ5MiIsSykuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSxjVCh2b2lkIDAsTCwoKFg9di50aW1lbGluZSk9PW51bGw/dm9pZCAwOlgucGFkZGluZyk/PzUwLCgocHQ9di50aW1lbGluZSk9PW51bGw/dm9pZCAwOnB0LnVzZU1heFdpZHRoKT8/ITEpfSxxanQ9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFLF8sTCxOKXt2YXIgQjtmb3IoY29uc3QgaiBvZiBhKXtjb25zdCBSPXtkZXNjcjpqLnRhc2ssc2VjdGlvbjpmLG51bWJlcjpmLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDptfTtVdC5kZWJ1ZygidGFza05vZGUiLFIpO2NvbnN0IHo9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIiksaXQ9QVQuZHJhd05vZGUoeixSLGYsYikuaGVpZ2h0O2lmKFV0LmRlYnVnKCJ0YXNrSGVpZ2h0IGFmdGVyIGRyYXciLGl0KSx6LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3B9LCAke3Z9KWApLG09TWF0aC5tYXgobSxpdCksai5ldmVudHMpe2NvbnN0IHN0PWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpO2xldCB1dD1tO3YrPTEwMCx1dD11dCtSVWUoaSxqLmV2ZW50cyxmLHAsdixiKSx2LT0xMDAsc3QuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHArMTkwLzIpLmF0dHIoInkxIix2K20pLmF0dHIoIngyIixwKzE5MC8yKS5hdHRyKCJ5MiIsdittKyhOP206TCkrXysxMjApLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjUsNSIpfXA9cCsyMDAsTiYmISgoQj1iLnRpbWVsaW5lKSE9bnVsbCYmQi5kaXNhYmxlTXVsdGljb2xvcikmJmYrK312PXYtMTB9LFJVZT1mdW5jdGlvbihpLGEsZixwLHYsbSl7bGV0IGI9MDtjb25zdCBFPXY7dj12KzEwMDtmb3IoY29uc3QgXyBvZiBhKXtjb25zdCBMPXtkZXNjcjpfLHNlY3Rpb246ZixudW1iZXI6Zix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6NTB9O1V0LmRlYnVnKCJldmVudE5vZGUiLEwpO2NvbnN0IE49aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImV2ZW50V3JhcHBlciIpLGo9QVQuZHJhd05vZGUoTixMLGYsbSkuaGVpZ2h0O2I9YitqLE4uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7cH0sICR7dn0pYCksdj12KzEwK2p9cmV0dXJuIHY9RSxifSxqVWU9e3NldENvbmY6KCk9Pnt9LGRyYXc6QlVlfSwkVWU9aT0+e2xldCBhPSIiO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspaVsibGluZUNvbG9yIitmXT1pWyJsaW5lQ29sb3IiK2ZdfHxpWyJjU2NhbGVJbnYiK2ZdLEo3KGlbImxpbmVDb2xvciIrZl0pP2lbImxpbmVDb2xvciIrZl09YnMoaVsibGluZUNvbG9yIitmXSwyMCk6aVsibGluZUNvbG9yIitmXT1qcyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTtmb3IobGV0IGY9MDtmPGkuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXtjb25zdCBwPSIiKygxNy0zKmYpO2ErPWAKICAgIC5zZWN0aW9uLSR7Zi0xfSByZWN0LCAuc2VjdGlvbi0ke2YtMX0gcGF0aCwgLnNlY3Rpb24tJHtmLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtmLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtpWyJjU2NhbGUiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSB0ZXh0IHsKICAgICBmaWxsOiAke2lbImNTY2FsZUxhYmVsIitmXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7Zi0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtmLTF9ewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlIitmXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke2YtMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtwfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZUludiIrZl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5saW5lV3JhcHBlciBsaW5lewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfSA7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIGF9LHpVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6VFVlLHJlbmRlcmVyOmpVZSxwYXJzZXI6RVVlLHN0eWxlczppPT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAkeyRVZShpKX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHsKICAgIGZpbGw6ICR7aS5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuZXZlbnRXcmFwcGVyICB7CiAgIGZpbHRlcjogYnJpZ2h0bmVzcygxMjAlKTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBxZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihtdCx5dCxkdCxodCl7Zm9yKGR0PWR0fHx7fSxodD1tdC5sZW5ndGg7aHQtLTtkdFttdFtodF1dPXl0KTtyZXR1cm4gZHR9LGE9WzEsNF0sZj1bMSwxM10scD1bMSwxMl0sdj1bMSwxNV0sbT1bMSwxNl0sYj1bMSwyMF0sRT1bMSwxOV0sXz1bNiw3LDhdLEw9WzEsMjZdLE49WzEsMjRdLEI9WzEsMjVdLGo9WzYsNywxMV0sUj1bMSw2LDEzLDE1LDE2LDE5LDIyXSx6PVsxLDMzXSxLPVsxLDM0XSxpdD1bMSw2LDcsMTEsMTMsMTUsMTYsMTksMjJdLHN0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsTUlORE1BUDo4LGRvY3VtZW50Ojksc3RvcDoxMCxFT0Y6MTEsc3RhdGVtZW50OjEyLFNQQUNFTElTVDoxMyxub2RlOjE0LElDT046MTUsQ0xBU1M6MTYsbm9kZVdpdGhJZDoxNyxub2RlV2l0aG91dElkOjE4LE5PREVfRFNUQVJUOjE5LE5PREVfREVTQ1I6MjAsTk9ERV9ERU5EOjIxLE5PREVfSUQ6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlNQQUNFTElORSIsNzoiTkwiLDg6Ik1JTkRNQVAiLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE1OiJJQ09OIiwxNjoiQ0xBU1MiLDE5OiJOT0RFX0RTVEFSVCIsMjA6Ik5PREVfREVTQ1IiLDIxOiJOT0RFX0RFTkQiLDIyOiJOT0RFX0lEIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDFdLFs1LDJdLFs1LDJdLFs0LDJdLFs0LDNdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzksM10sWzksMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOCwzXSxbMTcsMV0sWzE3LDRdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHl0LGR0LGh0LHd0LFgscHQsVSl7dmFyIHh0PXB0Lmxlbmd0aC0xO3N3aXRjaChYKXtjYXNlIDY6Y2FzZSA3OnJldHVybiB3dDtjYXNlIDg6d3QuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5Ond0LmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOnd0LmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOnd0LmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxNTp3dC5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLHB0W3h0XS5pZCksd3QuYWRkTm9kZShwdFt4dC0xXS5sZW5ndGgscHRbeHRdLmlkLHB0W3h0XS5kZXNjcixwdFt4dF0udHlwZSk7YnJlYWs7Y2FzZSAxNjp3dC5nZXRMb2dnZXIoKS50cmFjZSgiSWNvbjogIixwdFt4dF0pLHd0LmRlY29yYXRlTm9kZSh7aWNvbjpwdFt4dF19KTticmVhaztjYXNlIDE3OmNhc2UgMjE6d3QuZGVjb3JhdGVOb2RlKHtjbGFzczpwdFt4dF19KTticmVhaztjYXNlIDE4Ond0LmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJU1QiKTticmVhaztjYXNlIDE5Ond0LmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLHB0W3h0XS5pZCksd3QuYWRkTm9kZSgwLHB0W3h0XS5pZCxwdFt4dF0uZGVzY3IscHRbeHRdLnR5cGUpO2JyZWFrO2Nhc2UgMjA6d3QuZGVjb3JhdGVOb2RlKHtpY29uOnB0W3h0XX0pO2JyZWFrO2Nhc2UgMjU6d3QuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLHB0W3h0LTJdKSx0aGlzLiQ9e2lkOnB0W3h0LTFdLGRlc2NyOnB0W3h0LTFdLHR5cGU6d3QuZ2V0VHlwZShwdFt4dC0yXSxwdFt4dF0pfTticmVhaztjYXNlIDI2OnRoaXMuJD17aWQ6cHRbeHRdLGRlc2NyOnB0W3h0XSx0eXBlOnd0Lm5vZGVUeXBlLkRFRkFVTFR9O2JyZWFrO2Nhc2UgMjc6d3QuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLHB0W3h0LTNdKSx0aGlzLiQ9e2lkOnB0W3h0LTNdLGRlc2NyOnB0W3h0LTFdLHR5cGU6d3QuZ2V0VHlwZShwdFt4dC0yXSxwdFt4dF0pfTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw4OmF9LHsxOlszXX0sezE6WzIsMV19LHs0OjYsNjpbMSw3XSw3OlsxLDhdLDg6YX0sezY6Ziw3OlsxLDEwXSw5OjksMTI6MTEsMTM6cCwxNDoxNCwxNTp2LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSxpKF8sWzIsM10pLHsxOlsyLDJdfSxpKF8sWzIsNF0pLGkoXyxbMiw1XSksezE6WzIsNl0sNjpmLDEyOjIxLDEzOnAsMTQ6MTQsMTU6diwxNjptLDE3OjE3LDE4OjE4LDE5OmIsMjI6RX0sezY6Ziw5OjIyLDEyOjExLDEzOnAsMTQ6MTQsMTU6diwxNjptLDE3OjE3LDE4OjE4LDE5OmIsMjI6RX0sezY6TCw3Ok4sMTA6MjMsMTE6Qn0saShqLFsyLDIyXSx7MTc6MTcsMTg6MTgsMTQ6MjcsMTU6WzEsMjhdLDE2OlsxLDI5XSwxOTpiLDIyOkV9KSxpKGosWzIsMThdKSxpKGosWzIsMTldKSxpKGosWzIsMjBdKSxpKGosWzIsMjFdKSxpKGosWzIsMjNdKSxpKGosWzIsMjRdKSxpKGosWzIsMjZdLHsxOTpbMSwzMF19KSx7MjA6WzEsMzFdfSx7NjpMLDc6TiwxMDozMiwxMTpCfSx7MTpbMiw3XSw2OmYsMTI6MjEsMTM6cCwxNDoxNCwxNTp2LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSxpKFIsWzIsMTRdLHs3OnosMTE6S30pLGkoaXQsWzIsOF0pLGkoaXQsWzIsOV0pLGkoaXQsWzIsMTBdKSxpKGosWzIsMTVdKSxpKGosWzIsMTZdKSxpKGosWzIsMTddKSx7MjA6WzEsMzVdfSx7MjE6WzEsMzZdfSxpKFIsWzIsMTNdLHs3OnosMTE6S30pLGkoaXQsWzIsMTFdKSxpKGl0LFsyLDEyXSksezIxOlsxLDM3XX0saShqLFsyLDI1XSksaShqLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oeXQsZHQpe2lmKGR0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoeXQpO2Vsc2V7dmFyIGh0PW5ldyBFcnJvcih5dCk7dGhyb3cgaHQuaGFzaD1kdCxodH19LHBhcnNlOmZ1bmN0aW9uKHl0KXt2YXIgZHQ9dGhpcyxodD1bMF0sd3Q9W10sWD1bbnVsbF0scHQ9W10sVT10aGlzLnRhYmxlLHh0PSIiLG50PTAsT3Q9MCxOdD0yLHF0PTEsQ3Q9cHQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksWj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFR0PXt5eTp7fX07Zm9yKHZhciBIdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEh0KSYmKFR0Lnl5W0h0XT10aGlzLnl5W0h0XSk7Wi5zZXRJbnB1dCh5dCxUdC55eSksVHQueXkubGV4ZXI9WixUdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgWi55eWxsb2M+InUiJiYoWi55eWxsb2M9e30pO3ZhciBJdD1aLnl5bGxvYztwdC5wdXNoKEl0KTt2YXIgRnQ9Wi5vcHRpb25zJiZaLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBUdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1UdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBrZSgpe3ZhciBPZTtyZXR1cm4gT2U9d3QucG9wKCl8fFoubGV4KCl8fHF0LHR5cGVvZiBPZSE9Im51bWJlciImJihPZSBpbnN0YW5jZW9mIEFycmF5JiYod3Q9T2UsT2U9d3QucG9wKCkpLE9lPWR0LnN5bWJvbHNfW09lXXx8T2UpLE9lfWZvcih2YXIgcG4sTWUsdmUsR2UsS2U9e30sd2UsX2UsJHQscmU7Oyl7aWYoTWU9aHRbaHQubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdP3ZlPXRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdOigocG49PT1udWxsfHx0eXBlb2YgcG4+InUiKSYmKHBuPWtlKCkpLHZlPVVbTWVdJiZVW01lXVtwbl0pLHR5cGVvZiB2ZT4idSJ8fCF2ZS5sZW5ndGh8fCF2ZVswXSl7dmFyIGllPSIiO3JlPVtdO2Zvcih3ZSBpbiBVW01lXSl0aGlzLnRlcm1pbmFsc19bd2VdJiZ3ZT5OdCYmcmUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3dlXSsiJyIpO1ouc2hvd1Bvc2l0aW9uP2llPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG50KzEpK2A6CmArWi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3JlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bcG5dfHxwbikrIiciOmllPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG50KzEpKyI6IFVuZXhwZWN0ZWQgIisocG49PXF0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3BuXXx8cG4pKyInIiksdGhpcy5wYXJzZUVycm9yKGllLHt0ZXh0OloubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3BuXXx8cG4sbGluZTpaLnl5bGluZW5vLGxvYzpJdCxleHBlY3RlZDpyZX0pfWlmKHZlWzBdaW5zdGFuY2VvZiBBcnJheSYmdmUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitNZSsiLCB0b2tlbjogIitwbik7c3dpdGNoKHZlWzBdKXtjYXNlIDE6aHQucHVzaChwbiksWC5wdXNoKFoueXl0ZXh0KSxwdC5wdXNoKFoueXlsbG9jKSxodC5wdXNoKHZlWzFdKSxwbj1udWxsLE90PVoueXlsZW5nLHh0PVoueXl0ZXh0LG50PVoueXlsaW5lbm8sSXQ9Wi55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKF9lPXRoaXMucHJvZHVjdGlvbnNfW3ZlWzFdXVsxXSxLZS4kPVhbWC5sZW5ndGgtX2VdLEtlLl8kPXtmaXJzdF9saW5lOnB0W3B0Lmxlbmd0aC0oX2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpwdFtwdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpwdFtwdC5sZW5ndGgtKF9lfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnB0W3B0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sRnQmJihLZS5fJC5yYW5nZT1bcHRbcHQubGVuZ3RoLShfZXx8MSldLnJhbmdlWzBdLHB0W3B0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEdlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShLZSxbeHQsT3QsbnQsVHQueXksdmVbMV0sWCxwdF0uY29uY2F0KEN0KSksdHlwZW9mIEdlPCJ1IilyZXR1cm4gR2U7X2UmJihodD1odC5zbGljZSgwLC0xKl9lKjIpLFg9WC5zbGljZSgwLC0xKl9lKSxwdD1wdC5zbGljZSgwLC0xKl9lKSksaHQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t2ZVsxXV1bMF0pLFgucHVzaChLZS4kKSxwdC5wdXNoKEtlLl8kKSwkdD1VW2h0W2h0Lmxlbmd0aC0yXV1baHRbaHQubGVuZ3RoLTFdXSxodC5wdXNoKCR0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sdXQ9ZnVuY3Rpb24oKXt2YXIgbXQ9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oZHQsaHQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoZHQsaHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGR0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oeXQsZHQpe3JldHVybiB0aGlzLnl5PWR0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD15dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXl0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz15dCx0aGlzLm1hdGNoZWQrPXl0O3ZhciBkdD15dC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGR0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx5dH0sdW5wdXQ6ZnVuY3Rpb24oeXQpe3ZhciBkdD15dC5sZW5ndGgsaHQ9eXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD15dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZHQpLHRoaXMub2Zmc2V0LT1kdDt2YXIgd3Q9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksaHQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1odC5sZW5ndGgtMSk7dmFyIFg9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmh0PyhodC5sZW5ndGg9PT13dC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3d0W3d0Lmxlbmd0aC1odC5sZW5ndGhdLmxlbmd0aC1odFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWR0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1hbMF0sWFswXSt0aGlzLnl5bGVuZy1kdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHl0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoeXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHl0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oeXQubGVuZ3RoPjIwPyIuLi4iOiIiKSt5dC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLm1hdGNoO3JldHVybiB5dC5sZW5ndGg8MjAmJih5dCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAteXQubGVuZ3RoKSksKHl0LnN1YnN0cigwLDIwKSsoeXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB5dD10aGlzLnBhc3RJbnB1dCgpLGR0PW5ldyBBcnJheSh5dC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB5dCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZHQrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHl0LGR0KXt2YXIgaHQsd3QsWDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoWD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihYLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHd0PXl0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx3dCYmKHRoaXMueXlsaW5lbm8rPXd0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnd0P3d0W3d0Lmxlbmd0aC0xXS5sZW5ndGgtd3Rbd3QubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4reXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9eXRbMF0sdGhpcy5tYXRjaCs9eXRbMF0sdGhpcy5tYXRjaGVzPXl0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHl0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz15dFswXSxodD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxkdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxodClyZXR1cm4gaHQ7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHB0IGluIFgpdGhpc1twdF09WFtwdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeXQsZHQsaHQsd3Q7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgWD10aGlzLl9jdXJyZW50UnVsZXMoKSxwdD0wO3B0PFgubGVuZ3RoO3B0KyspaWYoaHQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tYW3B0XV0pLGh0JiYoIWR0fHxodFswXS5sZW5ndGg+ZHRbMF0ubGVuZ3RoKSl7aWYoZHQ9aHQsd3Q9cHQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeXQ9dGhpcy50ZXN0X21hdGNoKGh0LFhbcHRdKSx5dCE9PSExKXJldHVybiB5dDtpZih0aGlzLl9iYWNrdHJhY2spe2R0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGR0Pyh5dD10aGlzLnRlc3RfbWF0Y2goZHQsWFt3dF0pLHl0IT09ITE/eXQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBkdD10aGlzLm5leHQoKTtyZXR1cm4gZHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGR0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBkdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBkdD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGR0KXtyZXR1cm4gZHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhkdHx8MCksZHQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1tkdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oZHQpe3RoaXMuYmVnaW4oZHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGR0LGh0LHd0LFgpe3N3aXRjaCh3dCl7Y2FzZSAwOnJldHVybiBkdC5nZXRMb2dnZXIoKS50cmFjZSgiRm91bmQgY29tbWVudCIsaHQueXl0ZXh0KSw2O2Nhc2UgMTpyZXR1cm4gODtjYXNlIDI6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNjtjYXNlIDQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTpkdC5nZXRMb2dnZXIoKS50cmFjZSgiQmVnaW4gaWNvbiIpLHRoaXMuYmVnaW4oIklDT04iKTticmVhaztjYXNlIDY6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJTkUiKSw2O2Nhc2UgNzpyZXR1cm4gNztjYXNlIDg6cmV0dXJuIDE1O2Nhc2UgOTpkdC5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIkV4cGxvZGluZyBub2RlIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTE6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDEyOnJldHVybiBkdC5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMzpyZXR1cm4gZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNDpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTg6cmV0dXJuIDEzO2Nhc2UgMTk6cmV0dXJuIDIyO2Nhc2UgMjA6cmV0dXJuIDExO2Nhc2UgMjE6dGhpcy5iZWdpbigiTlNUUjIiKTticmVhaztjYXNlIDIyOnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OmR0LmdldExvZ2dlcigpLnRyYWNlKCJTdGFydGluZyBOU1RSIiksdGhpcy5iZWdpbigiTlNUUiIpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLGh0Lnl5dGV4dCksIk5PREVfREVTQ1IiO2Nhc2UgMjY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxkdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSkiKSwiTk9ERV9ERU5EIjtjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjtjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kIC4uLiIsaHQueXl0ZXh0KSwiTk9ERV9ERU5EIjtjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGR0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2Nhc2UgMzI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxkdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjtjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGR0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2Nhc2UgMzU6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsaHQueXl0ZXh0KSwyMDtjYXNlIDM2OnJldHVybiBkdC5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLGh0Lnl5dGV4dCksMjB9fSxydWxlczpbL14oPzpccyolJS4qKS9pLC9eKD86bWluZG1hcFxiKS9pLC9eKD86Ojo6KS9pLC9eKD86LispL2ksL14oPzpcbikvaSwvXig/Ojo6aWNvblwoKS9pLC9eKD86W1xzXStbXG5dKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXlwpXSspL2ksL14oPzpcKSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoLSkvaSwvXig/OlwpXCkpL2ksL14oPzpcKSkvaSwvXig/OlwoXCgpL2ksL14oPzpce1x7KS9pLC9eKD86XCgpL2ksL14oPzpcWykvaSwvXig/Oltcc10rKS9pLC9eKD86W15cKFxbXG5cKVx7XH1dKykvaSwvXig/OiQpL2ksL14oPzpbIl1bYF0pL2ksL14oPzpbXmAiXSspL2ksL14oPzpbYF1bIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKykvaSwvXig/OlsiXSkvaSwvXig/OltcKV1cKSkvaSwvXig/OltcKV0pL2ksL14oPzpbXF1dKS9pLC9eKD86XH1cfSkvaSwvXig/OlwoLSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoXCgpL2ksL14oPzpcKCkvaSwvXig/OlteXClcXVwoXH1dKykvaSwvXig/Oi4rKD8hXChcKCkpL2ldLGNvbmRpdGlvbnM6e0NMQVNTOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElDT046e3J1bGVzOls4LDldLGluY2x1c2l2ZTohMX0sTlNUUjI6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxOU1RSOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzIxLDI0LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiw1LDYsNywxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBtdH0oKTtzdC5sZXhlcj11dDtmdW5jdGlvbiBidCgpe3RoaXMueXk9e319cmV0dXJuIGJ0LnByb3RvdHlwZT1zdCxzdC5QYXJzZXI9YnQsbmV3IGJ0fSgpO3FndC5wYXJzZXI9cWd0O2NvbnN0IHFVZT1xZ3QsVVA9aT0+RGQoaSxMZSgpKTtsZXQgc3Y9W10sSGp0PTAsSGd0PXt9O2NvbnN0IEhVZT0oKT0+e3N2PVtdLEhqdD0wLEhndD17fX0sR1VlPWZ1bmN0aW9uKGkpe2ZvcihsZXQgYT1zdi5sZW5ndGgtMTthPj0wO2EtLSlpZihzdlthXS5sZXZlbDxpKXJldHVybiBzdlthXTtyZXR1cm4gbnVsbH0sVlVlPSgpPT5zdi5sZW5ndGg+MD9zdlswXTpudWxsLFVVZT0oaSxhLGYscCk9PntVdC5pbmZvKCJhZGROb2RlIixpLGEsZixwKTtjb25zdCB2PUxlKCksbT17aWQ6SGp0Kyssbm9kZUlkOlVQKGEpLGxldmVsOmksZGVzY3I6VVAoZiksdHlwZTpwLGNoaWxkcmVuOltdLHdpZHRoOkxlKCkubWluZG1hcC5tYXhOb2RlV2lkdGh9O3N3aXRjaChtLnR5cGUpe2Nhc2UgVnUuUk9VTkRFRF9SRUNUOm0ucGFkZGluZz0yKnYubWluZG1hcC5wYWRkaW5nO2JyZWFrO2Nhc2UgVnUuUkVDVDptLnBhZGRpbmc9Mip2Lm1pbmRtYXAucGFkZGluZzticmVhaztjYXNlIFZ1LkhFWEFHT046bS5wYWRkaW5nPTIqdi5taW5kbWFwLnBhZGRpbmc7YnJlYWs7ZGVmYXVsdDptLnBhZGRpbmc9di5taW5kbWFwLnBhZGRpbmd9Y29uc3QgYj1HVWUoaSk7aWYoYiliLmNoaWxkcmVuLnB1c2gobSksc3YucHVzaChtKTtlbHNlIGlmKHN2Lmxlbmd0aD09PTApc3YucHVzaChtKTtlbHNle2xldCBFPW5ldyBFcnJvcignVGhlcmUgY2FuIGJlIG9ubHkgb25lIHJvb3QuIE5vIHBhcmVudCBjb3VsZCBiZSBmb3VuZCBmb3IgKCInK20uZGVzY3IrJyIpJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJicmFuY2ggIituYW1lLHRva2VuOiJicmFuY2ggIituYW1lLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsnImNoZWNrb3V0ICcrbmFtZSsnIiddfSxFfX0sVnU9e0RFRkFVTFQ6MCxOT19CT1JERVI6MCxST1VOREVEX1JFQ1Q6MSxSRUNUOjIsQ0lSQ0xFOjMsQ0xPVUQ6NCxCQU5HOjUsSEVYQUdPTjo2fSxXVWU9KGksYSk9Pntzd2l0Y2goVXQuZGVidWcoIkluIGdldCB0eXBlIixpLGEpLGkpe2Nhc2UiWyI6cmV0dXJuIFZ1LlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gYT09PSIpIj9WdS5ST1VOREVEX1JFQ1Q6VnUuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIFZ1LkNJUkNMRTtjYXNlIikiOnJldHVybiBWdS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gVnUuQkFORztjYXNlInt7IjpyZXR1cm4gVnUuSEVYQUdPTjtkZWZhdWx0OnJldHVybiBWdS5ERUZBVUxUfX0sR2p0PShpLGEpPT57SGd0W2ldPWF9LEtVZT1pPT57Y29uc3QgYT1zdltzdi5sZW5ndGgtMV07aSYmaS5pY29uJiYoYS5pY29uPVVQKGkuaWNvbikpLGkmJmkuY2xhc3MmJihhLmNsYXNzPVVQKGkuY2xhc3MpKX0sTFQ9aT0+e3N3aXRjaChpKXtjYXNlIFZ1LkRFRkFVTFQ6cmV0dXJuIm5vLWJvcmRlciI7Y2FzZSBWdS5SRUNUOnJldHVybiJyZWN0IjtjYXNlIFZ1LlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIFZ1LkNJUkNMRTpyZXR1cm4iY2lyY2xlIjtjYXNlIFZ1LkNMT1VEOnJldHVybiJjbG91ZCI7Y2FzZSBWdS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIFZ1LkhFWEFHT046cmV0dXJuImhleGdvbiI7ZGVmYXVsdDpyZXR1cm4ibm8tYm9yZGVyIn19O2xldCBWanQ7Y29uc3QgWVVlPWk9PntWanQ9aX0sWFVlPSgpPT5VdCxRVWU9aT0+c3ZbaV0sR2d0PWk9PkhndFtpXSxaVWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFkZE5vZGU6VVVlLGNsZWFyOkhVZSxkZWNvcmF0ZU5vZGU6S1VlLGdldEVsZW1lbnRCeUlkOkdndCxnZXRMb2dnZXI6WFVlLGdldE1pbmRtYXA6VlVlLGdldE5vZGVCeUlkOlFVZSxnZXRUeXBlOldVZSxub2RlVHlwZTpWdSxnZXQgcGFyc2VFcnJvcigpe3JldHVybiBWanR9LHNhbml0aXplVGV4dDpVUCxzZXRFbGVtZW50Rm9ySWQ6R2p0LHNldEVycm9ySGFuZGxlcjpZVWUsdHlwZTJTdHI6TFR9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVWp0PTEyLEpVZT1mdW5jdGlvbihpLGEsZil7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitMVChhLnR5cGUpKS5hdHRyKCJkIixgTTAgJHthLmhlaWdodC01fSB2JHstYS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Eud2lkdGgtMio1fSBxNSwwIDUsNSB2JHthLmhlaWdodC01fSBIMCBaYCksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK2YpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsYS5oZWlnaHQpLmF0dHIoIngyIixhLndpZHRoKS5hdHRyKCJ5MiIsYS5oZWlnaHQpfSx0V2U9ZnVuY3Rpb24oaSxhKXtpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK0xUKGEudHlwZSkpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLmF0dHIoIndpZHRoIixhLndpZHRoKX0sZVdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLndpZHRoLHA9YS5oZWlnaHQsdj0uMTUqZixtPS4yNSpmLGI9LjM1KmYsRT0uMipmO2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrTFQoYS50eXBlKSkuYXR0cigiZCIsYE0wIDAgYSR7dn0sJHt2fSAwIDAsMSAke2YqLjI1fSwkey0xKmYqLjF9CiAgICAgIGEke2J9LCR7Yn0gMSAwLDEgJHtmKi40fSwkey0xKmYqLjF9CiAgICAgIGEke219LCR7bX0gMSAwLDEgJHtmKi4zNX0sJHsxKmYqLjJ9CgogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7ZiouMTV9LCR7MSpwKi4zNX0KICAgICAgYSR7RX0sJHtFfSAxIDAsMSAkey0xKmYqLjE1fSwkezEqcCouNjV9CgogICAgICBhJHttfSwke3Z9IDEgMCwxICR7LTEqZiouMjV9LCR7ZiouMTV9CiAgICAgIGEke2J9LCR7Yn0gMSAwLDEgJHstMSpmKi41fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDEgJHstMSpmKi4yNX0sJHstMSpmKi4xNX0KCiAgICAgIGEke3Z9LCR7dn0gMSAwLDEgJHstMSpmKi4xfSwkey0xKnAqLjM1fQogICAgICBhJHtFfSwke0V9IDEgMCwxICR7ZiouMX0sJHstMSpwKi42NX0KCiAgICBIMCBWMCBaYCl9LG5XZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS53aWR0aCxwPWEuaGVpZ2h0LHY9LjE1KmY7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitMVChhLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHt2fSwke3Z9IDEgMCwwICR7ZiouMjV9LCR7LTEqcCouMX0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtmKi4yNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZiouMjV9LCR7MSpwKi4xfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjE1fSwkezEqcCouMzN9CiAgICAgIGEke3YqLjh9LCR7diouOH0gMSAwLDAgMCwkezEqcCouMzR9CiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4xNX0sJHsxKnAqLjMzfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmYqLjI1fSwke3AqLjE1fQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZiouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmYqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4yNX0sJHstMSpwKi4xNX0KCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4xfSwkey0xKnAqLjMzfQogICAgICBhJHt2Ki44fSwke3YqLjh9IDEgMCwwIDAsJHstMSpwKi4zNH0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjF9LCR7LTEqcCouMzN9CgogICAgSDAgVjAgWmApfSxyV2U9ZnVuY3Rpb24oaSxhKXtpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrTFQoYS50eXBlKSkuYXR0cigiciIsYS53aWR0aC8yKX07ZnVuY3Rpb24gaVdlKGksYSxmLHAsdil7cmV0dXJuIGkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixwLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbS54KyIsIittLnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh2LndpZHRoLWEpLzIrIiwgIitmKyIpIil9Y29uc3Qgc1dlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLmhlaWdodCx2PWYvNCxtPWEud2lkdGgtYS5wYWRkaW5nKzIqdixiPVt7eDp2LHk6MH0se3g6bS12LHk6MH0se3g6bSx5Oi1mLzJ9LHt4Om0tdix5Oi1mfSx7eDp2LHk6LWZ9LHt4OjAseTotZi8yfV07aVdlKGksbSxmLGIsYSl9LGFXZT1mdW5jdGlvbihpLGEpe2kuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrTFQoYS50eXBlKSkuYXR0cigiaGVpZ2h0IixhLmhlaWdodCkuYXR0cigicngiLGEucGFkZGluZykuYXR0cigicnkiLGEucGFkZGluZykuYXR0cigid2lkdGgiLGEud2lkdGgpfSxXanQ9e2RyYXdOb2RlOmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9cC5odG1sTGFiZWxzLG09ZiUoVWp0LTEpLGI9aS5hcHBlbmQoImciKTthLnNlY3Rpb249bTtsZXQgRT0ic2VjdGlvbi0iK207bTwwJiYoRSs9IiBzZWN0aW9uLXJvb3QiKSxiLmF0dHIoImNsYXNzIiwoYS5jbGFzcz9hLmNsYXNzKyIgIjoiIikrIm1pbmRtYXAtbm9kZSAiK0UpO2NvbnN0IF89Yi5hcHBlbmQoImciKSxMPWIuYXBwZW5kKCJnIiksTj1hLmRlc2NyLnJlcGxhY2UoLyg8YnJcLyo+KS9nLGAKYCk7ZEsoTCxOLHt1c2VIdG1sTGFiZWxzOnYsd2lkdGg6YS53aWR0aCxjbGFzc2VzOiJtaW5kbWFwLW5vZGUtbGFiZWwifSksdnx8TC5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKTtjb25zdCBCPUwubm9kZSgpLmdldEJCb3goKSxqPXAuZm9udFNpemUucmVwbGFjZT9wLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6cC5mb250U2l6ZTtpZihhLmhlaWdodD1CLmhlaWdodCtqKjEuMSouNSthLnBhZGRpbmcsYS53aWR0aD1CLndpZHRoKzIqYS5wYWRkaW5nLGEuaWNvbilpZihhLnR5cGU9PT1WdS5DSVJDTEUpYS5oZWlnaHQrPTUwLGEud2lkdGgrPTUwLGIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigiaGVpZ2h0IiwiNTBweCIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjsiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwiaWNvbi1jb250YWluZXIiKS5hcHBlbmQoImkiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi0iK20rIiAiK2EuaWNvbiksTC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLndpZHRoLzIrIiwgIisoYS5oZWlnaHQvMi0xLjUqYS5wYWRkaW5nKSsiKSIpO2Vsc2V7YS53aWR0aCs9NTA7Y29uc3QgUj1hLmhlaWdodDthLmhlaWdodD1NYXRoLm1heChSLDYwKTtjb25zdCB6PU1hdGguYWJzKGEuaGVpZ2h0LVIpO2IuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCI2MHB4IikuYXR0cigiaGVpZ2h0IixhLmhlaWdodCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDoiK3ovMisicHg7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIittKyIgIithLmljb24pLEwuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKDI1K2Eud2lkdGgvMikrIiwgIisoei8yK2EucGFkZGluZy8yKSsiKSIpfWVsc2UgaWYodil7Y29uc3QgUj0oYS53aWR0aC1CLndpZHRoKS8yLHo9KGEuaGVpZ2h0LUIuaGVpZ2h0KS8yO0wuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUisiLCAiK3orIikiKX1lbHNle2NvbnN0IFI9YS53aWR0aC8yLHo9YS5wYWRkaW5nLzI7TC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitSKyIsICIreisiKSIpfXN3aXRjaChhLnR5cGUpe2Nhc2UgVnUuREVGQVVMVDpKVWUoXyxhLG0pO2JyZWFrO2Nhc2UgVnUuUk9VTkRFRF9SRUNUOmFXZShfLGEpO2JyZWFrO2Nhc2UgVnUuUkVDVDp0V2UoXyxhKTticmVhaztjYXNlIFZ1LkNJUkNMRTpfLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Eud2lkdGgvMisiLCAiKyArYS5oZWlnaHQvMisiKSIpLHJXZShfLGEpO2JyZWFrO2Nhc2UgVnUuQ0xPVUQ6ZVdlKF8sYSk7YnJlYWs7Y2FzZSBWdS5CQU5HOm5XZShfLGEpO2JyZWFrO2Nhc2UgVnUuSEVYQUdPTjpzV2UoXyxhKTticmVha31yZXR1cm4gR2p0KGEuaWQsYiksYS5oZWlnaHR9LHBvc2l0aW9uTm9kZTpmdW5jdGlvbihpKXtjb25zdCBhPUdndChpLmlkKSxmPWkueHx8MCxwPWkueXx8MDthLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2YrIiwiK3ArIikiKX0sZHJhd0VkZ2U6ZnVuY3Rpb24oYSxmLHAsdixtKXtjb25zdCBiPW0lKFVqdC0xKSxFPXAueCtwLndpZHRoLzIsXz1wLnkrcC5oZWlnaHQvMixMPWYueCtmLndpZHRoLzIsTj1mLnkrZi5oZWlnaHQvMixCPUw+RT9FK01hdGguYWJzKEUtTCkvMjpFLU1hdGguYWJzKEUtTCkvMixqPU4+Xz9fK01hdGguYWJzKF8tTikvMjpfLU1hdGguYWJzKF8tTikvMixSPUw+RT9NYXRoLmFicyhFLUIpLzIrRTotTWF0aC5hYnMoRS1CKS8yK0Usej1OPl8/TWF0aC5hYnMoXy1qKS8yK186LU1hdGguYWJzKF8taikvMitfO2EuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5kaXJlY3Rpb249PT0iVEIifHxwLmRpcmVjdGlvbj09PSJCVCI/YE0ke0V9LCR7X30gUSR7RX0sJHt6fSAke0J9LCR7an0gVCR7TH0sJHtOfWA6YE0ke0V9LCR7X30gUSR7Un0sJHtffSAke0J9LCR7an0gVCR7TH0sJHtOfWApLmF0dHIoImNsYXNzIiwiZWRnZSBzZWN0aW9uLWVkZ2UtIitiKyIgZWRnZS1kZXB0aC0iK3YpfX07dmFyIEtqdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZih5KXtyZXR1cm4gZj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihnKXtyZXR1cm4gdHlwZW9mIGd9OmZ1bmN0aW9uKGcpe3JldHVybiBnJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZnLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZnIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZ30sZih5KX1mdW5jdGlvbiBwKHksZyl7aWYoISh5IGluc3RhbmNlb2YgZykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdih5LGcpe2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgVD1nW3hdO1QuZW51bWVyYWJsZT1ULmVudW1lcmFibGV8fCExLFQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBUJiYoVC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksVC5rZXksVCl9fWZ1bmN0aW9uIG0oeSxnLHgpe3JldHVybiBnJiZ2KHkucHJvdG90eXBlLGcpLHgmJnYoeSx4KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx5fWZ1bmN0aW9uIGIoeSxnLHgpe3JldHVybiBnIGluIHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHksZyx7dmFsdWU6eCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnlbZ109eCx5fWZ1bmN0aW9uIEUoeSxnKXtyZXR1cm4gXyh5KXx8TCh5LGcpfHxOKHksZyl8fGooKX1mdW5jdGlvbiBfKHkpe2lmKEFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIHl9ZnVuY3Rpb24gTCh5LGcpe3ZhciB4PXk9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmeVtTeW1ib2wuaXRlcmF0b3JdfHx5WyJAQGl0ZXJhdG9yIl07aWYoeCE9bnVsbCl7dmFyIFQ9W10sQT0hMCxEPSExLE8sJDt0cnl7Zm9yKHg9eC5jYWxsKHkpOyEoQT0oTz14Lm5leHQoKSkuZG9uZSkmJihULnB1c2goTy52YWx1ZSksIShnJiZULmxlbmd0aD09PWcpKTtBPSEwKTt9Y2F0Y2gocSl7RD0hMCwkPXF9ZmluYWxseXt0cnl7IUEmJngucmV0dXJuIT1udWxsJiZ4LnJldHVybigpfWZpbmFsbHl7aWYoRCl0aHJvdyAkfX1yZXR1cm4gVH19ZnVuY3Rpb24gTih5LGcpe2lmKHkpe2lmKHR5cGVvZiB5PT0ic3RyaW5nIilyZXR1cm4gQih5LGcpO3ZhciB4PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh5KS5zbGljZSg4LC0xKTtpZih4PT09Ik9iamVjdCImJnkuY29uc3RydWN0b3ImJih4PXkuY29uc3RydWN0b3IubmFtZSkseD09PSJNYXAifHx4PT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20oeSk7aWYoeD09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh4KSlyZXR1cm4gQih5LGcpfX1mdW5jdGlvbiBCKHksZyl7KGc9PW51bGx8fGc+eS5sZW5ndGgpJiYoZz15Lmxlbmd0aCk7Zm9yKHZhciB4PTAsVD1uZXcgQXJyYXkoZyk7eDxnO3grKylUW3hdPXlbeF07cmV0dXJuIFR9ZnVuY3Rpb24gaigpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgUj10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyx6PVI/Ui5uYXZpZ2F0b3I6bnVsbDtSJiZSLmRvY3VtZW50O3ZhciBLPWYoIiIpLGl0PWYoe30pLHN0PWYoZnVuY3Rpb24oKXt9KSx1dD10eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyJ1bmRlZmluZWQiOmYoSFRNTEVsZW1lbnQpLGJ0PWZ1bmN0aW9uKGcpe3JldHVybiBnJiZnLmluc3RhbmNlU3RyaW5nJiZ5dChnLmluc3RhbmNlU3RyaW5nKT9nLmluc3RhbmNlU3RyaW5nKCk6bnVsbH0sbXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PUt9LHl0PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09c3R9LGR0PWZ1bmN0aW9uKGcpe3JldHVybiF4dChnKSYmKEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShnKTpnIT1udWxsJiZnIGluc3RhbmNlb2YgQXJyYXkpfSxodD1mdW5jdGlvbihnKXtyZXR1cm4gZyE9bnVsbCYmZihnKT09PWl0JiYhZHQoZykmJmcuY29uc3RydWN0b3I9PT1PYmplY3R9LHd0PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09aXR9LFg9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PT1mKDEpJiYhaXNOYU4oZyl9LHB0PWZ1bmN0aW9uKGcpe3JldHVybiBYKGcpJiZNYXRoLmZsb29yKGcpPT09Z30sVT1mdW5jdGlvbihnKXtpZih1dCE9PSJ1bmRlZmluZWQiKXJldHVybiBnIT1udWxsJiZnIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LHh0PWZ1bmN0aW9uKGcpe3JldHVybiBudChnKXx8T3QoZyl9LG50PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJjb2xsZWN0aW9uIiYmZy5fcHJpdmF0ZS5zaW5nbGV9LE90PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJjb2xsZWN0aW9uIiYmIWcuX3ByaXZhdGUuc2luZ2xlfSxOdD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0iY29yZSJ9LHF0PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJzdHlsZXNoZWV0In0sQ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGJ0KGcpPT09ImV2ZW50In0sWj1mdW5jdGlvbihnKXtyZXR1cm4gZz09bnVsbD8hMDohIShnPT09IiJ8fGcubWF0Y2goL15ccyskLykpfSxUdD1mdW5jdGlvbihnKXtyZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8hMTpnIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LEh0PWZ1bmN0aW9uKGcpe3JldHVybiBodChnKSYmWChnLngxKSYmWChnLngyKSYmWChnLnkxKSYmWChnLnkyKX0sSXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHd0KGcpJiZ5dChnLnRoZW4pfSxGdD1mdW5jdGlvbigpe3JldHVybiB6JiZ6LnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LGtlPWZ1bmN0aW9uKGcseCl7eHx8KHg9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiJ1bmRlZmluZWQiO2Zvcih2YXIgRD1bXSxPPTA7Tzxhcmd1bWVudHMubGVuZ3RoO08rKylELnB1c2goYXJndW1lbnRzW09dKTtyZXR1cm4gRC5qb2luKCIkIil9KTt2YXIgVD1mdW5jdGlvbiBBKCl7dmFyIEQ9dGhpcyxPPWFyZ3VtZW50cywkLHE9eC5hcHBseShELE8pLFM9QS5jYWNoZTtyZXR1cm4oJD1TW3FdKXx8KCQ9U1txXT1nLmFwcGx5KEQsTykpLCR9O3JldHVybiBULmNhY2hlPXt9LFR9LHBuPWtlKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihnKXtyZXR1cm4iLSIrZy50b0xvd2VyQ2FzZSgpfSl9KSxNZT1rZShmdW5jdGlvbih5KXtyZXR1cm4geS5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnRvVXBwZXJDYXNlKCl9KX0pLHZlPWtlKGZ1bmN0aW9uKHksZyl7cmV0dXJuIHkrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyaW5nKDEpfSxmdW5jdGlvbih5LGcpe3JldHVybiB5KyIkIitnfSksR2U9ZnVuY3Rpb24oZyl7cmV0dXJuIFooZyk/ZzpnLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyaW5nKDEpfSxLZT0iKD86Wy0rXT8oPzooPzpcXGQrfFxcZCpcXC5cXGQrKSg/OltFZV1bKy1dP1xcZCspPykpIix3ZT0icmdiW2FdP1xcKCgiK0tlKyJbJV0/KVxccyosXFxzKigiK0tlKyJbJV0/KVxccyosXFxzKigiK0tlKyJbJV0/KSg/OlxccyosXFxzKigiK0tlKyIpKT9cXCkiLF9lPSJyZ2JbYV0/XFwoKD86IitLZSsiWyVdPylcXHMqLFxccyooPzoiK0tlKyJbJV0/KVxccyosXFxzKig/OiIrS2UrIlslXT8pKD86XFxzKixcXHMqKD86IitLZSsiKSk/XFwpIiwkdD0iaHNsW2FdP1xcKCgiK0tlKyIpXFxzKixcXHMqKCIrS2UrIlslXSlcXHMqLFxccyooIitLZSsiWyVdKSg/OlxccyosXFxzKigiK0tlKyIpKT9cXCkiLHJlPSJoc2xbYV0/XFwoKD86IitLZSsiKVxccyosXFxzKig/OiIrS2UrIlslXSlcXHMqLFxccyooPzoiK0tlKyJbJV0pKD86XFxzKixcXHMqKD86IitLZSsiKSk/XFwpIixpZT0iXFwjWzAtOWEtZkEtRl17M30iLE9lPSJcXCNbMC05YS1mQS1GXXs2fSIsb2U9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZzx4Py0xOmc+eD8xOjB9LE5lPWZ1bmN0aW9uKGcseCl7cmV0dXJuLTEqb2UoZyx4KX0sbWU9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih5KXtmb3IodmFyIGc9YXJndW1lbnRzLHg9MTt4PGcubGVuZ3RoO3grKyl7dmFyIFQ9Z1t4XTtpZihUIT1udWxsKWZvcih2YXIgQT1PYmplY3Qua2V5cyhUKSxEPTA7RDxBLmxlbmd0aDtEKyspe3ZhciBPPUFbRF07eVtPXT1UW09dfX1yZXR1cm4geX0sY249ZnVuY3Rpb24oZyl7aWYoISghKGcubGVuZ3RoPT09NHx8Zy5sZW5ndGg9PT03KXx8Z1swXSE9PSIjIikpe3ZhciB4PWcubGVuZ3RoPT09NCxULEEsRCxPPTE2O3JldHVybiB4PyhUPXBhcnNlSW50KGdbMV0rZ1sxXSxPKSxBPXBhcnNlSW50KGdbMl0rZ1syXSxPKSxEPXBhcnNlSW50KGdbM10rZ1szXSxPKSk6KFQ9cGFyc2VJbnQoZ1sxXStnWzJdLE8pLEE9cGFyc2VJbnQoZ1szXStnWzRdLE8pLEQ9cGFyc2VJbnQoZ1s1XStnWzZdLE8pKSxbVCxBLERdfX0sbGk9ZnVuY3Rpb24oZyl7dmFyIHgsVCxBLEQsTywkLHEsUztmdW5jdGlvbiBHKGx0LGZ0LEF0KXtyZXR1cm4gQXQ8MCYmKEF0Kz0xKSxBdD4xJiYoQXQtPTEpLEF0PDEvNj9sdCsoZnQtbHQpKjYqQXQ6QXQ8MS8yP2Z0OkF0PDIvMz9sdCsoZnQtbHQpKigyLzMtQXQpKjY6bHR9dmFyIFc9bmV3IFJlZ0V4cCgiXiIrJHQrIiQiKS5leGVjKGcpO2lmKFcpe2lmKFQ9cGFyc2VJbnQoV1sxXSksVDwwP1Q9KDM2MC0gLTEqVCUzNjApJTM2MDpUPjM2MCYmKFQ9VCUzNjApLFQvPTM2MCxBPXBhcnNlRmxvYXQoV1syXSksQTwwfHxBPjEwMHx8KEE9QS8xMDAsRD1wYXJzZUZsb2F0KFdbM10pLEQ8MHx8RD4xMDApfHwoRD1ELzEwMCxPPVdbNF0sTyE9PXZvaWQgMCYmKE89cGFyc2VGbG9hdChPKSxPPDB8fE8+MSkpKXJldHVybjtpZihBPT09MCkkPXE9Uz1NYXRoLnJvdW5kKEQqMjU1KTtlbHNle3ZhciBldD1EPC41P0QqKDErQSk6RCtBLUQqQSxhdD0yKkQtZXQ7JD1NYXRoLnJvdW5kKDI1NSpHKGF0LGV0LFQrMS8zKSkscT1NYXRoLnJvdW5kKDI1NSpHKGF0LGV0LFQpKSxTPU1hdGgucm91bmQoMjU1KkcoYXQsZXQsVC0xLzMpKX14PVskLHEsUyxPXX1yZXR1cm4geH0seWE9ZnVuY3Rpb24oZyl7dmFyIHgsVD1uZXcgUmVnRXhwKCJeIit3ZSsiJCIpLmV4ZWMoZyk7aWYoVCl7eD1bXTtmb3IodmFyIEE9W10sRD0xO0Q8PTM7RCsrKXt2YXIgTz1UW0RdO2lmKE9bTy5sZW5ndGgtMV09PT0iJSImJihBW0RdPSEwKSxPPXBhcnNlRmxvYXQoTyksQVtEXSYmKE89Ty8xMDAqMjU1KSxPPDB8fE8+MjU1KXJldHVybjt4LnB1c2goTWF0aC5mbG9vcihPKSl9dmFyICQ9QVsxXXx8QVsyXXx8QVszXSxxPUFbMV0mJkFbMl0mJkFbM107aWYoJCYmIXEpcmV0dXJuO3ZhciBTPVRbNF07aWYoUyE9PXZvaWQgMCl7aWYoUz1wYXJzZUZsb2F0KFMpLFM8MHx8Uz4xKXJldHVybjt4LnB1c2goUyl9fXJldHVybiB4fSxkYT1mdW5jdGlvbihnKXtyZXR1cm4gZHNbZy50b0xvd2VyQ2FzZSgpXX0sT289ZnVuY3Rpb24oZyl7cmV0dXJuKGR0KGcpP2c6bnVsbCl8fGRhKGcpfHxjbihnKXx8eWEoZyl8fGxpKGcpfSxkcz17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmV5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX0sRHI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWcubWFwLFQ9Zy5rZXlzLEE9VC5sZW5ndGgsRD0wO0Q8QTtEKyspe3ZhciBPPVRbRF07aWYoaHQoTykpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIHNldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7RDxULmxlbmd0aC0xPyh4W09dPT1udWxsJiYoeFtPXT17fSkseD14W09dKTp4W09dPWcudmFsdWV9fSxucj1mdW5jdGlvbihnKXtmb3IodmFyIHg9Zy5tYXAsVD1nLmtleXMsQT1ULmxlbmd0aCxEPTA7RDxBO0QrKyl7dmFyIE89VFtEXTtpZihodChPKSl0aHJvdyBFcnJvcigiVHJpZWQgdG8gZ2V0IG1hcCB3aXRoIG9iamVjdCBrZXkiKTtpZih4PXhbT10seD09bnVsbClyZXR1cm4geH1yZXR1cm4geH07ZnVuY3Rpb24gZGkoeSl7dmFyIGc9dHlwZW9mIHk7cmV0dXJuIHkhPW51bGwmJihnPT0ib2JqZWN0Inx8Zz09ImZ1bmN0aW9uIil9dmFyIEVlPWRpLFluPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZDA8InUiP2QwOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIEhlKHksZyl7cmV0dXJuIGc9e2V4cG9ydHM6e319LHkoZyxnLmV4cG9ydHMpLGcuZXhwb3J0c312YXIgVGk9dHlwZW9mIFluPT0ib2JqZWN0IiYmWW4mJlluLk9iamVjdD09PU9iamVjdCYmWW4sZ249VGksa3M9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixxYT1nbnx8a3N8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksTGE9cWEsR3M9ZnVuY3Rpb24oKXtyZXR1cm4gTGEuRGF0ZS5ub3coKX0sTm89R3MsdnM9L1xzLztmdW5jdGlvbiBudSh5KXtmb3IodmFyIGc9eS5sZW5ndGg7Zy0tJiZ2cy50ZXN0KHkuY2hhckF0KGcpKTspO3JldHVybiBnfXZhciAkcz1udSxMdT0vXlxzKy87ZnVuY3Rpb24gZm0oeSl7cmV0dXJuIHkmJnkuc2xpY2UoMCwkcyh5KSsxKS5yZXBsYWNlKEx1LCIiKX12YXIgYXY9Zm0sVXU9TGEuU3ltYm9sLFpsPVV1LFBhPU9iamVjdC5wcm90b3R5cGUsQWw9UGEuaGFzT3duUHJvcGVydHksdWE9UGEudG9TdHJpbmcsYmM9Wmw/WmwudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIENjKHkpe3ZhciBnPUFsLmNhbGwoeSxiYykseD15W2JjXTt0cnl7eVtiY109dm9pZCAwO3ZhciBUPSEwfWNhdGNoe312YXIgQT11YS5jYWxsKHkpO3JldHVybiBUJiYoZz95W2JjXT14OmRlbGV0ZSB5W2JjXSksQX12YXIgZ2E9Q2MsTWE9T2JqZWN0LnByb3RvdHlwZSxIYT1NYS50b1N0cmluZztmdW5jdGlvbiBMbCh5KXtyZXR1cm4gSGEuY2FsbCh5KX12YXIgX2M9TGwsb3Y9IltvYmplY3QgTnVsbF0iLEpsPSJbb2JqZWN0IFVuZGVmaW5lZF0iLFoxPVpsP1psLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBGZCh5KXtyZXR1cm4geT09bnVsbD95PT09dm9pZCAwP0psOm92OloxJiZaMSBpbiBPYmplY3QoeSk/Z2EoeSk6X2MoeSl9dmFyIEoxPUZkO2Z1bmN0aW9uIEJkKHkpe3JldHVybiB5IT1udWxsJiZ0eXBlb2YgeT09Im9iamVjdCJ9dmFyIEUwPUJkLEJpPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIG9uKHkpe3JldHVybiB0eXBlb2YgeT09InN5bWJvbCJ8fEUwKHkpJiZKMSh5KT09Qml9dmFyIGtyPW9uLEVpPTAvMCxKbz0vXlstK10weFswLTlhLWZdKyQvaSx2Yz0vXjBiWzAxXSskL2ksdGY9L14wb1swLTddKyQvaSxPYz1wYXJzZUludDtmdW5jdGlvbiBlZih5KXtpZih0eXBlb2YgeT09Im51bWJlciIpcmV0dXJuIHk7aWYoa3IoeSkpcmV0dXJuIEVpO2lmKEVlKHkpKXt2YXIgZz10eXBlb2YgeS52YWx1ZU9mPT0iZnVuY3Rpb24iP3kudmFsdWVPZigpOnk7eT1FZShnKT9nKyIiOmd9aWYodHlwZW9mIHkhPSJzdHJpbmciKXJldHVybiB5PT09MD95Oit5O3k9YXYoeSk7dmFyIHg9dmMudGVzdCh5KTtyZXR1cm4geHx8dGYudGVzdCh5KT9PYyh5LnNsaWNlKDIpLHg/Mjo4KTpKby50ZXN0KHkpP0VpOit5fXZhciBuZj1lZixYaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsRXM9TWF0aC5tYXgseGE9TWF0aC5taW47ZnVuY3Rpb24geGkoeSxnLHgpe3ZhciBULEEsRCxPLCQscSxTPTAsRz0hMSxXPSExLGV0PSEwO2lmKHR5cGVvZiB5IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoWGkpO2c9bmYoZyl8fDAsRWUoeCkmJihHPSEheC5sZWFkaW5nLFc9Im1heFdhaXQiaW4geCxEPVc/RXMobmYoeC5tYXhXYWl0KXx8MCxnKTpELGV0PSJ0cmFpbGluZyJpbiB4PyEheC50cmFpbGluZzpldCk7ZnVuY3Rpb24gYXQoS3Qpe3ZhciB6dD1ULGVlPUE7cmV0dXJuIFQ9QT12b2lkIDAsUz1LdCxPPXkuYXBwbHkoZWUsenQpLE99ZnVuY3Rpb24gbHQoS3Qpe3JldHVybiBTPUt0LCQ9c2V0VGltZW91dChrdCxnKSxHP2F0KEt0KTpPfWZ1bmN0aW9uIGZ0KEt0KXt2YXIgenQ9S3QtcSxlZT1LdC1TLFZ0PWctenQ7cmV0dXJuIFc/eGEoVnQsRC1lZSk6VnR9ZnVuY3Rpb24gQXQoS3Qpe3ZhciB6dD1LdC1xLGVlPUt0LVM7cmV0dXJuIHE9PT12b2lkIDB8fHp0Pj1nfHx6dDwwfHxXJiZlZT49RH1mdW5jdGlvbiBrdCgpe3ZhciBLdD1ObygpO2lmKEF0KEt0KSlyZXR1cm4gTXQoS3QpOyQ9c2V0VGltZW91dChrdCxmdChLdCkpfWZ1bmN0aW9uIE10KEt0KXtyZXR1cm4gJD12b2lkIDAsZXQmJlQ/YXQoS3QpOihUPUE9dm9pZCAwLE8pfWZ1bmN0aW9uIER0KCl7JCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KCQpLFM9MCxUPXE9QT0kPXZvaWQgMH1mdW5jdGlvbiBqdCgpe3JldHVybiAkPT09dm9pZCAwP086TXQoTm8oKSl9ZnVuY3Rpb24gWnQoKXt2YXIgS3Q9Tm8oKSx6dD1BdChLdCk7aWYoVD1hcmd1bWVudHMsQT10aGlzLHE9S3QsenQpe2lmKCQ9PT12b2lkIDApcmV0dXJuIGx0KHEpO2lmKFcpcmV0dXJuIGNsZWFyVGltZW91dCgkKSwkPXNldFRpbWVvdXQoa3QsZyksYXQocSl9cmV0dXJuICQ9PT12b2lkIDAmJigkPXNldFRpbWVvdXQoa3QsZykpLE99cmV0dXJuIFp0LmNhbmNlbD1EdCxadC5mbHVzaD1qdCxadH12YXIgV2M9eGksQ2U9Uj9SLnBlcmZvcm1hbmNlOm51bGwsZ3A9Q2UmJkNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBDZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sQmU9ZnVuY3Rpb24oKXtpZihSKXtpZihSLnJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeSl7Ui5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeSl9O2lmKFIubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSh5KX07aWYoUi53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHkpe1Iud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfTtpZihSLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfX1yZXR1cm4gZnVuY3Rpb24oeSl7eSYmc2V0VGltZW91dChmdW5jdGlvbigpe3koZ3AoKSl9LDFlMy82MCl9fSgpLEZmPWZ1bmN0aW9uKGcpe3JldHVybiBCZShnKX0sZGc9Z3AsZG09OTI2MSxwaz02NTU5OSx4Mz01MzgxLE1sPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZG0sVD14LEE7QT1nLm5leHQoKSwhQS5kb25lOylUPVQqcGsrQS52YWx1ZXwwO3JldHVybiBUfSxUMD1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZG07cmV0dXJuIHgqcGsrZ3wwfSxjdj1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06eDM7cmV0dXJuKHg8PDUpK3grZ3wwfSxGNT1mdW5jdGlvbihnLHgpe3JldHVybiBnKjIwOTcxNTIreH0samI9ZnVuY3Rpb24oZyl7cmV0dXJuIGdbMF0qMjA5NzE1MitnWzFdfSxCNT1mdW5jdGlvbihnLHgpe3JldHVybltUMChnWzBdLHhbMF0pLGN2KGdbMV0seFsxXSldfSxsMT1mdW5jdGlvbihnLHgpe3ZhciBUPXt2YWx1ZTowLGRvbmU6ITF9LEE9MCxEPWcubGVuZ3RoLE89e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gQTxEP1QudmFsdWU9Z1tBKytdOlQuZG9uZT0hMCxUfX07cmV0dXJuIE1sKE8seCl9LHRkPWZ1bmN0aW9uKGcseCl7dmFyIFQ9e3ZhbHVlOjAsZG9uZTohMX0sQT0wLEQ9Zy5sZW5ndGgsTz17bmV4dDpmdW5jdGlvbigpe3JldHVybiBBPEQ/VC52YWx1ZT1nLmNoYXJDb2RlQXQoQSsrKTpULmRvbmU9ITAsVH19O3JldHVybiBNbChPLHgpfSxlZD1mdW5jdGlvbigpe3JldHVybiBSNShhcmd1bWVudHMpfSxSNT1mdW5jdGlvbihnKXtmb3IodmFyIHgsVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgQT1nW1RdO1Q9PT0wP3g9dGQoQSk6eD10ZChBLHgpfXJldHVybiB4fSx1dj0hMCxqNT1jb25zb2xlLndhcm4hPW51bGwscHA9Y29uc29sZS50cmFjZSE9bnVsbCwkNT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUnx8OTAwNzE5OTI1NDc0MDk5MSxrMz1mdW5jdGlvbigpe3JldHVybiEwfSxnbT1mdW5jdGlvbigpe3JldHVybiExfSxnZz1mdW5jdGlvbigpe3JldHVybiAwfSx3TD1mdW5jdGlvbigpe30sYmw9ZnVuY3Rpb24oZyl7dGhyb3cgbmV3IEVycm9yKGcpfSxXUD1mdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXV2PSEhZztlbHNlIHJldHVybiB1dn0sU2M9ZnVuY3Rpb24oZyl7V1AoKSYmKGo1P2NvbnNvbGUud2FybihnKTooY29uc29sZS5sb2coZykscHAmJmNvbnNvbGUudHJhY2UoKSkpfSxRSz1mdW5jdGlvbihnKXtyZXR1cm4gbWUoe30sZyl9LCRiPWZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsP2c6ZHQoZyk/Zy5zbGljZSgpOmh0KGcpP1FLKGcpOmd9LFpLPWZ1bmN0aW9uKGcpe3JldHVybiBnLnNsaWNlKCl9LElUPWZ1bmN0aW9uKGcseCl7Zm9yKHg9Zz0iIjtnKys8MzY7eCs9Zyo1MSY1Mj8oZ14xNT84Xk1hdGgucmFuZG9tKCkqKGdeMjA/MTY6NCk6NCkudG9TdHJpbmcoMTYpOiItIik7cmV0dXJuIHh9LEpLPXt9LEtQPWZ1bmN0aW9uKCl7cmV0dXJuIEpLfSxCZj1mdW5jdGlvbihnKXt2YXIgeD1PYmplY3Qua2V5cyhnKTtyZXR1cm4gZnVuY3Rpb24oVCl7Zm9yKHZhciBBPXt9LEQ9MDtEPHgubGVuZ3RoO0QrKyl7dmFyIE89eFtEXSwkPVQ9PW51bGw/dm9pZCAwOlRbT107QVtPXT0kPT09dm9pZCAwP2dbT106JH1yZXR1cm4gQX19LHBtPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9Zy5sZW5ndGgtMTtBPj0wJiYhKGdbQV09PT14JiYoZy5zcGxpY2UoQSwxKSxUKSk7QS0tKTt9LG1MPWZ1bmN0aW9uKGcpe2cuc3BsaWNlKDAsZy5sZW5ndGgpfSxZUD1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXt2YXIgQT14W1RdO2cucHVzaChBKX19LGJwPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gVCYmKHg9dmUoVCx4KSksZ1t4XX0sYm09ZnVuY3Rpb24oZyx4LFQsQSl7VCYmKHg9dmUoVCx4KSksZ1t4XT1BfSx0WT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoKXtwKHRoaXMseSksdGhpcy5fb2JqPXt9fXJldHVybiBtKHksW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxUKXtyZXR1cm4gdGhpcy5fb2JqW3hdPVQsdGhpc319LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XT12b2lkIDAsdGhpc319LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj17fX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XSE9PXZvaWQgMH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XX19XSkseX0oKSx6Yj10eXBlb2YgTWFwPCJ1Ij9NYXA6dFksZVk9InVuZGVmaW5lZCIsblk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe2lmKHAodGhpcyx5KSx0aGlzLl9vYmo9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnNpemU9MCxnIT1udWxsKXt2YXIgeDtnLmluc3RhbmNlU3RyaW5nIT1udWxsJiZnLmluc3RhbmNlU3RyaW5nKCk9PT10aGlzLmluc3RhbmNlU3RyaW5nKCk/eD1nLnRvQXJyYXkoKTp4PWc7Zm9yKHZhciBUPTA7VDx4Lmxlbmd0aDtUKyspdGhpcy5hZGQoeFtUXSl9fXJldHVybiBtKHksW3trZXk6Imluc3RhbmNlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzZXQifX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD10aGlzLl9vYmo7VFt4XSE9PTEmJihUW3hdPTEsdGhpcy5zaXplKyspfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD10aGlzLl9vYmo7VFt4XT09PTEmJihUW3hdPTAsdGhpcy5zaXplLS0pfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF09PT0xfX0se2tleToidG9BcnJheSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgeD10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9vYmopLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4geC5oYXMoVCl9KX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2goeCxUKX19XSkseX0oKSx6NT0odHlwZW9mIFNldD4idSI/InVuZGVmaW5lZCI6ZihTZXQpKSE9PWVZP1NldDpuWSxEVD1mdW5jdGlvbihnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMDtpZihnPT09dm9pZCAwfHx4PT09dm9pZCAwfHwhTnQoZykpe2JsKCJBbiBlbGVtZW50IG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlIGFuZCBwYXJhbWV0ZXJzIHNldCIpO3JldHVybn12YXIgQT14Lmdyb3VwO2lmKEE9PW51bGwmJih4LmRhdGEmJnguZGF0YS5zb3VyY2UhPW51bGwmJnguZGF0YS50YXJnZXQhPW51bGw/QT0iZWRnZXMiOkE9Im5vZGVzIiksQSE9PSJub2RlcyImJkEhPT0iZWRnZXMiKXtibCgiQW4gZWxlbWVudCBtdXN0IGJlIG9mIHR5cGUgYG5vZGVzYCBvciBgZWRnZXNgOyB5b3Ugc3BlY2lmaWVkIGAiK0ErImAiKTtyZXR1cm59dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXM7dmFyIEQ9dGhpcy5fcHJpdmF0ZT17Y3k6ZyxzaW5nbGU6ITAsZGF0YTp4LmRhdGF8fHt9LHBvc2l0aW9uOngucG9zaXRpb258fHt4OjAseTowfSxhdXRvV2lkdGg6dm9pZCAwLGF1dG9IZWlnaHQ6dm9pZCAwLGF1dG9QYWRkaW5nOnZvaWQgMCxjb21wb3VuZEJvdW5kc0NsZWFuOiExLGxpc3RlbmVyczpbXSxncm91cDpBLHN0eWxlOnt9LHJzdHlsZTp7fSxzdHlsZUN4dHM6W10sc3R5bGVLZXlzOnt9LHJlbW92ZWQ6ITAsc2VsZWN0ZWQ6ISF4LnNlbGVjdGVkLHNlbGVjdGFibGU6eC5zZWxlY3RhYmxlPT09dm9pZCAwPyEwOiEheC5zZWxlY3RhYmxlLGxvY2tlZDohIXgubG9ja2VkLGdyYWJiZWQ6ITEsZ3JhYmJhYmxlOnguZ3JhYmJhYmxlPT09dm9pZCAwPyEwOiEheC5ncmFiYmFibGUscGFubmFibGU6eC5wYW5uYWJsZT09PXZvaWQgMD9BPT09ImVkZ2VzIjohIXgucGFubmFibGUsYWN0aXZlOiExLGNsYXNzZXM6bmV3IHo1LGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0scnNjcmF0Y2g6e30sc2NyYXRjaDp4LnNjcmF0Y2h8fHt9LGVkZ2VzOltdLGNoaWxkcmVuOltdLHBhcmVudDp4LnBhcmVudCYmeC5wYXJlbnQuaXNOb2RlKCk/eC5wYXJlbnQ6bnVsbCx0cmF2ZXJzYWxDYWNoZTp7fSxiYWNrZ3JvdW5kaW5nOiExLGJiQ2FjaGU6bnVsbCxiYkNhY2hlU2hpZnQ6e3g6MCx5OjB9LGJvZHlCb3VuZHM6bnVsbCxvdmVybGF5Qm91bmRzOm51bGwsbGFiZWxCb3VuZHM6e2FsbDpudWxsLHNvdXJjZTpudWxsLHRhcmdldDpudWxsLG1haW46bnVsbH0sYXJyb3dCb3VuZHM6e3NvdXJjZTpudWxsLHRhcmdldDpudWxsLCJtaWQtc291cmNlIjpudWxsLCJtaWQtdGFyZ2V0IjpudWxsfX07aWYoRC5wb3NpdGlvbi54PT1udWxsJiYoRC5wb3NpdGlvbi54PTApLEQucG9zaXRpb24ueT09bnVsbCYmKEQucG9zaXRpb24ueT0wKSx4LnJlbmRlcmVkUG9zaXRpb24pe3ZhciBPPXgucmVuZGVyZWRQb3NpdGlvbiwkPWcucGFuKCkscT1nLnpvb20oKTtELnBvc2l0aW9uPXt4OihPLngtJC54KS9xLHk6KE8ueS0kLnkpL3F9fXZhciBTPVtdO2R0KHguY2xhc3Nlcyk/Uz14LmNsYXNzZXM6bXQoeC5jbGFzc2VzKSYmKFM9eC5jbGFzc2VzLnNwbGl0KC9ccysvKSk7Zm9yKHZhciBHPTAsVz1TLmxlbmd0aDtHPFc7RysrKXt2YXIgZXQ9U1tHXTshZXR8fGV0PT09IiJ8fEQuY2xhc3Nlcy5hZGQoZXQpfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBhdD14LnN0eWxlfHx4LmNzczthdCYmKFNjKCJTZXR0aW5nIGEgYHN0eWxlYCBieXBhc3MgYXQgZWxlbWVudCBjcmVhdGlvbiBzaG91bGQgYmUgZG9uZSBvbmx5IHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuICBUcnkgdG8gdXNlIHRoZSBzdHlsZXNoZWV0IGluc3RlYWQuIiksdGhpcy5zdHlsZShhdCkpLChUPT09dm9pZCAwfHxUKSYmdGhpcy5yZXN0b3JlKCl9LFhQPWZ1bmN0aW9uKGcpe3JldHVybiBnPXtiZnM6Zy5iZnN8fCFnLmRmcyxkZnM6Zy5kZnN8fCFnLmJmc30sZnVuY3Rpb24oVCxBLEQpe3ZhciBPO2h0KFQpJiYheHQoVCkmJihPPVQsVD1PLnJvb3RzfHxPLnJvb3QsQT1PLnZpc2l0LEQ9Ty5kaXJlY3RlZCksRD1hcmd1bWVudHMubGVuZ3RoPT09MiYmIXl0KEEpP0E6RCxBPXl0KEEpP0E6ZnVuY3Rpb24oKXt9O2Zvcih2YXIgJD10aGlzLl9wcml2YXRlLmN5LHE9VD1tdChUKT90aGlzLmZpbHRlcihUKTpULFM9W10sRz1bXSxXPXt9LGV0PXt9LGF0PXt9LGx0PTAsZnQsQXQ9dGhpcy5ieUdyb3VwKCksa3Q9QXQubm9kZXMsTXQ9QXQuZWRnZXMsRHQ9MDtEdDxxLmxlbmd0aDtEdCsrKXt2YXIganQ9cVtEdF0sWnQ9anQuaWQoKTtqdC5pc05vZGUoKSYmKFMudW5zaGlmdChqdCksZy5iZnMmJihhdFtadF09ITAsRy5wdXNoKGp0KSksZXRbWnRdPTApfWZvcih2YXIgS3Q9ZnVuY3Rpb24oKXt2YXIgUGU9Zy5iZnM/Uy5zaGlmdCgpOlMucG9wKCkscGU9UGUuaWQoKTtpZihnLmRmcyl7aWYoYXRbcGVdKXJldHVybiJjb250aW51ZSI7YXRbcGVdPSEwLEcucHVzaChQZSl9dmFyIGJuPWV0W3BlXSx6ZT1XW3BlXSxWZT16ZSE9bnVsbD96ZS5zb3VyY2UoKTpudWxsLEVuPXplIT1udWxsP3plLnRhcmdldCgpOm51bGwsRG49emU9PW51bGw/dm9pZCAwOlBlLnNhbWUoVmUpP0VuWzBdOlZlWzBdLEtuPXZvaWQgMDtpZihLbj1BKFBlLHplLERuLGx0KyssYm4pLEtuPT09ITApcmV0dXJuIGZ0PVBlLCJicmVhayI7aWYoS249PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgU249UGUuY29ubmVjdGVkRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24odHIpe3JldHVybighRHx8dHIuc291cmNlKCkuc2FtZShQZSkpJiZNdC5oYXModHIpfSksV249MDtXbjxTbi5sZW5ndGg7V24rKyl7dmFyIHJyPVNuW1duXSx2cj1yci5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbih0cil7cmV0dXJuIXRyLnNhbWUoUGUpJiZrdC5oYXModHIpfSksdXI9dnIuaWQoKTt2ci5sZW5ndGghPT0wJiYhYXRbdXJdJiYodnI9dnJbMF0sUy5wdXNoKHZyKSxnLmJmcyYmKGF0W3VyXT0hMCxHLnB1c2godnIpKSxXW3VyXT1ycixldFt1cl09ZXRbcGVdKzEpfX07Uy5sZW5ndGghPT0wOyl7dmFyIHp0PUt0KCk7aWYoenQhPT0iY29udGludWUiJiZ6dD09PSJicmVhayIpYnJlYWt9Zm9yKHZhciBlZT0kLmNvbGxlY3Rpb24oKSxWdD0wO1Z0PEcubGVuZ3RoO1Z0Kyspe3ZhciBmZT1HW1Z0XSxnZT1XW2ZlLmlkKCldO2dlIT1udWxsJiZlZS5wdXNoKGdlKSxlZS5wdXNoKGZlKX1yZXR1cm57cGF0aDokLmNvbGxlY3Rpb24oZWUpLGZvdW5kOiQuY29sbGVjdGlvbihmdCl9fX0sYms9e2JyZWFkdGhGaXJzdFNlYXJjaDpYUCh7YmZzOiEwfSksZGVwdGhGaXJzdFNlYXJjaDpYUCh7ZGZzOiEwfSl9O2JrLmJmcz1iay5icmVhZHRoRmlyc3RTZWFyY2gsYmsuZGZzPWJrLmRlcHRoRmlyc3RTZWFyY2g7dmFyIHJZPUhlKGZ1bmN0aW9uKHksZyl7KGZ1bmN0aW9uKCl7dmFyIHgsVCxBLEQsTywkLHEsUyxHLFcsZXQsYXQsbHQsZnQsQXQ7QT1NYXRoLmZsb29yLFc9TWF0aC5taW4sVD1mdW5jdGlvbihrdCxNdCl7cmV0dXJuIGt0PE10Py0xOmt0Pk10PzE6MH0sRz1mdW5jdGlvbihrdCxNdCxEdCxqdCxadCl7dmFyIEt0O2lmKER0PT1udWxsJiYoRHQ9MCksWnQ9PW51bGwmJihadD1UKSxEdDwwKXRocm93IG5ldyBFcnJvcigibG8gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtmb3IoanQ9PW51bGwmJihqdD1rdC5sZW5ndGgpO0R0PGp0OylLdD1BKChEdCtqdCkvMiksWnQoTXQsa3RbS3RdKTwwP2p0PUt0OkR0PUt0KzE7cmV0dXJuW10uc3BsaWNlLmFwcGx5KGt0LFtEdCxEdC1EdF0uY29uY2F0KE10KSksTXR9LCQ9ZnVuY3Rpb24oa3QsTXQsRHQpe3JldHVybiBEdD09bnVsbCYmKER0PVQpLGt0LnB1c2goTXQpLGZ0KGt0LDAsa3QubGVuZ3RoLTEsRHQpfSxPPWZ1bmN0aW9uKGt0LE10KXt2YXIgRHQsanQ7cmV0dXJuIE10PT1udWxsJiYoTXQ9VCksRHQ9a3QucG9wKCksa3QubGVuZ3RoPyhqdD1rdFswXSxrdFswXT1EdCxBdChrdCwwLE10KSk6anQ9RHQsanR9LFM9ZnVuY3Rpb24oa3QsTXQsRHQpe3ZhciBqdDtyZXR1cm4gRHQ9PW51bGwmJihEdD1UKSxqdD1rdFswXSxrdFswXT1NdCxBdChrdCwwLER0KSxqdH0scT1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0O3JldHVybiBEdD09bnVsbCYmKER0PVQpLGt0Lmxlbmd0aCYmRHQoa3RbMF0sTXQpPDAmJihqdD1ba3RbMF0sTXRdLE10PWp0WzBdLGt0WzBdPWp0WzFdLEF0KGt0LDAsRHQpKSxNdH0sRD1mdW5jdGlvbihrdCxNdCl7dmFyIER0LGp0LFp0LEt0LHp0LGVlO2ZvcihNdD09bnVsbCYmKE10PVQpLEt0PWZ1bmN0aW9uKCl7ZWU9W107Zm9yKHZhciBWdD0wLGZlPUEoa3QubGVuZ3RoLzIpOzA8PWZlP1Z0PGZlOlZ0PmZlOzA8PWZlP1Z0Kys6VnQtLSllZS5wdXNoKFZ0KTtyZXR1cm4gZWV9LmFwcGx5KHRoaXMpLnJldmVyc2UoKSx6dD1bXSxqdD0wLFp0PUt0Lmxlbmd0aDtqdDxadDtqdCsrKUR0PUt0W2p0XSx6dC5wdXNoKEF0KGt0LER0LE10KSk7cmV0dXJuIHp0fSxsdD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0O2lmKER0PT1udWxsJiYoRHQ9VCksanQ9a3QuaW5kZXhPZihNdCksanQhPT0tMSlyZXR1cm4gZnQoa3QsMCxqdCxEdCksQXQoa3QsanQsRHQpfSxldD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0LFp0LEt0LHp0LGVlO2lmKER0PT1udWxsJiYoRHQ9VCksWnQ9a3Quc2xpY2UoMCxNdCksIVp0Lmxlbmd0aClyZXR1cm4gWnQ7Zm9yKEQoWnQsRHQpLGVlPWt0LnNsaWNlKE10KSxLdD0wLHp0PWVlLmxlbmd0aDtLdDx6dDtLdCsrKWp0PWVlW0t0XSxxKFp0LGp0LER0KTtyZXR1cm4gWnQuc29ydChEdCkucmV2ZXJzZSgpfSxhdD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0LFp0LEt0LHp0LGVlLFZ0LGZlLGdlLG5lO2lmKER0PT1udWxsJiYoRHQ9VCksTXQqMTA8PWt0Lmxlbmd0aCl7aWYoS3Q9a3Quc2xpY2UoMCxNdCkuc29ydChEdCksIUt0Lmxlbmd0aClyZXR1cm4gS3Q7Zm9yKFp0PUt0W0t0Lmxlbmd0aC0xXSxmZT1rdC5zbGljZShNdCksenQ9MCxWdD1mZS5sZW5ndGg7enQ8VnQ7enQrKylqdD1mZVt6dF0sRHQoanQsWnQpPDAmJihHKEt0LGp0LDAsbnVsbCxEdCksS3QucG9wKCksWnQ9S3RbS3QubGVuZ3RoLTFdKTtyZXR1cm4gS3R9Zm9yKEQoa3QsRHQpLG5lPVtdLGVlPTAsZ2U9VyhNdCxrdC5sZW5ndGgpOzA8PWdlP2VlPGdlOmVlPmdlOzA8PWdlPysrZWU6LS1lZSluZS5wdXNoKE8oa3QsRHQpKTtyZXR1cm4gbmV9LGZ0PWZ1bmN0aW9uKGt0LE10LER0LGp0KXt2YXIgWnQsS3QsenQ7Zm9yKGp0PT1udWxsJiYoanQ9VCksWnQ9a3RbRHRdO0R0Pk10Oyl7aWYoenQ9RHQtMT4+MSxLdD1rdFt6dF0sanQoWnQsS3QpPDApe2t0W0R0XT1LdCxEdD16dDtjb250aW51ZX1icmVha31yZXR1cm4ga3RbRHRdPVp0fSxBdD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0LFp0LEt0LHp0LGVlO2ZvcihEdD09bnVsbCYmKER0PVQpLFp0PWt0Lmxlbmd0aCxlZT1NdCxLdD1rdFtNdF0sanQ9MipNdCsxO2p0PFp0Oyl6dD1qdCsxLHp0PFp0JiYhKER0KGt0W2p0XSxrdFt6dF0pPDApJiYoanQ9enQpLGt0W010XT1rdFtqdF0sTXQ9anQsanQ9MipNdCsxO3JldHVybiBrdFtNdF09S3QsZnQoa3QsZWUsTXQsRHQpfSx4PWZ1bmN0aW9uKCl7a3QucHVzaD0kLGt0LnBvcD1PLGt0LnJlcGxhY2U9UyxrdC5wdXNocG9wPXEsa3QuaGVhcGlmeT1ELGt0LnVwZGF0ZUl0ZW09bHQsa3Qubmxhcmdlc3Q9ZXQsa3QubnNtYWxsZXN0PWF0O2Z1bmN0aW9uIGt0KE10KXt0aGlzLmNtcD1NdD8/VCx0aGlzLm5vZGVzPVtdfXJldHVybiBrdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihNdCl7cmV0dXJuICQodGhpcy5ub2RlcyxNdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sa3QucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKE10KXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKE10KSE9PS0xfSxrdC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihNdCl7cmV0dXJuIFModGhpcy5ub2RlcyxNdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKE10KXtyZXR1cm4gcSh0aGlzLm5vZGVzLE10LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gRCh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oTXQpe3JldHVybiBsdCh0aGlzLm5vZGVzLE10LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LGt0LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LGt0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxrdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTXQ7cmV0dXJuIE10PW5ldyBrdCxNdC5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLE10fSxrdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxrdC5wcm90b3R5cGUuaW5zZXJ0PWt0LnByb3RvdHlwZS5wdXNoLGt0LnByb3RvdHlwZS50b3A9a3QucHJvdG90eXBlLnBlZWssa3QucHJvdG90eXBlLmZyb250PWt0LnByb3RvdHlwZS5wZWVrLGt0LnByb3RvdHlwZS5oYXM9a3QucHJvdG90eXBlLmNvbnRhaW5zLGt0LnByb3RvdHlwZS5jb3B5PWt0LnByb3RvdHlwZS5jbG9uZSxrdH0oKSxmdW5jdGlvbihrdCxNdCl7cmV0dXJuIHkuZXhwb3J0cz1NdCgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KX0pLmNhbGwoWW4pfSksdms9clksaVk9QmYoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksc1k9e2RpamtzdHJhOmZ1bmN0aW9uKGcpe2lmKCFodChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSx3ZWlnaHQ6eFsxXSxkaXJlY3RlZDp4WzJdfX12YXIgVD1pWShnKSxBPVQucm9vdCxEPVQud2VpZ2h0LE89VC5kaXJlY3RlZCwkPXRoaXMscT1ELFM9bXQoQSk/dGhpcy5maWx0ZXIoQSlbMF06QVswXSxHPXt9LFc9e30sZXQ9e30sYXQ9dGhpcy5ieUdyb3VwKCksbHQ9YXQubm9kZXMsZnQ9YXQuZWRnZXM7ZnQudW5tZXJnZUJ5KGZ1bmN0aW9uKGJuKXtyZXR1cm4gYm4uaXNMb29wKCl9KTtmb3IodmFyIEF0PWZ1bmN0aW9uKHplKXtyZXR1cm4gR1t6ZS5pZCgpXX0sa3Q9ZnVuY3Rpb24oemUsVmUpe0dbemUuaWQoKV09VmUsTXQudXBkYXRlSXRlbSh6ZSl9LE10PW5ldyB2ayhmdW5jdGlvbihibix6ZSl7cmV0dXJuIEF0KGJuKS1BdCh6ZSl9KSxEdD0wO0R0PGx0Lmxlbmd0aDtEdCsrKXt2YXIganQ9bHRbRHRdO0dbanQuaWQoKV09anQuc2FtZShTKT8wOjEvMCxNdC5wdXNoKGp0KX1mb3IodmFyIFp0PWZ1bmN0aW9uKHplLFZlKXtmb3IodmFyIEVuPShPP3plLmVkZ2VzVG8oVmUpOnplLmVkZ2VzV2l0aChWZSkpLmludGVyc2VjdChmdCksRG49MS8wLEtuLFNuPTA7U248RW4ubGVuZ3RoO1NuKyspe3ZhciBXbj1FbltTbl0scnI9cShXbik7KHJyPERufHwhS24pJiYoRG49cnIsS249V24pfXJldHVybntlZGdlOktuLGRpc3Q6RG59fTtNdC5zaXplKCk+MDspe3ZhciBLdD1NdC5wb3AoKSx6dD1BdChLdCksZWU9S3QuaWQoKTtpZihldFtlZV09enQsenQhPT0xLzApZm9yKHZhciBWdD1LdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QobHQpLGZlPTA7ZmU8VnQubGVuZ3RoO2ZlKyspe3ZhciBnZT1WdFtmZV0sbmU9Z2UuaWQoKSxQZT1adChLdCxnZSkscGU9enQrUGUuZGlzdDtwZTxBdChnZSkmJihrdChnZSxwZSksV1tuZV09e25vZGU6S3QsZWRnZTpQZS5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKHplKXt2YXIgVmU9bXQoemUpP2x0LmZpbHRlcih6ZSlbMF06emVbMF07cmV0dXJuIGV0W1ZlLmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oemUpe3ZhciBWZT1tdCh6ZSk/bHQuZmlsdGVyKHplKVswXTp6ZVswXSxFbj1bXSxEbj1WZSxLbj1Ebi5pZCgpO2lmKFZlLmxlbmd0aD4wKWZvcihFbi51bnNoaWZ0KFZlKTtXW0tuXTspe3ZhciBTbj1XW0tuXTtFbi51bnNoaWZ0KFNuLmVkZ2UpLEVuLnVuc2hpZnQoU24ubm9kZSksRG49U24ubm9kZSxLbj1Ebi5pZCgpfXJldHVybiAkLnNwYXduKEVuKX19fX0sYVk9e2tydXNrYWw6ZnVuY3Rpb24oZyl7Zz1nfHxmdW5jdGlvbihEdCl7cmV0dXJuIDF9O2Zvcih2YXIgeD10aGlzLmJ5R3JvdXAoKSxUPXgubm9kZXMsQT14LmVkZ2VzLEQ9VC5sZW5ndGgsTz1uZXcgQXJyYXkoRCksJD1ULHE9ZnVuY3Rpb24oanQpe2Zvcih2YXIgWnQ9MDtadDxPLmxlbmd0aDtadCsrKXt2YXIgS3Q9T1tadF07aWYoS3QuaGFzKGp0KSlyZXR1cm4gWnR9fSxTPTA7UzxEO1MrKylPW1NdPXRoaXMuc3Bhd24oVFtTXSk7Zm9yKHZhciBHPUEuc29ydChmdW5jdGlvbihEdCxqdCl7cmV0dXJuIGcoRHQpLWcoanQpfSksVz0wO1c8Ry5sZW5ndGg7VysrKXt2YXIgZXQ9R1tXXSxhdD1ldC5zb3VyY2UoKVswXSxsdD1ldC50YXJnZXQoKVswXSxmdD1xKGF0KSxBdD1xKGx0KSxrdD1PW2Z0XSxNdD1PW0F0XTtmdCE9PUF0JiYoJC5tZXJnZShldCksa3QubWVyZ2UoTXQpLE8uc3BsaWNlKEF0LDEpKX1yZXR1cm4gJH19LG9ZPUJmKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKGcpe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLGNZPXthU3RhcjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD1vWShnKSxBPVQucm9vdCxEPVQuZ29hbCxPPVQuaGV1cmlzdGljLCQ9VC5kaXJlY3RlZCxxPVQud2VpZ2h0O0E9eC5jb2xsZWN0aW9uKEEpWzBdLEQ9eC5jb2xsZWN0aW9uKEQpWzBdO3ZhciBTPUEuaWQoKSxHPUQuaWQoKSxXPXt9LGV0PXt9LGF0PXt9LGx0PW5ldyB2ayhmdW5jdGlvbihLbixTbil7cmV0dXJuIGV0W0tuLmlkKCldLWV0W1NuLmlkKCldfSksZnQ9bmV3IHo1LEF0PXt9LGt0PXt9LE10PWZ1bmN0aW9uKFNuLFduKXtsdC5wdXNoKFNuKSxmdC5hZGQoV24pfSxEdCxqdCxadD1mdW5jdGlvbigpe0R0PWx0LnBvcCgpLGp0PUR0LmlkKCksZnQuZGVsZXRlKGp0KX0sS3Q9ZnVuY3Rpb24oU24pe3JldHVybiBmdC5oYXMoU24pfTtNdChBLFMpLFdbU109MCxldFtTXT1PKEEpO2Zvcih2YXIgenQ9MDtsdC5zaXplKCk+MDspe2lmKFp0KCksenQrKyxqdD09PUcpe2Zvcih2YXIgZWU9W10sVnQ9RCxmZT1HLGdlPWt0W2ZlXTtlZS51bnNoaWZ0KFZ0KSxnZSE9bnVsbCYmZWUudW5zaGlmdChnZSksVnQ9QXRbZmVdLFZ0IT1udWxsOylmZT1WdC5pZCgpLGdlPWt0W2ZlXTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6V1tqdF0scGF0aDp0aGlzLnNwYXduKGVlKSxzdGVwczp6dH19YXRbanRdPSEwO2Zvcih2YXIgbmU9RHQuX3ByaXZhdGUuZWRnZXMsUGU9MDtQZTxuZS5sZW5ndGg7UGUrKyl7dmFyIHBlPW5lW1BlXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQocGUuaWQoKSkmJiEoJCYmcGUuZGF0YSgic291cmNlIikhPT1qdCkpe3ZhciBibj1wZS5zb3VyY2UoKSx6ZT1wZS50YXJnZXQoKSxWZT1ibi5pZCgpIT09anQ/Ym46emUsRW49VmUuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRW4pJiYhYXRbRW5dKXt2YXIgRG49V1tqdF0rcShwZSk7aWYoIUt0KEVuKSl7V1tFbl09RG4sZXRbRW5dPURuK08oVmUpLE10KFZlLEVuKSxBdFtFbl09RHQsa3RbRW5dPXBlO2NvbnRpbnVlfURuPFdbRW5dJiYoV1tFbl09RG4sZXRbRW5dPURuK08oVmUpLEF0W0VuXT1EdCxrdFtFbl09cGUpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6enR9fX0sdVk9QmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSxsWT17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5jeSgpLFQ9dVkoZyksQT1ULndlaWdodCxEPVQuZGlyZWN0ZWQsTz1BLCQ9dGhpcy5ieUdyb3VwKCkscT0kLm5vZGVzLFM9JC5lZGdlcyxHPXEubGVuZ3RoLFc9RypHLGV0PWZ1bmN0aW9uKHJyKXtyZXR1cm4gcS5pbmRleE9mKHJyKX0sYXQ9ZnVuY3Rpb24ocnIpe3JldHVybiBxW3JyXX0sbHQ9bmV3IEFycmF5KFcpLGZ0PTA7ZnQ8VztmdCsrKXt2YXIgQXQ9ZnQlRyxrdD0oZnQtQXQpL0c7a3Q9PT1BdD9sdFtmdF09MDpsdFtmdF09MS8wfWZvcih2YXIgTXQ9bmV3IEFycmF5KFcpLER0PW5ldyBBcnJheShXKSxqdD0wO2p0PFMubGVuZ3RoO2p0Kyspe3ZhciBadD1TW2p0XSxLdD1adC5zb3VyY2UoKVswXSx6dD1adC50YXJnZXQoKVswXTtpZihLdCE9PXp0KXt2YXIgZWU9ZXQoS3QpLFZ0PWV0KHp0KSxmZT1lZSpHK1Z0LGdlPU8oWnQpO2lmKGx0W2ZlXT5nZSYmKGx0W2ZlXT1nZSxNdFtmZV09VnQsRHRbZmVdPVp0KSwhRCl7dmFyIG5lPVZ0KkcrZWU7IUQmJmx0W25lXT5nZSYmKGx0W25lXT1nZSxNdFtuZV09ZWUsRHRbbmVdPVp0KX19fWZvcih2YXIgUGU9MDtQZTxHO1BlKyspZm9yKHZhciBwZT0wO3BlPEc7cGUrKylmb3IodmFyIGJuPXBlKkcrUGUsemU9MDt6ZTxHO3plKyspe3ZhciBWZT1wZSpHK3plLEVuPVBlKkcremU7bHRbYm5dK2x0W0VuXTxsdFtWZV0mJihsdFtWZV09bHRbYm5dK2x0W0VuXSxNdFtWZV09TXRbYm5dKX12YXIgRG49ZnVuY3Rpb24ocnIpe3JldHVybihtdChycik/eC5maWx0ZXIocnIpOnJyKVswXX0sS249ZnVuY3Rpb24ocnIpe3JldHVybiBldChEbihycikpfSxTbj17ZGlzdGFuY2U6ZnVuY3Rpb24ocnIsdnIpe3ZhciB1cj1LbihyciksdHI9S24odnIpO3JldHVybiBsdFt1cipHK3RyXX0scGF0aDpmdW5jdGlvbihycix2cil7dmFyIHVyPUtuKHJyKSx0cj1Lbih2ciksd249YXQodXIpO2lmKHVyPT09dHIpcmV0dXJuIHduLmNvbGxlY3Rpb24oKTtpZihNdFt1cipHK3RyXT09bnVsbClyZXR1cm4geC5jb2xsZWN0aW9uKCk7dmFyIGdyPXguY29sbGVjdGlvbigpLGZyPXVyLEpyO2Zvcihnci5tZXJnZSh3bik7dXIhPT10cjspZnI9dXIsdXI9TXRbdXIqRyt0cl0sSnI9RHRbZnIqRyt1cl0sZ3IubWVyZ2UoSnIpLGdyLm1lcmdlKGF0KHVyKSk7cmV0dXJuIGdyfX07cmV0dXJuIFNufX0saFk9QmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksZlk9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD1oWShnKSxBPVQud2VpZ2h0LEQ9VC5kaXJlY3RlZCxPPVQucm9vdCwkPUEscT10aGlzLFM9dGhpcy5jeSgpLEc9dGhpcy5ieUdyb3VwKCksVz1HLmVkZ2VzLGV0PUcubm9kZXMsYXQ9ZXQubGVuZ3RoLGx0PW5ldyB6YixmdD0hMSxBdD1bXTtPPVMuY29sbGVjdGlvbihPKVswXSxXLnVubWVyZ2VCeShmdW5jdGlvbihxaSl7cmV0dXJuIHFpLmlzTG9vcCgpfSk7Zm9yKHZhciBrdD1XLmxlbmd0aCxNdD1mdW5jdGlvbihTaSl7dmFyIFVpPWx0LmdldChTaS5pZCgpKTtyZXR1cm4gVWl8fChVaT17fSxsdC5zZXQoU2kuaWQoKSxVaSkpLFVpfSxEdD1mdW5jdGlvbihTaSl7cmV0dXJuKG10KFNpKT9TLiQoU2kpOlNpKVswXX0sanQ9ZnVuY3Rpb24oU2kpe3JldHVybiBNdChEdChTaSkpLmRpc3R9LFp0PWZ1bmN0aW9uKFNpKXtmb3IodmFyIFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpPLEdhPUR0KFNpKSxZcz1bXSx6cz1HYTs7KXtpZih6cz09bnVsbClyZXR1cm4geC5zcGF3bigpO3ZhciBFcj1NdCh6cyksUXQ9RXIuZWRnZSxqbj1Fci5wcmVkO2lmKFlzLnVuc2hpZnQoenNbMF0pLHpzLnNhbWUoVWkpJiZZcy5sZW5ndGg+MClicmVhaztRdCE9bnVsbCYmWXMudW5zaGlmdChRdCksenM9am59cmV0dXJuIHEuc3Bhd24oWXMpfSxLdD0wO0t0PGF0O0t0Kyspe3ZhciB6dD1ldFtLdF0sZWU9TXQoenQpO3p0LnNhbWUoTyk/ZWUuZGlzdD0wOmVlLmRpc3Q9MS8wLGVlLnByZWQ9bnVsbCxlZS5lZGdlPW51bGx9Zm9yKHZhciBWdD0hMSxmZT1mdW5jdGlvbihTaSxVaSxHYSxZcyx6cyxFcil7dmFyIFF0PVlzLmRpc3QrRXI7UXQ8enMuZGlzdCYmIUdhLnNhbWUoWXMuZWRnZSkmJih6cy5kaXN0PVF0LHpzLnByZWQ9U2ksenMuZWRnZT1HYSxWdD0hMCl9LGdlPTE7Z2U8YXQ7Z2UrKyl7VnQ9ITE7Zm9yKHZhciBuZT0wO25lPGt0O25lKyspe3ZhciBQZT1XW25lXSxwZT1QZS5zb3VyY2UoKSxibj1QZS50YXJnZXQoKSx6ZT0kKFBlKSxWZT1NdChwZSksRW49TXQoYm4pO2ZlKHBlLGJuLFBlLFZlLEVuLHplKSxEfHxmZShibixwZSxQZSxFbixWZSx6ZSl9aWYoIVZ0KWJyZWFrfWlmKFZ0KWZvcih2YXIgRG49W10sS249MDtLbjxrdDtLbisrKXt2YXIgU249V1tLbl0sV249U24uc291cmNlKCkscnI9U24udGFyZ2V0KCksdnI9JChTbiksdXI9TXQoV24pLmRpc3QsdHI9TXQocnIpLmRpc3Q7aWYodXIrdnI8dHJ8fCFEJiZ0cit2cjx1cilpZihmdHx8KFNjKCJHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkIiksZnQ9ITApLGcuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzIT09ITEpe3ZhciB3bj1bXTt1cit2cjx0ciYmd24ucHVzaChXbiksIUQmJnRyK3ZyPHVyJiZ3bi5wdXNoKHJyKTtmb3IodmFyIGdyPXduLmxlbmd0aCxmcj0wO2ZyPGdyO2ZyKyspe3ZhciBKcj13bltmcl0sd2k9W0pyXTt3aS5wdXNoKE10KEpyKS5lZGdlKTtmb3IodmFyIEtzPU10KEpyKS5wcmVkO3dpLmluZGV4T2YoS3MpPT09LTE7KXdpLnB1c2goS3MpLHdpLnB1c2goTXQoS3MpLmVkZ2UpLEtzPU10KEtzKS5wcmVkO3dpPXdpLnNsaWNlKHdpLmluZGV4T2YoS3MpKTtmb3IodmFyIGthPXdpWzBdLmlkKCksQ2k9MCxoaT0yO2hpPHdpLmxlbmd0aDtoaSs9Mil3aVtoaV0uaWQoKTxrYSYmKGthPXdpW2hpXS5pZCgpLENpPWhpKTt3aT13aS5zbGljZShDaSkuY29uY2F0KHdpLnNsaWNlKDAsQ2kpKSx3aS5wdXNoKHdpWzBdKTt2YXIgZ3M9d2kubWFwKGZ1bmN0aW9uKHFpKXtyZXR1cm4gcWkuaWQoKX0pLmpvaW4oIiwiKTtEbi5pbmRleE9mKGdzKT09PS0xJiYoQXQucHVzaChxLnNwYXduKHdpKSksRG4ucHVzaChncykpfX1lbHNlIGJyZWFrfXJldHVybntkaXN0YW5jZVRvOmp0LHBhdGhUbzpadCxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOmZ0LG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOkF0fX19LGRZPU1hdGguc3FydCgyKSxnWT1mdW5jdGlvbihnLHgsVCl7VC5sZW5ndGg9PT0wJiZibCgiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGgiKTtmb3IodmFyIEE9VFtnXSxEPUFbMV0sTz1BWzJdLCQ9eFtEXSxxPXhbT10sUz1ULEc9Uy5sZW5ndGgtMTtHPj0wO0ctLSl7dmFyIFc9U1tHXSxldD1XWzFdLGF0PVdbMl07KHhbZXRdPT09JCYmeFthdF09PT1xfHx4W2V0XT09PXEmJnhbYXRdPT09JCkmJlMuc3BsaWNlKEcsMSl9Zm9yKHZhciBsdD0wO2x0PFMubGVuZ3RoO2x0Kyspe3ZhciBmdD1TW2x0XTtmdFsxXT09PXE/KFNbbHRdPWZ0LnNsaWNlKCksU1tsdF1bMV09JCk6ZnRbMl09PT1xJiYoU1tsdF09ZnQuc2xpY2UoKSxTW2x0XVsyXT0kKX1mb3IodmFyIEF0PTA7QXQ8eC5sZW5ndGg7QXQrKyl4W0F0XT09PXEmJih4W0F0XT0kKTtyZXR1cm4gU30seUw9ZnVuY3Rpb24oZyx4LFQsQSl7Zm9yKDtUPkE7KXt2YXIgRD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqeC5sZW5ndGgpO3g9Z1koRCxnLHgpLFQtLX1yZXR1cm4geH0scFk9e2thcmdlclN0ZWluOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXRoaXMuYnlHcm91cCgpLFQ9eC5ub2RlcyxBPXguZWRnZXM7QS51bm1lcmdlQnkoZnVuY3Rpb24oRW4pe3JldHVybiBFbi5pc0xvb3AoKX0pO3ZhciBEPVQubGVuZ3RoLE89QS5sZW5ndGgsJD1NYXRoLmNlaWwoTWF0aC5wb3coTWF0aC5sb2coRCkvTWF0aC5MTjIsMikpLHE9TWF0aC5mbG9vcihEL2RZKTtpZihEPDIpe2JsKCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIFM9W10sRz0wO0c8TztHKyspe3ZhciBXPUFbR107Uy5wdXNoKFtHLFQuaW5kZXhPZihXLnNvdXJjZSgpKSxULmluZGV4T2YoVy50YXJnZXQoKSldKX1mb3IodmFyIGV0PTEvMCxhdD1bXSxsdD1uZXcgQXJyYXkoRCksZnQ9bmV3IEFycmF5KEQpLEF0PW5ldyBBcnJheShEKSxrdD1mdW5jdGlvbihEbixLbil7Zm9yKHZhciBTbj0wO1NuPEQ7U24rKylLbltTbl09RG5bU25dfSxNdD0wO010PD0kO010Kyspe2Zvcih2YXIgRHQ9MDtEdDxEO0R0KyspZnRbRHRdPUR0O3ZhciBqdD15TChmdCxTLnNsaWNlKCksRCxxKSxadD1qdC5zbGljZSgpO2t0KGZ0LEF0KTt2YXIgS3Q9eUwoZnQsanQscSwyKSx6dD15TChBdCxadCxxLDIpO0t0Lmxlbmd0aDw9enQubGVuZ3RoJiZLdC5sZW5ndGg8ZXQ/KGV0PUt0Lmxlbmd0aCxhdD1LdCxrdChmdCxsdCkpOnp0Lmxlbmd0aDw9S3QubGVuZ3RoJiZ6dC5sZW5ndGg8ZXQmJihldD16dC5sZW5ndGgsYXQ9enQsa3QoQXQsbHQpKX1mb3IodmFyIGVlPXRoaXMuc3Bhd24oYXQubWFwKGZ1bmN0aW9uKEVuKXtyZXR1cm4gQVtFblswXV19KSksVnQ9dGhpcy5zcGF3bigpLGZlPXRoaXMuc3Bhd24oKSxnZT1sdFswXSxuZT0wO25lPGx0Lmxlbmd0aDtuZSsrKXt2YXIgUGU9bHRbbmVdLHBlPVRbbmVdO1BlPT09Z2U/VnQubWVyZ2UocGUpOmZlLm1lcmdlKHBlKX12YXIgYm49ZnVuY3Rpb24oRG4pe3ZhciBLbj1nLnNwYXduKCk7cmV0dXJuIERuLmZvckVhY2goZnVuY3Rpb24oU24pe0tuLm1lcmdlKFNuKSxTbi5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oV24pe2cuY29udGFpbnMoV24pJiYhZWUuY29udGFpbnMoV24pJiZLbi5tZXJnZShXbil9KX0pLEtufSx6ZT1bYm4oVnQpLGJuKGZlKV0sVmU9e2N1dDplZSxjb21wb25lbnRzOnplLHBhcnRpdGlvbjE6VnQscGFydGl0aW9uMjpmZX07cmV0dXJuIFZlfX0sYlk9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Zy54LHk6Zy55fX0sT1Q9ZnVuY3Rpb24oZyx4LFQpe3JldHVybnt4OmcueCp4K1QueCx5OmcueSp4K1QueX19LFFQPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm57eDooZy54LVQueCkveCx5OihnLnktVC55KS94fX0scTU9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Z1swXSx5OmdbMV19fSx2WT1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsQT0xLzAsRD14O0Q8VDtEKyspe3ZhciBPPWdbRF07aXNGaW5pdGUoTykmJihBPU1hdGgubWluKE8sQSkpfXJldHVybiBBfSx3WT1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsQT0tMS8wLEQ9eDtEPFQ7RCsrKXt2YXIgTz1nW0RdO2lzRmluaXRlKE8pJiYoQT1NYXRoLm1heChPLEEpKX1yZXR1cm4gQX0sbVk9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmcubGVuZ3RoLEE9MCxEPTAsTz14O088VDtPKyspe3ZhciAkPWdbT107aXNGaW5pdGUoJCkmJihBKz0kLEQrKyl9cmV0dXJuIEEvRH0seVk9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsQT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsRD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7QT9nPWcuc2xpY2UoeCxUKTooVDxnLmxlbmd0aCYmZy5zcGxpY2UoVCxnLmxlbmd0aC1UKSx4PjAmJmcuc3BsaWNlKDAseCkpO2Zvcih2YXIgJD0wLHE9Zy5sZW5ndGgtMTtxPj0wO3EtLSl7dmFyIFM9Z1txXTtPP2lzRmluaXRlKFMpfHwoZ1txXT0tMS8wLCQrKyk6Zy5zcGxpY2UocSwxKX1EJiZnLnNvcnQoZnVuY3Rpb24oZXQsYXQpe3JldHVybiBldC1hdH0pO3ZhciBHPWcubGVuZ3RoLFc9TWF0aC5mbG9vcihHLzIpO3JldHVybiBHJTIhPT0wP2dbVysxKyRdOihnW1ctMSskXStnW1crJF0pLzJ9LHhZPWZ1bmN0aW9uKGcpe3JldHVybiBNYXRoLlBJKmcvMTgwfSxOVD1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmF0YW4yKHgsZyktTWF0aC5QSS8yfSx4TD1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHkpe3JldHVybiBNYXRoLmxvZyh5KS9NYXRoLmxvZygyKX0sWlA9ZnVuY3Rpb24oZyl7cmV0dXJuIGc+MD8xOmc8MD8tMTowfSxFMz1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLnNxcnQoVDMoZyx4KSl9LFQzPWZ1bmN0aW9uKGcseCl7dmFyIFQ9eC54LWcueCxBPXgueS1nLnk7cmV0dXJuIFQqVCtBKkF9LGtZPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1nLmxlbmd0aCxUPTAsQT0wO0E8eDtBKyspVCs9Z1tBXTtmb3IodmFyIEQ9MDtEPHg7RCsrKWdbRF09Z1tEXS9UO3JldHVybiBnfSxyZj1mdW5jdGlvbihnLHgsVCxBKXtyZXR1cm4oMS1BKSooMS1BKSpnKzIqKDEtQSkqQSp4K0EqQSpUfSxINT1mdW5jdGlvbihnLHgsVCxBKXtyZXR1cm57eDpyZihnLngseC54LFQueCxBKSx5OnJmKGcueSx4LnksVC55LEEpfX0sRVk9ZnVuY3Rpb24oZyx4LFQsQSl7dmFyIEQ9e3g6eC54LWcueCx5OngueS1nLnl9LE89RTMoZyx4KSwkPXt4OkQueC9PLHk6RC55L099O3JldHVybiBUPVQ/PzAsQT1BPz9UKk8se3g6Zy54KyQueCpBLHk6Zy55KyQueSpBfX0sd2s9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLE1hdGgubWluKFQseCkpfSxSZD1mdW5jdGlvbihnKXtpZihnPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihnLngxIT1udWxsJiZnLnkxIT1udWxsKXtpZihnLngyIT1udWxsJiZnLnkyIT1udWxsJiZnLngyPj1nLngxJiZnLnkyPj1nLnkxKXJldHVybnt4MTpnLngxLHkxOmcueTEseDI6Zy54Mix5MjpnLnkyLHc6Zy54Mi1nLngxLGg6Zy55Mi1nLnkxfTtpZihnLnchPW51bGwmJmcuaCE9bnVsbCYmZy53Pj0wJiZnLmg+PTApcmV0dXJue3gxOmcueDEseTE6Zy55MSx4MjpnLngxK2cudyx5MjpnLnkxK2cuaCx3OmcudyxoOmcuaH19fSxUWT1mdW5jdGlvbihnKXtyZXR1cm57eDE6Zy54MSx4MjpnLngyLHc6Zy53LHkxOmcueTEseTI6Zy55MixoOmcuaH19LENZPWZ1bmN0aW9uKGcpe2cueDE9MS8wLGcueTE9MS8wLGcueDI9LTEvMCxnLnkyPS0xLzAsZy53PTAsZy5oPTB9LF9ZPWZ1bmN0aW9uKGcseCl7Zy54MT1NYXRoLm1pbihnLngxLHgueDEpLGcueDI9TWF0aC5tYXgoZy54Mix4LngyKSxnLnc9Zy54Mi1nLngxLGcueTE9TWF0aC5taW4oZy55MSx4LnkxKSxnLnkyPU1hdGgubWF4KGcueTIseC55MiksZy5oPWcueTItZy55MX0sU1k9ZnVuY3Rpb24oZyx4LFQpe2cueDE9TWF0aC5taW4oZy54MSx4KSxnLngyPU1hdGgubWF4KGcueDIseCksZy53PWcueDItZy54MSxnLnkxPU1hdGgubWluKGcueTEsVCksZy55Mj1NYXRoLm1heChnLnkyLFQpLGcuaD1nLnkyLWcueTF9LFBUPWZ1bmN0aW9uKGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBnLngxLT14LGcueDIrPXgsZy55MS09eCxnLnkyKz14LGcudz1nLngyLWcueDEsZy5oPWcueTItZy55MSxnfSxrTD1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFQsQSxELE87aWYoeC5sZW5ndGg9PT0xKVQ9QT1EPU89eFswXTtlbHNlIGlmKHgubGVuZ3RoPT09MilUPUQ9eFswXSxPPUE9eFsxXTtlbHNlIGlmKHgubGVuZ3RoPT09NCl7dmFyICQ9RSh4LDQpO1Q9JFswXSxBPSRbMV0sRD0kWzJdLE89JFszXX1yZXR1cm4gZy54MS09TyxnLngyKz1BLGcueTEtPVQsZy55Mis9RCxnLnc9Zy54Mi1nLngxLGcuaD1nLnkyLWcueTEsZ30sSlA9ZnVuY3Rpb24oZyx4KXtnLngxPXgueDEsZy55MT14LnkxLGcueDI9eC54MixnLnkyPXgueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxfSxFTD1mdW5jdGlvbihnLHgpe3JldHVybiEoZy54MT54LngyfHx4LngxPmcueDJ8fGcueDI8eC54MXx8eC54MjxnLngxfHxnLnkyPHgueTF8fHgueTI8Zy55MXx8Zy55MT54LnkyfHx4LnkxPmcueTIpfSxHNT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcueDE8PXgmJng8PWcueDImJmcueTE8PVQmJlQ8PWcueTJ9LEFZPWZ1bmN0aW9uKGcseCl7cmV0dXJuIEc1KGcseC54LHgueSl9LHRGPWZ1bmN0aW9uKGcseCl7cmV0dXJuIEc1KGcseC54MSx4LnkxKSYmRzUoZyx4LngyLHgueTIpfSxlRj1mdW5jdGlvbihnLHgsVCxBLEQsTywkKXt2YXIgcT14ayhELE8pLFM9RC8yLEc9Ty8yLFc7e3ZhciBldD1ULVMrcS0kLGF0PUEtRy0kLGx0PVQrUy1xKyQsZnQ9YXQ7aWYoVz12bShnLHgsVCxBLGV0LGF0LGx0LGZ0LCExKSxXLmxlbmd0aD4wKXJldHVybiBXfXt2YXIgQXQ9VCtTKyQsa3Q9QS1HK3EtJCxNdD1BdCxEdD1BK0ctcSskO2lmKFc9dm0oZyx4LFQsQSxBdCxrdCxNdCxEdCwhMSksVy5sZW5ndGg+MClyZXR1cm4gV317dmFyIGp0PVQtUytxLSQsWnQ9QStHKyQsS3Q9VCtTLXErJCx6dD1adDtpZihXPXZtKGcseCxULEEsanQsWnQsS3QsenQsITEpLFcubGVuZ3RoPjApcmV0dXJuIFd9e3ZhciBlZT1ULVMtJCxWdD1BLUcrcS0kLGZlPWVlLGdlPUErRy1xKyQ7aWYoVz12bShnLHgsVCxBLGVlLFZ0LGZlLGdlLCExKSxXLmxlbmd0aD4wKXJldHVybiBXfXZhciBuZTt7dmFyIFBlPVQtUytxLHBlPUEtRytxO2lmKG5lPW1rKGcseCxULEEsUGUscGUscSskKSxuZS5sZW5ndGg+MCYmbmVbMF08PVBlJiZuZVsxXTw9cGUpcmV0dXJuW25lWzBdLG5lWzFdXX17dmFyIGJuPVQrUy1xLHplPUEtRytxO2lmKG5lPW1rKGcseCxULEEsYm4semUscSskKSxuZS5sZW5ndGg+MCYmbmVbMF0+PWJuJiZuZVsxXTw9emUpcmV0dXJuW25lWzBdLG5lWzFdXX17dmFyIFZlPVQrUy1xLEVuPUErRy1xO2lmKG5lPW1rKGcseCxULEEsVmUsRW4scSskKSxuZS5sZW5ndGg+MCYmbmVbMF0+PVZlJiZuZVsxXT49RW4pcmV0dXJuW25lWzBdLG5lWzFdXX17dmFyIERuPVQtUytxLEtuPUErRy1xO2lmKG5lPW1rKGcseCxULEEsRG4sS24scSskKSxuZS5sZW5ndGg+MCYmbmVbMF08PURuJiZuZVsxXT49S24pcmV0dXJuW25lWzBdLG5lWzFdXX1yZXR1cm5bXX0sTFk9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9JCxTPU1hdGgubWluKFQsRCksRz1NYXRoLm1heChULEQpLFc9TWF0aC5taW4oQSxPKSxldD1NYXRoLm1heChBLE8pO3JldHVybiBTLXE8PWcmJmc8PUcrcSYmVy1xPD14JiZ4PD1ldCtxfSxNWT1mdW5jdGlvbihnLHgsVCxBLEQsTywkLHEsUyl7dmFyIEc9e3gxOk1hdGgubWluKFQsJCxEKS1TLHgyOk1hdGgubWF4KFQsJCxEKStTLHkxOk1hdGgubWluKEEscSxPKS1TLHkyOk1hdGgubWF4KEEscSxPKStTfTtyZXR1cm4hKGc8Ry54MXx8Zz5HLngyfHx4PEcueTF8fHg+Ry55Mil9LElZPWZ1bmN0aW9uKGcseCxULEEpe1QtPUE7dmFyIEQ9eCp4LTQqZypUO2lmKEQ8MClyZXR1cm5bXTt2YXIgTz1NYXRoLnNxcnQoRCksJD0yKmcscT0oLXgrTykvJCxTPSgteC1PKS8kO3JldHVybltxLFNdfSxEWT1mdW5jdGlvbihnLHgsVCxBLEQpe3ZhciBPPTFlLTU7Zz09PTAmJihnPU8pLHgvPWcsVC89ZyxBLz1nO3ZhciAkLHEsUyxHLFcsZXQsYXQsbHQ7aWYocT0oMypULXgqeCkvOSxTPS0oMjcqQSkreCooOSpULTIqKHgqeCkpLFMvPTU0LCQ9cSpxKnErUypTLERbMV09MCxhdD14LzMsJD4wKXtXPVMrTWF0aC5zcXJ0KCQpLFc9VzwwPy1NYXRoLnBvdygtVywxLzMpOk1hdGgucG93KFcsMS8zKSxldD1TLU1hdGguc3FydCgkKSxldD1ldDwwPy1NYXRoLnBvdygtZXQsMS8zKTpNYXRoLnBvdyhldCwxLzMpLERbMF09LWF0K1crZXQsYXQrPShXK2V0KS8yLERbNF09RFsyXT0tYXQsYXQ9TWF0aC5zcXJ0KDMpKigtZXQrVykvMixEWzNdPWF0LERbNV09LWF0O3JldHVybn1pZihEWzVdPURbM109MCwkPT09MCl7bHQ9UzwwPy1NYXRoLnBvdygtUywxLzMpOk1hdGgucG93KFMsMS8zKSxEWzBdPS1hdCsyKmx0LERbNF09RFsyXT0tKGx0K2F0KTtyZXR1cm59cT0tcSxHPXEqcSpxLEc9TWF0aC5hY29zKFMvTWF0aC5zcXJ0KEcpKSxsdD0yKk1hdGguc3FydChxKSxEWzBdPS1hdCtsdCpNYXRoLmNvcyhHLzMpLERbMl09LWF0K2x0Kk1hdGguY29zKChHKzIqTWF0aC5QSSkvMyksRFs0XT0tYXQrbHQqTWF0aC5jb3MoKEcrNCpNYXRoLlBJKS8zKX0sT1k9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCxxKXt2YXIgUz0xKlQqVC00KlQqRCsyKlQqJCs0KkQqRC00KkQqJCskKiQrQSpBLTQqQSpPKzIqQSpxKzQqTypPLTQqTypxK3EqcSxHPTEqOSpUKkQtMypUKlQtMypUKiQtNipEKkQrMypEKiQrOSpBKk8tMypBKkEtMypBKnEtNipPKk8rMypPKnEsVz0xKjMqVCpULTYqVCpEK1QqJC1UKmcrMipEKkQrMipEKmctJCpnKzMqQSpBLTYqQSpPK0EqcS1BKngrMipPKk8rMipPKngtcSp4LGV0PTEqVCpELVQqVCtUKmctRCpnK0EqTy1BKkErQSp4LU8qeCxhdD1bXTtEWShTLEcsVyxldCxhdCk7Zm9yKHZhciBsdD0xZS03LGZ0PVtdLEF0PTA7QXQ8NjtBdCs9MilNYXRoLmFicyhhdFtBdCsxXSk8bHQmJmF0W0F0XT49MCYmYXRbQXRdPD0xJiZmdC5wdXNoKGF0W0F0XSk7ZnQucHVzaCgxKSxmdC5wdXNoKDApO2Zvcih2YXIga3Q9LTEsTXQsRHQsanQsWnQ9MDtadDxmdC5sZW5ndGg7WnQrKylNdD1NYXRoLnBvdygxLWZ0W1p0XSwyKSpUKzIqKDEtZnRbWnRdKSpmdFtadF0qRCtmdFtadF0qZnRbWnRdKiQsRHQ9TWF0aC5wb3coMS1mdFtadF0sMikqQSsyKigxLWZ0W1p0XSkqZnRbWnRdKk8rZnRbWnRdKmZ0W1p0XSpxLGp0PU1hdGgucG93KE10LWcsMikrTWF0aC5wb3coRHQteCwyKSxrdD49MD9qdDxrdCYmKGt0PWp0KTprdD1qdDtyZXR1cm4ga3R9LE5ZPWZ1bmN0aW9uKGcseCxULEEsRCxPKXt2YXIgJD1bZy1ULHgtQV0scT1bRC1ULE8tQV0sUz1xWzBdKnFbMF0rcVsxXSpxWzFdLEc9JFswXSokWzBdKyRbMV0qJFsxXSxXPSRbMF0qcVswXSskWzFdKnFbMV0sZXQ9VypXL1M7cmV0dXJuIFc8MD9HOmV0PlM/KGctRCkqKGctRCkrKHgtTykqKHgtTyk6Ry1ldH0samQ9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQSxELE8sJCxxLFM9MCxHPTA7RzxULmxlbmd0aC8yO0crKylpZihBPVRbRyoyXSxEPVRbRyoyKzFdLEcrMTxULmxlbmd0aC8yPyhPPVRbKEcrMSkqMl0sJD1UWyhHKzEpKjIrMV0pOihPPVRbKEcrMS1ULmxlbmd0aC8yKSoyXSwkPVRbKEcrMS1ULmxlbmd0aC8yKSoyKzFdKSwhKEE9PWcmJk89PWcpKWlmKEE+PWcmJmc+PU98fEE8PWcmJmc8PU8pcT0oZy1BKS8oTy1BKSooJC1EKStELHE+eCYmUysrO2Vsc2UgY29udGludWU7cmV0dXJuIFMlMiE9PTB9LGx2PWZ1bmN0aW9uKGcseCxULEEsRCxPLCQscSxTKXt2YXIgRz1uZXcgQXJyYXkoVC5sZW5ndGgpLFc7cVswXSE9bnVsbD8oVz1NYXRoLmF0YW4ocVsxXS9xWzBdKSxxWzBdPDA/Vz1XK01hdGguUEkvMjpXPS1XLU1hdGguUEkvMik6Vz1xO2Zvcih2YXIgZXQ9TWF0aC5jb3MoLVcpLGF0PU1hdGguc2luKC1XKSxsdD0wO2x0PEcubGVuZ3RoLzI7bHQrKylHW2x0KjJdPU8vMiooVFtsdCoyXSpldC1UW2x0KjIrMV0qYXQpLEdbbHQqMisxXT0kLzIqKFRbbHQqMisxXSpldCtUW2x0KjJdKmF0KSxHW2x0KjJdKz1BLEdbbHQqMisxXSs9RDt2YXIgZnQ7aWYoUz4wKXt2YXIgQXQ9ckYoRywtUyk7ZnQ9bkYoQXQpfWVsc2UgZnQ9RztyZXR1cm4gamQoZyx4LGZ0KX0sUFk9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7Zm9yKHZhciBxPW5ldyBBcnJheShULmxlbmd0aCksUz1PLzIsRz0kLzIsVz1fTChPLCQpLGV0PVcqVyxhdD0wO2F0PFQubGVuZ3RoLzQ7YXQrKyl7dmFyIGx0PXZvaWQgMCxmdD12b2lkIDA7YXQ9PT0wP2x0PVQubGVuZ3RoLTI6bHQ9YXQqNC0yLGZ0PWF0KjQrMjt2YXIgQXQ9QStTKlRbYXQqNF0sa3Q9RCtHKlRbYXQqNCsxXSxNdD0tVFtsdF0qVFtmdF0tVFtsdCsxXSpUW2Z0KzFdLER0PVcvTWF0aC50YW4oTWF0aC5hY29zKE10KS8yKSxqdD1BdC1EdCpUW2x0XSxadD1rdC1EdCpUW2x0KzFdLEt0PUF0K0R0KlRbZnRdLHp0PWt0K0R0KlRbZnQrMV07cVthdCo0XT1qdCxxW2F0KjQrMV09WnQscVthdCo0KzJdPUt0LHFbYXQqNCszXT16dDt2YXIgZWU9VFtsdCsxXSxWdD0tVFtsdF0sZmU9ZWUqVFtmdF0rVnQqVFtmdCsxXTtmZTwwJiYoZWUqPS0xLFZ0Kj0tMSk7dmFyIGdlPWp0K2VlKlcsbmU9WnQrVnQqVyxQZT1NYXRoLnBvdyhnZS1nLDIpK01hdGgucG93KG5lLXgsMik7aWYoUGU8PWV0KXJldHVybiEwfXJldHVybiBqZChnLHgscSl9LG5GPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgvMiksVCxBLEQsTywkLHEsUyxHLFc9MDtXPGcubGVuZ3RoLzQ7VysrKXtUPWdbVyo0XSxBPWdbVyo0KzFdLEQ9Z1tXKjQrMl0sTz1nW1cqNCszXSxXPGcubGVuZ3RoLzQtMT8oJD1nWyhXKzEpKjRdLHE9Z1soVysxKSo0KzFdLFM9Z1soVysxKSo0KzJdLEc9Z1soVysxKSo0KzNdKTooJD1nWzBdLHE9Z1sxXSxTPWdbMl0sRz1nWzNdKTt2YXIgZXQ9dm0oVCxBLEQsTywkLHEsUyxHLCEwKTt4W1cqMl09ZXRbMF0seFtXKjIrMV09ZXRbMV19cmV0dXJuIHh9LHJGPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPW5ldyBBcnJheShnLmxlbmd0aCoyKSxBLEQsTywkLHE9MDtxPGcubGVuZ3RoLzI7cSsrKXtBPWdbcSoyXSxEPWdbcSoyKzFdLHE8Zy5sZW5ndGgvMi0xPyhPPWdbKHErMSkqMl0sJD1nWyhxKzEpKjIrMV0pOihPPWdbMF0sJD1nWzFdKTt2YXIgUz0kLUQsRz0tKE8tQSksVz1NYXRoLnNxcnQoUypTK0cqRyksZXQ9Uy9XLGF0PUcvVztUW3EqNF09QStldCp4LFRbcSo0KzFdPUQrYXQqeCxUW3EqNCsyXT1PK2V0KngsVFtxKjQrM109JCthdCp4fXJldHVybiBUfSxGWT1mdW5jdGlvbihnLHgsVCxBLEQsTyl7dmFyICQ9VC1nLHE9QS14OyQvPUQscS89Tzt2YXIgUz1NYXRoLnNxcnQoJCokK3EqcSksRz1TLTE7aWYoRzwwKXJldHVybltdO3ZhciBXPUcvUztyZXR1cm5bKFQtZykqVytnLChBLXgpKlcreF19LEMzPWZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3JldHVybiBnLT1ELHgtPU8sZy89VC8yKyQseC89QS8yKyQsZypnK3gqeDw9MX0sbWs9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9W1QtZyxBLXhdLFM9W2ctRCx4LU9dLEc9cVswXSpxWzBdK3FbMV0qcVsxXSxXPTIqKFNbMF0qcVswXStTWzFdKnFbMV0pLGV0PVNbMF0qU1swXStTWzFdKlNbMV0tJCokLGF0PVcqVy00KkcqZXQ7aWYoYXQ8MClyZXR1cm5bXTt2YXIgbHQ9KC1XK01hdGguc3FydChhdCkpLygyKkcpLGZ0PSgtVy1NYXRoLnNxcnQoYXQpKS8oMipHKSxBdD1NYXRoLm1pbihsdCxmdCksa3Q9TWF0aC5tYXgobHQsZnQpLE10PVtdO2lmKEF0Pj0wJiZBdDw9MSYmTXQucHVzaChBdCksa3Q+PTAmJmt0PD0xJiZNdC5wdXNoKGt0KSxNdC5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBEdD1NdFswXSpxWzBdK2csanQ9TXRbMF0qcVsxXSt4O2lmKE10Lmxlbmd0aD4xKXtpZihNdFswXT09TXRbMV0pcmV0dXJuW0R0LGp0XTt2YXIgWnQ9TXRbMV0qcVswXStnLEt0PU10WzFdKnFbMV0reDtyZXR1cm5bRHQsanQsWnQsS3RdfWVsc2UgcmV0dXJuW0R0LGp0XX0sVEw9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4PD1nJiZnPD1UfHxUPD1nJiZnPD14P2c6Zzw9eCYmeDw9VHx8VDw9eCYmeDw9Zz94OlR9LHZtPWZ1bmN0aW9uKGcseCxULEEsRCxPLCQscSxTKXt2YXIgRz1nLUQsVz1ULWcsZXQ9JC1ELGF0PXgtTyxsdD1BLXgsZnQ9cS1PLEF0PWV0KmF0LWZ0Kkcsa3Q9VyphdC1sdCpHLE10PWZ0KlctZXQqbHQ7aWYoTXQhPT0wKXt2YXIgRHQ9QXQvTXQsanQ9a3QvTXQsWnQ9LjAwMSxLdD0wLVp0LHp0PTErWnQ7cmV0dXJuIEt0PD1EdCYmRHQ8PXp0JiZLdDw9anQmJmp0PD16dD9bZytEdCpXLHgrRHQqbHRdOlM/W2crRHQqVyx4K0R0Kmx0XTpbXX1lbHNlIHJldHVybiBBdD09PTB8fGt0PT09MD9UTChnLFQsJCk9PT0kP1skLHFdOlRMKGcsVCxEKT09PUQ/W0QsT106VEwoRCwkLFQpPT09VD9bVCxBXTpbXTpbXX0seWs9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCxxKXt2YXIgUz1bXSxHLFc9bmV3IEFycmF5KFQubGVuZ3RoKSxldD0hMDtPPT1udWxsJiYoZXQ9ITEpO3ZhciBhdDtpZihldCl7Zm9yKHZhciBsdD0wO2x0PFcubGVuZ3RoLzI7bHQrKylXW2x0KjJdPVRbbHQqMl0qTytBLFdbbHQqMisxXT1UW2x0KjIrMV0qJCtEO2lmKHE+MCl7dmFyIGZ0PXJGKFcsLXEpO2F0PW5GKGZ0KX1lbHNlIGF0PVd9ZWxzZSBhdD1UO2Zvcih2YXIgQXQsa3QsTXQsRHQsanQ9MDtqdDxhdC5sZW5ndGgvMjtqdCsrKUF0PWF0W2p0KjJdLGt0PWF0W2p0KjIrMV0sanQ8YXQubGVuZ3RoLzItMT8oTXQ9YXRbKGp0KzEpKjJdLER0PWF0WyhqdCsxKSoyKzFdKTooTXQ9YXRbMF0sRHQ9YXRbMV0pLEc9dm0oZyx4LEEsRCxBdCxrdCxNdCxEdCksRy5sZW5ndGghPT0wJiZTLnB1c2goR1swXSxHWzFdKTtyZXR1cm4gU30sQlk9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCxxKXtmb3IodmFyIFM9W10sRyxXPW5ldyBBcnJheShULmxlbmd0aCksZXQ9Ty8yLGF0PSQvMixsdD1fTChPLCQpLGZ0PTA7ZnQ8VC5sZW5ndGgvNDtmdCsrKXt2YXIgQXQ9dm9pZCAwLGt0PXZvaWQgMDtmdD09PTA/QXQ9VC5sZW5ndGgtMjpBdD1mdCo0LTIsa3Q9ZnQqNCsyO3ZhciBNdD1BK2V0KlRbZnQqNF0sRHQ9RCthdCpUW2Z0KjQrMV0sanQ9LVRbQXRdKlRba3RdLVRbQXQrMV0qVFtrdCsxXSxadD1sdC9NYXRoLnRhbihNYXRoLmFjb3MoanQpLzIpLEt0PU10LVp0KlRbQXRdLHp0PUR0LVp0KlRbQXQrMV0sZWU9TXQrWnQqVFtrdF0sVnQ9RHQrWnQqVFtrdCsxXTtmdD09PTA/KFdbVC5sZW5ndGgtMl09S3QsV1tULmxlbmd0aC0xXT16dCk6KFdbZnQqNC0yXT1LdCxXW2Z0KjQtMV09enQpLFdbZnQqNF09ZWUsV1tmdCo0KzFdPVZ0O3ZhciBmZT1UW0F0KzFdLGdlPS1UW0F0XSxuZT1mZSpUW2t0XStnZSpUW2t0KzFdO25lPDAmJihmZSo9LTEsZ2UqPS0xKTt2YXIgUGU9S3QrZmUqbHQscGU9enQrZ2UqbHQ7Rz1tayhnLHgsQSxELFBlLHBlLGx0KSxHLmxlbmd0aCE9PTAmJlMucHVzaChHWzBdLEdbMV0pfWZvcih2YXIgYm49MDtibjxXLmxlbmd0aC80O2JuKyspRz12bShnLHgsQSxELFdbYm4qNF0sV1tibio0KzFdLFdbYm4qNCsyXSxXW2JuKjQrM10sITEpLEcubGVuZ3RoIT09MCYmUy5wdXNoKEdbMF0sR1sxXSk7aWYoUy5sZW5ndGg+Mil7Zm9yKHZhciB6ZT1bU1swXSxTWzFdXSxWZT1NYXRoLnBvdyh6ZVswXS1nLDIpK01hdGgucG93KHplWzFdLXgsMiksRW49MTtFbjxTLmxlbmd0aC8yO0VuKyspe3ZhciBEbj1NYXRoLnBvdyhTW0VuKjJdLWcsMikrTWF0aC5wb3coU1tFbioyKzFdLXgsMik7RG48PVZlJiYoemVbMF09U1tFbioyXSx6ZVsxXT1TW0VuKjIrMV0sVmU9RG4pfXJldHVybiB6ZX1yZXR1cm4gU30sRlQ9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPVtnWzBdLXhbMF0sZ1sxXS14WzFdXSxEPU1hdGguc3FydChBWzBdKkFbMF0rQVsxXSpBWzFdKSxPPShELVQpL0Q7cmV0dXJuIE88MCYmKE89MWUtNSksW3hbMF0rTypBWzBdLHhbMV0rTypBWzFdXX0sbmQ9ZnVuY3Rpb24oZyx4KXt2YXIgVD1DTChnLHgpO3JldHVybiBUPWlGKFQpLFR9LGlGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEE9Zy5sZW5ndGgvMixEPTEvMCxPPTEvMCwkPS0xLzAscT0tMS8wLFM9MDtTPEE7UysrKXg9Z1syKlNdLFQ9Z1syKlMrMV0sRD1NYXRoLm1pbihELHgpLCQ9TWF0aC5tYXgoJCx4KSxPPU1hdGgubWluKE8sVCkscT1NYXRoLm1heChxLFQpO2Zvcih2YXIgRz0yLygkLUQpLFc9Mi8ocS1PKSxldD0wO2V0PEE7ZXQrKyl4PWdbMipldF09Z1syKmV0XSpHLFQ9Z1syKmV0KzFdPWdbMipldCsxXSpXLEQ9TWF0aC5taW4oRCx4KSwkPU1hdGgubWF4KCQseCksTz1NYXRoLm1pbihPLFQpLHE9TWF0aC5tYXgocSxUKTtpZihPPC0xKWZvcih2YXIgYXQ9MDthdDxBO2F0KyspVD1nWzIqYXQrMV09Z1syKmF0KzFdKygtMS1PKTtyZXR1cm4gZ30sQ0w9ZnVuY3Rpb24oZyx4KXt2YXIgVD0xL2cqMipNYXRoLlBJLEE9ZyUyPT09MD9NYXRoLlBJLzIrVC8yOk1hdGguUEkvMjtBKz14O2Zvcih2YXIgRD1uZXcgQXJyYXkoZyoyKSxPLCQ9MDskPGc7JCsrKU89JCpUK0EsRFsyKiRdPU1hdGguY29zKE8pLERbMiokKzFdPU1hdGguc2luKC1PKTtyZXR1cm4gRH0seGs9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy80LHgvNCw4KX0sX0w9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy8xMCx4LzEwLDgpfSxzRj1mdW5jdGlvbigpe3JldHVybiA4fSxSWT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuW2ctMip4K1QsMiooeC1nKSxnXX0sU0w9ZnVuY3Rpb24oZyx4KXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSp4KSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmcpLGN0cmxQdE9mZnNldFBjdDouMDV9fSxqWT1CZih7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9fSksJFk9e3BhZ2VSYW5rOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1qWShnKSxUPXguZGFtcGluZ0ZhY3RvcixBPXgucHJlY2lzaW9uLEQ9eC5pdGVyYXRpb25zLE89eC53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LHE9dGhpcy5ieUdyb3VwKCksUz1xLm5vZGVzLEc9cS5lZGdlcyxXPVMubGVuZ3RoLGV0PVcqVyxhdD1HLmxlbmd0aCxsdD1uZXcgQXJyYXkoZXQpLGZ0PW5ldyBBcnJheShXKSxBdD0oMS1UKS9XLGt0PTA7a3Q8VztrdCsrKXtmb3IodmFyIE10PTA7TXQ8VztNdCsrKXt2YXIgRHQ9a3QqVytNdDtsdFtEdF09MH1mdFtrdF09MH1mb3IodmFyIGp0PTA7anQ8YXQ7anQrKyl7dmFyIFp0PUdbanRdLEt0PVp0LmRhdGEoInNvdXJjZSIpLHp0PVp0LmRhdGEoInRhcmdldCIpO2lmKEt0IT09enQpe3ZhciBlZT1TLmluZGV4T2ZJZChLdCksVnQ9Uy5pbmRleE9mSWQoenQpLGZlPU8oWnQpLGdlPVZ0KlcrZWU7bHRbZ2VdKz1mZSxmdFtlZV0rPWZlfX1mb3IodmFyIG5lPTEvVytBdCxQZT0wO1BlPFc7UGUrKylpZihmdFtQZV09PT0wKWZvcih2YXIgcGU9MDtwZTxXO3BlKyspe3ZhciBibj1wZSpXK1BlO2x0W2JuXT1uZX1lbHNlIGZvcih2YXIgemU9MDt6ZTxXO3plKyspe3ZhciBWZT16ZSpXK1BlO2x0W1ZlXT1sdFtWZV0vZnRbUGVdK0F0fWZvcih2YXIgRW49bmV3IEFycmF5KFcpLERuPW5ldyBBcnJheShXKSxLbixTbj0wO1NuPFc7U24rKylFbltTbl09MTtmb3IodmFyIFduPTA7V248RDtXbisrKXtmb3IodmFyIHJyPTA7cnI8VztycisrKURuW3JyXT0wO2Zvcih2YXIgdnI9MDt2cjxXO3ZyKyspZm9yKHZhciB1cj0wO3VyPFc7dXIrKyl7dmFyIHRyPXZyKlcrdXI7RG5bdnJdKz1sdFt0cl0qRW5bdXJdfWtZKERuKSxLbj1FbixFbj1EbixEbj1Lbjtmb3IodmFyIHduPTAsZ3I9MDtncjxXO2dyKyspe3ZhciBmcj1Lbltncl0tRW5bZ3JdO3duKz1mcipmcn1pZih3bjxBKWJyZWFrfXZhciBKcj17cmFuazpmdW5jdGlvbihLcyl7cmV0dXJuIEtzPSQuY29sbGVjdGlvbihLcylbMF0sRW5bUy5pbmRleE9mKEtzKV19fTtyZXR1cm4gSnJ9fSxhRj1CZih7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLFY1PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtnPWFGKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxBPVQubGVuZ3RoO2lmKGcuZGlyZWN0ZWQpe2Zvcih2YXIgRz17fSxXPXt9LGV0PTAsYXQ9MCxsdD0wO2x0PEE7bHQrKyl7dmFyIGZ0PVRbbHRdLEF0PWZ0LmlkKCk7Zy5yb290PWZ0O3ZhciBrdD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZyk7ZXQ8a3QuaW5kZWdyZWUmJihldD1rdC5pbmRlZ3JlZSksYXQ8a3Qub3V0ZGVncmVlJiYoYXQ9a3Qub3V0ZGVncmVlKSxHW0F0XT1rdC5pbmRlZ3JlZSxXW0F0XT1rdC5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKER0KXtyZXR1cm4gZXQ9PTA/MDoobXQoRHQpJiYoRHQ9eC5maWx0ZXIoRHQpKSxHW0R0LmlkKCldL2V0KX0sb3V0ZGVncmVlOmZ1bmN0aW9uKER0KXtyZXR1cm4gYXQ9PT0wPzA6KG10KER0KSYmKER0PXguZmlsdGVyKER0KSksV1tEdC5pZCgpXS9hdCl9fX1lbHNle2Zvcih2YXIgRD17fSxPPTAsJD0wOyQ8QTskKyspe3ZhciBxPVRbJF07Zy5yb290PXE7dmFyIFM9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGcpO088Uy5kZWdyZWUmJihPPVMuZGVncmVlKSxEW3EuaWQoKV09Uy5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihEdCl7cmV0dXJuIE89PT0wPzA6KG10KER0KSYmKER0PXguZmlsdGVyKER0KSksRFtEdC5pZCgpXS9PKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtnPWFGKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMsQT1nLEQ9QS5yb290LE89QS53ZWlnaHQsJD1BLmRpcmVjdGVkLHE9QS5hbHBoYTtpZihEPXguY29sbGVjdGlvbihEKVswXSwkKXtmb3IodmFyIGF0PUQuY29ubmVjdGVkRWRnZXMoKSxsdD1hdC5maWx0ZXIoZnVuY3Rpb24oS3Qpe3JldHVybiBLdC50YXJnZXQoKS5zYW1lKEQpJiZULmhhcyhLdCl9KSxmdD1hdC5maWx0ZXIoZnVuY3Rpb24oS3Qpe3JldHVybiBLdC5zb3VyY2UoKS5zYW1lKEQpJiZULmhhcyhLdCl9KSxBdD1sdC5sZW5ndGgsa3Q9ZnQubGVuZ3RoLE10PTAsRHQ9MCxqdD0wO2p0PGx0Lmxlbmd0aDtqdCsrKU10Kz1PKGx0W2p0XSk7Zm9yKHZhciBadD0wO1p0PGZ0Lmxlbmd0aDtadCsrKUR0Kz1PKGZ0W1p0XSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KEF0LDEtcSkqTWF0aC5wb3coTXQscSksb3V0ZGVncmVlOk1hdGgucG93KGt0LDEtcSkqTWF0aC5wb3coRHQscSl9fWVsc2V7Zm9yKHZhciBTPUQuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oVCksRz1TLmxlbmd0aCxXPTAsZXQ9MDtldDxTLmxlbmd0aDtldCsrKVcrPU8oU1tldF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coRywxLXEpKk1hdGgucG93KFcscSl9fX19O1Y1LmRjPVY1LmRlZ3JlZUNlbnRyYWxpdHksVjUuZGNuPVY1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPVY1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciBvRj1CZih7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLFU1PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtmb3IodmFyIHg9b0YoZyksVD14Lmhhcm1vbmljLEE9eC53ZWlnaHQsRD14LmRpcmVjdGVkLE89dGhpcy5jeSgpLCQ9e30scT0wLFM9dGhpcy5ub2RlcygpLEc9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6QSxkaXJlY3RlZDpEfSksVz0wO1c8Uy5sZW5ndGg7VysrKXtmb3IodmFyIGV0PTAsYXQ9U1tXXSxsdD0wO2x0PFMubGVuZ3RoO2x0KyspaWYoVyE9PWx0KXt2YXIgZnQ9Ry5kaXN0YW5jZShhdCxTW2x0XSk7VD9ldCs9MS9mdDpldCs9ZnR9VHx8KGV0PTEvZXQpLHE8ZXQmJihxPWV0KSwkW2F0LmlkKCldPWV0fXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oa3Qpe3JldHVybiBxPT0wPzA6KG10KGt0KT9rdD1PLmZpbHRlcihrdClbMF0uaWQoKTprdD1rdC5pZCgpLCRba3RdL3EpfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24oZyl7dmFyIHg9b0YoZyksVD14LnJvb3QsQT14LndlaWdodCxEPXguZGlyZWN0ZWQsTz14Lmhhcm1vbmljO1Q9dGhpcy5maWx0ZXIoVClbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6VCx3ZWlnaHQ6QSxkaXJlY3RlZDpEfSkscT0wLFM9dGhpcy5ub2RlcygpLEc9MDtHPFMubGVuZ3RoO0crKyl7dmFyIFc9U1tHXTtpZighVy5zYW1lKFQpKXt2YXIgZXQ9JC5kaXN0YW5jZVRvKFcpO08/cSs9MS9ldDpxKz1ldH19cmV0dXJuIE8/cToxL3F9fTtVNS5jYz1VNS5jbG9zZW5lc3NDZW50cmFsaXR5LFU1LmNjbj1VNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1VNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgelk9QmYoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksQUw9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtmb3IodmFyIHg9elkoZyksVD14LmRpcmVjdGVkLEE9eC53ZWlnaHQsRD1BIT1udWxsLE89dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLHE9e30sUz17fSxHPTAsVz17c2V0OmZ1bmN0aW9uKER0LGp0KXtTW0R0XT1qdCxqdD5HJiYoRz1qdCl9LGdldDpmdW5jdGlvbihEdCl7cmV0dXJuIFNbRHRdfX0sZXQ9MDtldDwkLmxlbmd0aDtldCsrKXt2YXIgYXQ9JFtldF0sbHQ9YXQuaWQoKTtUP3FbbHRdPWF0Lm91dGdvZXJzKCkubm9kZXMoKTpxW2x0XT1hdC5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxXLnNldChsdCwwKX1mb3IodmFyIGZ0PWZ1bmN0aW9uKER0KXtmb3IodmFyIGp0PSRbRHRdLmlkKCksWnQ9W10sS3Q9e30senQ9e30sZWU9e30sVnQ9bmV3IHZrKGZ1bmN0aW9uKHVyLHRyKXtyZXR1cm4gZWVbdXJdLWVlW3RyXX0pLGZlPTA7ZmU8JC5sZW5ndGg7ZmUrKyl7dmFyIGdlPSRbZmVdLmlkKCk7S3RbZ2VdPVtdLHp0W2dlXT0wLGVlW2dlXT0xLzB9Zm9yKHp0W2p0XT0xLGVlW2p0XT0wLFZ0LnB1c2goanQpOyFWdC5lbXB0eSgpOyl7dmFyIG5lPVZ0LnBvcCgpO2lmKFp0LnB1c2gobmUpLEQpZm9yKHZhciBQZT0wO1BlPHFbbmVdLmxlbmd0aDtQZSsrKXt2YXIgcGU9cVtuZV1bUGVdLGJuPU8uZ2V0RWxlbWVudEJ5SWQobmUpLHplPXZvaWQgMDtibi5lZGdlc1RvKHBlKS5sZW5ndGg+MD96ZT1ibi5lZGdlc1RvKHBlKVswXTp6ZT1wZS5lZGdlc1RvKGJuKVswXTt2YXIgVmU9QSh6ZSk7cGU9cGUuaWQoKSxlZVtwZV0+ZWVbbmVdK1ZlJiYoZWVbcGVdPWVlW25lXStWZSxWdC5ub2Rlcy5pbmRleE9mKHBlKTwwP1Z0LnB1c2gocGUpOlZ0LnVwZGF0ZUl0ZW0ocGUpLHp0W3BlXT0wLEt0W3BlXT1bXSksZWVbcGVdPT1lZVtuZV0rVmUmJih6dFtwZV09enRbcGVdK3p0W25lXSxLdFtwZV0ucHVzaChuZSkpfWVsc2UgZm9yKHZhciBFbj0wO0VuPHFbbmVdLmxlbmd0aDtFbisrKXt2YXIgRG49cVtuZV1bRW5dLmlkKCk7ZWVbRG5dPT0xLzAmJihWdC5wdXNoKERuKSxlZVtEbl09ZWVbbmVdKzEpLGVlW0RuXT09ZWVbbmVdKzEmJih6dFtEbl09enRbRG5dK3p0W25lXSxLdFtEbl0ucHVzaChuZSkpfX1mb3IodmFyIEtuPXt9LFNuPTA7U248JC5sZW5ndGg7U24rKylLblskW1NuXS5pZCgpXT0wO2Zvcig7WnQubGVuZ3RoPjA7KXtmb3IodmFyIFduPVp0LnBvcCgpLHJyPTA7cnI8S3RbV25dLmxlbmd0aDtycisrKXt2YXIgdnI9S3RbV25dW3JyXTtLblt2cl09S25bdnJdK3p0W3ZyXS96dFtXbl0qKDErS25bV25dKX1XbiE9JFtEdF0uaWQoKSYmVy5zZXQoV24sVy5nZXQoV24pK0tuW1duXSl9fSxBdD0wO0F0PCQubGVuZ3RoO0F0KyspZnQoQXQpO3ZhciBrdD17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oRHQpe3ZhciBqdD1PLmNvbGxlY3Rpb24oRHQpLmlkKCk7cmV0dXJuIFcuZ2V0KGp0KX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKER0KXtpZihHPT0wKXJldHVybiAwO3ZhciBqdD1PLmNvbGxlY3Rpb24oRHQpLmlkKCk7cmV0dXJuIFcuZ2V0KGp0KS9HfX07cmV0dXJuIGt0LmJldHdlZW5uZXNzTm9ybWFsaXNlZD1rdC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsa3R9fTtBTC5iYz1BTC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIHFZPUJmKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeSl7cmV0dXJuIDF9XX0pLEhZPWZ1bmN0aW9uKGcpe3JldHVybiBxWShnKX0sR1k9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MCxBPTA7QTx4Lmxlbmd0aDtBKyspVCs9eFtBXShnKTtyZXR1cm4gVH0sVlk9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT0wO0E8eDtBKyspZ1tBKngrQV09VH0sY0Y9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQsQT0wO0E8eDtBKyspe1Q9MDtmb3IodmFyIEQ9MDtEPHg7RCsrKVQrPWdbRCp4K0FdO2Zvcih2YXIgTz0wO088eDtPKyspZ1tPKngrQV09Z1tPKngrQV0vVH19LFVZPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9bmV3IEFycmF5KFQqVCksRD0wO0Q8VDtEKyspe2Zvcih2YXIgTz0wO088VDtPKyspQVtEKlQrT109MDtmb3IodmFyICQ9MDskPFQ7JCsrKWZvcih2YXIgcT0wO3E8VDtxKyspQVtEKlQrcV0rPWdbRCpUKyRdKnhbJCpUK3FdfXJldHVybiBBfSxXWT1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPWcuc2xpY2UoMCksRD0xO0Q8VDtEKyspZz1VWShnLEEseCk7cmV0dXJuIGd9LEtZPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9bmV3IEFycmF5KHgqeCksRD0wO0Q8eCp4O0QrKylBW0RdPU1hdGgucG93KGdbRF0sVCk7cmV0dXJuIGNGKEEseCksQX0sdUY9ZnVuY3Rpb24oZyx4LFQsQSl7Zm9yKHZhciBEPTA7RDxUO0QrKyl7dmFyIE89TWF0aC5yb3VuZChnW0RdKk1hdGgucG93KDEwLEEpKS9NYXRoLnBvdygxMCxBKSwkPU1hdGgucm91bmQoeFtEXSpNYXRoLnBvdygxMCxBKSkvTWF0aC5wb3coMTAsQSk7aWYoTyE9PSQpcmV0dXJuITF9cmV0dXJuITB9LFlZPWZ1bmN0aW9uKGcseCxULEEpe2Zvcih2YXIgRD1bXSxPPTA7Tzx4O08rKyl7Zm9yKHZhciAkPVtdLHE9MDtxPHg7cSsrKU1hdGgucm91bmQoZ1tPKngrcV0qMWUzKS8xZTM+MCYmJC5wdXNoKFRbcV0pOyQubGVuZ3RoIT09MCYmRC5wdXNoKEEuY29sbGVjdGlvbigkKSl9cmV0dXJuIER9LFhZPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspaWYoIXhbVF18fGdbVF0uaWQoKSE9PXhbVF0uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sUVk9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4KyspZm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspeCE9VCYmWFkoZ1t4XSxnW1RdKSYmZy5zcGxpY2UoVCwxKTtyZXR1cm4gZ30sbEY9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PXRoaXMubm9kZXMoKSxUPXRoaXMuZWRnZXMoKSxBPXRoaXMuY3koKSxEPUhZKGcpLE89e30sJD0wOyQ8eC5sZW5ndGg7JCsrKU9beFskXS5pZCgpXT0kO2Zvcih2YXIgcT14Lmxlbmd0aCxTPXEqcSxHPW5ldyBBcnJheShTKSxXLGV0PTA7ZXQ8UztldCsrKUdbZXRdPTA7Zm9yKHZhciBhdD0wO2F0PFQubGVuZ3RoO2F0Kyspe3ZhciBsdD1UW2F0XSxmdD1PW2x0LnNvdXJjZSgpLmlkKCldLEF0PU9bbHQudGFyZ2V0KCkuaWQoKV0sa3Q9R1kobHQsRC5hdHRyaWJ1dGVzKTtHW2Z0KnErQXRdKz1rdCxHW0F0KnErZnRdKz1rdH1WWShHLHEsRC5tdWx0RmFjdG9yKSxjRihHLHEpO2Zvcih2YXIgTXQ9ITAsRHQ9MDtNdCYmRHQ8RC5tYXhJdGVyYXRpb25zOylNdD0hMSxXPVdZKEcscSxELmV4cGFuZEZhY3RvciksRz1LWShXLHEsRC5pbmZsYXRlRmFjdG9yKSx1RihHLFcsUyw0KXx8KE10PSEwKSxEdCsrO3ZhciBqdD1ZWShHLHEseCxBKTtyZXR1cm4ganQ9UVkoanQpLGp0fSxaWT17bWFya292Q2x1c3RlcmluZzpsRixtY2w6bEZ9LEpZPWZ1bmN0aW9uKGcpe3JldHVybiBnfSxoRj1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmFicyh4LWcpfSxmRj1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcraEYoeCxUKX0sZEY9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnK01hdGgucG93KFQteCwyKX0sdFg9ZnVuY3Rpb24oZyl7cmV0dXJuIE1hdGguc3FydChnKX0sZVg9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLGhGKHgsVCkpfSxraz1mdW5jdGlvbihnLHgsVCxBLEQpe2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06SlksJD1BLHEsUyxHPTA7RzxnO0crKylxPXgoRyksUz1UKEcpLCQ9RCgkLHEsUyk7cmV0dXJuIE8oJCl9LFc1PXtldWNsaWRlYW46ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnPj0yP2trKGcseCxULDAsZEYsdFgpOmtrKGcseCxULDAsZkYpfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4ga2soZyx4LFQsMCxkRil9LG1hbmhhdHRhbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIGtrKGcseCxULDAsZkYpfSxtYXg6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBrayhnLHgsVCwtMS8wLGVYKX19O1c1WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPVc1LnNxdWFyZWRFdWNsaWRlYW4sVzUuc3F1YXJlZGV1Y2xpZGVhbj1XNS5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uIEJUKHksZyx4LFQsQSxEKXt2YXIgTztyZXR1cm4geXQoeSk/Tz15Ok89VzVbeV18fFc1LmV1Y2xpZGVhbixnPT09MCYmeXQoeSk/TyhBLEQpOk8oZyx4LFQsQSxEKX12YXIgblg9QmYoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksTEw9ZnVuY3Rpb24oZyl7cmV0dXJuIG5YKGcpfSxSVD1mdW5jdGlvbihnLHgsVCxBLEQpe3ZhciBPPUQhPT0ia01lZG9pZHMiLCQ9Tz9mdW5jdGlvbihXKXtyZXR1cm4gVFtXXX06ZnVuY3Rpb24oVyl7cmV0dXJuIEFbV10oVCl9LHE9ZnVuY3Rpb24oZXQpe3JldHVybiBBW2V0XSh4KX0sUz1ULEc9eDtyZXR1cm4gQlQoZyxBLmxlbmd0aCwkLHEsUyxHKX0sTUw9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT1ULmxlbmd0aCxEPW5ldyBBcnJheShBKSxPPW5ldyBBcnJheShBKSwkPW5ldyBBcnJheSh4KSxxPW51bGwsUz0wO1M8QTtTKyspRFtTXT1nLm1pbihUW1NdKS52YWx1ZSxPW1NdPWcubWF4KFRbU10pLnZhbHVlO2Zvcih2YXIgRz0wO0c8eDtHKyspe3E9W107Zm9yKHZhciBXPTA7VzxBO1crKylxW1ddPU1hdGgucmFuZG9tKCkqKE9bV10tRFtXXSkrRFtXXTskW0ddPXF9cmV0dXJuICR9LGdGPWZ1bmN0aW9uKGcseCxULEEsRCl7Zm9yKHZhciBPPTEvMCwkPTAscT0wO3E8eC5sZW5ndGg7cSsrKXt2YXIgUz1SVChULGcseFtxXSxBLEQpO1M8TyYmKE89UywkPXEpfXJldHVybiAkfSxwRj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPVtdLEQ9bnVsbCxPPTA7Tzx4Lmxlbmd0aDtPKyspRD14W09dLFRbRC5pZCgpXT09PWcmJkEucHVzaChEKTtyZXR1cm4gQX0sclg9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLmFicyh4LWcpPD1UfSxpWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPTA7QTxnLmxlbmd0aDtBKyspZm9yKHZhciBEPTA7RDxnW0FdLmxlbmd0aDtEKyspe3ZhciBPPU1hdGguYWJzKGdbQV1bRF0teFtBXVtEXSk7aWYoTz5UKXJldHVybiExfXJldHVybiEwfSxzWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPTA7QTxUO0ErKylpZihnPT09eFtBXSlyZXR1cm4hMDtyZXR1cm4hMX0sYkY9ZnVuY3Rpb24oZyx4KXt2YXIgVD1uZXcgQXJyYXkoeCk7aWYoZy5sZW5ndGg8NTApZm9yKHZhciBBPTA7QTx4O0ErKyl7Zm9yKHZhciBEPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07c1goRCxULEEpOylEPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07VFtBXT1EfWVsc2UgZm9yKHZhciBPPTA7Tzx4O08rKylUW09dPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07cmV0dXJuIFR9LHZGPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9MCxEPTA7RDx4Lmxlbmd0aDtEKyspQSs9UlQoIm1hbmhhdHRhbiIseFtEXSxnLFQsImtNZWRvaWRzIik7cmV0dXJuIEF9LGFYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxBPW51bGwsRD1MTChnKSxPPW5ldyBBcnJheShELmspLCQ9e30scTtELnRlc3RNb2RlP3R5cGVvZiBELnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhELnRlc3RDZW50cm9pZHMscT1NTChULEQuayxELmF0dHJpYnV0ZXMpKTpmKEQudGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9xPUQudGVzdENlbnRyb2lkczpxPU1MKFQsRC5rLEQuYXR0cmlidXRlcyk6cT1NTChULEQuayxELmF0dHJpYnV0ZXMpO2Zvcih2YXIgUz0hMCxHPTA7UyYmRzxELm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFc9MDtXPFQubGVuZ3RoO1crKylBPVRbV10sJFtBLmlkKCldPWdGKEEscSxELmRpc3RhbmNlLEQuYXR0cmlidXRlcywia01lYW5zIik7Uz0hMTtmb3IodmFyIGV0PTA7ZXQ8RC5rO2V0Kyspe3ZhciBhdD1wRihldCxULCQpO2lmKGF0Lmxlbmd0aCE9PTApe2Zvcih2YXIgbHQ9RC5hdHRyaWJ1dGVzLmxlbmd0aCxmdD1xW2V0XSxBdD1uZXcgQXJyYXkobHQpLGt0PW5ldyBBcnJheShsdCksTXQ9MDtNdDxsdDtNdCsrKXtrdFtNdF09MDtmb3IodmFyIER0PTA7RHQ8YXQubGVuZ3RoO0R0KyspQT1hdFtEdF0sa3RbTXRdKz1ELmF0dHJpYnV0ZXNbTXRdKEEpO0F0W010XT1rdFtNdF0vYXQubGVuZ3RoLHJYKEF0W010XSxmdFtNdF0sRC5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChTPSEwKX1xW2V0XT1BdCxPW2V0XT14LmNvbGxlY3Rpb24oYXQpfX1HKyt9cmV0dXJuIE99LG9YPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxBPW51bGwsRD1MTChnKSxPPW5ldyBBcnJheShELmspLCQscT17fSxTLEc9bmV3IEFycmF5KEQuayk7RC50ZXN0TW9kZT90eXBlb2YgRC50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KGYoRC50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9RC50ZXN0Q2VudHJvaWRzOiQ9YkYoVCxELmspKTokPWJGKFQsRC5rKTtmb3IodmFyIFc9ITAsZXQ9MDtXJiZldDxELm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIGF0PTA7YXQ8VC5sZW5ndGg7YXQrKylBPVRbYXRdLHFbQS5pZCgpXT1nRihBLCQsRC5kaXN0YW5jZSxELmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7Vz0hMTtmb3IodmFyIGx0PTA7bHQ8JC5sZW5ndGg7bHQrKyl7dmFyIGZ0PXBGKGx0LFQscSk7aWYoZnQubGVuZ3RoIT09MCl7R1tsdF09dkYoJFtsdF0sZnQsRC5hdHRyaWJ1dGVzKTtmb3IodmFyIEF0PTA7QXQ8ZnQubGVuZ3RoO0F0KyspUz12RihmdFtBdF0sZnQsRC5hdHRyaWJ1dGVzKSxTPEdbbHRdJiYoR1tsdF09UywkW2x0XT1mdFtBdF0sVz0hMCk7T1tsdF09eC5jb2xsZWN0aW9uKGZ0KX19ZXQrK31yZXR1cm4gT30sY1g9ZnVuY3Rpb24oZyx4LFQsQSxEKXtmb3IodmFyIE8sJCxxPTA7cTx4Lmxlbmd0aDtxKyspZm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspQVtxXVtTXT1NYXRoLnBvdyhUW3FdW1NdLEQubSk7Zm9yKHZhciBHPTA7RzxnLmxlbmd0aDtHKyspZm9yKHZhciBXPTA7VzxELmF0dHJpYnV0ZXMubGVuZ3RoO1crKyl7Tz0wLCQ9MDtmb3IodmFyIGV0PTA7ZXQ8eC5sZW5ndGg7ZXQrKylPKz1BW2V0XVtHXSpELmF0dHJpYnV0ZXNbV10oeFtldF0pLCQrPUFbZXRdW0ddO2dbR11bV109Ty8kfX0sdVg9ZnVuY3Rpb24oZyx4LFQsQSxEKXtmb3IodmFyIE89MDtPPGcubGVuZ3RoO08rKyl4W09dPWdbT10uc2xpY2UoKTtmb3IodmFyICQscSxTLEc9Mi8oRC5tLTEpLFc9MDtXPFQubGVuZ3RoO1crKylmb3IodmFyIGV0PTA7ZXQ8QS5sZW5ndGg7ZXQrKyl7JD0wO2Zvcih2YXIgYXQ9MDthdDxULmxlbmd0aDthdCsrKXE9UlQoRC5kaXN0YW5jZSxBW2V0XSxUW1ddLEQuYXR0cmlidXRlcywiY21lYW5zIiksUz1SVChELmRpc3RhbmNlLEFbZXRdLFRbYXRdLEQuYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3cocS9TLEcpO2dbZXRdW1ddPTEvJH19LGxYPWZ1bmN0aW9uKGcseCxULEEpe2Zvcih2YXIgRD1uZXcgQXJyYXkoVC5rKSxPPTA7TzxELmxlbmd0aDtPKyspRFtPXT1bXTtmb3IodmFyICQscSxTPTA7Uzx4Lmxlbmd0aDtTKyspeyQ9LTEvMCxxPS0xO2Zvcih2YXIgRz0wO0c8eFswXS5sZW5ndGg7RysrKXhbU11bR10+JCYmKCQ9eFtTXVtHXSxxPUcpO0RbcV0ucHVzaChnW1NdKX1mb3IodmFyIFc9MDtXPEQubGVuZ3RoO1crKylEW1ddPUEuY29sbGVjdGlvbihEW1ddKTtyZXR1cm4gRH0sd0Y9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpLFQ9dGhpcy5ub2RlcygpLEE9TEwoZyksRCxPLCQscSxTO3E9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIEc9MDtHPFQubGVuZ3RoO0crKylxW0ddPW5ldyBBcnJheShBLmspOyQ9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFc9MDtXPFQubGVuZ3RoO1crKykkW1ddPW5ldyBBcnJheShBLmspO2Zvcih2YXIgZXQ9MDtldDxULmxlbmd0aDtldCsrKXtmb3IodmFyIGF0PTAsbHQ9MDtsdDxBLms7bHQrKykkW2V0XVtsdF09TWF0aC5yYW5kb20oKSxhdCs9JFtldF1bbHRdO2Zvcih2YXIgZnQ9MDtmdDxBLms7ZnQrKykkW2V0XVtmdF09JFtldF1bZnRdL2F0fU89bmV3IEFycmF5KEEuayk7Zm9yKHZhciBBdD0wO0F0PEEuaztBdCsrKU9bQXRdPW5ldyBBcnJheShBLmF0dHJpYnV0ZXMubGVuZ3RoKTtTPW5ldyBBcnJheShULmxlbmd0aCk7Zm9yKHZhciBrdD0wO2t0PFQubGVuZ3RoO2t0KyspU1trdF09bmV3IEFycmF5KEEuayk7Zm9yKHZhciBNdD0hMCxEdD0wO010JiZEdDxBLm1heEl0ZXJhdGlvbnM7KU10PSExLGNYKE8sVCwkLFMsQSksdVgoJCxxLE8sVCxBKSxpWCgkLHEsQS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChNdD0hMCksRHQrKztyZXR1cm4gRD1sWChULCQsQSx4KSx7Y2x1c3RlcnM6RCxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGhYPXtrTWVhbnM6YVgsa01lZG9pZHM6b1gsZnV6enlDTWVhbnM6d0YsZmNtOndGfSxmWD1CZih7ZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbGlua2FnZToibWluIixtb2RlOiJ0aHJlc2hvbGQiLHRocmVzaG9sZDoxLzAsYWRkRGVuZHJvZ3JhbTohMSxkZW5kcm9ncmFtRGVwdGg6MCxhdHRyaWJ1dGVzOltdfSksZFg9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0sZ1g9ZnVuY3Rpb24oZyl7dmFyIHg9ZlgoZyksVD1kWFt4LmxpbmthZ2VdO3JldHVybiBUIT1udWxsJiYoeC5saW5rYWdlPVQpLHh9LG1GPWZ1bmN0aW9uKGcseCxULEEsRCl7Zm9yKHZhciBPPTAsJD0xLzAscSxTPUQuYXR0cmlidXRlcyxHPWZ1bmN0aW9uKFZ0LGZlKXtyZXR1cm4gQlQoRC5kaXN0YW5jZSxTLmxlbmd0aCxmdW5jdGlvbihnZSl7cmV0dXJuIFNbZ2VdKFZ0KX0sZnVuY3Rpb24oZ2Upe3JldHVybiBTW2dlXShmZSl9LFZ0LGZlKX0sVz0wO1c8Zy5sZW5ndGg7VysrKXt2YXIgZXQ9Z1tXXS5rZXksYXQ9VFtldF1bQVtldF1dO2F0PCQmJihPPWV0LCQ9YXQpfWlmKEQubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1ELnRocmVzaG9sZHx8RC5tb2RlPT09ImRlbmRyb2dyYW0iJiZnLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIGx0PXhbT10sZnQ9eFtBW09dXSxBdDtELm1vZGU9PT0iZGVuZHJvZ3JhbSI/QXQ9e2xlZnQ6bHQscmlnaHQ6ZnQsa2V5Omx0LmtleX06QXQ9e3ZhbHVlOmx0LnZhbHVlLmNvbmNhdChmdC52YWx1ZSksa2V5Omx0LmtleX0sZ1tsdC5pbmRleF09QXQsZy5zcGxpY2UoZnQuaW5kZXgsMSkseFtsdC5rZXldPUF0O2Zvcih2YXIga3Q9MDtrdDxnLmxlbmd0aDtrdCsrKXt2YXIgTXQ9Z1trdF07bHQua2V5PT09TXQua2V5P3E9MS8wOkQubGlua2FnZT09PSJtaW4iPyhxPVRbbHQua2V5XVtNdC5rZXldLFRbbHQua2V5XVtNdC5rZXldPlRbZnQua2V5XVtNdC5rZXldJiYocT1UW2Z0LmtleV1bTXQua2V5XSkpOkQubGlua2FnZT09PSJtYXgiPyhxPVRbbHQua2V5XVtNdC5rZXldLFRbbHQua2V5XVtNdC5rZXldPFRbZnQua2V5XVtNdC5rZXldJiYocT1UW2Z0LmtleV1bTXQua2V5XSkpOkQubGlua2FnZT09PSJtZWFuIj9xPShUW2x0LmtleV1bTXQua2V5XSpsdC5zaXplK1RbZnQua2V5XVtNdC5rZXldKmZ0LnNpemUpLyhsdC5zaXplK2Z0LnNpemUpOkQubW9kZT09PSJkZW5kcm9ncmFtIj9xPUcoTXQudmFsdWUsbHQudmFsdWUpOnE9RyhNdC52YWx1ZVswXSxsdC52YWx1ZVswXSksVFtsdC5rZXldW010LmtleV09VFtNdC5rZXldW2x0LmtleV09cX1mb3IodmFyIER0PTA7RHQ8Zy5sZW5ndGg7RHQrKyl7dmFyIGp0PWdbRHRdLmtleTtpZihBW2p0XT09PWx0LmtleXx8QVtqdF09PT1mdC5rZXkpe2Zvcih2YXIgWnQ9anQsS3Q9MDtLdDxnLmxlbmd0aDtLdCsrKXt2YXIgenQ9Z1tLdF0ua2V5O1RbanRdW3p0XTxUW2p0XVtadF0mJihadD16dCl9QVtqdF09WnR9Z1tEdF0uaW5kZXg9RHR9cmV0dXJuIGx0LmtleT1mdC5rZXk9bHQuaW5kZXg9ZnQuaW5kZXg9bnVsbCwhMH0salQ9ZnVuY3Rpb24geShnLHgsVCl7ZyYmKGcudmFsdWU/eC5wdXNoKGcudmFsdWUpOihnLmxlZnQmJnkoZy5sZWZ0LHgpLGcucmlnaHQmJnkoZy5yaWdodCx4KSkpfSxwWD1mdW5jdGlvbiB5KGcseCl7aWYoIWcpcmV0dXJuIiI7aWYoZy5sZWZ0JiZnLnJpZ2h0KXt2YXIgVD15KGcubGVmdCx4KSxBPXkoZy5yaWdodCx4KSxEPXguYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOlQrIiwiK0F9fSk7cmV0dXJuIHguYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpULHRhcmdldDpELmlkKCl9fSkseC5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7c291cmNlOkEsdGFyZ2V0OkQuaWQoKX19KSxELmlkKCl9ZWxzZSBpZihnLnZhbHVlKXJldHVybiBnLnZhbHVlLmlkKCl9LGJYPWZ1bmN0aW9uIHkoZyx4LFQpe2lmKCFnKXJldHVybltdO3ZhciBBPVtdLEQ9W10sTz1bXTtyZXR1cm4geD09PTA/KGcubGVmdCYmalQoZy5sZWZ0LEEpLGcucmlnaHQmJmpUKGcucmlnaHQsRCksTz1BLmNvbmNhdChEKSxbVC5jb2xsZWN0aW9uKE8pXSk6eD09PTE/Zy52YWx1ZT9bVC5jb2xsZWN0aW9uKGcudmFsdWUpXTooZy5sZWZ0JiZqVChnLmxlZnQsQSksZy5yaWdodCYmalQoZy5yaWdodCxEKSxbVC5jb2xsZWN0aW9uKEEpLFQuY29sbGVjdGlvbihEKV0pOmcudmFsdWU/W1QuY29sbGVjdGlvbihnLnZhbHVlKV06KGcubGVmdCYmKEE9eShnLmxlZnQseC0xLFQpKSxnLnJpZ2h0JiYoRD15KGcucmlnaHQseC0xLFQpKSxBLmNvbmNhdChEKSl9LHlGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksQT1nWChnKSxEPUEuYXR0cmlidXRlcyxPPWZ1bmN0aW9uKER0LGp0KXtyZXR1cm4gQlQoQS5kaXN0YW5jZSxELmxlbmd0aCxmdW5jdGlvbihadCl7cmV0dXJuIERbWnRdKER0KX0sZnVuY3Rpb24oWnQpe3JldHVybiBEW1p0XShqdCl9LER0LGp0KX0sJD1bXSxxPVtdLFM9W10sRz1bXSxXPTA7VzxULmxlbmd0aDtXKyspe3ZhciBldD17dmFsdWU6QS5tb2RlPT09ImRlbmRyb2dyYW0iP1RbV106W1RbV11dLGtleTpXLGluZGV4Old9OyRbV109ZXQsR1tXXT1ldCxxW1ddPVtdLFNbV109MH1mb3IodmFyIGF0PTA7YXQ8JC5sZW5ndGg7YXQrKylmb3IodmFyIGx0PTA7bHQ8PWF0O2x0Kyspe3ZhciBmdD12b2lkIDA7QS5tb2RlPT09ImRlbmRyb2dyYW0iP2Z0PWF0PT09bHQ/MS8wOk8oJFthdF0udmFsdWUsJFtsdF0udmFsdWUpOmZ0PWF0PT09bHQ/MS8wOk8oJFthdF0udmFsdWVbMF0sJFtsdF0udmFsdWVbMF0pLHFbYXRdW2x0XT1mdCxxW2x0XVthdF09ZnQsZnQ8cVthdF1bU1thdF1dJiYoU1thdF09bHQpfWZvcih2YXIgQXQ9bUYoJCxHLHEsUyxBKTtBdDspQXQ9bUYoJCxHLHEsUyxBKTt2YXIga3Q7cmV0dXJuIEEubW9kZT09PSJkZW5kcm9ncmFtIj8oa3Q9YlgoJFswXSxBLmRlbmRyb2dyYW1EZXB0aCx4KSxBLmFkZERlbmRyb2dyYW0mJnBYKCRbMF0seCkpOihrdD1uZXcgQXJyYXkoJC5sZW5ndGgpLCQuZm9yRWFjaChmdW5jdGlvbihNdCxEdCl7TXQua2V5PU10LmluZGV4PW51bGwsa3RbRHRdPXguY29sbGVjdGlvbihNdC52YWx1ZSl9KSksa3R9LHZYPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOnlGLGhjYTp5Rn0sd1g9QmYoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLHByZWZlcmVuY2U6Im1lZGlhbiIsZGFtcGluZzouOCxtYXhJdGVyYXRpb25zOjFlMyxtaW5JdGVyYXRpb25zOjEwMCxhdHRyaWJ1dGVzOltdfSksbVg9ZnVuY3Rpb24oZyl7dmFyIHg9Zy5kYW1waW5nLFQ9Zy5wcmVmZXJlbmNlOy41PD14JiZ4PDF8fGJsKCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6ICIuY29uY2F0KHgpKTt2YXIgQT1bIm1lZGlhbiIsIm1lYW4iLCJtaW4iLCJtYXgiXTtyZXR1cm4gQS5zb21lKGZ1bmN0aW9uKEQpe3JldHVybiBEPT09VH0pfHxYKFQpfHxibCgiUHJlZmVyZW5jZSBtdXN0IGJlIG9uZSBvZiBbIi5jb25jYXQoQS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIiciLmNvbmNhdChELCInIil9KS5qb2luKCIsICIpLCJdIG9yIGEgbnVtYmVyLiAgR290OiAiKS5jb25jYXQoVCkpLHdYKGcpfSx5WD1mdW5jdGlvbihnLHgsVCxBKXt2YXIgRD1mdW5jdGlvbigkLHEpe3JldHVybiBBW3FdKCQpfTtyZXR1cm4tQlQoZyxBLmxlbmd0aCxmdW5jdGlvbihPKXtyZXR1cm4gRCh4LE8pfSxmdW5jdGlvbihPKXtyZXR1cm4gRChULE8pfSx4LFQpfSx4WD1mdW5jdGlvbihnLHgpe3ZhciBUPW51bGw7cmV0dXJuIHg9PT0ibWVkaWFuIj9UPXlZKGcpOng9PT0ibWVhbiI/VD1tWShnKTp4PT09Im1pbiI/VD12WShnKTp4PT09Im1heCI/VD13WShnKTpUPXgsVH0sa1g9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT1bXSxEPTA7RDxnO0QrKyl4W0QqZytEXStUW0QqZytEXT4wJiZBLnB1c2goRCk7cmV0dXJuIEF9LHhGPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9W10sRD0wO0Q8ZztEKyspe2Zvcih2YXIgTz0tMSwkPS0xLzAscT0wO3E8VC5sZW5ndGg7cSsrKXt2YXIgUz1UW3FdO3hbRCpnK1NdPiQmJihPPVMsJD14W0QqZytTXSl9Tz4wJiZBLnB1c2goTyl9Zm9yKHZhciBHPTA7RzxULmxlbmd0aDtHKyspQVtUW0ddXT1UW0ddO3JldHVybiBBfSxFWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPXhGKGcseCxUKSxEPTA7RDxULmxlbmd0aDtEKyspe2Zvcih2YXIgTz1bXSwkPTA7JDxBLmxlbmd0aDskKyspQVskXT09PVRbRF0mJk8ucHVzaCgkKTtmb3IodmFyIHE9LTEsUz0tMS8wLEc9MDtHPE8ubGVuZ3RoO0crKyl7Zm9yKHZhciBXPTAsZXQ9MDtldDxPLmxlbmd0aDtldCsrKVcrPXhbT1tldF0qZytPW0ddXTtXPlMmJihxPUcsUz1XKX1UW0RdPU9bcV19cmV0dXJuIEE9eEYoZyx4LFQpLEF9LGtGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksQT1tWChnKSxEPXt9LE89MDtPPFQubGVuZ3RoO08rKylEW1RbT10uaWQoKV09Tzt2YXIgJCxxLFMsRyxXLGV0OyQ9VC5sZW5ndGgscT0kKiQsUz1uZXcgQXJyYXkocSk7Zm9yKHZhciBhdD0wO2F0PHE7YXQrKylTW2F0XT0tMS8wO2Zvcih2YXIgbHQ9MDtsdDwkO2x0KyspZm9yKHZhciBmdD0wO2Z0PCQ7ZnQrKylsdCE9PWZ0JiYoU1tsdCokK2Z0XT15WChBLmRpc3RhbmNlLFRbbHRdLFRbZnRdLEEuYXR0cmlidXRlcykpO0c9eFgoUyxBLnByZWZlcmVuY2UpO2Zvcih2YXIgQXQ9MDtBdDwkO0F0KyspU1tBdCokK0F0XT1HO1c9bmV3IEFycmF5KHEpO2Zvcih2YXIga3Q9MDtrdDxxO2t0KyspV1trdF09MDtldD1uZXcgQXJyYXkocSk7Zm9yKHZhciBNdD0wO010PHE7TXQrKylldFtNdF09MDtmb3IodmFyIER0PW5ldyBBcnJheSgkKSxqdD1uZXcgQXJyYXkoJCksWnQ9bmV3IEFycmF5KCQpLEt0PTA7S3Q8JDtLdCsrKUR0W0t0XT0wLGp0W0t0XT0wLFp0W0t0XT0wO2Zvcih2YXIgenQ9bmV3IEFycmF5KCQqQS5taW5JdGVyYXRpb25zKSxlZT0wO2VlPHp0Lmxlbmd0aDtlZSsrKXp0W2VlXT0wO3ZhciBWdDtmb3IoVnQ9MDtWdDxBLm1heEl0ZXJhdGlvbnM7VnQrKyl7Zm9yKHZhciBmZT0wO2ZlPCQ7ZmUrKyl7Zm9yKHZhciBnZT0tMS8wLG5lPS0xLzAsUGU9LTEscGU9MCxibj0wO2JuPCQ7Ym4rKylEdFtibl09V1tmZSokK2JuXSxwZT1ldFtmZSokK2JuXStTW2ZlKiQrYm5dLHBlPj1nZT8obmU9Z2UsZ2U9cGUsUGU9Ym4pOnBlPm5lJiYobmU9cGUpO2Zvcih2YXIgemU9MDt6ZTwkO3plKyspV1tmZSokK3plXT0oMS1BLmRhbXBpbmcpKihTW2ZlKiQremVdLWdlKStBLmRhbXBpbmcqRHRbemVdO1dbZmUqJCtQZV09KDEtQS5kYW1waW5nKSooU1tmZSokK1BlXS1uZSkrQS5kYW1waW5nKkR0W1BlXX1mb3IodmFyIFZlPTA7VmU8JDtWZSsrKXtmb3IodmFyIEVuPTAsRG49MDtEbjwkO0RuKyspRHRbRG5dPWV0W0RuKiQrVmVdLGp0W0RuXT1NYXRoLm1heCgwLFdbRG4qJCtWZV0pLEVuKz1qdFtEbl07RW4tPWp0W1ZlXSxqdFtWZV09V1tWZSokK1ZlXSxFbis9anRbVmVdO2Zvcih2YXIgS249MDtLbjwkO0tuKyspZXRbS24qJCtWZV09KDEtQS5kYW1waW5nKSpNYXRoLm1pbigwLEVuLWp0W0tuXSkrQS5kYW1waW5nKkR0W0tuXTtldFtWZSokK1ZlXT0oMS1BLmRhbXBpbmcpKihFbi1qdFtWZV0pK0EuZGFtcGluZypEdFtWZV19Zm9yKHZhciBTbj0wLFduPTA7V248JDtXbisrKXt2YXIgcnI9ZXRbV24qJCtXbl0rV1tXbiokK1duXT4wPzE6MDt6dFtWdCVBLm1pbkl0ZXJhdGlvbnMqJCtXbl09cnIsU24rPXJyfWlmKFNuPjAmJihWdD49QS5taW5JdGVyYXRpb25zLTF8fFZ0PT1BLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgdnI9MCx1cj0wO3VyPCQ7dXIrKyl7WnRbdXJdPTA7Zm9yKHZhciB0cj0wO3RyPEEubWluSXRlcmF0aW9uczt0cisrKVp0W3VyXSs9enRbdHIqJCt1cl07KFp0W3VyXT09PTB8fFp0W3VyXT09PUEubWluSXRlcmF0aW9ucykmJnZyKyt9aWYodnI9PT0kKWJyZWFrfX1mb3IodmFyIHduPWtYKCQsVyxldCksZ3I9RVgoJCxTLHduKSxmcj17fSxKcj0wO0pyPHduLmxlbmd0aDtKcisrKWZyW3duW0pyXV09W107Zm9yKHZhciB3aT0wO3dpPFQubGVuZ3RoO3dpKyspe3ZhciBLcz1EW1Rbd2ldLmlkKCldLGthPWdyW0tzXTtrYSE9bnVsbCYmZnJba2FdLnB1c2goVFt3aV0pfWZvcih2YXIgQ2k9bmV3IEFycmF5KHduLmxlbmd0aCksaGk9MDtoaTx3bi5sZW5ndGg7aGkrKylDaVtoaV09eC5jb2xsZWN0aW9uKGZyW3duW2hpXV0pO3JldHVybiBDaX0sVFg9e2FmZmluaXR5UHJvcGFnYXRpb246a0YsYXA6a0Z9LENYPUJmKHtyb290OnZvaWQgMCxkaXJlY3RlZDohMX0pLF9YPXtoaWVyaG9semVyOmZ1bmN0aW9uKGcpe2lmKCFodChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSxkaXJlY3RlZDp4WzFdfX12YXIgVD1DWChnKSxBPVQucm9vdCxEPVQuZGlyZWN0ZWQsTz10aGlzLCQ9ITEscSxTLEc7QSYmKEc9bXQoQSk/dGhpcy5maWx0ZXIoQSlbMF0uaWQoKTpBWzBdLmlkKCkpO3ZhciBXPXt9LGV0PXt9O0Q/Ty5mb3JFYWNoKGZ1bmN0aW9uKE10KXt2YXIgRHQ9TXQuaWQoKTtpZihNdC5pc05vZGUoKSl7dmFyIGp0PU10LmluZGVncmVlKCEwKSxadD1NdC5vdXRkZWdyZWUoITApLEt0PWp0LVp0LHp0PVp0LWp0O0t0PT0xP3E/JD0hMDpxPUR0Onp0PT0xP1M/JD0hMDpTPUR0Oih6dD4xfHxLdD4xKSYmKCQ9ITApLFdbRHRdPVtdLE10Lm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihlZSl7ZWUuaXNFZGdlKCkmJldbRHRdLnB1c2goZWUuaWQoKSl9KX1lbHNlIGV0W0R0XT1bdm9pZCAwLE10LnRhcmdldCgpLmlkKCldfSk6Ty5mb3JFYWNoKGZ1bmN0aW9uKE10KXt2YXIgRHQ9TXQuaWQoKTtpZihNdC5pc05vZGUoKSl7dmFyIGp0PU10LmRlZ3JlZSghMCk7anQlMiYmKHE/Uz8kPSEwOlM9RHQ6cT1EdCksV1tEdF09W10sTXQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFp0KXtyZXR1cm4gV1tEdF0ucHVzaChadC5pZCgpKX0pfWVsc2UgZXRbRHRdPVtNdC5zb3VyY2UoKS5pZCgpLE10LnRhcmdldCgpLmlkKCldfSk7dmFyIGF0PXtmb3VuZDohMSx0cmFpbDp2b2lkIDB9O2lmKCQpcmV0dXJuIGF0O2lmKFMmJnEpaWYoRCl7aWYoRyYmUyE9RylyZXR1cm4gYXQ7Rz1TfWVsc2V7aWYoRyYmUyE9RyYmcSE9RylyZXR1cm4gYXQ7R3x8KEc9Uyl9ZWxzZSBHfHwoRz1PWzBdLmlkKCkpO3ZhciBsdD1mdW5jdGlvbihEdCl7Zm9yKHZhciBqdD1EdCxadD1bRHRdLEt0LHp0LGVlO1dbanRdLmxlbmd0aDspS3Q9V1tqdF0uc2hpZnQoKSx6dD1ldFtLdF1bMF0sZWU9ZXRbS3RdWzFdLGp0IT1lZT8oV1tlZV09V1tlZV0uZmlsdGVyKGZ1bmN0aW9uKFZ0KXtyZXR1cm4gVnQhPUt0fSksanQ9ZWUpOiFEJiZqdCE9enQmJihXW3p0XT1XW3p0XS5maWx0ZXIoZnVuY3Rpb24oVnQpe3JldHVybiBWdCE9S3R9KSxqdD16dCksWnQudW5zaGlmdChLdCksWnQudW5zaGlmdChqdCk7cmV0dXJuIFp0fSxmdD1bXSxBdD1bXTtmb3IoQXQ9bHQoRyk7QXQubGVuZ3RoIT0xOylXW0F0WzBdXS5sZW5ndGg9PTA/KGZ0LnVuc2hpZnQoTy5nZXRFbGVtZW50QnlJZChBdC5zaGlmdCgpKSksZnQudW5zaGlmdChPLmdldEVsZW1lbnRCeUlkKEF0LnNoaWZ0KCkpKSk6QXQ9bHQoQXQuc2hpZnQoKSkuY29uY2F0KEF0KTtmdC51bnNoaWZ0KE8uZ2V0RWxlbWVudEJ5SWQoQXQuc2hpZnQoKSkpO2Zvcih2YXIga3QgaW4gVylpZihXW2t0XS5sZW5ndGgpcmV0dXJuIGF0O3JldHVybiBhdC5mb3VuZD0hMCxhdC50cmFpbD10aGlzLnNwYXduKGZ0LCEwKSxhdH19LCRUPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXt9LFQ9MCxBPTAsRD1bXSxPPVtdLCQ9e30scT1mdW5jdGlvbihldCxhdCl7Zm9yKHZhciBsdD1PLmxlbmd0aC0xLGZ0PVtdLEF0PWcuc3Bhd24oKTtPW2x0XS54IT1ldHx8T1tsdF0ueSE9YXQ7KWZ0LnB1c2goTy5wb3AoKS5lZGdlKSxsdC0tO2Z0LnB1c2goTy5wb3AoKS5lZGdlKSxmdC5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgTXQ9a3QuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZyk7QXQubWVyZ2Uoa3QpLE10LmZvckVhY2goZnVuY3Rpb24oRHQpe3ZhciBqdD1EdC5pZCgpLFp0PUR0LmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO0F0Lm1lcmdlKER0KSx4W2p0XS5jdXRWZXJ0ZXg/QXQubWVyZ2UoWnQuZmlsdGVyKGZ1bmN0aW9uKEt0KXtyZXR1cm4gS3QuaXNMb29wKCl9KSk6QXQubWVyZ2UoWnQpfSl9KSxELnB1c2goQXQpfSxTPWZ1bmN0aW9uIFcoZXQsYXQsbHQpe2V0PT09bHQmJihBKz0xKSx4W2F0XT17aWQ6VCxsb3c6VCsrLGN1dFZlcnRleDohMX07dmFyIGZ0PWcuZ2V0RWxlbWVudEJ5SWQoYXQpLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO2lmKGZ0LnNpemUoKT09PTApRC5wdXNoKGcuc3Bhd24oZy5nZXRFbGVtZW50QnlJZChhdCkpKTtlbHNle3ZhciBBdCxrdCxNdCxEdDtmdC5mb3JFYWNoKGZ1bmN0aW9uKGp0KXtBdD1qdC5zb3VyY2UoKS5pZCgpLGt0PWp0LnRhcmdldCgpLmlkKCksTXQ9QXQ9PT1hdD9rdDpBdCxNdCE9PWx0JiYoRHQ9anQuaWQoKSwkW0R0XXx8KCRbRHRdPSEwLE8ucHVzaCh7eDphdCx5Ok10LGVkZ2U6anR9KSksTXQgaW4geD94W2F0XS5sb3c9TWF0aC5taW4oeFthdF0ubG93LHhbTXRdLmlkKTooVyhldCxNdCxhdCkseFthdF0ubG93PU1hdGgubWluKHhbYXRdLmxvdyx4W010XS5sb3cpLHhbYXRdLmlkPD14W010XS5sb3cmJih4W2F0XS5jdXRWZXJ0ZXg9ITAscShhdCxNdCkpKSl9KX19O2cuZm9yRWFjaChmdW5jdGlvbihXKXtpZihXLmlzTm9kZSgpKXt2YXIgZXQ9Vy5pZCgpO2V0IGluIHh8fChBPTAsUyhldCxldCkseFtldF0uY3V0VmVydGV4PUE+MSl9fSk7dmFyIEc9T2JqZWN0LmtleXMoeCkuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiB4W1ddLmN1dFZlcnRleH0pLm1hcChmdW5jdGlvbihXKXtyZXR1cm4gZy5nZXRFbGVtZW50QnlJZChXKX0pO3JldHVybntjdXQ6Zy5zcGF3bihHKSxjb21wb25lbnRzOkR9fSxTWD17aG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZDokVCxodGJjOiRULGh0YjokVCxob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkQ29tcG9uZW50czokVH0selQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLHg9e30sVD0wLEE9W10sRD1bXSxPPWcuc3Bhd24oZyksJD1mdW5jdGlvbiBxKFMpe0QucHVzaChTKSx4W1NdPXtpbmRleDpULGxvdzpUKyssZXhwbG9yZWQ6ITF9O3ZhciBHPWcuZ2V0RWxlbWVudEJ5SWQoUykuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZyk7aWYoRy5mb3JFYWNoKGZ1bmN0aW9uKGZ0KXt2YXIgQXQ9ZnQudGFyZ2V0KCkuaWQoKTtBdCE9PVMmJihBdCBpbiB4fHxxKEF0KSx4W0F0XS5leHBsb3JlZHx8KHhbU10ubG93PU1hdGgubWluKHhbU10ubG93LHhbQXRdLmxvdykpKX0pLHhbU10uaW5kZXg9PT14W1NdLmxvdyl7Zm9yKHZhciBXPWcuc3Bhd24oKTs7KXt2YXIgZXQ9RC5wb3AoKTtpZihXLm1lcmdlKGcuZ2V0RWxlbWVudEJ5SWQoZXQpKSx4W2V0XS5sb3c9eFtTXS5pbmRleCx4W2V0XS5leHBsb3JlZD0hMCxldD09PVMpYnJlYWt9dmFyIGF0PVcuZWRnZXNXaXRoKFcpLGx0PVcubWVyZ2UoYXQpO0EucHVzaChsdCksTz1PLmRpZmZlcmVuY2UobHQpfX07cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbihxKXtpZihxLmlzTm9kZSgpKXt2YXIgUz1xLmlkKCk7UyBpbiB4fHwkKFMpfX0pLHtjdXQ6Tyxjb21wb25lbnRzOkF9fSxBWD17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6elQsdHNjOnpULHRzY2M6elQsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOnpUfSxFRj17fTtbYmssc1ksYVksY1ksbFksZlkscFksJFksVjUsVTUsQUwsWlksaFgsdlgsVFgsX1gsU1gsQVhdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoRUYseSl9KTsvKiEKRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQpDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiovdmFyIFRGPTAsQ0Y9MSxfRj0yLGh2PWZ1bmN0aW9uIHkoZyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeSkpcmV0dXJuIG5ldyB5KGcpO3RoaXMuaWQ9IlRoZW5hYmxlLzEuMC43Iix0aGlzLnN0YXRlPVRGLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGc9PSJmdW5jdGlvbiImJmcuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfTtodi5wcm90b3R5cGU9e2Z1bGZpbGw6ZnVuY3Rpb24oZyl7cmV0dXJuIFNGKHRoaXMsQ0YsImZ1bGZpbGxWYWx1ZSIsZyl9LHJlamVjdDpmdW5jdGlvbihnKXtyZXR1cm4gU0YodGhpcyxfRiwicmVqZWN0UmVhc29uIixnKX0sdGhlbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMsQT1uZXcgaHY7cmV0dXJuIFQub25GdWxmaWxsZWQucHVzaChNRihnLEEsImZ1bGZpbGwiKSksVC5vblJlamVjdGVkLnB1c2goTUYoeCxBLCJyZWplY3QiKSksQUYoVCksQS5wcm94eX19O3ZhciBTRj1mdW5jdGlvbihnLHgsVCxBKXtyZXR1cm4gZy5zdGF0ZT09PVRGJiYoZy5zdGF0ZT14LGdbVF09QSxBRihnKSksZ30sQUY9ZnVuY3Rpb24oZyl7Zy5zdGF0ZT09PUNGP0xGKGcsIm9uRnVsZmlsbGVkIixnLmZ1bGZpbGxWYWx1ZSk6Zy5zdGF0ZT09PV9GJiZMRihnLCJvblJlamVjdGVkIixnLnJlamVjdFJlYXNvbil9LExGPWZ1bmN0aW9uKGcseCxUKXtpZihnW3hdLmxlbmd0aCE9PTApe3ZhciBBPWdbeF07Z1t4XT1bXTt2YXIgRD1mdW5jdGlvbigpe2Zvcih2YXIgJD0wOyQ8QS5sZW5ndGg7JCsrKUFbJF0oVCl9O3R5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiI/c2V0SW1tZWRpYXRlKEQpOnNldFRpbWVvdXQoRCwwKX19LE1GPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZnVuY3Rpb24oQSl7aWYodHlwZW9mIGchPSJmdW5jdGlvbiIpeFtUXS5jYWxsKHgsQSk7ZWxzZXt2YXIgRDt0cnl7RD1nKEEpfWNhdGNoKE8pe3gucmVqZWN0KE8pO3JldHVybn1MWCh4LEQpfX19LExYPWZ1bmN0aW9uIHkoZyx4KXtpZihnPT09eHx8Zy5wcm94eT09PXgpe2cucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYiKSk7cmV0dXJufXZhciBUO2lmKGYoeCk9PT0ib2JqZWN0IiYmeCE9PW51bGx8fHR5cGVvZiB4PT0iZnVuY3Rpb24iKXRyeXtUPXgudGhlbn1jYXRjaChEKXtnLnJlamVjdChEKTtyZXR1cm59aWYodHlwZW9mIFQ9PSJmdW5jdGlvbiIpe3ZhciBBPSExO3RyeXtULmNhbGwoeCxmdW5jdGlvbihEKXtBfHwoQT0hMCxEPT09eD9nLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp5KGcsRCkpfSxmdW5jdGlvbihEKXtBfHwoQT0hMCxnLnJlamVjdChEKSl9KX1jYXRjaChEKXtBfHxnLnJlamVjdChEKX1yZXR1cm59Zy5mdWxmaWxsKHgpfTtodi5hbGw9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBodihmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD1uZXcgQXJyYXkoeS5sZW5ndGgpLEE9MCxEPWZ1bmN0aW9uKHEsUyl7VFtxXT1TLEErKyxBPT09eS5sZW5ndGgmJmcoVCl9LE89MDtPPHkubGVuZ3RoO08rKykoZnVuY3Rpb24oJCl7dmFyIHE9eVskXSxTPXEhPW51bGwmJnEudGhlbiE9bnVsbDtpZihTKXEudGhlbihmdW5jdGlvbihXKXtEKCQsVyl9LGZ1bmN0aW9uKFcpe3goVyl9KTtlbHNle3ZhciBHPXE7RCgkLEcpfX0pKE8pfSl9LGh2LnJlc29sdmU9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBodihmdW5jdGlvbihnLHgpe2coeSl9KX0saHYucmVqZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgaHYoZnVuY3Rpb24oZyx4KXt4KHkpfSl9O3ZhciBLNT10eXBlb2YgUHJvbWlzZTwidSI/UHJvbWlzZTpodixxVD1mdW5jdGlvbihnLHgsVCl7dmFyIEE9TnQoZyksRD0hQSxPPXRoaXMuX3ByaXZhdGU9bWUoe2R1cmF0aW9uOjFlM30seCxUKTtpZihPLnRhcmdldD1nLE8uc3R5bGU9Ty5zdHlsZXx8Ty5jc3MsTy5zdGFydGVkPSExLE8ucGxheWluZz0hMSxPLmhvb2tlZD0hMSxPLmFwcGx5aW5nPSExLE8ucHJvZ3Jlc3M9MCxPLmNvbXBsZXRlcz1bXSxPLmZyYW1lcz1bXSxPLmNvbXBsZXRlJiZ5dChPLmNvbXBsZXRlKSYmTy5jb21wbGV0ZXMucHVzaChPLmNvbXBsZXRlKSxEKXt2YXIgJD1nLnBvc2l0aW9uKCk7Ty5zdGFydFBvc2l0aW9uPU8uc3RhcnRQb3NpdGlvbnx8e3g6JC54LHk6JC55fSxPLnN0YXJ0U3R5bGU9Ty5zdGFydFN0eWxlfHxnLmN5KCkuc3R5bGUoKS5nZXRBbmltYXRpb25TdGFydFN0eWxlKGcsTy5zdHlsZSl9aWYoQSl7dmFyIHE9Zy5wYW4oKTtPLnN0YXJ0UGFuPXt4OnEueCx5OnEueX0sTy5zdGFydFpvb209Zy56b29tKCl9dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXN9LF8zPXFULnByb3RvdHlwZTttZShfMyx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iYW5pbWF0aW9uIn0saG9vazpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoIWcuaG9va2VkKXt2YXIgeCxUPWcudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtnLnF1ZXVlP3g9VC5xdWV1ZTp4PVQuY3VycmVudCx4LnB1c2godGhpcykseHQoZy50YXJnZXQpJiZnLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChnLnRhcmdldCksZy5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlO3JldHVybiBnLnByb2dyZXNzPT09MSYmKGcucHJvZ3Jlc3M9MCksZy5wbGF5aW5nPSEwLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30scGxheWluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnBsYXlpbmd9LGFwcGx5OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5hcHBseWluZz0hMCxnLnN0YXJ0ZWQ9ITEsZy5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LGFwcGx5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYXBwbHlpbmd9LHBhdXNlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITAsdGhpc30scmV3aW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCl9LGZhc3Rmb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMSl9LHRpbWU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94LnByb2dyZXNzKnguZHVyYXRpb246dGhpcy5wcm9ncmVzcyhnL3guZHVyYXRpb24pfSxwcm9ncmVzczpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wbGF5aW5nO3JldHVybiBnPT09dm9pZCAwP3gucHJvZ3Jlc3M6KFQmJnRoaXMucGF1c2UoKSx4LnByb2dyZXNzPWcseC5zdGFydGVkPSExLFQmJnRoaXMucGxheSgpLHRoaXMpfSxjb21wbGV0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LHJldmVyc2U6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLHg9Zy5wbGF5aW5nO3gmJnRoaXMucGF1c2UoKSxnLnByb2dyZXNzPTEtZy5wcm9ncmVzcyxnLnN0YXJ0ZWQ9ITE7dmFyIFQ9ZnVuY3Rpb24oUyxHKXt2YXIgVz1nW1NdO1chPW51bGwmJihnW1NdPWdbR10sZ1tHXT1XKX07aWYoVCgiem9vbSIsInN0YXJ0Wm9vbSIpLFQoInBhbiIsInN0YXJ0UGFuIiksVCgicG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiksZy5zdHlsZSlmb3IodmFyIEE9MDtBPGcuc3R5bGUubGVuZ3RoO0ErKyl7dmFyIEQ9Zy5zdHlsZVtBXSxPPUQubmFtZSwkPWcuc3RhcnRTdHlsZVtPXTtnLnN0YXJ0U3R5bGVbT109RCxnLnN0eWxlW0FdPSR9cmV0dXJuIHgmJnRoaXMucGxheSgpLHRoaXN9LHByb21pc2U6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUO3N3aXRjaChnKXtjYXNlImZyYW1lIjpUPXguZnJhbWVzO2JyZWFrO2RlZmF1bHQ6Y2FzZSJjb21wbGV0ZSI6Y2FzZSJjb21wbGV0ZWQiOlQ9eC5jb21wbGV0ZXN9cmV0dXJuIG5ldyBLNShmdW5jdGlvbihBLEQpe1QucHVzaChmdW5jdGlvbigpe0EoKX0pfSl9fSksXzMuY29tcGxldGU9XzMuY29tcGxldGVkLF8zLnJ1bj1fMy5wbGF5LF8zLnJ1bm5pbmc9XzMucGxheWluZzt2YXIgTVg9e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxUPXgubGVuZ3RoIT09dm9pZCAwLEE9VD94Olt4XSxEPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoIUQuc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIE89QVswXTtpZihPKXJldHVybiBPLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciB4PXRoaXMsVD14Lmxlbmd0aCE9PXZvaWQgMCxBPVQ/eDpbeF0sRD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFELnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgTz0wO088QS5sZW5ndGg7TysrKXt2YXIgJD1BW09dOyQuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBBLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6eCxkdXJhdGlvbjp4LGNvbXBsZXRlOlR9KTp0aGlzfX0sZGVsYXlBbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBBLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTp4LGR1cmF0aW9uOngsY29tcGxldGU6VH0pOnRoaXN9fSxhbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLEQ9QS5sZW5ndGghPT12b2lkIDAsTz1EP0E6W0FdLCQ9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcyxxPSFELFM9IXE7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIEc9JC5zdHlsZSgpO3g9bWUoe30seCxUKTt2YXIgVz1PYmplY3Qua2V5cyh4KS5sZW5ndGg9PT0wO2lmKFcpcmV0dXJuIG5ldyBxVChPWzBdLHgpO3N3aXRjaCh4LmR1cmF0aW9uPT09dm9pZCAwJiYoeC5kdXJhdGlvbj00MDApLHguZHVyYXRpb24pe2Nhc2Uic2xvdyI6eC5kdXJhdGlvbj02MDA7YnJlYWs7Y2FzZSJmYXN0Ijp4LmR1cmF0aW9uPTIwMDticmVha31pZihTJiYoeC5zdHlsZT1HLmdldFByb3BzTGlzdCh4LnN0eWxlfHx4LmNzcykseC5jc3M9dm9pZCAwKSxTJiZ4LnJlbmRlcmVkUG9zaXRpb24hPW51bGwpe3ZhciBldD14LnJlbmRlcmVkUG9zaXRpb24sYXQ9JC5wYW4oKSxsdD0kLnpvb20oKTt4LnBvc2l0aW9uPVFQKGV0LGx0LGF0KX1pZihxJiZ4LnBhbkJ5IT1udWxsKXt2YXIgZnQ9eC5wYW5CeSxBdD0kLnBhbigpO3gucGFuPXt4OkF0LngrZnQueCx5OkF0LnkrZnQueX19dmFyIGt0PXguY2VudGVyfHx4LmNlbnRyZTtpZihxJiZrdCE9bnVsbCl7dmFyIE10PSQuZ2V0Q2VudGVyUGFuKGt0LmVsZXMseC56b29tKTtNdCE9bnVsbCYmKHgucGFuPU10KX1pZihxJiZ4LmZpdCE9bnVsbCl7dmFyIER0PXguZml0LGp0PSQuZ2V0Rml0Vmlld3BvcnQoRHQuZWxlc3x8RHQuYm91bmRpbmdCb3gsRHQucGFkZGluZyk7anQhPW51bGwmJih4LnBhbj1qdC5wYW4seC56b29tPWp0Lnpvb20pfWlmKHEmJmh0KHguem9vbSkpe3ZhciBadD0kLmdldFpvb21lZFZpZXdwb3J0KHguem9vbSk7WnQhPW51bGw/KFp0Lnpvb21lZCYmKHguem9vbT1adC56b29tKSxadC5wYW5uZWQmJih4LnBhbj1adC5wYW4pKTp4Lnpvb209bnVsbH1yZXR1cm4gbmV3IHFUKE9bMF0seCl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEE9dGhpcyxEPUEubGVuZ3RoIT09dm9pZCAwLE89RD9BOltBXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7VCYmKHg9bWUoe30seCxUKSk7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aDtxKyspe3ZhciBTPU9bcV0sRz1TLmFuaW1hdGVkKCkmJih4LnF1ZXVlPT09dm9pZCAwfHx4LnF1ZXVlKSxXPVMuYW5pbWF0aW9uKHgsRz97cXVldWU6ITB9OnZvaWQgMCk7Vy5wbGF5KCl9cmV0dXJuIHRoaXN9fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEE9dGhpcyxEPUEubGVuZ3RoIT09dm9pZCAwLE89RD9BOltBXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aDtxKyspe2Zvcih2YXIgUz1PW3FdLEc9Uy5fcHJpdmF0ZSxXPUcuYW5pbWF0aW9uLmN1cnJlbnQsZXQ9MDtldDxXLmxlbmd0aDtldCsrKXt2YXIgYXQ9V1tldF0sbHQ9YXQuX3ByaXZhdGU7VCYmKGx0LmR1cmF0aW9uPTApfXgmJihHLmFuaW1hdGlvbi5xdWV1ZT1bXSksVHx8KEcuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiAkLm5vdGlmeSgiZHJhdyIpLHRoaXN9fX0sSVg9QXJyYXkuaXNBcnJheSxIVD1JWCxEWD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxPWD0vXlx3KiQvO2Z1bmN0aW9uIE5YKHksZyl7aWYoSFQoeSkpcmV0dXJuITE7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIHg9PSJudW1iZXIifHx4PT0ic3ltYm9sInx8eD09ImJvb2xlYW4ifHx5PT1udWxsfHxrcih5KT8hMDpPWC50ZXN0KHkpfHwhRFgudGVzdCh5KXx8ZyE9bnVsbCYmeSBpbiBPYmplY3QoZyl9dmFyIFBYPU5YLEZYPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixCWD0iW29iamVjdCBGdW5jdGlvbl0iLFJYPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsalg9IltvYmplY3QgUHJveHldIjtmdW5jdGlvbiAkWCh5KXtpZighRWUoeSkpcmV0dXJuITE7dmFyIGc9SjEoeSk7cmV0dXJuIGc9PUJYfHxnPT1SWHx8Zz09Rlh8fGc9PWpYfXZhciB6WD0kWCxxWD1MYVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sSUw9cVgsSUY9ZnVuY3Rpb24oKXt2YXIgeT0vW14uXSskLy5leGVjKElMJiZJTC5rZXlzJiZJTC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIHk/IlN5bWJvbChzcmMpXzEuIit5OiIifSgpO2Z1bmN0aW9uIEhYKHkpe3JldHVybiEhSUYmJklGIGluIHl9dmFyIEdYPUhYLFZYPUZ1bmN0aW9uLnByb3RvdHlwZSxERj1WWC50b1N0cmluZztmdW5jdGlvbiBVWCh5KXtpZih5IT1udWxsKXt0cnl7cmV0dXJuIERGLmNhbGwoeSl9Y2F0Y2h7fXRyeXtyZXR1cm4geSsiIn1jYXRjaHt9fXJldHVybiIifXZhciBXWD1VWCxLWD0vW1xcXiQuKis/KClbXF17fXxdL2csWVg9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sWFg9RnVuY3Rpb24ucHJvdG90eXBlLFFYPU9iamVjdC5wcm90b3R5cGUsT0Y9WFgudG9TdHJpbmcsTkY9UVguaGFzT3duUHJvcGVydHksWlg9UmVnRXhwKCJeIitPRi5jYWxsKE5GKS5yZXBsYWNlKEtYLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFBGKHkpe2lmKCFFZSh5KXx8R1goeSkpcmV0dXJuITE7dmFyIGc9elgoeSk/Wlg6WVg7cmV0dXJuIGcudGVzdChXWCh5KSl9dmFyIEZGPVBGO2Z1bmN0aW9uIEpYKHksZyl7cmV0dXJuIHk9PW51bGw/dm9pZCAwOnlbZ119dmFyIHRRPUpYO2Z1bmN0aW9uIGVRKHksZyl7dmFyIHg9dFEoeSxnKTtyZXR1cm4gRkYoeCk/eDp2b2lkIDB9dmFyIERMPWVRLG5RPURMKE9iamVjdCwiY3JlYXRlIiksRWs9blE7ZnVuY3Rpb24gclEoKXt0aGlzLl9fZGF0YV9fPUVrP0VrKG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBpUT1yUTtmdW5jdGlvbiBzUSh5KXt2YXIgZz10aGlzLmhhcyh5KSYmZGVsZXRlIHRoaXMuX19kYXRhX19beV07cmV0dXJuIHRoaXMuc2l6ZS09Zz8xOjAsZ312YXIgQkY9c1EsYVE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLG9RPU9iamVjdC5wcm90b3R5cGUsY1E9b1EuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gdVEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztpZihFayl7dmFyIHg9Z1t5XTtyZXR1cm4geD09PWFRP3ZvaWQgMDp4fXJldHVybiBjUS5jYWxsKGcseSk/Z1t5XTp2b2lkIDB9dmFyIGxRPXVRLGhRPU9iamVjdC5wcm90b3R5cGUsZlE9aFEuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gZFEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztyZXR1cm4gRWs/Z1t5XSE9PXZvaWQgMDpmUS5jYWxsKGcseSl9dmFyIGdRPWRRLHBRPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBiUSh5LGcpe3ZhciB4PXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoeSk/MDoxLHhbeV09RWsmJmc9PT12b2lkIDA/cFE6Zyx0aGlzfXZhciB2UT1iUTtmdW5jdGlvbiBZNSh5KXt2YXIgZz0tMSx4PXk9PW51bGw/MDp5Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZzx4Oyl7dmFyIFQ9eVtnXTt0aGlzLnNldChUWzBdLFRbMV0pfX1ZNS5wcm90b3R5cGUuY2xlYXI9aVEsWTUucHJvdG90eXBlLmRlbGV0ZT1CRixZNS5wcm90b3R5cGUuZ2V0PWxRLFk1LnByb3RvdHlwZS5oYXM9Z1EsWTUucHJvdG90eXBlLnNldD12UTt2YXIgUkY9WTU7ZnVuY3Rpb24gd1EoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfXZhciBtUT13UTtmdW5jdGlvbiB5USh5LGcpe3JldHVybiB5PT09Z3x8eSE9PXkmJmchPT1nfXZhciBqRj15UTtmdW5jdGlvbiB4USh5LGcpe2Zvcih2YXIgeD15Lmxlbmd0aDt4LS07KWlmKGpGKHlbeF1bMF0sZykpcmV0dXJuIHg7cmV0dXJuLTF9dmFyIEdUPXhRLGtRPUFycmF5LnByb3RvdHlwZSxFUT1rUS5zcGxpY2U7ZnVuY3Rpb24gVFEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PUdUKGcseSk7aWYoeDwwKXJldHVybiExO3ZhciBUPWcubGVuZ3RoLTE7cmV0dXJuIHg9PVQ/Zy5wb3AoKTpFUS5jYWxsKGcseCwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgQ1E9VFE7ZnVuY3Rpb24gX1EoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PUdUKGcseSk7cmV0dXJuIHg8MD92b2lkIDA6Z1t4XVsxXX12YXIgU1E9X1E7ZnVuY3Rpb24gQVEoeSl7cmV0dXJuIEdUKHRoaXMuX19kYXRhX18seSk+LTF9dmFyIExRPUFRO2Z1bmN0aW9uIE1RKHksZyl7dmFyIHg9dGhpcy5fX2RhdGFfXyxUPUdUKHgseSk7cmV0dXJuIFQ8MD8oKyt0aGlzLnNpemUseC5wdXNoKFt5LGddKSk6eFtUXVsxXT1nLHRoaXN9dmFyIElRPU1RO2Z1bmN0aW9uIFg1KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fVg1LnByb3RvdHlwZS5jbGVhcj1tUSxYNS5wcm90b3R5cGUuZGVsZXRlPUNRLFg1LnByb3RvdHlwZS5nZXQ9U1EsWDUucHJvdG90eXBlLmhhcz1MUSxYNS5wcm90b3R5cGUuc2V0PUlRO3ZhciBEUT1YNSxPUT1ETChMYSwiTWFwIiksTlE9T1E7ZnVuY3Rpb24gUFEoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBSRixtYXA6bmV3KE5RfHxEUSksc3RyaW5nOm5ldyBSRn19dmFyIEZRPVBRO2Z1bmN0aW9uIEJRKHkpe3ZhciBnPXR5cGVvZiB5O3JldHVybiBnPT0ic3RyaW5nInx8Zz09Im51bWJlciJ8fGc9PSJzeW1ib2wifHxnPT0iYm9vbGVhbiI/eSE9PSJfX3Byb3RvX18iOnk9PT1udWxsfXZhciBSUT1CUTtmdW5jdGlvbiBqUSh5LGcpe3ZhciB4PXkuX19kYXRhX187cmV0dXJuIFJRKGcpP3hbdHlwZW9mIGc9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06eC5tYXB9dmFyIFZUPWpRO2Z1bmN0aW9uICRRKHkpe3ZhciBnPVZUKHRoaXMseSkuZGVsZXRlKHkpO3JldHVybiB0aGlzLnNpemUtPWc/MTowLGd9dmFyIHpRPSRRO2Z1bmN0aW9uIHFRKHkpe3JldHVybiBWVCh0aGlzLHkpLmdldCh5KX12YXIgSFE9cVE7ZnVuY3Rpb24gR1EoeSl7cmV0dXJuIFZUKHRoaXMseSkuaGFzKHkpfXZhciBWUT1HUTtmdW5jdGlvbiBVUSh5LGcpe3ZhciB4PVZUKHRoaXMseSksVD14LnNpemU7cmV0dXJuIHguc2V0KHksZyksdGhpcy5zaXplKz14LnNpemU9PVQ/MDoxLHRoaXN9dmFyIFdRPVVRO2Z1bmN0aW9uIFE1KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fVE1LnByb3RvdHlwZS5jbGVhcj1GUSxRNS5wcm90b3R5cGUuZGVsZXRlPXpRLFE1LnByb3RvdHlwZS5nZXQ9SFEsUTUucHJvdG90eXBlLmhhcz1WUSxRNS5wcm90b3R5cGUuc2V0PVdRO3ZhciAkRj1RNSxLUT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gT0woeSxnKXtpZih0eXBlb2YgeSE9ImZ1bmN0aW9uInx8ZyE9bnVsbCYmdHlwZW9mIGchPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihLUSk7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgVD1hcmd1bWVudHMsQT1nP2cuYXBwbHkodGhpcyxUKTpUWzBdLEQ9eC5jYWNoZTtpZihELmhhcyhBKSlyZXR1cm4gRC5nZXQoQSk7dmFyIE89eS5hcHBseSh0aGlzLFQpO3JldHVybiB4LmNhY2hlPUQuc2V0KEEsTyl8fEQsT307cmV0dXJuIHguY2FjaGU9bmV3KE9MLkNhY2hlfHwkRikseH1PTC5DYWNoZT0kRjt2YXIgWVE9T0wsWFE9NTAwO2Z1bmN0aW9uIFFRKHkpe3ZhciBnPVlRKHksZnVuY3Rpb24oVCl7cmV0dXJuIHguc2l6ZT09PVhRJiZ4LmNsZWFyKCksVH0pLHg9Zy5jYWNoZTtyZXR1cm4gZ312YXIgWlE9UVEsSlE9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csdFo9L1xcKFxcKT8vZyxlWj1aUShmdW5jdGlvbih5KXt2YXIgZz1bXTtyZXR1cm4geS5jaGFyQ29kZUF0KDApPT09NDYmJmcucHVzaCgiIikseS5yZXBsYWNlKEpRLGZ1bmN0aW9uKHgsVCxBLEQpe2cucHVzaChBP0QucmVwbGFjZSh0WiwiJDEiKTpUfHx4KX0pLGd9KSx6Rj1lWjtmdW5jdGlvbiBuWih5LGcpe2Zvcih2YXIgeD0tMSxUPXk9PW51bGw/MDp5Lmxlbmd0aCxBPUFycmF5KFQpOysreDxUOylBW3hdPWcoeVt4XSx4LHkpO3JldHVybiBBfXZhciBxRj1uWixyWj0xLzAsSEY9Wmw/WmwucHJvdG90eXBlOnZvaWQgMCxHRj1IRj9IRi50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gVkYoeSl7aWYodHlwZW9mIHk9PSJzdHJpbmciKXJldHVybiB5O2lmKEhUKHkpKXJldHVybiBxRih5LFZGKSsiIjtpZihrcih5KSlyZXR1cm4gR0Y/R0YuY2FsbCh5KToiIjt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LXJaPyItMCI6Z312YXIgaVo9VkY7ZnVuY3Rpb24gc1ooeSl7cmV0dXJuIHk9PW51bGw/IiI6aVooeSl9dmFyIFVUPXNaO2Z1bmN0aW9uIE5MKHksZyl7cmV0dXJuIEhUKHkpP3k6UFgoeSxnKT9beV06ekYoVVQoeSkpfXZhciBXVD1OTCxhWj0xLzA7ZnVuY3Rpb24gb1ooeSl7aWYodHlwZW9mIHk9PSJzdHJpbmcifHxrcih5KSlyZXR1cm4geTt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LWFaPyItMCI6Z312YXIgUEw9b1o7ZnVuY3Rpb24gY1ooeSxnKXtnPVdUKGcseSk7Zm9yKHZhciB4PTAsVD1nLmxlbmd0aDt5IT1udWxsJiZ4PFQ7KXk9eVtQTChnW3grK10pXTtyZXR1cm4geCYmeD09VD95OnZvaWQgMH12YXIgdVo9Y1o7ZnVuY3Rpb24gVUYoeSxnLHgpe3ZhciBUPXk9PW51bGw/dm9pZCAwOnVaKHksZyk7cmV0dXJuIFQ9PT12b2lkIDA/eDpUfXZhciBsWj1VRixoWj1mdW5jdGlvbigpe3RyeXt2YXIgeT1ETChPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHkoe30sIiIse30pLHl9Y2F0Y2h7fX0oKSxmWj1oWjtmdW5jdGlvbiBkWih5LGcseCl7Zz09Il9fcHJvdG9fXyImJmZaP2ZaKHksZyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6eCx3cml0YWJsZTohMH0pOnlbZ109eH12YXIgZ1o9ZFoscFo9T2JqZWN0LnByb3RvdHlwZSxiWj1wWi5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB2Wih5LGcseCl7dmFyIFQ9eVtnXTsoIShiWi5jYWxsKHksZykmJmpGKFQseCkpfHx4PT09dm9pZCAwJiYhKGcgaW4geSkpJiZnWih5LGcseCl9dmFyIHdaPXZaLG1aPTkwMDcxOTkyNTQ3NDA5OTEscGc9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIHlaKHksZyl7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIGc9Zz8/bVosISFnJiYoeD09Im51bWJlciJ8fHghPSJzeW1ib2wiJiZwZy50ZXN0KHkpKSYmeT4tMSYmeSUxPT0wJiZ5PGd9dmFyIHdtPXlaO2Z1bmN0aW9uIFdGKHksZyx4LFQpe2lmKCFFZSh5KSlyZXR1cm4geTtnPVdUKGcseSk7Zm9yKHZhciBBPS0xLEQ9Zy5sZW5ndGgsTz1ELTEsJD15OyQhPW51bGwmJisrQTxEOyl7dmFyIHE9UEwoZ1tBXSksUz14O2lmKHE9PT0iX19wcm90b19fInx8cT09PSJjb25zdHJ1Y3RvciJ8fHE9PT0icHJvdG90eXBlIilyZXR1cm4geTtpZihBIT1PKXt2YXIgRz0kW3FdO1M9VD9UKEcscSwkKTp2b2lkIDAsUz09PXZvaWQgMCYmKFM9RWUoRyk/Rzp3bShnW0ErMV0pP1tdOnt9KX13WigkLHEsUyksJD0kW3FdfXJldHVybiB5fXZhciB4Wj1XRjtmdW5jdGlvbiBrWih5LGcseCl7cmV0dXJuIHk9PW51bGw/eTp4Wih5LGcseCl9dmFyIEVaPWtaO2Z1bmN0aW9uIFRaKHksZyl7dmFyIHg9LTEsVD15Lmxlbmd0aDtmb3IoZ3x8KGc9QXJyYXkoVCkpOysreDxUOylnW3hdPXlbeF07cmV0dXJuIGd9dmFyIENaPVRaO2Z1bmN0aW9uIF9aKHkpe3JldHVybiBIVCh5KT9xRih5LFBMKTprcih5KT9beV06Q1ooekYoVVQoeSkpKX12YXIgU1o9X1osQVo9e2RhdGE6ZnVuY3Rpb24oZyl7dmFyIHg9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oQSl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oQSxEKXt9LG9uU2V0OmZ1bmN0aW9uKEEpe30sY2FuU2V0OmZ1bmN0aW9uKEEpe3JldHVybiEwfX07cmV0dXJuIGc9bWUoe30seCxnKSxmdW5jdGlvbihBLEQpe3ZhciBPPWcsJD10aGlzLHE9JC5sZW5ndGghPT12b2lkIDAsUz1xPyQ6WyRdLEc9cT8kWzBdOiQ7aWYobXQoQSkpe3ZhciBXPUEuaW5kZXhPZigiLiIpIT09LTEsZXQ9VyYmU1ooQSk7aWYoTy5hbGxvd0dldHRpbmcmJkQ9PT12b2lkIDApe3ZhciBhdDtyZXR1cm4gRyYmKE8uYmVmb3JlR2V0KEcpLGV0JiZHLl9wcml2YXRlW08uZmllbGRdW0FdPT09dm9pZCAwP2F0PWxaKEcuX3ByaXZhdGVbTy5maWVsZF0sZXQpOmF0PUcuX3ByaXZhdGVbTy5maWVsZF1bQV0pLGF0fWVsc2UgaWYoTy5hbGxvd1NldHRpbmcmJkQhPT12b2lkIDApe3ZhciBsdD0hTy5pbW11dGFibGVLZXlzW0FdO2lmKGx0KXt2YXIgZnQ9Yih7fSxBLEQpO08uYmVmb3JlU2V0KCQsZnQpO2Zvcih2YXIgQXQ9MCxrdD1TLmxlbmd0aDtBdDxrdDtBdCsrKXt2YXIgTXQ9U1tBdF07Ty5jYW5TZXQoTXQpJiYoZXQmJkcuX3ByaXZhdGVbTy5maWVsZF1bQV09PT12b2lkIDA/RVooTXQuX3ByaXZhdGVbTy5maWVsZF0sZXQsRCk6TXQuX3ByaXZhdGVbTy5maWVsZF1bQV09RCl9Ty51cGRhdGVTdHlsZSYmJC51cGRhdGVTdHlsZSgpLE8ub25TZXQoJCksTy5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmJFtPLnRyaWdnZXJGbk5hbWVdKE8uc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYoTy5hbGxvd1NldHRpbmcmJmh0KEEpKXt2YXIgRHQ9QSxqdCxadCxLdD1PYmplY3Qua2V5cyhEdCk7Ty5iZWZvcmVTZXQoJCxEdCk7Zm9yKHZhciB6dD0wO3p0PEt0Lmxlbmd0aDt6dCsrKXtqdD1LdFt6dF0sWnQ9RHRbanRdO3ZhciBlZT0hTy5pbW11dGFibGVLZXlzW2p0XTtpZihlZSlmb3IodmFyIFZ0PTA7VnQ8Uy5sZW5ndGg7VnQrKyl7dmFyIGZlPVNbVnRdO08uY2FuU2V0KGZlKSYmKGZlLl9wcml2YXRlW08uZmllbGRdW2p0XT1adCl9fU8udXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxPLm9uU2V0KCQpLE8uc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbTy50cmlnZ2VyRm5OYW1lXShPLnNldHRpbmdFdmVudCl9ZWxzZSBpZihPLmFsbG93QmluZGluZyYmeXQoQSkpe3ZhciBnZT1BOyQub24oTy5iaW5kaW5nRXZlbnQsZ2UpfWVsc2UgaWYoTy5hbGxvd0dldHRpbmcmJkE9PT12b2lkIDApe3ZhciBuZTtyZXR1cm4gRyYmKE8uYmVmb3JlR2V0KEcpLG5lPUcuX3ByaXZhdGVbTy5maWVsZF0pLG5lfXJldHVybiAkfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihnKXt2YXIgeD17ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITEsaW1tdXRhYmxlS2V5czp7fX07cmV0dXJuIGc9bWUoe30seCxnKSxmdW5jdGlvbihBKXt2YXIgRD1nLE89dGhpcywkPU8ubGVuZ3RoIT09dm9pZCAwLHE9JD9POltPXTtpZihtdChBKSl7Zm9yKHZhciBTPUEuc3BsaXQoL1xzKy8pLEc9Uy5sZW5ndGgsVz0wO1c8RztXKyspe3ZhciBldD1TW1ddO2lmKCFaKGV0KSl7dmFyIGF0PSFELmltbXV0YWJsZUtleXNbZXRdO2lmKGF0KWZvcih2YXIgbHQ9MCxmdD1xLmxlbmd0aDtsdDxmdDtsdCsrKXFbbHRdLl9wcml2YXRlW0QuZmllbGRdW2V0XT12b2lkIDB9fUQudHJpZ2dlckV2ZW50JiZPW0QudHJpZ2dlckZuTmFtZV0oRC5ldmVudCl9ZWxzZSBpZihBPT09dm9pZCAwKXtmb3IodmFyIEF0PTAsa3Q9cS5sZW5ndGg7QXQ8a3Q7QXQrKylmb3IodmFyIE10PXFbQXRdLl9wcml2YXRlW0QuZmllbGRdLER0PU9iamVjdC5rZXlzKE10KSxqdD0wO2p0PER0Lmxlbmd0aDtqdCsrKXt2YXIgWnQ9RHRbanRdLEt0PSFELmltbXV0YWJsZUtleXNbWnRdO0t0JiYoTXRbWnRdPXZvaWQgMCl9RC50cmlnZ2VyRXZlbnQmJk9bRC50cmlnZ2VyRm5OYW1lXShELmV2ZW50KX1yZXR1cm4gT319fSxMWj17ZXZlbnRBbGlhc2VzT246ZnVuY3Rpb24oZyl7dmFyIHg9Zzt4LmFkZExpc3RlbmVyPXgubGlzdGVuPXguYmluZD14Lm9uLHgudW5saXN0ZW49eC51bmJpbmQ9eC5vZmY9eC5yZW1vdmVMaXN0ZW5lcix4LnRyaWdnZXI9eC5lbWl0LHgucG9uPXgucHJvbWlzZU9uPWZ1bmN0aW9uKFQsQSl7dmFyIEQ9dGhpcyxPPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbmV3IEs1KGZ1bmN0aW9uKCQscSl7dmFyIFM9ZnVuY3Rpb24oYXQpe0Qub2ZmLmFwcGx5KEQsVyksJChhdCl9LEc9Ty5jb25jYXQoW1NdKSxXPUcuY29uY2F0KFtdKTtELm9uLmFwcGx5KEQsRyl9KX19fSxBYz17fTtbTVgsQVosTFpdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoQWMseSl9KTt2YXIgTVo9e2FuaW1hdGU6QWMuYW5pbWF0ZSgpLGFuaW1hdGlvbjpBYy5hbmltYXRpb24oKSxhbmltYXRlZDpBYy5hbmltYXRlZCgpLGNsZWFyUXVldWU6QWMuY2xlYXJRdWV1ZSgpLGRlbGF5OkFjLmRlbGF5KCksZGVsYXlBbmltYXRpb246QWMuZGVsYXlBbmltYXRpb24oKSxzdG9wOkFjLnN0b3AoKX0sS1Q9e2NsYXNzZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT09dm9pZCAwKXt2YXIgVD1bXTtyZXR1cm4geFswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obHQpe3JldHVybiBULnB1c2gobHQpfSksVH1lbHNlIGR0KGcpfHwoZz0oZ3x8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIEE9W10sRD1uZXcgejUoZyksTz0wO088eC5sZW5ndGg7TysrKXtmb3IodmFyICQ9eFtPXSxxPSQuX3ByaXZhdGUsUz1xLmNsYXNzZXMsRz0hMSxXPTA7VzxnLmxlbmd0aDtXKyspe3ZhciBldD1nW1ddLGF0PVMuaGFzKGV0KTtpZighYXQpe0c9ITA7YnJlYWt9fUd8fChHPVMuc2l6ZSE9PWcubGVuZ3RoKSxHJiYocS5jbGFzc2VzPUQsQS5wdXNoKCQpKX1yZXR1cm4gQS5sZW5ndGg+MCYmdGhpcy5zcGF3bihBKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikseH0sYWRkQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXNbMF07cmV0dXJuIHghPW51bGwmJnguX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZyl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGcseCl7ZHQoZyl8fChnPWcubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgVD10aGlzLEE9eD09PXZvaWQgMCxEPVtdLE89MCwkPVQubGVuZ3RoO088JDtPKyspZm9yKHZhciBxPVRbT10sUz1xLl9wcml2YXRlLmNsYXNzZXMsRz0hMSxXPTA7VzxnLmxlbmd0aDtXKyspe3ZhciBldD1nW1ddLGF0PVMuaGFzKGV0KSxsdD0hMTt4fHxBJiYhYXQ/KFMuYWRkKGV0KSxsdD0hMCk6KCF4fHxBJiZhdCkmJihTLmRlbGV0ZShldCksbHQ9ITApLCFHJiZsdCYmKEQucHVzaChxKSxHPSEwKX1yZXR1cm4gRC5sZW5ndGg+MCYmdGhpcy5zcGF3bihEKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksVH0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMSl9LGZsYXNoQ2xhc3M6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzO2lmKHg9PW51bGwpeD0yNTA7ZWxzZSBpZih4PT09MClyZXR1cm4gVDtyZXR1cm4gVC5hZGRDbGFzcyhnKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5yZW1vdmVDbGFzcyhnKX0seCksVH19O0tULmNsYXNzTmFtZT1LVC5jbGFzc05hbWVzPUtULmNsYXNzZXM7dmFyIHRjPXttZXRhQ2hhcjoiW1xcIVxcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5dIixjb21wYXJhdG9yT3A6Ij18XFwhPXw+fD49fDx8PD18XFwkPXxcXF49fFxcKj0iLGJvb2xPcDoiXFw/fFxcIXxcXF4iLHN0cmluZzpgIig/OlxcXFwifFteIl0pKiJ8Jyg/OlxcXFwnfFteJ10pKidgLG51bWJlcjpLZSxtZXRhOiJkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlIixzZXBhcmF0b3I6IlxccyosXFxzKiIsZGVzY2VuZGFudDoiXFxzKyIsY2hpbGQ6Ilxccys+XFxzKyIsc3ViamVjdDoiXFwkIixncm91cDoibm9kZXxlZGdlfFxcKiIsZGlyZWN0ZWRFZGdlOiJcXHMrLT5cXHMrIix1bmRpcmVjdGVkRWRnZToiXFxzKzwtPlxccysifTt0Yy52YXJpYWJsZT0iKD86W1xcdy0uXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy5jbGFzc05hbWU9Iig/OltcXHctXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy52YWx1ZT10Yy5zdHJpbmcrInwiK3RjLm51bWJlcix0Yy5pZD10Yy52YXJpYWJsZSxmdW5jdGlvbigpe3ZhciB5LGcseDtmb3IoeT10Yy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSx4PTA7eDx5Lmxlbmd0aDt4KyspZz15W3hdLHRjLmNvbXBhcmF0b3JPcCs9InxAIitnO2Zvcih5PXRjLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHg9MDt4PHkubGVuZ3RoO3grKylnPXlbeF0sIShnLmluZGV4T2YoIiEiKT49MCkmJmchPT0iPSImJih0Yy5jb21wYXJhdG9yT3ArPSJ8XFwhIitnKX0oKTt2YXIgS2M9ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tzOltdfX0semk9e0dST1VQOjAsQ09MTEVDVElPTjoxLEZJTFRFUjoyLERBVEFfQ09NUEFSRTozLERBVEFfRVhJU1Q6NCxEQVRBX0JPT0w6NSxNRVRBX0NPTVBBUkU6NixTVEFURTo3LElEOjgsQ0xBU1M6OSxVTkRJUkVDVEVEX0VER0U6MTAsRElSRUNURURfRURHRToxMSxOT0RFX1NPVVJDRToxMixOT0RFX1RBUkdFVDoxMyxOT0RFX05FSUdIQk9SOjE0LENISUxEOjE1LERFU0NFTkRBTlQ6MTYsUEFSRU5UOjE3LEFOQ0VTVE9SOjE4LENPTVBPVU5EX1NQTElUOjE5LFRSVUU6MjB9LEZMPVt7c2VsZWN0b3I6IjpzZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fSx7c2VsZWN0b3I6Ijp2aXNpYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLnZpc2libGUoKX19LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy52aXNpYmxlKCl9fSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy50cmFuc3BhcmVudCgpfX0se3NlbGVjdG9yOiI6Z3JhYmJlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiZWQoKX19LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVtb3ZlZCgpfX0se3NlbGVjdG9yOiI6aW5zaWRlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiYWJsZSgpfX0se3NlbGVjdG9yOiI6YW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6Y2hpbGRsZXNzIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzQ2hpbGRsZXNzKCl9fSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNPcnBoYW4oKX19LHtzZWxlY3RvcjoiOm5vbm9ycGhhbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc05vZGUoKT9nLmlzUGFyZW50KCk6Zy5zb3VyY2UoKS5pc1BhcmVudCgpfHxnLnRhcmdldCgpLmlzUGFyZW50KCl9fSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzTG9vcCgpfX0se3NlbGVjdG9yOiI6c2ltcGxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzU2ltcGxlKCl9fSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5hY3RpdmUoKX19LHtzZWxlY3RvcjoiOmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYmFja2dyb3VuZGluZygpfX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5iYWNrZ3JvdW5kaW5nKCl9fV0uc29ydChmdW5jdGlvbih5LGcpe3JldHVybiBOZSh5LnNlbGVjdG9yLGcuc2VsZWN0b3IpfSksSVo9ZnVuY3Rpb24oKXtmb3IodmFyIHk9e30sZyx4PTA7eDxGTC5sZW5ndGg7eCsrKWc9RkxbeF0seVtnLnNlbGVjdG9yXT1nLm1hdGNoZXM7cmV0dXJuIHl9KCksRFo9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gSVpbZ10oeCl9LE9aPSIoIitGTC5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHkuc2VsZWN0b3J9KS5qb2luKCJ8IikrIikiLFo1PWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXCgiK3RjLm1ldGFDaGFyKyIpIiwiZyIpLGZ1bmN0aW9uKHgsVCl7cmV0dXJuIFR9KX0sbW09ZnVuY3Rpb24oZyx4LFQpe2dbZy5sZW5ndGgtMV09VH0sVWU9W3tuYW1lOiJncm91cCIscXVlcnk6ITAscmVnZXg6IigiK3RjLmdyb3VwKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkdST1VQLHZhbHVlOkQ9PT0iKiI/RDpEKyJzIn0pfX0se25hbWU6InN0YXRlIixxdWVyeTohMCxyZWdleDpPWixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLlNUQVRFLHZhbHVlOkR9KX19LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK3RjLmlkKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLklELHZhbHVlOlo1KEQpfSl9fSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrdGMuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkNMQVNTLHZhbHVlOlo1KEQpfSl9fSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT1FKFQsMSksRD1BWzBdO3guY2hlY2tzLnB1c2goe3R5cGU6emkuREFUQV9FWElTVCxmaWVsZDpaNShEKX0pfX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK3RjLnZhcmlhYmxlKyIpXFxzKigiK3RjLmNvbXBhcmF0b3JPcCsiKVxccyooIit0Yy52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT1FKFQsMyksRD1BWzBdLE89QVsxXSwkPUFbMl0scT1uZXcgUmVnRXhwKCJeIit0Yy5zdHJpbmcrIiQiKS5leGVjKCQpIT1udWxsO3E/JD0kLnN1YnN0cmluZygxLCQubGVuZ3RoLTEpOiQ9cGFyc2VGbG9hdCgkKSx4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkRBVEFfQ09NUEFSRSxmaWVsZDpaNShEKSxvcGVyYXRvcjpPLHZhbHVlOiR9KX19LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy5ib29sT3ArIilcXHMqKCIrdGMudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDIpLEQ9QVswXSxPPUFbMV07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5EQVRBX0JPT0wsZmllbGQ6WjUoTyksb3BlcmF0b3I6RH0pfX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK3RjLm1ldGErIilcXHMqKCIrdGMuY29tcGFyYXRvck9wKyIpXFxzKigiK3RjLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT1FKFQsMyksRD1BWzBdLE89QVsxXSwkPUFbMl07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5NRVRBX0NPTVBBUkUsZmllbGQ6WjUoRCksb3BlcmF0b3I6Tyx2YWx1ZTpwYXJzZUZsb2F0KCQpfSl9fSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6dGMuc2VwYXJhdG9yLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jdXJyZW50U3ViamVjdCxBPWcuZWRnZUNvdW50LEQ9Zy5jb21wb3VuZENvdW50LE89Z1tnLmxlbmd0aC0xXTtUIT1udWxsJiYoTy5zdWJqZWN0PVQsZy5jdXJyZW50U3ViamVjdD1udWxsKSxPLmVkZ2VDb3VudD1BLE8uY29tcG91bmRDb3VudD1ELGcuZWRnZUNvdW50PTAsZy5jb21wb3VuZENvdW50PTA7dmFyICQ9Z1tnLmxlbmd0aCsrXT1LYygpO3JldHVybiAkfX0se25hbWU6ImRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBUPUtjKCksQT14LEQ9S2MoKTtyZXR1cm4gVC5jaGVja3MucHVzaCh7dHlwZTp6aS5ESVJFQ1RFRF9FREdFLHNvdXJjZTpBLHRhcmdldDpEfSksbW0oZyx4LFQpLGcuZWRnZUNvdW50KyssRH1lbHNle3ZhciBPPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX1NPVVJDRSxzb3VyY2U6JCx0YXJnZXQ6cX0pLG1tKGcseCxPKSxnLmVkZ2VDb3VudCsrLHF9fX0se25hbWU6InVuZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6dGMudW5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEE9eCxEPUtjKCk7cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltBLERdfSksbW0oZyx4LFQpLGcuZWRnZUNvdW50KyssRH1lbHNle3ZhciBPPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX05FSUdIQk9SLG5vZGU6JCxuZWlnaGJvcjpxfSksbW0oZyx4LE8pLHF9fX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6dGMuY2hpbGQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEE9S2MoKSxEPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuQ0hJTEQscGFyZW50OkQsY2hpbGQ6QX0pLG1tKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxBfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBPPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksRz1LYygpLFc9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFcuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuUEFSRU5ULHBhcmVudDpXLGNoaWxkOkd9KSxtbShnLCQsTyksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLEd9ZWxzZXt2YXIgZXQ9S2MoKSxhdD1LYygpLGx0PVt7dHlwZTp6aS5QQVJFTlQscGFyZW50OmV0LGNoaWxkOmF0fV07cmV0dXJuIGV0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1sdCxnLmNvbXBvdW5kQ291bnQrKyxhdH19fSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRlc2NlbmRhbnQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEE9S2MoKSxEPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuREVTQ0VOREFOVCxhbmNlc3RvcjpELGRlc2NlbmRhbnQ6QX0pLG1tKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxBfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBPPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksRz1LYygpLFc9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFcuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuQU5DRVNUT1IsYW5jZXN0b3I6VyxkZXNjZW5kYW50Okd9KSxtbShnLCQsTyksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLEd9ZWxzZXt2YXIgZXQ9S2MoKSxhdD1LYygpLGx0PVt7dHlwZTp6aS5BTkNFU1RPUixhbmNlc3RvcjpldCxkZXNjZW5kYW50OmF0fV07cmV0dXJuIGV0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1sdCxnLmNvbXBvdW5kQ291bnQrKyxhdH19fSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6dGMuc3ViamVjdCxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3QhPW51bGwmJmcuY3VycmVudFN1YmplY3QhPT14KXJldHVybiBTYygiUmVkZWZpbml0aW9uIG9mIHN1YmplY3QgaW4gc2VsZWN0b3IgYCIrZy50b1N0cmluZygpKyJgIiksITE7Zy5jdXJyZW50U3ViamVjdD14O3ZhciBUPWdbZy5sZW5ndGgtMV0sQT1ULmNoZWNrc1swXSxEPUE9PW51bGw/bnVsbDpBLnR5cGU7RD09PXppLkRJUkVDVEVEX0VER0U/QS50eXBlPXppLk5PREVfVEFSR0VUOkQ9PT16aS5VTkRJUkVDVEVEX0VER0UmJihBLnR5cGU9emkuTk9ERV9ORUlHSEJPUixBLm5vZGU9QS5ub2Rlc1sxXSxBLm5laWdoYm9yPUEubm9kZXNbMF0sQS5ub2Rlcz1udWxsKX19XTtVZS5mb3JFYWNoKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlZ2V4T2JqPW5ldyBSZWdFeHAoIl4iK3kucmVnZXgpfSk7dmFyIE5aPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEEsRD0wO0Q8VWUubGVuZ3RoO0QrKyl7dmFyIE89VWVbRF0sJD1PLm5hbWUscT1nLm1hdGNoKE8ucmVnZXhPYmopO2lmKHEhPW51bGwpe1Q9cSx4PU8sQT0kO3ZhciBTPXFbMF07Zz1nLnN1YnN0cmluZyhTLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOngsbWF0Y2g6VCxuYW1lOkEscmVtYWluaW5nOmd9fSxQWj1mdW5jdGlvbihnKXt2YXIgeD1nLm1hdGNoKC9eXHMrLyk7aWYoeCl7dmFyIFQ9eFswXTtnPWcuc3Vic3RyaW5nKFQubGVuZ3RoKX1yZXR1cm4gZ30sRlo9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcyxUPXguaW5wdXRUZXh0PWcsQT14WzBdPUtjKCk7Zm9yKHgubGVuZ3RoPTEsVD1QWihUKTs7KXt2YXIgRD1OWihUKTtpZihELmV4cHI9PW51bGwpcmV0dXJuIFNjKCJUaGUgc2VsZWN0b3IgYCIrZysiYGlzIGludmFsaWQiKSwhMTt2YXIgTz1ELm1hdGNoLnNsaWNlKDEpLCQ9RC5leHByLnBvcHVsYXRlKHgsQSxPKTtpZigkPT09ITEpcmV0dXJuITE7aWYoJCE9bnVsbCYmKEE9JCksVD1ELnJlbWFpbmluZyxULm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciBxPXhbeC5sZW5ndGgtMV07eC5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHEuc3ViamVjdD14LmN1cnJlbnRTdWJqZWN0KSxxLmVkZ2VDb3VudD14LmVkZ2VDb3VudCxxLmNvbXBvdW5kQ291bnQ9eC5jb21wb3VuZENvdW50O2Zvcih2YXIgUz0wO1M8eC5sZW5ndGg7UysrKXt2YXIgRz14W1NdO2lmKEcuY29tcG91bmRDb3VudD4wJiZHLmVkZ2VDb3VudD4wKXJldHVybiBTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoRy5lZGdlQ291bnQ+MSlyZXR1cm4gU2MoIlRoZSBzZWxlY3RvciBgIitnKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Ry5lZGdlQ291bnQ9PT0xJiZTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSxCWj1mdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZz1mdW5jdGlvbihHKXtyZXR1cm4gRz8/IiJ9LHg9ZnVuY3Rpb24oRyl7cmV0dXJuIG10KEcpPyciJytHKyciJzpnKEcpfSxUPWZ1bmN0aW9uKEcpe3JldHVybiIgIitHKyIgIn0sQT1mdW5jdGlvbihHLFcpe3ZhciBldD1HLnR5cGUsYXQ9Ry52YWx1ZTtzd2l0Y2goZXQpe2Nhc2UgemkuR1JPVVA6e3ZhciBsdD1nKGF0KTtyZXR1cm4gbHQuc3Vic3RyaW5nKDAsbHQubGVuZ3RoLTEpfWNhc2UgemkuREFUQV9DT01QQVJFOnt2YXIgZnQ9Ry5maWVsZCxBdD1HLm9wZXJhdG9yO3JldHVybiJbIitmdCtUKGcoQXQpKSt4KGF0KSsiXSJ9Y2FzZSB6aS5EQVRBX0JPT0w6e3ZhciBrdD1HLm9wZXJhdG9yLE10PUcuZmllbGQ7cmV0dXJuIlsiK2coa3QpK010KyJdIn1jYXNlIHppLkRBVEFfRVhJU1Q6e3ZhciBEdD1HLmZpZWxkO3JldHVybiJbIitEdCsiXSJ9Y2FzZSB6aS5NRVRBX0NPTVBBUkU6e3ZhciBqdD1HLm9wZXJhdG9yLFp0PUcuZmllbGQ7cmV0dXJuIltbIitadCtUKGcoanQpKSt4KGF0KSsiXV0ifWNhc2UgemkuU1RBVEU6cmV0dXJuIGF0O2Nhc2UgemkuSUQ6cmV0dXJuIiMiK2F0O2Nhc2UgemkuQ0xBU1M6cmV0dXJuIi4iK2F0O2Nhc2UgemkuUEFSRU5UOmNhc2UgemkuQ0hJTEQ6cmV0dXJuIEQoRy5wYXJlbnQsVykrVCgiPiIpK0QoRy5jaGlsZCxXKTtjYXNlIHppLkFOQ0VTVE9SOmNhc2UgemkuREVTQ0VOREFOVDpyZXR1cm4gRChHLmFuY2VzdG9yLFcpKyIgIitEKEcuZGVzY2VuZGFudCxXKTtjYXNlIHppLkNPTVBPVU5EX1NQTElUOnt2YXIgS3Q9RChHLmxlZnQsVyksenQ9RChHLnN1YmplY3QsVyksZWU9RChHLnJpZ2h0LFcpO3JldHVybiBLdCsoS3QubGVuZ3RoPjA/IiAiOiIiKSt6dCtlZX1jYXNlIHppLlRSVUU6cmV0dXJuIiJ9fSxEPWZ1bmN0aW9uKEcsVyl7cmV0dXJuIEcuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihldCxhdCxsdCl7cmV0dXJuIGV0KyhXPT09RyYmbHQ9PT0wPyIkIjoiIikrQShhdCxXKX0sIiIpfSxPPSIiLCQ9MDskPHRoaXMubGVuZ3RoOyQrKyl7dmFyIHE9dGhpc1skXTtPKz1EKHEscS5zdWJqZWN0KSx0aGlzLmxlbmd0aD4xJiYkPHRoaXMubGVuZ3RoLTEmJihPKz0iLCAiKX1yZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlPU8sT30sUlo9e3BhcnNlOkZaLHRvU3RyaW5nOkJafSxLRj1mdW5jdGlvbihnLHgsVCl7dmFyIEEsRD1tdChnKSxPPVgoZyksJD1tdChUKSxxLFMsRz0hMSxXPSExLGV0PSExO3N3aXRjaCh4LmluZGV4T2YoIiEiKT49MCYmKHg9eC5yZXBsYWNlKCIhIiwiIiksVz0hMCkseC5pbmRleE9mKCJAIik+PTAmJih4PXgucmVwbGFjZSgiQCIsIiIpLEc9ITApLChEfHwkfHxHKSYmKHE9IUQmJiFPPyIiOiIiK2csUz0iIitUKSxHJiYoZz1xPXEudG9Mb3dlckNhc2UoKSxUPVM9Uy50b0xvd2VyQ2FzZSgpKSx4KXtjYXNlIio9IjpBPXEuaW5kZXhPZihTKT49MDticmVhaztjYXNlIiQ9IjpBPXEuaW5kZXhPZihTLHEubGVuZ3RoLVMubGVuZ3RoKT49MDticmVhaztjYXNlIl49IjpBPXEuaW5kZXhPZihTKT09PTA7YnJlYWs7Y2FzZSI9IjpBPWc9PT1UO2JyZWFrO2Nhc2UiPiI6ZXQ9ITAsQT1nPlQ7YnJlYWs7Y2FzZSI+PSI6ZXQ9ITAsQT1nPj1UO2JyZWFrO2Nhc2UiPCI6ZXQ9ITAsQT1nPFQ7YnJlYWs7Y2FzZSI8PSI6ZXQ9ITAsQT1nPD1UO2JyZWFrO2RlZmF1bHQ6QT0hMTticmVha31yZXR1cm4gVyYmKGchPW51bGx8fCFldCkmJihBPSFBKSxBfSxqWj1mdW5jdGlvbihnLHgpe3N3aXRjaCh4KXtjYXNlIj8iOnJldHVybiEhZztjYXNlIiEiOnJldHVybiFnO2Nhc2UiXiI6cmV0dXJuIGc9PT12b2lkIDB9fSwkWj1mdW5jdGlvbihnKXtyZXR1cm4gZyE9PXZvaWQgMH0sQkw9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZy5kYXRhKHgpfSx6Wj1mdW5jdGlvbihnLHgpe3JldHVybiBnW3hdKCl9LFd1PVtdLE11PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiBXdVtULnR5cGVdKFQseCl9KX07V3VbemkuR1JPVVBdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4geD09PSIqInx8eD09PWcuZ3JvdXAoKX0sV3VbemkuU1RBVEVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gRFooeCxnKX0sV3VbemkuSURdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5pZCgpPT09eH0sV3VbemkuQ0xBU1NdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5oYXNDbGFzcyh4KX0sV3VbemkuTUVUQV9DT01QQVJFXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkuZmllbGQsVD15Lm9wZXJhdG9yLEE9eS52YWx1ZTtyZXR1cm4gS0YoelooZyx4KSxULEEpfSxXdVt6aS5EQVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5maWVsZCxUPXkub3BlcmF0b3IsQT15LnZhbHVlO3JldHVybiBLRihCTChnLHgpLFQsQSl9LFd1W3ppLkRBVEFfQk9PTF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkLFQ9eS5vcGVyYXRvcjtyZXR1cm4galooQkwoZyx4KSxUKX0sV3VbemkuREFUQV9FWElTVF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkO3JldHVybiB5Lm9wZXJhdG9yLCRaKEJMKGcseCkpfSxXdVt6aS5VTkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5ub2Rlc1swXSxUPXkubm9kZXNbMV0sQT1nLnNvdXJjZSgpLEQ9Zy50YXJnZXQoKTtyZXR1cm4gTXUoeCxBKSYmTXUoVCxEKXx8TXUoVCxBKSYmTXUoeCxEKX0sV3VbemkuTk9ERV9ORUlHSEJPUl09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5ub2RlLGcpJiZnLm5laWdoYm9yaG9vZCgpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCkmJk11KHkubmVpZ2hib3IseCl9KX0sV3VbemkuRElSRUNURURfRURHRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5zb3VyY2UsZy5zb3VyY2UoKSkmJk11KHkudGFyZ2V0LGcudGFyZ2V0KCkpfSxXdVt6aS5OT0RFX1NPVVJDRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5zb3VyY2UsZykmJmcub3V0Z29lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZNdSh5LnRhcmdldCx4KX0pfSxXdVt6aS5OT0RFX1RBUkdFVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS50YXJnZXQsZykmJmcuaW5jb21lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZNdSh5LnNvdXJjZSx4KX0pfSxXdVt6aS5DSElMRF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5jaGlsZCxnKSYmTXUoeS5wYXJlbnQsZy5wYXJlbnQoKSl9LFd1W3ppLlBBUkVOVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5wYXJlbnQsZykmJmcuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBNdSh5LmNoaWxkLHgpfSl9LFd1W3ppLkRFU0NFTkRBTlRdPWZ1bmN0aW9uKHksZyl7cmV0dXJuIE11KHkuZGVzY2VuZGFudCxnKSYmZy5hbmNlc3RvcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBNdSh5LmFuY2VzdG9yLHgpfSl9LFd1W3ppLkFOQ0VTVE9SXT1mdW5jdGlvbih5LGcpe3JldHVybiBNdSh5LmFuY2VzdG9yLGcpJiZnLmRlc2NlbmRhbnRzKCkuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gTXUoeS5kZXNjZW5kYW50LHgpfSl9LFd1W3ppLkNPTVBPVU5EX1NQTElUXT1mdW5jdGlvbih5LGcpe3JldHVybiBNdSh5LnN1YmplY3QsZykmJk11KHkubGVmdCxnKSYmTXUoeS5yaWdodCxnKX0sV3VbemkuVFJVRV09ZnVuY3Rpb24oKXtyZXR1cm4hMH0sV3VbemkuQ09MTEVDVElPTl09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiB4LmhhcyhnKX0sV3VbemkuRklMVEVSXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkudmFsdWU7cmV0dXJuIHgoZyl9O3ZhciBxWj1mdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKHgubGVuZ3RoPT09MSYmeFswXS5jaGVja3MubGVuZ3RoPT09MSYmeFswXS5jaGVja3NbMF0udHlwZT09PXppLklEKXJldHVybiBnLmdldEVsZW1lbnRCeUlkKHhbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIFQ9ZnVuY3Rpb24oRCl7Zm9yKHZhciBPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciAkPXhbT107aWYoTXUoJCxEKSlyZXR1cm4hMH1yZXR1cm4hMX07cmV0dXJuIHgudGV4dCgpPT1udWxsJiYoVD1mdW5jdGlvbigpe3JldHVybiEwfSksZy5maWx0ZXIoVCl9LEhaPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEE9eFtUXTtpZihNdShBLGcpKXJldHVybiEwfXJldHVybiExfSxHWj17bWF0Y2hlczpIWixmaWx0ZXI6cVp9LHltPWZ1bmN0aW9uKGcpe3RoaXMuaW5wdXRUZXh0PWcsdGhpcy5jdXJyZW50U3ViamVjdD1udWxsLHRoaXMuY29tcG91bmRDb3VudD0wLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5sZW5ndGg9MCxnPT1udWxsfHxtdChnKSYmZy5tYXRjaCgvXlxzKiQvKXx8KHh0KGcpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6emkuQ09MTEVDVElPTix2YWx1ZTpnLmNvbGxlY3Rpb24oKX1dfSk6eXQoZyk/dGhpcy5hZGRRdWVyeSh7Y2hlY2tzOlt7dHlwZTp6aS5GSUxURVIsdmFsdWU6Z31dfSk6bXQoZyk/dGhpcy5wYXJzZShnKXx8KHRoaXMuaW52YWxpZD0hMCk6YmwoIkEgc2VsZWN0b3IgbXVzdCBiZSBjcmVhdGVkIGZyb20gYSBzdHJpbmc7IGZvdW5kICIpKX0sZnY9eW0ucHJvdG90eXBlO1tSWixHWl0uZm9yRWFjaChmdW5jdGlvbih5KXtyZXR1cm4gbWUoZnYseSl9KSxmdi50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fSxmdi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxmdi5lcT1mdW5jdGlvbih5KXtyZXR1cm4gdGhpc1t5XX0sZnYuc2FtZVRleHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXkuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT15LnRleHQoKX0sZnYuYWRkUXVlcnk9ZnVuY3Rpb24oeSl7dGhpc1t0aGlzLmxlbmd0aCsrXT15fSxmdi5zZWxlY3Rvcj1mdi50b1N0cmluZzt2YXIgdnA9e2FsbEFyZTpmdW5jdGlvbihnKXt2YXIgeD1uZXcgeW0oZyk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24oVCl7cmV0dXJuIHgubWF0Y2hlcyhUKX0pfSxpczpmdW5jdGlvbihnKXt2YXIgeD1uZXcgeW0oZyk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihUKXtyZXR1cm4geC5tYXRjaGVzKFQpfSl9LHNvbWU6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoQSlyZXR1cm4hMH1yZXR1cm4hMX0sZXZlcnk6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoIUEpcmV0dXJuITF9cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24oZyl7aWYodGhpcz09PWcpcmV0dXJuITA7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzLmxlbmd0aCxUPWcubGVuZ3RoO3JldHVybiB4IT09VD8hMTp4PT09MT90aGlzWzBdPT09Z1swXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKEEpe3JldHVybiBnLmhhc0VsZW1lbnRXaXRoSWQoQS5pZCgpKX0pfSxhbnlTYW1lOmZ1bmN0aW9uKGcpe3JldHVybiBnPXRoaXMuY3koKS5jb2xsZWN0aW9uKGcpLHRoaXMuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gZy5oYXNFbGVtZW50V2l0aElkKHguaWQoKSl9KX0sYWxsQXJlTmVpZ2hib3JzOmZ1bmN0aW9uKGcpe2c9dGhpcy5jeSgpLmNvbGxlY3Rpb24oZyk7dmFyIHg9dGhpcy5uZWlnaGJvcmhvb2QoKTtyZXR1cm4gZy5ldmVyeShmdW5jdGlvbihUKXtyZXR1cm4geC5oYXNFbGVtZW50V2l0aElkKFQuaWQoKSl9KX0sY29udGFpbnM6ZnVuY3Rpb24oZyl7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzO3JldHVybiBnLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiB4Lmhhc0VsZW1lbnRXaXRoSWQoVC5pZCgpKX0pfX07dnAuYWxsQXJlTmVpZ2hib3Vycz12cC5hbGxBcmVOZWlnaGJvcnMsdnAuaGFzPXZwLmNvbnRhaW5zLHZwLmVxdWFsPXZwLmVxdWFscz12cC5zYW1lO3ZhciByZD1mdW5jdGlvbihnLHgpe3JldHVybiBmdW5jdGlvbihBLEQsTywkKXt2YXIgcT1BLFM9dGhpcyxHO2lmKHE9PW51bGw/Rz0iIjp4dChxKSYmcS5sZW5ndGg9PT0xJiYoRz1xLmlkKCkpLFMubGVuZ3RoPT09MSYmRyl7dmFyIFc9U1swXS5fcHJpdmF0ZSxldD1XLnRyYXZlcnNhbENhY2hlPVcudHJhdmVyc2FsQ2FjaGV8fHt9LGF0PWV0W3hdPWV0W3hdfHxbXSxsdD10ZChHKSxmdD1hdFtsdF07cmV0dXJuIGZ0fHwoYXRbbHRdPWcuY2FsbChTLEEsRCxPLCQpKX1lbHNlIHJldHVybiBnLmNhbGwoUyxBLEQsTywkKX19LEo1PXtwYXJlbnQ6ZnVuY3Rpb24oZyl7dmFyIHg9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgVD10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihUKXJldHVybiBUfWZvcih2YXIgQT0wO0E8dGhpcy5sZW5ndGg7QSsrKXt2YXIgRD10aGlzW0FdLE89RC5fcHJpdmF0ZS5wYXJlbnQ7TyYmeC5wdXNoKE8pfXJldHVybiB0aGlzLnNwYXduKHgsITApLmZpbHRlcihnKX0scGFyZW50czpmdW5jdGlvbihnKXtmb3IodmFyIHg9W10sVD10aGlzLnBhcmVudCgpO1Qubm9uZW1wdHkoKTspe2Zvcih2YXIgQT0wO0E8VC5sZW5ndGg7QSsrKXt2YXIgRD1UW0FdO3gucHVzaChEKX1UPVQucGFyZW50KCl9cmV0dXJuIHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfSxjb21tb25BbmNlc3RvcnM6ZnVuY3Rpb24oZyl7Zm9yKHZhciB4LFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9dGhpc1tUXSxEPUEucGFyZW50cygpO3g9eHx8RCx4PXguaW50ZXJzZWN0KEQpfXJldHVybiB4LmZpbHRlcihnKX0sb3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNPcnBoYW4oKX0pLmZpbHRlcihnKX0sbm9ub3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNDaGlsZCgpfSkuZmlsdGVyKGcpfSxjaGlsZHJlbjpyZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD0wO3g8dGhpcy5sZW5ndGg7eCsrKWZvcih2YXIgVD10aGlzW3hdLEE9VC5fcHJpdmF0ZS5jaGlsZHJlbixEPTA7RDxBLmxlbmd0aDtEKyspZy5wdXNoKEFbRF0pO3JldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNoaWxkcmVuIiksc2libGluZ3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5ub3QodGhpcykuZmlsdGVyKGcpfSxpc1BhcmVudDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSxpc0NoaWxkbGVzczpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSxpc0NoaWxkOmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtpZihnKXJldHVybiBnLmlzTm9kZSgpJiZnLl9wcml2YXRlLnBhcmVudCE9bnVsbH0saXNPcnBoYW46ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuaXNOb2RlKCkmJmcuX3ByaXZhdGUucGFyZW50PT1udWxsfSxkZXNjZW5kYW50czpmdW5jdGlvbihnKXt2YXIgeD1bXTtmdW5jdGlvbiBUKEEpe2Zvcih2YXIgRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgTz1BW0RdO3gucHVzaChPKSxPLmNoaWxkcmVuKCkubm9uZW1wdHkoKSYmVChPLmNoaWxkcmVuKCkpfX1yZXR1cm4gVCh0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfX07ZnVuY3Rpb24gWVQoeSxnLHgsVCl7Zm9yKHZhciBBPVtdLEQ9bmV3IHo1LE89eS5jeSgpLCQ9Ty5oYXNDb21wb3VuZE5vZGVzKCkscT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdO3g/QS5wdXNoKFMpOiQmJlQoQSxELFMpfWZvcig7QS5sZW5ndGg+MDspe3ZhciBHPUEuc2hpZnQoKTtnKEcpLEQuYWRkKEcuaWQoKSksJCYmVChBLEQsRyl9cmV0dXJuIHl9ZnVuY3Rpb24gVGsoeSxnLHgpe2lmKHguaXNQYXJlbnQoKSlmb3IodmFyIFQ9eC5fcHJpdmF0ZS5jaGlsZHJlbixBPTA7QTxULmxlbmd0aDtBKyspe3ZhciBEPVRbQV07Zy5oYXMoRC5pZCgpKXx8eS5wdXNoKEQpfX1KNS5mb3JFYWNoRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFlUKHRoaXMseSxnLFRrKX07ZnVuY3Rpb24gWUYoeSxnLHgpe2lmKHguaXNDaGlsZCgpKXt2YXIgVD14Ll9wcml2YXRlLnBhcmVudDtnLmhhcyhULmlkKCkpfHx5LnB1c2goVCl9fUo1LmZvckVhY2hVcD1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFlUKHRoaXMseSxnLFlGKX07ZnVuY3Rpb24gVlooeSxnLHgpe1lGKHksZyx4KSxUayh5LGcseCl9SjUuZm9yRWFjaFVwQW5kRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFlUKHRoaXMseSxnLFZaKX0sSjUuYW5jZXN0b3JzPUo1LnBhcmVudHM7dmFyIENrLFhGO0NrPVhGPXtkYXRhOkFjLmRhdGEoe2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJkYXRhIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsaW1tdXRhYmxlS2V5czp7aWQ6ITAsc291cmNlOiEwLHRhcmdldDohMCxwYXJlbnQ6ITB9LHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOkFjLmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSkscnNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InJzY3JhdGNoIixhbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMH0pLHJlbW92ZVJzY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJyc2NyYXRjaCIsdHJpZ2dlckV2ZW50OiExfSksaWQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuX3ByaXZhdGUuZGF0YS5pZH19LENrLmF0dHI9Q2suZGF0YSxDay5yZW1vdmVBdHRyPUNrLnJlbW92ZURhdGE7dmFyIFVaPVhGLFhUPXt9O2Z1bmN0aW9uIHR4KHkpe3JldHVybiBmdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKGc9PT12b2lkIDAmJihnPSEwKSx4Lmxlbmd0aCE9PTApaWYoeC5pc05vZGUoKSYmIXgucmVtb3ZlZCgpKXtmb3IodmFyIFQ9MCxBPXhbMF0sRD1BLl9wcml2YXRlLmVkZ2VzLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXTshZyYmJC5pc0xvb3AoKXx8KFQrPXkoQSwkKSl9cmV0dXJuIFR9ZWxzZSByZXR1cm59fW1lKFhULHtkZWdyZWU6dHgoZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKGcudGFyZ2V0KCkpPzI6MX0pLGluZGVncmVlOnR4KGZ1bmN0aW9uKHksZyl7cmV0dXJuIGcudGFyZ2V0KCkuc2FtZSh5KT8xOjB9KSxvdXRkZWdyZWU6dHgoZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKHkpPzE6MH0pfSk7ZnVuY3Rpb24gZXgoeSxnKXtyZXR1cm4gZnVuY3Rpb24oeCl7Zm9yKHZhciBULEE9dGhpcy5ub2RlcygpLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIE89QVtEXSwkPU9beV0oeCk7JCE9PXZvaWQgMCYmKFQ9PT12b2lkIDB8fGcoJCxUKSkmJihUPSQpfXJldHVybiBUfX1tZShYVCx7bWluRGVncmVlOmV4KCJkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heERlZ3JlZTpleCgiZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KSxtaW5JbmRlZ3JlZTpleCgiaW5kZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heEluZGVncmVlOmV4KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeSxnKXtyZXR1cm4geT5nfSksbWluT3V0ZGVncmVlOmV4KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heE91dGRlZ3JlZTpleCgib3V0ZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KX0pLG1lKFhULHt0b3RhbERlZ3JlZTpmdW5jdGlvbihnKXtmb3IodmFyIHg9MCxUPXRoaXMubm9kZXMoKSxBPTA7QTxULmxlbmd0aDtBKyspeCs9VFtBXS5kZWdyZWUoZyk7cmV0dXJuIHh9fSk7dmFyIHdwLFFGLF9rPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9MDtBPGcubGVuZ3RoO0ErKyl7dmFyIEQ9Z1tBXTtpZighRC5sb2NrZWQoKSl7dmFyIE89RC5fcHJpdmF0ZS5wb3NpdGlvbiwkPXt4OngueCE9bnVsbD94LngtTy54OjAseTp4LnkhPW51bGw/eC55LU8ueTowfTtELmlzUGFyZW50KCkmJiEoJC54PT09MCYmJC55PT09MCkmJkQuY2hpbGRyZW4oKS5zaGlmdCgkLFQpLEQuZGlydHlCb3VuZGluZ0JveENhY2hlKCl9fX0sWkY9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6ZnVuY3Rpb24oZyl7Zy51cGRhdGVDb21wb3VuZEJvdW5kcygpfSxiZWZvcmVTZXQ6ZnVuY3Rpb24oZyx4KXtfayhnLHgsITEpfSxvblNldDpmdW5jdGlvbihnKXtnLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSxjYW5TZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fTt3cD1RRj17cG9zaXRpb246QWMuZGF0YShaRiksc2lsZW50UG9zaXRpb246QWMuZGF0YShtZSh7fSxaRix7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0OmZ1bmN0aW9uKGcseCl7X2soZyx4LCEwKX0sb25TZXQ6ZnVuY3Rpb24oZyl7Zy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX19KSkscG9zaXRpb25zOmZ1bmN0aW9uKGcseCl7aWYoaHQoZykpeD90aGlzLnNpbGVudFBvc2l0aW9uKGcpOnRoaXMucG9zaXRpb24oZyk7ZWxzZSBpZih5dChnKSl7dmFyIFQ9ZyxBPXRoaXMuY3koKTtBLnN0YXJ0QmF0Y2goKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIE89dGhpc1tEXSwkPXZvaWQgMDsoJD1UKE8sRCkpJiYoeD9PLnNpbGVudFBvc2l0aW9uKCQpOk8ucG9zaXRpb24oJCkpfUEuZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50UG9zaXRpb25zOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnBvc2l0aW9ucyhnLCEwKX0sc2hpZnQ6ZnVuY3Rpb24oZyx4LFQpe3ZhciBBO2lmKGh0KGcpPyhBPXt4OlgoZy54KT9nLng6MCx5OlgoZy55KT9nLnk6MH0sVD14KTptdChnKSYmWCh4KSYmKEE9e3g6MCx5OjB9LEFbZ109eCksQSE9bnVsbCl7dmFyIEQ9dGhpcy5jeSgpO0Quc3RhcnRCYXRjaCgpO2Zvcih2YXIgTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgJD10aGlzW09dO2lmKCEoRC5oYXNDb21wb3VuZE5vZGVzKCkmJiQuaXNDaGlsZCgpJiYkLmFuY2VzdG9ycygpLmFueVNhbWUodGhpcykpKXt2YXIgcT0kLnBvc2l0aW9uKCksUz17eDpxLngrQS54LHk6cS55K0EueX07VD8kLnNpbGVudFBvc2l0aW9uKFMpOiQucG9zaXRpb24oUyl9fUQuZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50U2hpZnQ6ZnVuY3Rpb24oZyx4KXtyZXR1cm4gaHQoZyk/dGhpcy5zaGlmdChnLCEwKTptdChnKSYmWCh4KSYmdGhpcy5zaGlmdChnLHgsITApLHRoaXN9LHJlbmRlcmVkUG9zaXRpb246ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzWzBdLEE9dGhpcy5jeSgpLEQ9QS56b29tKCksTz1BLnBhbigpLCQ9aHQoZyk/Zzp2b2lkIDAscT0kIT09dm9pZCAwfHx4IT09dm9pZCAwJiZtdChnKTtpZihUJiZULmlzTm9kZSgpKWlmKHEpZm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBHPXRoaXNbU107eCE9PXZvaWQgMD9HLnBvc2l0aW9uKGcsKHgtT1tnXSkvRCk6JCE9PXZvaWQgMCYmRy5wb3NpdGlvbihRUCgkLEQsTykpfWVsc2V7dmFyIFc9VC5wb3NpdGlvbigpO3JldHVybiAkPU9UKFcsRCxPKSxnPT09dm9pZCAwPyQ6JFtnXX1lbHNlIGlmKCFxKXJldHVybjtyZXR1cm4gdGhpc30scmVsYXRpdmVQb3NpdGlvbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXNbMF0sQT10aGlzLmN5KCksRD1odChnKT9nOnZvaWQgMCxPPUQhPT12b2lkIDB8fHghPT12b2lkIDAmJm10KGcpLCQ9QS5oYXNDb21wb3VuZE5vZGVzKCk7aWYoVCYmVC5pc05vZGUoKSlpZihPKWZvcih2YXIgcT0wO3E8dGhpcy5sZW5ndGg7cSsrKXt2YXIgUz10aGlzW3FdLEc9JD9TLnBhcmVudCgpOm51bGwsVz1HJiZHLmxlbmd0aD4wLGV0PVc7VyYmKEc9R1swXSk7dmFyIGF0PWV0P0cucG9zaXRpb24oKTp7eDowLHk6MH07eCE9PXZvaWQgMD9TLnBvc2l0aW9uKGcseCthdFtnXSk6RCE9PXZvaWQgMCYmUy5wb3NpdGlvbih7eDpELngrYXQueCx5OkQueSthdC55fSl9ZWxzZXt2YXIgbHQ9VC5wb3NpdGlvbigpLGZ0PSQ/VC5wYXJlbnQoKTpudWxsLEF0PWZ0JiZmdC5sZW5ndGg+MCxrdD1BdDtBdCYmKGZ0PWZ0WzBdKTt2YXIgTXQ9a3Q/ZnQucG9zaXRpb24oKTp7eDowLHk6MH07cmV0dXJuIEQ9e3g6bHQueC1NdC54LHk6bHQueS1NdC55fSxnPT09dm9pZCAwP0Q6RFtnXX1lbHNlIGlmKCFPKXJldHVybjtyZXR1cm4gdGhpc319LHdwLm1vZGVsUG9zaXRpb249d3AucG9pbnQ9d3AucG9zaXRpb24sd3AubW9kZWxQb3NpdGlvbnM9d3AucG9pbnRzPXdwLnBvc2l0aW9ucyx3cC5yZW5kZXJlZFBvaW50PXdwLnJlbmRlcmVkUG9zaXRpb24sd3AucmVsYXRpdmVQb2ludD13cC5yZWxhdGl2ZVBvc2l0aW9uO3ZhciBKRj1RRixueCxxYjtueD1xYj17fSxxYi5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuYm91bmRpbmdCb3goeSkseD10aGlzLmN5KCksVD14Lnpvb20oKSxBPXgucGFuKCksRD1nLngxKlQrQS54LE89Zy54MipUK0EueCwkPWcueTEqVCtBLnkscT1nLnkyKlQrQS55O3JldHVybnt4MTpELHgyOk8seTE6JCx5MjpxLHc6Ty1ELGg6cS0kfX0scWIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLGc9dGhpcy5jeSgpO3JldHVybiFnLnN0eWxlRW5hYmxlZCgpfHwhZy5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oeCl7aWYoeC5pc1BhcmVudCgpKXt2YXIgVD14Ll9wcml2YXRlO1QuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxULmJiQ2FjaGU9bnVsbCx5fHx4LmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxxYi51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxnPXRoaXMuY3koKTtpZighZy5zdHlsZUVuYWJsZWQoKXx8IWcuaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF5JiZnLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24geChPKXtpZighTy5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1PLl9wcml2YXRlLHE9Ty5jaGlsZHJlbigpLFM9Ty5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsRz17d2lkdGg6e3ZhbDpPLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0Ok8ucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6Ty5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOk8ucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6Ty5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206Ty5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFc9cS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpTLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLGV0PSQucG9zaXRpb247KFcudz09PTB8fFcuaD09PTApJiYoVz17dzpPLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6Ty5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFcueDE9ZXQueC1XLncvMixXLngyPWV0LngrVy53LzIsVy55MT1ldC55LVcuaC8yLFcueTI9ZXQueStXLmgvMik7ZnVuY3Rpb24gYXQoVnQsZmUsZ2Upe3ZhciBuZT0wLFBlPTAscGU9ZmUrZ2U7cmV0dXJuIFZ0PjAmJnBlPjAmJihuZT1mZS9wZSpWdCxQZT1nZS9wZSpWdCkse2JpYXNEaWZmOm5lLGJpYXNDb21wbGVtZW50RGlmZjpQZX19ZnVuY3Rpb24gbHQoVnQsZmUsZ2UsbmUpe2lmKGdlLnVuaXRzPT09IiUiKXN3aXRjaChuZSl7Y2FzZSJ3aWR0aCI6cmV0dXJuIFZ0PjA/Z2UucGZWYWx1ZSpWdDowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gZmU+MD9nZS5wZlZhbHVlKmZlOjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gVnQ+MCYmZmU+MD9nZS5wZlZhbHVlKihWdCtmZSkvMjowO2Nhc2UibWluIjpyZXR1cm4gVnQ+MCYmZmU+MD9WdD5mZT9nZS5wZlZhbHVlKmZlOmdlLnBmVmFsdWUqVnQ6MDtjYXNlIm1heCI6cmV0dXJuIFZ0PjAmJmZlPjA/VnQ+ZmU/Z2UucGZWYWx1ZSpWdDpnZS5wZlZhbHVlKmZlOjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBnZS51bml0cz09PSJweCI/Z2UucGZWYWx1ZTowfXZhciBmdD1HLndpZHRoLmxlZnQudmFsdWU7Ry53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmRy53aWR0aC52YWw+MCYmKGZ0PWZ0KjEwMC9HLndpZHRoLnZhbCk7dmFyIEF0PUcud2lkdGgucmlnaHQudmFsdWU7Ry53aWR0aC5yaWdodC51bml0cz09PSJweCImJkcud2lkdGgudmFsPjAmJihBdD1BdCoxMDAvRy53aWR0aC52YWwpO3ZhciBrdD1HLmhlaWdodC50b3AudmFsdWU7Ry5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmRy5oZWlnaHQudmFsPjAmJihrdD1rdCoxMDAvRy5oZWlnaHQudmFsKTt2YXIgTXQ9Ry5oZWlnaHQuYm90dG9tLnZhbHVlO0cuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJkcuaGVpZ2h0LnZhbD4wJiYoTXQ9TXQqMTAwL0cuaGVpZ2h0LnZhbCk7dmFyIER0PWF0KEcud2lkdGgudmFsLVcudyxmdCxBdCksanQ9RHQuYmlhc0RpZmYsWnQ9RHQuYmlhc0NvbXBsZW1lbnREaWZmLEt0PWF0KEcuaGVpZ2h0LnZhbC1XLmgsa3QsTXQpLHp0PUt0LmJpYXNEaWZmLGVlPUt0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPWx0KFcudyxXLmgsTy5wc3R5bGUoInBhZGRpbmciKSxPLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChXLncsRy53aWR0aC52YWwpLGV0Lng9KC1qdCtXLngxK1cueDIrWnQpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFcuaCxHLmhlaWdodC52YWwpLGV0Lnk9KC16dCtXLnkxK1cueTIrZWUpLzJ9Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBBPXRoaXNbVF0sRD1BLl9wcml2YXRlOyghRC5jb21wb3VuZEJvdW5kc0NsZWFufHx5KSYmKHgoQSksZy5iYXRjaGluZygpfHwoRC5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBDMD1mdW5jdGlvbihnKXtyZXR1cm4gZz09PTEvMHx8Zz09PS0xLzA/MDpnfSxtcD1mdW5jdGlvbihnLHgsVCxBLEQpe0EteD09PTB8fEQtVD09PTB8fHg9PW51bGx8fFQ9PW51bGx8fEE9PW51bGx8fEQ9PW51bGx8fChnLngxPXg8Zy54MT94OmcueDEsZy54Mj1BPmcueDI/QTpnLngyLGcueTE9VDxnLnkxP1Q6Zy55MSxnLnkyPUQ+Zy55Mj9EOmcueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxKX0sUzM9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geD09bnVsbD9nOm1wKGcseC54MSx4LnkxLHgueDIseC55Mil9LFNrPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gYnAoZyx4LFQpfSxRVD1mdW5jdGlvbihnLHgsVCl7aWYoIXguY3koKS5oZWFkbGVzcygpKXt2YXIgQT14Ll9wcml2YXRlLEQ9QS5yc3R5bGUsTz1ELmFycm93V2lkdGgvMiwkPXgucHN0eWxlKFQrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLHEsUztpZigkIT09Im5vbmUiKXtUPT09InNvdXJjZSI/KHE9RC5zcmNYLFM9RC5zcmNZKTpUPT09InRhcmdldCI/KHE9RC50Z3RYLFM9RC50Z3RZKToocT1ELm1pZFgsUz1ELm1pZFkpO3ZhciBHPUEuYXJyb3dCb3VuZHM9QS5hcnJvd0JvdW5kc3x8e30sVz1HW1RdPUdbVF18fHt9O1cueDE9cS1PLFcueTE9Uy1PLFcueDI9cStPLFcueTI9UytPLFcudz1XLngyLVcueDEsVy5oPVcueTItVy55MSxQVChXLDEpLG1wKGcsVy54MSxXLnkxLFcueDIsVy55Mil9fX0sdEI9ZnVuY3Rpb24oZyx4LFQpe2lmKCF4LmN5KCkuaGVhZGxlc3MoKSl7dmFyIEE7VD9BPVQrIi0iOkE9IiI7dmFyIEQ9eC5fcHJpdmF0ZSxPPUQucnN0eWxlLCQ9eC5wc3R5bGUoQSsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgcT14LnBzdHlsZSgidGV4dC1oYWxpZ24iKSxTPXgucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLEc9U2soTywibGFiZWxXaWR0aCIsVCksVz1TayhPLCJsYWJlbEhlaWdodCIsVCksZXQ9U2soTywibGFiZWxYIixUKSxhdD1TayhPLCJsYWJlbFkiLFQpLGx0PXgucHN0eWxlKEErInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGZ0PXgucHN0eWxlKEErInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLEF0PXguaXNFZGdlKCksa3Q9eC5wc3R5bGUoQSsidGV4dC1yb3RhdGlvbiIpLE10PXgucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLER0PXgucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsanQ9RHQvMixadD14LnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLEt0PTIsenQ9VyxlZT1HLFZ0PWVlLzIsZmU9enQvMixnZSxuZSxQZSxwZTtpZihBdClnZT1ldC1WdCxuZT1ldCtWdCxQZT1hdC1mZSxwZT1hdCtmZTtlbHNle3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOmdlPWV0LWVlLG5lPWV0O2JyZWFrO2Nhc2UiY2VudGVyIjpnZT1ldC1WdCxuZT1ldCtWdDticmVhaztjYXNlInJpZ2h0IjpnZT1ldCxuZT1ldCtlZTticmVha31zd2l0Y2goUy52YWx1ZSl7Y2FzZSJ0b3AiOlBlPWF0LXp0LHBlPWF0O2JyZWFrO2Nhc2UiY2VudGVyIjpQZT1hdC1mZSxwZT1hdCtmZTticmVhaztjYXNlImJvdHRvbSI6UGU9YXQscGU9YXQrenQ7YnJlYWt9fWdlKz1sdC1NYXRoLm1heChNdCxqdCktWnQtS3QsbmUrPWx0K01hdGgubWF4KE10LGp0KStadCtLdCxQZSs9ZnQtTWF0aC5tYXgoTXQsanQpLVp0LUt0LHBlKz1mdCtNYXRoLm1heChNdCxqdCkrWnQrS3Q7dmFyIGJuPVR8fCJtYWluIix6ZT1ELmxhYmVsQm91bmRzLFZlPXplW2JuXT16ZVtibl18fHt9O1ZlLngxPWdlLFZlLnkxPVBlLFZlLngyPW5lLFZlLnkyPXBlLFZlLnc9bmUtZ2UsVmUuaD1wZS1QZTt2YXIgRW49QXQmJmt0LnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLERuPWt0LnBmVmFsdWUhPW51bGwmJmt0LnBmVmFsdWUhPT0wO2lmKEVufHxEbil7dmFyIEtuPUVuP1NrKEQucnN0eWxlLCJsYWJlbEFuZ2xlIixUKTprdC5wZlZhbHVlLFNuPU1hdGguY29zKEtuKSxXbj1NYXRoLnNpbihLbikscnI9KGdlK25lKS8yLHZyPShQZStwZSkvMjtpZighQXQpe3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOnJyPW5lO2JyZWFrO2Nhc2UicmlnaHQiOnJyPWdlO2JyZWFrfXN3aXRjaChTLnZhbHVlKXtjYXNlInRvcCI6dnI9cGU7YnJlYWs7Y2FzZSJib3R0b20iOnZyPVBlO2JyZWFrfX12YXIgdXI9ZnVuY3Rpb24oa2EsQ2kpe3JldHVybiBrYT1rYS1ycixDaT1DaS12cix7eDprYSpTbi1DaSpXbitycix5OmthKlduK0NpKlNuK3ZyfX0sdHI9dXIoZ2UsUGUpLHduPXVyKGdlLHBlKSxncj11cihuZSxQZSksZnI9dXIobmUscGUpO2dlPU1hdGgubWluKHRyLngsd24ueCxnci54LGZyLngpLG5lPU1hdGgubWF4KHRyLngsd24ueCxnci54LGZyLngpLFBlPU1hdGgubWluKHRyLnksd24ueSxnci55LGZyLnkpLHBlPU1hdGgubWF4KHRyLnksd24ueSxnci55LGZyLnkpfXZhciBKcj1ibisiUm90Iix3aT16ZVtKcl09emVbSnJdfHx7fTt3aS54MT1nZSx3aS55MT1QZSx3aS54Mj1uZSx3aS55Mj1wZSx3aS53PW5lLWdlLHdpLmg9cGUtUGUsbXAoZyxnZSxQZSxuZSxwZSksbXAoRC5sYWJlbEJvdW5kcy5hbGwsZ2UsUGUsbmUscGUpfXJldHVybiBnfX0sV1o9ZnVuY3Rpb24oZyx4KXt2YXIgVD1nLl9wcml2YXRlLmN5LEE9VC5zdHlsZUVuYWJsZWQoKSxEPVQuaGVhZGxlc3MoKSxPPVJkKCksJD1nLl9wcml2YXRlLHE9Zy5pc05vZGUoKSxTPWcuaXNFZGdlKCksRyxXLGV0LGF0LGx0LGZ0LEF0PSQucnN0eWxlLGt0PXEmJkE/Zy5wc3R5bGUoImJvdW5kcy1leHBhbnNpb24iKS5wZlZhbHVlOlswXSxNdD1mdW5jdGlvbihncyl7cmV0dXJuIGdzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUifSxEdD0hQXx8TXQoZykmJighU3x8TXQoZy5zb3VyY2UoKSkmJk10KGcudGFyZ2V0KCkpKTtpZihEdCl7dmFyIGp0PTAsWnQ9MDtBJiZ4LmluY2x1ZGVPdmVybGF5cyYmKGp0PWcucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSxqdCE9PTAmJihadD1nLnBzdHlsZSgib3ZlcmxheS1wYWRkaW5nIikudmFsdWUpKTt2YXIgS3Q9MCx6dD0wO0EmJnguaW5jbHVkZVVuZGVybGF5cyYmKEt0PWcucHN0eWxlKCJ1bmRlcmxheS1vcGFjaXR5IikudmFsdWUsS3QhPT0wJiYoenQ9Zy5wc3R5bGUoInVuZGVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBlZT1NYXRoLm1heChadCx6dCksVnQ9MCxmZT0wO2lmKEEmJihWdD1nLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGZlPVZ0LzIpLHEmJnguaW5jbHVkZU5vZGVzKXt2YXIgZ2U9Zy5wb3NpdGlvbigpO2x0PWdlLngsZnQ9Z2UueTt2YXIgbmU9Zy5vdXRlcldpZHRoKCksUGU9bmUvMixwZT1nLm91dGVySGVpZ2h0KCksYm49cGUvMjtHPWx0LVBlLFc9bHQrUGUsZXQ9ZnQtYm4sYXQ9ZnQrYm4sbXAoTyxHLGV0LFcsYXQpfWVsc2UgaWYoUyYmeC5pbmNsdWRlRWRnZXMpaWYoQSYmIUQpe3ZhciB6ZT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihHPU1hdGgubWluKEF0LnNyY1gsQXQubWlkWCxBdC50Z3RYKSxXPU1hdGgubWF4KEF0LnNyY1gsQXQubWlkWCxBdC50Z3RYKSxldD1NYXRoLm1pbihBdC5zcmNZLEF0Lm1pZFksQXQudGd0WSksYXQ9TWF0aC5tYXgoQXQuc3JjWSxBdC5taWRZLEF0LnRndFkpLEctPWZlLFcrPWZlLGV0LT1mZSxhdCs9ZmUsbXAoTyxHLGV0LFcsYXQpLHplPT09ImhheXN0YWNrIil7dmFyIFZlPUF0LmhheXN0YWNrUHRzO2lmKFZlJiZWZS5sZW5ndGg9PT0yKXtpZihHPVZlWzBdLngsZXQ9VmVbMF0ueSxXPVZlWzFdLngsYXQ9VmVbMV0ueSxHPlcpe3ZhciBFbj1HO0c9VyxXPUVufWlmKGV0PmF0KXt2YXIgRG49ZXQ7ZXQ9YXQsYXQ9RG59bXAoTyxHLWZlLGV0LWZlLFcrZmUsYXQrZmUpfX1lbHNlIGlmKHplPT09ImJlemllciJ8fHplPT09InVuYnVuZGxlZC1iZXppZXIifHx6ZT09PSJzZWdtZW50cyJ8fHplPT09InRheGkiKXt2YXIgS247c3dpdGNoKHplKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjpLbj1BdC5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjpLbj1BdC5saW5lUHRzO2JyZWFrfWlmKEtuIT1udWxsKWZvcih2YXIgU249MDtTbjxLbi5sZW5ndGg7U24rKyl7dmFyIFduPUtuW1NuXTtHPVduLngtZmUsVz1Xbi54K2ZlLGV0PVduLnktZmUsYXQ9V24ueStmZSxtcChPLEcsZXQsVyxhdCl9fX1lbHNle3ZhciBycj1nLnNvdXJjZSgpLHZyPXJyLnBvc2l0aW9uKCksdXI9Zy50YXJnZXQoKSx0cj11ci5wb3NpdGlvbigpO2lmKEc9dnIueCxXPXRyLngsZXQ9dnIueSxhdD10ci55LEc+Vyl7dmFyIHduPUc7Rz1XLFc9d259aWYoZXQ+YXQpe3ZhciBncj1ldDtldD1hdCxhdD1ncn1HLT1mZSxXKz1mZSxldC09ZmUsYXQrPWZlLG1wKE8sRyxldCxXLGF0KX1pZihBJiZ4LmluY2x1ZGVFZGdlcyYmUyYmKFFUKE8sZywibWlkLXNvdXJjZSIpLFFUKE8sZywibWlkLXRhcmdldCIpLFFUKE8sZywic291cmNlIiksUVQoTyxnLCJ0YXJnZXQiKSksQSl7dmFyIGZyPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoZnIpe3ZhciBKcj1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHdpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7bXAoTyxPLngxK0pyLE8ueTErd2ksTy54MitKcixPLnkyK3dpKX19dmFyIEtzPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O0pQKEtzLE8pLGtMKEtzLGt0KSxQVChLcywxKSxBJiYoRz1PLngxLFc9Ty54MixldD1PLnkxLGF0PU8ueTIsbXAoTyxHLWVlLGV0LWVlLFcrZWUsYXQrZWUpKTt2YXIga2E9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307SlAoa2EsTyksa0woa2Esa3QpLFBUKGthLDEpO3ZhciBDaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O0NpLmFsbCE9bnVsbD9DWShDaS5hbGwpOkNpLmFsbD1SZCgpLEEmJnguaW5jbHVkZUxhYmVscyYmKHguaW5jbHVkZU1haW5MYWJlbHMmJnRCKE8sZyxudWxsKSxTJiYoeC5pbmNsdWRlU291cmNlTGFiZWxzJiZ0QihPLGcsInNvdXJjZSIpLHguaW5jbHVkZVRhcmdldExhYmVscyYmdEIoTyxnLCJ0YXJnZXQiKSkpfXJldHVybiBPLngxPUMwKE8ueDEpLE8ueTE9QzAoTy55MSksTy54Mj1DMChPLngyKSxPLnkyPUMwKE8ueTIpLE8udz1DMChPLngyLU8ueDEpLE8uaD1DMChPLnkyLU8ueTEpLE8udz4wJiZPLmg+MCYmRHQmJihrTChPLGt0KSxQVChPLDEpKSxPfSxlQj1mdW5jdGlvbihnKXt2YXIgeD0wLFQ9ZnVuY3Rpb24oTyl7cmV0dXJuKE8/MTowKTw8eCsrfSxBPTA7cmV0dXJuIEErPVQoZy5pbmN1ZGVOb2RlcyksQSs9VChnLmluY2x1ZGVFZGdlcyksQSs9VChnLmluY2x1ZGVMYWJlbHMpLEErPVQoZy5pbmNsdWRlTWFpbkxhYmVscyksQSs9VChnLmluY2x1ZGVTb3VyY2VMYWJlbHMpLEErPVQoZy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxBKz1UKGcuaW5jbHVkZU92ZXJsYXlzKSxBfSxuQj1mdW5jdGlvbihnKXtpZihnLmlzRWRnZSgpKXt2YXIgeD1nLnNvdXJjZSgpLnBvc2l0aW9uKCksVD1nLnRhcmdldCgpLnBvc2l0aW9uKCksQT1mdW5jdGlvbihPKXtyZXR1cm4gTWF0aC5yb3VuZChPKX07cmV0dXJuIGwxKFtBKHgueCksQSh4LnkpLEEoVC54KSxBKFQueSldKX1lbHNlIHJldHVybiAwfSxyQj1mdW5jdGlvbihnLHgpe3ZhciBUPWcuX3ByaXZhdGUsQSxEPWcuaXNFZGdlKCksTz14PT1udWxsP2lCOmVCKHgpLCQ9Tz09PWlCLHE9bkIoZyksUz1ULmJiQ2FjaGVQb3NLZXk9PT1xLEc9eC51c2VDYWNoZSYmUyxXPWZ1bmN0aW9uKGZ0KXtyZXR1cm4gZnQuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8ZnQuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sZXQ9IUd8fFcoZyl8fEQmJlcoZy5zb3VyY2UoKSl8fFcoZy50YXJnZXQoKSk7aWYoZXQ/KFN8fGcucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKEcpLEE9V1ooZyxBayksVC5iYkNhY2hlPUEsVC5iYkNhY2hlUG9zS2V5PXEpOkE9VC5iYkNhY2hlLCEkKXt2YXIgYXQ9Zy5pc05vZGUoKTtBPVJkKCksKHguaW5jbHVkZU5vZGVzJiZhdHx8eC5pbmNsdWRlRWRnZXMmJiFhdCkmJih4LmluY2x1ZGVPdmVybGF5cz9TMyhBLFQub3ZlcmxheUJvdW5kcyk6UzMoQSxULmJvZHlCb3VuZHMpKSx4LmluY2x1ZGVMYWJlbHMmJih4LmluY2x1ZGVNYWluTGFiZWxzJiYoIUR8fHguaW5jbHVkZVNvdXJjZUxhYmVscyYmeC5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9TMyhBLFQubGFiZWxCb3VuZHMuYWxsKTooeC5pbmNsdWRlTWFpbkxhYmVscyYmUzMoQSxULmxhYmVsQm91bmRzLm1haW5Sb3QpLHguaW5jbHVkZVNvdXJjZUxhYmVscyYmUzMoQSxULmxhYmVsQm91bmRzLnNvdXJjZVJvdCkseC5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZTMyhBLFQubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLEEudz1BLngyLUEueDEsQS5oPUEueTItQS55MX1yZXR1cm4gQX0sQWs9e2luY2x1ZGVOb2RlczohMCxpbmNsdWRlRWRnZXM6ITAsaW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTWFpbkxhYmVsczohMCxpbmNsdWRlU291cmNlTGFiZWxzOiEwLGluY2x1ZGVUYXJnZXRMYWJlbHM6ITAsaW5jbHVkZU92ZXJsYXlzOiEwLGluY2x1ZGVVbmRlcmxheXM6ITAsdXNlQ2FjaGU6ITB9LGlCPWVCKEFrKSxzQj1CZihBayk7cWIuYm91bmRpbmdCb3g9ZnVuY3Rpb24oeSl7dmFyIGc7aWYodGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUhPW51bGwmJiF0aGlzWzBdLl9wcml2YXRlLnN0eWxlRGlydHkmJih5PT09dm9pZCAwfHx5LnVzZUNhY2hlPT09dm9pZCAwfHx5LnVzZUNhY2hlPT09ITApKXk9PT12b2lkIDA/eT1Bazp5PXNCKHkpLGc9ckIodGhpc1swXSx5KTtlbHNle2c9UmQoKSx5PXl8fEFrO3ZhciB4PXNCKHkpLFQ9dGhpcyxBPVQuY3koKSxEPUEuc3R5bGVFbmFibGVkKCk7aWYoRClmb3IodmFyIE89MDtPPFQubGVuZ3RoO08rKyl7dmFyICQ9VFtPXSxxPSQuX3ByaXZhdGUsUz1uQigkKSxHPXEuYmJDYWNoZVBvc0tleT09PVMsVz14LnVzZUNhY2hlJiZHJiYhcS5zdHlsZURpcnR5OyQucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFcpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXkudXNlQ2FjaGUpO2Zvcih2YXIgZXQ9MDtldDxULmxlbmd0aDtldCsrKXt2YXIgYXQ9VFtldF07UzMoZyxyQihhdCx4KSl9fXJldHVybiBnLngxPUMwKGcueDEpLGcueTE9QzAoZy55MSksZy54Mj1DMChnLngyKSxnLnkyPUMwKGcueTIpLGcudz1DMChnLngyLWcueDEpLGcuaD1DMChnLnkyLWcueTEpLGd9LHFiLmRpcnR5Qm91bmRpbmdCb3hDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgZz10aGlzW3ldLl9wcml2YXRlO2cuYmJDYWNoZT1udWxsLGcuYmJDYWNoZVBvc0tleT1udWxsLGcuYm9keUJvdW5kcz1udWxsLGcub3ZlcmxheUJvdW5kcz1udWxsLGcubGFiZWxCb3VuZHMuYWxsPW51bGwsZy5sYWJlbEJvdW5kcy5zb3VyY2U9bnVsbCxnLmxhYmVsQm91bmRzLnRhcmdldD1udWxsLGcubGFiZWxCb3VuZHMubWFpbj1udWxsLGcubGFiZWxCb3VuZHMuc291cmNlUm90PW51bGwsZy5sYWJlbEJvdW5kcy50YXJnZXRSb3Q9bnVsbCxnLmxhYmVsQm91bmRzLm1haW5Sb3Q9bnVsbCxnLmFycm93Qm91bmRzLnNvdXJjZT1udWxsLGcuYXJyb3dCb3VuZHMudGFyZ2V0PW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXNvdXJjZSJdPW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXRhcmdldCJdPW51bGx9cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgiYm91bmRzIiksdGhpc30scWIuYm91bmRpbmdCb3hBdD1mdW5jdGlvbih5KXt2YXIgZz10aGlzLm5vZGVzKCkseD10aGlzLmN5KCksVD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxBPXguY29sbGVjdGlvbigpO2lmKFQmJihBPWcuZmlsdGVyKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzUGFyZW50KCl9KSxnPWcubm90KEEpKSxodCh5KSl7dmFyIEQ9eTt5PWZ1bmN0aW9uKCl7cmV0dXJuIER9fXZhciBPPWZ1bmN0aW9uKEcsVyl7cmV0dXJuIEcuX3ByaXZhdGUuYmJBdE9sZFBvcz15KEcsVyl9LCQ9ZnVuY3Rpb24oRyl7cmV0dXJuIEcuX3ByaXZhdGUuYmJBdE9sZFBvc307eC5zdGFydEJhdGNoKCksZy5mb3JFYWNoKE8pLnNpbGVudFBvc2l0aW9ucyh5KSxUJiYoQS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxBLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLEEudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKTt2YXIgcT1UWSh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZy5zaWxlbnRQb3NpdGlvbnMoJCksVCYmKEEuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksQS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxBLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSkseC5lbmRCYXRjaCgpLHF9LG54LmJvdW5kaW5nYm94PW54LmJiPW54LmJvdW5kaW5nQm94LG54LnJlbmRlcmVkQm91bmRpbmdib3g9bngucmVuZGVyZWRCb3VuZGluZ0JveDt2YXIgS1o9cWIsTGssTWs7TGs9TWs9e307dmFyIHhtPWZ1bmN0aW9uKGcpe2cudXBwZXJjYXNlTmFtZT1HZShnLm5hbWUpLGcuYXV0b05hbWU9ImF1dG8iK2cudXBwZXJjYXNlTmFtZSxnLmxhYmVsTmFtZT0ibGFiZWwiK2cudXBwZXJjYXNlTmFtZSxnLm91dGVyTmFtZT0ib3V0ZXIiK2cudXBwZXJjYXNlTmFtZSxnLnVwcGVyY2FzZU91dGVyTmFtZT1HZShnLm91dGVyTmFtZSksTGtbZy5uYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF0sQT1ULl9wcml2YXRlLEQ9QS5jeSxPPUQuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFQpaWYoTyl7aWYoVC5pc1BhcmVudCgpKXJldHVybiBULnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksQVtnLmF1dG9OYW1lXXx8MDt2YXIgJD1ULnBzdHlsZShnLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gVC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxBLnJzdHlsZVtnLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSxMa1sib3V0ZXIiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdLEE9VC5fcHJpdmF0ZSxEPUEuY3ksTz1ELl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihUKWlmKE8pe3ZhciAkPVRbZy5uYW1lXSgpLHE9VC5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsUz0yKlQucGFkZGluZygpO3JldHVybiAkK3ErU31lbHNlIHJldHVybiAxfSxMa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdO2lmKFQpe3ZhciBBPVRbZy5uYW1lXSgpO3JldHVybiBBKnRoaXMuY3koKS56b29tKCl9fSxMa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF07aWYoVCl7dmFyIEE9VFtnLm91dGVyTmFtZV0oKTtyZXR1cm4gQSp0aGlzLmN5KCkuem9vbSgpfX19O3htKHtuYW1lOiJ3aWR0aCJ9KSx4bSh7bmFtZToiaGVpZ2h0In0pLE1rLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdLGc9eS5fcHJpdmF0ZTtyZXR1cm4geS5pc1BhcmVudCgpPyh5LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksZy5hdXRvUGFkZGluZyE9PXZvaWQgMD9nLmF1dG9QYWRkaW5nOnkucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eS5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxNay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5LmhlaWdodCgpKzIqeS5wYWRkaW5nKCl9LE1rLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpc1swXTtyZXR1cm4geS53aWR0aCgpKzIqeS5wYWRkaW5nKCl9O3ZhciBSTD1NayxZWj1mdW5jdGlvbihnLHgpe2lmKGcuaXNFZGdlKCkpcmV0dXJuIHgoZyl9LFhaPWZ1bmN0aW9uKGcseCl7aWYoZy5pc0VkZ2UoKSl7dmFyIFQ9Zy5jeSgpO3JldHVybiBPVCh4KGcpLFQuem9vbSgpLFQucGFuKCkpfX0sUVo9ZnVuY3Rpb24oZyx4KXtpZihnLmlzRWRnZSgpKXt2YXIgVD1nLmN5KCksQT1ULnBhbigpLEQ9VC56b29tKCk7cmV0dXJuIHgoZykubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPVChPLEQsQSl9KX19LFpaPWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlbmRlcmVyKCkuZ2V0Q29udHJvbFBvaW50cyhnKX0sSlo9ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGcpfSx0Sj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KGcpfSxlSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGcpfSxuSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldEVkZ2VNaWRwb2ludChnKX0sYUI9e2NvbnRyb2xQb2ludHM6e2dldDpaWixtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6SlosbXVsdDohMH0sc291cmNlRW5kcG9pbnQ6e2dldDp0Sn0sdGFyZ2V0RW5kcG9pbnQ6e2dldDplSn0sbWlkcG9pbnQ6e2dldDpuSn19LHJKPWZ1bmN0aW9uKGcpe3JldHVybiJyZW5kZXJlZCIrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyKDEpfSxpSj1PYmplY3Qua2V5cyhhQikucmVkdWNlKGZ1bmN0aW9uKHksZyl7dmFyIHg9YUJbZ10sVD1ySihnKTtyZXR1cm4geVtnXT1mdW5jdGlvbigpe3JldHVybiBZWih0aGlzLHguZ2V0KX0seC5tdWx0P3lbVF09ZnVuY3Rpb24oKXtyZXR1cm4gUVoodGhpcyx4LmdldCl9OnlbVF09ZnVuY3Rpb24oKXtyZXR1cm4gWFoodGhpcyx4LmdldCl9LHl9LHt9KSxzSj1tZSh7fSxKRixLWixSTCxpSik7LyohCiAgICAJICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2UKCiAgICAJICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS8KICAgIAkgIGh0dHBzOi8vdGxkcmxlZ2FsLmNvbS9saWNlbnNlL21pdC1saWNlbnNlCiAgICAJICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAgIAkgICovdmFyIG9CPWZ1bmN0aW9uKGcseCl7dGhpcy5yZWN5Y2xlKGcseCl9O2Z1bmN0aW9uIElrKCl7cmV0dXJuITF9ZnVuY3Rpb24gWlQoKXtyZXR1cm4hMH1vQi5wcm90b3R5cGU9e2luc3RhbmNlU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuImV2ZW50In0scmVjeWNsZTpmdW5jdGlvbihnLHgpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1JayxnIT1udWxsJiZnLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9Zy50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWcuZGVmYXVsdFByZXZlbnRlZD9aVDpJayk6ZyE9bnVsbCYmZy50eXBlP3g9Zzp0aGlzLnR5cGU9Zyx4IT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXgub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9eC50eXBlIT1udWxsP3gudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT14LmN5LHRoaXMudGFyZ2V0PXgudGFyZ2V0LHRoaXMucG9zaXRpb249eC5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249eC5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXgubmFtZXNwYWNlLHRoaXMubGF5b3V0PXgubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBUPXRoaXMucG9zaXRpb24sQT10aGlzLmN5Lnpvb20oKSxEPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4OlQueCpBK0QueCx5OlQueSpBK0QueX19dGhpcy50aW1lU3RhbXA9ZyYmZy50aW1lU3RhbXB8fERhdGUubm93KCl9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9WlQ7dmFyIGc9dGhpcy5vcmlnaW5hbEV2ZW50O2cmJmcucHJldmVudERlZmF1bHQmJmcucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1aVDt2YXIgZz10aGlzLm9yaWdpbmFsRXZlbnQ7ZyYmZy5zdG9wUHJvcGFnYXRpb24mJmcuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9WlQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOklrLGlzUHJvcGFnYXRpb25TdG9wcGVkOklrLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOklrfTt2YXIgY0I9L14oW14uXSspKFwuKD86W14uXSspKT8kLyxhSj0iLioiLHVCPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PT14fSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0sbEI9T2JqZWN0LmtleXModUIpLG9KPXt9O2Z1bmN0aW9uIEpUKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpvSixnPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHg9MDt4PGxCLmxlbmd0aDt4Kyspe3ZhciBUPWxCW3hdO3RoaXNbVF09eVtUXXx8dUJbVF19dGhpcy5jb250ZXh0PWd8fHRoaXMuY29udGV4dCx0aGlzLmxpc3RlbmVycz1bXSx0aGlzLmVtaXR0aW5nPTB9dmFyIGttPUpULnByb3RvdHlwZSxoQj1mdW5jdGlvbihnLHgsVCxBLEQsTywkKXt5dChBKSYmKEQ9QSxBPW51bGwpLCQmJihPPT1udWxsP089JDpPPW1lKHt9LE8sJCkpO2Zvcih2YXIgcT1kdChUKT9UOlQuc3BsaXQoL1xzKy8pLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIEc9cVtTXTtpZighWihHKSl7dmFyIFc9Ry5tYXRjaChjQik7aWYoVyl7dmFyIGV0PVdbMV0sYXQ9V1syXT9XWzJdOm51bGwsbHQ9eChnLEcsZXQsYXQsQSxELE8pO2lmKGx0PT09ITEpYnJlYWt9fX19LGZCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuYWRkRXZlbnRGaWVsZHMoZy5jb250ZXh0LHgpLG5ldyBvQih4LnR5cGUseCl9LGNKPWZ1bmN0aW9uKGcseCxUKXtpZihDdChUKSl7eChnLFQpO3JldHVybn1lbHNlIGlmKGh0KFQpKXt4KGcsZkIoZyxUKSk7cmV0dXJufWZvcih2YXIgQT1kdChUKT9UOlQuc3BsaXQoL1xzKy8pLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIE89QVtEXTtpZighWihPKSl7dmFyICQ9Ty5tYXRjaChjQik7aWYoJCl7dmFyIHE9JFsxXSxTPSRbMl0/JFsyXTpudWxsLEc9ZkIoZyx7dHlwZTpxLG5hbWVzcGFjZTpTLHRhcmdldDpnLmNvbnRleHR9KTt4KGcsRyl9fX19O2ttLm9uPWttLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHksZyx4LFQsQSl7cmV0dXJuIGhCKHRoaXMsZnVuY3Rpb24oRCxPLCQscSxTLEcsVyl7eXQoRykmJkQubGlzdGVuZXJzLnB1c2goe2V2ZW50Ok8sY2FsbGJhY2s6Ryx0eXBlOiQsbmFtZXNwYWNlOnEscXVhbGlmaWVyOlMsY29uZjpXfSl9LHksZyx4LFQsQSksdGhpc30sa20ub25lPWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLm9uKHksZyx4LFQse29uZTohMH0pfSxrbS5yZW1vdmVMaXN0ZW5lcj1rbS5vZmY9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpczt0aGlzLmVtaXR0aW5nIT09MCYmKHRoaXMubGlzdGVuZXJzPVpLKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBEPXRoaXMubGlzdGVuZXJzLE89ZnVuY3Rpb24oUyl7dmFyIEc9RFtTXTtoQihBLGZ1bmN0aW9uKFcsZXQsYXQsbHQsZnQsQXQpe2lmKChHLnR5cGU9PT1hdHx8eT09PSIqIikmJighbHQmJkcubmFtZXNwYWNlIT09Ii4qInx8Ry5uYW1lc3BhY2U9PT1sdCkmJighZnR8fFcucXVhbGlmaWVyQ29tcGFyZShHLnF1YWxpZmllcixmdCkpJiYoIUF0fHxHLmNhbGxiYWNrPT09QXQpKXJldHVybiBELnNwbGljZShTLDEpLCExfSx5LGcseCxUKX0sJD1ELmxlbmd0aC0xOyQ+PTA7JC0tKU8oJCk7cmV0dXJuIHRoaXN9LGttLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9LGttLmVtaXQ9a20udHJpZ2dlcj1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcy5saXN0ZW5lcnMsQT1ULmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLGR0KGcpfHwoZz1bZ10pLGNKKHRoaXMsZnVuY3Rpb24oRCxPKXt4IT1udWxsJiYoVD1be2V2ZW50Ok8uZXZlbnQsdHlwZTpPLnR5cGUsbmFtZXNwYWNlOk8ubmFtZXNwYWNlLGNhbGxiYWNrOnh9XSxBPVQubGVuZ3RoKTtmb3IodmFyICQ9ZnVuY3Rpb24oRyl7dmFyIFc9VFtHXTtpZihXLnR5cGU9PT1PLnR5cGUmJighVy5uYW1lc3BhY2V8fFcubmFtZXNwYWNlPT09Ty5uYW1lc3BhY2V8fFcubmFtZXNwYWNlPT09YUopJiZELmV2ZW50TWF0Y2hlcyhELmNvbnRleHQsVyxPKSl7dmFyIGV0PVtPXTtnIT1udWxsJiZZUChldCxnKSxELmJlZm9yZUVtaXQoRC5jb250ZXh0LFcsTyksVy5jb25mJiZXLmNvbmYub25lJiYoRC5saXN0ZW5lcnM9RC5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGZ0KXtyZXR1cm4gZnQhPT1XfSkpO3ZhciBhdD1ELmNhbGxiYWNrQ29udGV4dChELmNvbnRleHQsVyxPKSxsdD1XLmNhbGxiYWNrLmFwcGx5KGF0LGV0KTtELmFmdGVyRW1pdChELmNvbnRleHQsVyxPKSxsdD09PSExJiYoTy5zdG9wUHJvcGFnYXRpb24oKSxPLnByZXZlbnREZWZhdWx0KCkpfX0scT0wO3E8QTtxKyspJChxKTtELmJ1YmJsZShELmNvbnRleHQpJiYhTy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZELnBhcmVudChELmNvbnRleHQpLmVtaXQoTyxnKX0seSksdGhpcy5lbWl0dGluZy0tLHRoaXN9O3ZhciB1Sj17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihnLHgpe3JldHVybiBnPT1udWxsfHx4PT1udWxsP2c9PW51bGwmJng9PW51bGw6Zy5zYW1lVGV4dCh4KX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT14LnF1YWxpZmllcjtyZXR1cm4gQSE9bnVsbD9nIT09VC50YXJnZXQmJm50KFQudGFyZ2V0KSYmQS5tYXRjaGVzKFQudGFyZ2V0KTohMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZyx4KXt4LmN5PWcuY3koKSx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfSxiZWZvcmVFbWl0OmZ1bmN0aW9uKGcseCl7eC5jb25mJiZ4LmNvbmYub25jZSYmeC5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKHguZXZlbnQseC5xdWFsaWZpZXIseC5jYWxsYmFjayl9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNDaGlsZCgpP2cucGFyZW50KCk6Zy5jeSgpfX0sdDk9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyB5bShnKTpnfSxkQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeD10aGlzW2ddLFQ9eC5fcHJpdmF0ZTtULmVtaXR0ZXJ8fChULmVtaXR0ZXI9bmV3IEpUKHVKLHgpKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9dDkoeCksRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgTz10aGlzW0RdO08uZW1pdHRlcigpLm9uKGcsQSxUKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT10OSh4KSxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBPPXRoaXNbRF07Ty5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZyxBLFQpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXTt4LmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9dDkoeCksRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgTz10aGlzW0RdO08uZW1pdHRlcigpLm9uZShnLEEsVCl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT10OSh4KSxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBPPXRoaXNbRF07Ty5lbWl0dGVyKCkub24oZyxBLFQse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgQT10aGlzW1RdO0EuZW1pdHRlcigpLmVtaXQoZyx4KX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShnLHRoaXMpLHRoaXMuZW1pdChnLHgpLHRoaXN9fTtBYy5ldmVudEFsaWFzZXNPbihkQik7dmFyIGdCPXtub2RlczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCl9KS5maWx0ZXIoZyl9LGVkZ2VzOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5pc0VkZ2UoKX0pLmZpbHRlcihnKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgZz10aGlzLnNwYXduKCkseD10aGlzLnNwYXduKCksVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgQT10aGlzW1RdO0EuaXNOb2RlKCk/Zy5wdXNoKEEpOngucHVzaChBKX1yZXR1cm57bm9kZXM6ZyxlZGdlczp4fX0sZmlsdGVyOmZ1bmN0aW9uKGcseCl7aWYoZz09PXZvaWQgMClyZXR1cm4gdGhpcztpZihtdChnKXx8eHQoZykpcmV0dXJuIG5ldyB5bShnKS5maWx0ZXIodGhpcyk7aWYoeXQoZykpe2Zvcih2YXIgVD10aGlzLnNwYXduKCksQT10aGlzLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIE89QVtEXSwkPXg/Zy5hcHBseSh4LFtPLEQsQV0pOmcoTyxELEEpOyQmJlQucHVzaChPKX1yZXR1cm4gVH1yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24oZyl7aWYoZyl7bXQoZykmJihnPXRoaXMuZmlsdGVyKGcpKTtmb3IodmFyIHg9dGhpcy5zcGF3bigpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9dGhpc1tUXSxEPWcuaGFzKEEpO0R8fHgucHVzaChBKX1yZXR1cm4geH1lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7cmV0dXJuIGcubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZyl7aWYobXQoZykpe3ZhciB4PWc7cmV0dXJuIHRoaXMuZmlsdGVyKHgpfWZvcih2YXIgVD10aGlzLnNwYXduKCksQT10aGlzLEQ9ZyxPPXRoaXMubGVuZ3RoPGcubGVuZ3RoLCQ9Tz9BOkQscT1PP0Q6QSxTPTA7UzwkLmxlbmd0aDtTKyspe3ZhciBHPSRbU107cS5oYXMoRykmJlQucHVzaChHKX1yZXR1cm4gVH0seG9yOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEE9dGhpcyxEPWcsTz1mdW5jdGlvbihxLFMpe2Zvcih2YXIgRz0wO0c8cS5sZW5ndGg7RysrKXt2YXIgVz1xW0ddLGV0PVcuX3ByaXZhdGUuZGF0YS5pZCxhdD1TLmhhc0VsZW1lbnRXaXRoSWQoZXQpO2F0fHxULnB1c2goVyl9fTtyZXR1cm4gTyhBLEQpLE8oRCxBKSxUfSxkaWZmOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEE9dGhpcy5zcGF3bigpLEQ9dGhpcy5zcGF3bigpLE89dGhpcywkPWcscT1mdW5jdGlvbihHLFcsZXQpe2Zvcih2YXIgYXQ9MDthdDxHLmxlbmd0aDthdCsrKXt2YXIgbHQ9R1thdF0sZnQ9bHQuX3ByaXZhdGUuZGF0YS5pZCxBdD1XLmhhc0VsZW1lbnRXaXRoSWQoZnQpO0F0P0QubWVyZ2UobHQpOmV0LnB1c2gobHQpfX07cmV0dXJuIHEoTywkLFQpLHEoJCxPLEEpLHtsZWZ0OlQscmlnaHQ6QSxib3RoOkR9fSxhZGQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZighZylyZXR1cm4gdGhpcztpZihtdChnKSl7dmFyIFQ9ZztnPXgubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWZvcih2YXIgQT10aGlzLnNwYXduU2VsZigpLEQ9MDtEPGcubGVuZ3RoO0QrKyl7dmFyIE89Z1tEXSwkPSF0aGlzLmhhcyhPKTskJiZBLnB1c2goTyl9cmV0dXJuIEF9LG1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUsVD14LmN5O2lmKCFnKXJldHVybiB0aGlzO2lmKGcmJm10KGcpKXt2YXIgQT1nO2c9VC5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoQSl9Zm9yKHZhciBEPXgubWFwLE89MDtPPGcubGVuZ3RoO08rKyl7dmFyICQ9Z1tPXSxxPSQuX3ByaXZhdGUuZGF0YS5pZCxTPSFELmhhcyhxKTtpZihTKXt2YXIgRz10aGlzLmxlbmd0aCsrO3RoaXNbR109JCxELnNldChxLHtlbGU6JCxpbmRleDpHfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1tnXSxUPXguaWQoKSxBPXRoaXMuX3ByaXZhdGUsRD1BLm1hcDt0aGlzW2ddPXZvaWQgMCxELmRlbGV0ZShUKTt2YXIgTz1nPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhTyl7dmFyICQ9dGhpcy5sZW5ndGgtMSxxPXRoaXNbJF0sUz1xLl9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1tnXT1xLEQuc2V0KFMse2VsZTpxLGluZGV4Omd9KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKGcpe2c9Z1swXTt2YXIgeD10aGlzLl9wcml2YXRlLFQ9Zy5fcHJpdmF0ZS5kYXRhLmlkLEE9eC5tYXAsRD1BLmdldChUKTtpZighRClyZXR1cm4gdGhpczt2YXIgTz1ELmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChPKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7aWYoIWcpcmV0dXJuIHRoaXM7aWYoZyYmbXQoZykpe3ZhciBUPWc7Zz14Lm11dGFibGVFbGVtZW50cygpLmZpbHRlcihUKX1mb3IodmFyIEE9MDtBPGcubGVuZ3RoO0ErKyl0aGlzLnVubWVyZ2VPbmUoZ1tBXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIFQ9dGhpc1t4XTtnKFQpJiZ0aGlzLnVubWVyZ2VBdCh4KX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPVtdLEE9dGhpcyxEPTA7RDxBLmxlbmd0aDtEKyspe3ZhciBPPUFbRF0sJD14P2cuYXBwbHkoeCxbTyxELEFdKTpnKE8sRCxBKTtULnB1c2goJCl9cmV0dXJuIFR9LHJlZHVjZTpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD14LEE9dGhpcyxEPTA7RDxBLmxlbmd0aDtEKyspVD1nKFQsQVtEXSxELEEpO3JldHVybiBUfSxtYXg6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9LTEvMCxBLEQ9dGhpcyxPPTA7TzxELmxlbmd0aDtPKyspe3ZhciAkPURbT10scT14P2cuYXBwbHkoeCxbJCxPLERdKTpnKCQsTyxEKTtxPlQmJihUPXEsQT0kKX1yZXR1cm57dmFsdWU6VCxlbGU6QX19LG1pbjpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0xLzAsQSxEPXRoaXMsTz0wO088RC5sZW5ndGg7TysrKXt2YXIgJD1EW09dLHE9eD9nLmFwcGx5KHgsWyQsTyxEXSk6ZygkLE8sRCk7cTxUJiYoVD1xLEE9JCl9cmV0dXJue3ZhbHVlOlQsZWxlOkF9fX0sdWM9Z0I7dWMudT11Y1sifCJdPXVjWyIrIl09dWMudW5pb249dWMub3I9dWMuYWRkLHVjWyJcXCJdPXVjWyIhIl09dWNbIi0iXT11Yy5kaWZmZXJlbmNlPXVjLnJlbGF0aXZlQ29tcGxlbWVudD11Yy5zdWJ0cmFjdD11Yy5ub3QsdWMubj11Y1siJiJdPXVjWyIuIl09dWMuYW5kPXVjLmludGVyc2VjdGlvbj11Yy5pbnRlcnNlY3QsdWNbIl4iXT11Y1siKCspIl09dWNbIigtKSJdPXVjLnN5bW1ldHJpY0RpZmZlcmVuY2U9dWMuc3ltZGlmZj11Yy54b3IsdWMuZm5GaWx0ZXI9dWMuZmlsdGVyRm49dWMuc3RkRmlsdGVyPXVjLmZpbHRlcix1Yy5jb21wbGVtZW50PXVjLmFic2NvbXA9dWMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciBsSj17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5fcHJpdmF0ZS5ncm91cH19LHBCPWZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jeSgpLEE9VC5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gRChHKXt2YXIgVz1HLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBXLnZhbHVlPT09ImF1dG8iP0E/Ry56RGVwdGgoKTowOlcudmFsdWU9PT0iYm90dG9tIj8tMTpXLnZhbHVlPT09InRvcCI/JDU6MH12YXIgTz1EKGcpLUQoeCk7aWYoTyE9PTApcmV0dXJuIE87ZnVuY3Rpb24gJChHKXt2YXIgVz1HLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFcudmFsdWU9PT0iYXV0byImJkcuaXNOb2RlKCk/MTowfXZhciBxPSQoZyktJCh4KTtpZihxIT09MClyZXR1cm4gcTt2YXIgUz1nLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLXgucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIFMhPT0wP1M6Zy5wb29sSW5kZXgoKS14LnBvb2xJbmRleCgpfSxlOT17Zm9yRWFjaDpmdW5jdGlvbihnLHgpe2lmKHl0KGcpKWZvcih2YXIgVD10aGlzLmxlbmd0aCxBPTA7QTxUO0ErKyl7dmFyIEQ9dGhpc1tBXSxPPXg/Zy5hcHBseSh4LFtELEEsdGhpc10pOmcoRCxBLHRoaXMpO2lmKE89PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgZz1bXSx4PTA7eDx0aGlzLmxlbmd0aDt4KyspZy5wdXNoKHRoaXNbeF0pO3JldHVybiBnfSxzbGljZTpmdW5jdGlvbihnLHgpe3ZhciBUPVtdLEE9dGhpcy5sZW5ndGg7eD09bnVsbCYmKHg9QSksZz09bnVsbCYmKGc9MCksZzwwJiYoZz1BK2cpLHg8MCYmKHg9QSt4KTtmb3IodmFyIEQ9ZztEPj0wJiZEPHgmJkQ8QTtEKyspVC5wdXNoKHRoaXNbRF0pO3JldHVybiB0aGlzLnNwYXduKFQpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihnKXtyZXR1cm4gdGhpc1tnXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihnKXtpZigheXQoZykpcmV0dXJuIHRoaXM7dmFyIHg9dGhpcy50b0FycmF5KCkuc29ydChnKTtyZXR1cm4gdGhpcy5zcGF3bih4KX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChwQil9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7dmFyIHg9Zy5fcHJpdmF0ZSxUPXguZ3JvdXA7aWYoVD09PSJub2RlcyIpe3ZhciBBPXguZGF0YS5wYXJlbnQ/Zy5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIGcuaXNQYXJlbnQoKT9BOiQ1LTF9ZWxzZXt2YXIgRD14LnNvdXJjZSxPPXgudGFyZ2V0LCQ9RC56RGVwdGgoKSxxPU8uekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQscSwwKX19fX07ZTkuZWFjaD1lOS5mb3JFYWNoO3ZhciBoSj1mdW5jdGlvbigpe3ZhciBnPSJ1bmRlZmluZWQiLHg9KHR5cGVvZiBTeW1ib2w+InUiPyJ1bmRlZmluZWQiOmYoU3ltYm9sKSkhPWcmJmYoU3ltYm9sLml0ZXJhdG9yKSE9Zzt4JiYoZTlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBUPXRoaXMsQT17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LEQ9MCxPPXRoaXMubGVuZ3RoO3JldHVybiBiKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEQ8Tz9BLnZhbHVlPVRbRCsrXTooQS52YWx1ZT12b2lkIDAsQS5kb25lPSEwKSxBfX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfTtoSigpO3ZhciBmSj1CZih7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksbjk9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24oZyl7Zz1mSihnKTt2YXIgeDtpZighdGhpcy50YWtlc1VwU3BhY2UoKSl4PXt3OjAsaDowfTtlbHNlIGlmKGcubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzKXt2YXIgVD10aGlzLmJvdW5kaW5nQm94KCk7eD17dzpULncsaDpULmh9fWVsc2UgeD17dzp0aGlzLm91dGVyV2lkdGgoKSxoOnRoaXMub3V0ZXJIZWlnaHQoKX07cmV0dXJuKHgudz09PTB8fHguaD09PTApJiYoeC53PXguaD0xKSx4fSxsYXlvdXRQb3NpdGlvbnM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPXRoaXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oWnQpe3JldHVybiFadC5pc1BhcmVudCgpfSksRD10aGlzLmN5KCksTz14LmVsZXMsJD1mdW5jdGlvbihLdCl7cmV0dXJuIEt0LmlkKCl9LHE9a2UoVCwkKTtnLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6Z30pLGcuYW5pbWF0aW9ucz1bXTt2YXIgUz1mdW5jdGlvbihLdCx6dCxlZSl7dmFyIFZ0PXt4Onp0LngxK3p0LncvMix5Onp0LnkxK3p0LmgvMn0sZmU9e3g6KGVlLngtVnQueCkqS3QseTooZWUueS1WdC55KSpLdH07cmV0dXJue3g6VnQueCtmZS54LHk6VnQueStmZS55fX0sRz14LnNwYWNpbmdGYWN0b3ImJnguc3BhY2luZ0ZhY3RvciE9PTEsVz1mdW5jdGlvbigpe2lmKCFHKXJldHVybiBudWxsO2Zvcih2YXIgS3Q9UmQoKSx6dD0wO3p0PEEubGVuZ3RoO3p0Kyspe3ZhciBlZT1BW3p0XSxWdD1xKGVlLHp0KTtTWShLdCxWdC54LFZ0LnkpfXJldHVybiBLdH0sZXQ9VygpLGF0PWtlKGZ1bmN0aW9uKFp0LEt0KXt2YXIgenQ9cShadCxLdCk7aWYoRyl7dmFyIGVlPU1hdGguYWJzKHguc3BhY2luZ0ZhY3Rvcik7enQ9UyhlZSxldCx6dCl9cmV0dXJuIHgudHJhbnNmb3JtIT1udWxsJiYoenQ9eC50cmFuc2Zvcm0oWnQsenQpKSx6dH0sJCk7aWYoeC5hbmltYXRlKXtmb3IodmFyIGx0PTA7bHQ8QS5sZW5ndGg7bHQrKyl7dmFyIGZ0PUFbbHRdLEF0PWF0KGZ0LGx0KSxrdD14LmFuaW1hdGVGaWx0ZXI9PW51bGx8fHguYW5pbWF0ZUZpbHRlcihmdCxsdCk7aWYoa3Qpe3ZhciBNdD1mdC5hbmltYXRpb24oe3Bvc2l0aW9uOkF0LGR1cmF0aW9uOnguYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnguYW5pbWF0aW9uRWFzaW5nfSk7Zy5hbmltYXRpb25zLnB1c2goTXQpfWVsc2UgZnQucG9zaXRpb24oQXQpfWlmKHguZml0KXt2YXIgRHQ9RC5hbmltYXRpb24oe2ZpdDp7Ym91bmRpbmdCb3g6Ty5ib3VuZGluZ0JveEF0KGF0KSxwYWRkaW5nOngucGFkZGluZ30sZHVyYXRpb246eC5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6eC5hbmltYXRpb25FYXNpbmd9KTtnLmFuaW1hdGlvbnMucHVzaChEdCl9ZWxzZSBpZih4Lnpvb20hPT12b2lkIDAmJngucGFuIT09dm9pZCAwKXt2YXIganQ9RC5hbmltYXRpb24oe3pvb206eC56b29tLHBhbjp4LnBhbixkdXJhdGlvbjp4LmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzp4LmFuaW1hdGlvbkVhc2luZ30pO2cuYW5pbWF0aW9ucy5wdXNoKGp0KX1nLmFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnBsYXkoKX0pLGcub25lKCJsYXlvdXRyZWFkeSIseC5yZWFkeSksZy5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0Omd9KSxLNS5hbGwoZy5hbmltYXRpb25zLm1hcChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7Zy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pfSl9ZWxzZSBBLnBvc2l0aW9ucyhhdCkseC5maXQmJkQuZml0KHguZWxlcyx4LnBhZGRpbmcpLHguem9vbSE9bnVsbCYmRC56b29tKHguem9vbSkseC5wYW4mJkQucGFuKHgucGFuKSxnLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGcuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpnfSksZy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pO3JldHVybiB0aGlzfSxsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO3JldHVybiB4Lm1ha2VMYXlvdXQobWUoe30sZyx7ZWxlczp0aGlzfSkpfX07bjkuY3JlYXRlTGF5b3V0PW45Lm1ha2VMYXlvdXQ9bjkubGF5b3V0O2Z1bmN0aW9uIGJCKHksZyx4KXt2YXIgVD14Ll9wcml2YXRlLEE9VC5zdHlsZUNhY2hlPVQuc3R5bGVDYWNoZXx8W10sRDtyZXR1cm4oRD1BW3ldKSE9bnVsbHx8KEQ9QVt5XT1nKHgpKSxEfWZ1bmN0aW9uIHI5KHksZyl7cmV0dXJuIHk9dGQoeSksZnVuY3Rpb24oVCl7cmV0dXJuIGJCKHksZyxUKX19ZnVuY3Rpb24gaTkoeSxnKXt5PXRkKHkpO3ZhciB4PWZ1bmN0aW9uKEEpe3JldHVybiBnLmNhbGwoQSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBBPXRoaXNbMF07aWYoQSlyZXR1cm4gYkIoeSx4LEEpfX12YXIgUmY9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD14LnJlbmRlcmVyKCksQT14LnN0eWxlRW5hYmxlZCgpO3JldHVybiBUJiZBJiZULnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGcpLHRoaXN9LGRpcnR5U3R5bGVDYWNoZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuY3koKSx4PWZ1bmN0aW9uKEQpe3JldHVybiBELl9wcml2YXRlLnN0eWxlQ2FjaGU9bnVsbH07aWYoZy5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBUO1Q9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSxULm1lcmdlKFQuY29ubmVjdGVkRWRnZXMoKSksVC5mb3JFYWNoKHgpfWVsc2UgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3goQSksQS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goeCl9KTtyZXR1cm4gdGhpc30sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZigheC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztpZih4LmJhdGNoaW5nKCkpe3ZhciBUPXguX3ByaXZhdGUuYmF0Y2hTdHlsZUVsZXM7cmV0dXJuIFQubWVyZ2UodGhpcyksdGhpc312YXIgQT14Lmhhc0NvbXBvdW5kTm9kZXMoKSxEPXRoaXM7Zz0hIShnfHxnPT09dm9pZCAwKSxBJiYoRD10aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpKTt2YXIgTz1EO3JldHVybiBnP08uZW1pdEFuZE5vdGlmeSgic3R5bGUiKTpPLmVtaXQoInN0eWxlIiksRC5mb3JFYWNoKGZ1bmN0aW9uKCQpe3JldHVybiAkLl9wcml2YXRlLnN0eWxlRGlydHk9ITB9KSx0aGlzfSxjbGVhblN0eWxlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKGcuc3R5bGVFbmFibGVkKCkpZm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBUPXRoaXNbeF07VC5fcHJpdmF0ZS5zdHlsZURpcnR5JiYoVC5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGcuc3R5bGUoKS5hcHBseShUKSl9fSxwYXJzZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVD10aGlzWzBdLEE9VC5jeSgpO2lmKEEuc3R5bGVFbmFibGVkKCkmJlQpe3RoaXMuY2xlYW5TdHlsZSgpO3ZhciBEPVQuX3ByaXZhdGUuc3R5bGVbZ107cmV0dXJuIEQ/Pyh4P0Euc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkoZyk6bnVsbCl9fSxudW1lcmljU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXTtpZih4LmN5KCkuc3R5bGVFbmFibGVkKCkmJngpe3ZhciBUPXgucHN0eWxlKGcpO3JldHVybiBULnBmVmFsdWUhPT12b2lkIDA/VC5wZlZhbHVlOlQudmFsdWV9fSxudW1lcmljU3R5bGVVbml0czpmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdO2lmKHguY3koKS5zdHlsZUVuYWJsZWQoKSYmeClyZXR1cm4geC5wc3R5bGUoZykudW5pdHN9LHJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPXRoaXNbMF07aWYoVClyZXR1cm4geC5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUoVCxnKX0sc3R5bGU6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLmN5KCk7aWYoIVQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIEE9ITEsRD1ULnN0eWxlKCk7aWYoaHQoZykpe3ZhciBPPWc7RC5hcHBseUJ5cGFzcyh0aGlzLE8sQSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYobXQoZykpaWYoeD09PXZvaWQgMCl7dmFyICQ9dGhpc1swXTtyZXR1cm4gJD9ELmdldFN0eWxlUHJvcGVydHlWYWx1ZSgkLGcpOnZvaWQgMH1lbHNlIEQuYXBwbHlCeXBhc3ModGhpcyxnLHgsQSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZz09PXZvaWQgMCl7dmFyIHE9dGhpc1swXTtyZXR1cm4gcT9ELmdldFJhd1N0eWxlKHEpOnZvaWQgMH1yZXR1cm4gdGhpc30scmVtb3ZlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPSExLEE9eC5zdHlsZSgpLEQ9dGhpcztpZihnPT09dm9pZCAwKWZvcih2YXIgTz0wO088RC5sZW5ndGg7TysrKXt2YXIgJD1EW09dO0EucmVtb3ZlQWxsQnlwYXNzZXMoJCxUKX1lbHNle2c9Zy5zcGxpdCgvXHMrLyk7Zm9yKHZhciBxPTA7cTxELmxlbmd0aDtxKyspe3ZhciBTPURbcV07QS5yZW1vdmVCeXBhc3NlcyhTLGcsVCl9fXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoInN0eWxlIiksdGhpc30sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsImVsZW1lbnQiKSx0aGlzfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXN9LGVmZmVjdGl2ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7aWYoIWcuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHg9Zy5oYXNDb21wb3VuZE5vZGVzKCksVD10aGlzWzBdO2lmKFQpe3ZhciBBPVQuX3ByaXZhdGUsRD1ULnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCF4KXJldHVybiBEO3ZhciBPPUEuZGF0YS5wYXJlbnQ/VC5wYXJlbnRzKCk6bnVsbDtpZihPKWZvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdLFM9cS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtEPVMqRH1yZXR1cm4gRH19LHRyYW5zcGFyZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF0sVD14LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2lmKHgpcmV0dXJuIFQ/eC5lZmZlY3RpdmVPcGFjaXR5KCk9PT0wOngucHN0eWxlKCJvcGFjaXR5IikudmFsdWU9PT0wfSxiYWNrZ3JvdW5kaW5nOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF07cmV0dXJuISF4Ll9wcml2YXRlLmJhY2tncm91bmRpbmd9fTtmdW5jdGlvbiBqTCh5LGcpe3ZhciB4PXkuX3ByaXZhdGUsVD14LmRhdGEucGFyZW50P3kucGFyZW50cygpOm51bGw7aWYoVClmb3IodmFyIEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIEQ9VFtBXTtpZighZyhEKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiAkTCh5KXt2YXIgZz15Lm9rLHg9eS5lZGdlT2tWaWFOb2RlfHx5Lm9rLFQ9eS5wYXJlbnRPa3x8eS5vaztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgQT10aGlzLmN5KCk7aWYoIUEuc3R5bGVFbmFibGVkKCkpcmV0dXJuITA7dmFyIEQ9dGhpc1swXSxPPUEuaGFzQ29tcG91bmROb2RlcygpO2lmKEQpe3ZhciAkPUQuX3ByaXZhdGU7aWYoIWcoRCkpcmV0dXJuITE7aWYoRC5pc05vZGUoKSlyZXR1cm4hT3x8akwoRCxUKTt2YXIgcT0kLnNvdXJjZSxTPSQudGFyZ2V0O3JldHVybiB4KHEpJiYoIU98fGpMKHEseCkpJiYocT09PVN8fHgoUykmJighT3x8akwoUyx4KSkpfX19dmFyIHJ4PXI5KCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ5LndpZHRoKCkhPT0wJiYoeS5pc05vZGUoKT95LmhlaWdodCgpIT09MDohMCl9KTtSZi50YWtlc1VwU3BhY2U9aTkoInRha2VzVXBTcGFjZSIsJEwoe29rOnJ4fSkpO3ZhciBkSj1yOSgiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmeS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmcngoeSl9KSxnSj1yOSgicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZyeCh5KX0pO1JmLmludGVyYWN0aXZlPWk5KCJpbnRlcmFjdGl2ZSIsJEwoe29rOmRKLHBhcmVudE9rOmdKLGVkZ2VPa1ZpYU5vZGU6cnh9KSksUmYubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuaW50ZXJhY3RpdmUoKX07dmFyIHBKPXI5KCJlbGVWaXNpYmxlIixmdW5jdGlvbih5KXtyZXR1cm4geS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeS5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmcngoeSl9KSxiSj1yeDtSZi52aXNpYmxlPWk5KCJ2aXNpYmxlIiwkTCh7b2s6cEosZWRnZU9rVmlhTm9kZTpiSn0pKSxSZi5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkudmlzaWJsZSgpfSxSZi5pc0J1bmRsZWRCZXppZXI9aTkoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLFJmLmJ5cGFzcz1SZi5jc3M9UmYuc3R5bGUsUmYucmVuZGVyZWRDc3M9UmYucmVuZGVyZWRTdHlsZSxSZi5yZW1vdmVCeXBhc3M9UmYucmVtb3ZlQ3NzPVJmLnJlbW92ZVN0eWxlLFJmLnBzdHlsZT1SZi5wYXJzZWRTdHlsZTt2YXIgRW09e307ZnVuY3Rpb24gdkIoeSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9W107aWYoZy5sZW5ndGg9PT0yKXt2YXIgVD1nWzBdLEE9Z1sxXTt0aGlzLm9uKHkuZXZlbnQsVCxBKX1lbHNlIGlmKGcubGVuZ3RoPT09MSYmeXQoZ1swXSkpe3ZhciBEPWdbMF07dGhpcy5vbih5LmV2ZW50LEQpfWVsc2UgaWYoZy5sZW5ndGg9PT0wfHxnLmxlbmd0aD09PTEmJmR0KGdbMF0pKXtmb3IodmFyIE89Zy5sZW5ndGg9PT0xP2dbMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciBxPXRoaXNbJF0sUz0heS5hYmxlRmllbGR8fHEuX3ByaXZhdGVbeS5hYmxlRmllbGRdLEc9cS5fcHJpdmF0ZVt5LmZpZWxkXSE9eS52YWx1ZTtpZih5Lm92ZXJyaWRlQWJsZSl7dmFyIFc9eS5vdmVycmlkZUFibGUocSk7aWYoVyE9PXZvaWQgMCYmKFM9VywhVykpcmV0dXJuIHRoaXN9UyYmKHEuX3ByaXZhdGVbeS5maWVsZF09eS52YWx1ZSxHJiZ4LnB1c2gocSkpfXZhciBldD10aGlzLnNwYXduKHgpO2V0LnVwZGF0ZVN0eWxlKCksZXQuZW1pdCh5LmV2ZW50KSxPJiZldC5lbWl0KE8pfXJldHVybiB0aGlzfX1mdW5jdGlvbiBpeCh5KXtFbVt5LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7aWYoeS5vdmVycmlkZUZpZWxkKXt2YXIgeD15Lm92ZXJyaWRlRmllbGQoZyk7aWYoeCE9PXZvaWQgMClyZXR1cm4geH1yZXR1cm4gZy5fcHJpdmF0ZVt5LmZpZWxkXX19LEVtW3kub25dPXZCKHtldmVudDp5Lm9uLGZpZWxkOnkuZmllbGQsYWJsZUZpZWxkOnkuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp5Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLEVtW3kub2ZmXT12Qih7ZXZlbnQ6eS5vZmYsZmllbGQ6eS5maWVsZCxhYmxlRmllbGQ6eS5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOnkub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9aXgoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLGl4KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxnLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSksaXgoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSksaXgoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLEVtLmRlc2VsZWN0PUVtLnVuc2VsZWN0LEVtLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIHkuX3ByaXZhdGUuZ3JhYmJlZH0saXgoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLGl4KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksRW0uaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuX3ByaXZhdGUuYWN0aXZlfTt2YXIgaDE9e30sd0I9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKFQpe2Zvcih2YXIgQT10aGlzLEQ9W10sTz0wO088QS5sZW5ndGg7TysrKXt2YXIgJD1BW09dO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgcT0hMSxTPSQuY29ubmVjdGVkRWRnZXMoKSxHPTA7RzxTLmxlbmd0aDtHKyspe3ZhciBXPVNbR10sZXQ9Vy5zb3VyY2UoKSxhdD1XLnRhcmdldCgpO2lmKGcubm9JbmNvbWluZ0VkZ2VzJiZhdD09PSQmJmV0IT09JHx8Zy5ub091dGdvaW5nRWRnZXMmJmV0PT09JCYmYXQhPT0kKXtxPSEwO2JyZWFrfX1xfHxELnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKEQsITApLmZpbHRlcihUKX19LG1CPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxBPVtdLEQ9MDtEPFQubGVuZ3RoO0QrKyl7dmFyIE89VFtEXTtpZihPLmlzTm9kZSgpKWZvcih2YXIgJD1PLmNvbm5lY3RlZEVkZ2VzKCkscT0wO3E8JC5sZW5ndGg7cSsrKXt2YXIgUz0kW3FdLEc9Uy5zb3VyY2UoKSxXPVMudGFyZ2V0KCk7Zy5vdXRnb2luZyYmRz09PU8/KEEucHVzaChTKSxBLnB1c2goVykpOmcuaW5jb21pbmcmJlc9PT1PJiYoQS5wdXNoKFMpLEEucHVzaChHKSl9fXJldHVybiB0aGlzLnNwYXduKEEsITApLmZpbHRlcih4KX19LHlCPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxBPVtdLEQ9e307Oyl7dmFyIE89Zy5vdXRnb2luZz9ULm91dGdvZXJzKCk6VC5pbmNvbWVycygpO2lmKE8ubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEscT0wO3E8Ty5sZW5ndGg7cSsrKXt2YXIgUz1PW3FdLEc9Uy5pZCgpO0RbR118fChEW0ddPSEwLEEucHVzaChTKSwkPSEwKX1pZighJClicmVhaztUPU99cmV0dXJuIHRoaXMuc3Bhd24oQSwhMCkuZmlsdGVyKHgpfX07aDEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXNbeV0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0sbWUoaDEse3Jvb3RzOndCKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6d0Ioe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOnJkKG1CKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6eUIoe291dGdvaW5nOiEwfSksaW5jb21lcnM6cmQobUIoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOnlCKHtpbmNvbWluZzohMH0pfSksbWUoaDEse25laWdoYm9yaG9vZDpyZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLm5vZGVzKCksVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgQT14W1RdLEQ9QS5jb25uZWN0ZWRFZGdlcygpLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXSxxPSQuc291cmNlKCksUz0kLnRhcmdldCgpLEc9QT09PXE/UzpxO0cubGVuZ3RoPjAmJmcucHVzaChHWzBdKSxnLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZywhMCkuZmlsdGVyKHkpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIoZyl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKGcpfX0pLGgxLm5laWdoYm91cmhvb2Q9aDEubmVpZ2hib3Job29kLGgxLmNsb3NlZE5laWdoYm91cmhvb2Q9aDEuY2xvc2VkTmVpZ2hib3Job29kLGgxLm9wZW5OZWlnaGJvdXJob29kPWgxLm9wZW5OZWlnaGJvcmhvb2QsbWUoaDEse3NvdXJjZTpyZChmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdLFQ7cmV0dXJuIHgmJihUPXguX3ByaXZhdGUuc291cmNlfHx4LmN5KCkuY29sbGVjdGlvbigpKSxUJiZnP1QuZmlsdGVyKGcpOlR9LCJzb3VyY2UiKSx0YXJnZXQ6cmQoZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXSxUO3JldHVybiB4JiYoVD14Ll9wcml2YXRlLnRhcmdldHx8eC5jeSgpLmNvbGxlY3Rpb24oKSksVCYmZz9ULmZpbHRlcihnKTpUfSwidGFyZ2V0Iiksc291cmNlczp4Qih7YXR0cjoic291cmNlIn0pLHRhcmdldHM6eEIoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIHhCKHkpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9W10sQT0wO0E8dGhpcy5sZW5ndGg7QSsrKXt2YXIgRD10aGlzW0FdLE89RC5fcHJpdmF0ZVt5LmF0dHJdO08mJlQucHVzaChPKX1yZXR1cm4gdGhpcy5zcGF3bihULCEwKS5maWx0ZXIoeCl9fW1lKGgxLHtlZGdlc1dpdGg6cmQoa0IoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzpyZChrQih7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIGtCKHkpe3JldHVybiBmdW5jdGlvbih4KXt2YXIgVD1bXSxBPXRoaXMuX3ByaXZhdGUuY3ksRD15fHx7fTttdCh4KSYmKHg9QS4kKHgpKTtmb3IodmFyIE89MDtPPHgubGVuZ3RoO08rKylmb3IodmFyICQ9eFtPXS5fcHJpdmF0ZS5lZGdlcyxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBTPSRbcV0sRz1TLl9wcml2YXRlLmRhdGEsVz10aGlzLmhhc0VsZW1lbnRXaXRoSWQoRy5zb3VyY2UpJiZ4Lmhhc0VsZW1lbnRXaXRoSWQoRy50YXJnZXQpLGV0PXguaGFzRWxlbWVudFdpdGhJZChHLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChHLnRhcmdldCksYXQ9V3x8ZXQ7YXQmJigoRC50aGlzSXNTcmN8fEQudGhpc0lzVGd0KSYmKEQudGhpc0lzU3JjJiYhV3x8RC50aGlzSXNUZ3QmJiFldCl8fFQucHVzaChTKSl9cmV0dXJuIHRoaXMuc3Bhd24oVCwhMCl9fW1lKGgxLHtjb25uZWN0ZWRFZGdlczpyZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEE9eFtUXTtpZihBLmlzTm9kZSgpKWZvcih2YXIgRD1BLl9wcml2YXRlLmVkZ2VzLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXTtnLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6cmQoZnVuY3Rpb24oeSl7Zm9yKHZhciBnPVtdLHg9dGhpcyxUPTA7VDx4Lmxlbmd0aDtUKyspe3ZhciBBPXhbVF07QS5pc0VkZ2UoKSYmKGcucHVzaChBLnNvdXJjZSgpWzBdKSxnLnB1c2goQS50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczpyZChFQigpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOnJkKEVCKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gRUIoeSl7dmFyIGc9e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB5PW1lKHt9LGcseSksZnVuY3Rpb24oVCl7Zm9yKHZhciBBPVtdLEQ9dGhpcy5lZGdlcygpLE89eSwkPTA7JDxELmxlbmd0aDskKyspZm9yKHZhciBxPURbJF0sUz1xLl9wcml2YXRlLEc9Uy5zb3VyY2UsVz1HLl9wcml2YXRlLmRhdGEuaWQsZXQ9Uy5kYXRhLnRhcmdldCxhdD1HLl9wcml2YXRlLmVkZ2VzLGx0PTA7bHQ8YXQubGVuZ3RoO2x0Kyspe3ZhciBmdD1hdFtsdF0sQXQ9ZnQuX3ByaXZhdGUuZGF0YSxrdD1BdC50YXJnZXQsTXQ9QXQuc291cmNlLER0PWt0PT09ZXQmJk10PT09VyxqdD1XPT09a3QmJmV0PT09TXQ7KE8uY29kaXJlY3RlZCYmRHR8fCFPLmNvZGlyZWN0ZWQmJihEdHx8anQpKSYmQS5wdXNoKGZ0KX1yZXR1cm4gdGhpcy5zcGF3bihBLCEwKS5maWx0ZXIoVCl9fW1lKGgxLHtjb21wb25lbnRzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmN5KCksQT1ULmNvbGxlY3Rpb24oKSxEPWc9PW51bGw/eC5ub2RlcygpOmcubm9kZXMoKSxPPVtdO2chPW51bGwmJkQuZW1wdHkoKSYmKEQ9Zy5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKEcsVyl7QS5tZXJnZShHKSxELnVubWVyZ2UoRyksVy5tZXJnZShHKX07aWYoRC5lbXB0eSgpKXJldHVybiB4LnNwYXduKCk7dmFyIHE9ZnVuY3Rpb24oKXt2YXIgRz1ULmNvbGxlY3Rpb24oKTtPLnB1c2goRyk7dmFyIFc9RFswXTskKFcsRykseC5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlcsdmlzaXQ6ZnVuY3Rpb24oYXQpe3JldHVybiAkKGF0LEcpfX0pLEcuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXt4LmhhcyhhdCkmJkcuaGFzKGF0LnNvdXJjZSgpKSYmRy5oYXMoYXQudGFyZ2V0KCkpJiZHLm1lcmdlKGF0KX0pfSl9O2RvIHEoKTt3aGlsZShELmxlbmd0aD4wKTtyZXR1cm4gT30sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtyZXR1cm4gZy5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZylbMF19fSksaDEuY29tcG9uZW50c09mPWgxLmNvbXBvbmVudHM7dmFyIGpmPWZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLEE9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKGc9PT12b2lkIDApe2JsKCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBEPW5ldyB6YixPPSExO2lmKCF4KXg9W107ZWxzZSBpZih4Lmxlbmd0aD4wJiZodCh4WzBdKSYmIW50KHhbMF0pKXtPPSEwO2Zvcih2YXIgJD1bXSxxPW5ldyB6NSxTPTAsRz14Lmxlbmd0aDtTPEc7UysrKXt2YXIgVz14W1NdO1cuZGF0YT09bnVsbCYmKFcuZGF0YT17fSk7dmFyIGV0PVcuZGF0YTtpZihldC5pZD09bnVsbClldC5pZD1JVCgpO2Vsc2UgaWYoZy5oYXNFbGVtZW50V2l0aElkKGV0LmlkKXx8cS5oYXMoZXQuaWQpKWNvbnRpbnVlO3ZhciBhdD1uZXcgRFQoZyxXLCExKTskLnB1c2goYXQpLHEuYWRkKGV0LmlkKX14PSR9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGx0PTAsZnQ9eC5sZW5ndGg7bHQ8ZnQ7bHQrKyl7dmFyIEF0PXhbbHRdWzBdO2lmKEF0IT1udWxsKXt2YXIga3Q9QXQuX3ByaXZhdGUuZGF0YS5pZDsoIVR8fCFELmhhcyhrdCkpJiYoVCYmRC5zZXQoa3Qse2luZGV4OnRoaXMubGVuZ3RoLGVsZTpBdH0pLHRoaXNbdGhpcy5sZW5ndGhdPUF0LHRoaXMubGVuZ3RoKyspfX10aGlzLl9wcml2YXRlPXtlbGVzOnRoaXMsY3k6ZyxnZXQgbWFwKCl7cmV0dXJuIHRoaXMubGF6eU1hcD09bnVsbCYmdGhpcy5yZWJ1aWxkTWFwKCksdGhpcy5sYXp5TWFwfSxzZXQgbWFwKE10KXt0aGlzLmxhenlNYXA9TXR9LHJlYnVpbGRNYXA6ZnVuY3Rpb24oKXtmb3IodmFyIER0PXRoaXMubGF6eU1hcD1uZXcgemIsanQ9dGhpcy5lbGVzLFp0PTA7WnQ8anQubGVuZ3RoO1p0Kyspe3ZhciBLdD1qdFtadF07RHQuc2V0KEt0LmlkKCkse2luZGV4Olp0LGVsZTpLdH0pfX19LFQmJih0aGlzLl9wcml2YXRlLm1hcD1EKSxPJiYhQSYmdGhpcy5yZXN0b3JlKCl9LGh1PURULnByb3RvdHlwZT1qZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO2h1Lmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImNvbGxlY3Rpb24ifSxodS5zcGF3bj1mdW5jdGlvbih5LGcpe3JldHVybiBuZXcgamYodGhpcy5jeSgpLHksZyl9LGh1LnNwYXduU2VsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNwYXduKHRoaXMpfSxodS5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fSxodS5yZW5kZXJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5LnJlbmRlcmVyKCl9LGh1LmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXX0saHUuY29sbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBPdCh0aGlzKT90aGlzOm5ldyBqZih0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9LGh1LnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgamYodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX0saHUuaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbih5KXtyZXR1cm4geT0iIit5LHRoaXMuX3ByaXZhdGUubWFwLmhhcyh5KX0saHUuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oeSl7eT0iIit5O3ZhciBnPXRoaXMuX3ByaXZhdGUuY3kseD10aGlzLl9wcml2YXRlLm1hcC5nZXQoeSk7cmV0dXJuIHg/eC5lbGU6bmV3IGpmKGcpfSxodS4kaWQ9aHUuZ2V0RWxlbWVudEJ5SWQsaHUucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZS5jeSxnPXkuX3ByaXZhdGUuZWxlbWVudHMseD10aGlzWzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIGcuX3ByaXZhdGUubWFwLmdldCh4KS5pbmRleH0saHUuaW5kZXhPZj1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChnKS5pbmRleH0saHUuaW5kZXhPZklkPWZ1bmN0aW9uKHkpe3JldHVybiB5PSIiK3ksdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHkpLmluZGV4fSxodS5qc29uPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuZWxlbWVudCgpLHg9dGhpcy5jeSgpO2lmKGc9PW51bGwmJnkpcmV0dXJuIHRoaXM7aWYoZyE9bnVsbCl7dmFyIFQ9Zy5fcHJpdmF0ZTtpZihodCh5KSl7aWYoeC5zdGFydEJhdGNoKCkseS5kYXRhKXtnLmRhdGEoeS5kYXRhKTt2YXIgQT1ULmRhdGE7aWYoZy5pc0VkZ2UoKSl7dmFyIEQ9ITEsTz17fSwkPXkuZGF0YS5zb3VyY2UscT15LmRhdGEudGFyZ2V0OyQhPW51bGwmJiQhPUEuc291cmNlJiYoTy5zb3VyY2U9IiIrJCxEPSEwKSxxIT1udWxsJiZxIT1BLnRhcmdldCYmKE8udGFyZ2V0PSIiK3EsRD0hMCksRCYmKGc9Zy5tb3ZlKE8pKX1lbHNle3ZhciBTPSJwYXJlbnQiaW4geS5kYXRhLEc9eS5kYXRhLnBhcmVudDtTJiYoRyE9bnVsbHx8QS5wYXJlbnQhPW51bGwpJiZHIT1BLnBhcmVudCYmKEc9PT12b2lkIDAmJihHPW51bGwpLEchPW51bGwmJihHPSIiK0cpLGc9Zy5tb3ZlKHtwYXJlbnQ6R30pKX19eS5wb3NpdGlvbiYmZy5wb3NpdGlvbih5LnBvc2l0aW9uKTt2YXIgVz1mdW5jdGlvbihmdCxBdCxrdCl7dmFyIE10PXlbZnRdO010IT1udWxsJiZNdCE9PVRbZnRdJiYoTXQ/Z1tBdF0oKTpnW2t0XSgpKX07cmV0dXJuIFcoInJlbW92ZWQiLCJyZW1vdmUiLCJyZXN0b3JlIiksVygic2VsZWN0ZWQiLCJzZWxlY3QiLCJ1bnNlbGVjdCIpLFcoInNlbGVjdGFibGUiLCJzZWxlY3RpZnkiLCJ1bnNlbGVjdGlmeSIpLFcoImxvY2tlZCIsImxvY2siLCJ1bmxvY2siKSxXKCJncmFiYmFibGUiLCJncmFiaWZ5IiwidW5ncmFiaWZ5IiksVygicGFubmFibGUiLCJwYW5pZnkiLCJ1bnBhbmlmeSIpLHkuY2xhc3NlcyE9bnVsbCYmZy5jbGFzc2VzKHkuY2xhc3NlcykseC5lbmRCYXRjaCgpLHRoaXN9ZWxzZSBpZih5PT09dm9pZCAwKXt2YXIgZXQ9e2RhdGE6JGIoVC5kYXRhKSxwb3NpdGlvbjokYihULnBvc2l0aW9uKSxncm91cDpULmdyb3VwLHJlbW92ZWQ6VC5yZW1vdmVkLHNlbGVjdGVkOlQuc2VsZWN0ZWQsc2VsZWN0YWJsZTpULnNlbGVjdGFibGUsbG9ja2VkOlQubG9ja2VkLGdyYWJiYWJsZTpULmdyYWJiYWJsZSxwYW5uYWJsZTpULnBhbm5hYmxlLGNsYXNzZXM6bnVsbH07ZXQuY2xhc3Nlcz0iIjt2YXIgYXQ9MDtyZXR1cm4gVC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obHQpe3JldHVybiBldC5jbGFzc2VzKz1hdCsrPT09MD9sdDoiICIrbHR9KSxldH19fSxodS5qc29ucz1mdW5jdGlvbigpe2Zvcih2YXIgeT1bXSxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciB4PXRoaXNbZ10sVD14Lmpzb24oKTt5LnB1c2goVCl9cmV0dXJuIHl9LGh1LmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuY3koKSxnPVtdLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIFQ9dGhpc1t4XSxBPVQuanNvbigpLEQ9bmV3IERUKHksQSwhMSk7Zy5wdXNoKEQpfXJldHVybiBuZXcgamYoeSxnKX0saHUuY29weT1odS5jbG9uZSxodS5yZXN0b3JlPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD14LmN5KCksQT1ULl9wcml2YXRlLEQ9W10sTz1bXSwkLHE9MCxTPXgubGVuZ3RoO3E8UztxKyspe3ZhciBHPXhbcV07ZyYmIUcucmVtb3ZlZCgpfHwoRy5pc05vZGUoKT9ELnB1c2goRyk6Ty5wdXNoKEcpKX0kPUQuY29uY2F0KE8pO3ZhciBXLGV0PWZ1bmN0aW9uKCl7JC5zcGxpY2UoVywxKSxXLS19O2ZvcihXPTA7VzwkLmxlbmd0aDtXKyspe3ZhciBhdD0kW1ddLGx0PWF0Ll9wcml2YXRlLGZ0PWx0LmRhdGE7aWYoYXQuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLCEoIWcmJiFsdC5yZW1vdmVkKSl7aWYoZnQuaWQ9PT12b2lkIDApZnQuaWQ9SVQoKTtlbHNlIGlmKFgoZnQuaWQpKWZ0LmlkPSIiK2Z0LmlkO2Vsc2UgaWYoWihmdC5pZCl8fCFtdChmdC5pZCkpe2JsKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIrZnQuaWQrImAiKSxldCgpO2NvbnRpbnVlfWVsc2UgaWYoVC5oYXNFbGVtZW50V2l0aElkKGZ0LmlkKSl7YmwoIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIrZnQuaWQrImAiKSxldCgpO2NvbnRpbnVlfX12YXIgQXQ9ZnQuaWQ7aWYoYXQuaXNOb2RlKCkpe3ZhciBrdD1sdC5wb3NpdGlvbjtrdC54PT1udWxsJiYoa3QueD0wKSxrdC55PT1udWxsJiYoa3QueT0wKX1pZihhdC5pc0VkZ2UoKSl7Zm9yKHZhciBNdD1hdCxEdD1bInNvdXJjZSIsInRhcmdldCJdLGp0PUR0Lmxlbmd0aCxadD0hMSxLdD0wO0t0PGp0O0t0Kyspe3ZhciB6dD1EdFtLdF0sZWU9ZnRbenRdO1goZWUpJiYoZWU9ZnRbenRdPSIiK2Z0W3p0XSksZWU9PW51bGx8fGVlPT09IiI/KGJsKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK0F0KyJgIHdpdGggdW5zcGVjaWZpZWQgIit6dCksWnQ9ITApOlQuaGFzRWxlbWVudFdpdGhJZChlZSl8fChibCgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIitBdCsiYCB3aXRoIG5vbmV4aXN0YW50ICIrenQrIiBgIitlZSsiYCIpLFp0PSEwKX1pZihadCl7ZXQoKTtjb250aW51ZX12YXIgVnQ9VC5nZXRFbGVtZW50QnlJZChmdC5zb3VyY2UpLGZlPVQuZ2V0RWxlbWVudEJ5SWQoZnQudGFyZ2V0KTtWdC5zYW1lKGZlKT9WdC5fcHJpdmF0ZS5lZGdlcy5wdXNoKE10KTooVnQuX3ByaXZhdGUuZWRnZXMucHVzaChNdCksZmUuX3ByaXZhdGUuZWRnZXMucHVzaChNdCkpLE10Ll9wcml2YXRlLnNvdXJjZT1WdCxNdC5fcHJpdmF0ZS50YXJnZXQ9ZmV9bHQubWFwPW5ldyB6YixsdC5tYXAuc2V0KEF0LHtlbGU6YXQsaW5kZXg6MH0pLGx0LnJlbW92ZWQ9ITEsZyYmVC5hZGRUb1Bvb2woYXQpfWZvcih2YXIgZ2U9MDtnZTxELmxlbmd0aDtnZSsrKXt2YXIgbmU9RFtnZV0sUGU9bmUuX3ByaXZhdGUuZGF0YTtYKFBlLnBhcmVudCkmJihQZS5wYXJlbnQ9IiIrUGUucGFyZW50KTt2YXIgcGU9UGUucGFyZW50LGJuPXBlIT1udWxsO2lmKGJufHxuZS5fcHJpdmF0ZS5wYXJlbnQpe3ZhciB6ZT1uZS5fcHJpdmF0ZS5wYXJlbnQ/VC5jb2xsZWN0aW9uKCkubWVyZ2UobmUuX3ByaXZhdGUucGFyZW50KTpULmdldEVsZW1lbnRCeUlkKHBlKTtpZih6ZS5lbXB0eSgpKVBlLnBhcmVudD12b2lkIDA7ZWxzZSBpZih6ZVswXS5yZW1vdmVkKCkpU2MoIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksUGUucGFyZW50PXZvaWQgMCxuZS5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgVmU9ITEsRW49emU7IUVuLmVtcHR5KCk7KXtpZihuZS5zYW1lKEVuKSl7VmU9ITAsUGUucGFyZW50PXZvaWQgMDticmVha31Fbj1Fbi5wYXJlbnQoKX1WZXx8KHplWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2gobmUpLG5lLl9wcml2YXRlLnBhcmVudD16ZVswXSxBLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBEbj0kLmxlbmd0aD09PXgubGVuZ3RoP3g6bmV3IGpmKFQsJCksS249MDtLbjxEbi5sZW5ndGg7S24rKyl7dmFyIFNuPURuW0tuXTtTbi5pc05vZGUoKXx8KFNuLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksU24uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLFNuLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIFduO0EuaGFzQ29tcG91bmROb2Rlcz9Xbj1ULmNvbGxlY3Rpb24oKS5tZXJnZShEbikubWVyZ2UoRG4uY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoRG4ucGFyZW50KCkpOlduPURuLFduLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHkpLHk/RG4uZW1pdEFuZE5vdGlmeSgiYWRkIik6ZyYmRG4uZW1pdCgiYWRkIil9cmV0dXJuIHh9LGh1LnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5JiZ5Ll9wcml2YXRlLnJlbW92ZWR9LGh1Lmluc2lkZT1mdW5jdGlvbigpe3ZhciB5PXRoaXNbMF07cmV0dXJuIHkmJiF5Ll9wcml2YXRlLnJlbW92ZWR9LGh1LnJlbW92ZT1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD1bXSxBPXt9LEQ9eC5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBPKHBlKXtmb3IodmFyIGJuPXBlLl9wcml2YXRlLmVkZ2VzLHplPTA7emU8Ym4ubGVuZ3RoO3plKyspcShiblt6ZV0pfWZ1bmN0aW9uICQocGUpe2Zvcih2YXIgYm49cGUuX3ByaXZhdGUuY2hpbGRyZW4semU9MDt6ZTxibi5sZW5ndGg7emUrKylxKGJuW3plXSl9ZnVuY3Rpb24gcShwZSl7dmFyIGJuPUFbcGUuaWQoKV07ZyYmcGUucmVtb3ZlZCgpfHxibnx8KEFbcGUuaWQoKV09ITAscGUuaXNOb2RlKCk/KFQucHVzaChwZSksTyhwZSksJChwZSkpOlQudW5zaGlmdChwZSkpfWZvcih2YXIgUz0wLEc9eC5sZW5ndGg7UzxHO1MrKyl7dmFyIFc9eFtTXTtxKFcpfWZ1bmN0aW9uIGV0KHBlLGJuKXt2YXIgemU9cGUuX3ByaXZhdGUuZWRnZXM7cG0oemUsYm4pLHBlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiBhdChwZSl7cGUuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBsdD1bXTtsdC5pZHM9e307ZnVuY3Rpb24gZnQocGUsYm4pe2JuPWJuWzBdLHBlPXBlWzBdO3ZhciB6ZT1wZS5fcHJpdmF0ZS5jaGlsZHJlbixWZT1wZS5pZCgpO3BtKHplLGJuKSxibi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxsdC5pZHNbVmVdfHwobHQuaWRzW1ZlXT0hMCxsdC5wdXNoKHBlKSl9eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxnJiZELnJlbW92ZUZyb21Qb29sKFQpO2Zvcih2YXIgQXQ9MDtBdDxULmxlbmd0aDtBdCsrKXt2YXIga3Q9VFtBdF07aWYoa3QuaXNFZGdlKCkpe3ZhciBNdD1rdC5zb3VyY2UoKVswXSxEdD1rdC50YXJnZXQoKVswXTtldChNdCxrdCksZXQoRHQsa3QpO2Zvcih2YXIganQ9a3QucGFyYWxsZWxFZGdlcygpLFp0PTA7WnQ8anQubGVuZ3RoO1p0Kyspe3ZhciBLdD1qdFtadF07YXQoS3QpLEt0LmlzQnVuZGxlZEJlemllcigpJiZLdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgenQ9a3QucGFyZW50KCk7enQubGVuZ3RoIT09MCYmZnQoenQsa3QpfWcmJihrdC5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgZWU9RC5fcHJpdmF0ZS5lbGVtZW50cztELl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBWdD0wO1Z0PGVlLmxlbmd0aDtWdCsrKXt2YXIgZmU9ZWVbVnRdO2lmKGZlLmlzUGFyZW50KCkpe0QuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIGdlPW5ldyBqZih0aGlzLmN5KCksVCk7Z2Uuc2l6ZSgpPjAmJih5P2dlLmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOmcmJmdlLmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIG5lPTA7bmU8bHQubGVuZ3RoO25lKyspe3ZhciBQZT1sdFtuZV07KCFnfHwhUGUucmVtb3ZlZCgpKSYmUGUudXBkYXRlU3R5bGUoKX1yZXR1cm4gZ2V9LGh1Lm1vdmU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PXRoaXMsVD0hMSxBPSExLEQ9ZnVuY3Rpb24obHQpe3JldHVybiBsdD09bnVsbD9sdDoiIitsdH07aWYoeS5zb3VyY2UhPT12b2lkIDB8fHkudGFyZ2V0IT09dm9pZCAwKXt2YXIgTz1EKHkuc291cmNlKSwkPUQoeS50YXJnZXQpLHE9TyE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKE8pLFM9JCE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKCQpOyhxfHxTKSYmKGcuYmF0Y2goZnVuY3Rpb24oKXt4LnJlbW92ZShULEEpLHguZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgYXQ9MDthdDx4Lmxlbmd0aDthdCsrKXt2YXIgbHQ9eFthdF0sZnQ9bHQuX3ByaXZhdGUuZGF0YTtsdC5pc0VkZ2UoKSYmKHEmJihmdC5zb3VyY2U9TyksUyYmKGZ0LnRhcmdldD0kKSl9eC5yZXN0b3JlKFQsQSl9KSx4LmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih5LnBhcmVudCE9PXZvaWQgMCl7dmFyIEc9RCh5LnBhcmVudCksVz1HPT09bnVsbHx8Zy5oYXNFbGVtZW50V2l0aElkKEcpO2lmKFcpe3ZhciBldD1HPT09bnVsbD92b2lkIDA6RztnLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIGF0PXgucmVtb3ZlKFQsQSk7YXQuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbHQ9MDtsdDx4Lmxlbmd0aDtsdCsrKXt2YXIgZnQ9eFtsdF0sQXQ9ZnQuX3ByaXZhdGUuZGF0YTtmdC5pc05vZGUoKSYmKEF0LnBhcmVudD1ldCl9YXQucmVzdG9yZShULEEpfSkseC5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbRUYsTVosS1QsdnAsSjUsVVosWFQsc0osZEIsZ0IsbEosZTksbjksUmYsRW0saDFdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoaHUseSl9KTt2YXIgdko9e2FkZDpmdW5jdGlvbihnKXt2YXIgeCxUPXRoaXM7aWYoeHQoZykpe3ZhciBBPWc7aWYoQS5fcHJpdmF0ZS5jeT09PVQpeD1BLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgRD1bXSxPPTA7TzxBLmxlbmd0aDtPKyspe3ZhciAkPUFbT107RC5wdXNoKCQuanNvbigpKX14PW5ldyBqZihULEQpfX1lbHNlIGlmKGR0KGcpKXt2YXIgcT1nO3g9bmV3IGpmKFQscSl9ZWxzZSBpZihodChnKSYmKGR0KGcubm9kZXMpfHxkdChnLmVkZ2VzKSkpe2Zvcih2YXIgUz1nLEc9W10sVz1bIm5vZGVzIiwiZWRnZXMiXSxldD0wLGF0PVcubGVuZ3RoO2V0PGF0O2V0Kyspe3ZhciBsdD1XW2V0XSxmdD1TW2x0XTtpZihkdChmdCkpZm9yKHZhciBBdD0wLGt0PWZ0Lmxlbmd0aDtBdDxrdDtBdCsrKXt2YXIgTXQ9bWUoe2dyb3VwOmx0fSxmdFtBdF0pO0cucHVzaChNdCl9fXg9bmV3IGpmKFQsRyl9ZWxzZXt2YXIgRHQ9Zzt4PW5ldyBEVChULER0KS5jb2xsZWN0aW9uKCl9cmV0dXJuIHh9LHJlbW92ZTpmdW5jdGlvbihnKXtpZigheHQoZykpe2lmKG10KGcpKXt2YXIgeD1nO2c9dGhpcy4kKHgpfX1yZXR1cm4gZy5yZW1vdmUoKX19Oy8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9mdW5jdGlvbiB3Sih5LGcseCxUKXt2YXIgQT00LEQ9LjAwMSxPPTFlLTcsJD0xMCxxPTExLFM9MS8ocS0xKSxHPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgVz0wO1c8NDsrK1cpaWYodHlwZW9mIGFyZ3VtZW50c1tXXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tXXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbV10pKXJldHVybiExO3k9TWF0aC5taW4oeSwxKSx4PU1hdGgubWluKHgsMSkseT1NYXRoLm1heCh5LDApLHg9TWF0aC5tYXgoeCwwKTt2YXIgZXQ9Rz9uZXcgRmxvYXQzMkFycmF5KHEpOm5ldyBBcnJheShxKTtmdW5jdGlvbiBhdChmZSxnZSl7cmV0dXJuIDEtMypnZSszKmZlfWZ1bmN0aW9uIGx0KGZlLGdlKXtyZXR1cm4gMypnZS02KmZlfWZ1bmN0aW9uIGZ0KGZlKXtyZXR1cm4gMypmZX1mdW5jdGlvbiBBdChmZSxnZSxuZSl7cmV0dXJuKChhdChnZSxuZSkqZmUrbHQoZ2UsbmUpKSpmZStmdChnZSkpKmZlfWZ1bmN0aW9uIGt0KGZlLGdlLG5lKXtyZXR1cm4gMyphdChnZSxuZSkqZmUqZmUrMipsdChnZSxuZSkqZmUrZnQoZ2UpfWZ1bmN0aW9uIE10KGZlLGdlKXtmb3IodmFyIG5lPTA7bmU8QTsrK25lKXt2YXIgUGU9a3QoZ2UseSx4KTtpZihQZT09PTApcmV0dXJuIGdlO3ZhciBwZT1BdChnZSx5LHgpLWZlO2dlLT1wZS9QZX1yZXR1cm4gZ2V9ZnVuY3Rpb24gRHQoKXtmb3IodmFyIGZlPTA7ZmU8cTsrK2ZlKWV0W2ZlXT1BdChmZSpTLHkseCl9ZnVuY3Rpb24ganQoZmUsZ2UsbmUpe3ZhciBQZSxwZSxibj0wO2RvIHBlPWdlKyhuZS1nZSkvMixQZT1BdChwZSx5LHgpLWZlLFBlPjA/bmU9cGU6Z2U9cGU7d2hpbGUoTWF0aC5hYnMoUGUpPk8mJisrYm48JCk7cmV0dXJuIHBlfWZ1bmN0aW9uIFp0KGZlKXtmb3IodmFyIGdlPTAsbmU9MSxQZT1xLTE7bmUhPT1QZSYmZXRbbmVdPD1mZTsrK25lKWdlKz1TOy0tbmU7dmFyIHBlPShmZS1ldFtuZV0pLyhldFtuZSsxXS1ldFtuZV0pLGJuPWdlK3BlKlMsemU9a3QoYm4seSx4KTtyZXR1cm4gemU+PUQ/TXQoZmUsYm4pOnplPT09MD9ibjpqdChmZSxnZSxnZStTKX12YXIgS3Q9ITE7ZnVuY3Rpb24genQoKXtLdD0hMCwoeSE9PWd8fHghPT1UKSYmRHQoKX12YXIgZWU9ZnVuY3Rpb24oZ2Upe3JldHVybiBLdHx8enQoKSx5PT09ZyYmeD09PVQ/Z2U6Z2U9PT0wPzA6Z2U9PT0xPzE6QXQoWnQoZ2UpLGcsVCl9O2VlLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3g6eSx5Omd9LHt4LHk6VH1dfTt2YXIgVnQ9ImdlbmVyYXRlQmV6aWVyKCIrW3ksZyx4LFRdKyIpIjtyZXR1cm4gZWUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gVnR9LGVlfS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgbUo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KFQpe3JldHVybi1ULnRlbnNpb24qVC54LVQuZnJpY3Rpb24qVC52fWZ1bmN0aW9uIGcoVCxBLEQpe3ZhciBPPXt4OlQueCtELmR4KkEsdjpULnYrRC5kdipBLHRlbnNpb246VC50ZW5zaW9uLGZyaWN0aW9uOlQuZnJpY3Rpb259O3JldHVybntkeDpPLnYsZHY6eShPKX19ZnVuY3Rpb24geChULEEpe3ZhciBEPXtkeDpULnYsZHY6eShUKX0sTz1nKFQsQSouNSxEKSwkPWcoVCxBKi41LE8pLHE9ZyhULEEsJCksUz0xLzYqKEQuZHgrMiooTy5keCskLmR4KStxLmR4KSxHPTEvNiooRC5kdisyKihPLmR2KyQuZHYpK3EuZHYpO3JldHVybiBULng9VC54K1MqQSxULnY9VC52K0cqQSxUfXJldHVybiBmdW5jdGlvbiBUKEEsRCxPKXt2YXIgJD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHE9WzBdLFM9MCxHPTEvMWU0LFc9MTYvMWUzLGV0LGF0LGx0O2ZvcihBPXBhcnNlRmxvYXQoQSl8fDUwMCxEPXBhcnNlRmxvYXQoRCl8fDIwLE89T3x8bnVsbCwkLnRlbnNpb249QSwkLmZyaWN0aW9uPUQsZXQ9TyE9PW51bGwsZXQ/KFM9VChBLEQpLGF0PVMvTypXKTphdD1XO2x0PXgobHR8fCQsYXQpLHEucHVzaCgxK2x0LngpLFMrPTE2LE1hdGguYWJzKGx0LngpPkcmJk1hdGguYWJzKGx0LnYpPkc7KTtyZXR1cm4gZXQ/ZnVuY3Rpb24oZnQpe3JldHVybiBxW2Z0KihxLmxlbmd0aC0xKXwwXX06U319KCksZnU9ZnVuY3Rpb24oZyx4LFQsQSl7dmFyIEQ9d0ooZyx4LFQsQSk7cmV0dXJuIGZ1bmN0aW9uKE8sJCxxKXtyZXR1cm4gTysoJC1PKSpEKHEpfX0sczk9e2xpbmVhcjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcrKHgtZykqVH0sZWFzZTpmdSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjpmdSguNDIsMCwxLDEpLCJlYXNlLW91dCI6ZnUoMCwwLC41OCwxKSwiZWFzZS1pbi1vdXQiOmZ1KC40MiwwLC41OCwxKSwiZWFzZS1pbi1zaW5lIjpmdSguNDcsMCwuNzQ1LC43MTUpLCJlYXNlLW91dC1zaW5lIjpmdSguMzksLjU3NSwuNTY1LDEpLCJlYXNlLWluLW91dC1zaW5lIjpmdSguNDQ1LC4wNSwuNTUsLjk1KSwiZWFzZS1pbi1xdWFkIjpmdSguNTUsLjA4NSwuNjgsLjUzKSwiZWFzZS1vdXQtcXVhZCI6ZnUoLjI1LC40NiwuNDUsLjk0KSwiZWFzZS1pbi1vdXQtcXVhZCI6ZnUoLjQ1NSwuMDMsLjUxNSwuOTU1KSwiZWFzZS1pbi1jdWJpYyI6ZnUoLjU1LC4wNTUsLjY3NSwuMTkpLCJlYXNlLW91dC1jdWJpYyI6ZnUoLjIxNSwuNjEsLjM1NSwxKSwiZWFzZS1pbi1vdXQtY3ViaWMiOmZ1KC42NDUsLjA0NSwuMzU1LDEpLCJlYXNlLWluLXF1YXJ0IjpmdSguODk1LC4wMywuNjg1LC4yMiksImVhc2Utb3V0LXF1YXJ0IjpmdSguMTY1LC44NCwuNDQsMSksImVhc2UtaW4tb3V0LXF1YXJ0IjpmdSguNzcsMCwuMTc1LDEpLCJlYXNlLWluLXF1aW50IjpmdSguNzU1LC4wNSwuODU1LC4wNiksImVhc2Utb3V0LXF1aW50IjpmdSguMjMsMSwuMzIsMSksImVhc2UtaW4tb3V0LXF1aW50IjpmdSguODYsMCwuMDcsMSksImVhc2UtaW4tZXhwbyI6ZnUoLjk1LC4wNSwuNzk1LC4wMzUpLCJlYXNlLW91dC1leHBvIjpmdSguMTksMSwuMjIsMSksImVhc2UtaW4tb3V0LWV4cG8iOmZ1KDEsMCwwLDEpLCJlYXNlLWluLWNpcmMiOmZ1KC42LC4wNCwuOTgsLjMzNSksImVhc2Utb3V0LWNpcmMiOmZ1KC4wNzUsLjgyLC4xNjUsMSksImVhc2UtaW4tb3V0LWNpcmMiOmZ1KC43ODUsLjEzNSwuMTUsLjg2KSxzcHJpbmc6ZnVuY3Rpb24oZyx4LFQpe2lmKFQ9PT0wKXJldHVybiBzOS5saW5lYXI7dmFyIEE9bUooZyx4LFQpO3JldHVybiBmdW5jdGlvbihELE8sJCl7cmV0dXJuIEQrKE8tRCkqQSgkKX19LCJjdWJpYy1iZXppZXIiOmZ1fTtmdW5jdGlvbiBUQih5LGcseCxULEEpe2lmKFQ9PT0xfHxnPT09eClyZXR1cm4geDt2YXIgRD1BKGcseCxUKTtyZXR1cm4geT09bnVsbHx8KCh5LnJvdW5kVmFsdWV8fHkuY29sb3IpJiYoRD1NYXRoLnJvdW5kKEQpKSx5Lm1pbiE9PXZvaWQgMCYmKEQ9TWF0aC5tYXgoRCx5Lm1pbikpLHkubWF4IT09dm9pZCAwJiYoRD1NYXRoLm1pbihELHkubWF4KSkpLER9ZnVuY3Rpb24gQ0IoeSxnKXtyZXR1cm4geS5wZlZhbHVlIT1udWxsfHx5LnZhbHVlIT1udWxsP3kucGZWYWx1ZSE9bnVsbCYmKGc9PW51bGx8fGcudHlwZS51bml0cyE9PSIlIik/eS5wZlZhbHVlOnkudmFsdWU6eX1mdW5jdGlvbiBzeCh5LGcseCxULEEpe3ZhciBEPUEhPW51bGw/QS50eXBlOm51bGw7eDwwP3g9MDp4PjEmJih4PTEpO3ZhciBPPUNCKHksQSksJD1DQihnLEEpO2lmKFgoTykmJlgoJCkpcmV0dXJuIFRCKEQsTywkLHgsVCk7aWYoZHQoTykmJmR0KCQpKXtmb3IodmFyIHE9W10sUz0wO1M8JC5sZW5ndGg7UysrKXt2YXIgRz1PW1NdLFc9JFtTXTtpZihHIT1udWxsJiZXIT1udWxsKXt2YXIgZXQ9VEIoRCxHLFcseCxUKTtxLnB1c2goZXQpfWVsc2UgcS5wdXNoKFcpfXJldHVybiBxfX1mdW5jdGlvbiB5Sih5LGcseCxUKXt2YXIgQT0hVCxEPXkuX3ByaXZhdGUsTz1nLl9wcml2YXRlLCQ9Ty5lYXNpbmcscT1PLnN0YXJ0VGltZSxTPVQ/eTp5LmN5KCksRz1TLnN0eWxlKCk7aWYoIU8uZWFzaW5nSW1wbClpZigkPT1udWxsKU8uZWFzaW5nSW1wbD1zOS5saW5lYXI7ZWxzZXt2YXIgVztpZihtdCgkKSl7dmFyIGV0PUcucGFyc2UoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIiwkKTtXPWV0LnZhbHVlfWVsc2UgVz0kO3ZhciBhdCxsdDttdChXKT8oYXQ9VyxsdD1bXSk6KGF0PVdbMV0sbHQ9Vy5zbGljZSgyKS5tYXAoZnVuY3Rpb24oRG4pe3JldHVybitEbn0pKSxsdC5sZW5ndGg+MD8oYXQ9PT0ic3ByaW5nIiYmbHQucHVzaChPLmR1cmF0aW9uKSxPLmVhc2luZ0ltcGw9czlbYXRdLmFwcGx5KG51bGwsbHQpKTpPLmVhc2luZ0ltcGw9czlbYXRdfXZhciBmdD1PLmVhc2luZ0ltcGwsQXQ7aWYoTy5kdXJhdGlvbj09PTA/QXQ9MTpBdD0oeC1xKS9PLmR1cmF0aW9uLE8uYXBwbHlpbmcmJihBdD1PLnByb2dyZXNzKSxBdDwwP0F0PTA6QXQ+MSYmKEF0PTEpLE8uZGVsYXk9PW51bGwpe3ZhciBrdD1PLnN0YXJ0UG9zaXRpb24sTXQ9Ty5wb3NpdGlvbjtpZihNdCYmQSYmIXkubG9ja2VkKCkpe3ZhciBEdD17fTtEayhrdC54LE10LngpJiYoRHQueD1zeChrdC54LE10LngsQXQsZnQpKSxEayhrdC55LE10LnkpJiYoRHQueT1zeChrdC55LE10LnksQXQsZnQpKSx5LnBvc2l0aW9uKER0KX12YXIganQ9Ty5zdGFydFBhbixadD1PLnBhbixLdD1ELnBhbix6dD1adCE9bnVsbCYmVDt6dCYmKERrKGp0LngsWnQueCkmJihLdC54PXN4KGp0LngsWnQueCxBdCxmdCkpLERrKGp0LnksWnQueSkmJihLdC55PXN4KGp0LnksWnQueSxBdCxmdCkpLHkuZW1pdCgicGFuIikpO3ZhciBlZT1PLnN0YXJ0Wm9vbSxWdD1PLnpvb20sZmU9VnQhPW51bGwmJlQ7ZmUmJihEayhlZSxWdCkmJihELnpvb209d2soRC5taW5ab29tLHN4KGVlLFZ0LEF0LGZ0KSxELm1heFpvb20pKSx5LmVtaXQoInpvb20iKSksKHp0fHxmZSkmJnkuZW1pdCgidmlld3BvcnQiKTt2YXIgZ2U9Ty5zdHlsZTtpZihnZSYmZ2UubGVuZ3RoPjAmJkEpe2Zvcih2YXIgbmU9MDtuZTxnZS5sZW5ndGg7bmUrKyl7dmFyIFBlPWdlW25lXSxwZT1QZS5uYW1lLGJuPVBlLHplPU8uc3RhcnRTdHlsZVtwZV0sVmU9Ry5wcm9wZXJ0aWVzW3plLm5hbWVdLEVuPXN4KHplLGJuLEF0LGZ0LFZlKTtHLm92ZXJyaWRlQnlwYXNzKHkscGUsRW4pfXkuZW1pdCgic3R5bGUiKX19cmV0dXJuIE8ucHJvZ3Jlc3M9QXQsQXR9ZnVuY3Rpb24gRGsoeSxnKXtyZXR1cm4geT09bnVsbHx8Zz09bnVsbD8hMTpYKHkpJiZYKGcpPyEwOiEhKHkmJmcpfWZ1bmN0aW9uIHhKKHksZyx4LFQpe3ZhciBBPWcuX3ByaXZhdGU7QS5zdGFydGVkPSEwLEEuc3RhcnRUaW1lPXgtQS5wcm9ncmVzcypBLmR1cmF0aW9ufWZ1bmN0aW9uIF9CKHksZyl7dmFyIHg9Zy5fcHJpdmF0ZS5hbmlFbGVzLFQ9W107ZnVuY3Rpb24gQShHLFcpe3ZhciBldD1HLl9wcml2YXRlLGF0PWV0LmFuaW1hdGlvbi5jdXJyZW50LGx0PWV0LmFuaW1hdGlvbi5xdWV1ZSxmdD0hMTtpZihhdC5sZW5ndGg9PT0wKXt2YXIgQXQ9bHQuc2hpZnQoKTtBdCYmYXQucHVzaChBdCl9Zm9yKHZhciBrdD1mdW5jdGlvbihLdCl7Zm9yKHZhciB6dD1LdC5sZW5ndGgtMTt6dD49MDt6dC0tKXt2YXIgZWU9S3RbenRdO2VlKCl9S3Quc3BsaWNlKDAsS3QubGVuZ3RoKX0sTXQ9YXQubGVuZ3RoLTE7TXQ+PTA7TXQtLSl7dmFyIER0PWF0W010XSxqdD1EdC5fcHJpdmF0ZTtpZihqdC5zdG9wcGVkKXthdC5zcGxpY2UoTXQsMSksanQuaG9va2VkPSExLGp0LnBsYXlpbmc9ITEsanQuc3RhcnRlZD0hMSxrdChqdC5mcmFtZXMpO2NvbnRpbnVlfSFqdC5wbGF5aW5nJiYhanQuYXBwbHlpbmd8fChqdC5wbGF5aW5nJiZqdC5hcHBseWluZyYmKGp0LmFwcGx5aW5nPSExKSxqdC5zdGFydGVkfHx4SihHLER0LHkpLHlKKEcsRHQseSxXKSxqdC5hcHBseWluZyYmKGp0LmFwcGx5aW5nPSExKSxrdChqdC5mcmFtZXMpLGp0LnN0ZXAhPW51bGwmJmp0LnN0ZXAoeSksRHQuY29tcGxldGVkKCkmJihhdC5zcGxpY2UoTXQsMSksanQuaG9va2VkPSExLGp0LnBsYXlpbmc9ITEsanQuc3RhcnRlZD0hMSxrdChqdC5jb21wbGV0ZXMpKSxmdD0hMCl9cmV0dXJuIVcmJmF0Lmxlbmd0aD09PTAmJmx0Lmxlbmd0aD09PTAmJlQucHVzaChHKSxmdH1mb3IodmFyIEQ9ITEsTz0wO088eC5sZW5ndGg7TysrKXt2YXIgJD14W09dLHE9QSgkKTtEPUR8fHF9dmFyIFM9QShnLCEwKTsoRHx8UykmJih4Lmxlbmd0aD4wP2cubm90aWZ5KCJkcmF3Iix4KTpnLm5vdGlmeSgiZHJhdyIpKSx4LnVubWVyZ2UoVCksZy5lbWl0KCJzdGVwIil9dmFyIGtKPXthbmltYXRlOkFjLmFuaW1hdGUoKSxhbmltYXRpb246QWMuYW5pbWF0aW9uKCksYW5pbWF0ZWQ6QWMuYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOkFjLmNsZWFyUXVldWUoKSxkZWxheTpBYy5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOkFjLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpBYy5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7eC5zdHlsZUVuYWJsZWQoKSYmeC5fcHJpdmF0ZS5hbmlFbGVzLm1lcmdlKGcpfSxzdG9wQW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITF9LHN0YXJ0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYoZy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMCwhZy5zdHlsZUVuYWJsZWQoKSlyZXR1cm47ZnVuY3Rpb24geCgpe2cuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcmJkZmKGZ1bmN0aW9uKEQpe19CKEQsZykseCgpfSl9dmFyIFQ9Zy5yZW5kZXJlcigpO1QmJlQuYmVmb3JlUmVuZGVyP1QuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKEQsTyl7X0IoTyxnKX0sVC5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOngoKX19LEVKPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PW51bGx8fHg9PW51bGw/Zz09bnVsbCYmeD09bnVsbDpnLnNhbWVUZXh0KHgpfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPXgucXVhbGlmaWVyO3JldHVybiBBIT1udWxsP2chPT1ULnRhcmdldCYmbnQoVC50YXJnZXQpJiZBLm1hdGNoZXMoVC50YXJnZXQpOiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbihnLHgpe3guY3k9Zyx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfX0sYTk9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyB5bShnKTpnfSxTQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcuZW1pdHRlcnx8KGcuZW1pdHRlcj1uZXcgSlQoRUosdGhpcykpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKGcsYTkoeCksVCksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihnLGE5KHgpLFQpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxvbmU6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZyxhOSh4KSxUKSx0aGlzfSxvbmNlOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGcsYTkoeCksVCksdGhpc30sZW1pdDpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGcseCksdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXQoZyksdGhpcy5ub3RpZnkoZyx4KSx0aGlzfX07QWMuZXZlbnRBbGlhc2VzT24oU0IpO3ZhciB6TD17cG5nOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGc9Z3x8e30seC5wbmcoZyl9LGpwZzpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBnPWd8fHt9LGcuYmc9Zy5iZ3x8IiNmZmYiLHguanBnKGcpfX07ekwuanBlZz16TC5qcGc7dmFyIG85PXtsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT1udWxsKXtibCgiTGF5b3V0IG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn1pZihnLm5hbWU9PW51bGwpe2JsKCJBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufXZhciBUPWcubmFtZSxBPXguZXh0ZW5zaW9uKCJsYXlvdXQiLFQpO2lmKEE9PW51bGwpe2JsKCJObyBzdWNoIGxheW91dCBgIitUKyJgIGZvdW5kLiAgRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKTtyZXR1cm59dmFyIEQ7bXQoZy5lbGVzKT9EPXguJChnLmVsZXMpOkQ9Zy5lbGVzIT1udWxsP2cuZWxlczp4LiQoKTt2YXIgTz1uZXcgQShtZSh7fSxnLHtjeTp4LGVsZXM6RH0pKTtyZXR1cm4gT319O285LmNyZWF0ZUxheW91dD1vOS5tYWtlTGF5b3V0PW85LmxheW91dDt2YXIgVEo9e25vdGlmeTpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuX3ByaXZhdGU7aWYodGhpcy5iYXRjaGluZygpKXtULmJhdGNoTm90aWZpY2F0aW9ucz1ULmJhdGNoTm90aWZpY2F0aW9uc3x8e307dmFyIEE9VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ109VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ118fHRoaXMuY29sbGVjdGlvbigpO3ghPW51bGwmJkEubWVyZ2UoeCk7cmV0dXJufWlmKFQubm90aWZpY2F0aW9uc0VuYWJsZWQpe3ZhciBEPXRoaXMucmVuZGVyZXIoKTt0aGlzLmRlc3Ryb3llZCgpfHwhRHx8RC5ub3RpZnkoZyx4KX19LG5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94Lm5vdGlmaWNhdGlvbnNFbmFibGVkOih4Lm5vdGlmaWNhdGlvbnNFbmFibGVkPSEhZyx0aGlzKX0sbm9Ob3RpZmljYXRpb25zOmZ1bmN0aW9uKGcpe3RoaXMubm90aWZpY2F0aW9ucyghMSksZygpLHRoaXMubm90aWZpY2F0aW9ucyghMCl9LGJhdGNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYmF0Y2hDb3VudD4wfSxzdGFydEJhdGNoOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5iYXRjaENvdW50PT1udWxsJiYoZy5iYXRjaENvdW50PTApLGcuYmF0Y2hDb3VudD09PTAmJihnLmJhdGNoU3R5bGVFbGVzPXRoaXMuY29sbGVjdGlvbigpLGcuYmF0Y2hOb3RpZmljYXRpb25zPXt9KSxnLmJhdGNoQ291bnQrKyx0aGlzfSxlbmRCYXRjaDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoZy5iYXRjaENvdW50PT09MClyZXR1cm4gdGhpcztpZihnLmJhdGNoQ291bnQtLSxnLmJhdGNoQ291bnQ9PT0wKXtnLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7dmFyIHg9dGhpcy5yZW5kZXJlcigpO09iamVjdC5rZXlzKGcuYmF0Y2hOb3RpZmljYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBBPWcuYmF0Y2hOb3RpZmljYXRpb25zW1RdO0EuZW1wdHkoKT94Lm5vdGlmeShUKTp4Lm5vdGlmeShULEEpfSl9cmV0dXJuIHRoaXN9LGJhdGNoOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnN0YXJ0QmF0Y2goKSxnKCksdGhpcy5lbmRCYXRjaCgpLHRoaXN9LGJhdGNoRGF0YTpmdW5jdGlvbihnKXt2YXIgeD10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBUPU9iamVjdC5rZXlzKGcpLEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIEQ9VFtBXSxPPWdbRF0sJD14LmdldEVsZW1lbnRCeUlkKEQpOyQuZGF0YShPKX19KX19LENKPUJmKHtoaWRlRWRnZXNPblZpZXdwb3J0OiExLHRleHR1cmVPblZpZXdwb3J0OiExLG1vdGlvbkJsdXI6ITEsbW90aW9uQmx1ck9wYWNpdHk6LjA1LHBpeGVsUmF0aW86dm9pZCAwLGRlc2t0b3BUYXBUaHJlc2hvbGQ6NCx0b3VjaFRhcFRocmVzaG9sZDo4LHdoZWVsU2Vuc2l0aXZpdHk6MSxkZWJ1ZzohMSxzaG93RnBzOiExfSkscUw9e3JlbmRlclRvOmZ1bmN0aW9uKGcseCxULEEpe3ZhciBEPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIEQucmVuZGVyVG8oZyx4LFQsQSksdGhpc30scmVuZGVyZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcn0sZm9yY2VSZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3RpZnkoImRyYXciKSx0aGlzfSxyZXNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkYXRlU2l6ZSgpLHRoaXMuZW1pdEFuZE5vdGlmeSgicmVzaXplIiksdGhpc30saW5pdFJlbmRlcmVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmV4dGVuc2lvbigicmVuZGVyZXIiLGcubmFtZSk7aWYoVD09bnVsbCl7YmwoIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgIi5jb25jYXQoZy5uYW1lLCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpKTtyZXR1cm59Zy53aGVlbFNlbnNpdGl2aXR5IT09dm9pZCAwJiZTYygiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuIik7dmFyIEE9Q0ooZyk7QS5jeT14LHguX3ByaXZhdGUucmVuZGVyZXI9bmV3IFQoQSksdGhpcy5ub3RpZnkoImluaXQiKX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcztnLm5vdGlmeSgiZGVzdHJveSIpO3ZhciB4PWcuY29udGFpbmVyKCk7aWYoeClmb3IoeC5fY3lyZWc9bnVsbDt4LmNoaWxkTm9kZXMubGVuZ3RoPjA7KXgucmVtb3ZlQ2hpbGQoeC5jaGlsZE5vZGVzWzBdKTtnLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsZy5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBBPVQuX3ByaXZhdGU7QS5yc2NyYXRjaD17fSxBLnJzdHlsZT17fSxBLmFuaW1hdGlvbi5jdXJyZW50PVtdLEEuYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLGcpfSxvZmZSZW5kZXI6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLGcpfX07cUwuaW52YWxpZGF0ZURpbWVuc2lvbnM9cUwucmVzaXplO3ZhciBjOT17Y29sbGVjdGlvbjpmdW5jdGlvbihnLHgpe3JldHVybiBtdChnKT90aGlzLiQoZyk6eHQoZyk/Zy5jb2xsZWN0aW9uKCk6ZHQoZyk/KHh8fCh4PXt9KSxuZXcgamYodGhpcyxnLHgudW5pcXVlLHgucmVtb3ZlZCkpOm5ldyBqZih0aGlzKX0sbm9kZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzTm9kZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sZWRnZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzRWRnZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sJDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBnP3guZmlsdGVyKGcpOnguc3Bhd25TZWxmKCl9LG11dGFibGVFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfX07YzkuZWxlbWVudHM9YzkuZmlsdGVyPWM5LiQ7dmFyIGYxPXt9LE9rPSJ0IixfSj0iZiI7ZjEuYXBwbHk9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLl9wcml2YXRlLFQ9eC5jeSxBPVQuY29sbGVjdGlvbigpLEQ9MDtEPHkubGVuZ3RoO0QrKyl7dmFyIE89eVtEXSwkPWcuZ2V0Q29udGV4dE1ldGEoTyk7aWYoISQuZW1wdHkpe3ZhciBxPWcuZ2V0Q29udGV4dFN0eWxlKCQpLFM9Zy5hcHBseUNvbnRleHRTdHlsZSgkLHEsTyk7Ty5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP2cudXBkYXRlVHJhbnNpdGlvbnMoTyxTLmRpZmZQcm9wcyk6Ty5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwO3ZhciBHPWcudXBkYXRlU3R5bGVIaW50cyhPKTtHJiZBLnB1c2goTyl9fXJldHVybiBBfSxmMS5nZXRQcm9wZXJ0aWVzRGlmZj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14Ll9wcml2YXRlLnByb3BEaWZmcz14Ll9wcml2YXRlLnByb3BEaWZmc3x8e30sQT15KyItIitnLEQ9VFtBXTtpZihEKXJldHVybiBEO2Zvcih2YXIgTz1bXSwkPXt9LHE9MDtxPHgubGVuZ3RoO3ErKyl7dmFyIFM9eFtxXSxHPXlbcV09PT1PayxXPWdbcV09PT1PayxldD1HIT09VyxhdD1TLm1hcHBlZFByb3BlcnRpZXMubGVuZ3RoPjA7aWYoZXR8fFcmJmF0KXt2YXIgbHQ9dm9pZCAwO2V0JiZhdHx8ZXQ/bHQ9Uy5wcm9wZXJ0aWVzOmF0JiYobHQ9Uy5tYXBwZWRQcm9wZXJ0aWVzKTtmb3IodmFyIGZ0PTA7ZnQ8bHQubGVuZ3RoO2Z0Kyspe2Zvcih2YXIgQXQ9bHRbZnRdLGt0PUF0Lm5hbWUsTXQ9ITEsRHQ9cSsxO0R0PHgubGVuZ3RoO0R0Kyspe3ZhciBqdD14W0R0XSxadD1nW0R0XT09PU9rO2lmKFp0JiYoTXQ9anQucHJvcGVydGllc1tBdC5uYW1lXSE9bnVsbCxNdCkpYnJlYWt9ISRba3RdJiYhTXQmJigkW2t0XT0hMCxPLnB1c2goa3QpKX19fXJldHVybiBUW0FdPU8sT30sZjEuZ2V0Q29udGV4dE1ldGE9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD0iIixULEE9eS5fcHJpdmF0ZS5zdHlsZUN4dEtleXx8IiIsRD0wO0Q8Zy5sZW5ndGg7RCsrKXt2YXIgTz1nW0RdLCQ9Ty5zZWxlY3RvciYmTy5zZWxlY3Rvci5tYXRjaGVzKHkpOyQ/eCs9T2s6eCs9X0p9cmV0dXJuIFQ9Zy5nZXRQcm9wZXJ0aWVzRGlmZihBLHgpLHkuX3ByaXZhdGUuc3R5bGVDeHRLZXk9eCx7a2V5OngsZGlmZlByb3BOYW1lczpULGVtcHR5OlQubGVuZ3RoPT09MH19LGYxLmdldENvbnRleHRTdHlsZT1mdW5jdGlvbih5KXt2YXIgZz15LmtleSx4PXRoaXMsVD10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXM9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzfHx7fTtpZihUW2ddKXJldHVybiBUW2ddO2Zvcih2YXIgQT17X3ByaXZhdGU6e2tleTpnfX0sRD0wO0Q8eC5sZW5ndGg7RCsrKXt2YXIgTz14W0RdLCQ9Z1tEXT09PU9rO2lmKCQpZm9yKHZhciBxPTA7cTxPLnByb3BlcnRpZXMubGVuZ3RoO3ErKyl7dmFyIFM9Ty5wcm9wZXJ0aWVzW3FdO0FbUy5uYW1lXT1TfX1yZXR1cm4gVFtnXT1BLEF9LGYxLmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9dGhpcyxBPXkuZGlmZlByb3BOYW1lcyxEPXt9LE89VC50eXBlcywkPTA7JDxBLmxlbmd0aDskKyspe3ZhciBxPUFbJF0sUz1nW3FdLEc9eC5wc3R5bGUocSk7aWYoIVMpaWYoRylHLmJ5cGFzcz9TPXtuYW1lOnEsZGVsZXRlQnlwYXNzZWQ6ITB9OlM9e25hbWU6cSxkZWxldGU6ITB9O2Vsc2UgY29udGludWU7aWYoRyE9PVMpe2lmKFMubWFwcGVkPT09Ty5mbiYmRyE9bnVsbCYmRy5tYXBwaW5nIT1udWxsJiZHLm1hcHBpbmcudmFsdWU9PT1TLnZhbHVlKXt2YXIgVz1HLm1hcHBpbmcsZXQ9Vy5mblZhbHVlPVMudmFsdWUoeCk7aWYoZXQ9PT1XLnByZXZGblZhbHVlKWNvbnRpbnVlfXZhciBhdD1EW3FdPXtwcmV2Okd9O1QuYXBwbHlQYXJzZWRQcm9wZXJ0eSh4LFMpLGF0Lm5leHQ9eC5wc3R5bGUocSksYXQubmV4dCYmYXQubmV4dC5ieXBhc3MmJihhdC5uZXh0PWF0Lm5leHQuYnlwYXNzZWQpfX1yZXR1cm57ZGlmZlByb3BzOkR9fSxmMS51cGRhdGVTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUseD10aGlzLFQ9eC5wcm9wZXJ0eUdyb3VwTmFtZXMsQT14LnByb3BlcnR5R3JvdXBLZXlzLEQ9ZnVuY3Rpb24oSnIsd2ksS3Mpe3JldHVybiB4LmdldFByb3BlcnRpZXNIYXNoKEpyLHdpLEtzKX0sTz1nLnN0eWxlS2V5O2lmKHkucmVtb3ZlZCgpKXJldHVybiExO3ZhciAkPWcuZ3JvdXA9PT0ibm9kZXMiLHE9eS5fcHJpdmF0ZS5zdHlsZTtUPU9iamVjdC5rZXlzKHEpO2Zvcih2YXIgUz0wO1M8QS5sZW5ndGg7UysrKXt2YXIgRz1BW1NdO2cuc3R5bGVLZXlzW0ddPVtkbSx4M119Zm9yKHZhciBXPWZ1bmN0aW9uKEpyLHdpKXtyZXR1cm4gZy5zdHlsZUtleXNbd2ldWzBdPVQwKEpyLGcuc3R5bGVLZXlzW3dpXVswXSl9LGV0PWZ1bmN0aW9uKEpyLHdpKXtyZXR1cm4gZy5zdHlsZUtleXNbd2ldWzFdPWN2KEpyLGcuc3R5bGVLZXlzW3dpXVsxXSl9LGF0PWZ1bmN0aW9uKEpyLHdpKXtXKEpyLHdpKSxldChKcix3aSl9LGx0PWZ1bmN0aW9uKEpyLHdpKXtmb3IodmFyIEtzPTA7S3M8SnIubGVuZ3RoO0tzKyspe3ZhciBrYT1Kci5jaGFyQ29kZUF0KEtzKTtXKGthLHdpKSxldChrYSx3aSl9fSxmdD0yZTksQXQ9ZnVuY3Rpb24oSnIpe3JldHVybi0xMjg8SnImJkpyPDEyOCYmTWF0aC5mbG9vcihKcikhPT1Kcj9mdC0oSnIqMTAyNHwwKTpKcn0sa3Q9MDtrdDxULmxlbmd0aDtrdCsrKXt2YXIgTXQ9VFtrdF0sRHQ9cVtNdF07aWYoRHQhPW51bGwpe3ZhciBqdD10aGlzLnByb3BlcnRpZXNbTXRdLFp0PWp0LnR5cGUsS3Q9anQuZ3JvdXBLZXksenQ9dm9pZCAwO2p0Lmhhc2hPdmVycmlkZSE9bnVsbD96dD1qdC5oYXNoT3ZlcnJpZGUoeSxEdCk6RHQucGZWYWx1ZSE9bnVsbCYmKHp0PUR0LnBmVmFsdWUpO3ZhciBlZT1qdC5lbnVtcz09bnVsbD9EdC52YWx1ZTpudWxsLFZ0PXp0IT1udWxsLGZlPWVlIT1udWxsLGdlPVZ0fHxmZSxuZT1EdC51bml0cztpZihadC5udW1iZXImJmdlJiYhWnQubXVsdGlwbGUpe3ZhciBQZT1WdD96dDplZTthdChBdChQZSksS3QpLCFWdCYmbmUhPW51bGwmJmx0KG5lLEt0KX1lbHNlIGx0KER0LnN0clZhbHVlLEt0KX19Zm9yKHZhciBwZT1bZG0seDNdLGJuPTA7Ym48QS5sZW5ndGg7Ym4rKyl7dmFyIHplPUFbYm5dLFZlPWcuc3R5bGVLZXlzW3plXTtwZVswXT1UMChWZVswXSxwZVswXSkscGVbMV09Y3YoVmVbMV0scGVbMV0pfWcuc3R5bGVLZXk9RjUocGVbMF0scGVbMV0pO3ZhciBFbj1nLnN0eWxlS2V5cztnLmxhYmVsRGltc0tleT1qYihFbi5sYWJlbERpbWVuc2lvbnMpO3ZhciBEbj1EKHksWyJsYWJlbCJdLEVuLmxhYmVsRGltZW5zaW9ucyk7aWYoZy5sYWJlbEtleT1qYihEbiksZy5sYWJlbFN0eWxlS2V5PWpiKEI1KEVuLmNvbW1vbkxhYmVsLERuKSksISQpe3ZhciBLbj1EKHksWyJzb3VyY2UtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cuc291cmNlTGFiZWxLZXk9amIoS24pLGcuc291cmNlTGFiZWxTdHlsZUtleT1qYihCNShFbi5jb21tb25MYWJlbCxLbikpO3ZhciBTbj1EKHksWyJ0YXJnZXQtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cudGFyZ2V0TGFiZWxLZXk9amIoU24pLGcudGFyZ2V0TGFiZWxTdHlsZUtleT1qYihCNShFbi5jb21tb25MYWJlbCxTbikpfWlmKCQpe3ZhciBXbj1nLnN0eWxlS2V5cyxycj1Xbi5ub2RlQm9keSx2cj1Xbi5ub2RlQm9yZGVyLHVyPVduLmJhY2tncm91bmRJbWFnZSx0cj1Xbi5jb21wb3VuZCx3bj1Xbi5waWUsZ3I9W3JyLHZyLHVyLHRyLHduXS5maWx0ZXIoZnVuY3Rpb24oZnIpe3JldHVybiBmciE9bnVsbH0pLnJlZHVjZShCNSxbZG0seDNdKTtnLm5vZGVLZXk9amIoZ3IpLGcuaGFzUGllPXduIT1udWxsJiZ3blswXSE9PWRtJiZ3blsxXSE9PXgzfXJldHVybiBPIT09Zy5zdHlsZUtleX0sZjEuY2xlYXJTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGU7Zy5zdHlsZUN4dEtleT0iIixnLnN0eWxlS2V5cz17fSxnLnN0eWxlS2V5PW51bGwsZy5sYWJlbEtleT1udWxsLGcubGFiZWxTdHlsZUtleT1udWxsLGcuc291cmNlTGFiZWxLZXk9bnVsbCxnLnNvdXJjZUxhYmVsU3R5bGVLZXk9bnVsbCxnLnRhcmdldExhYmVsS2V5PW51bGwsZy50YXJnZXRMYWJlbFN0eWxlS2V5PW51bGwsZy5ub2RlS2V5PW51bGwsZy5oYXNQaWU9bnVsbH0sZjEuYXBwbHlQYXJzZWRQcm9wZXJ0eT1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD1nLEE9eS5fcHJpdmF0ZS5zdHlsZSxELE89eC50eXBlcywkPXgucHJvcGVydGllc1tULm5hbWVdLnR5cGUscT1ULmJ5cGFzcyxTPUFbVC5uYW1lXSxHPVMmJlMuYnlwYXNzLFc9eS5fcHJpdmF0ZSxldD0ibWFwcGluZyIsYXQ9ZnVuY3Rpb24ocnIpe3JldHVybiBycj09bnVsbD9udWxsOnJyLnBmVmFsdWUhPW51bGw/cnIucGZWYWx1ZTpyci52YWx1ZX0sbHQ9ZnVuY3Rpb24oKXt2YXIgcnI9YXQoUyksdnI9YXQoVCk7eC5jaGVja1RyaWdnZXJzKHksVC5uYW1lLHJyLHZyKX07aWYoVCYmVC5uYW1lLnN1YnN0cigwLDMpPT09InBpZSImJlNjKCJUaGUgcGllIHN0eWxlIHByb3BlcnRpZXMgYXJlIGRlcHJlY2F0ZWQuICBDcmVhdGUgY2hhcnRzIHVzaW5nIGJhY2tncm91bmQgaW1hZ2VzIGluc3RlYWQuIiksZy5uYW1lPT09ImN1cnZlLXN0eWxlIiYmeS5pc0VkZ2UoKSYmKGcudmFsdWUhPT0iYmV6aWVyIiYmeS5pc0xvb3AoKXx8Zy52YWx1ZT09PSJoYXlzdGFjayImJih5LnNvdXJjZSgpLmlzUGFyZW50KCl8fHkudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYoVD1nPXRoaXMucGFyc2UoZy5uYW1lLCJiZXppZXIiLHEpKSxULmRlbGV0ZSlyZXR1cm4gQVtULm5hbWVdPXZvaWQgMCxsdCgpLCEwO2lmKFQuZGVsZXRlQnlwYXNzZWQpcmV0dXJuIFM/Uy5ieXBhc3M/KFMuYnlwYXNzZWQ9dm9pZCAwLGx0KCksITApOiExOihsdCgpLCEwKTtpZihULmRlbGV0ZUJ5cGFzcylyZXR1cm4gUz9TLmJ5cGFzcz8oQVtULm5hbWVdPVMuYnlwYXNzZWQsbHQoKSwhMCk6ITE6KGx0KCksITApO3ZhciBmdD1mdW5jdGlvbigpe1NjKCJEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgIit5LmlkKCkrImAgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAiK1QubmFtZSsiYCB3aXRoIGRhdGEgZmllbGQgYCIrVC5maWVsZCsiYCk7IHRyeSBhIGBbIitULmZpZWxkKyJdYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAiK1QuZmllbGQrImAgZGVmaW5lZCIpfTtzd2l0Y2goVC5tYXBwZWQpe2Nhc2UgTy5tYXBEYXRhOntmb3IodmFyIEF0PVQuZmllbGQuc3BsaXQoIi4iKSxrdD1XLmRhdGEsTXQ9MDtNdDxBdC5sZW5ndGgmJmt0O010Kyspe3ZhciBEdD1BdFtNdF07a3Q9a3RbRHRdfWlmKGt0PT1udWxsKXJldHVybiBmdCgpLCExO3ZhciBqdDtpZihYKGt0KSl7dmFyIFp0PVQuZmllbGRNYXgtVC5maWVsZE1pbjtadD09PTA/anQ9MDpqdD0oa3QtVC5maWVsZE1pbikvWnR9ZWxzZSByZXR1cm4gU2MoIkRvIG5vdCB1c2UgY29udGludW91cyBtYXBwZXJzIHdpdGhvdXQgc3BlY2lmeWluZyBudW1lcmljIGRhdGEgKGkuZS4gYCIrVC5maWVsZCsiOiAiK2t0KyJgIGZvciBgIit5LmlkKCkrImAgaXMgbm9uLW51bWVyaWMpIiksITE7aWYoanQ8MD9qdD0wOmp0PjEmJihqdD0xKSwkLmNvbG9yKXt2YXIgS3Q9VC52YWx1ZU1pblswXSx6dD1ULnZhbHVlTWF4WzBdLGVlPVQudmFsdWVNaW5bMV0sVnQ9VC52YWx1ZU1heFsxXSxmZT1ULnZhbHVlTWluWzJdLGdlPVQudmFsdWVNYXhbMl0sbmU9VC52YWx1ZU1pblszXT09bnVsbD8xOlQudmFsdWVNaW5bM10sUGU9VC52YWx1ZU1heFszXT09bnVsbD8xOlQudmFsdWVNYXhbM10scGU9W01hdGgucm91bmQoS3QrKHp0LUt0KSpqdCksTWF0aC5yb3VuZChlZSsoVnQtZWUpKmp0KSxNYXRoLnJvdW5kKGZlKyhnZS1mZSkqanQpLE1hdGgucm91bmQobmUrKFBlLW5lKSpqdCldO0Q9e2J5cGFzczpULmJ5cGFzcyxuYW1lOlQubmFtZSx2YWx1ZTpwZSxzdHJWYWx1ZToicmdiKCIrcGVbMF0rIiwgIitwZVsxXSsiLCAiK3BlWzJdKyIpIn19ZWxzZSBpZigkLm51bWJlcil7dmFyIGJuPVQudmFsdWVNaW4rKFQudmFsdWVNYXgtVC52YWx1ZU1pbikqanQ7RD10aGlzLnBhcnNlKFQubmFtZSxibixULmJ5cGFzcyxldCl9ZWxzZSByZXR1cm4hMTtpZighRClyZXR1cm4gZnQoKSwhMTtELm1hcHBpbmc9VCxUPUQ7YnJlYWt9Y2FzZSBPLmRhdGE6e2Zvcih2YXIgemU9VC5maWVsZC5zcGxpdCgiLiIpLFZlPVcuZGF0YSxFbj0wO0VuPHplLmxlbmd0aCYmVmU7RW4rKyl7dmFyIERuPXplW0VuXTtWZT1WZVtEbl19aWYoVmUhPW51bGwmJihEPXRoaXMucGFyc2UoVC5uYW1lLFZlLFQuYnlwYXNzLGV0KSksIUQpcmV0dXJuIGZ0KCksITE7RC5tYXBwaW5nPVQsVD1EO2JyZWFrfWNhc2UgTy5mbjp7dmFyIEtuPVQudmFsdWUsU249VC5mblZhbHVlIT1udWxsP1QuZm5WYWx1ZTpLbih5KTtpZihULnByZXZGblZhbHVlPVNuLFNuPT1udWxsKXJldHVybiBTYygiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gbnVsbCAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgbnVsbCkiKSwhMTtpZihEPXRoaXMucGFyc2UoVC5uYW1lLFNuLFQuYnlwYXNzLGV0KSwhRClyZXR1cm4gU2MoIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIGludmFsaWQgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdHlwZSAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgaW52YWxpZCkiKSwhMTtELm1hcHBpbmc9JGIoVCksVD1EO2JyZWFrfWNhc2Ugdm9pZCAwOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuIHE/KEc/VC5ieXBhc3NlZD1TLmJ5cGFzc2VkOlQuYnlwYXNzZWQ9UyxBW1QubmFtZV09VCk6Rz9TLmJ5cGFzc2VkPVQ6QVtULm5hbWVdPVQsbHQoKSwhMH0sZjEuY2xlYW5FbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXt2YXIgVD15W3hdO2lmKHRoaXMuY2xlYXJTdHlsZUhpbnRzKFQpLFQuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksVC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSwhZylULl9wcml2YXRlLnN0eWxlPXt9O2Vsc2UgZm9yKHZhciBBPVQuX3ByaXZhdGUuc3R5bGUsRD1PYmplY3Qua2V5cyhBKSxPPTA7TzxELmxlbmd0aDtPKyspe3ZhciAkPURbT10scT1BWyRdO3EhPW51bGwmJihxLmJ5cGFzcz9xLmJ5cGFzc2VkPW51bGw6QVskXT1udWxsKX19fSxmMS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9wcml2YXRlLmN5LGc9eS5tdXRhYmxlRWxlbWVudHMoKTtnLnVwZGF0ZVN0eWxlKCl9LGYxLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXkuX3ByaXZhdGUsQT15LnBzdHlsZSgidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLnZhbHVlLEQ9eS5wc3R5bGUoInRyYW5zaXRpb24tZHVyYXRpb24iKS5wZlZhbHVlLE89eS5wc3R5bGUoInRyYW5zaXRpb24tZGVsYXkiKS5wZlZhbHVlO2lmKEEubGVuZ3RoPjAmJkQ+MCl7Zm9yKHZhciAkPXt9LHE9ITEsUz0wO1M8QS5sZW5ndGg7UysrKXt2YXIgRz1BW1NdLFc9eS5wc3R5bGUoRyksZXQ9Z1tHXTtpZihldCl7dmFyIGF0PWV0LnByZXYsbHQ9YXQsZnQ9ZXQubmV4dCE9bnVsbD9ldC5uZXh0OlcsQXQ9ITEsa3Q9dm9pZCAwLE10PTFlLTY7bHQmJihYKGx0LnBmVmFsdWUpJiZYKGZ0LnBmVmFsdWUpPyhBdD1mdC5wZlZhbHVlLWx0LnBmVmFsdWUsa3Q9bHQucGZWYWx1ZStNdCpBdCk6WChsdC52YWx1ZSkmJlgoZnQudmFsdWUpPyhBdD1mdC52YWx1ZS1sdC52YWx1ZSxrdD1sdC52YWx1ZStNdCpBdCk6ZHQobHQudmFsdWUpJiZkdChmdC52YWx1ZSkmJihBdD1sdC52YWx1ZVswXSE9PWZ0LnZhbHVlWzBdfHxsdC52YWx1ZVsxXSE9PWZ0LnZhbHVlWzFdfHxsdC52YWx1ZVsyXSE9PWZ0LnZhbHVlWzJdLGt0PWx0LnN0clZhbHVlKSxBdCYmKCRbR109ZnQuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh5LEcsa3QpLHE9ITApKX19aWYoIXEpcmV0dXJuO1QudHJhbnNpdGlvbmluZz0hMCxuZXcgSzUoZnVuY3Rpb24oRHQpe08+MD95LmRlbGF5QW5pbWF0aW9uKE8pLnBsYXkoKS5wcm9taXNlKCkudGhlbihEdCk6RHQoKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geS5hbmltYXRpb24oe3N0eWxlOiQsZHVyYXRpb246RCxlYXNpbmc6eS5wc3R5bGUoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIikudmFsdWUscXVldWU6ITF9KS5wbGF5KCkucHJvbWlzZSgpfSkudGhlbihmdW5jdGlvbigpe3gucmVtb3ZlQnlwYXNzZXMoeSxBKSx5LmVtaXRBbmROb3RpZnkoInN0eWxlIiksVC50cmFuc2l0aW9uaW5nPSExfSl9ZWxzZSBULnRyYW5zaXRpb25pbmcmJih0aGlzLnJlbW92ZUJ5cGFzc2VzKHksQSkseS5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLFQudHJhbnNpdGlvbmluZz0hMSl9LGYxLmNoZWNrVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxULEEsRCl7dmFyIE89dGhpcy5wcm9wZXJ0aWVzW2ddLCQ9QShPKTskIT1udWxsJiYkKHgsVCkmJkQoTyl9LGYxLmNoZWNrWk9yZGVyVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT10aGlzO3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oRCl7cmV0dXJuIEQudHJpZ2dlcnNaT3JkZXJ9LGZ1bmN0aW9uKCl7QS5fcHJpdmF0ZS5jeS5ub3RpZnkoInpvcmRlciIseSl9KX0sZjEuY2hlY2tCb3VuZHNUcmlnZ2VyPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oQSl7cmV0dXJuIEEudHJpZ2dlcnNCb3VuZHN9LGZ1bmN0aW9uKEEpe3kuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkseS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxBLnRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnMmJihnPT09ImN1cnZlLXN0eWxlIiYmKHg9PT0iYmV6aWVyInx8VD09PSJiZXppZXIiKXx8Zz09PSJkaXNwbGF5IiYmKHg9PT0ibm9uZSJ8fFQ9PT0ibm9uZSIpKSYmeS5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihEKXtELmlzQnVuZGxlZEJlemllcigpJiZELmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSl9KX0sZjEuY2hlY2tUcmlnZ2Vycz1mdW5jdGlvbih5LGcseCxUKXt5LmRpcnR5U3R5bGVDYWNoZSgpLHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKHksZyx4LFQpLHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKHksZyx4LFQpfTt2YXIgTms9e307TmsuYXBwbHlCeXBhc3M9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcyxEPVtdLE89ITA7aWYoZz09PSIqInx8Zz09PSIqKiIpe2lmKHghPT12b2lkIDApZm9yKHZhciAkPTA7JDxBLnByb3BlcnRpZXMubGVuZ3RoOyQrKyl7dmFyIHE9QS5wcm9wZXJ0aWVzWyRdLFM9cS5uYW1lLEc9dGhpcy5wYXJzZShTLHgsITApO0cmJkQucHVzaChHKX19ZWxzZSBpZihtdChnKSl7dmFyIFc9dGhpcy5wYXJzZShnLHgsITApO1cmJkQucHVzaChXKX1lbHNlIGlmKGh0KGcpKXt2YXIgZXQ9ZztUPXg7Zm9yKHZhciBhdD1PYmplY3Qua2V5cyhldCksbHQ9MDtsdDxhdC5sZW5ndGg7bHQrKyl7dmFyIGZ0PWF0W2x0XSxBdD1ldFtmdF07aWYoQXQ9PT12b2lkIDAmJihBdD1ldFtNZShmdCldKSxBdCE9PXZvaWQgMCl7dmFyIGt0PXRoaXMucGFyc2UoZnQsQXQsITApO2t0JiZELnB1c2goa3QpfX19ZWxzZSByZXR1cm4hMTtpZihELmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBNdD0hMSxEdD0wO0R0PHkubGVuZ3RoO0R0Kyspe2Zvcih2YXIganQ9eVtEdF0sWnQ9e30sS3Q9dm9pZCAwLHp0PTA7enQ8RC5sZW5ndGg7enQrKyl7dmFyIGVlPURbenRdO2lmKFQpe3ZhciBWdD1qdC5wc3R5bGUoZWUubmFtZSk7S3Q9WnRbZWUubmFtZV09e3ByZXY6VnR9fU10PXRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShqdCwkYihlZSkpfHxNdCxUJiYoS3QubmV4dD1qdC5wc3R5bGUoZWUubmFtZSkpfU10JiZ0aGlzLnVwZGF0ZVN0eWxlSGludHMoanQpLFQmJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoanQsWnQsTyl9cmV0dXJuIE10fSxOay5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih5LGcseCl7Zz1wbihnKTtmb3IodmFyIFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEE9eVtUXSxEPUEuX3ByaXZhdGUuc3R5bGVbZ10sTz10aGlzLnByb3BlcnRpZXNbZ10udHlwZSwkPU8uY29sb3IscT1PLm11dGlwbGUsUz1EP0QucGZWYWx1ZSE9bnVsbD9ELnBmVmFsdWU6RC52YWx1ZTpudWxsOyFEfHwhRC5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhBLGcseCk6KEQudmFsdWU9eCxELnBmVmFsdWUhPW51bGwmJihELnBmVmFsdWU9eCksJD9ELnN0clZhbHVlPSJyZ2IoIit4LmpvaW4oIiwiKSsiKSI6cT9ELnN0clZhbHVlPXguam9pbigiICIpOkQuc3RyVmFsdWU9IiIreCx0aGlzLnVwZGF0ZVN0eWxlSGludHMoQSkpLHRoaXMuY2hlY2tUcmlnZ2VycyhBLGcsUyx4KX19LE5rLnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXMoeSx0aGlzLnByb3BlcnR5TmFtZXMsZyl9LE5rLnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9ITAsQT0wO0E8eS5sZW5ndGg7QSsrKXtmb3IodmFyIEQ9eVtBXSxPPXt9LCQ9MDskPGcubGVuZ3RoOyQrKyl7dmFyIHE9Z1skXSxTPXRoaXMucHJvcGVydGllc1txXSxHPUQucHN0eWxlKFMubmFtZSk7aWYoISghR3x8IUcuYnlwYXNzKSl7dmFyIFc9IiIsZXQ9dGhpcy5wYXJzZShxLFcsITApLGF0PU9bUy5uYW1lXT17cHJldjpHfTt0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoRCxldCksYXQubmV4dD1ELnBzdHlsZShTLm5hbWUpfX10aGlzLnVwZGF0ZVN0eWxlSGludHMoRCkseCYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhELE8sVCl9fTt2YXIgSEw9e307SEwuZ2V0RW1TaXplSW5QaXhlbHM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbnRhaW5lckNzcygiZm9udC1zaXplIik7cmV0dXJuIHkhPW51bGw/cGFyc2VGbG9hdCh5KToxfSxITC5jb250YWluZXJDc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PWcuY29udGFpbmVyKCk7aWYoUiYmeCYmUi5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBSLmdldENvbXB1dGVkU3R5bGUoeCkuZ2V0UHJvcGVydHlWYWx1ZSh5KX07dmFyIEhiPXt9O0hiLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXtyZXR1cm4gZz90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LGcsITApOnRoaXMuZ2V0UmF3U3R5bGUoeSwhMCl9LEhiLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztpZih5PXlbMF0seSl7Zm9yKHZhciBUPXt9LEE9MDtBPHgucHJvcGVydGllcy5sZW5ndGg7QSsrKXt2YXIgRD14LnByb3BlcnRpZXNbQV0sTz14LmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LEQubmFtZSxnKTtPIT1udWxsJiYoVFtELm5hbWVdPU8sVFtNZShELm5hbWUpXT1PKX1yZXR1cm4gVH19LEhiLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT15LnBzdHlsZShnKVt4XVtUXTtyZXR1cm4gQT8/eS5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGcpW3hdWzBdfSxIYi5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXRoaXM7aWYoeT15WzBdLHkpe3ZhciBBPVQucHJvcGVydGllc1tnXTtBLmFsaWFzJiYoQT1BLnBvaW50c1RvKTt2YXIgRD1BLnR5cGUsTz15LnBzdHlsZShBLm5hbWUpO2lmKE8pe3ZhciAkPU8udmFsdWUscT1PLnVuaXRzLFM9Ty5zdHJWYWx1ZTtpZih4JiZELm51bWJlciYmJCE9bnVsbCYmWCgkKSl7dmFyIEc9eS5jeSgpLnpvb20oKSxXPWZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQqR30sZXQ9ZnVuY3Rpb24oQXQsa3Qpe3JldHVybiBXKEF0KStrdH0sYXQ9ZHQoJCksbHQ9YXQ/cS5ldmVyeShmdW5jdGlvbihmdCl7cmV0dXJuIGZ0IT1udWxsfSk6cSE9bnVsbDtyZXR1cm4gbHQ/YXQ/JC5tYXAoZnVuY3Rpb24oZnQsQXQpe3JldHVybiBldChmdCxxW0F0XSl9KS5qb2luKCIgIik6ZXQoJCxxKTphdD8kLm1hcChmdW5jdGlvbihmdCl7cmV0dXJuIG10KGZ0KT9mdDoiIitXKGZ0KX0pLmpvaW4oIiAiKToiIitXKCQpfWVsc2UgaWYoUyE9bnVsbClyZXR1cm4gU31yZXR1cm4gbnVsbH19LEhiLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9e30sVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgQT1nW1RdLEQ9QS5uYW1lLE89eS5wc3R5bGUoRCk7TyE9PXZvaWQgMCYmKGh0KE8pP089dGhpcy5wYXJzZShELE8uc3RyVmFsdWUpOk89dGhpcy5wYXJzZShELE8pKSxPJiYoeFtEXT1PKX1yZXR1cm4geH0sSGIuZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1bXSxUPXksQT1nLnByb3BlcnRpZXM7aWYoVClmb3IodmFyIEQ9T2JqZWN0LmtleXMoVCksTz0wO088RC5sZW5ndGg7TysrKXt2YXIgJD1EW09dLHE9VFskXSxTPUFbJF18fEFbcG4oJCldLEc9dGhpcy5wYXJzZShTLm5hbWUscSk7RyYmeC5wdXNoKEcpfXJldHVybiB4fSxIYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXguc2xpY2UoKSxBLEQsTywkLHEsUztmb3IocT0wO3E8Zy5sZW5ndGg7cSsrKWlmKEE9Z1txXSxEPXkucHN0eWxlKEEsITEpLEQhPW51bGwpaWYoRC5wZlZhbHVlIT1udWxsKVRbMF09VDAoJCxUWzBdKSxUWzFdPWN2KCQsVFsxXSk7ZWxzZSBmb3IoTz1ELnN0clZhbHVlLFM9MDtTPE8ubGVuZ3RoO1MrKykkPU8uY2hhckNvZGVBdChTKSxUWzBdPVQwKCQsVFswXSksVFsxXT1jdigkLFRbMV0pO3JldHVybiBUfSxIYi5nZXRQcm9wZXJ0aWVzSGFzaD1IYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7dmFyIHU5PXt9O3U5LmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxBPVQuc2VsZWN0b3IsRD1ULnN0eWxlfHxULmNzcyxPPU9iamVjdC5rZXlzKEQpO2cuc2VsZWN0b3IoQSk7Zm9yKHZhciAkPTA7JDxPLmxlbmd0aDskKyspe3ZhciBxPU9bJF0sUz1EW3FdO2cuY3NzKHEsUyl9fXJldHVybiBnfSx1OS5mcm9tSnNvbj1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tSnNvbih5KSxnfSx1OS5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PVtdLGc9dGhpcy5kZWZhdWx0TGVuZ3RoO2c8dGhpcy5sZW5ndGg7ZysrKXtmb3IodmFyIHg9dGhpc1tnXSxUPXguc2VsZWN0b3IsQT14LnByb3BlcnRpZXMsRD17fSxPPTA7TzxBLmxlbmd0aDtPKyspe3ZhciAkPUFbT107RFskLm5hbWVdPSQuc3RyVmFsdWV9eS5wdXNoKHtzZWxlY3RvcjpUP1QudG9TdHJpbmcoKToiY29yZSIsc3R5bGU6RH0pfXJldHVybiB5fTt2YXIgR0w9e307R0wuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9dGhpcyxUPSIiK3ksQSxELE87VD1ULnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uICQoKXtULmxlbmd0aD5BLmxlbmd0aD9UPVQuc3Vic3RyKEEubGVuZ3RoKTpUPSIifWZ1bmN0aW9uIHEoKXtELmxlbmd0aD5PLmxlbmd0aD9EPUQuc3Vic3RyKE8ubGVuZ3RoKTpEPSIifWZvcig7Oyl7dmFyIFM9VC5tYXRjaCgvXlxzKiQvKTtpZihTKWJyZWFrO3ZhciBHPVQubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIUcpe1NjKCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK1QpO2JyZWFrfUE9R1swXTt2YXIgVz1HWzFdO2lmKFchPT0iY29yZSIpe3ZhciBldD1uZXcgeW0oVyk7aWYoZXQuaW52YWxpZCl7U2MoIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrVyksJCgpO2NvbnRpbnVlfX12YXIgYXQ9R1syXSxsdD0hMTtEPWF0O2Zvcih2YXIgZnQ9W107Oyl7dmFyIEF0PUQubWF0Y2goL15ccyokLyk7aWYoQXQpYnJlYWs7dmFyIGt0PUQubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZigha3Qpe1NjKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrYXQpLGx0PSEwO2JyZWFrfU89a3RbMF07dmFyIE10PWt0WzFdLER0PWt0WzJdLGp0PWcucHJvcGVydGllc1tNdF07aWYoIWp0KXtTYygiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitPKSxxKCk7Y29udGludWV9dmFyIFp0PXgucGFyc2UoTXQsRHQpO2lmKCFadCl7U2MoIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrTykscSgpO2NvbnRpbnVlfWZ0LnB1c2goe25hbWU6TXQsdmFsOkR0fSkscSgpfWlmKGx0KXskKCk7YnJlYWt9eC5zZWxlY3RvcihXKTtmb3IodmFyIEt0PTA7S3Q8ZnQubGVuZ3RoO0t0Kyspe3ZhciB6dD1mdFtLdF07eC5jc3MoenQubmFtZSx6dC52YWwpfSQoKX1yZXR1cm4geH0sR0wuZnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tU3RyaW5nKHkpLGd9O3ZhciAkZj17fTsoZnVuY3Rpb24oKXt2YXIgeT1LZSxnPV9lLHg9cmUsVD1pZSxBPU9lLEQ9ZnVuY3Rpb24oZ3Ipe3JldHVybiJeIitncisiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sTz1mdW5jdGlvbihncil7dmFyIGZyPXkrInxcXHcrfCIrZysifCIreCsifCIrVCsifCIrQTtyZXR1cm4iXiIrZ3IrIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIreSsiKVxccypcXCxcXHMqKCIreSsiKVxccyosXFxzKigiK2ZyKyIpXFxzKlxcLFxccyooIitmcisiKVxcKSQifSwkPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdOyRmLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIl0sbXVsdGlwbGU6ITB9LGJnQ2xpcDp7ZW51bXM6WyJub25lIiwibm9kZSJdLG11bHRpcGxlOiEwfSxiZ0NvbnRhaW5tZW50OntlbnVtczpbImluc2lkZSIsIm92ZXIiXSxtdWx0aXBsZTohMH0sY29sb3I6e2NvbG9yOiEwfSxjb2xvcnM6e2NvbG9yOiEwLG11bHRpcGxlOiEwfSxmaWxsOntlbnVtczpbInNvbGlkIiwibGluZWFyLWdyYWRpZW50IiwicmFkaWFsLWdyYWRpZW50Il19LGJvb2w6e2VudW1zOlsieWVzIiwibm8iXX0sYm9vbHM6e2VudW1zOlsieWVzIiwibm8iXSxtdWx0aXBsZTohMH0sbGluZVN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIl19LGxpbmVDYXA6e2VudW1zOlsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSJdfSxmb250RmFtaWx5OntyZWdleDonXihbXFx3LSBcXCJdKyg/OlxccyosXFxzKltcXHctIFxcIl0rKSopJCd9LGZvbnRTdHlsZTp7ZW51bXM6WyJpdGFsaWMiLCJub3JtYWwiLCJvYmxpcXVlIl19LGZvbnRXZWlnaHQ6e2VudW1zOlsibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI4MDAiLCI5MDAiLDEwMCwyMDAsMzAwLDQwMCw1MDAsNjAwLDcwMCw4MDAsOTAwXX0sdGV4dERlY29yYXRpb246e2VudW1zOlsibm9uZSIsInVuZGVybGluZSIsIm92ZXJsaW5lIiwibGluZS10aHJvdWdoIl19LHRleHRUcmFuc2Zvcm06e2VudW1zOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdfSx0ZXh0V3JhcDp7ZW51bXM6WyJub25lIiwid3JhcCIsImVsbGlwc2lzIl19LHRleHRPdmVyZmxvd1dyYXA6e2VudW1zOlsid2hpdGVzcGFjZSIsImFueXdoZXJlIl19LHRleHRCYWNrZ3JvdW5kU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiXX0sbm9kZVNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiY3V0cmVjdGFuZ2xlIiwiY3V0LXJlY3RhbmdsZSIsImJvdHRvbXJvdW5kcmVjdGFuZ2xlIiwiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIsImJhcnJlbCIsImVsbGlwc2UiLCJ0cmlhbmdsZSIsInJvdW5kLXRyaWFuZ2xlIiwic3F1YXJlIiwicGVudGFnb24iLCJyb3VuZC1wZW50YWdvbiIsImhleGFnb24iLCJyb3VuZC1oZXhhZ29uIiwiY29uY2F2ZWhleGFnb24iLCJjb25jYXZlLWhleGFnb24iLCJoZXB0YWdvbiIsInJvdW5kLWhlcHRhZ29uIiwib2N0YWdvbiIsInJvdW5kLW9jdGFnb24iLCJ0YWciLCJyb3VuZC10YWciLCJzdGFyIiwiZGlhbW9uZCIsInJvdW5kLWRpYW1vbmQiLCJ2ZWUiLCJyaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6RCgiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OkQoImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpEKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6TygibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpPKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpmdW5jdGlvbihncixmcil7c3dpdGNoKGdyLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBmclswXSE9PSJkZWciJiZmclswXSE9PSJyYWQiJiZmclsxXSE9PSJkZWciJiZmclsxXSE9PSJyYWQiO2Nhc2UgMTpyZXR1cm4gbXQoZ3JbMF0pfHxmclswXT09PSJkZWcifHxmclswXT09PSJyYWQiO2RlZmF1bHQ6cmV0dXJuITF9fX0sZWFzaW5nOntyZWdleGVzOlsiXihzcHJpbmcpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccypcXCkkIiwiXihjdWJpYy1iZXppZXIpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccyosXFxzKigiK3krIilcXHMqLFxccyooIit5KyIpXFxzKlxcKSQiXSxlbnVtczpbImxpbmVhciIsImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImVhc2UtaW4tc2luZSIsImVhc2Utb3V0LXNpbmUiLCJlYXNlLWluLW91dC1zaW5lIiwiZWFzZS1pbi1xdWFkIiwiZWFzZS1vdXQtcXVhZCIsImVhc2UtaW4tb3V0LXF1YWQiLCJlYXNlLWluLWN1YmljIiwiZWFzZS1vdXQtY3ViaWMiLCJlYXNlLWluLW91dC1jdWJpYyIsImVhc2UtaW4tcXVhcnQiLCJlYXNlLW91dC1xdWFydCIsImVhc2UtaW4tb3V0LXF1YXJ0IiwiZWFzZS1pbi1xdWludCIsImVhc2Utb3V0LXF1aW50IiwiZWFzZS1pbi1vdXQtcXVpbnQiLCJlYXNlLWluLWV4cG8iLCJlYXNlLW91dC1leHBvIiwiZWFzZS1pbi1vdXQtZXhwbyIsImVhc2UtaW4tY2lyYyIsImVhc2Utb3V0LWNpcmMiLCJlYXNlLWluLW91dC1jaXJjIl19LGdyYWRpZW50RGlyZWN0aW9uOntlbnVtczpbInRvLWJvdHRvbSIsInRvLXRvcCIsInRvLWxlZnQiLCJ0by1yaWdodCIsInRvLWJvdHRvbS1yaWdodCIsInRvLWJvdHRvbS1sZWZ0IiwidG8tdG9wLXJpZ2h0IiwidG8tdG9wLWxlZnQiLCJ0by1yaWdodC1ib3R0b20iLCJ0by1sZWZ0LWJvdHRvbSIsInRvLXJpZ2h0LXRvcCIsInRvLWxlZnQtdG9wIl19LGJvdW5kc0V4cGFuc2lvbjp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLG1pbjowLHZhbGlkYXRlOmZ1bmN0aW9uKGdyKXt2YXIgZnI9Z3IubGVuZ3RoO3JldHVybiBmcj09PTF8fGZyPT09Mnx8ZnI9PT00fX19O3ZhciBxPXt6ZXJvTm9uWmVybzpmdW5jdGlvbihncixmcil7cmV0dXJuKGdyPT1udWxsfHxmcj09bnVsbCkmJmdyIT09ZnJ8fGdyPT0wJiZmciE9MD8hMDpnciE9MCYmZnI9PTB9LGFueTpmdW5jdGlvbihncixmcil7cmV0dXJuIGdyIT1mcn0sZW1wdHlOb25FbXB0eTpmdW5jdGlvbihncixmcil7dmFyIEpyPVooZ3IpLHdpPVooZnIpO3JldHVybiBKciYmIXdpfHwhSnImJndpfX0sUz0kZi50eXBlcyxHPVt7bmFtZToibGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55LHRyaWdnZXJzWk9yZGVyOnEuZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxXPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOlMudGV4dCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOlMudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fV0sZXQ9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxhdD1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOlMuZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6Uy5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpTLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6Uy50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOlMudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6Uy50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOlMucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxsdD1be25hbWU6InRleHQtdmFsaWduIix0eXBlOlMudmFsaWduLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6Uy5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOlMuYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6Uy50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOlMuanVzdGlmaWNhdGlvbn1dLGZ0PVt7bmFtZToiZXZlbnRzIix0eXBlOlMuYm9vbH0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOlMuYm9vbH1dLEF0PVt7bmFtZToiZGlzcGxheSIsdHlwZTpTLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6cS5hbnksdHJpZ2dlcnNCb3VuZHM6cS5hbnksdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVyczohMH0se25hbWU6InZpc2liaWxpdHkiLHR5cGU6Uy52aXNpYmlsaXR5LHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToib3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNaT3JkZXI6cS56ZXJvTm9uWmVyb30se25hbWU6InRleHQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJtaW4tem9vbWVkLWZvbnQtc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJ6LWNvbXBvdW5kLWRlcHRoIix0eXBlOlMuekNvbXBvdW5kRGVwdGgsdHJpZ2dlcnNaT3JkZXI6cS5hbnl9LHtuYW1lOiJ6LWluZGV4LWNvbXBhcmUiLHR5cGU6Uy56SW5kZXhDb21wYXJlLHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToiei1pbmRleCIsdHlwZTpTLm5vbk5lZ2F0aXZlSW50LHRyaWdnZXJzWk9yZGVyOnEuYW55fV0sa3Q9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpTLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX1dLE10PVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOlMub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fV0sRHQ9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOlMucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOlMudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6Uy50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6Uy5lYXNpbmd9XSxqdD1mdW5jdGlvbihncixmcil7cmV0dXJuIGZyLnZhbHVlPT09ImxhYmVsIj8tZ3IucG9vbEluZGV4KCk6ZnIucGZWYWx1ZX0sWnQ9W3tuYW1lOiJoZWlnaHQiLHR5cGU6Uy5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSxoYXNoT3ZlcnJpZGU6anR9LHtuYW1lOiJ3aWR0aCIsdHlwZTpTLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55LGhhc2hPdmVycmlkZTpqdH0se25hbWU6InNoYXBlIix0eXBlOlMubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6Uy5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6Uy5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOlMuZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6Uy5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6Uy5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxLdD1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpTLmJvcmRlclN0eWxlfV0senQ9W3tuYW1lOiJiYWNrZ3JvdW5kLWltYWdlIix0eXBlOlMudXJsc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLHR5cGU6Uy5iZ0Nyb3NzT3JpZ2lufSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50Iix0eXBlOlMuYmdDb250YWlubWVudH0se25hbWU6ImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIix0eXBlOlMuYm9vbHN9LHtuYW1lOiJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teSIsdHlwZTpTLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byIsdHlwZTpTLmJnUmVsYXRpdmVUb30se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIix0eXBlOlMuYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1yZXBlYXQiLHR5cGU6Uy5iZ1JlcGVhdH0se25hbWU6ImJhY2tncm91bmQtZml0Iix0eXBlOlMuYmdGaXR9LHtuYW1lOiJiYWNrZ3JvdW5kLWNsaXAiLHR5cGU6Uy5iZ0NsaXB9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoIix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0Iix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXkiLHR5cGU6Uy5iZ1Bvc31dLGVlPVt7bmFtZToicG9zaXRpb24iLHR5cGU6Uy5wb3NpdGlvbix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIix0eXBlOlMuY29tcG91bmRJbmNsdWRlTGFiZWxzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLWxlZnQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtcmlnaHQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLWhlaWdodCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtdG9wIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy1ib3R0b20iLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fV0sVnQ9W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOlMubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOlMubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpTLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOlMubnVtYmVyfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOlMuY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRheGktdHVybiIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGF4aS10dXJuLW1pbi1kaXN0YW5jZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXhpLWRpcmVjdGlvbiIsdHlwZTpTLmF4aXNEaXJlY3Rpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJlZGdlLWRpc3RhbmNlcyIsdHlwZTpTLmVkZ2VEaXN0YW5jZXMsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJhcnJvdy1zY2FsZSIsdHlwZTpTLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibG9vcC1kaXJlY3Rpb24iLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imxvb3Atc3dlZXAiLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxmZT1be25hbWU6Imdob3N0Iix0eXBlOlMuYm9vbCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9XSxnZT1be25hbWU6InNlbGVjdGlvbi1ib3gtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InNlbGVjdGlvbi1ib3gtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiLHR5cGU6Uy5zaXplfSx7bmFtZToiYWN0aXZlLWJnLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhY3RpdmUtYmctb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJhY3RpdmUtYmctc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn1dLG5lPVtdOyRmLnBpZUJhY2tncm91bmROPTE2LG5lLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgUGU9MTtQZTw9JGYucGllQmFja2dyb3VuZE47UGUrKyluZS5wdXNoKHtuYW1lOiJwaWUtIitQZSsiLWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0pLG5lLnB1c2goe25hbWU6InBpZS0iK1BlKyItYmFja2dyb3VuZC1zaXplIix0eXBlOlMucGVyY2VudH0pLG5lLnB1c2goe25hbWU6InBpZS0iK1BlKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0pO3ZhciBwZT1bXSxibj0kZi5hcnJvd1ByZWZpeGVzPVsic291cmNlIiwibWlkLXNvdXJjZSIsInRhcmdldCIsIm1pZC10YXJnZXQiXTtbe25hbWU6ImFycm93LXNoYXBlIix0eXBlOlMuYXJyb3dTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImFycm93LWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhcnJvdy1maWxsIix0eXBlOlMuYXJyb3dGaWxsfV0uZm9yRWFjaChmdW5jdGlvbih3bil7Ym4uZm9yRWFjaChmdW5jdGlvbihncil7dmFyIGZyPWdyKyItIit3bi5uYW1lLEpyPXduLnR5cGUsd2k9d24udHJpZ2dlcnNCb3VuZHM7cGUucHVzaCh7bmFtZTpmcix0eXBlOkpyLHRyaWdnZXJzQm91bmRzOndpfSl9KX0se30pO3ZhciB6ZT0kZi5wcm9wZXJ0aWVzPVtdLmNvbmNhdChmdCxEdCxBdCxrdCxNdCxmZSxsdCxhdCxHLFcsZXQsWnQsS3QsenQsbmUsZWUsVnQscGUsZ2UpLFZlPSRmLnByb3BlcnR5R3JvdXBzPXtiZWhhdmlvcjpmdCx0cmFuc2l0aW9uOkR0LHZpc2liaWxpdHk6QXQsb3ZlcmxheTprdCx1bmRlcmxheTpNdCxnaG9zdDpmZSxjb21tb25MYWJlbDpsdCxsYWJlbERpbWVuc2lvbnM6YXQsbWFpbkxhYmVsOkcsc291cmNlTGFiZWw6Vyx0YXJnZXRMYWJlbDpldCxub2RlQm9keTpadCxub2RlQm9yZGVyOkt0LGJhY2tncm91bmRJbWFnZTp6dCxwaWU6bmUsY29tcG91bmQ6ZWUsZWRnZUxpbmU6VnQsZWRnZUFycm93OnBlLGNvcmU6Z2V9LEVuPSRmLnByb3BlcnR5R3JvdXBOYW1lcz17fSxEbj0kZi5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhWZSk7RG4uZm9yRWFjaChmdW5jdGlvbih3bil7RW5bd25dPVZlW3duXS5tYXAoZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5uYW1lfSksVmVbd25dLmZvckVhY2goZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5ncm91cEtleT13bn0pfSk7dmFyIEtuPSRmLmFsaWFzZXM9W3tuYW1lOiJjb250ZW50Iixwb2ludHNUbzoibGFiZWwifSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZSIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0Iixwb2ludHNUbzoiY29udHJvbC1wb2ludC13ZWlnaHRzIn0se25hbWU6ImVkZ2UtdGV4dC1yb3RhdGlvbiIscG9pbnRzVG86InRleHQtcm90YXRpb24ifSx7bmFtZToicGFkZGluZy1sZWZ0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXJpZ2h0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXRvcCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1ib3R0b20iLHBvaW50c1RvOiJwYWRkaW5nIn1dOyRmLnByb3BlcnR5TmFtZXM9emUubWFwKGZ1bmN0aW9uKHduKXtyZXR1cm4gd24ubmFtZX0pO2Zvcih2YXIgU249MDtTbjx6ZS5sZW5ndGg7U24rKyl7dmFyIFduPXplW1NuXTt6ZVtXbi5uYW1lXT1Xbn1mb3IodmFyIHJyPTA7cnI8S24ubGVuZ3RoO3JyKyspe3ZhciB2cj1Lbltycl0sdXI9emVbdnIucG9pbnRzVG9dLHRyPXtuYW1lOnZyLm5hbWUsYWxpYXM6ITAscG9pbnRzVG86dXJ9O3plLnB1c2godHIpLHplW3ZyLm5hbWVdPXRyfX0pKCksJGYuZ2V0RGVmYXVsdFByb3BlcnR5PWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKClbeV19LCRmLmdldERlZmF1bHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZTtpZih5LmRlZmF1bHRQcm9wZXJ0aWVzIT1udWxsKXJldHVybiB5LmRlZmF1bHRQcm9wZXJ0aWVzO2Zvcih2YXIgZz1tZSh7InNlbGVjdGlvbi1ib3gtY29sb3IiOiIjZGRkIiwic2VsZWN0aW9uLWJveC1vcGFjaXR5IjouNjUsInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIjoiI2FhYSIsInNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoIjoxLCJhY3RpdmUtYmctY29sb3IiOiJibGFjayIsImFjdGl2ZS1iZy1vcGFjaXR5IjouMTUsImFjdGl2ZS1iZy1zaXplIjozMCwib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIjoiIzAwMCIsIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IjouMTI1LGV2ZW50czoieWVzIiwidGV4dC1ldmVudHMiOiJubyIsInRleHQtdmFsaWduIjoidG9wIiwidGV4dC1oYWxpZ24iOiJjZW50ZXIiLCJ0ZXh0LWp1c3RpZmljYXRpb24iOiJhdXRvIiwibGluZS1oZWlnaHQiOjEsY29sb3I6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtY29sb3IiOiIjMDAwIiwidGV4dC1vdXRsaW5lLXdpZHRoIjowLCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSI6MSwidGV4dC1vcGFjaXR5IjoxLCJ0ZXh0LWRlY29yYXRpb24iOiJub25lIiwidGV4dC10cmFuc2Zvcm0iOiJub25lIiwidGV4dC13cmFwIjoibm9uZSIsInRleHQtb3ZlcmZsb3ctd3JhcCI6IndoaXRlc3BhY2UiLCJ0ZXh0LW1heC13aWR0aCI6OTk5OSwidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIjoiIzAwMCIsInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IjowLCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiOiJyZWN0YW5nbGUiLCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyI6MCwidGV4dC1ib3JkZXItb3BhY2l0eSI6MCwidGV4dC1ib3JkZXItd2lkdGgiOjAsInRleHQtYm9yZGVyLXN0eWxlIjoic29saWQiLCJ0ZXh0LWJvcmRlci1jb2xvciI6IiMwMDAiLCJmb250LWZhbWlseSI6IkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiLCJmb250LXN0eWxlIjoibm9ybWFsIiwiZm9udC13ZWlnaHQiOiJub3JtYWwiLCJmb250LXNpemUiOjE2LCJtaW4tem9vbWVkLWZvbnQtc2l6ZSI6MCwidGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJzb3VyY2UtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJ0YXJnZXQtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLHZpc2liaWxpdHk6InZpc2libGUiLGRpc3BsYXk6ImVsZW1lbnQiLG9wYWNpdHk6MSwiei1jb21wb3VuZC1kZXB0aCI6ImF1dG8iLCJ6LWluZGV4LWNvbXBhcmUiOiJhdXRvIiwiei1pbmRleCI6MCxsYWJlbDoiIiwidGV4dC1tYXJnaW4teCI6MCwidGV4dC1tYXJnaW4teSI6MCwic291cmNlLWxhYmVsIjoiIiwic291cmNlLXRleHQtb2Zmc2V0IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teCI6MCwic291cmNlLXRleHQtbWFyZ2luLXkiOjAsInRhcmdldC1sYWJlbCI6IiIsInRhcmdldC10ZXh0LW9mZnNldCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXgiOjAsInRhcmdldC10ZXh0LW1hcmdpbi15IjowLCJvdmVybGF5LW9wYWNpdHkiOjAsIm92ZXJsYXktY29sb3IiOiIjMDAwIiwib3ZlcmxheS1wYWRkaW5nIjoxMCwib3ZlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInRyYW5zaXRpb24tcHJvcGVydHkiOiJub25lIiwidHJhbnNpdGlvbi1kdXJhdGlvbiI6MCwidHJhbnNpdGlvbi1kZWxheSI6MCwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiJsaW5lYXIiLCJiYWNrZ3JvdW5kLWJsYWNrZW4iOjAsImJhY2tncm91bmQtY29sb3IiOiIjOTk5IiwiYmFja2dyb3VuZC1maWxsIjoic29saWQiLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UiOiJub25lIiwiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiI6ImFub255bW91cyIsImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCI6Imluc2lkZSIsImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIjoieWVzIiwiYmFja2dyb3VuZC1wb3NpdGlvbi14IjoiNTAlIiwiYmFja2dyb3VuZC1wb3NpdGlvbi15IjoiNTAlIiwiYmFja2dyb3VuZC1vZmZzZXQteCI6MCwiYmFja2dyb3VuZC1vZmZzZXQteSI6MCwiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byI6ImluY2x1ZGUtcGFkZGluZyIsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1yZXBlYXQiOiJuby1yZXBlYXQiLCJiYWNrZ3JvdW5kLWZpdCI6Im5vbmUiLCJiYWNrZ3JvdW5kLWNsaXAiOiJub2RlIiwiYmFja2dyb3VuZC13aWR0aCI6ImF1dG8iLCJiYWNrZ3JvdW5kLWhlaWdodCI6ImF1dG8iLCJib3JkZXItY29sb3IiOiIjMDAwIiwiYm9yZGVyLW9wYWNpdHkiOjEsImJvcmRlci13aWR0aCI6MCwiYm9yZGVyLXN0eWxlIjoic29saWQiLGhlaWdodDozMCx3aWR0aDozMCxzaGFwZToiZWxsaXBzZSIsInNoYXBlLXBvbHlnb24tcG9pbnRzIjoiLTEsIC0xLCAgIDEsIC0xLCAgIDEsIDEsICAgLTEsIDEiLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihxLFMpe2Zvcih2YXIgRz0xO0c8PSRmLnBpZUJhY2tncm91bmROO0crKyl7dmFyIFc9Uy5uYW1lLnJlcGxhY2UoInt7aX19IixHKSxldD1TLnZhbHVlO3FbV109ZXR9cmV0dXJuIHF9LHt9KSx7ImxpbmUtc3R5bGUiOiJzb2xpZCIsImxpbmUtY29sb3IiOiIjOTk5IiwibGluZS1maWxsIjoic29saWQiLCJsaW5lLWNhcCI6ImJ1dHQiLCJsaW5lLW9wYWNpdHkiOjEsImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIiwiY29udHJvbC1wb2ludC1zdGVwLXNpemUiOjQwLCJjb250cm9sLXBvaW50LXdlaWdodHMiOi41LCJzZWdtZW50LXdlaWdodHMiOi41LCJzZWdtZW50LWRpc3RhbmNlcyI6MjAsInRheGktdHVybiI6IjUwJSIsInRheGktdHVybi1taW4tZGlzdGFuY2UiOjEwLCJ0YXhpLWRpcmVjdGlvbiI6ImF1dG8iLCJlZGdlLWRpc3RhbmNlcyI6ImludGVyc2VjdGlvbiIsImN1cnZlLXN0eWxlIjoiaGF5c3RhY2siLCJoYXlzdGFjay1yYWRpdXMiOjAsImFycm93LXNjYWxlIjoxLCJsb29wLWRpcmVjdGlvbiI6Ii00NWRlZyIsImxvb3Atc3dlZXAiOiItOTBkZWciLCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJsaW5lLWRhc2gtcGF0dGVybiI6WzYsM10sImxpbmUtZGFzaC1vZmZzZXQiOjB9LFt7bmFtZToiYXJyb3ctc2hhcGUiLHZhbHVlOiJub25lIn0se25hbWU6ImFycm93LWNvbG9yIix2YWx1ZToiIzk5OSJ9LHtuYW1lOiJhcnJvdy1maWxsIix2YWx1ZToiZmlsbGVkIn1dLnJlZHVjZShmdW5jdGlvbihxLFMpe3JldHVybiAkZi5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFc9RysiLSIrUy5uYW1lLGV0PVMudmFsdWU7cVtXXT1ldH0pLHF9LHt9KSkseD17fSxUPTA7VDx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1QrKyl7dmFyIEE9dGhpcy5wcm9wZXJ0aWVzW1RdO2lmKCFBLnBvaW50c1RvKXt2YXIgRD1BLm5hbWUsTz1nW0RdLCQ9dGhpcy5wYXJzZShELE8pO3hbRF09JH19cmV0dXJuIHkuZGVmYXVsdFByb3BlcnRpZXM9eCx5LmRlZmF1bHRQcm9wZXJ0aWVzfSwkZi5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgbDk9e307bDkucGFyc2U9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcztpZih5dChnKSlyZXR1cm4gQS5wYXJzZUltcGxXYXJuKHksZyx4LFQpO3ZhciBEPVQ9PT0ibWFwcGluZyJ8fFQ9PT0hMHx8VD09PSExfHxUPT1udWxsPyJkb250Y2FyZSI6VCxPPXg/InQiOiJmIiwkPSIiK2cscT1lZCh5LCQsTyxEKSxTPUEucHJvcENhY2hlPUEucHJvcENhY2hlfHxbXSxHO3JldHVybihHPVNbcV0pfHwoRz1TW3FdPUEucGFyc2VJbXBsV2Fybih5LGcseCxUKSksKHh8fFQ9PT0ibWFwcGluZyIpJiYoRz0kYihHKSxHJiYoRy52YWx1ZT0kYihHLnZhbHVlKSkpLEd9LGw5LnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcy5wYXJzZUltcGwoeSxnLHgsVCk7cmV0dXJuIUEmJmchPW51bGwmJlNjKCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHksIjogIikuY29uY2F0KGcsImAgaXMgaW52YWxpZCIpKSxBJiYoQS5uYW1lPT09IndpZHRoInx8QS5uYW1lPT09ImhlaWdodCIpJiZnPT09ImxhYmVsIiYmU2MoIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK0EubmFtZSsiYCIpLEF9LGw5LnBhcnNlSW1wbD1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT10aGlzO3k9cG4oeSk7dmFyIEQ9QS5wcm9wZXJ0aWVzW3ldLE89ZywkPUEudHlwZXM7aWYoIUR8fGc9PT12b2lkIDApcmV0dXJuIG51bGw7RC5hbGlhcyYmKEQ9RC5wb2ludHNUbyx5PUQubmFtZSk7dmFyIHE9bXQoZyk7cSYmKGc9Zy50cmltKCkpO3ZhciBTPUQudHlwZTtpZighUylyZXR1cm4gbnVsbDtpZih4JiYoZz09PSIifHxnPT09bnVsbCkpcmV0dXJue25hbWU6eSx2YWx1ZTpnLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKHl0KGcpKXJldHVybntuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiZm4iLG1hcHBlZDokLmZuLGJ5cGFzczp4fTt2YXIgRyxXO2lmKCEoIXF8fFR8fGcubGVuZ3RoPDd8fGdbMV0hPT0iYSIpKXtpZihnLmxlbmd0aD49NyYmZ1swXT09PSJkIiYmKEc9bmV3IFJlZ0V4cCgkLmRhdGEucmVnZXgpLmV4ZWMoZykpKXtpZih4KXJldHVybiExO3ZhciBldD0kLmRhdGE7cmV0dXJue25hbWU6eSx2YWx1ZTpHLHN0clZhbHVlOiIiK2csbWFwcGVkOmV0LGZpZWxkOkdbMV0sYnlwYXNzOnh9fWVsc2UgaWYoZy5sZW5ndGg+PTEwJiZnWzBdPT09Im0iJiYoVz1uZXcgUmVnRXhwKCQubWFwRGF0YS5yZWdleCkuZXhlYyhnKSkpe2lmKHh8fFMubXVsdGlwbGUpcmV0dXJuITE7dmFyIGF0PSQubWFwRGF0YTtpZighKFMuY29sb3J8fFMubnVtYmVyKSlyZXR1cm4hMTt2YXIgbHQ9dGhpcy5wYXJzZSh5LFdbNF0pO2lmKCFsdHx8bHQubWFwcGVkKXJldHVybiExO3ZhciBmdD10aGlzLnBhcnNlKHksV1s1XSk7aWYoIWZ0fHxmdC5tYXBwZWQpcmV0dXJuITE7aWYobHQucGZWYWx1ZT09PWZ0LnBmVmFsdWV8fGx0LnN0clZhbHVlPT09ZnQuc3RyVmFsdWUpcmV0dXJuIFNjKCJgIit5KyI6ICIrZysiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIreSsiOiAiK2x0LnN0clZhbHVlKyJgIiksdGhpcy5wYXJzZSh5LGx0LnN0clZhbHVlKTtpZihTLmNvbG9yKXt2YXIgQXQ9bHQudmFsdWUsa3Q9ZnQudmFsdWUsTXQ9QXRbMF09PT1rdFswXSYmQXRbMV09PT1rdFsxXSYmQXRbMl09PT1rdFsyXSYmKEF0WzNdPT09a3RbM118fChBdFszXT09bnVsbHx8QXRbM109PT0xKSYmKGt0WzNdPT1udWxsfHxrdFszXT09PTEpKTtpZihNdClyZXR1cm4hMX1yZXR1cm57bmFtZTp5LHZhbHVlOlcsc3RyVmFsdWU6IiIrZyxtYXBwZWQ6YXQsZmllbGQ6V1sxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KFdbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoV1szXSksdmFsdWVNaW46bHQudmFsdWUsdmFsdWVNYXg6ZnQudmFsdWUsYnlwYXNzOnh9fX1pZihTLm11bHRpcGxlJiZUIT09Im11bHRpcGxlIil7dmFyIER0O2lmKHE/RHQ9Zy5zcGxpdCgvXHMrLyk6ZHQoZyk/RHQ9ZzpEdD1bZ10sUy5ldmVuTXVsdGlwbGUmJkR0Lmxlbmd0aCUyIT09MClyZXR1cm4gbnVsbDtmb3IodmFyIGp0PVtdLFp0PVtdLEt0PVtdLHp0PSIiLGVlPSExLFZ0PTA7VnQ8RHQubGVuZ3RoO1Z0Kyspe3ZhciBmZT1BLnBhcnNlKHksRHRbVnRdLHgsIm11bHRpcGxlIik7ZWU9ZWV8fG10KGZlLnZhbHVlKSxqdC5wdXNoKGZlLnZhbHVlKSxLdC5wdXNoKGZlLnBmVmFsdWUhPW51bGw/ZmUucGZWYWx1ZTpmZS52YWx1ZSksWnQucHVzaChmZS51bml0cyksenQrPShWdD4wPyIgIjoiIikrZmUuc3RyVmFsdWV9cmV0dXJuIFMudmFsaWRhdGUmJiFTLnZhbGlkYXRlKGp0LFp0KT9udWxsOlMuc2luZ2xlRW51bSYmZWU/anQubGVuZ3RoPT09MSYmbXQoanRbMF0pP3tuYW1lOnksdmFsdWU6anRbMF0sc3RyVmFsdWU6anRbMF0sYnlwYXNzOnh9Om51bGw6e25hbWU6eSx2YWx1ZTpqdCxwZlZhbHVlOkt0LHN0clZhbHVlOnp0LGJ5cGFzczp4LHVuaXRzOlp0fX12YXIgZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIGZyPTA7ZnI8Uy5lbnVtcy5sZW5ndGg7ZnIrKyl7dmFyIEpyPVMuZW51bXNbZnJdO2lmKEpyPT09ZylyZXR1cm57bmFtZTp5LHZhbHVlOmcsc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9O2lmKFMubnVtYmVyKXt2YXIgbmUsUGU9InB4IjtpZihTLnVuaXRzJiYobmU9Uy51bml0cyksUy5pbXBsaWNpdFVuaXRzJiYoUGU9Uy5pbXBsaWNpdFVuaXRzKSwhUy51bml0bGVzcylpZihxKXt2YXIgcGU9InB4fGVtIisoUy5hbGxvd1BlcmNlbnQ/InxcXCUiOiIiKTtuZSYmKHBlPW5lKTt2YXIgYm49Zy5tYXRjaCgiXigiK0tlKyIpKCIrcGUrIik/JCIpO2JuJiYoZz1iblsxXSxuZT1iblsyXXx8UGUpfWVsc2UoIW5lfHxTLmltcGxpY2l0VW5pdHMpJiYobmU9UGUpO2lmKGc9cGFyc2VGbG9hdChnKSxpc05hTihnKSYmUy5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihnKSYmUy5lbnVtcyE9PXZvaWQgMClyZXR1cm4gZz1PLGdlKCk7aWYoUy5pbnRlZ2VyJiYhcHQoZyl8fFMubWluIT09dm9pZCAwJiYoZzxTLm1pbnx8Uy5zdHJpY3RNaW4mJmc9PT1TLm1pbil8fFMubWF4IT09dm9pZCAwJiYoZz5TLm1heHx8Uy5zdHJpY3RNYXgmJmc9PT1TLm1heCkpcmV0dXJuIG51bGw7dmFyIHplPXtuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiIitnKyhuZXx8IiIpLHVuaXRzOm5lLGJ5cGFzczp4fTtyZXR1cm4gUy51bml0bGVzc3x8bmUhPT0icHgiJiZuZSE9PSJlbSI/emUucGZWYWx1ZT1nOnplLnBmVmFsdWU9bmU9PT0icHgifHwhbmU/Zzp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqZywobmU9PT0ibXMifHxuZT09PSJzIikmJih6ZS5wZlZhbHVlPW5lPT09Im1zIj9nOjFlMypnKSwobmU9PT0iZGVnInx8bmU9PT0icmFkIikmJih6ZS5wZlZhbHVlPW5lPT09InJhZCI/Zzp4WShnKSksbmU9PT0iJSImJih6ZS5wZlZhbHVlPWcvMTAwKSx6ZX1lbHNlIGlmKFMucHJvcExpc3Qpe3ZhciBWZT1bXSxFbj0iIitnO2lmKEVuIT09Im5vbmUiKXtmb3IodmFyIERuPUVuLnNwbGl0KC9ccyosXHMqfFxzKy8pLEtuPTA7S248RG4ubGVuZ3RoO0tuKyspe3ZhciBTbj1EbltLbl0udHJpbSgpO0EucHJvcGVydGllc1tTbl0/VmUucHVzaChTbik6U2MoImAiK1NuKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihWZS5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOnksdmFsdWU6VmUsc3RyVmFsdWU6VmUubGVuZ3RoPT09MD8ibm9uZSI6VmUuam9pbigiICIpLGJ5cGFzczp4fX1lbHNlIGlmKFMuY29sb3Ipe3ZhciBXbj1PbyhnKTtyZXR1cm4gV24/e25hbWU6eSx2YWx1ZTpXbixwZlZhbHVlOlduLHN0clZhbHVlOiJyZ2IoIitXblswXSsiLCIrV25bMV0rIiwiK1duWzJdKyIpIixieXBhc3M6eH06bnVsbH1lbHNlIGlmKFMucmVnZXh8fFMucmVnZXhlcyl7aWYoUy5lbnVtcyl7dmFyIHJyPWdlKCk7aWYocnIpcmV0dXJuIHJyfWZvcih2YXIgdnI9Uy5yZWdleGVzP1MucmVnZXhlczpbUy5yZWdleF0sdXI9MDt1cjx2ci5sZW5ndGg7dXIrKyl7dmFyIHRyPW5ldyBSZWdFeHAodnJbdXJdKSx3bj10ci5leGVjKGcpO2lmKHduKXJldHVybntuYW1lOnksdmFsdWU6Uy5zaW5nbGVSZWdleE1hdGNoVmFsdWU/d25bMV06d24sc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gUy5zdHJpbmc/e25hbWU6eSx2YWx1ZToiIitnLHN0clZhbHVlOiIiK2csYnlwYXNzOnh9OlMuZW51bXM/Z2UoKTpudWxsfTt2YXIgZDE9ZnVuY3Rpb24geShnKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkoZyk7aWYoIU50KGcpKXtibCgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTpnLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LGcxPWQxLnByb3RvdHlwZTtnMS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9LGcxLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuX3ByaXZhdGUsZz15LmN5LHg9Zy5lbGVtZW50cygpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl0aGlzW1RdPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx5LmNvbnRleHRTdHlsZXM9e30seS5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKHgsITApLHguZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgRD1BWzBdLl9wcml2YXRlO0Quc3R5bGVEaXJ0eT0hMCxELmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfSxnMS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9LGcxLmNvcmU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3ldfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh5KX0sZzEuc2VsZWN0b3I9ZnVuY3Rpb24oeSl7dmFyIGc9eT09PSJjb3JlIj9udWxsOm5ldyB5bSh5KSx4PXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbeF09e3NlbGVjdG9yOmcscHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4Onh9LHRoaXN9LGcxLmNzcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMsZz1hcmd1bWVudHM7aWYoZy5sZW5ndGg9PT0xKWZvcih2YXIgeD1nWzBdLFQ9MDtUPHkucHJvcGVydGllcy5sZW5ndGg7VCsrKXt2YXIgQT15LnByb3BlcnRpZXNbVF0sRD14W0EubmFtZV07RD09PXZvaWQgMCYmKEQ9eFtNZShBLm5hbWUpXSksRCE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKEEubmFtZSxEKX1lbHNlIGcubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKGdbMF0sZ1sxXSk7cmV0dXJuIHRoaXN9LGcxLnN0eWxlPWcxLmNzcyxnMS5jc3NSdWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5wYXJzZSh5LGcpO2lmKHgpe3ZhciBUPXRoaXMubGVuZ3RoLTE7dGhpc1tUXS5wcm9wZXJ0aWVzLnB1c2goeCksdGhpc1tUXS5wcm9wZXJ0aWVzW3gubmFtZV09eCx4Lm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmeC52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSx4Lm1hcHBlZCYmdGhpc1tUXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2goeCk7dmFyIEE9IXRoaXNbVF0uc2VsZWN0b3I7QSYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3gubmFtZV09eCl9cmV0dXJuIHRoaXN9LGcxLmFwcGVuZD1mdW5jdGlvbih5KXtyZXR1cm4gcXQoeSk/eS5hcHBlbmRUb1N0eWxlKHRoaXMpOmR0KHkpP3RoaXMuYXBwZW5kRnJvbUpzb24oeSk6bXQoeSkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh5KSx0aGlzfSxkMS5mcm9tSnNvbj1mdW5jdGlvbih5LGcpe3ZhciB4PW5ldyBkMSh5KTtyZXR1cm4geC5mcm9tSnNvbihnKSx4fSxkMS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHksZyl7cmV0dXJuIG5ldyBkMSh5KS5mcm9tU3RyaW5nKGcpfSxbZjEsTmssSEwsSGIsdTksR0wsJGYsbDldLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoZzEseSl9KSxkMS50eXBlcz1nMS50eXBlcyxkMS5wcm9wZXJ0aWVzPWcxLnByb3BlcnRpZXMsZDEucHJvcGVydHlHcm91cHM9ZzEucHJvcGVydHlHcm91cHMsZDEucHJvcGVydHlHcm91cE5hbWVzPWcxLnByb3BlcnR5R3JvdXBOYW1lcyxkMS5wcm9wZXJ0eUdyb3VwS2V5cz1nMS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgU0o9e3N0eWxlOmZ1bmN0aW9uKGcpe2lmKGcpe3ZhciB4PXRoaXMuc2V0U3R5bGUoZyk7eC51cGRhdGUoKX1yZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZX0sc2V0U3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gcXQoZyk/eC5zdHlsZT1nLmdlbmVyYXRlU3R5bGUodGhpcyk6ZHQoZyk/eC5zdHlsZT1kMS5mcm9tSnNvbih0aGlzLGcpOm10KGcpP3guc3R5bGU9ZDEuZnJvbVN0cmluZyh0aGlzLGcpOnguc3R5bGU9ZDEodGhpcykseC5zdHlsZX0sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9fSxBSj0ic2luZ2xlIixBMz17YXV0b2xvY2s6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSxhdXRvdW5ncmFiaWZ5OmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7cmV0dXJuIHRoaXN9LGF1dG91bnNlbGVjdGlmeTpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sc2VsZWN0aW9uVHlwZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlO2lmKHguc2VsZWN0aW9uVHlwZT09bnVsbCYmKHguc2VsZWN0aW9uVHlwZT1BSiksZyE9PXZvaWQgMCkoZz09PSJhZGRpdGl2ZSJ8fGc9PT0ic2luZ2xlIikmJih4LnNlbGVjdGlvblR5cGU9Zyk7ZWxzZSByZXR1cm4geC5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSxwYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHVzZXJQYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sem9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyWm9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LGJveFNlbGVjdGlvbkVuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30scGFuOmZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9dGhpcy5fcHJpdmF0ZS5wYW4sVCxBLEQsTywkO3N3aXRjaChnLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB4O2Nhc2UgMTppZihtdChnWzBdKSlyZXR1cm4gVD1nWzBdLHhbVF07aWYoaHQoZ1swXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO0Q9Z1swXSxPPUQueCwkPUQueSxYKE8pJiYoeC54PU8pLFgoJCkmJih4Lnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7VD1nWzBdLEE9Z1sxXSwoVD09PSJ4Inx8VD09PSJ5IikmJlgoQSkmJih4W1RdPUEpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLEE9dGhpcy5fcHJpdmF0ZS5wYW4sRCxPLCQscSxTO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChULmxlbmd0aCl7Y2FzZSAxOmh0KGcpJiYoJD1UWzBdLHE9JC54LFM9JC55LFgocSkmJihBLngrPXEpLFgoUykmJihBLnkrPVMpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpEPWcsTz14LChEPT09IngifHxEPT09InkiKSYmWChPKSYmKEFbRF0rPU8pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LGZpdDpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZyx4KTtpZihUKXt2YXIgQT10aGlzLl9wcml2YXRlO0Euem9vbT1ULnpvb20sQS5wYW49VC5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihnLHgpe2lmKFgoZykmJng9PT12b2lkIDAmJih4PWcsZz12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIFQ7aWYobXQoZykpe3ZhciBBPWc7Zz10aGlzLiQoQSl9ZWxzZSBpZihIdChnKSl7dmFyIEQ9ZztUPXt4MTpELngxLHkxOkQueTEseDI6RC54Mix5MjpELnkyfSxULnc9VC54Mi1ULngxLFQuaD1ULnkyLVQueTF9ZWxzZSB4dChnKXx8KGc9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoISh4dChnKSYmZy5lbXB0eSgpKSl7VD1UfHxnLmJvdW5kaW5nQm94KCk7dmFyIE89dGhpcy53aWR0aCgpLCQ9dGhpcy5oZWlnaHQoKSxxO2lmKHg9WCh4KT94OjAsIWlzTmFOKE8pJiYhaXNOYU4oJCkmJk8+MCYmJD4wJiYhaXNOYU4oVC53KSYmIWlzTmFOKFQuaCkmJlQudz4wJiZULmg+MCl7cT1NYXRoLm1pbigoTy0yKngpL1QudywoJC0yKngpL1QuaCkscT1xPnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206cSxxPXE8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTpxO3ZhciBTPXt4OihPLXEqKFQueDErVC54MikpLzIseTooJC1xKihULnkxK1QueTIpKS8yfTtyZXR1cm57em9vbTpxLHBhbjpTfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9dGhpcy5fcHJpdmF0ZTtpZih4PT1udWxsKXt2YXIgQT1nO2c9QS5taW4seD1BLm1heH1yZXR1cm4gWChnKSYmWCh4KSYmZzw9eD8oVC5taW5ab29tPWcsVC5tYXhab29tPXgpOlgoZykmJng9PT12b2lkIDAmJmc8PVQubWF4Wm9vbT9ULm1pblpvb209ZzpYKHgpJiZnPT09dm9pZCAwJiZ4Pj1ULm1pblpvb20mJihULm1heFpvb209eCksdGhpc30sbWluWm9vbTpmdW5jdGlvbihnKXtyZXR1cm4gZz09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjpnfSl9LG1heFpvb206ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6Z30pfSxnZXRab29tZWRWaWV3cG9ydDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wYW4sQT14Lnpvb20sRCxPLCQ9ITE7aWYoeC56b29taW5nRW5hYmxlZHx8KCQ9ITApLFgoZyk/Tz1nOmh0KGcpJiYoTz1nLmxldmVsLGcucG9zaXRpb24hPW51bGw/RD1PVChnLnBvc2l0aW9uLEEsVCk6Zy5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoRD1nLnJlbmRlcmVkUG9zaXRpb24pLEQhPW51bGwmJiF4LnBhbm5pbmdFbmFibGVkJiYoJD0hMCkpLE89Tz54Lm1heFpvb20/eC5tYXhab29tOk8sTz1PPHgubWluWm9vbT94Lm1pblpvb206TywkfHwhWChPKXx8Tz09PUF8fEQhPW51bGwmJighWChELngpfHwhWChELnkpKSlyZXR1cm4gbnVsbDtpZihEIT1udWxsKXt2YXIgcT1ULFM9QSxHPU8sVz17eDotRy9TKihELngtcS54KStELngseTotRy9TKihELnktcS55KStELnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206RyxwYW46V319ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOk8scGFuOlR9fSx6b29tOmZ1bmN0aW9uKGcpe2lmKGc9PT12b2lkIDApcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTt2YXIgeD10aGlzLmdldFpvb21lZFZpZXdwb3J0KGcpLFQ9dGhpcy5fcHJpdmF0ZTtyZXR1cm4geD09bnVsbHx8IXguem9vbWVkP3RoaXM6KFQuem9vbT14Lnpvb20seC5wYW5uZWQmJihULnBhbi54PXgucGFuLngsVC5wYW4ueT14LnBhbi55KSx0aGlzLmVtaXQoInpvb20iKyh4LnBhbm5lZD8iIHBhbiI6IiIpKyIgdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzKX0sdmlld3BvcnQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUPSEwLEE9ITAsRD1bXSxPPSExLCQ9ITE7aWYoIWcpcmV0dXJuIHRoaXM7aWYoWChnLnpvb20pfHwoVD0hMSksaHQoZy5wYW4pfHwoQT0hMSksIVQmJiFBKXJldHVybiB0aGlzO2lmKFQpe3ZhciBxPWcuem9vbTtxPHgubWluWm9vbXx8cT54Lm1heFpvb218fCF4Lnpvb21pbmdFbmFibGVkP089ITA6KHguem9vbT1xLEQucHVzaCgiem9vbSIpKX1pZihBJiYoIU98fCFnLmNhbmNlbE9uRmFpbGVkWm9vbSkmJngucGFubmluZ0VuYWJsZWQpe3ZhciBTPWcucGFuO1goUy54KSYmKHgucGFuLng9Uy54LCQ9ITEpLFgoUy55KSYmKHgucGFuLnk9Uy55LCQ9ITEpLCR8fEQucHVzaCgicGFuIil9cmV0dXJuIEQubGVuZ3RoPjAmJihELnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KEQuam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sY2VudGVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuZ2V0Q2VudGVyUGFuKGcpO3JldHVybiB4JiYodGhpcy5fcHJpdmF0ZS5wYW49eCx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxnZXRDZW50ZXJQYW46ZnVuY3Rpb24oZyx4KXtpZih0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXtpZihtdChnKSl7dmFyIFQ9ZztnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWVsc2UgeHQoZyl8fChnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKGcubGVuZ3RoIT09MCl7dmFyIEE9Zy5ib3VuZGluZ0JveCgpLEQ9dGhpcy53aWR0aCgpLE89dGhpcy5oZWlnaHQoKTt4PXg9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS56b29tOng7dmFyICQ9e3g6KEQteCooQS54MStBLngyKSkvMix5OihPLXgqKEEueTErQS55MikpLzJ9O3JldHVybiAkfX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkP3RoaXM6KHRoaXMudmlld3BvcnQoe3Bhbjp7eDowLHk6MH0sem9vbToxfSksdGhpcyl9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGUseD1nLmNvbnRhaW5lcjtyZXR1cm4gZy5zaXplQ2FjaGU9Zy5zaXplQ2FjaGV8fCh4P2Z1bmN0aW9uKCl7dmFyIFQ9Ui5nZXRDb21wdXRlZFN0eWxlKHgpLEE9ZnVuY3Rpb24oTyl7cmV0dXJuIHBhcnNlRmxvYXQoVC5nZXRQcm9wZXJ0eVZhbHVlKE8pKX07cmV0dXJue3dpZHRoOnguY2xpZW50V2lkdGgtQSgicGFkZGluZy1sZWZ0IiktQSgicGFkZGluZy1yaWdodCIpLGhlaWdodDp4LmNsaWVudEhlaWdodC1BKCJwYWRkaW5nLXRvcCIpLUEoInBhZGRpbmctYm90dG9tIil9fSgpOnt3aWR0aDoxLGhlaWdodDoxfSl9LHdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLndpZHRofSxoZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkuaGVpZ2h0fSxleHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLnBhbix4PXRoaXMuX3ByaXZhdGUuem9vbSxUPXRoaXMucmVuZGVyZWRFeHRlbnQoKSxBPXt4MTooVC54MS1nLngpL3gseDI6KFQueDItZy54KS94LHkxOihULnkxLWcueSkveCx5MjooVC55Mi1nLnkpL3h9O3JldHVybiBBLnc9QS54Mi1BLngxLEEuaD1BLnkyLUEueTEsQX0scmVuZGVyZWRFeHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndpZHRoKCkseD10aGlzLmhlaWdodCgpO3JldHVybnt4MTowLHkxOjAseDI6Zyx5Mjp4LHc6ZyxoOnh9fSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOmZ1bmN0aW9uKGcpe2lmKGcpdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO3JldHVybiB0aGlzfX07QTMuY2VudHJlPUEzLmNlbnRlcixBMy5hdXRvbG9ja05vZGVzPUEzLmF1dG9sb2NrLEEzLmF1dG91bmdyYWJpZnlOb2Rlcz1BMy5hdXRvdW5ncmFiaWZ5O3ZhciBQaz17ZGF0YTpBYy5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6QWMucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KX07UGsuYXR0cj1Qay5kYXRhLFBrLnJlbW92ZUF0dHI9UGsucmVtb3ZlRGF0YTt2YXIgRms9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztnPW1lKHt9LGcpO3ZhciBUPWcuY29udGFpbmVyO1QmJiFVKFQpJiZVKFRbMF0pJiYoVD1UWzBdKTt2YXIgQT1UP1QuX2N5cmVnOm51bGw7QT1BfHx7fSxBJiZBLmN5JiYoQS5jeS5kZXN0cm95KCksQT17fSk7dmFyIEQ9QS5yZWFkaWVzPUEucmVhZGllc3x8W107VCYmKFQuX2N5cmVnPUEpLEEuY3k9eDt2YXIgTz1SIT09dm9pZCAwJiZUIT09dm9pZCAwJiYhZy5oZWFkbGVzcywkPWc7JC5sYXlvdXQ9bWUoe25hbWU6Tz8iZ3JpZCI6Im51bGwifSwkLmxheW91dCksJC5yZW5kZXJlcj1tZSh7bmFtZTpPPyJjYW52YXMiOiJudWxsIn0sJC5yZW5kZXJlcik7dmFyIHE9ZnVuY3Rpb24obHQsZnQsQXQpe3JldHVybiBmdCE9PXZvaWQgMD9mdDpBdCE9PXZvaWQgMD9BdDpsdH0sUz10aGlzLl9wcml2YXRlPXtjb250YWluZXI6VCxyZWFkeTohMSxvcHRpb25zOiQsZWxlbWVudHM6bmV3IGpmKHRoaXMpLGxpc3RlbmVyczpbXSxhbmlFbGVzOm5ldyBqZih0aGlzKSxkYXRhOiQuZGF0YXx8e30sc2NyYXRjaDp7fSxsYXlvdXQ6bnVsbCxyZW5kZXJlcjpudWxsLGRlc3Ryb3llZDohMSxub3RpZmljYXRpb25zRW5hYmxlZDohMCxtaW5ab29tOjFlLTUwLG1heFpvb206MWU1MCx6b29taW5nRW5hYmxlZDpxKCEwLCQuem9vbWluZ0VuYWJsZWQpLHVzZXJab29taW5nRW5hYmxlZDpxKCEwLCQudXNlclpvb21pbmdFbmFibGVkKSxwYW5uaW5nRW5hYmxlZDpxKCEwLCQucGFubmluZ0VuYWJsZWQpLHVzZXJQYW5uaW5nRW5hYmxlZDpxKCEwLCQudXNlclBhbm5pbmdFbmFibGVkKSxib3hTZWxlY3Rpb25FbmFibGVkOnEoITAsJC5ib3hTZWxlY3Rpb25FbmFibGVkKSxhdXRvbG9jazpxKCExLCQuYXV0b2xvY2ssJC5hdXRvbG9ja05vZGVzKSxhdXRvdW5ncmFiaWZ5OnEoITEsJC5hdXRvdW5ncmFiaWZ5LCQuYXV0b3VuZ3JhYmlmeU5vZGVzKSxhdXRvdW5zZWxlY3RpZnk6cSghMSwkLmF1dG91bnNlbGVjdGlmeSksc3R5bGVFbmFibGVkOiQuc3R5bGVFbmFibGVkPT09dm9pZCAwP086JC5zdHlsZUVuYWJsZWQsem9vbTpYKCQuem9vbSk/JC56b29tOjEscGFuOnt4Omh0KCQucGFuKSYmWCgkLnBhbi54KT8kLnBhbi54OjAseTpodCgkLnBhbikmJlgoJC5wYW4ueSk/JC5wYW4ueTowfSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LGhhc0NvbXBvdW5kTm9kZXM6ITEsbXVsdGlDbGlja0RlYm91bmNlVGltZTpxKDI1MCwkLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpfTt0aGlzLmNyZWF0ZUVtaXR0ZXIoKSx0aGlzLnNlbGVjdGlvblR5cGUoJC5zZWxlY3Rpb25UeXBlKSx0aGlzLnpvb21SYW5nZSh7bWluOiQubWluWm9vbSxtYXg6JC5tYXhab29tfSk7dmFyIEc9ZnVuY3Rpb24obHQsZnQpe3ZhciBBdD1sdC5zb21lKEl0KTtpZihBdClyZXR1cm4gSzUuYWxsKGx0KS50aGVuKGZ0KTtmdChsdCl9O1Muc3R5bGVFbmFibGVkJiZ4LnNldFN0eWxlKFtdKTt2YXIgVz1tZSh7fSwkLCQucmVuZGVyZXIpO3guaW5pdFJlbmRlcmVyKFcpO3ZhciBldD1mdW5jdGlvbihsdCxmdCxBdCl7eC5ub3RpZmljYXRpb25zKCExKTt2YXIga3Q9eC5tdXRhYmxlRWxlbWVudHMoKTtrdC5sZW5ndGg+MCYma3QucmVtb3ZlKCksbHQhPW51bGwmJihodChsdCl8fGR0KGx0KSkmJnguYWRkKGx0KSx4Lm9uZSgibGF5b3V0cmVhZHkiLGZ1bmN0aW9uKER0KXt4Lm5vdGlmaWNhdGlvbnMoITApLHguZW1pdChEdCkseC5vbmUoImxvYWQiLGZ0KSx4LmVtaXRBbmROb3RpZnkoImxvYWQiKX0pLm9uZSgibGF5b3V0c3RvcCIsZnVuY3Rpb24oKXt4Lm9uZSgiZG9uZSIsQXQpLHguZW1pdCgiZG9uZSIpfSk7dmFyIE10PW1lKHt9LHguX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO010LmVsZXM9eC5lbGVtZW50cygpLHgubGF5b3V0KE10KS5ydW4oKX07RyhbJC5zdHlsZSwkLmVsZW1lbnRzXSxmdW5jdGlvbihhdCl7dmFyIGx0PWF0WzBdLGZ0PWF0WzFdO1Muc3R5bGVFbmFibGVkJiZ4LnN0eWxlKCkuYXBwZW5kKGx0KSxldChmdCxmdW5jdGlvbigpe3guc3RhcnRBbmltYXRpb25Mb29wKCksUy5yZWFkeT0hMCx5dCgkLnJlYWR5KSYmeC5vbigicmVhZHkiLCQucmVhZHkpO2Zvcih2YXIgQXQ9MDtBdDxELmxlbmd0aDtBdCsrKXt2YXIga3Q9RFtBdF07eC5vbigicmVhZHkiLGt0KX1BJiYoQS5yZWFkaWVzPVtdKSx4LmVtaXQoInJlYWR5Iil9LCQuZG9uZSl9KX0saDk9RmsucHJvdG90eXBlO21lKGg5LHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybiJjb3JlIn0saXNSZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlYWR5fSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWR9LHJlYWR5OmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmlzUmVhZHkoKT90aGlzLmVtaXR0ZXIoKS5lbWl0KCJyZWFkeSIsW10sZyk6dGhpcy5vbigicmVhZHkiLGcpLHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKCFnLmRlc3Ryb3llZCgpKXJldHVybiBnLnN0b3BBbmltYXRpb25Mb29wKCksZy5kZXN0cm95UmVuZGVyZXIoKSx0aGlzLmVtaXQoImRlc3Ryb3kiKSxnLl9wcml2YXRlLmRlc3Ryb3llZD0hMCxnfSxoYXNFbGVtZW50V2l0aElkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZyl9LGdldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmdldEVsZW1lbnRCeUlkKGcpfSxoYXNDb21wb3VuZE5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlc30saGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCl9LHN0eWxlRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZH0sYWRkVG9Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLm1lcmdlKGcpLHRoaXN9LHJlbW92ZUZyb21Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLnVubWVyZ2UoZyksdGhpc30sY29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29udGFpbmVyfHxudWxsfSxtb3VudDpmdW5jdGlvbihnKXtpZihnIT1udWxsKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxBPVQub3B0aW9ucztyZXR1cm4hVShnKSYmVShnWzBdKSYmKGc9Z1swXSkseC5zdG9wQW5pbWF0aW9uTG9vcCgpLHguZGVzdHJveVJlbmRlcmVyKCksVC5jb250YWluZXI9ZyxULnN0eWxlRW5hYmxlZD0hMCx4LmludmFsaWRhdGVTaXplKCkseC5pbml0UmVuZGVyZXIobWUoe30sQSxBLnJlbmRlcmVyLHtuYW1lOkEucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjpBLnJlbmRlcmVyLm5hbWV9KSkseC5zdGFydEFuaW1hdGlvbkxvb3AoKSx4LnN0eWxlKEEuc3R5bGUpLHguZW1pdCgibW91bnQiKSx4fX0sdW5tb3VudDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7cmV0dXJuIGcuc3RvcEFuaW1hdGlvbkxvb3AoKSxnLmRlc3Ryb3lSZW5kZXJlcigpLGcuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGcuZW1pdCgidW5tb3VudCIpLGd9LG9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gJGIodGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sanNvbjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxBPXgubXV0YWJsZUVsZW1lbnRzKCksRD1mdW5jdGlvbihqdCl7cmV0dXJuIHguZ2V0RWxlbWVudEJ5SWQoanQuaWQoKSl9O2lmKGh0KGcpKXtpZih4LnN0YXJ0QmF0Y2goKSxnLmVsZW1lbnRzKXt2YXIgTz17fSwkPWZ1bmN0aW9uKGp0LFp0KXtmb3IodmFyIEt0PVtdLHp0PVtdLGVlPTA7ZWU8anQubGVuZ3RoO2VlKyspe3ZhciBWdD1qdFtlZV07aWYoIVZ0LmRhdGEuaWQpe1NjKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBmZT0iIitWdC5kYXRhLmlkLGdlPXguZ2V0RWxlbWVudEJ5SWQoZmUpO09bZmVdPSEwLGdlLmxlbmd0aCE9PTA/enQucHVzaCh7ZWxlOmdlLGpzb246VnR9KTooWnQmJihWdC5ncm91cD1adCksS3QucHVzaChWdCkpfXguYWRkKEt0KTtmb3IodmFyIG5lPTA7bmU8enQubGVuZ3RoO25lKyspe3ZhciBQZT16dFtuZV0scGU9UGUuZWxlLGJuPVBlLmpzb247cGUuanNvbihibil9fTtpZihkdChnLmVsZW1lbnRzKSkkKGcuZWxlbWVudHMpO2Vsc2UgZm9yKHZhciBxPVsibm9kZXMiLCJlZGdlcyJdLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIEc9cVtTXSxXPWcuZWxlbWVudHNbR107ZHQoVykmJiQoVyxHKX12YXIgZXQ9eC5jb2xsZWN0aW9uKCk7QS5maWx0ZXIoZnVuY3Rpb24oRHQpe3JldHVybiFPW0R0LmlkKCldfSkuZm9yRWFjaChmdW5jdGlvbihEdCl7RHQuaXNQYXJlbnQoKT9ldC5tZXJnZShEdCk6RHQucmVtb3ZlKCl9KSxldC5mb3JFYWNoKGZ1bmN0aW9uKER0KXtyZXR1cm4gRHQuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSksZXQuZm9yRWFjaChmdW5jdGlvbihEdCl7cmV0dXJuIEQoRHQpLnJlbW92ZSgpfSl9Zy5zdHlsZSYmeC5zdHlsZShnLnN0eWxlKSxnLnpvb20hPW51bGwmJmcuem9vbSE9PVQuem9vbSYmeC56b29tKGcuem9vbSksZy5wYW4mJihnLnBhbi54IT09VC5wYW4ueHx8Zy5wYW4ueSE9PVQucGFuLnkpJiZ4LnBhbihnLnBhbiksZy5kYXRhJiZ4LmRhdGEoZy5kYXRhKTtmb3IodmFyIGF0PVsibWluWm9vbSIsIm1heFpvb20iLCJ6b29taW5nRW5hYmxlZCIsInVzZXJab29taW5nRW5hYmxlZCIsInBhbm5pbmdFbmFibGVkIiwidXNlclBhbm5pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG9sb2NrIiwiYXV0b3VuZ3JhYmlmeSIsImF1dG91bnNlbGVjdGlmeSIsIm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUiXSxsdD0wO2x0PGF0Lmxlbmd0aDtsdCsrKXt2YXIgZnQ9YXRbbHRdO2dbZnRdIT1udWxsJiZ4W2Z0XShnW2Z0XSl9cmV0dXJuIHguZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIEF0PSEhZyxrdD17fTtBdD9rdC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKER0KXtyZXR1cm4gRHQuanNvbigpfSk6KGt0LmVsZW1lbnRzPXt9LEEuZm9yRWFjaChmdW5jdGlvbihEdCl7dmFyIGp0PUR0Lmdyb3VwKCk7a3QuZWxlbWVudHNbanRdfHwoa3QuZWxlbWVudHNbanRdPVtdKSxrdC5lbGVtZW50c1tqdF0ucHVzaChEdC5qc29uKCkpfSkpLHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkJiYoa3Quc3R5bGU9eC5zdHlsZSgpLmpzb24oKSksa3QuZGF0YT0kYih4LmRhdGEoKSk7dmFyIE10PVQub3B0aW9ucztyZXR1cm4ga3Quem9vbWluZ0VuYWJsZWQ9VC56b29taW5nRW5hYmxlZCxrdC51c2VyWm9vbWluZ0VuYWJsZWQ9VC51c2VyWm9vbWluZ0VuYWJsZWQsa3Quem9vbT1ULnpvb20sa3QubWluWm9vbT1ULm1pblpvb20sa3QubWF4Wm9vbT1ULm1heFpvb20sa3QucGFubmluZ0VuYWJsZWQ9VC5wYW5uaW5nRW5hYmxlZCxrdC51c2VyUGFubmluZ0VuYWJsZWQ9VC51c2VyUGFubmluZ0VuYWJsZWQsa3QucGFuPSRiKFQucGFuKSxrdC5ib3hTZWxlY3Rpb25FbmFibGVkPVQuYm94U2VsZWN0aW9uRW5hYmxlZCxrdC5yZW5kZXJlcj0kYihNdC5yZW5kZXJlciksa3QuaGlkZUVkZ2VzT25WaWV3cG9ydD1NdC5oaWRlRWRnZXNPblZpZXdwb3J0LGt0LnRleHR1cmVPblZpZXdwb3J0PU10LnRleHR1cmVPblZpZXdwb3J0LGt0LndoZWVsU2Vuc2l0aXZpdHk9TXQud2hlZWxTZW5zaXRpdml0eSxrdC5tb3Rpb25CbHVyPU10Lm1vdGlvbkJsdXIsa3QubXVsdGlDbGlja0RlYm91bmNlVGltZT1NdC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lLGt0fX19KSxoOS4kaWQ9aDkuZ2V0RWxlbWVudEJ5SWQsW3ZKLGtKLFNCLHpMLG85LFRKLHFMLGM5LFNKLEEzLFBrXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe21lKGg5LHkpfSk7dmFyIExKPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLG1heGltYWw6ITEsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX0sYXg9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LFZMPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iix4KX07ZnVuY3Rpb24gQUIoeSl7dGhpcy5vcHRpb25zPW1lKHt9LExKLHkpfUFCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LHg9eS5jeSxUPWcuZWxlcyxBPVQubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oQ2kpe3JldHVybiFDaS5pc1BhcmVudCgpfSksRD1ULE89Zy5kaXJlY3RlZCwkPWcubWF4aW1hbHx8Zy5tYXhpbWFsQWRqdXN0bWVudHM+MCxxPVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLFM7aWYoeHQoZy5yb290cykpUz1nLnJvb3RzO2Vsc2UgaWYoZHQoZy5yb290cykpe2Zvcih2YXIgRz1bXSxXPTA7VzxnLnJvb3RzLmxlbmd0aDtXKyspe3ZhciBldD1nLnJvb3RzW1ddLGF0PXguZ2V0RWxlbWVudEJ5SWQoZXQpO0cucHVzaChhdCl9Uz14LmNvbGxlY3Rpb24oRyl9ZWxzZSBpZihtdChnLnJvb3RzKSlTPXguJChnLnJvb3RzKTtlbHNlIGlmKE8pUz1BLnJvb3RzKCk7ZWxzZXt2YXIgbHQ9VC5jb21wb25lbnRzKCk7Uz14LmNvbGxlY3Rpb24oKTtmb3IodmFyIGZ0PWZ1bmN0aW9uKGhpKXt2YXIgZ3M9bHRbaGldLHFpPWdzLm1heERlZ3JlZSghMSksU2k9Z3MuZmlsdGVyKGZ1bmN0aW9uKFVpKXtyZXR1cm4gVWkuZGVncmVlKCExKT09PXFpfSk7Uz1TLmFkZChTaSl9LEF0PTA7QXQ8bHQubGVuZ3RoO0F0KyspZnQoQXQpfXZhciBrdD1bXSxNdD17fSxEdD1mdW5jdGlvbihoaSxncyl7a3RbZ3NdPT1udWxsJiYoa3RbZ3NdPVtdKTt2YXIgcWk9a3RbZ3NdLmxlbmd0aDtrdFtnc10ucHVzaChoaSksVkwoaGkse2luZGV4OnFpLGRlcHRoOmdzfSl9LGp0PWZ1bmN0aW9uKGhpLGdzKXt2YXIgcWk9YXgoaGkpLFNpPXFpLmRlcHRoLFVpPXFpLmluZGV4O2t0W1NpXVtVaV09bnVsbCxEdChoaSxncyl9O0QuYmZzKHtyb290czpTLGRpcmVjdGVkOmcuZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24oaGksZ3MscWksU2ksVWkpe3ZhciBHYT1oaVswXSxZcz1HYS5pZCgpO0R0KEdhLFVpKSxNdFtZc109ITB9fSk7Zm9yKHZhciBadD1bXSxLdD0wO0t0PEEubGVuZ3RoO0t0Kyspe3ZhciB6dD1BW0t0XTtNdFt6dC5pZCgpXXx8WnQucHVzaCh6dCl9dmFyIGVlPWZ1bmN0aW9uKGhpKXtmb3IodmFyIGdzPWt0W2hpXSxxaT0wO3FpPGdzLmxlbmd0aDtxaSsrKXt2YXIgU2k9Z3NbcWldO2lmKFNpPT1udWxsKXtncy5zcGxpY2UocWksMSkscWktLTtjb250aW51ZX1WTChTaSx7ZGVwdGg6aGksaW5kZXg6cWl9KX19LFZ0PWZ1bmN0aW9uKCl7Zm9yKHZhciBoaT0wO2hpPGt0Lmxlbmd0aDtoaSsrKWVlKGhpKX0sZmU9ZnVuY3Rpb24oaGksZ3Mpe2Zvcih2YXIgcWk9YXgoaGkpLFNpPWhpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuaXNOb2RlKCkmJlQuaGFzKFF0KX0pLFVpPS0xLEdhPWhpLmlkKCksWXM9MDtZczxTaS5sZW5ndGg7WXMrKyl7dmFyIHpzPVNpW1lzXSxFcj1heCh6cyk7VWk9TWF0aC5tYXgoVWksRXIuZGVwdGgpfXJldHVybiBxaS5kZXB0aDw9VWk/Z3NbR2FdP251bGw6KGp0KGhpLFVpKzEpLGdzW0dhXT0hMCwhMCk6ITF9O2lmKE8mJiQpe3ZhciBnZT1bXSxuZT17fSxQZT1mdW5jdGlvbihoaSl7cmV0dXJuIGdlLnB1c2goaGkpfSxwZT1mdW5jdGlvbigpe3JldHVybiBnZS5zaGlmdCgpfTtmb3IoQS5mb3JFYWNoKGZ1bmN0aW9uKENpKXtyZXR1cm4gZ2UucHVzaChDaSl9KTtnZS5sZW5ndGg+MDspe3ZhciBibj1wZSgpLHplPWZlKGJuLG5lKTtpZih6ZSlibi5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihDaSl7cmV0dXJuIENpLmlzTm9kZSgpJiZULmhhcyhDaSl9KS5mb3JFYWNoKFBlKTtlbHNlIGlmKHplPT09bnVsbCl7U2MoIkRldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAiK2JuLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19VnQoKTt2YXIgVmU9MDtpZihnLmF2b2lkT3ZlcmxhcClmb3IodmFyIEVuPTA7RW48QS5sZW5ndGg7RW4rKyl7dmFyIERuPUFbRW5dLEtuPURuLmxheW91dERpbWVuc2lvbnMoZyksU249S24udyxXbj1Lbi5oO1ZlPU1hdGgubWF4KFZlLFNuLFduKX12YXIgcnI9e30sdnI9ZnVuY3Rpb24oaGkpe2lmKHJyW2hpLmlkKCldKXJldHVybiBycltoaS5pZCgpXTtmb3IodmFyIGdzPWF4KGhpKS5kZXB0aCxxaT1oaS5uZWlnaGJvcmhvb2QoKSxTaT0wLFVpPTAsR2E9MDtHYTxxaS5sZW5ndGg7R2ErKyl7dmFyIFlzPXFpW0dhXTtpZighKFlzLmlzRWRnZSgpfHxZcy5pc1BhcmVudCgpfHwhQS5oYXMoWXMpKSl7dmFyIHpzPWF4KFlzKTtpZih6cyE9bnVsbCl7dmFyIEVyPXpzLmluZGV4LFF0PXpzLmRlcHRoO2lmKCEoRXI9PW51bGx8fFF0PT1udWxsKSl7dmFyIGpuPWt0W1F0XS5sZW5ndGg7UXQ8Z3MmJihTaSs9RXIvam4sVWkrKyl9fX19cmV0dXJuIFVpPU1hdGgubWF4KDEsVWkpLFNpPVNpL1VpLFVpPT09MCYmKFNpPTApLHJyW2hpLmlkKCldPVNpLFNpfSx1cj1mdW5jdGlvbihoaSxncyl7dmFyIHFpPXZyKGhpKSxTaT12cihncyksVWk9cWktU2k7cmV0dXJuIFVpPT09MD9vZShoaS5pZCgpLGdzLmlkKCkpOlVpfTtnLmRlcHRoU29ydCE9PXZvaWQgMCYmKHVyPWcuZGVwdGhTb3J0KTtmb3IodmFyIHRyPTA7dHI8a3QubGVuZ3RoO3RyKyspa3RbdHJdLnNvcnQodXIpLGVlKHRyKTtmb3IodmFyIHduPVtdLGdyPTA7Z3I8WnQubGVuZ3RoO2dyKyspd24ucHVzaChadFtncl0pO2t0LnVuc2hpZnQod24pLFZ0KCk7Zm9yKHZhciBmcj0wLEpyPTA7SnI8a3QubGVuZ3RoO0pyKyspZnI9TWF0aC5tYXgoa3RbSnJdLmxlbmd0aCxmcik7dmFyIHdpPXt4OnEueDErcS53LzIseTpxLngxK3EuaC8yfSxLcz1rdC5yZWR1Y2UoZnVuY3Rpb24oQ2ksaGkpe3JldHVybiBNYXRoLm1heChDaSxoaS5sZW5ndGgpfSwwKSxrYT1mdW5jdGlvbihoaSl7dmFyIGdzPWF4KGhpKSxxaT1ncy5kZXB0aCxTaT1ncy5pbmRleCxVaT1rdFtxaV0ubGVuZ3RoLEdhPU1hdGgubWF4KHEudy8oKGcuZ3JpZD9LczpVaSkrMSksVmUpLFlzPU1hdGgubWF4KHEuaC8oa3QubGVuZ3RoKzEpLFZlKSx6cz1NYXRoLm1pbihxLncvMi9rdC5sZW5ndGgscS5oLzIva3QubGVuZ3RoKTtpZih6cz1NYXRoLm1heCh6cyxWZSksZy5jaXJjbGUpe3ZhciBRdD16cypxaSt6cy0oa3QubGVuZ3RoPjAmJmt0WzBdLmxlbmd0aDw9Mz96cy8yOjApLGpuPTIqTWF0aC5QSS9rdFtxaV0ubGVuZ3RoKlNpO3JldHVybiBxaT09PTAmJmt0WzBdLmxlbmd0aD09PTEmJihRdD0xKSx7eDp3aS54K1F0Kk1hdGguY29zKGpuKSx5OndpLnkrUXQqTWF0aC5zaW4oam4pfX1lbHNle3ZhciBFcj17eDp3aS54KyhTaSsxLShVaSsxKS8yKSpHYSx5OihxaSsxKSpZc307cmV0dXJuIEVyfX07cmV0dXJuIFQubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLGthKSx0aGlzfTt2YXIgTUo9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBmOSh5KXt0aGlzLm9wdGlvbnM9bWUoe30sTUoseSl9ZjkucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkseD15LmN5LFQ9Zy5lbGVzLEE9Zy5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFnLmNvdW50ZXJjbG9ja3dpc2U6Zy5jbG9ja3dpc2UsRD1ULm5vZGVzKCkubm90KCI6cGFyZW50Iik7Zy5zb3J0JiYoRD1ELnNvcnQoZy5zb3J0KSk7Zm9yKHZhciBPPVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLCQ9e3g6Ty54MStPLncvMix5Ok8ueTErTy5oLzJ9LHE9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL0QubGVuZ3RoOmcuc3dlZXAsUz1xL01hdGgubWF4KDEsRC5sZW5ndGgtMSksRyxXPTAsZXQ9MDtldDxELmxlbmd0aDtldCsrKXt2YXIgYXQ9RFtldF0sbHQ9YXQubGF5b3V0RGltZW5zaW9ucyhnKSxmdD1sdC53LEF0PWx0Lmg7Vz1NYXRoLm1heChXLGZ0LEF0KX1pZihYKGcucmFkaXVzKT9HPWcucmFkaXVzOkQubGVuZ3RoPD0xP0c9MDpHPU1hdGgubWluKE8uaCxPLncpLzItVyxELmxlbmd0aD4xJiZnLmF2b2lkT3ZlcmxhcCl7Vyo9MS43NTt2YXIga3Q9TWF0aC5jb3MoUyktTWF0aC5jb3MoMCksTXQ9TWF0aC5zaW4oUyktTWF0aC5zaW4oMCksRHQ9TWF0aC5zcXJ0KFcqVy8oa3Qqa3QrTXQqTXQpKTtHPU1hdGgubWF4KER0LEcpfXZhciBqdD1mdW5jdGlvbihLdCx6dCl7dmFyIGVlPWcuc3RhcnRBbmdsZSt6dCpTKihBPzE6LTEpLFZ0PUcqTWF0aC5jb3MoZWUpLGZlPUcqTWF0aC5zaW4oZWUpLGdlPXt4OiQueCtWdCx5OiQueStmZX07cmV0dXJuIGdlfTtyZXR1cm4gVC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsanQpLHRoaXN9O3ZhciBJSj17Zml0OiEwLHBhZGRpbmc6MzAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLGVxdWlkaXN0YW50OiExLG1pbk5vZGVTcGFjaW5nOjEwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGhlaWdodDp2b2lkIDAsd2lkdGg6dm9pZCAwLHNwYWNpbmdGYWN0b3I6dm9pZCAwLGNvbmNlbnRyaWM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGVncmVlKCl9LGxldmVsV2lkdGg6ZnVuY3Rpb24oZyl7cmV0dXJuIGcubWF4RGVncmVlKCkvNH0sYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGcseCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZyx4KXtyZXR1cm4geH19O2Z1bmN0aW9uIExCKHkpe3RoaXMub3B0aW9ucz1tZSh7fSxJSix5KX1MQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMub3B0aW9ucyxnPXkseD1nLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IWcuY291bnRlcmNsb2Nrd2lzZTpnLmNsb2Nrd2lzZSxUPXkuY3ksQT1nLmVsZXMsRD1BLm5vZGVzKCkubm90KCI6cGFyZW50IiksTz1SZChnLmJvdW5kaW5nQm94P2cuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OlQud2lkdGgoKSxoOlQuaGVpZ2h0KCl9KSwkPXt4Ok8ueDErTy53LzIseTpPLnkxK08uaC8yfSxxPVtdLFM9MCxHPTA7RzxELmxlbmd0aDtHKyspe3ZhciBXPURbR10sZXQ9dm9pZCAwO2V0PWcuY29uY2VudHJpYyhXKSxxLnB1c2goe3ZhbHVlOmV0LG5vZGU6V30pLFcuX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPWV0fUQudXBkYXRlU3R5bGUoKTtmb3IodmFyIGF0PTA7YXQ8RC5sZW5ndGg7YXQrKyl7dmFyIGx0PURbYXRdLGZ0PWx0LmxheW91dERpbWVuc2lvbnMoZyk7Uz1NYXRoLm1heChTLGZ0LncsZnQuaCl9cS5zb3J0KGZ1bmN0aW9uKENpLGhpKXtyZXR1cm4gaGkudmFsdWUtQ2kudmFsdWV9KTtmb3IodmFyIEF0PWcubGV2ZWxXaWR0aChEKSxrdD1bW11dLE10PWt0WzBdLER0PTA7RHQ8cS5sZW5ndGg7RHQrKyl7dmFyIGp0PXFbRHRdO2lmKE10Lmxlbmd0aD4wKXt2YXIgWnQ9TWF0aC5hYnMoTXRbMF0udmFsdWUtanQudmFsdWUpO1p0Pj1BdCYmKE10PVtdLGt0LnB1c2goTXQpKX1NdC5wdXNoKGp0KX12YXIgS3Q9UytnLm1pbk5vZGVTcGFjaW5nO2lmKCFnLmF2b2lkT3ZlcmxhcCl7dmFyIHp0PWt0Lmxlbmd0aD4wJiZrdFswXS5sZW5ndGg+MSxlZT1NYXRoLm1pbihPLncsTy5oKS8yLUt0LFZ0PWVlLyhrdC5sZW5ndGgrenQ/MTowKTtLdD1NYXRoLm1pbihLdCxWdCl9Zm9yKHZhciBmZT0wLGdlPTA7Z2U8a3QubGVuZ3RoO2dlKyspe3ZhciBuZT1rdFtnZV0sUGU9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL25lLmxlbmd0aDpnLnN3ZWVwLHBlPW5lLmRUaGV0YT1QZS9NYXRoLm1heCgxLG5lLmxlbmd0aC0xKTtpZihuZS5sZW5ndGg+MSYmZy5hdm9pZE92ZXJsYXApe3ZhciBibj1NYXRoLmNvcyhwZSktTWF0aC5jb3MoMCksemU9TWF0aC5zaW4ocGUpLU1hdGguc2luKDApLFZlPU1hdGguc3FydChLdCpLdC8oYm4qYm4remUqemUpKTtmZT1NYXRoLm1heChWZSxmZSl9bmUucj1mZSxmZSs9S3R9aWYoZy5lcXVpZGlzdGFudCl7Zm9yKHZhciBFbj0wLERuPTAsS249MDtLbjxrdC5sZW5ndGg7S24rKyl7dmFyIFNuPWt0W0tuXSxXbj1Tbi5yLURuO0VuPU1hdGgubWF4KEVuLFduKX1Ebj0wO2Zvcih2YXIgcnI9MDtycjxrdC5sZW5ndGg7cnIrKyl7dmFyIHZyPWt0W3JyXTtycj09PTAmJihEbj12ci5yKSx2ci5yPURuLERuKz1Fbn19Zm9yKHZhciB1cj17fSx0cj0wO3RyPGt0Lmxlbmd0aDt0cisrKWZvcih2YXIgd249a3RbdHJdLGdyPXduLmRUaGV0YSxmcj13bi5yLEpyPTA7SnI8d24ubGVuZ3RoO0pyKyspe3ZhciB3aT13bltKcl0sS3M9Zy5zdGFydEFuZ2xlKyh4PzE6LTEpKmdyKkpyLGthPXt4OiQueCtmcipNYXRoLmNvcyhLcykseTokLnkrZnIqTWF0aC5zaW4oS3MpfTt1clt3aS5ub2RlLmlkKCldPWthfXJldHVybiBBLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZyxmdW5jdGlvbihDaSl7dmFyIGhpPUNpLmlkKCk7cmV0dXJuIHVyW2hpXX0pLHRoaXN9O3ZhciBVTCxESj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxhbmltYXRpb25UaHJlc2hvbGQ6MjUwLHJlZnJlc2g6MjAsZml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyYW5kb21pemU6ITEsY29tcG9uZW50U3BhY2luZzo0MCxub2RlUmVwdWxzaW9uOmZ1bmN0aW9uKGcpe3JldHVybiAyMDQ4fSxub2RlT3ZlcmxhcDo0LGlkZWFsRWRnZUxlbmd0aDpmdW5jdGlvbihnKXtyZXR1cm4gMzJ9LGVkZ2VFbGFzdGljaXR5OmZ1bmN0aW9uKGcpe3JldHVybiAzMn0sbmVzdGluZ0ZhY3RvcjoxLjIsZ3Jhdml0eToxLG51bUl0ZXI6MWUzLGluaXRpYWxUZW1wOjFlMyxjb29saW5nRmFjdG9yOi45OSxtaW5UZW1wOjF9O2Z1bmN0aW9uIGQ5KHkpe3RoaXMub3B0aW9ucz1tZSh7fSxESix5KSx0aGlzLm9wdGlvbnMubGF5b3V0PXRoaXN9ZDkucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuY3kseD10aGlzO3guc3RvcHBlZD0hMSwoeS5hbmltYXRlPT09ITB8fHkuYW5pbWF0ZT09PSExKSYmeC5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0Onh9KSx5LmRlYnVnPT09ITA/VUw9ITA6VUw9ITE7dmFyIFQ9T0ooZyx4LHkpO1VMJiZGSihUKSx5LnJhbmRvbWl6ZSYmQkooVCk7dmFyIEE9ZGcoKSxEPWZ1bmN0aW9uKCl7UkooVCxnLHkpLHkuZml0PT09ITAmJmcuZml0KHkucGFkZGluZyl9LE89ZnVuY3Rpb24oZXQpe3JldHVybiEoeC5zdG9wcGVkfHxldD49eS5udW1JdGVyfHwoakooVCx5KSxULnRlbXBlcmF0dXJlPVQudGVtcGVyYXR1cmUqeS5jb29saW5nRmFjdG9yLFQudGVtcGVyYXR1cmU8eS5taW5UZW1wKSl9LCQ9ZnVuY3Rpb24oKXtpZih5LmFuaW1hdGU9PT0hMHx8eS5hbmltYXRlPT09ITEpRCgpLHgub25lKCJsYXlvdXRzdG9wIix5LnN0b3ApLHguZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Onh9KTtlbHNle3ZhciBldD15LmVsZXMubm9kZXMoKSxhdD1NQihULHksZXQpO2V0LmxheW91dFBvc2l0aW9ucyh4LHksYXQpfX0scT0wLFM9ITA7aWYoeS5hbmltYXRlPT09ITApe3ZhciBHPWZ1bmN0aW9uIFcoKXtmb3IodmFyIGV0PTA7UyYmZXQ8eS5yZWZyZXNoOylTPU8ocSkscSsrLGV0Kys7aWYoIVMpREIoVCx5KSwkKCk7ZWxzZXt2YXIgYXQ9ZGcoKTthdC1BPj15LmFuaW1hdGlvblRocmVzaG9sZCYmRCgpLEZmKFcpfX07RygpfWVsc2V7Zm9yKDtTOylTPU8ocSkscSsrO0RCKFQseSksJCgpfXJldHVybiB0aGlzfSxkOS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxkOS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O3ZhciBPSj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPVQuZWxlcy5lZGdlcygpLEQ9VC5lbGVzLm5vZGVzKCksTz17aXNDb21wb3VuZDpnLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6RC5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOkEuc2l6ZSgpLHRlbXBlcmF0dXJlOlQuaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6Zy53aWR0aCgpLGNsaWVudEhlaWdodDpnLndpZHRoKCksYm91bmRpbmdCb3g6UmQoVC5ib3VuZGluZ0JveD9ULmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpnLndpZHRoKCksaDpnLmhlaWdodCgpfSl9LCQ9VC5lbGVzLmNvbXBvbmVudHMoKSxxPXt9LFM9MDtTPCQubGVuZ3RoO1MrKylmb3IodmFyIEc9JFtTXSxXPTA7VzxHLmxlbmd0aDtXKyspe3ZhciBldD1HW1ddO3FbZXQuaWQoKV09U31mb3IodmFyIFM9MDtTPE8ubm9kZVNpemU7UysrKXt2YXIgYXQ9RFtTXSxsdD1hdC5sYXlvdXREaW1lbnNpb25zKFQpLGZ0PXt9O2Z0LmlzTG9ja2VkPWF0LmxvY2tlZCgpLGZ0LmlkPWF0LmRhdGEoImlkIiksZnQucGFyZW50SWQ9YXQuZGF0YSgicGFyZW50IiksZnQuY21wdElkPXFbYXQuaWQoKV0sZnQuY2hpbGRyZW49W10sZnQucG9zaXRpb25YPWF0LnBvc2l0aW9uKCJ4IiksZnQucG9zaXRpb25ZPWF0LnBvc2l0aW9uKCJ5IiksZnQub2Zmc2V0WD0wLGZ0Lm9mZnNldFk9MCxmdC5oZWlnaHQ9bHQudyxmdC53aWR0aD1sdC5oLGZ0Lm1heFg9ZnQucG9zaXRpb25YK2Z0LndpZHRoLzIsZnQubWluWD1mdC5wb3NpdGlvblgtZnQud2lkdGgvMixmdC5tYXhZPWZ0LnBvc2l0aW9uWStmdC5oZWlnaHQvMixmdC5taW5ZPWZ0LnBvc2l0aW9uWS1mdC5oZWlnaHQvMixmdC5wYWRMZWZ0PXBhcnNlRmxvYXQoYXQuc3R5bGUoInBhZGRpbmciKSksZnQucGFkUmlnaHQ9cGFyc2VGbG9hdChhdC5zdHlsZSgicGFkZGluZyIpKSxmdC5wYWRUb3A9cGFyc2VGbG9hdChhdC5zdHlsZSgicGFkZGluZyIpKSxmdC5wYWRCb3R0b209cGFyc2VGbG9hdChhdC5zdHlsZSgicGFkZGluZyIpKSxmdC5ub2RlUmVwdWxzaW9uPXl0KFQubm9kZVJlcHVsc2lvbik/VC5ub2RlUmVwdWxzaW9uKGF0KTpULm5vZGVSZXB1bHNpb24sTy5sYXlvdXROb2Rlcy5wdXNoKGZ0KSxPLmlkVG9JbmRleFtmdC5pZF09U31mb3IodmFyIEF0PVtdLGt0PTAsTXQ9LTEsRHQ9W10sUz0wO1M8Ty5ub2RlU2l6ZTtTKyspe3ZhciBhdD1PLmxheW91dE5vZGVzW1NdLGp0PWF0LnBhcmVudElkO2p0IT1udWxsP08ubGF5b3V0Tm9kZXNbTy5pZFRvSW5kZXhbanRdXS5jaGlsZHJlbi5wdXNoKGF0LmlkKTooQXRbKytNdF09YXQuaWQsRHQucHVzaChhdC5pZCkpfWZvcihPLmdyYXBoU2V0LnB1c2goRHQpO2t0PD1NdDspe3ZhciBadD1BdFtrdCsrXSxLdD1PLmlkVG9JbmRleFtadF0sZXQ9Ty5sYXlvdXROb2Rlc1tLdF0senQ9ZXQuY2hpbGRyZW47aWYoenQubGVuZ3RoPjApe08uZ3JhcGhTZXQucHVzaCh6dCk7Zm9yKHZhciBTPTA7Uzx6dC5sZW5ndGg7UysrKUF0WysrTXRdPXp0W1NdfX1mb3IodmFyIFM9MDtTPE8uZ3JhcGhTZXQubGVuZ3RoO1MrKylmb3IodmFyIGVlPU8uZ3JhcGhTZXRbU10sVz0wO1c8ZWUubGVuZ3RoO1crKyl7dmFyIFZ0PU8uaWRUb0luZGV4W2VlW1ddXTtPLmluZGV4VG9HcmFwaFtWdF09U31mb3IodmFyIFM9MDtTPE8uZWRnZVNpemU7UysrKXt2YXIgZmU9QVtTXSxnZT17fTtnZS5pZD1mZS5kYXRhKCJpZCIpLGdlLnNvdXJjZUlkPWZlLmRhdGEoInNvdXJjZSIpLGdlLnRhcmdldElkPWZlLmRhdGEoInRhcmdldCIpO3ZhciBuZT15dChULmlkZWFsRWRnZUxlbmd0aCk/VC5pZGVhbEVkZ2VMZW5ndGgoZmUpOlQuaWRlYWxFZGdlTGVuZ3RoLFBlPXl0KFQuZWRnZUVsYXN0aWNpdHkpP1QuZWRnZUVsYXN0aWNpdHkoZmUpOlQuZWRnZUVsYXN0aWNpdHkscGU9Ty5pZFRvSW5kZXhbZ2Uuc291cmNlSWRdLGJuPU8uaWRUb0luZGV4W2dlLnRhcmdldElkXSx6ZT1PLmluZGV4VG9HcmFwaFtwZV0sVmU9Ty5pbmRleFRvR3JhcGhbYm5dO2lmKHplIT1WZSl7Zm9yKHZhciBFbj1OSihnZS5zb3VyY2VJZCxnZS50YXJnZXRJZCxPKSxEbj1PLmdyYXBoU2V0W0VuXSxLbj0wLGZ0PU8ubGF5b3V0Tm9kZXNbcGVdO0RuLmluZGV4T2YoZnQuaWQpPT09LTE7KWZ0PU8ubGF5b3V0Tm9kZXNbTy5pZFRvSW5kZXhbZnQucGFyZW50SWRdXSxLbisrO2ZvcihmdD1PLmxheW91dE5vZGVzW2JuXTtEbi5pbmRleE9mKGZ0LmlkKT09PS0xOylmdD1PLmxheW91dE5vZGVzW08uaWRUb0luZGV4W2Z0LnBhcmVudElkXV0sS24rKztuZSo9S24qVC5uZXN0aW5nRmFjdG9yfWdlLmlkZWFsTGVuZ3RoPW5lLGdlLmVsYXN0aWNpdHk9UGUsTy5sYXlvdXRFZGdlcy5wdXNoKGdlKX1yZXR1cm4gT30sTko9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPVBKKGcseCwwLFQpO3JldHVybiAyPkEuY291bnQ/MDpBLmdyYXBofSxQSj1mdW5jdGlvbiB5KGcseCxULEEpe3ZhciBEPUEuZ3JhcGhTZXRbVF07aWYoLTE8RC5pbmRleE9mKGcpJiYtMTxELmluZGV4T2YoeCkpcmV0dXJue2NvdW50OjIsZ3JhcGg6VH07Zm9yKHZhciBPPTAsJD0wOyQ8RC5sZW5ndGg7JCsrKXt2YXIgcT1EWyRdLFM9QS5pZFRvSW5kZXhbcV0sRz1BLmxheW91dE5vZGVzW1NdLmNoaWxkcmVuO2lmKEcubGVuZ3RoIT09MCl7dmFyIFc9QS5pbmRleFRvR3JhcGhbQS5pZFRvSW5kZXhbR1swXV1dLGV0PXkoZyx4LFcsQSk7aWYoZXQuY291bnQhPT0wKWlmKGV0LmNvdW50PT09MSl7aWYoTysrLE89PT0yKWJyZWFrfWVsc2UgcmV0dXJuIGV0fX1yZXR1cm57Y291bnQ6TyxncmFwaDpUfX0sRkosQko9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9Zy5jbGllbnRXaWR0aCxBPWcuY2xpZW50SGVpZ2h0LEQ9MDtEPGcubm9kZVNpemU7RCsrKXt2YXIgTz1nLmxheW91dE5vZGVzW0RdO08uY2hpbGRyZW4ubGVuZ3RoPT09MCYmIU8uaXNMb2NrZWQmJihPLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKlQsTy5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSpBKX19LE1CPWZ1bmN0aW9uKGcseCxUKXt2YXIgQT1nLmJvdW5kaW5nQm94LEQ9e3gxOjEvMCx4MjotMS8wLHkxOjEvMCx5MjotMS8wfTtyZXR1cm4geC5ib3VuZGluZ0JveCYmKFQuZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgJD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W08uZGF0YSgiaWQiKV1dO0QueDE9TWF0aC5taW4oRC54MSwkLnBvc2l0aW9uWCksRC54Mj1NYXRoLm1heChELngyLCQucG9zaXRpb25YKSxELnkxPU1hdGgubWluKEQueTEsJC5wb3NpdGlvblkpLEQueTI9TWF0aC5tYXgoRC55MiwkLnBvc2l0aW9uWSl9KSxELnc9RC54Mi1ELngxLEQuaD1ELnkyLUQueTEpLGZ1bmN0aW9uKE8sJCl7dmFyIHE9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtPLmRhdGEoImlkIildXTtpZih4LmJvdW5kaW5nQm94KXt2YXIgUz0ocS5wb3NpdGlvblgtRC54MSkvRC53LEc9KHEucG9zaXRpb25ZLUQueTEpL0QuaDtyZXR1cm57eDpBLngxK1MqQS53LHk6QS55MStHKkEuaH19ZWxzZSByZXR1cm57eDpxLnBvc2l0aW9uWCx5OnEucG9zaXRpb25ZfX19LFJKPWZ1bmN0aW9uKGcseCxUKXt2YXIgQT1ULmxheW91dCxEPVQuZWxlcy5ub2RlcygpLE89TUIoZyxULEQpO0QucG9zaXRpb25zKE8pLGcucmVhZHkhPT0hMCYmKGcucmVhZHk9ITAsQS5vbmUoImxheW91dHJlYWR5IixULnJlYWR5KSxBLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sako9ZnVuY3Rpb24oZyx4LFQpeyRKKGcseCksSEooZyksR0ooZyx4KSxWSihnKSxVSihnKX0sJEo9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPGcuZ3JhcGhTZXQubGVuZ3RoO1QrKylmb3IodmFyIEE9Zy5ncmFwaFNldFtUXSxEPUEubGVuZ3RoLE89MDtPPEQ7TysrKWZvcih2YXIgJD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W0FbT11dXSxxPU8rMTtxPEQ7cSsrKXt2YXIgUz1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W0FbcV1dXTt6SigkLFMsZyx4KX19LElCPWZ1bmN0aW9uKGcpe3JldHVybi1nKzIqZypNYXRoLnJhbmRvbSgpfSx6Sj1mdW5jdGlvbihnLHgsVCxBKXt2YXIgRD1nLmNtcHRJZCxPPXguY21wdElkO2lmKCEoRCE9PU8mJiFULmlzQ29tcG91bmQpKXt2YXIgJD14LnBvc2l0aW9uWC1nLnBvc2l0aW9uWCxxPXgucG9zaXRpb25ZLWcucG9zaXRpb25ZLFM9MTskPT09MCYmcT09PTAmJigkPUlCKFMpLHE9SUIoUykpO3ZhciBHPXFKKGcseCwkLHEpO2lmKEc+MCl2YXIgVz1BLm5vZGVPdmVybGFwKkcsZXQ9TWF0aC5zcXJ0KCQqJCtxKnEpLGF0PVcqJC9ldCxsdD1XKnEvZXQ7ZWxzZSB2YXIgZnQ9ZzkoZywkLHEpLEF0PWc5KHgsLTEqJCwtMSpxKSxrdD1BdC54LWZ0LngsTXQ9QXQueS1mdC55LER0PWt0Kmt0K010Kk10LGV0PU1hdGguc3FydChEdCksVz0oZy5ub2RlUmVwdWxzaW9uK3gubm9kZVJlcHVsc2lvbikvRHQsYXQ9VyprdC9ldCxsdD1XKk10L2V0O2cuaXNMb2NrZWR8fChnLm9mZnNldFgtPWF0LGcub2Zmc2V0WS09bHQpLHguaXNMb2NrZWR8fCh4Lm9mZnNldFgrPWF0LHgub2Zmc2V0WSs9bHQpfX0scUo9ZnVuY3Rpb24oZyx4LFQsQSl7aWYoVD4wKXZhciBEPWcubWF4WC14Lm1pblg7ZWxzZSB2YXIgRD14Lm1heFgtZy5taW5YO2lmKEE+MCl2YXIgTz1nLm1heFkteC5taW5ZO2Vsc2UgdmFyIE89eC5tYXhZLWcubWluWTtyZXR1cm4gRD49MCYmTz49MD9NYXRoLnNxcnQoRCpEK08qTyk6MH0sZzk9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPWcucG9zaXRpb25YLEQ9Zy5wb3NpdGlvblksTz1nLmhlaWdodHx8MSwkPWcud2lkdGh8fDEscT1UL3gsUz1PLyQsRz17fTtyZXR1cm4geD09PTAmJjA8VHx8eD09PTAmJjA+VD8oRy54PUEsRy55PUQrTy8yLEcpOjA8eCYmLTEqUzw9cSYmcTw9Uz8oRy54PUErJC8yLEcueT1EKyQqVC8yL3gsRyk6MD54JiYtMSpTPD1xJiZxPD1TPyhHLng9QS0kLzIsRy55PUQtJCpULzIveCxHKTowPFQmJihxPD0tMSpTfHxxPj1TKT8oRy54PUErTyp4LzIvVCxHLnk9RCtPLzIsRyk6KDA+VCYmKHE8PS0xKlN8fHE+PVMpJiYoRy54PUEtTyp4LzIvVCxHLnk9RC1PLzIpLEcpfSxISj1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5lZGdlU2l6ZTtUKyspe3ZhciBBPWcubGF5b3V0RWRnZXNbVF0sRD1nLmlkVG9JbmRleFtBLnNvdXJjZUlkXSxPPWcubGF5b3V0Tm9kZXNbRF0sJD1nLmlkVG9JbmRleFtBLnRhcmdldElkXSxxPWcubGF5b3V0Tm9kZXNbJF0sUz1xLnBvc2l0aW9uWC1PLnBvc2l0aW9uWCxHPXEucG9zaXRpb25ZLU8ucG9zaXRpb25ZO2lmKCEoUz09PTAmJkc9PT0wKSl7dmFyIFc9ZzkoTyxTLEcpLGV0PWc5KHEsLTEqUywtMSpHKSxhdD1ldC54LVcueCxsdD1ldC55LVcueSxmdD1NYXRoLnNxcnQoYXQqYXQrbHQqbHQpLEF0PU1hdGgucG93KEEuaWRlYWxMZW5ndGgtZnQsMikvQS5lbGFzdGljaXR5O2lmKGZ0IT09MCl2YXIga3Q9QXQqYXQvZnQsTXQ9QXQqbHQvZnQ7ZWxzZSB2YXIga3Q9MCxNdD0wO08uaXNMb2NrZWR8fChPLm9mZnNldFgrPWt0LE8ub2Zmc2V0WSs9TXQpLHEuaXNMb2NrZWR8fChxLm9mZnNldFgtPWt0LHEub2Zmc2V0WS09TXQpfX19LEdKPWZ1bmN0aW9uKGcseCl7aWYoeC5ncmF2aXR5IT09MClmb3IodmFyIFQ9MSxBPTA7QTxnLmdyYXBoU2V0Lmxlbmd0aDtBKyspe3ZhciBEPWcuZ3JhcGhTZXRbQV0sTz1ELmxlbmd0aDtpZihBPT09MCl2YXIgJD1nLmNsaWVudEhlaWdodC8yLHE9Zy5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIFM9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtEWzBdXV0sRz1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1MucGFyZW50SWRdXSwkPUcucG9zaXRpb25YLHE9Ry5wb3NpdGlvblk7Zm9yKHZhciBXPTA7VzxPO1crKyl7dmFyIGV0PWcubGF5b3V0Tm9kZXNbZy5pZFRvSW5kZXhbRFtXXV1dO2lmKCFldC5pc0xvY2tlZCl7dmFyIGF0PSQtZXQucG9zaXRpb25YLGx0PXEtZXQucG9zaXRpb25ZLGZ0PU1hdGguc3FydChhdCphdCtsdCpsdCk7aWYoZnQ+VCl7dmFyIEF0PXguZ3Jhdml0eSphdC9mdCxrdD14LmdyYXZpdHkqbHQvZnQ7ZXQub2Zmc2V0WCs9QXQsZXQub2Zmc2V0WSs9a3R9fX19fSxWSj1mdW5jdGlvbihnLHgpe3ZhciBUPVtdLEE9MCxEPS0xO2ZvcihULnB1c2guYXBwbHkoVCxnLmdyYXBoU2V0WzBdKSxEKz1nLmdyYXBoU2V0WzBdLmxlbmd0aDtBPD1EOyl7dmFyIE89VFtBKytdLCQ9Zy5pZFRvSW5kZXhbT10scT1nLmxheW91dE5vZGVzWyRdLFM9cS5jaGlsZHJlbjtpZigwPFMubGVuZ3RoJiYhcS5pc0xvY2tlZCl7Zm9yKHZhciBHPXEub2Zmc2V0WCxXPXEub2Zmc2V0WSxldD0wO2V0PFMubGVuZ3RoO2V0Kyspe3ZhciBhdD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1NbZXRdXV07YXQub2Zmc2V0WCs9RyxhdC5vZmZzZXRZKz1XLFRbKytEXT1TW2V0XX1xLm9mZnNldFg9MCxxLm9mZnNldFk9MH19fSxVSj1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5ub2RlU2l6ZTtUKyspe3ZhciBBPWcubGF5b3V0Tm9kZXNbVF07MDxBLmNoaWxkcmVuLmxlbmd0aCYmKEEubWF4WD12b2lkIDAsQS5taW5YPXZvaWQgMCxBLm1heFk9dm9pZCAwLEEubWluWT12b2lkIDApfWZvcih2YXIgVD0wO1Q8Zy5ub2RlU2l6ZTtUKyspe3ZhciBBPWcubGF5b3V0Tm9kZXNbVF07aWYoISgwPEEuY2hpbGRyZW4ubGVuZ3RofHxBLmlzTG9ja2VkKSl7dmFyIEQ9V0ooQS5vZmZzZXRYLEEub2Zmc2V0WSxnLnRlbXBlcmF0dXJlKTtBLnBvc2l0aW9uWCs9RC54LEEucG9zaXRpb25ZKz1ELnksQS5vZmZzZXRYPTAsQS5vZmZzZXRZPTAsQS5taW5YPUEucG9zaXRpb25YLUEud2lkdGgsQS5tYXhYPUEucG9zaXRpb25YK0Eud2lkdGgsQS5taW5ZPUEucG9zaXRpb25ZLUEuaGVpZ2h0LEEubWF4WT1BLnBvc2l0aW9uWStBLmhlaWdodCxLSihBLGcpfX1mb3IodmFyIFQ9MDtUPGcubm9kZVNpemU7VCsrKXt2YXIgQT1nLmxheW91dE5vZGVzW1RdOzA8QS5jaGlsZHJlbi5sZW5ndGgmJiFBLmlzTG9ja2VkJiYoQS5wb3NpdGlvblg9KEEubWF4WCtBLm1pblgpLzIsQS5wb3NpdGlvblk9KEEubWF4WStBLm1pblkpLzIsQS53aWR0aD1BLm1heFgtQS5taW5YLEEuaGVpZ2h0PUEubWF4WS1BLm1pblkpfX0sV0o9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPU1hdGguc3FydChnKmcreCp4KTtpZihBPlQpdmFyIEQ9e3g6VCpnL0EseTpUKngvQX07ZWxzZSB2YXIgRD17eDpnLHk6eH07cmV0dXJuIER9LEtKPWZ1bmN0aW9uIHkoZyx4KXt2YXIgVD1nLnBhcmVudElkO2lmKFQhPW51bGwpe3ZhciBBPXgubGF5b3V0Tm9kZXNbeC5pZFRvSW5kZXhbVF1dLEQ9ITE7aWYoKEEubWF4WD09bnVsbHx8Zy5tYXhYK0EucGFkUmlnaHQ+QS5tYXhYKSYmKEEubWF4WD1nLm1heFgrQS5wYWRSaWdodCxEPSEwKSwoQS5taW5YPT1udWxsfHxnLm1pblgtQS5wYWRMZWZ0PEEubWluWCkmJihBLm1pblg9Zy5taW5YLUEucGFkTGVmdCxEPSEwKSwoQS5tYXhZPT1udWxsfHxnLm1heFkrQS5wYWRCb3R0b20+QS5tYXhZKSYmKEEubWF4WT1nLm1heFkrQS5wYWRCb3R0b20sRD0hMCksKEEubWluWT09bnVsbHx8Zy5taW5ZLUEucGFkVG9wPEEubWluWSkmJihBLm1pblk9Zy5taW5ZLUEucGFkVG9wLEQ9ITApLEQpcmV0dXJuIHkoQSx4KX19LERCPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPWcubGF5b3V0Tm9kZXMsQT1bXSxEPTA7RDxULmxlbmd0aDtEKyspe3ZhciBPPVRbRF0sJD1PLmNtcHRJZCxxPUFbJF09QVskXXx8W107cS5wdXNoKE8pfWZvcih2YXIgUz0wLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIEc9QVtEXTtpZihHKXtHLngxPTEvMCxHLngyPS0xLzAsRy55MT0xLzAsRy55Mj0tMS8wO2Zvcih2YXIgVz0wO1c8Ry5sZW5ndGg7VysrKXt2YXIgZXQ9R1tXXTtHLngxPU1hdGgubWluKEcueDEsZXQucG9zaXRpb25YLWV0LndpZHRoLzIpLEcueDI9TWF0aC5tYXgoRy54MixldC5wb3NpdGlvblgrZXQud2lkdGgvMiksRy55MT1NYXRoLm1pbihHLnkxLGV0LnBvc2l0aW9uWS1ldC5oZWlnaHQvMiksRy55Mj1NYXRoLm1heChHLnkyLGV0LnBvc2l0aW9uWStldC5oZWlnaHQvMil9Ry53PUcueDItRy54MSxHLmg9Ry55Mi1HLnkxLFMrPUcudypHLmh9fUEuc29ydChmdW5jdGlvbihNdCxEdCl7cmV0dXJuIER0LncqRHQuaC1NdC53Kk10Lmh9KTtmb3IodmFyIGF0PTAsbHQ9MCxmdD0wLEF0PTAsa3Q9TWF0aC5zcXJ0KFMpKmcuY2xpZW50V2lkdGgvZy5jbGllbnRIZWlnaHQsRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgRz1BW0RdO2lmKEcpe2Zvcih2YXIgVz0wO1c8Ry5sZW5ndGg7VysrKXt2YXIgZXQ9R1tXXTtldC5pc0xvY2tlZHx8KGV0LnBvc2l0aW9uWCs9YXQtRy54MSxldC5wb3NpdGlvblkrPWx0LUcueTEpfWF0Kz1HLncreC5jb21wb25lbnRTcGFjaW5nLGZ0Kz1HLncreC5jb21wb25lbnRTcGFjaW5nLEF0PU1hdGgubWF4KEF0LEcuaCksZnQ+a3QmJihsdCs9QXQreC5jb21wb25lbnRTcGFjaW5nLGF0PTAsZnQ9MCxBdD0wKX19fSxZSj17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxhdm9pZE92ZXJsYXBQYWRkaW5nOjEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxzcGFjaW5nRmFjdG9yOnZvaWQgMCxjb25kZW5zZTohMSxyb3dzOnZvaWQgMCxjb2xzOnZvaWQgMCxwb3NpdGlvbjpmdW5jdGlvbihnKXt9LHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBPQih5KXt0aGlzLm9wdGlvbnM9bWUoe30sWUoseSl9T0IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkseD15LmN5LFQ9Zy5lbGVzLEE9VC5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2cuc29ydCYmKEE9QS5zb3J0KGcuc29ydCkpO3ZhciBEPVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pO2lmKEQuaD09PTB8fEQudz09PTApVC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsZnVuY3Rpb24ocnIpe3JldHVybnt4OkQueDEseTpELnkxfX0pO2Vsc2V7dmFyIE89QS5zaXplKCksJD1NYXRoLnNxcnQoTypELmgvRC53KSxxPU1hdGgucm91bmQoJCksUz1NYXRoLnJvdW5kKEQudy9ELmgqJCksRz1mdW5jdGlvbih2cil7aWYodnI9PW51bGwpcmV0dXJuIE1hdGgubWluKHEsUyk7dmFyIHVyPU1hdGgubWluKHEsUyk7dXI9PXE/cT12cjpTPXZyfSxXPWZ1bmN0aW9uKHZyKXtpZih2cj09bnVsbClyZXR1cm4gTWF0aC5tYXgocSxTKTt2YXIgdXI9TWF0aC5tYXgocSxTKTt1cj09cT9xPXZyOlM9dnJ9LGV0PWcucm93cyxhdD1nLmNvbHMhPW51bGw/Zy5jb2xzOmcuY29sdW1ucztpZihldCE9bnVsbCYmYXQhPW51bGwpcT1ldCxTPWF0O2Vsc2UgaWYoZXQhPW51bGwmJmF0PT1udWxsKXE9ZXQsUz1NYXRoLmNlaWwoTy9xKTtlbHNlIGlmKGV0PT1udWxsJiZhdCE9bnVsbClTPWF0LHE9TWF0aC5jZWlsKE8vUyk7ZWxzZSBpZihTKnE+Tyl7dmFyIGx0PUcoKSxmdD1XKCk7KGx0LTEpKmZ0Pj1PP0cobHQtMSk6KGZ0LTEpKmx0Pj1PJiZXKGZ0LTEpfWVsc2UgZm9yKDtTKnE8Tzspe3ZhciBBdD1HKCksa3Q9VygpOyhrdCsxKSpBdD49Tz9XKGt0KzEpOkcoQXQrMSl9dmFyIE10PUQudy9TLER0PUQuaC9xO2lmKGcuY29uZGVuc2UmJihNdD0wLER0PTApLGcuYXZvaWRPdmVybGFwKWZvcih2YXIganQ9MDtqdDxBLmxlbmd0aDtqdCsrKXt2YXIgWnQ9QVtqdF0sS3Q9WnQuX3ByaXZhdGUucG9zaXRpb247KEt0Lng9PW51bGx8fEt0Lnk9PW51bGwpJiYoS3QueD0wLEt0Lnk9MCk7dmFyIHp0PVp0LmxheW91dERpbWVuc2lvbnMoZyksZWU9Zy5hdm9pZE92ZXJsYXBQYWRkaW5nLFZ0PXp0LncrZWUsZmU9enQuaCtlZTtNdD1NYXRoLm1heChNdCxWdCksRHQ9TWF0aC5tYXgoRHQsZmUpfWZvcih2YXIgZ2U9e30sbmU9ZnVuY3Rpb24odnIsdXIpe3JldHVybiEhZ2VbImMtIit2cisiLSIrdXJdfSxQZT1mdW5jdGlvbih2cix1cil7Z2VbImMtIit2cisiLSIrdXJdPSEwfSxwZT0wLGJuPTAsemU9ZnVuY3Rpb24oKXtibisrLGJuPj1TJiYoYm49MCxwZSsrKX0sVmU9e30sRW49MDtFbjxBLmxlbmd0aDtFbisrKXt2YXIgRG49QVtFbl0sS249Zy5wb3NpdGlvbihEbik7aWYoS24mJihLbi5yb3chPT12b2lkIDB8fEtuLmNvbCE9PXZvaWQgMCkpe3ZhciBTbj17cm93OktuLnJvdyxjb2w6S24uY29sfTtpZihTbi5jb2w9PT12b2lkIDApZm9yKFNuLmNvbD0wO25lKFNuLnJvdyxTbi5jb2wpOylTbi5jb2wrKztlbHNlIGlmKFNuLnJvdz09PXZvaWQgMClmb3IoU24ucm93PTA7bmUoU24ucm93LFNuLmNvbCk7KVNuLnJvdysrO1ZlW0RuLmlkKCldPVNuLFBlKFNuLnJvdyxTbi5jb2wpfX12YXIgV249ZnVuY3Rpb24odnIsdXIpe3ZhciB0cix3bjtpZih2ci5sb2NrZWQoKXx8dnIuaXNQYXJlbnQoKSlyZXR1cm4hMTt2YXIgZ3I9VmVbdnIuaWQoKV07aWYoZ3IpdHI9Z3IuY29sKk10K010LzIrRC54MSx3bj1nci5yb3cqRHQrRHQvMitELnkxO2Vsc2V7Zm9yKDtuZShwZSxibik7KXplKCk7dHI9Ym4qTXQrTXQvMitELngxLHduPXBlKkR0K0R0LzIrRC55MSxQZShwZSxibiksemUoKX1yZXR1cm57eDp0cix5OndufX07QS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLFduKX1yZXR1cm4gdGhpc307dmFyIFhKPXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFdMKHkpe3RoaXMub3B0aW9ucz1tZSh7fSxYSix5KX1XTC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5vcHRpb25zLGc9eS5lbGVzLHg9dGhpcztyZXR1cm4geS5jeSx4LmVtaXQoImxheW91dHN0YXJ0IiksZy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbigpe3JldHVybnt4OjAseTowfX0pLHgub25lKCJsYXlvdXRyZWFkeSIseS5yZWFkeSkseC5lbWl0KCJsYXlvdXRyZWFkeSIpLHgub25lKCJsYXlvdXRzdG9wIix5LnN0b3ApLHguZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9LFdMLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3ZhciBRSj17cG9zaXRpb25zOnZvaWQgMCx6b29tOnZvaWQgMCxwYW46dm9pZCAwLGZpdDohMCxwYWRkaW5nOjMwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBOQih5KXt0aGlzLm9wdGlvbnM9bWUoe30sUUoseSl9TkIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuZWxlcyx4PWcubm9kZXMoKSxUPXl0KHkucG9zaXRpb25zKTtmdW5jdGlvbiBBKEQpe2lmKHkucG9zaXRpb25zPT1udWxsKXJldHVybiBiWShELnBvc2l0aW9uKCkpO2lmKFQpcmV0dXJuIHkucG9zaXRpb25zKEQpO3ZhciBPPXkucG9zaXRpb25zW0QuX3ByaXZhdGUuZGF0YS5pZF07cmV0dXJuIE8/P251bGx9cmV0dXJuIHgubGF5b3V0UG9zaXRpb25zKHRoaXMseSxmdW5jdGlvbihELE8pe3ZhciAkPUEoRCk7cmV0dXJuIEQubG9ja2VkKCl8fCQ9PW51bGw/ITE6JH0pLHRoaXN9O3ZhciBaSj17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBQQih5KXt0aGlzLm9wdGlvbnM9bWUoe30sWkoseSl9UEIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuY3kseD15LmVsZXMsVD1SZCh5LmJvdW5kaW5nQm94P3kuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Omcud2lkdGgoKSxoOmcuaGVpZ2h0KCl9KSxBPWZ1bmN0aW9uKE8sJCl7cmV0dXJue3g6VC54MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqVC53KSx5OlQueTErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKlQuaCl9fTtyZXR1cm4geC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLHksQSksdGhpc307dmFyIEpKPVt7bmFtZToiYnJlYWR0aGZpcnN0IixpbXBsOkFCfSx7bmFtZToiY2lyY2xlIixpbXBsOmY5fSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDpMQn0se25hbWU6ImNvc2UiLGltcGw6ZDl9LHtuYW1lOiJncmlkIixpbXBsOk9CfSx7bmFtZToibnVsbCIsaW1wbDpXTH0se25hbWU6InByZXNldCIsaW1wbDpOQn0se25hbWU6InJhbmRvbSIsaW1wbDpQQn1dO2Z1bmN0aW9uIEZCKHkpe3RoaXMub3B0aW9ucz15LHRoaXMubm90aWZpY2F0aW9ucz0wfXZhciBCQj1mdW5jdGlvbigpe30sUkI9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9O0ZCLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOkJCLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OkJCLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOlJCLGpwZzpSQn07dmFyIEtMPXt9O0tMLmFycm93U2hhcGVXaWR0aD0uMyxLTC5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5hcnJvd1NoYXBlcz17fSxnPXRoaXMseD1mdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PWF0LngtVy8yLWZ0LGt0PWF0LngrVy8yK2Z0LE10PWF0LnktVy8yLWZ0LER0PWF0LnkrVy8yK2Z0LGp0PUF0PD1TJiZTPD1rdCYmTXQ8PUcmJkc8PUR0O3JldHVybiBqdH0sVD1mdW5jdGlvbihTLEcsVyxldCxhdCl7dmFyIGx0PVMqTWF0aC5jb3MoZXQpLUcqTWF0aC5zaW4oZXQpLGZ0PVMqTWF0aC5zaW4oZXQpK0cqTWF0aC5jb3MoZXQpLEF0PWx0Klcsa3Q9ZnQqVyxNdD1BdCthdC54LER0PWt0K2F0Lnk7cmV0dXJue3g6TXQseTpEdH19LEE9ZnVuY3Rpb24oUyxHLFcsZXQpe2Zvcih2YXIgYXQ9W10sbHQ9MDtsdDxTLmxlbmd0aDtsdCs9Mil7dmFyIGZ0PVNbbHRdLEF0PVNbbHQrMV07YXQucHVzaChUKGZ0LEF0LEcsVyxldCkpfXJldHVybiBhdH0sRD1mdW5jdGlvbihTKXtmb3IodmFyIEc9W10sVz0wO1c8Uy5sZW5ndGg7VysrKXt2YXIgZXQ9U1tXXTtHLnB1c2goZXQueCxldC55KX1yZXR1cm4gR30sTz1mdW5jdGlvbihTKXtyZXR1cm4gUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS5wZlZhbHVlKjJ9LCQ9ZnVuY3Rpb24oUyxHKXttdChHKSYmKEc9eVtHXSkseVtTXT1tZSh7bmFtZTpTLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihldCxhdCxsdCxmdCxBdCxrdCl7dmFyIE10PUQoQSh0aGlzLnBvaW50cyxsdCsyKmt0LGZ0LEF0KSksRHQ9amQoZXQsYXQsTXQpO3JldHVybiBEdH0scm91Z2hDb2xsaWRlOngsZHJhdzpmdW5jdGlvbihldCxhdCxsdCxmdCl7dmFyIEF0PUEodGhpcy5wb2ludHMsYXQsbHQsZnQpO2cuYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShldCxBdCl9LHNwYWNpbmc6ZnVuY3Rpb24oZXQpe3JldHVybiAwfSxnYXA6T30sRyl9OyQoIm5vbmUiLHtjb2xsaWRlOmdtLHJvdWdoQ29sbGlkZTpnbSxkcmF3OndMLHNwYWNpbmc6Z2csZ2FwOmdnfSksJCgidHJpYW5nbGUiLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLCQoImFycm93IiwidHJpYW5nbGUiKSwkKCJ0cmlhbmdsZS1iYWNrY3VydmUiLHtwb2ludHM6eS50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTp4LGRyYXc6ZnVuY3Rpb24oUyxHLFcsZXQsYXQpe3ZhciBsdD1BKHRoaXMucG9pbnRzLEcsVyxldCksZnQ9dGhpcy5jb250cm9sUG9pbnQsQXQ9VChmdFswXSxmdFsxXSxHLFcsZXQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGx0LEF0KX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBPKFMpKi44fX0pLCQoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpmdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PUQoQSh0aGlzLnBvaW50cyxXKzIqZnQsZXQsYXQpKSxrdD1EKEEodGhpcy5wb2ludHNUZWUsVysyKmZ0LGV0LGF0KSksTXQ9amQoUyxHLEF0KXx8amQoUyxHLGt0KTtyZXR1cm4gTXR9LGRyYXc6ZnVuY3Rpb24oUyxHLFcsZXQsYXQpe3ZhciBsdD1BKHRoaXMucG9pbnRzLEcsVyxldCksZnQ9QSh0aGlzLnBvaW50c1RlZSxHLFcsZXQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGx0LGZ0KX19KSwkKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PWF0LGt0PU1hdGgucG93KEF0LngtUywyKStNYXRoLnBvdyhBdC55LUcsMik8PU1hdGgucG93KChXKzIqZnQpKnRoaXMucmFkaXVzLDIpLE10PUQoQSh0aGlzLnBvaW50cyxXKzIqZnQsZXQsYXQpKTtyZXR1cm4gamQoUyxHLE10KXx8a3R9LGRyYXc6ZnVuY3Rpb24oUyxHLFcsZXQsYXQpe3ZhciBsdD1BKHRoaXMucG9pbnRzVHIsRyxXLGV0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxsdCxldC54LGV0LnksdGhpcy5yYWRpdXMqRyl9LHNwYWNpbmc6ZnVuY3Rpb24oUyl7cmV0dXJuIGcuZ2V0QXJyb3dXaWR0aChTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLFMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c319KSwkKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihTLEcpe3ZhciBXPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLGV0PUcvUyxhdD0zLGx0PTU7cmV0dXJuIFdbYXRdPVdbYXRdLWV0LFdbbHRdPVdbbHRdLWV0LFd9LGNvbGxpZGU6ZnVuY3Rpb24oUyxHLFcsZXQsYXQsbHQsZnQpe3ZhciBBdD1EKEEodGhpcy5wb2ludHMsVysyKmZ0LGV0LGF0KSksa3Q9RChBKHRoaXMuY3Jvc3NMaW5lUHRzKFcsbHQpLFcrMipmdCxldCxhdCkpLE10PWpkKFMsRyxBdCl8fGpkKFMsRyxrdCk7cmV0dXJuIE10fSxkcmF3OmZ1bmN0aW9uKFMsRyxXLGV0LGF0KXt2YXIgbHQ9QSh0aGlzLnBvaW50cyxHLFcsZXQpLGZ0PUEodGhpcy5jcm9zc0xpbmVQdHMoRyxhdCksRyxXLGV0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxsdCxmdCl9fSksJCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gTyhTKSouNTI1fX0pLCQoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PWF0LGt0PU1hdGgucG93KEF0LngtUywyKStNYXRoLnBvdyhBdC55LUcsMik8PU1hdGgucG93KChXKzIqZnQpKnRoaXMucmFkaXVzLDIpO3JldHVybiBrdH0sZHJhdzpmdW5jdGlvbihTLEcsVyxldCxhdCl7Zy5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKFMsZXQueCxldC55LHRoaXMucmFkaXVzKkcpfSxzcGFjaW5nOmZ1bmN0aW9uKFMpe3JldHVybiBnLmdldEFycm93V2lkdGgoUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpmdW5jdGlvbihTKXtyZXR1cm4gMX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiAxfX0pLCQoInNxdWFyZSIse3BvaW50czpbLS4xNSwwLC4xNSwwLC4xNSwtLjMsLS4xNSwtLjNdfSksJCgiZGlhbW9uZCIse3BvaW50czpbLS4xNSwtLjE1LDAsLS4zLC4xNSwtLjE1LDAsMF0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKlMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pLCQoImNoZXZyb24iLHtwb2ludHM6WzAsMCwtLjE1LC0uMTUsLS4xLC0uMiwwLC0uMSwuMSwtLjIsLjE1LC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gLjk1KlMucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqUy5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9fSl9O3ZhciBMMz17fTtMMy5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5jeSxUPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEE9VFswXSxEPVRbMV0sTz1UWzRdLCQ9eC5wYW4oKSxxPXguem9vbSgpLFM9KCh5LUEpL08tJC54KS9xLEc9KChnLUQpL08tJC55KS9xO3JldHVybltTLEddfSxMMy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgeT10aGlzLmNvbnRhaW5lcixnPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseD1SLmdldENvbXB1dGVkU3R5bGUoeSksVD1mdW5jdGlvbihrdCl7cmV0dXJuIHBhcnNlRmxvYXQoeC5nZXRQcm9wZXJ0eVZhbHVlKGt0KSl9LEE9e2xlZnQ6VCgicGFkZGluZy1sZWZ0IikscmlnaHQ6VCgicGFkZGluZy1yaWdodCIpLHRvcDpUKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpUKCJwYWRkaW5nLWJvdHRvbSIpfSxEPXtsZWZ0OlQoImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6VCgiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOlQoImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206VCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxPPXkuY2xpZW50V2lkdGgsJD15LmNsaWVudEhlaWdodCxxPUEubGVmdCtBLnJpZ2h0LFM9QS50b3ArQS5ib3R0b20sRz1ELmxlZnQrRC5yaWdodCxXPWcud2lkdGgvKE8rRyksZXQ9Ty1xLGF0PSQtUyxsdD1nLmxlZnQrQS5sZWZ0K0QubGVmdCxmdD1nLnRvcCtBLnRvcCtELnRvcDtyZXR1cm4gdGhpcy5jb250YWluZXJCQj1bbHQsZnQsZXQsYXQsV119LEwzLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH0sTDMuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeSxnLHgsVClbMF19LEwzLmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcyxEPXRoaXMsTz1ELmdldENhY2hlZFpTb3J0ZWRFbGVzKCksJD1bXSxxPUQuY3kuem9vbSgpLFM9RC5jeS5oYXNDb21wb3VuZE5vZGVzKCksRz0oVD8yNDo4KS9xLFc9KFQ/ODoyKS9xLGV0PShUPzg6MikvcSxhdD0xLzAsbHQsZnQ7eCYmKE89Ty5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gQXQoenQsZWUpe2lmKHp0LmlzTm9kZSgpKXtpZihmdClyZXR1cm47ZnQ9enQsJC5wdXNoKHp0KX1pZih6dC5pc0VkZ2UoKSYmKGVlPT1udWxsfHxlZTxhdCkpaWYobHQpe2lmKGx0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09enQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJmx0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09enQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgVnQ9MDtWdDwkLmxlbmd0aDtWdCsrKWlmKCRbVnRdLmlzRWRnZSgpKXskW1Z0XT16dCxsdD16dCxhdD1lZT8/YXQ7YnJlYWt9fX1lbHNlICQucHVzaCh6dCksbHQ9enQsYXQ9ZWU/P2F0fWZ1bmN0aW9uIGt0KHp0KXt2YXIgZWU9enQub3V0ZXJXaWR0aCgpKzIqVyxWdD16dC5vdXRlckhlaWdodCgpKzIqVyxmZT1lZS8yLGdlPVZ0LzIsbmU9enQucG9zaXRpb24oKTtpZihuZS54LWZlPD15JiZ5PD1uZS54K2ZlJiZuZS55LWdlPD1nJiZnPD1uZS55K2dlKXt2YXIgUGU9RC5ub2RlU2hhcGVzW0EuZ2V0Tm9kZVNoYXBlKHp0KV07aWYoUGUuY2hlY2tQb2ludCh5LGcsMCxlZSxWdCxuZS54LG5lLnkpKXJldHVybiBBdCh6dCwwKSwhMH19ZnVuY3Rpb24gTXQoenQpe3ZhciBlZT16dC5fcHJpdmF0ZSxWdD1lZS5yc2NyYXRjaCxmZT16dC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxnZT16dC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsbmU9ZmUvMitHLFBlPW5lKm5lLHBlPW5lKjIsRW49ZWUuc291cmNlLERuPWVlLnRhcmdldCxibjtpZihWdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fFZ0LmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8VnQuZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIHplPVZ0LmFsbHB0cyxWZT0wO1ZlKzM8emUubGVuZ3RoO1ZlKz0yKWlmKExZKHksZyx6ZVtWZV0semVbVmUrMV0semVbVmUrMl0semVbVmUrM10scGUpJiZQZT4oYm49TlkoeSxnLHplW1ZlXSx6ZVtWZSsxXSx6ZVtWZSsyXSx6ZVtWZSszXSkpKXJldHVybiBBdCh6dCxibiksITB9ZWxzZSBpZihWdC5lZGdlVHlwZT09PSJiZXppZXIifHxWdC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fFZ0LmVkZ2VUeXBlPT09InNlbGYifHxWdC5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2Zvcih2YXIgemU9VnQuYWxscHRzLFZlPTA7VmUrNTxWdC5hbGxwdHMubGVuZ3RoO1ZlKz00KWlmKE1ZKHksZyx6ZVtWZV0semVbVmUrMV0semVbVmUrMl0semVbVmUrM10semVbVmUrNF0semVbVmUrNV0scGUpJiZQZT4oYm49T1koeSxnLHplW1ZlXSx6ZVtWZSsxXSx6ZVtWZSsyXSx6ZVtWZSszXSx6ZVtWZSs0XSx6ZVtWZSs1XSkpKXJldHVybiBBdCh6dCxibiksITB9Zm9yKHZhciBFbj1Fbnx8ZWUuc291cmNlLERuPURufHxlZS50YXJnZXQsS249QS5nZXRBcnJvd1dpZHRoKGZlLGdlKSxTbj1be25hbWU6InNvdXJjZSIseDpWdC5hcnJvd1N0YXJ0WCx5OlZ0LmFycm93U3RhcnRZLGFuZ2xlOlZ0LnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6VnQuYXJyb3dFbmRYLHk6VnQuYXJyb3dFbmRZLGFuZ2xlOlZ0LnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4OlZ0Lm1pZFgseTpWdC5taWRZLGFuZ2xlOlZ0Lm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4OlZ0Lm1pZFgseTpWdC5taWRZLGFuZ2xlOlZ0Lm1pZHRndEFycm93QW5nbGV9XSxWZT0wO1ZlPFNuLmxlbmd0aDtWZSsrKXt2YXIgV249U25bVmVdLHJyPUQuYXJyb3dTaGFwZXNbenQucHN0eWxlKFduLm5hbWUrIi1hcnJvdy1zaGFwZSIpLnZhbHVlXSx2cj16dC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihyci5yb3VnaENvbGxpZGUoeSxnLEtuLFduLmFuZ2xlLHt4OlduLngseTpXbi55fSx2cixHKSYmcnIuY29sbGlkZSh5LGcsS24sV24uYW5nbGUse3g6V24ueCx5OlduLnl9LHZyLEcpKXJldHVybiBBdCh6dCksITB9UyYmJC5sZW5ndGg+MCYmKGt0KEVuKSxrdChEbikpfWZ1bmN0aW9uIER0KHp0LGVlLFZ0KXtyZXR1cm4gYnAoenQsZWUsVnQpfWZ1bmN0aW9uIGp0KHp0LGVlKXt2YXIgVnQ9enQuX3ByaXZhdGUsZmU9ZXQsZ2U7ZWU/Z2U9ZWUrIi0iOmdlPSIiLHp0LmJvdW5kaW5nQm94KCk7dmFyIG5lPVZ0LmxhYmVsQm91bmRzW2VlfHwibWFpbiJdLFBlPXp0LnBzdHlsZShnZSsibGFiZWwiKS52YWx1ZSxwZT16dC5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFwZXx8IVBlKSl7dmFyIGJuPUR0KFZ0LnJzY3JhdGNoLCJsYWJlbFgiLGVlKSx6ZT1EdChWdC5yc2NyYXRjaCwibGFiZWxZIixlZSksVmU9RHQoVnQucnNjcmF0Y2gsImxhYmVsQW5nbGUiLGVlKSxFbj16dC5wc3R5bGUoZ2UrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLERuPXp0LnBzdHlsZShnZSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsS249bmUueDEtZmUtRW4sU249bmUueDIrZmUtRW4sV249bmUueTEtZmUtRG4scnI9bmUueTIrZmUtRG47aWYoVmUpe3ZhciB2cj1NYXRoLmNvcyhWZSksdXI9TWF0aC5zaW4oVmUpLHRyPWZ1bmN0aW9uKGthLENpKXtyZXR1cm4ga2E9a2EtYm4sQ2k9Q2ktemUse3g6a2EqdnItQ2kqdXIrYm4seTprYSp1citDaSp2cit6ZX19LHduPXRyKEtuLFduKSxncj10cihLbixyciksZnI9dHIoU24sV24pLEpyPXRyKFNuLHJyKSx3aT1bd24ueCtFbix3bi55K0RuLGZyLngrRW4sZnIueStEbixKci54K0VuLEpyLnkrRG4sZ3IueCtFbixnci55K0RuXTtpZihqZCh5LGcsd2kpKXJldHVybiBBdCh6dCksITB9ZWxzZSBpZihHNShuZSx5LGcpKXJldHVybiBBdCh6dCksITB9fWZvcih2YXIgWnQ9Ty5sZW5ndGgtMTtadD49MDtadC0tKXt2YXIgS3Q9T1tadF07S3QuaXNOb2RlKCk/a3QoS3QpfHxqdChLdCk6TXQoS3QpfHxqdChLdCl8fGp0KEt0LCJzb3VyY2UiKXx8anQoS3QsInRhcmdldCIpfXJldHVybiAkfSxMMy5nZXRBbGxJbkJveD1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsRD1bXSxPPU1hdGgubWluKHkseCksJD1NYXRoLm1heCh5LHgpLHE9TWF0aC5taW4oZyxUKSxTPU1hdGgubWF4KGcsVCk7eT1PLHg9JCxnPXEsVD1TO2Zvcih2YXIgRz1SZCh7eDE6eSx5MTpnLHgyOngseTI6VH0pLFc9MDtXPEEubGVuZ3RoO1crKyl7dmFyIGV0PUFbV107aWYoZXQuaXNOb2RlKCkpe3ZhciBhdD1ldCxsdD1hdC5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7RUwoRyxsdCkmJiF0RihsdCxHKSYmRC5wdXNoKGF0KX1lbHNle3ZhciBmdD1ldCxBdD1mdC5fcHJpdmF0ZSxrdD1BdC5yc2NyYXRjaDtpZihrdC5zdGFydFghPW51bGwmJmt0LnN0YXJ0WSE9bnVsbCYmIUc1KEcsa3Quc3RhcnRYLGt0LnN0YXJ0WSl8fGt0LmVuZFghPW51bGwmJmt0LmVuZFkhPW51bGwmJiFHNShHLGt0LmVuZFgsa3QuZW5kWSkpY29udGludWU7aWYoa3QuZWRnZVR5cGU9PT0iYmV6aWVyInx8a3QuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxrdC5lZGdlVHlwZT09PSJzZWxmInx8a3QuZWRnZVR5cGU9PT0iY29tcG91bmQifHxrdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fGt0LmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBNdD1BdC5yc3R5bGUuYmV6aWVyUHRzfHxBdC5yc3R5bGUubGluZVB0c3x8QXQucnN0eWxlLmhheXN0YWNrUHRzLER0PSEwLGp0PTA7anQ8TXQubGVuZ3RoO2p0KyspaWYoIUFZKEcsTXRbanRdKSl7RHQ9ITE7YnJlYWt9RHQmJkQucHVzaChmdCl9ZWxzZShrdC5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fGt0LmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJkQucHVzaChmdCl9fXJldHVybiBEfTt2YXIgcDk9e307cDkuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZS5yc2NyYXRjaCx4PWcuZWRnZVR5cGU9PT0iaGF5c3RhY2siLFQ9Zy5lZGdlVHlwZT09PSJiZXppZXIiLEE9Zy5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsRD1nLmVkZ2VUeXBlPT09InNlZ21lbnRzIixPPWcuZWRnZVR5cGU9PT0iY29tcG91bmQiLCQ9Zy5lZGdlVHlwZT09PSJzZWxmIixxLFMsRyxXLGV0LGF0LGt0LE10O2lmKHg/KEc9Zy5oYXlzdGFja1B0c1swXSxXPWcuaGF5c3RhY2tQdHNbMV0sZXQ9Zy5oYXlzdGFja1B0c1syXSxhdD1nLmhheXN0YWNrUHRzWzNdKTooRz1nLmFycm93U3RhcnRYLFc9Zy5hcnJvd1N0YXJ0WSxldD1nLmFycm93RW5kWCxhdD1nLmFycm93RW5kWSksa3Q9Zy5taWRYLE10PWcubWlkWSxEKXE9Ry1nLnNlZ3B0c1swXSxTPVctZy5zZWdwdHNbMV07ZWxzZSBpZihBfHxPfHwkfHxUKXt2YXIgbHQ9Zy5hbGxwdHMsZnQ9cmYobHRbMF0sbHRbMl0sbHRbNF0sLjEpLEF0PXJmKGx0WzFdLGx0WzNdLGx0WzVdLC4xKTtxPUctZnQsUz1XLUF0fWVsc2UgcT1HLWt0LFM9Vy1NdDtnLnNyY0Fycm93QW5nbGU9TlQocSxTKTt2YXIga3Q9Zy5taWRYLE10PWcubWlkWTtpZih4JiYoa3Q9KEcrZXQpLzIsTXQ9KFcrYXQpLzIpLHE9ZXQtRyxTPWF0LVcsRCl7dmFyIGx0PWcuYWxscHRzO2lmKGx0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgRHQ9bHQubGVuZ3RoLzIsanQ9RHQtMjtxPWx0W0R0XS1sdFtqdF0sUz1sdFtEdCsxXS1sdFtqdCsxXX1lbHNle3ZhciBEdD1sdC5sZW5ndGgvMi0xLGp0PUR0LTIsWnQ9RHQrMjtxPWx0W0R0XS1sdFtqdF0sUz1sdFtEdCsxXS1sdFtqdCsxXX19ZWxzZSBpZihBfHxPfHwkKXt2YXIgbHQ9Zy5hbGxwdHMsS3Q9Zy5jdHJscHRzLHp0LGVlLFZ0LGZlO2lmKEt0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgZ2U9bHQubGVuZ3RoLzItMSxuZT1nZSsyLFBlPW5lKzI7enQ9cmYobHRbZ2VdLGx0W25lXSxsdFtQZV0sMCksZWU9cmYobHRbZ2UrMV0sbHRbbmUrMV0sbHRbUGUrMV0sMCksVnQ9cmYobHRbZ2VdLGx0W25lXSxsdFtQZV0sMWUtNCksZmU9cmYobHRbZ2UrMV0sbHRbbmUrMV0sbHRbUGUrMV0sMWUtNCl9ZWxzZXt2YXIgbmU9bHQubGVuZ3RoLzItMSxnZT1uZS0yLFBlPW5lKzI7enQ9cmYobHRbZ2VdLGx0W25lXSxsdFtQZV0sLjQ5OTkpLGVlPXJmKGx0W2dlKzFdLGx0W25lKzFdLGx0W1BlKzFdLC40OTk5KSxWdD1yZihsdFtnZV0sbHRbbmVdLGx0W1BlXSwuNSksZmU9cmYobHRbZ2UrMV0sbHRbbmUrMV0sbHRbUGUrMV0sLjUpfXE9VnQtenQsUz1mZS1lZX1pZihnLm1pZHRndEFycm93QW5nbGU9TlQocSxTKSxnLm1pZERpc3BYPXEsZy5taWREaXNwWT1TLHEqPS0xLFMqPS0xLEQpe3ZhciBsdD1nLmFsbHB0cztpZihsdC5sZW5ndGgvMiUyIT09MCl7dmFyIER0PWx0Lmxlbmd0aC8yLTEsWnQ9RHQrMjtxPS0obHRbWnRdLWx0W0R0XSksUz0tKGx0W1p0KzFdLWx0W0R0KzFdKX19aWYoZy5taWRzcmNBcnJvd0FuZ2xlPU5UKHEsUyksRClxPWV0LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0yXSxTPWF0LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKEF8fE98fCR8fFQpe3ZhciBsdD1nLmFsbHB0cyxwZT1sdC5sZW5ndGgsZnQ9cmYobHRbcGUtNl0sbHRbcGUtNF0sbHRbcGUtMl0sLjkpLEF0PXJmKGx0W3BlLTVdLGx0W3BlLTNdLGx0W3BlLTFdLC45KTtxPWV0LWZ0LFM9YXQtQXR9ZWxzZSBxPWV0LWt0LFM9YXQtTXQ7Zy50Z3RBcnJvd0FuZ2xlPU5UKHEsUyl9LHA5LmdldEFycm93V2lkdGg9cDkuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sVD14W3krIiwgIitnXTtyZXR1cm4gVHx8KFQ9TWF0aC5tYXgoTWF0aC5wb3coeSoxMy4zNywuOSksMjkpKmcseFt5KyIsICIrZ109VCxUKX07dmFyIGlkPXt9O2lkLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih5KXtmb3IodmFyIGc9MDtnPHkubGVuZ3RoO2crKyl7dmFyIHg9eVtnXSxUPXguX3ByaXZhdGUsQT1ULnJzY3JhdGNoO2lmKCFBLmhheXN0YWNrKXt2YXIgRD1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtBLnNvdXJjZT17eDpNYXRoLmNvcyhEKSx5Ok1hdGguc2luKEQpfSxEPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLEEudGFyZ2V0PXt4Ok1hdGguY29zKEQpLHk6TWF0aC5zaW4oRCl9fXZhciBPPVQuc291cmNlLCQ9VC50YXJnZXQscT1PLnBvc2l0aW9uKCksUz0kLnBvc2l0aW9uKCksRz1PLndpZHRoKCksVz0kLndpZHRoKCksZXQ9Ty5oZWlnaHQoKSxhdD0kLmhlaWdodCgpLGx0PXgucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSxmdD1sdC8yO0EuaGF5c3RhY2tQdHM9QS5hbGxwdHM9W0Euc291cmNlLngqRypmdCtxLngsQS5zb3VyY2UueSpldCpmdCtxLnksQS50YXJnZXQueCpXKmZ0K1MueCxBLnRhcmdldC55KmF0KmZ0K1MueV0sQS5taWRYPShBLmFsbHB0c1swXStBLmFsbHB0c1syXSkvMixBLm1pZFk9KEEuYWxscHRzWzFdK0EuYWxscHRzWzNdKS8yLEEuZWRnZVR5cGU9ImhheXN0YWNrIixBLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyh4KSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyh4KX19LGlkLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2gsVD1nLnBvc1B0cyxBPWcuaW50ZXJzZWN0aW9uUHRzLEQ9Zy52ZWN0b3JOb3JtSW52ZXJzZSxPPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLCQ9eS5wc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIpLHE9eS5wc3R5bGUoInNlZ21lbnQtZGlzdGFuY2VzIiksUz1NYXRoLm1pbigkLnBmVmFsdWUubGVuZ3RoLHEucGZWYWx1ZS5sZW5ndGgpO3guZWRnZVR5cGU9InNlZ21lbnRzIix4LnNlZ3B0cz1bXTtmb3IodmFyIEc9MDtHPFM7RysrKXt2YXIgVz0kLnBmVmFsdWVbR10sZXQ9cS5wZlZhbHVlW0ddLGF0PTEtVyxsdD1XLGZ0PU89PT0ibm9kZS1wb3NpdGlvbiI/VDpBLEF0PXt4OmZ0LngxKmF0K2Z0LngyKmx0LHk6ZnQueTEqYXQrZnQueTIqbHR9O3guc2VncHRzLnB1c2goQXQueCtELngqZXQsQXQueStELnkqZXQpfX0saWQuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9eS5fcHJpdmF0ZS5yc2NyYXRjaCxEPWcuZGlyQ291bnRzLE89Zy5zcmNQb3MsJD15LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxxPSQ/JC5wZlZhbHVlWzBdOnZvaWQgMCxTPXkucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsRz15LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsVz15LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO0EuZWRnZVR5cGU9InNlbGYiO3ZhciBldD14LGF0PVc7VCYmKGV0PTAsYXQ9cSk7dmFyIGx0PVMtTWF0aC5QSS8yLGZ0PWx0LUcvMixBdD1sdCtHLzIsa3Q9UysiXyIrRztldD1EW2t0XT09PXZvaWQgMD9EW2t0XT0wOisrRFtrdF0sQS5jdHJscHRzPVtPLngrTWF0aC5jb3MoZnQpKjEuNCphdCooZXQvMysxKSxPLnkrTWF0aC5zaW4oZnQpKjEuNCphdCooZXQvMysxKSxPLngrTWF0aC5jb3MoQXQpKjEuNCphdCooZXQvMysxKSxPLnkrTWF0aC5zaW4oQXQpKjEuNCphdCooZXQvMysxKV19LGlkLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9eS5fcHJpdmF0ZS5yc2NyYXRjaDtBLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIEQ9Zy5zcmNQb3MsTz1nLnRndFBvcywkPWcuc3JjVyxxPWcuc3JjSCxTPWcudGd0VyxHPWcudGd0SCxXPXkucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUsZXQ9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksYXQ9ZXQ/ZXQucGZWYWx1ZVswXTp2b2lkIDAsbHQ9eCxmdD1XO1QmJihsdD0wLGZ0PWF0KTt2YXIgQXQ9NTAsa3Q9e3g6RC54LSQvMix5OkQueS1xLzJ9LE10PXt4Ok8ueC1TLzIseTpPLnktRy8yfSxEdD17eDpNYXRoLm1pbihrdC54LE10LngpLHk6TWF0aC5taW4oa3QueSxNdC55KX0sanQ9LjUsWnQ9TWF0aC5tYXgoanQsTWF0aC5sb2coJCouMDEpKSxLdD1NYXRoLm1heChqdCxNYXRoLmxvZyhTKi4wMSkpO0EuY3RybHB0cz1bRHQueCxEdC55LSgxK01hdGgucG93KEF0LDEuMTIpLzEwMCkqZnQqKGx0LzMrMSkqWnQsRHQueC0oMStNYXRoLnBvdyhBdCwxLjEyKS8xMDApKmZ0KihsdC8zKzEpKkt0LER0LnldfSxpZC5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHkpe3kuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In0saWQuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBEPXkuX3ByaXZhdGUucnNjcmF0Y2gsTz1nLnZlY3Rvck5vcm1JbnZlcnNlLCQ9Zy5wb3NQdHMscT1nLmludGVyc2VjdGlvblB0cyxTPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLEc9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxXPXkucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLGV0PXkucHN0eWxlKCJjb250cm9sLXBvaW50LXdlaWdodHMiKSxhdD1XJiZldD9NYXRoLm1pbihXLnZhbHVlLmxlbmd0aCxldC52YWx1ZS5sZW5ndGgpOjEsbHQ9Vz9XLnBmVmFsdWVbMF06dm9pZCAwLGZ0PWV0LnZhbHVlWzBdLEF0PVQ7RC5lZGdlVHlwZT1BdD8ibXVsdGliZXppZXIiOiJiZXppZXIiLEQuY3RybHB0cz1bXTtmb3IodmFyIGt0PTA7a3Q8YXQ7a3QrKyl7dmFyIE10PSguNS1nLmVsZXMubGVuZ3RoLzIreCkqRyooQT8tMToxKSxEdD12b2lkIDAsanQ9WlAoTXQpO0F0JiYobHQ9Vz9XLnBmVmFsdWVba3RdOkcsZnQ9ZXQudmFsdWVba3RdKSxUP0R0PWx0OkR0PWx0IT09dm9pZCAwP2p0Kmx0OnZvaWQgMDt2YXIgWnQ9RHQhPT12b2lkIDA/RHQ6TXQsS3Q9MS1mdCx6dD1mdCxlZT1TPT09Im5vZGUtcG9zaXRpb24iPyQ6cSxWdD17eDplZS54MSpLdCtlZS54Mip6dCx5OmVlLnkxKkt0K2VlLnkyKnp0fTtELmN0cmxwdHMucHVzaChWdC54K08ueCpadCxWdC55K08ueSpadCl9fSxpZC5maW5kVGF4aVBvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2g7eC5lZGdlVHlwZT0ic2VnbWVudHMiO3ZhciBUPSJ2ZXJ0aWNhbCIsQT0iaG9yaXpvbnRhbCIsRD0ibGVmdHdhcmQiLE89InJpZ2h0d2FyZCIsJD0iZG93bndhcmQiLHE9InVwd2FyZCIsUz0iYXV0byIsRz1nLnBvc1B0cyxXPWcuc3JjVyxldD1nLnNyY0gsYXQ9Zy50Z3RXLGx0PWcudGd0SCxmdD15LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZSxBdD1mdCE9PSJub2RlLXBvc2l0aW9uIixrdD15LnBzdHlsZSgidGF4aS1kaXJlY3Rpb24iKS52YWx1ZSxNdD1rdCxEdD15LnBzdHlsZSgidGF4aS10dXJuIiksanQ9RHQudW5pdHM9PT0iJSIsWnQ9RHQucGZWYWx1ZSxLdD1adDwwLHp0PXkucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxlZT1BdD8oVythdCkvMjowLFZ0PUF0PyhldCtsdCkvMjowLGZlPUcueDItRy54MSxnZT1HLnkyLUcueTEsbmU9ZnVuY3Rpb24oS2ksUG8pe3JldHVybiBLaT4wP01hdGgubWF4KEtpLVBvLDApOk1hdGgubWluKEtpK1BvLDApfSxQZT1uZShmZSxlZSkscGU9bmUoZ2UsVnQpLGJuPSExO010PT09Uz9rdD1NYXRoLmFicyhQZSk+TWF0aC5hYnMocGUpP0E6VDpNdD09PXF8fE10PT09JD8oa3Q9VCxibj0hMCk6KE10PT09RHx8TXQ9PT1PKSYmKGt0PUEsYm49ITApO3ZhciB6ZT1rdD09PVQsVmU9emU/cGU6UGUsRW49emU/Z2U6ZmUsRG49WlAoRW4pLEtuPSExOyEoYm4mJihqdHx8S3QpKSYmKE10PT09JCYmRW48MHx8TXQ9PT1xJiZFbj4wfHxNdD09PUQmJkVuPjB8fE10PT09TyYmRW48MCkmJihEbio9LTEsVmU9RG4qTWF0aC5hYnMoVmUpLEtuPSEwKTt2YXIgU247aWYoanQpe3ZhciBXbj1adDwwPzErWnQ6WnQ7U249V24qVmV9ZWxzZXt2YXIgcnI9WnQ8MD9WZTowO1NuPXJyK1p0KkRufXZhciB2cj1mdW5jdGlvbihLaSl7cmV0dXJuIE1hdGguYWJzKEtpKTx6dHx8TWF0aC5hYnMoS2kpPj1NYXRoLmFicyhWZSl9LHVyPXZyKFNuKSx0cj12cihNYXRoLmFicyhWZSktTWF0aC5hYnMoU24pKSx3bj11cnx8dHI7aWYod24mJiFLbilpZih6ZSl7dmFyIGdyPU1hdGguYWJzKEVuKTw9ZXQvMixmcj1NYXRoLmFicyhmZSk8PWF0LzI7aWYoZ3Ipe3ZhciBKcj0oRy54MStHLngyKS8yLHdpPUcueTEsS3M9Ry55Mjt4LnNlZ3B0cz1bSnIsd2ksSnIsS3NdfWVsc2UgaWYoZnIpe3ZhciBrYT0oRy55MStHLnkyKS8yLENpPUcueDEsaGk9Ry54Mjt4LnNlZ3B0cz1bQ2ksa2EsaGksa2FdfWVsc2UgeC5zZWdwdHM9W0cueDEsRy55Ml19ZWxzZXt2YXIgZ3M9TWF0aC5hYnMoRW4pPD1XLzIscWk9TWF0aC5hYnMoZ2UpPD1sdC8yO2lmKGdzKXt2YXIgU2k9KEcueTErRy55MikvMixVaT1HLngxLEdhPUcueDI7eC5zZWdwdHM9W1VpLFNpLEdhLFNpXX1lbHNlIGlmKHFpKXt2YXIgWXM9KEcueDErRy54MikvMix6cz1HLnkxLEVyPUcueTI7eC5zZWdwdHM9W1lzLHpzLFlzLEVyXX1lbHNlIHguc2VncHRzPVtHLngyLEcueTFdfWVsc2UgaWYoemUpe3ZhciBRdD1HLnkxK1NuKyhBdD9ldC8yKkRuOjApLGpuPUcueDEsX3I9Ry54Mjt4LnNlZ3B0cz1bam4sUXQsX3IsUXRdfWVsc2V7dmFyIGlyPUcueDErU24rKEF0P1cvMipEbjowKSxzcj1HLnkxLElhPUcueTI7eC5zZWdwdHM9W2lyLHNyLGlyLElhXX19LGlkLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLnJzY3JhdGNoO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIFQ9Zy5zcmNQb3MsQT1nLnRndFBvcyxEPWcuc3JjVyxPPWcuc3JjSCwkPWcudGd0VyxxPWcudGd0SCxTPWcuc3JjU2hhcGUsRz1nLnRndFNoYXBlLFc9IVgoeC5zdGFydFgpfHwhWCh4LnN0YXJ0WSksZXQ9IVgoeC5hcnJvd1N0YXJ0WCl8fCFYKHguYXJyb3dTdGFydFkpLGF0PSFYKHguZW5kWCl8fCFYKHguZW5kWSksbHQ9IVgoeC5hcnJvd0VuZFgpfHwhWCh4LmFycm93RW5kWSksZnQ9MyxBdD10aGlzLmdldEFycm93V2lkdGgoeS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx5LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsa3Q9ZnQqQXQsTXQ9RTMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LnN0YXJ0WCx5Onguc3RhcnRZfSksRHQ9TXQ8a3QsanQ9RTMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LmVuZFgseTp4LmVuZFl9KSxadD1qdDxrdCxLdD0hMTtpZihXfHxldHx8RHQpe0t0PSEwO3ZhciB6dD17eDp4LmN0cmxwdHNbMF0tVC54LHk6eC5jdHJscHRzWzFdLVQueX0sZWU9TWF0aC5zcXJ0KHp0LngqenQueCt6dC55Knp0LnkpLFZ0PXt4Onp0LngvZWUseTp6dC55L2VlfSxmZT1NYXRoLm1heChELE8pLGdlPXt4OnguY3RybHB0c1swXStWdC54KjIqZmUseTp4LmN0cmxwdHNbMV0rVnQueSoyKmZlfSxuZT1TLmludGVyc2VjdExpbmUoVC54LFQueSxELE8sZ2UueCxnZS55LDApO0R0Pyh4LmN0cmxwdHNbMF09eC5jdHJscHRzWzBdK1Z0LngqKGt0LU10KSx4LmN0cmxwdHNbMV09eC5jdHJscHRzWzFdK1Z0LnkqKGt0LU10KSk6KHguY3RybHB0c1swXT1uZVswXStWdC54Kmt0LHguY3RybHB0c1sxXT1uZVsxXStWdC55Kmt0KX1pZihhdHx8bHR8fFp0KXtLdD0hMDt2YXIgUGU9e3g6eC5jdHJscHRzWzBdLUEueCx5OnguY3RybHB0c1sxXS1BLnl9LHBlPU1hdGguc3FydChQZS54KlBlLngrUGUueSpQZS55KSxibj17eDpQZS54L3BlLHk6UGUueS9wZX0semU9TWF0aC5tYXgoRCxPKSxWZT17eDp4LmN0cmxwdHNbMF0rYm4ueCoyKnplLHk6eC5jdHJscHRzWzFdK2JuLnkqMip6ZX0sRW49Ry5pbnRlcnNlY3RMaW5lKEEueCxBLnksJCxxLFZlLngsVmUueSwwKTtadD8oeC5jdHJscHRzWzBdPXguY3RybHB0c1swXStibi54KihrdC1qdCkseC5jdHJscHRzWzFdPXguY3RybHB0c1sxXStibi55KihrdC1qdCkpOih4LmN0cmxwdHNbMF09RW5bMF0rYm4ueCprdCx4LmN0cmxwdHNbMV09RW5bMV0rYm4ueSprdCl9S3QmJnRoaXMuZmluZEVuZHBvaW50cyh5KX19LGlkLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZy5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGcuZWRnZVR5cGU9PT0iYmV6aWVyInx8Zy5lZGdlVHlwZT09PSJzZWxmInx8Zy5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2cuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpO2Zvcih2YXIgeD0wO3grMTxnLmN0cmxwdHMubGVuZ3RoO3grPTIpZy5hbGxwdHMucHVzaChnLmN0cmxwdHNbeF0sZy5jdHJscHRzW3grMV0pLHgrMzxnLmN0cmxwdHMubGVuZ3RoJiZnLmFsbHB0cy5wdXNoKChnLmN0cmxwdHNbeF0rZy5jdHJscHRzW3grMl0pLzIsKGcuY3RybHB0c1t4KzFdK2cuY3RybHB0c1t4KzNdKS8yKTtnLmFsbHB0cy5wdXNoKGcuZW5kWCxnLmVuZFkpO3ZhciBULEE7Zy5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhUPWcuYWxscHRzLmxlbmd0aC8yLTEsZy5taWRYPWcuYWxscHRzW1RdLGcubWlkWT1nLmFsbHB0c1tUKzFdKTooVD1nLmFsbHB0cy5sZW5ndGgvMi0zLEE9LjUsZy5taWRYPXJmKGcuYWxscHRzW1RdLGcuYWxscHRzW1QrMl0sZy5hbGxwdHNbVCs0XSxBKSxnLm1pZFk9cmYoZy5hbGxwdHNbVCsxXSxnLmFsbHB0c1tUKzNdLGcuYWxscHRzW1QrNV0sQSkpfWVsc2UgaWYoZy5lZGdlVHlwZT09PSJzdHJhaWdodCIpZy5hbGxwdHM9W2cuc3RhcnRYLGcuc3RhcnRZLGcuZW5kWCxnLmVuZFldLGcubWlkWD0oZy5zdGFydFgrZy5lbmRYK2cuYXJyb3dTdGFydFgrZy5hcnJvd0VuZFgpLzQsZy5taWRZPShnLnN0YXJ0WStnLmVuZFkrZy5hcnJvd1N0YXJ0WStnLmFycm93RW5kWSkvNDtlbHNlIGlmKGcuZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKGcuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpLGcuYWxscHRzLnB1c2guYXBwbHkoZy5hbGxwdHMsZy5zZWdwdHMpLGcuYWxscHRzLnB1c2goZy5lbmRYLGcuZW5kWSksZy5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgRD1nLnNlZ3B0cy5sZW5ndGgvMixPPUQtMjtnLm1pZFg9KGcuc2VncHRzW09dK2cuc2VncHRzW0RdKS8yLGcubWlkWT0oZy5zZWdwdHNbTysxXStnLnNlZ3B0c1tEKzFdKS8yfWVsc2V7dmFyICQ9Zy5zZWdwdHMubGVuZ3RoLzItMTtnLm1pZFg9Zy5zZWdwdHNbJF0sZy5taWRZPWcuc2VncHRzWyQrMV19fSxpZC5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO2cubm9kZXNPdmVybGFwfHxYKGcuc3RhcnRYKSYmWChnLnN0YXJ0WSkmJlgoZy5lbmRYKSYmWChnLmVuZFkpP2cubG9nZ2VkRXJyPSExOmcubG9nZ2VkRXJyfHwoZy5sb2dnZWRFcnI9ITAsU2MoIkVkZ2UgYCIreS5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9LGlkLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2lmKCEoIXl8fHkubGVuZ3RoPT09MCkpe2Zvcih2YXIgeD10aGlzLFQ9eC5jeSxBPVQuaGFzQ29tcG91bmROb2RlcygpLEQ9e21hcDpuZXcgemIsZ2V0OmZ1bmN0aW9uKHp0KXt2YXIgZWU9dGhpcy5tYXAuZ2V0KHp0WzBdKTtyZXR1cm4gZWUhPW51bGw/ZWUuZ2V0KHp0WzFdKTpudWxsfSxzZXQ6ZnVuY3Rpb24oenQsZWUpe3ZhciBWdD10aGlzLm1hcC5nZXQoenRbMF0pO1Z0PT1udWxsJiYoVnQ9bmV3IHpiLHRoaXMubWFwLnNldCh6dFswXSxWdCkpLFZ0LnNldCh6dFsxXSxlZSl9fSxPPVtdLCQ9W10scT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdLEc9Uy5fcHJpdmF0ZSxXPVMucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEoUy5yZW1vdmVkKCl8fCFTLnRha2VzVXBTcGFjZSgpKSl7aWYoVz09PSJoYXlzdGFjayIpeyQucHVzaChTKTtjb250aW51ZX12YXIgZXQ9Vz09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8Vz09PSJzZWdtZW50cyJ8fFc9PT0ic3RyYWlnaHQifHxXPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8Vz09PSJ0YXhpIixhdD1XPT09InVuYnVuZGxlZC1iZXppZXIifHxXPT09ImJlemllciIsbHQ9Ry5zb3VyY2UsZnQ9Ry50YXJnZXQsQXQ9bHQucG9vbEluZGV4KCksa3Q9ZnQucG9vbEluZGV4KCksTXQ9W0F0LGt0XS5zb3J0KCksRHQ9RC5nZXQoTXQpO0R0PT1udWxsJiYoRHQ9e2VsZXM6W119LEQuc2V0KE10LER0KSxPLnB1c2goTXQpKSxEdC5lbGVzLnB1c2goUyksZXQmJihEdC5oYXNVbmJ1bmRsZWQ9ITApLGF0JiYoRHQuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBqdD1mdW5jdGlvbih6dCl7dmFyIGVlPU9benRdLFZ0PUQuZ2V0KGVlKSxmZT12b2lkIDA7aWYoIVZ0Lmhhc1VuYnVuZGxlZCl7dmFyIGdlPVZ0LmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihFcil7cmV0dXJuIEVyLmlzQnVuZGxlZEJlemllcigpfSk7bUwoVnQuZWxlcyksZ2UuZm9yRWFjaChmdW5jdGlvbihFcil7cmV0dXJuIFZ0LmVsZXMucHVzaChFcil9KSxWdC5lbGVzLnNvcnQoZnVuY3Rpb24oRXIsUXQpe3JldHVybiBFci5wb29sSW5kZXgoKS1RdC5wb29sSW5kZXgoKX0pfXZhciBuZT1WdC5lbGVzWzBdLFBlPW5lLnNvdXJjZSgpLHBlPW5lLnRhcmdldCgpO2lmKFBlLnBvb2xJbmRleCgpPnBlLnBvb2xJbmRleCgpKXt2YXIgYm49UGU7UGU9cGUscGU9Ym59dmFyIHplPVZ0LnNyY1Bvcz1QZS5wb3NpdGlvbigpLFZlPVZ0LnRndFBvcz1wZS5wb3NpdGlvbigpLEVuPVZ0LnNyY1c9UGUub3V0ZXJXaWR0aCgpLERuPVZ0LnNyY0g9UGUub3V0ZXJIZWlnaHQoKSxLbj1WdC50Z3RXPXBlLm91dGVyV2lkdGgoKSxTbj1WdC50Z3RIPXBlLm91dGVySGVpZ2h0KCksV249VnQuc3JjU2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKFBlKV0scnI9VnQudGd0U2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKHBlKV07VnQuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciB2cj0wO3ZyPFZ0LmVsZXMubGVuZ3RoO3ZyKyspe3ZhciB1cj1WdC5lbGVzW3ZyXSx0cj11clswXS5fcHJpdmF0ZS5yc2NyYXRjaCx3bj11ci5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZ3I9d249PT0idW5idW5kbGVkLWJlemllciJ8fHduPT09InNlZ21lbnRzInx8d249PT0idGF4aSIsZnI9IVBlLnNhbWUodXIuc291cmNlKCkpO2lmKCFWdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZQZSE9PXBlJiYoVnQuaGFzQmV6aWVyfHxWdC5oYXNVbmJ1bmRsZWQpKXtWdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBKcj1Xbi5pbnRlcnNlY3RMaW5lKHplLngsemUueSxFbixEbixWZS54LFZlLnksMCksd2k9VnQuc3JjSW50bj1KcixLcz1yci5pbnRlcnNlY3RMaW5lKFZlLngsVmUueSxLbixTbix6ZS54LHplLnksMCksa2E9VnQudGd0SW50bj1LcyxDaT1WdC5pbnRlcnNlY3Rpb25QdHM9e3gxOkpyWzBdLHgyOktzWzBdLHkxOkpyWzFdLHkyOktzWzFdfSxoaT1WdC5wb3NQdHM9e3gxOnplLngseDI6VmUueCx5MTp6ZS55LHkyOlZlLnl9LGdzPUtzWzFdLUpyWzFdLHFpPUtzWzBdLUpyWzBdLFNpPU1hdGguc3FydChxaSpxaStncypncyksVWk9VnQudmVjdG9yPXt4OnFpLHk6Z3N9LEdhPVZ0LnZlY3Rvck5vcm09e3g6VWkueC9TaSx5OlVpLnkvU2l9LFlzPXt4Oi1HYS55LHk6R2EueH07VnQubm9kZXNPdmVybGFwPSFYKFNpKXx8cnIuY2hlY2tQb2ludChKclswXSxKclsxXSwwLEtuLFNuLFZlLngsVmUueSl8fFduLmNoZWNrUG9pbnQoS3NbMF0sS3NbMV0sMCxFbixEbix6ZS54LHplLnkpLFZ0LnZlY3Rvck5vcm1JbnZlcnNlPVlzLGZlPXtub2Rlc092ZXJsYXA6VnQubm9kZXNPdmVybGFwLGRpckNvdW50czpWdC5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6VnQuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpWdC5oYXNVbmJ1bmRsZWQsZWxlczpWdC5lbGVzLHNyY1BvczpWZSx0Z3RQb3M6emUsc3JjVzpLbixzcmNIOlNuLHRndFc6RW4sdGd0SDpEbixzcmNJbnRuOmthLHRndEludG46d2ksc3JjU2hhcGU6cnIsdGd0U2hhcGU6V24scG9zUHRzOnt4MTpoaS54Mix5MTpoaS55Mix4MjpoaS54MSx5MjpoaS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTpDaS54Mix5MTpDaS55Mix4MjpDaS54MSx5MjpDaS55MX0sdmVjdG9yOnt4Oi1VaS54LHk6LVVpLnl9LHZlY3Rvck5vcm06e3g6LUdhLngseTotR2EueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LVlzLngseTotWXMueX19fXZhciB6cz1mcj9mZTpWdDt0ci5ub2Rlc092ZXJsYXA9enMubm9kZXNPdmVybGFwLHRyLnNyY0ludG49enMuc3JjSW50bix0ci50Z3RJbnRuPXpzLnRndEludG4sQSYmKFBlLmlzUGFyZW50KCl8fFBlLmlzQ2hpbGQoKXx8cGUuaXNQYXJlbnQoKXx8cGUuaXNDaGlsZCgpKSYmKFBlLnBhcmVudHMoKS5hbnlTYW1lKHBlKXx8cGUucGFyZW50cygpLmFueVNhbWUoUGUpfHxQZS5zYW1lKHBlKSYmUGUuaXNQYXJlbnQoKSk/Zy5maW5kQ29tcG91bmRMb29wUG9pbnRzKHVyLHpzLHZyLGdyKTpQZT09PXBlP2cuZmluZExvb3BQb2ludHModXIsenMsdnIsZ3IpOnduPT09InNlZ21lbnRzIj9nLmZpbmRTZWdtZW50c1BvaW50cyh1cix6cyk6d249PT0idGF4aSI/Zy5maW5kVGF4aVBvaW50cyh1cix6cyk6d249PT0ic3RyYWlnaHQifHwhZ3ImJlZ0LmVsZXMubGVuZ3RoJTI9PT0xJiZ2cj09PU1hdGguZmxvb3IoVnQuZWxlcy5sZW5ndGgvMik/Zy5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKHVyKTpnLmZpbmRCZXppZXJQb2ludHModXIsenMsdnIsZ3IsZnIpLGcuZmluZEVuZHBvaW50cyh1ciksZy50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKHVyLHpzKSxnLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKHVyKSxnLnN0b3JlQWxscHRzKHVyKSxnLnN0b3JlRWRnZVByb2plY3Rpb25zKHVyKSxnLmNhbGN1bGF0ZUFycm93QW5nbGVzKHVyKSxnLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnModXIpLGcuY2FsY3VsYXRlTGFiZWxBbmdsZXModXIpfX0sWnQ9MDtadDxPLmxlbmd0aDtadCsrKWp0KFp0KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cygkKX19O2Z1bmN0aW9uIGpCKHkpe3ZhciBnPVtdO2lmKHkhPW51bGwpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCs9Mil7dmFyIFQ9eVt4XSxBPXlbeCsxXTtnLnB1c2goe3g6VCx5OkF9KX1yZXR1cm4gZ319aWQuZ2V0U2VnbWVudFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoLHg9Zy5lZGdlVHlwZTtpZih4PT09InNlZ21lbnRzIilyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSksakIoZy5zZWdwdHMpfSxpZC5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXlbMF0uX3ByaXZhdGUucnNjcmF0Y2gseD1nLmVkZ2VUeXBlO2lmKHg9PT0iYmV6aWVyInx8eD09PSJtdWx0aWJlemllciJ8fHg9PT0ic2VsZiJ8fHg9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxqQihnLmN0cmxwdHMpfSxpZC5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9eVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSkse3g6Zy5taWRYLHk6Zy5taWRZfX07dmFyIEJrPXt9O0JrLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD15LnBvc2l0aW9uKCksQT15Lm91dGVyV2lkdGgoKSxEPXkub3V0ZXJIZWlnaHQoKTtpZihnLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBPPVtnLnBmVmFsdWVbMF0sZy5wZlZhbHVlWzFdXTtyZXR1cm4gZy51bml0c1swXT09PSIlIiYmKE9bMF09T1swXSpBKSxnLnVuaXRzWzFdPT09IiUiJiYoT1sxXT1PWzFdKkQpLE9bMF0rPVQueCxPWzFdKz1ULnksT31lbHNle3ZhciAkPWcucGZWYWx1ZVswXTskPS1NYXRoLlBJLzIrJDt2YXIgcT0yKk1hdGgubWF4KEEsRCksUz1bVC54K01hdGguY29zKCQpKnEsVC55K01hdGguc2luKCQpKnFdO3JldHVybiB4Lm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoeSldLmludGVyc2VjdExpbmUoVC54LFQueSxBLEQsU1swXSxTWzFdLDApfX0sQmsuZmluZEVuZHBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHgsVD15LnNvdXJjZSgpWzBdLEE9eS50YXJnZXQoKVswXSxEPVQucG9zaXRpb24oKSxPPUEucG9zaXRpb24oKSwkPXkucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSxxPXkucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxTPXkucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxHPXkucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxXPXkucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGV0PXkuX3ByaXZhdGUucnNjcmF0Y2gsYXQ9ZXQuZWRnZVR5cGUsbHQ9Vz09PSJ0YXhpIixmdD1hdD09PSJzZWxmInx8YXQ9PT0iY29tcG91bmQiLEF0PWF0PT09ImJlemllciJ8fGF0PT09Im11bHRpYmV6aWVyInx8ZnQsa3Q9YXQhPT0iYmV6aWVyIixNdD1hdD09PSJzdHJhaWdodCJ8fGF0PT09InNlZ21lbnRzIixEdD1hdD09PSJzZWdtZW50cyIsanQ9QXR8fGt0fHxNdCxadD1mdHx8bHQsS3Q9eS5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLHp0PVp0PyJvdXRzaWRlLXRvLW5vZGUiOkt0LnZhbHVlLGVlPXkucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxWdD1adD8ib3V0c2lkZS10by1ub2RlIjplZS52YWx1ZTtldC5zcmNNYW5FbmRwdD1LdCxldC50Z3RNYW5FbmRwdD1lZTt2YXIgZmUsZ2UsbmUsUGU7aWYoQXQpe3ZhciBwZT1bZXQuY3RybHB0c1swXSxldC5jdHJscHRzWzFdXSxibj1rdD9bZXQuY3RybHB0c1tldC5jdHJscHRzLmxlbmd0aC0yXSxldC5jdHJscHRzW2V0LmN0cmxwdHMubGVuZ3RoLTFdXTpwZTtmZT1ibixnZT1wZX1lbHNlIGlmKE10KXt2YXIgemU9RHQ/ZXQuc2VncHRzLnNsaWNlKDAsMik6W08ueCxPLnldLFZlPUR0P2V0LnNlZ3B0cy5zbGljZShldC5zZWdwdHMubGVuZ3RoLTIpOltELngsRC55XTtmZT1WZSxnZT16ZX1pZihWdD09PSJpbnNpZGUtdG8tbm9kZSIpeD1bTy54LE8ueV07ZWxzZSBpZihlZS51bml0cyl4PXRoaXMubWFudWFsRW5kcHRUb1B4KEEsZWUpO2Vsc2UgaWYoVnQ9PT0ib3V0c2lkZS10by1saW5lIil4PWV0LnRndEludG47ZWxzZSBpZihWdD09PSJvdXRzaWRlLXRvLW5vZGUifHxWdD09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP25lPWZlOihWdD09PSJvdXRzaWRlLXRvLWxpbmUifHxWdD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKG5lPVtELngsRC55XSkseD1nLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoQSldLmludGVyc2VjdExpbmUoTy54LE8ueSxBLm91dGVyV2lkdGgoKSxBLm91dGVySGVpZ2h0KCksbmVbMF0sbmVbMV0sMCksVnQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8VnQ9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIEVuPUEuX3ByaXZhdGUucnNjcmF0Y2gsRG49RW4ubGFiZWxXaWR0aCxLbj1Fbi5sYWJlbEhlaWdodCxTbj1Fbi5sYWJlbFgsV249RW4ubGFiZWxZLHJyPURuLzIsdnI9S24vMix1cj1BLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTt1cj09PSJ0b3AiP1duLT12cjp1cj09PSJib3R0b20iJiYoV24rPXZyKTt2YXIgdHI9QS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7dHI9PT0ibGVmdCI/U24tPXJyOnRyPT09InJpZ2h0IiYmKFNuKz1ycik7dmFyIHduPXlrKG5lWzBdLG5lWzFdLFtTbi1ycixXbi12cixTbitycixXbi12cixTbitycixXbit2cixTbi1ycixXbit2cl0sTy54LE8ueSk7aWYod24ubGVuZ3RoPjApe3ZhciBncj1ELGZyPVQzKGdyLHE1KHgpKSxKcj1UMyhncixxNSh3bikpLHdpPWZyO2lmKEpyPGZyJiYoeD13bix3aT1Kciksd24ubGVuZ3RoPjIpe3ZhciBLcz1UMyhncix7eDp3blsyXSx5OnduWzNdfSk7S3M8d2kmJih4PVt3blsyXSx3blszXV0pfX19dmFyIGthPUZUKHgsZmUsZy5hcnJvd1NoYXBlc1skXS5zcGFjaW5nKHkpK1MpLENpPUZUKHgsZmUsZy5hcnJvd1NoYXBlc1skXS5nYXAoeSkrUyk7aWYoZXQuZW5kWD1DaVswXSxldC5lbmRZPUNpWzFdLGV0LmFycm93RW5kWD1rYVswXSxldC5hcnJvd0VuZFk9a2FbMV0senQ9PT0iaW5zaWRlLXRvLW5vZGUiKXg9W0QueCxELnldO2Vsc2UgaWYoS3QudW5pdHMpeD10aGlzLm1hbnVhbEVuZHB0VG9QeChULEt0KTtlbHNlIGlmKHp0PT09Im91dHNpZGUtdG8tbGluZSIpeD1ldC5zcmNJbnRuO2Vsc2UgaWYoenQ9PT0ib3V0c2lkZS10by1ub2RlInx8enQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9QZT1nZTooenQ9PT0ib3V0c2lkZS10by1saW5lInx8enQ9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihQZT1bTy54LE8ueV0pLHg9Zy5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKFQpXS5pbnRlcnNlY3RMaW5lKEQueCxELnksVC5vdXRlcldpZHRoKCksVC5vdXRlckhlaWdodCgpLFBlWzBdLFBlWzFdLDApLHp0PT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fHp0PT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBoaT1ULl9wcml2YXRlLnJzY3JhdGNoLGdzPWhpLmxhYmVsV2lkdGgscWk9aGkubGFiZWxIZWlnaHQsU2k9aGkubGFiZWxYLFVpPWhpLmxhYmVsWSxHYT1ncy8yLFlzPXFpLzIsenM9VC5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7enM9PT0idG9wIj9VaS09WXM6enM9PT0iYm90dG9tIiYmKFVpKz1Zcyk7dmFyIEVyPVQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO0VyPT09ImxlZnQiP1NpLT1HYTpFcj09PSJyaWdodCImJihTaSs9R2EpO3ZhciBRdD15ayhQZVswXSxQZVsxXSxbU2ktR2EsVWktWXMsU2krR2EsVWktWXMsU2krR2EsVWkrWXMsU2ktR2EsVWkrWXNdLEQueCxELnkpO2lmKFF0Lmxlbmd0aD4wKXt2YXIgam49Tyxfcj1UMyhqbixxNSh4KSksaXI9VDMoam4scTUoUXQpKSxzcj1fcjtpZihpcjxfciYmKHg9W1F0WzBdLFF0WzFdXSxzcj1pciksUXQubGVuZ3RoPjIpe3ZhciBJYT1UMyhqbix7eDpRdFsyXSx5OlF0WzNdfSk7SWE8c3ImJih4PVtRdFsyXSxRdFszXV0pfX19dmFyICRyPUZUKHgsZ2UsZy5hcnJvd1NoYXBlc1txXS5zcGFjaW5nKHkpK0cpLEtpPUZUKHgsZ2UsZy5hcnJvd1NoYXBlc1txXS5nYXAoeSkrRyk7ZXQuc3RhcnRYPUtpWzBdLGV0LnN0YXJ0WT1LaVsxXSxldC5hcnJvd1N0YXJ0WD0kclswXSxldC5hcnJvd1N0YXJ0WT0kclsxXSxqdCYmKCFYKGV0LnN0YXJ0WCl8fCFYKGV0LnN0YXJ0WSl8fCFYKGV0LmVuZFgpfHwhWChldC5lbmRZKT9ldC5iYWRMaW5lPSEwOmV0LmJhZExpbmU9ITEpfSxCay5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzBdLHk6Zy5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93U3RhcnRYLHk6Zy5hcnJvd1N0YXJ0WX19fSxCay5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzJdLHk6Zy5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93RW5kWCx5OmcuYXJyb3dFbmRZfX19O3ZhciBZTD17fTtmdW5jdGlvbiB0dHQoeSxnLHgpe2Zvcih2YXIgVD1mdW5jdGlvbihTLEcsVyxldCl7cmV0dXJuIHJmKFMsRyxXLGV0KX0sQT1nLl9wcml2YXRlLEQ9QS5yc3R5bGUuYmV6aWVyUHRzLE89MDtPPHkuYmV6aWVyUHJvalBjdHMubGVuZ3RoO08rKyl7dmFyICQ9eS5iZXppZXJQcm9qUGN0c1tPXTtELnB1c2goe3g6VCh4WzBdLHhbMl0seFs0XSwkKSx5OlQoeFsxXSx4WzNdLHhbNV0sJCl9KX19WUwuc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZSx4PWcucnNjcmF0Y2gsVD14LmVkZ2VUeXBlO2lmKGcucnN0eWxlLmJlemllclB0cz1udWxsLGcucnN0eWxlLmxpbmVQdHM9bnVsbCxnLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLFQ9PT0ibXVsdGliZXppZXIifHxUPT09ImJlemllciJ8fFQ9PT0ic2VsZiJ8fFQ9PT0iY29tcG91bmQiKXtnLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBBPTA7QSs1PHguYWxscHRzLmxlbmd0aDtBKz00KXR0dCh0aGlzLHkseC5hbGxwdHMuc2xpY2UoQSxBKzYpKX1lbHNlIGlmKFQ9PT0ic2VnbWVudHMiKWZvcih2YXIgRD1nLnJzdHlsZS5saW5lUHRzPVtdLEE9MDtBKzE8eC5hbGxwdHMubGVuZ3RoO0ErPTIpRC5wdXNoKHt4OnguYWxscHRzW0FdLHk6eC5hbGxwdHNbQSsxXX0pO2Vsc2UgaWYoVD09PSJoYXlzdGFjayIpe3ZhciBPPXguaGF5c3RhY2tQdHM7Zy5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4Ok9bMF0seTpPWzFdfSx7eDpPWzJdLHk6T1szXX1dfWcucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSxZTC5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh5KX07dmFyIHlwPXt9O3lwLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih5KXt2YXIgZz15LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighWihnKSl7dmFyIHgsVCxBPXkuX3ByaXZhdGUsRD15LndpZHRoKCksTz15LmhlaWdodCgpLCQ9eS5wYWRkaW5nKCkscT15LnBvc2l0aW9uKCksUz15LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxHPXkucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLFc9QS5yc2NyYXRjaCxldD1BLnJzdHlsZTtzd2l0Y2goUyl7Y2FzZSJsZWZ0Ijp4PXEueC1ELzItJDticmVhaztjYXNlInJpZ2h0Ijp4PXEueCtELzIrJDticmVhaztkZWZhdWx0Ong9cS54fXN3aXRjaChHKXtjYXNlInRvcCI6VD1xLnktTy8yLSQ7YnJlYWs7Y2FzZSJib3R0b20iOlQ9cS55K08vMiskO2JyZWFrO2RlZmF1bHQ6VD1xLnl9Vy5sYWJlbFg9eCxXLmxhYmVsWT1ULGV0LmxhYmVsWD14LGV0LmxhYmVsWT1ULHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoeSksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh5KX19O3ZhciAkQj1mdW5jdGlvbihnLHgpe3ZhciBUPU1hdGguYXRhbih4L2cpO3JldHVybiBnPT09MCYmVDwwJiYoVD1UKi0xKSxUfSx6Qj1mdW5jdGlvbihnLHgpe3ZhciBUPXgueC1nLngsQT14LnktZy55O3JldHVybiAkQihULEEpfSxxQj1mdW5jdGlvbihnLHgsVCxBKXt2YXIgRD13aygwLEEtLjAwMSwxKSxPPXdrKDAsQSsuMDAxLDEpLCQ9SDUoZyx4LFQsRCkscT1INShnLHgsVCxPKTtyZXR1cm4gekIoJCxxKX07eXAucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt2YXIgZyx4PXkuX3ByaXZhdGUsVD14LnJzY3JhdGNoLEE9dGhpcyxEPXttaWQ6eS5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnkucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6eS5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihELm1pZHx8RC5zb3VyY2V8fEQudGFyZ2V0KXtnPXt4OlQubWlkWCx5OlQubWlkWX07dmFyIE89ZnVuY3Rpb24oVyxldCxhdCl7Ym0oeC5yc2NyYXRjaCxXLGV0LGF0KSxibSh4LnJzdHlsZSxXLGV0LGF0KX07TygibGFiZWxYIixudWxsLGcueCksTygibGFiZWxZIixudWxsLGcueSk7dmFyICQ9JEIoVC5taWREaXNwWCxULm1pZERpc3BZKTtPKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCwkKTt2YXIgcT1mdW5jdGlvbiBHKCl7aWYoRy5jYWNoZSlyZXR1cm4gRy5jYWNoZTtmb3IodmFyIFc9W10sZXQ9MDtldCs1PFQuYWxscHRzLmxlbmd0aDtldCs9NCl7dmFyIGF0PXt4OlQuYWxscHRzW2V0XSx5OlQuYWxscHRzW2V0KzFdfSxsdD17eDpULmFsbHB0c1tldCsyXSx5OlQuYWxscHRzW2V0KzNdfSxmdD17eDpULmFsbHB0c1tldCs0XSx5OlQuYWxscHRzW2V0KzVdfTtXLnB1c2goe3AwOmF0LHAxOmx0LHAyOmZ0LHN0YXJ0RGlzdDowLGxlbmd0aDowLHNlZ21lbnRzOltdfSl9dmFyIEF0PXgucnN0eWxlLmJlemllclB0cyxrdD1BLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBNdCh6dCxlZSxWdCxmZSxnZSl7dmFyIG5lPUUzKGVlLFZ0KSxQZT16dC5zZWdtZW50c1t6dC5zZWdtZW50cy5sZW5ndGgtMV0scGU9e3AwOmVlLHAxOlZ0LHQwOmZlLHQxOmdlLHN0YXJ0RGlzdDpQZT9QZS5zdGFydERpc3QrUGUubGVuZ3RoOjAsbGVuZ3RoOm5lfTt6dC5zZWdtZW50cy5wdXNoKHBlKSx6dC5sZW5ndGgrPW5lfWZvcih2YXIgRHQ9MDtEdDxXLmxlbmd0aDtEdCsrKXt2YXIganQ9V1tEdF0sWnQ9V1tEdC0xXTtadCYmKGp0LnN0YXJ0RGlzdD1adC5zdGFydERpc3QrWnQubGVuZ3RoKSxNdChqdCxqdC5wMCxBdFtEdCprdF0sMCxBLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIEt0PTA7S3Q8a3QtMTtLdCsrKU10KGp0LEF0W0R0Kmt0K0t0XSxBdFtEdCprdCtLdCsxXSxBLmJlemllclByb2pQY3RzW0t0XSxBLmJlemllclByb2pQY3RzW0t0KzFdKTtNdChqdCxBdFtEdCprdCtrdC0xXSxqdC5wMixBLmJlemllclByb2pQY3RzW2t0LTFdLDEpfXJldHVybiBHLmNhY2hlPVd9LFM9ZnVuY3Rpb24oVyl7dmFyIGV0LGF0PVc9PT0ic291cmNlIjtpZihEW1ddKXt2YXIgbHQ9eS5wc3R5bGUoVysiLXRleHQtb2Zmc2V0IikucGZWYWx1ZTtzd2l0Y2goVC5lZGdlVHlwZSl7Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlImJlemllciI6Y2FzZSJtdWx0aWJlemllciI6e2Zvcih2YXIgZnQ9cSgpLEF0LGt0PTAsTXQ9MCxEdD0wO0R0PGZ0Lmxlbmd0aDtEdCsrKXtmb3IodmFyIGp0PWZ0W2F0P0R0OmZ0Lmxlbmd0aC0xLUR0XSxadD0wO1p0PGp0LnNlZ21lbnRzLmxlbmd0aDtadCsrKXt2YXIgS3Q9anQuc2VnbWVudHNbYXQ/WnQ6anQuc2VnbWVudHMubGVuZ3RoLTEtWnRdLHp0PUR0PT09ZnQubGVuZ3RoLTEmJlp0PT09anQuc2VnbWVudHMubGVuZ3RoLTE7aWYoa3Q9TXQsTXQrPUt0Lmxlbmd0aCxNdD49bHR8fHp0KXtBdD17Y3A6anQsc2VnbWVudDpLdH07YnJlYWt9fWlmKEF0KWJyZWFrfXZhciBlZT1BdC5jcCxWdD1BdC5zZWdtZW50LGZlPShsdC1rdCkvVnQubGVuZ3RoLGdlPVZ0LnQxLVZ0LnQwLG5lPWF0P1Z0LnQwK2dlKmZlOlZ0LnQxLWdlKmZlO25lPXdrKDAsbmUsMSksZz1INShlZS5wMCxlZS5wMSxlZS5wMixuZSksZXQ9cUIoZWUucDAsZWUucDEsZWUucDIsbmUpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIFBlPTAscGUsYm4semUsVmUsRW49VC5hbGxwdHMubGVuZ3RoLERuPTA7RG4rMzxFbiYmKGF0Pyh6ZT17eDpULmFsbHB0c1tEbl0seTpULmFsbHB0c1tEbisxXX0sVmU9e3g6VC5hbGxwdHNbRG4rMl0seTpULmFsbHB0c1tEbiszXX0pOih6ZT17eDpULmFsbHB0c1tFbi0yLURuXSx5OlQuYWxscHRzW0VuLTEtRG5dfSxWZT17eDpULmFsbHB0c1tFbi00LURuXSx5OlQuYWxscHRzW0VuLTMtRG5dfSkscGU9RTMoemUsVmUpLGJuPVBlLFBlKz1wZSwhKFBlPj1sdCkpO0RuKz0yKTt2YXIgS249bHQtYm4sU249S24vcGU7U249d2soMCxTbiwxKSxnPUVZKHplLFZlLFNuKSxldD16Qih6ZSxWZSk7YnJlYWt9fU8oImxhYmVsWCIsVyxnLngpLE8oImxhYmVsWSIsVyxnLnkpLE8oImxhYmVsQXV0b0FuZ2xlIixXLGV0KX19O1MoInNvdXJjZSIpLFMoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeSl9fSx5cC5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih5KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSkseS5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh5LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSwidGFyZ2V0IikpfSx5cC5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5fcHJpdmF0ZSxUPXRoaXMuZ2V0TGFiZWxUZXh0KHksZyksQT10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LFQpLEQ9eS5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxPPXkucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPWJwKHgucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixnKXx8W10scT1PIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSksUz1BLmhlaWdodC9xLEc9UypELFc9QS53aWR0aCxldD1BLmhlaWdodCsocS0xKSooRC0xKSpTO2JtKHgucnN0eWxlLCJsYWJlbFdpZHRoIixnLFcpLGJtKHgucnNjcmF0Y2gsImxhYmVsV2lkdGgiLGcsVyksYm0oeC5yc3R5bGUsImxhYmVsSGVpZ2h0IixnLGV0KSxibSh4LnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZyxldCksYm0oeC5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixnLEcpfSx5cC5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9Zz9nKyItIjoiIixBPXkucHN0eWxlKFQrImxhYmVsIikuc3RyVmFsdWUsRD15LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxPPWZ1bmN0aW9uKEtuLFNuKXtyZXR1cm4gU24/KGJtKHgucnNjcmF0Y2gsS24sZyxTbiksU24pOmJwKHgucnNjcmF0Y2gsS24sZyl9O2lmKCFBKXJldHVybiIiO0Q9PSJub25lInx8KEQ9PSJ1cHBlcmNhc2UiP0E9QS50b1VwcGVyQ2FzZSgpOkQ9PSJsb3dlcmNhc2UiJiYoQT1BLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD15LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIHE9TygibGFiZWxLZXkiKTtpZihxIT1udWxsJiZPKCJsYWJlbFdyYXBLZXkiKT09PXEpcmV0dXJuIE8oImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIFM9IuKAiyIsRz1BLnNwbGl0KGAKYCksVz15LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLGV0PXkucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxhdD1ldD09PSJhbnl3aGVyZSIsbHQ9W10sZnQ9L1tcc1x1MjAwYl0rLyxBdD1hdD8iIjoiICIsa3Q9MDtrdDxHLmxlbmd0aDtrdCsrKXt2YXIgTXQ9R1trdF0sRHQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxNdCksanQ9RHQud2lkdGg7aWYoYXQpe3ZhciBadD1NdC5zcGxpdCgiIikuam9pbihTKTtNdD1adH1pZihqdD5XKXtmb3IodmFyIEt0PU10LnNwbGl0KGZ0KSx6dD0iIixlZT0wO2VlPEt0Lmxlbmd0aDtlZSsrKXt2YXIgVnQ9S3RbZWVdLGZlPXp0Lmxlbmd0aD09PTA/VnQ6enQrQXQrVnQsZ2U9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxmZSksbmU9Z2Uud2lkdGg7bmU8PVc/enQrPVZ0K0F0Oih6dCYmbHQucHVzaCh6dCksenQ9VnQrQXQpfXp0Lm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fGx0LnB1c2goenQpfWVsc2UgbHQucHVzaChNdCl9TygibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGx0KSxBPU8oImxhYmVsV3JhcENhY2hlZFRleHQiLGx0LmpvaW4oYApgKSksTygibGFiZWxXcmFwS2V5IixxKX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgUGU9eS5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxwZT0iIixibj0i4oCmIix6ZT0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LEEpLndpZHRoPFBlKXJldHVybiBBO2Zvcih2YXIgVmU9MDtWZTxBLmxlbmd0aDtWZSsrKXt2YXIgRW49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxwZStBW1ZlXStibikud2lkdGg7aWYoRW4+UGUpYnJlYWs7cGUrPUFbVmVdLFZlPT09QS5sZW5ndGgtMSYmKHplPSEwKX1yZXR1cm4gemV8fChwZSs9Ym4pLHBlfXJldHVybiBBfSx5cC5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeSl7dmFyIGc9eS5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLHg9eS5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYoZz09PSJhdXRvIilpZih5LmlzTm9kZSgpKXN3aXRjaCh4KXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBnfSx5cC5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9dGQoZyx5Ll9wcml2YXRlLmxhYmVsRGltc0tleSksQT14LmxhYmVsRGltQ2FjaGV8fCh4LmxhYmVsRGltQ2FjaGU9W10pLEQ9QVtUXTtpZihEIT1udWxsKXJldHVybiBEO3ZhciBPPTAsJD15LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLHE9eS5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsUz15LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxHPXkucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFc9dGhpcy5sYWJlbENhbGNDYW52YXMsZXQ9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFXKXtXPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGV0PXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1XLmdldENvbnRleHQoIjJkIik7dmFyIGF0PVcuc3R5bGU7YXQucG9zaXRpb249ImFic29sdXRlIixhdC5sZWZ0PSItOTk5OXB4IixhdC50b3A9Ii05OTk5cHgiLGF0LnpJbmRleD0iLTEiLGF0LnZpc2liaWxpdHk9ImhpZGRlbiIsYXQucG9pbnRlckV2ZW50cz0ibm9uZSJ9ZXQuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChHLCIgIikuY29uY2F0KHEsInB4ICIpLmNvbmNhdChTKTtmb3IodmFyIGx0PTAsZnQ9MCxBdD1nLnNwbGl0KGAKYCksa3Q9MDtrdDxBdC5sZW5ndGg7a3QrKyl7dmFyIE10PUF0W2t0XSxEdD1ldC5tZWFzdXJlVGV4dChNdCksanQ9TWF0aC5jZWlsKER0LndpZHRoKSxadD1xO2x0PU1hdGgubWF4KGp0LGx0KSxmdCs9WnR9cmV0dXJuIGx0Kz1PLGZ0Kz1PLEFbVF09e3dpZHRoOmx0LGhlaWdodDpmdH19LHlwLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9eC5yc2NyYXRjaCxBPXkuaXNFZGdlKCksRD1nP2crIi0iOiIiLE89eS5wc3R5bGUoRCsidGV4dC1yb3RhdGlvbiIpLCQ9Ty5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOkEmJiQ9PT0iYXV0b3JvdGF0ZSI/VC5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6Ty5wZlZhbHVlfSx5cC5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9eS5pc0VkZ2UoKSxUPXkuX3ByaXZhdGUsQT1ULnJzY3JhdGNoO0EubGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSkseCYmKEEuc291cmNlTGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSwic291cmNlIiksQS50YXJnZXRMYWJlbEFuZ2xlPWcuY2FsY3VsYXRlTGFiZWxBbmdsZSh5LCJ0YXJnZXQiKSl9O3ZhciB0aD17fSxYTD0yOCxIQj0hMTt0aC5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXkucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHg9PT0iY3V0cmVjdGFuZ2xlIiYmKHkud2lkdGgoKTxYTHx8eS5oZWlnaHQoKTxYTCkpcmV0dXJuIEhCfHwoU2MoIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxIQj0hMCksInJlY3RhbmdsZSI7aWYoeS5pc1BhcmVudCgpKXJldHVybiB4PT09InJlY3RhbmdsZSJ8fHg9PT0icm91bmRyZWN0YW5nbGUifHx4PT09InJvdW5kLXJlY3RhbmdsZSJ8fHg9PT0iY3V0cmVjdGFuZ2xlInx8eD09PSJjdXQtcmVjdGFuZ2xlInx8eD09PSJiYXJyZWwiP3g6InJlY3RhbmdsZSI7aWYoeD09PSJwb2x5Z29uIil7dmFyIFQ9eS5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIGcubm9kZVNoYXBlcy5tYWtlUG9seWdvbihUKS5uYW1lfXJldHVybiB4fTt2YXIgUms9e307UmsucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB5PXRoaXMuY3ksZz15LmNvbGxlY3Rpb24oKSx4PXRoaXMsVD1mdW5jdGlvbihPKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYoZy5tZXJnZShPKSwkKWZvcih2YXIgcT0wO3E8Ty5sZW5ndGg7cSsrKXt2YXIgUz1PW3FdLEc9Uy5fcHJpdmF0ZSxXPUcucnN0eWxlO1cuY2xlYW49ITEsVy5jbGVhbkNvbm5lY3RlZD0hMX19O3guYmluZGVyKHkpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihPKXt2YXIgJD1PLnRhcmdldDtUKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihPKXt2YXIgJD1PLnRhcmdldDtUKCQsITEpfSk7dmFyIEE9ZnVuY3Rpb24oTyl7aWYoTyl7dmFyICQ9eC5vblVwZGF0ZUVsZUNhbGNzRm5zO2cuY2xlYW5TdHlsZSgpO2Zvcih2YXIgcT0wO3E8Zy5sZW5ndGg7cSsrKXt2YXIgUz1nW3FdLEc9Uy5fcHJpdmF0ZS5yc3R5bGU7Uy5pc05vZGUoKSYmIUcuY2xlYW5Db25uZWN0ZWQmJihUKFMuY29ubmVjdGVkRWRnZXMoKSksRy5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFc9MDtXPCQubGVuZ3RoO1crKyl7dmFyIGV0PSRbV107ZXQoTyxnKX14LnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShnKSxnPXkuY29sbGVjdGlvbigpfX07eC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe0EoITApfSx4LmJlZm9yZVJlbmRlcihBLHguYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LFJrLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107Zy5wdXNoKHkpfSxSay5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD1mdW5jdGlvbihqdCl7cmV0dXJuIGp0Ll9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sVD1bXSxBPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7Zz09PXZvaWQgMCYmKGc9ITApO2Zvcih2YXIgRD0wO0Q8eS5sZW5ndGg7RCsrKXt2YXIgTz15W0RdLCQ9Ty5fcHJpdmF0ZSxxPSQucnN0eWxlO08uaXNFZGdlKCkmJigheChPLnNvdXJjZSgpKXx8IXgoTy50YXJnZXQoKSkpJiYocS5jbGVhbj0hMSksIShnJiZxLmNsZWFufHxPLnJlbW92ZWQoKSkmJk8ucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9BLnB1c2goTyk6VC5wdXNoKE8pLHEuY2xlYW49ITApfWZvcih2YXIgUz0wO1M8QS5sZW5ndGg7UysrKXt2YXIgRz1BW1NdLFc9Ry5fcHJpdmF0ZSxldD1XLnJzdHlsZSxhdD1HLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oRyksZXQubm9kZVg9YXQueCxldC5ub2RlWT1hdC55LGV0Lm5vZGVXPUcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsZXQubm9kZUg9Ry5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhUKTtmb3IodmFyIGx0PTA7bHQ8VC5sZW5ndGg7bHQrKyl7dmFyIGZ0PVRbbHRdLEF0PWZ0Ll9wcml2YXRlLGt0PUF0LnJzdHlsZSxNdD1BdC5yc2NyYXRjaDtrdC5zcmNYPU10LmFycm93U3RhcnRYLGt0LnNyY1k9TXQuYXJyb3dTdGFydFksa3QudGd0WD1NdC5hcnJvd0VuZFgsa3QudGd0WT1NdC5hcnJvd0VuZFksa3QubWlkWD1NdC5taWRYLGt0Lm1pZFk9TXQubWlkWSxrdC5sYWJlbEFuZ2xlPU10LmxhYmVsQW5nbGUsa3Quc291cmNlTGFiZWxBbmdsZT1NdC5zb3VyY2VMYWJlbEFuZ2xlLGt0LnRhcmdldExhYmVsQW5nbGU9TXQudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgYjk9e307YjkudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHkpe3kuZHJhZz1bXSx5Lm5vbmRyYWc9W107Zm9yKHZhciBnPVtdLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxBPVQuX3ByaXZhdGUucnNjcmF0Y2g7VC5ncmFiYmVkKCkmJiFULmlzUGFyZW50KCk/Zy5wdXNoKFQpOkEuaW5EcmFnTGF5ZXI/eS5kcmFnLnB1c2goVCk6eS5ub25kcmFnLnB1c2goVCl9Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBUPWdbeF07eS5kcmFnLnB1c2goVCl9fX0sYjkuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxiOS5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih5KXtpZih5fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIGc9dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7Zy5zb3J0KHBCKSxnLmludGVyYWN0aXZlPWcuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4LmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWcsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZz10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBnfTt2YXIgams9e307W0wzLHA5LGlkLEJrLFlMLHlwLHRoLFJrLGI5XS5mb3JFYWNoKGZ1bmN0aW9uKHkpe21lKGprLHkpfSk7dmFyIEdCPXt9O0dCLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD10aGlzLEE9VC5pbWFnZUNhY2hlPVQuaW1hZ2VDYWNoZXx8e30sRD1BW3ldO2lmKEQpcmV0dXJuIEQuaW1hZ2UuY29tcGxldGV8fEQuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCksRC5pbWFnZTtEPUFbeV09QVt5XXx8e307dmFyIE89RC5pbWFnZT1uZXcgSW1hZ2U7Ty5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KSxPLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe08uZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLHE9eS5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIHF8fChPLmNyb3NzT3JpZ2luPWcpLE8uc3JjPXksT307dmFyIG94PXt9O294LnJlZ2lzdGVyQmluZGluZz1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzLFsxXSksRD10aGlzLmJpbmRlcih5KTtyZXR1cm4gRC5vbi5hcHBseShELEEpfSxveC5iaW5kZXI9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXk9PT13aW5kb3d8fHk9PT1kb2N1bWVudHx8eT09PWRvY3VtZW50LmJvZHl8fFR0KHkpO2lmKGcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgVD0hMTt0cnl7dmFyIEE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFQ9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsQSl9Y2F0Y2h7fWcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPVR9dmFyIEQ9ZnVuY3Rpb24oJCxxLFMpe3ZhciBHPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHgmJmcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoR1syXT17Y2FwdHVyZTpTPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxnLmJpbmRpbmdzLnB1c2goe3RhcmdldDp5LGFyZ3M6R30pLCh5LmFkZEV2ZW50TGlzdGVuZXJ8fHkub24pLmFwcGx5KHksRyksdGhpc307cmV0dXJue29uOkQsYWRkRXZlbnRMaXN0ZW5lcjpELGFkZExpc3RlbmVyOkQsYmluZDpEfX0sb3gubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB5JiZ5LmlzTm9kZSgpJiYheS5sb2NrZWQoKSYmeS5ncmFiYmFibGUoKX0sb3gubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh5KSYmeS5pbnRlcmFjdGl2ZSgpfSxveC5sb2FkPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2VsZWN0ZWQoKX0seD1mdW5jdGlvbihRdCxqbixfcixpcil7UXQ9PW51bGwmJihRdD15LmN5KTtmb3IodmFyIHNyPTA7c3I8am4ubGVuZ3RoO3NyKyspe3ZhciBJYT1qbltzcl07UXQuZW1pdCh7b3JpZ2luYWxFdmVudDpfcix0eXBlOklhLHBvc2l0aW9uOmlyfSl9fSxUPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2hpZnRLZXl8fFF0Lm1ldGFLZXl8fFF0LmN0cmxLZXl9LEE9ZnVuY3Rpb24oUXQsam4pe3ZhciBfcj0hMDtpZih5LmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmUXQmJlF0LnBhbm5hYmxlKCkpZm9yKHZhciBpcj0wO2puJiZpcjxqbi5sZW5ndGg7aXIrKyl7dmFyIFF0PWpuW2lyXTtpZihRdC5pc05vZGUoKSYmUXQuaXNQYXJlbnQoKSYmIVF0LnBhbm5hYmxlKCkpe19yPSExO2JyZWFrfX1lbHNlIF9yPSEwO3JldHVybiBfcn0sRD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sTz1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sJD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LHE9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxTPWZ1bmN0aW9uKFF0KXtRdFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITB9LEc9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sVz1mdW5jdGlvbihRdCxqbil7dmFyIF9yPWpuLmFkZFRvTGlzdCxpcj1fci5oYXMoUXQpOyFpciYmUXQuZ3JhYmJhYmxlKCkmJiFRdC5sb2NrZWQoKSYmKF9yLm1lcmdlKFF0KSxEKFF0KSl9LGV0PWZ1bmN0aW9uKFF0LGpuKXtpZihRdC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSYmIShqbi5pbkRyYWdMYXllcj09bnVsbCYmam4uYWRkVG9MaXN0PT1udWxsKSl7dmFyIF9yPVF0LmRlc2NlbmRhbnRzKCk7am4uaW5EcmFnTGF5ZXImJihfci5mb3JFYWNoKCQpLF9yLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZXKF9yLGpuKX19LGF0PWZ1bmN0aW9uKFF0LGpuKXtqbj1qbnx8e307dmFyIF9yPVF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2puLmluRHJhZ0xheWVyJiYoUXQuZm9yRWFjaCgkKSxRdC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oaXIpe3JldHVybiFfcnx8aXIuaXNFZGdlKCl9KS5mb3JFYWNoKCQpKSxqbi5hZGRUb0xpc3QmJlF0LmZvckVhY2goZnVuY3Rpb24oaXIpe1coaXIsam4pfSksZXQoUXQsam4pLEF0KFF0LHtpbkRyYWdMYXllcjpqbi5pbkRyYWdMYXllcn0pLHkudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKX0sbHQ9YXQsZnQ9ZnVuY3Rpb24oUXQpe1F0JiYoeS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24oam4pe08oam4pLHEoam4pLEcoam4pfSkseS51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpKX0sQXQ9ZnVuY3Rpb24oUXQsam4pe2lmKCEoam4uaW5EcmFnTGF5ZXI9PW51bGwmJmpuLmFkZFRvTGlzdD09bnVsbCkmJlF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgX3I9UXQuYW5jZXN0b3JzKCkub3JwaGFucygpO2lmKCFfci5zYW1lKFF0KSl7dmFyIGlyPV9yLmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UoX3IpLnVubWVyZ2UoUXQpLnVubWVyZ2UoUXQuZGVzY2VuZGFudHMoKSksc3I9aXIuY29ubmVjdGVkRWRnZXMoKTtqbi5pbkRyYWdMYXllciYmKHNyLmZvckVhY2goJCksaXIuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZpci5mb3JFYWNoKGZ1bmN0aW9uKElhKXtXKElhLGpuKX0pfX19LGt0PWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sTXQ9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLER0PXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7TXQ/KHkucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oRXIpe2Zvcih2YXIgUXQ9MDtRdDxFci5sZW5ndGg7UXQrKyl7dmFyIGpuPUVyW1F0XSxfcj1qbi5yZW1vdmVkTm9kZXM7aWYoX3IpZm9yKHZhciBpcj0wO2lyPF9yLmxlbmd0aDtpcisrKXt2YXIgc3I9X3JbaXJdO2lmKHNyPT09eS5jb250YWluZXIpe3kuZGVzdHJveSgpO2JyZWFrfX19fSkseS5jb250YWluZXIucGFyZW50Tm9kZSYmeS5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLnBhcmVudE5vZGUse2NoaWxkTGlzdDohMH0pKTp5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiRE9NTm9kZVJlbW92ZWQiLGZ1bmN0aW9uKEVyKXt5LmRlc3Ryb3koKX0pO3ZhciBqdD1XYyhmdW5jdGlvbigpe3kuY3kucmVzaXplKCl9LDEwMCk7TXQmJih5LnN0eWxlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoanQpLHkuc3R5bGVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLHthdHRyaWJ1dGVzOiEwfSkpLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywicmVzaXplIixqdCksRHQmJih5LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihqdCkseS5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyKSk7dmFyIFp0PWZ1bmN0aW9uKFF0LGpuKXtmb3IoO1F0IT1udWxsOylqbihRdCksUXQ9UXQucGFyZW50Tm9kZX0sS3Q9ZnVuY3Rpb24oKXt5LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfTtadCh5LmNvbnRhaW5lcixmdW5jdGlvbihFcil7eS5yZWdpc3RlckJpbmRpbmcoRXIsInRyYW5zaXRpb25lbmQiLEt0KSx5LnJlZ2lzdGVyQmluZGluZyhFciwiYW5pbWF0aW9uZW5kIixLdCkseS5yZWdpc3RlckJpbmRpbmcoRXIsInNjcm9sbCIsS3QpfSkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImNvbnRleHRtZW51IixmdW5jdGlvbihFcil7RXIucHJldmVudERlZmF1bHQoKX0pO3ZhciB6dD1mdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdGlvbls0XSE9PTB9LGVlPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPXkuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLF9yPWpuWzBdLGlyPWpuWzFdLHNyPWpuWzJdLElhPWpuWzNdLCRyPVF0LnRvdWNoZXM/UXQudG91Y2hlczpbUXRdLEtpPSExLFBvPTA7UG88JHIubGVuZ3RoO1BvKyspe3ZhciBOYz0kcltQb107aWYoX3I8PU5jLmNsaWVudFgmJk5jLmNsaWVudFg8PV9yK3NyJiZpcjw9TmMuY2xpZW50WSYmTmMuY2xpZW50WTw9aXIrSWEpe0tpPSEwO2JyZWFrfX1pZighS2kpcmV0dXJuITE7Zm9yKHZhciBaYT15LmNvbnRhaW5lcixtYz1RdC50YXJnZXQsRWE9bWMucGFyZW50Tm9kZSxKYT0hMTtFYTspe2lmKEVhPT09WmEpe0phPSEwO2JyZWFrfUVhPUVhLnBhcmVudE5vZGV9cmV0dXJuISFKYX07eS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlZG93biIsZnVuY3Rpb24oUXQpe2lmKGVlKFF0KSl7UXQucHJldmVudERlZmF1bHQoKSxrdCgpLHkuaG92ZXJEYXRhLmNhcHR1cmU9ITAseS5ob3ZlckRhdGEud2hpY2g9UXQud2hpY2g7dmFyIGpuPXkuY3ksX3I9W1F0LmNsaWVudFgsUXQuY2xpZW50WV0saXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KF9yWzBdLF9yWzFdKSxzcj15LnNlbGVjdGlvbixJYT15LmZpbmROZWFyZXN0RWxlbWVudHMoaXJbMF0saXJbMV0sITAsITEpLCRyPUlhWzBdLEtpPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM7eS5ob3ZlckRhdGEubWRvd25Qb3M9aXIseS5ob3ZlckRhdGEubWRvd25HUG9zPV9yO3ZhciBQbz1mdW5jdGlvbigpe3kuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITEsY2xlYXJUaW1lb3V0KHkuaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LmhvdmVyRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQpe3ZhciB2bD15LmhvdmVyRGF0YS5kb3duO3ZsP3ZsLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19KTpqbi5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmlyWzBdLHk6aXJbMV19fSl9fSx5LnRhcGhvbGREdXJhdGlvbil9O2lmKFF0LndoaWNoPT0zKXt5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSEwO3ZhciBOYz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19OyRyPygkci5hY3RpdmF0ZSgpLCRyLmVtaXQoTmMpLHkuaG92ZXJEYXRhLmRvd249JHIpOmpuLmVtaXQoTmMpLHkuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHkuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihRdC53aGljaD09MSl7JHImJiRyLmFjdGl2YXRlKCk7e2lmKCRyIT1udWxsJiZ5Lm5vZGVJc0dyYWJiYWJsZSgkcikpe3ZhciBaYT1mdW5jdGlvbih2bCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6UXQsdHlwZTp2bCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX19LG1jPWZ1bmN0aW9uKHZsKXt2bC5lbWl0KFphKCJncmFiIikpfTtpZihTKCRyKSwhJHIuc2VsZWN0ZWQoKSlLaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKSxsdCgkcix7YWRkVG9MaXN0OktpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLmVtaXQoWmEoImdyYWIiKSk7ZWxzZXtLaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKTt2YXIgRWE9am4uJChmdW5jdGlvbihKYSl7cmV0dXJuIEphLmlzTm9kZSgpJiZKYS5zZWxlY3RlZCgpJiZ5Lm5vZGVJc0dyYWJiYWJsZShKYSl9KTthdChFYSx7YWRkVG9MaXN0OktpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLEVhLmZvckVhY2gobWMpfXkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3SGludCgiZHJhZyIsITApfXkuaG92ZXJEYXRhLmRvd249JHIseS5ob3ZlckRhdGEuZG93bnM9SWEseS5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9eCgkcixbIm1vdXNlZG93biIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSwkcj09bnVsbD8oc3JbNF09MSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6aXJbMF0seTppclsxXX0seS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKTokci5wYW5uYWJsZSgpJiYoc3JbNF09MSksUG8oKX1zclswXT1zclsyXT1pclswXSxzclsxXT1zclszXT1pclsxXX19LCExKSx5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csIm1vdXNlbW92ZSIsZnVuY3Rpb24oUXQpe3ZhciBqbj15LmhvdmVyRGF0YS5jYXB0dXJlO2lmKCEoIWpuJiYhZWUoUXQpKSl7dmFyIF9yPSExLGlyPXkuY3ksc3I9aXIuem9vbSgpLElhPVtRdC5jbGllbnRYLFF0LmNsaWVudFldLCRyPXkucHJvamVjdEludG9WaWV3cG9ydChJYVswXSxJYVsxXSksS2k9eS5ob3ZlckRhdGEubWRvd25Qb3MsUG89eS5ob3ZlckRhdGEubWRvd25HUG9zLE5jPXkuc2VsZWN0aW9uLFphPW51bGw7IXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYoWmE9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITEpKTt2YXIgbWM9eS5ob3ZlckRhdGEubGFzdCxFYT15LmhvdmVyRGF0YS5kb3duLEphPVskclswXS1OY1syXSwkclsxXS1OY1szXV0sdmw9eS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyx6ZjtpZihQbyl7dmFyIHhwPUlhWzBdLVBvWzBdLGtwPXhwKnhwLHFmPUlhWzFdLVBvWzFdLG1nPXFmKnFmLHNkPWtwK21nO3kuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9emY9c2Q+PXkuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIGJ2PVQoUXQpO3pmJiYoeS5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIF9tPWZ1bmN0aW9uKCl7dmFyIEdiPXkuaG92ZXJEYXRhLmRyYWdEZWx0YT15LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO0diLmxlbmd0aD09PTA/KEdiLnB1c2goSmFbMF0pLEdiLnB1c2goSmFbMV0pKTooR2JbMF0rPUphWzBdLEdiWzFdKz1KYVsxXSl9O19yPSEwLHgoWmEsWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KTt2YXIgZ3g9ZnVuY3Rpb24oKXt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkuaG92ZXJEYXRhLnNlbGVjdGluZ3x8aXIuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSxOY1s0XT0xLHkuaG92ZXJEYXRhLnNlbGVjdGluZz0hMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCl9O2lmKHkuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoemYpe3ZhciBPMz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07RWE/RWEuZW1pdChPMyk6aXIuZW1pdChPMykseS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXkuaG92ZXJEYXRhLmN4dE92ZXJ8fFphIT09eS5ob3ZlckRhdGEuY3h0T3ZlcikmJih5LmhvdmVyRGF0YS5jeHRPdmVyJiZ5LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0ZHJhZ291dCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSx5LmhvdmVyRGF0YS5jeHRPdmVyPVphLFphJiZaYS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX0pKX19ZWxzZSBpZih5LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoX3I9ITAsaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBweDtpZih5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIFQ5PXkuaG92ZXJEYXRhLm1kb3duUG9zO3B4PXt4OigkclswXS1UOVswXSkqc3IseTooJHJbMV0tVDlbMV0pKnNyfSx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMX1lbHNlIHB4PXt4OkphWzBdKnNyLHk6SmFbMV0qc3J9O2lyLnBhbkJ5KHB4KSxpci5lbWl0KCJkcmFncGFuIikseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMH0kcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKX1lbHNlIGlmKE5jWzRdPT0xJiYoRWE9PW51bGx8fEVhLnBhbm5hYmxlKCkpKXtpZih6Zil7aWYoIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiZpci5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihidnx8IWlyLnBhbm5pbmdFbmFibGVkKCl8fCFpci51c2VyUGFubmluZ0VuYWJsZWQoKSkpZ3goKTtlbHNlIGlmKCF5LmhvdmVyRGF0YS5zZWxlY3RpbmcmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgTjM9QShFYSx5LmhvdmVyRGF0YS5kb3ducyk7TjMmJih5LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxOY1s0XT0wLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1xNShLaSkseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKX1FYSYmRWEucGFubmFibGUoKSYmRWEuYWN0aXZlKCkmJkVhLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihFYSYmRWEucGFubmFibGUoKSYmRWEuYWN0aXZlKCkmJkVhLnVuYWN0aXZhdGUoKSwoIUVhfHwhRWEuZ3JhYmJlZCgpKSYmWmEhPW1jJiYobWMmJngobWMsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksWmEmJngoWmEsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KSx5LmhvdmVyRGF0YS5sYXN0PVphKSxFYSlpZih6Zil7aWYoaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZidilFYSYmRWEuZ3JhYmJlZCgpJiYoZnQodmwpLEVhLmVtaXQoImZyZWVvbiIpLHZsLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihFYS5lbWl0KCJkcmFnZnJlZW9uIiksdmwuZW1pdCgiZHJhZ2ZyZWUiKSkpLGd4KCk7ZWxzZSBpZihFYSYmRWEuZ3JhYmJlZCgpJiZ5Lm5vZGVJc0RyYWdnYWJsZShFYSkpe3ZhciAkZD0heS5kcmFnRGF0YS5kaWREcmFnOyRkJiZ5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LmRyYWdEYXRhLmRpZERyYWc9ITAseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxhdCh2bCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgdzE9e3g6MCx5OjB9O2lmKFgoSmFbMF0pJiZYKEphWzFdKSYmKHcxLngrPUphWzBdLHcxLnkrPUphWzFdLCRkKSl7dmFyIHpkPXkuaG92ZXJEYXRhLmRyYWdEZWx0YTt6ZCYmWCh6ZFswXSkmJlgoemRbMV0pJiYodzEueCs9emRbMF0sdzEueSs9emRbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCx2bC5zaWxlbnRTaGlmdCh3MSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3KCl9fWVsc2UgX20oKTtfcj0hMH1pZihOY1syXT0kclswXSxOY1szXT0kclsxXSxfcilyZXR1cm4gUXQuc3RvcFByb3BhZ2F0aW9uJiZRdC5zdG9wUHJvcGFnYXRpb24oKSxRdC5wcmV2ZW50RGVmYXVsdCYmUXQucHJldmVudERlZmF1bHQoKSwhMX19LCExKTt2YXIgVnQsZmUsZ2U7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJtb3VzZXVwIixmdW5jdGlvbihRdCl7dmFyIGpuPXkuaG92ZXJEYXRhLmNhcHR1cmU7aWYoam4pe3kuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIF9yPXkuY3ksaXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSksc3I9eS5zZWxlY3Rpb24sSWE9eS5maW5kTmVhcmVzdEVsZW1lbnQoaXJbMF0saXJbMV0sITAsITEpLCRyPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsS2k9eS5ob3ZlckRhdGEuZG93bixQbz1UKFF0KTtpZih5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24mJih5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpLHkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITAseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCxLaSYmS2kudW5hY3RpdmF0ZSgpLHkuaG92ZXJEYXRhLndoaWNoPT09Myl7dmFyIE5jPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19O2lmKEtpP0tpLmVtaXQoTmMpOl9yLmVtaXQoTmMpLCF5LmhvdmVyRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX07S2k/S2kuZW1pdChaYSk6X3IuZW1pdChaYSl9eS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYoeS5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZih4KElhLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sUXQse3g6aXJbMF0seTppclsxXX0pLCF5LmRyYWdEYXRhLmRpZERyYWcmJiF5LmhvdmVyRGF0YS5kcmFnZ2VkJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYheS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyYmKHgoS2ksWyJjbGljayIsInRhcCIsInZjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSxmZT0hMSxRdC50aW1lU3RhbXAtZ2U8PV9yLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oVnQmJmNsZWFyVGltZW91dChWdCksZmU9ITAsZ2U9bnVsbCx4KEtpLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDppclswXSx5OmlyWzFdfSkpOihWdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZmV8fHgoS2ksWyJvbmVjbGljayIsIm9uZXRhcCIsInZvbmVjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KX0sX3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxnZT1RdC50aW1lU3RhbXApKSxLaT09bnVsbCYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXkuaG92ZXJEYXRhLmRyYWdnZWQmJiFUKFF0KSYmKF9yLiQoZykudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSwkci5sZW5ndGg+MCYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz0kcj1fci5jb2xsZWN0aW9uKCkpLElhPT1LaSYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmSWEhPW51bGwmJklhLl9wcml2YXRlLnNlbGVjdGFibGUmJih5LmhvdmVyRGF0YS5kcmFnZ2luZ3x8KF9yLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fFBvP0lhLnNlbGVjdGVkKCk/SWEudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKTpJYS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSk6UG98fChfci4kKGcpLnVubWVyZ2UoSWEpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksSWEuc2VsZWN0KFsidGFwc2VsZWN0Il0pKSkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkpLHkuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIG1jPV9yLmNvbGxlY3Rpb24oeS5nZXRBbGxJbkJveChzclswXSxzclsxXSxzclsyXSxzclszXSkpO3kucmVkcmF3SGludCgic2VsZWN0IiwhMCksbWMubGVuZ3RoPjAmJnkucmVkcmF3SGludCgiZWxlcyIsITApLF9yLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpRdCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX0pO3ZhciBFYT1mdW5jdGlvbih6Zil7cmV0dXJuIHpmLnNlbGVjdGFibGUoKSYmIXpmLnNlbGVjdGVkKCl9O19yLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fFBvfHxfci4kKGcpLnVubWVyZ2UobWMpLnVuc2VsZWN0KCksbWMuZW1pdCgiYm94Iikuc3RkRmlsdGVyKEVhKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx5LnJlZHJhdygpfWlmKHkuaG92ZXJEYXRhLmRyYWdnaW5nJiYoeS5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpKSwhc3JbNF0pe3kucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3SGludCgiZWxlcyIsITApO3ZhciBKYT1LaSYmS2kuZ3JhYmJlZCgpO2Z0KCRyKSxKYSYmKEtpLmVtaXQoImZyZWVvbiIpLCRyLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihLaS5lbWl0KCJkcmFnZnJlZW9uIiksJHIuZW1pdCgiZHJhZ2ZyZWUiKSkpfX1zcls0XT0wLHkuaG92ZXJEYXRhLmRvd249bnVsbCx5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSExLHkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMSx5LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITEseS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz0hMSx5LmRyYWdEYXRhLmRpZERyYWc9ITEseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS5kcmFnRGVsdGE9W10seS5ob3ZlckRhdGEubWRvd25Qb3M9bnVsbCx5LmhvdmVyRGF0YS5tZG93bkdQb3M9bnVsbH19LCExKTt2YXIgbmU9ZnVuY3Rpb24oUXQpe2lmKCF5LnNjcm9sbGluZ1BhZ2Upe3ZhciBqbj15LmN5LF9yPWpuLnpvb20oKSxpcj1qbi5wYW4oKSxzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKSxJYT1bc3JbMF0qX3IraXIueCxzclsxXSpfcitpci55XTtpZih5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHkuaG92ZXJEYXRhLmRyYWdnaW5nfHx5LmhvdmVyRGF0YS5jeHRTdGFydGVkfHx6dCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihqbi5wYW5uaW5nRW5hYmxlZCgpJiZqbi51c2VyUGFubmluZ0VuYWJsZWQoKSYmam4uem9vbWluZ0VuYWJsZWQoKSYmam4udXNlclpvb21pbmdFbmFibGVkKCkpe1F0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLndoZWVsWm9vbWluZz0hMCxjbGVhclRpbWVvdXQoeS5kYXRhLndoZWVsVGltZW91dCkseS5kYXRhLndoZWVsVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS5kYXRhLndoZWVsWm9vbWluZz0hMSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpfSwxNTApO3ZhciAkcjtRdC5kZWx0YVkhPW51bGw/JHI9UXQuZGVsdGFZLy0yNTA6UXQud2hlZWxEZWx0YVkhPW51bGw/JHI9UXQud2hlZWxEZWx0YVkvMWUzOiRyPVF0LndoZWVsRGVsdGEvMWUzLCRyPSRyKnkud2hlZWxTZW5zaXRpdml0eTt2YXIgS2k9UXQuZGVsdGFNb2RlPT09MTtLaSYmKCRyKj0zMyk7dmFyIFBvPWpuLnpvb20oKSpNYXRoLnBvdygxMCwkcik7UXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIiYmKFBvPXkuZ2VzdHVyZVN0YXJ0Wm9vbSpRdC5zY2FsZSksam4uem9vbSh7bGV2ZWw6UG8scmVuZGVyZWRQb3NpdGlvbjp7eDpJYVswXSx5OklhWzFdfX0pLGpuLmVtaXQoUXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIj8icGluY2h6b29tIjoic2Nyb2xsem9vbSIpfX19O3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ3aGVlbCIsbmUsITApLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywic2Nyb2xsIixmdW5jdGlvbihRdCl7eS5zY3JvbGxpbmdQYWdlPSEwLGNsZWFyVGltZW91dCh5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0KSx5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5LnNjcm9sbGluZ1BhZ2U9ITF9LDI1MCl9LCEwKSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiZ2VzdHVyZXN0YXJ0IixmdW5jdGlvbihRdCl7eS5nZXN0dXJlU3RhcnRab29tPXkuY3kuem9vbSgpLHkuaGFzVG91Y2hTdGFydGVkfHxRdC5wcmV2ZW50RGVmYXVsdCgpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKEVyKXt5Lmhhc1RvdWNoU3RhcnRlZHx8bmUoRXIpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlb3V0IixmdW5jdGlvbihRdCl7dmFyIGpuPXkucHJvamVjdEludG9WaWV3cG9ydChRdC5jbGllbnRYLFF0LmNsaWVudFkpO3kuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJtb3VzZW91dCIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKFF0KXt2YXIgam49eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSk7eS5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6Im1vdXNlb3ZlciIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpO3ZhciBQZSxwZSxibix6ZSxWZSxFbixEbixLbixTbixXbixycix2cix1cix0cj1mdW5jdGlvbihRdCxqbixfcixpcil7cmV0dXJuIE1hdGguc3FydCgoX3ItUXQpKihfci1RdCkrKGlyLWpuKSooaXItam4pKX0sd249ZnVuY3Rpb24oUXQsam4sX3IsaXIpe3JldHVybihfci1RdCkqKF9yLVF0KSsoaXItam4pKihpci1qbil9LGdyO3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iixncj1mdW5jdGlvbihRdCl7aWYoeS5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFlZShRdCkpe2t0KCkseS50b3VjaERhdGEuY2FwdHVyZT0hMCx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwO3ZhciBqbj15LmN5LF9yPXkudG91Y2hEYXRhLm5vdyxpcj15LnRvdWNoRGF0YS5lYXJsaWVyO2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7X3JbMF09c3JbMF0sX3JbMV09c3JbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIHNyPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtfclsyXT1zclswXSxfclszXT1zclsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgc3I9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO19yWzRdPXNyWzBdLF9yWzVdPXNyWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITAsZnQoeS5kcmFnRGF0YS50b3VjaERyYWdFbGVzKTt2YXIgSWE9eS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7U249SWFbMF0sV249SWFbMV0scnI9SWFbMl0sdnI9SWFbM10sUGU9UXQudG91Y2hlc1swXS5jbGllbnRYLVNuLHBlPVF0LnRvdWNoZXNbMF0uY2xpZW50WS1Xbixibj1RdC50b3VjaGVzWzFdLmNsaWVudFgtU24semU9UXQudG91Y2hlc1sxXS5jbGllbnRZLVduLHVyPTA8PVBlJiZQZTw9cnImJjA8PWJuJiZibjw9cnImJjA8PXBlJiZwZTw9dnImJjA8PXplJiZ6ZTw9dnI7dmFyICRyPWpuLnBhbigpLEtpPWpuLnpvb20oKTtWZT10cihQZSxwZSxibix6ZSksRW49d24oUGUscGUsYm4semUpLERuPVsoUGUrYm4pLzIsKHBlK3plKS8yXSxLbj1bKERuWzBdLSRyLngpL0tpLChEblsxXS0kci55KS9LaV07dmFyIFBvPTIwMCxOYz1QbypQbztpZihFbjxOYyYmIVF0LnRvdWNoZXNbMl0pe3ZhciBaYT15LmZpbmROZWFyZXN0RWxlbWVudChfclswXSxfclsxXSwhMCwhMCksbWM9eS5maW5kTmVhcmVzdEVsZW1lbnQoX3JbMl0sX3JbM10sITAsITApO1phJiZaYS5pc05vZGUoKT8oWmEuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpfclswXSx5Ol9yWzFdfX0pLHkudG91Y2hEYXRhLnN0YXJ0PVphKTptYyYmbWMuaXNOb2RlKCk/KG1jLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6X3JbMF0seTpfclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydD1tYyk6am4uZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6X3JbMF0seTpfclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydCYmKHkudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHkudG91Y2hEYXRhLmN4dD0hMCx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXcoKTtyZXR1cm59fWlmKFF0LnRvdWNoZXNbMl0pam4uYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZRdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIVF0LnRvdWNoZXNbMV0pe2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBFYT15LmZpbmROZWFyZXN0RWxlbWVudHMoX3JbMF0sX3JbMV0sITAsITApLEphPUVhWzBdO2lmKEphIT1udWxsJiYoSmEuYWN0aXZhdGUoKSx5LnRvdWNoRGF0YS5zdGFydD1KYSx5LnRvdWNoRGF0YS5zdGFydHM9RWEseS5ub2RlSXNHcmFiYmFibGUoSmEpKSl7dmFyIHZsPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcz1qbi5jb2xsZWN0aW9uKCksemY9bnVsbDt5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhd0hpbnQoImRyYWciLCEwKSxKYS5zZWxlY3RlZCgpPyh6Zj1qbi4kKGZ1bmN0aW9uKHNkKXtyZXR1cm4gc2Quc2VsZWN0ZWQoKSYmeS5ub2RlSXNHcmFiYmFibGUoc2QpfSksYXQoemYse2FkZFRvTGlzdDp2bH0pKTpsdChKYSx7YWRkVG9MaXN0OnZsfSksUyhKYSk7dmFyIHhwPWZ1bmN0aW9uKGJ2KXtyZXR1cm57b3JpZ2luYWxFdmVudDpRdCx0eXBlOmJ2LHBvc2l0aW9uOnt4Ol9yWzBdLHk6X3JbMV19fX07SmEuZW1pdCh4cCgiZ3JhYm9uIikpLHpmP3pmLmZvckVhY2goZnVuY3Rpb24oc2Qpe3NkLmVtaXQoeHAoImdyYWIiKSl9KTpKYS5lbWl0KHhwKCJncmFiIikpfXgoSmEsWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sUXQse3g6X3JbMF0seTpfclsxXX0pLEphPT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4OnNyWzBdLHk6c3JbMV19LHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS5yZWRyYXcoKSkseS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZT0rbmV3IERhdGUsY2xlYXJUaW1lb3V0KHkudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LnRvdWNoRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD09PSExJiYheS5waW5jaGluZyYmIXkudG91Y2hEYXRhLnNlbGVjdGluZyYmeCh5LnRvdWNoRGF0YS5zdGFydCxbInRhcGhvbGQiXSxRdCx7eDpfclswXSx5Ol9yWzFdfSl9LHkudGFwaG9sZER1cmF0aW9uKX19aWYoUXQudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIga3A9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bXSxxZj0wO3FmPF9yLmxlbmd0aDtxZisrKWtwW3FmXT1pcltxZl09X3JbcWZdO3ZhciBtZz1RdC50b3VjaGVzWzBdO3kudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVttZy5jbGllbnRYLG1nLmNsaWVudFldfX19LCExKTt2YXIgZnI7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJ0b3VjaG1vdmUiLGZyPWZ1bmN0aW9uKFF0KXt2YXIgam49eS50b3VjaERhdGEuY2FwdHVyZTtpZighKCFqbiYmIWVlKFF0KSkpe3ZhciBfcj15LnNlbGVjdGlvbixpcj15LmN5LHNyPXkudG91Y2hEYXRhLm5vdyxJYT15LnRvdWNoRGF0YS5lYXJsaWVyLCRyPWlyLnpvb20oKTtpZihRdC50b3VjaGVzWzBdKXt2YXIgS2k9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpO3NyWzBdPUtpWzBdLHNyWzFdPUtpWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBLaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7c3JbMl09S2lbMF0sc3JbM109S2lbMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIEtpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTtzcls0XT1LaVswXSxzcls1XT1LaVsxXX12YXIgUG89eS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24sTmM7aWYoam4mJlF0LnRvdWNoZXNbMF0mJlBvKXtmb3IodmFyIFphPVtdLG1jPTA7bWM8c3IubGVuZ3RoO21jKyspWmFbbWNdPXNyW21jXS1JYVttY107dmFyIEVhPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1Qb1swXSxKYT1FYSpFYSx2bD1RdC50b3VjaGVzWzBdLmNsaWVudFktUG9bMV0semY9dmwqdmwseHA9SmEremY7TmM9eHA+PXkudG91Y2hUYXBUaHJlc2hvbGQyfWlmKGpuJiZ5LnRvdWNoRGF0YS5jeHQpe1F0LnByZXZlbnREZWZhdWx0KCk7dmFyIGtwPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixxZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sbWc9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLHNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1Xbixidj13bihrcCxxZixtZyxzZCksX209YnYvRW4sZ3g9MTUwLE8zPWd4Kmd4LHB4PTEuNSxUOT1weCpweDtpZihfbT49VDl8fGJ2Pj1PMyl7eS50b3VjaERhdGEuY3h0PSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgTjM9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpzclswXSx5OnNyWzFdfX07eS50b3VjaERhdGEuc3RhcnQ/KHkudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KE4zKSx5LnRvdWNoRGF0YS5zdGFydD1udWxsKTppci5lbWl0KE4zKX19aWYoam4mJnkudG91Y2hEYXRhLmN4dCl7dmFyIE4zPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fTt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS50b3VjaERhdGEuc3RhcnQ/eS50b3VjaERhdGEuc3RhcnQuZW1pdChOMyk6aXIuZW1pdChOMykseS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSEwO3ZhciAkZD15LmZpbmROZWFyZXN0RWxlbWVudChzclswXSxzclsxXSwhMCwhMCk7KCF5LnRvdWNoRGF0YS5jeHRPdmVyfHwkZCE9PXkudG91Y2hEYXRhLmN4dE92ZXIpJiYoeS50b3VjaERhdGEuY3h0T3ZlciYmeS50b3VjaERhdGEuY3h0T3Zlci5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuY3h0T3Zlcj0kZCwkZCYmJGQuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6c3JbMF0seTpzclsxXX19KSl9ZWxzZSBpZihqbiYmUXQudG91Y2hlc1syXSYmaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpKVF0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx5LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGlyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuc2VsZWN0aW5nPSEwLHkudG91Y2hEYXRhLmRpZFNlbGVjdD0hMCxfcls0XT0xLCFfcnx8X3IubGVuZ3RoPT09MHx8X3JbMF09PT12b2lkIDA/KF9yWzBdPShzclswXStzclsyXStzcls0XSkvMyxfclsxXT0oc3JbMV0rc3JbM10rc3JbNV0pLzMsX3JbMl09KHNyWzBdK3NyWzJdK3NyWzRdKS8zKzEsX3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKzEpOihfclsyXT0oc3JbMF0rc3JbMl0rc3JbNF0pLzMsX3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCk7ZWxzZSBpZihqbiYmUXQudG91Y2hlc1sxXSYmIXkudG91Y2hEYXRhLmRpZFNlbGVjdCYmaXIuem9vbWluZ0VuYWJsZWQoKSYmaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclpvb21pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgdzE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKHcxKXt5LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIHpkPTA7emQ8dzEubGVuZ3RoO3pkKyspe3ZhciBDOT13MVt6ZF0uX3ByaXZhdGU7QzkuZ3JhYmJlZD0hMSxDOS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIEdiPXkudG91Y2hEYXRhLnN0YXJ0LGtwPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixxZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sbWc9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLHNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1XbixuUj10cihrcCxxZixtZyxzZCksRHR0PW5SL1ZlO2lmKHVyKXt2YXIgT3R0PWtwLVBlLE50dD1xZi1wZSxQdHQ9bWctYm4sRnR0PXNkLXplLEJ0dD0oT3R0K1B0dCkvMixSdHQ9KE50dCtGdHQpLzIsVWs9aXIuem9vbSgpLHNNPVVrKkR0dCxfOT1pci5wYW4oKSxyUj1LblswXSpVaytfOS54LGlSPUtuWzFdKlVrK185LnksanR0PXt4Oi1zTS9VayooclItXzkueC1CdHQpK3JSLHk6LXNNL1VrKihpUi1fOS55LVJ0dCkraVJ9O2lmKEdiJiZHYi5hY3RpdmUoKSl7dmFyIHcxPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztmdCh3MSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksR2IudW5hY3RpdmF0ZSgpLmVtaXQoImZyZWVvbiIpLHcxLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihHYi5lbWl0KCJkcmFnZnJlZW9uIiksdzEuZW1pdCgiZHJhZ2ZyZWUiKSl9aXIudmlld3BvcnQoe3pvb206c00scGFuOmp0dCxjYW5jZWxPbkZhaWxlZFpvb206ITB9KSxpci5lbWl0KCJwaW5jaHpvb20iKSxWZT1uUixQZT1rcCxwZT1xZixibj1tZyx6ZT1zZCx5LnBpbmNoaW5nPSEwfWlmKFF0LnRvdWNoZXNbMF0pe3ZhciBLaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7c3JbMF09S2lbMF0sc3JbMV09S2lbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIEtpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtzclsyXT1LaVswXSxzclszXT1LaVsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgS2k9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO3NyWzRdPUtpWzBdLHNyWzVdPUtpWzFdfX1lbHNlIGlmKFF0LnRvdWNoZXNbMF0mJiF5LnRvdWNoRGF0YS5kaWRTZWxlY3Qpe3ZhciBFcD15LnRvdWNoRGF0YS5zdGFydCxhTT15LnRvdWNoRGF0YS5sYXN0LCRkO2lmKCF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmKCRkPXkuZmluZE5lYXJlc3RFbGVtZW50KHNyWzBdLHNyWzFdLCEwLCEwKSksam4mJkVwIT1udWxsJiZRdC5wcmV2ZW50RGVmYXVsdCgpLGpuJiZFcCE9bnVsbCYmeS5ub2RlSXNEcmFnZ2FibGUoRXApKWlmKE5jKXt2YXIgdzE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzLHNSPSF5LmRyYWdEYXRhLmRpZERyYWc7c1ImJmF0KHcxLHtpbkRyYWdMYXllcjohMH0pLHkuZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgV2s9e3g6MCx5OjB9O2lmKFgoWmFbMF0pJiZYKFphWzFdKSYmKFdrLngrPVphWzBdLFdrLnkrPVphWzFdLHNSKSl7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIFRwPXkudG91Y2hEYXRhLmRyYWdEZWx0YTtUcCYmWChUcFswXSkmJlgoVHBbMV0pJiYoV2sueCs9VHBbMF0sV2sueSs9VHBbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCx3MS5zaWxlbnRTaGlmdChXaykuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF09PUlhWzBdJiZ5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdPT1JYVsxXSYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKX1lbHNle3ZhciBUcD15LnRvdWNoRGF0YS5kcmFnRGVsdGE9eS50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtUcC5sZW5ndGg9PT0wPyhUcC5wdXNoKFphWzBdKSxUcC5wdXNoKFphWzFdKSk6KFRwWzBdKz1aYVswXSxUcFsxXSs9WmFbMV0pfWlmKHgoRXB8fCRkLFsidG91Y2htb3ZlIiwidGFwZHJhZyIsInZtb3VzZW1vdmUiXSxRdCx7eDpzclswXSx5OnNyWzFdfSksKCFFcHx8IUVwLmdyYWJiZWQoKSkmJiRkIT1hTSYmKGFNJiZhTS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSksJGQmJiRkLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkpLHkudG91Y2hEYXRhLmxhc3Q9JGQsam4pZm9yKHZhciB6ZD0wO3pkPHNyLmxlbmd0aDt6ZCsrKXNyW3pkXSYmeS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblt6ZF0mJk5jJiYoeS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoam4mJihFcD09bnVsbHx8RXAucGFubmFibGUoKSkmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgJHR0PUEoRXAseS50b3VjaERhdGEuc3RhcnRzKTskdHQmJihRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1xNSh5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSkseS5zd2lwZVBhbm5pbmc/KGlyLnBhbkJ5KHt4OlphWzBdKiRyLHk6WmFbMV0qJHJ9KSxpci5lbWl0KCJkcmFncGFuIikpOk5jJiYoeS5zd2lwZVBhbm5pbmc9ITAsaXIucGFuQnkoe3g6RWEqJHIseTp2bCokcn0pLGlyLmVtaXQoImRyYWdwYW4iKSxFcCYmKEVwLnVuYWN0aXZhdGUoKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIEtpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzBdLmNsaWVudFgsUXQudG91Y2hlc1swXS5jbGllbnRZKTtzclswXT1LaVswXSxzclsxXT1LaVsxXX19Zm9yKHZhciBtYz0wO21jPHNyLmxlbmd0aDttYysrKUlhW21jXT1zclttY107am4mJlF0LnRvdWNoZXMubGVuZ3RoPjAmJiF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpfX0sITEpO3ZhciBKcjt5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoY2FuY2VsIixKcj1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0O3kudG91Y2hEYXRhLmNhcHR1cmU9ITEsam4mJmpuLnVuYWN0aXZhdGUoKX0pO3ZhciB3aSxLcyxrYSxDaTtpZih5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoZW5kIix3aT1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0LF9yPXkudG91Y2hEYXRhLmNhcHR1cmU7aWYoX3IpUXQudG91Y2hlcy5sZW5ndGg9PT0wJiYoeS50b3VjaERhdGEuY2FwdHVyZT0hMSksUXQucHJldmVudERlZmF1bHQoKTtlbHNlIHJldHVybjt2YXIgaXI9eS5zZWxlY3Rpb247eS5zd2lwZVBhbm5pbmc9ITEseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExO3ZhciBzcj15LmN5LElhPXNyLnpvb20oKSwkcj15LnRvdWNoRGF0YS5ub3csS2k9eS50b3VjaERhdGEuZWFybGllcjtpZihRdC50b3VjaGVzWzBdKXt2YXIgUG89eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpOyRyWzBdPVBvWzBdLCRyWzFdPVBvWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBQbz15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7JHJbMl09UG9bMF0sJHJbM109UG9bMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIFBvPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTskcls0XT1Qb1swXSwkcls1XT1Qb1sxXX1qbiYmam4udW5hY3RpdmF0ZSgpO3ZhciBOYztpZih5LnRvdWNoRGF0YS5jeHQpe2lmKE5jPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19LGpuP2puLmVtaXQoTmMpOnNyLmVtaXQoTmMpLCF5LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07am4/am4uZW1pdChaYSk6c3IuZW1pdChaYSl9eS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHQ9ITEseS50b3VjaERhdGEuc3RhcnQ9bnVsbCx5LnJlZHJhdygpO3JldHVybn1pZighUXQudG91Y2hlc1syXSYmc3IuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZ5LnRvdWNoRGF0YS5zZWxlY3Rpbmcpe3kudG91Y2hEYXRhLnNlbGVjdGluZz0hMTt2YXIgbWM9c3IuY29sbGVjdGlvbih5LmdldEFsbEluQm94KGlyWzBdLGlyWzFdLGlyWzJdLGlyWzNdKSk7aXJbMF09dm9pZCAwLGlyWzFdPXZvaWQgMCxpclsyXT12b2lkIDAsaXJbM109dm9pZCAwLGlyWzRdPTAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxzci5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6UXQscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KTt2YXIgRWE9ZnVuY3Rpb24oTzMpe3JldHVybiBPMy5zZWxlY3RhYmxlKCkmJiFPMy5zZWxlY3RlZCgpfTttYy5lbWl0KCJib3giKS5zdGRGaWx0ZXIoRWEpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLG1jLm5vbmVtcHR5KCkmJnkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3KCl9aWYoam4hPW51bGwmJmpuLnVuYWN0aXZhdGUoKSxRdC50b3VjaGVzWzJdKXkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTtlbHNlIGlmKCFRdC50b3VjaGVzWzFdKXtpZighUXQudG91Y2hlc1swXSl7aWYoIVF0LnRvdWNoZXNbMF0pe3kuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgSmE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGpuIT1udWxsKXt2YXIgdmw9am4uX3ByaXZhdGUuZ3JhYmJlZDtmdChKYSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksdmwmJihqbi5lbWl0KCJmcmVlb24iKSxKYS5lbWl0KCJmcmVlIikseS5kcmFnRGF0YS5kaWREcmFnJiYoam4uZW1pdCgiZHJhZ2ZyZWVvbiIpLEphLmVtaXQoImRyYWdmcmVlIikpKSx4KGpuLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksam4udW5hY3RpdmF0ZSgpLHkudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgemY9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITApO3goemYsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KX12YXIgeHA9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS0kclswXSxrcD14cCp4cCxxZj15LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLSRyWzFdLG1nPXFmKnFmLHNkPWtwK21nLGJ2PXNkKklhKklhO3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWR8fChqbnx8c3IuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSx4KGpuLFsidGFwIiwidmNsaWNrIl0sUXQse3g6JHJbMF0seTokclsxXX0pLEtzPSExLFF0LnRpbWVTdGFtcC1DaTw9c3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhrYSYmY2xlYXJUaW1lb3V0KGthKSxLcz0hMCxDaT1udWxsLHgoam4sWyJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSkpOihrYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7S3N8fHgoam4sWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSl9LHNyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksQ2k9UXQudGltZVN0YW1wKSksam4hPW51bGwmJiF5LmRyYWdEYXRhLmRpZERyYWcmJmpuLl9wcml2YXRlLnNlbGVjdGFibGUmJmJ2PHkudG91Y2hUYXBUaHJlc2hvbGQyJiYheS5waW5jaGluZyYmKHNyLnNlbGVjdGlvblR5cGUoKT09PSJzaW5nbGUiPyhzci4kKGcpLnVubWVyZ2Uoam4pLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksam4uc2VsZWN0KFsidGFwc2VsZWN0Il0pKTpqbi5zZWxlY3RlZCgpP2puLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6am4uc2VsZWN0KFsidGFwc2VsZWN0Il0pLHkucmVkcmF3SGludCgiZWxlcyIsITApKSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfX19Zm9yKHZhciBfbT0wO19tPCRyLmxlbmd0aDtfbSsrKUtpW19tXT0kcltfbV07eS5kcmFnRGF0YS5kaWREcmFnPSExLFF0LnRvdWNoZXMubGVuZ3RoPT09MCYmKHkudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPW51bGwseS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx5LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLFF0LnRvdWNoZXMubGVuZ3RoPDImJihRdC50b3VjaGVzLmxlbmd0aD09PTEmJih5LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WV0pLHkucGluY2hpbmc9ITEseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKSl9LCExKSx0eXBlb2YgVG91Y2hFdmVudD4idSIpe3ZhciBoaT1bXSxncz1mdW5jdGlvbihRdCl7cmV0dXJue2NsaWVudFg6UXQuY2xpZW50WCxjbGllbnRZOlF0LmNsaWVudFksZm9yY2U6MSxpZGVudGlmaWVyOlF0LnBvaW50ZXJJZCxwYWdlWDpRdC5wYWdlWCxwYWdlWTpRdC5wYWdlWSxyYWRpdXNYOlF0LndpZHRoLzIscmFkaXVzWTpRdC5oZWlnaHQvMixzY3JlZW5YOlF0LnNjcmVlblgsc2NyZWVuWTpRdC5zY3JlZW5ZLHRhcmdldDpRdC50YXJnZXR9fSxxaT1mdW5jdGlvbihRdCl7cmV0dXJue2V2ZW50OlF0LHRvdWNoOmdzKFF0KX19LFNpPWZ1bmN0aW9uKFF0KXtoaS5wdXNoKHFpKFF0KSl9LFVpPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPTA7am48aGkubGVuZ3RoO2puKyspe3ZhciBfcj1oaVtqbl07aWYoX3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkKXtoaS5zcGxpY2Uoam4sMSk7cmV0dXJufX19LEdhPWZ1bmN0aW9uKFF0KXt2YXIgam49aGkuZmlsdGVyKGZ1bmN0aW9uKF9yKXtyZXR1cm4gX3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkfSlbMF07am4uZXZlbnQ9UXQsam4udG91Y2g9Z3MoUXQpfSxZcz1mdW5jdGlvbihRdCl7UXQudG91Y2hlcz1oaS5tYXAoZnVuY3Rpb24oam4pe3JldHVybiBqbi50b3VjaH0pfSx6cz1mdW5jdGlvbihRdCl7cmV0dXJuIFF0LnBvaW50ZXJUeXBlPT09Im1vdXNlInx8UXQucG9pbnRlclR5cGU9PT00fTt5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmRvd24iLGZ1bmN0aW9uKEVyKXt6cyhFcil8fChFci5wcmV2ZW50RGVmYXVsdCgpLFNpKEVyKSxZcyhFciksZ3IoRXIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVydXAiLGZ1bmN0aW9uKEVyKXt6cyhFcil8fChVaShFciksWXMoRXIpLHdpKEVyKSl9KSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmNhbmNlbCIsZnVuY3Rpb24oRXIpe3pzKEVyKXx8KFVpKEVyKSxZcyhFciksSnIoRXIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVybW92ZSIsZnVuY3Rpb24oRXIpe3pzKEVyKXx8KEVyLnByZXZlbnREZWZhdWx0KCksR2EoRXIpLFlzKEVyKSxmcihFcikpfSl9fTt2YXIgZHY9e307ZHYuZ2VuZXJhdGVQb2x5Z29uPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOmcsZHJhdzpmdW5jdGlvbihULEEsRCxPLCQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicG9seWdvbiIsVCxBLEQsTywkLHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihULEEsRCxPLCQscSxTKXtyZXR1cm4geWsoJCxxLHRoaXMucG9pbnRzLFQsQSxELzIsTy8yLFMpfSxjaGVja1BvaW50OmZ1bmN0aW9uKFQsQSxELE8sJCxxLFMpe3JldHVybiBsdihULEEsdGhpcy5wb2ludHMscSxTLE8sJCxbMCwtMV0sRCl9fX0sZHYuZ2VuZXJhdGVFbGxpcHNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5lbGxpcHNlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImVsbGlwc2UiLGRyYXc6ZnVuY3Rpb24oZyx4LFQsQSxEKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEEsRCl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7cmV0dXJuIEZZKEQsTyxnLHgsVC8yKyQsQS8yKyQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3JldHVybiBDMyhnLHgsQSxELE8sJCxUKX19fSxkdi5nZW5lcmF0ZVJvdW5kUG9seWdvbj1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgqMiksVD0wO1Q8Zy5sZW5ndGgvMjtUKyspe3ZhciBBPVQqMixEPXZvaWQgMDtUPGcubGVuZ3RoLzItMT9EPShUKzEpKjI6RD0wLHhbVCo0XT1nW0FdLHhbVCo0KzFdPWdbQSsxXTt2YXIgTz1nW0RdLWdbQV0sJD1nW0QrMV0tZ1tBKzFdLHE9TWF0aC5zcXJ0KE8qTyskKiQpO3hbVCo0KzJdPU8vcSx4W1QqNCszXT0kL3F9cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOngsZHJhdzpmdW5jdGlvbihHLFcsZXQsYXQsbHQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicm91bmQtcG9seWdvbiIsRyxXLGV0LGF0LGx0LHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihHLFcsZXQsYXQsbHQsZnQsQXQpe3JldHVybiBCWShsdCxmdCx0aGlzLnBvaW50cyxHLFcsZXQsYXQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKEcsVyxldCxhdCxsdCxmdCxBdCl7cmV0dXJuIFBZKEcsVyx0aGlzLnBvaW50cyxmdCxBdCxhdCxsdCl9fX0sZHYuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbInJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJyb3VuZC1yZWN0YW5nbGUiLHBvaW50czpuZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsQSxEKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEEsRCl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7cmV0dXJuIGVGKEQsTyxnLHgsVCxBLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3ZhciBxPXhrKEEsRCksUz1xKjI7cmV0dXJuISEobHYoZyx4LHRoaXMucG9pbnRzLE8sJCxBLEQtUyxbMCwtMV0sVCl8fGx2KGcseCx0aGlzLnBvaW50cyxPLCQsQS1TLEQsWzAsLTFdLFQpfHxDMyhnLHgsUyxTLE8tQS8yK3EsJC1ELzIrcSxUKXx8QzMoZyx4LFMsUyxPK0EvMi1xLCQtRC8yK3EsVCl8fEMzKGcseCxTLFMsTytBLzItcSwkK0QvMi1xLFQpfHxDMyhnLHgsUyxTLE8tQS8yK3EsJCtELzItcSxUKSl9fX0sZHYuZ2VuZXJhdGVDdXRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJjdXQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmN1dHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJjdXQtcmVjdGFuZ2xlIixjb3JuZXJMZW5ndGg6c0YoKSxwb2ludHM6bmQoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEEsRCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxBLEQpfSxnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzOmZ1bmN0aW9uKGcseCxULEEpe3ZhciBEPXRoaXMuY29ybmVyTGVuZ3RoLE89eC8yLCQ9Zy8yLHE9VC0kLFM9VCskLEc9QS1PLFc9QStPO3JldHVybnt0b3BMZWZ0OltxLEcrRCxxK0QsRyxxK0QsRytEXSx0b3BSaWdodDpbUy1ELEcsUyxHK0QsUy1ELEcrRF0sYm90dG9tUmlnaHQ6W1MsVy1ELFMtRCxXLFMtRCxXLURdLGJvdHRvbUxlZnQ6W3ErRCxXLHEsVy1ELHErRCxXLURdfX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihnLHgsVCxBLEQsTywkKXt2YXIgcT10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoVCsyKiQsQSsyKiQsZyx4KSxTPVtdLmNvbmNhdC5hcHBseShbXSxbcS50b3BMZWZ0LnNwbGljZSgwLDQpLHEudG9wUmlnaHQuc3BsaWNlKDAsNCkscS5ib3R0b21SaWdodC5zcGxpY2UoMCw0KSxxLmJvdHRvbUxlZnQuc3BsaWNlKDAsNCldKTtyZXR1cm4geWsoRCxPLFMsZyx4KX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxBLEQsTywkKXtpZihsdihnLHgsdGhpcy5wb2ludHMsTywkLEEsRC0yKnRoaXMuY29ybmVyTGVuZ3RoLFswLC0xXSxUKXx8bHYoZyx4LHRoaXMucG9pbnRzLE8sJCxBLTIqdGhpcy5jb3JuZXJMZW5ndGgsRCxbMCwtMV0sVCkpcmV0dXJuITA7dmFyIHE9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKEEsRCxPLCQpO3JldHVybiBqZChnLHgscS50b3BMZWZ0KXx8amQoZyx4LHEudG9wUmlnaHQpfHxqZChnLHgscS5ib3R0b21SaWdodCl8fGpkKGcseCxxLmJvdHRvbUxlZnQpfX19LGR2LmdlbmVyYXRlQmFycmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5iYXJyZWw9e3JlbmRlcmVyOnRoaXMsbmFtZToiYmFycmVsIixwb2ludHM6bmQoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEEsRCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxBLEQpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3ZhciBxPS4xNSxTPS41LEc9Ljg1LFc9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhUKzIqJCxBKzIqJCxnLHgpLGV0PWZ1bmN0aW9uKGZ0KXt2YXIgQXQ9SDUoe3g6ZnRbMF0seTpmdFsxXX0se3g6ZnRbMl0seTpmdFszXX0se3g6ZnRbNF0seTpmdFs1XX0scSksa3Q9SDUoe3g6ZnRbMF0seTpmdFsxXX0se3g6ZnRbMl0seTpmdFszXX0se3g6ZnRbNF0seTpmdFs1XX0sUyksTXQ9SDUoe3g6ZnRbMF0seTpmdFsxXX0se3g6ZnRbMl0seTpmdFszXX0se3g6ZnRbNF0seTpmdFs1XX0sRyk7cmV0dXJuW2Z0WzBdLGZ0WzFdLEF0LngsQXQueSxrdC54LGt0LnksTXQueCxNdC55LGZ0WzRdLGZ0WzVdXX0sYXQ9W10uY29uY2F0KGV0KFcudG9wTGVmdCksZXQoVy50b3BSaWdodCksZXQoVy5ib3R0b21SaWdodCksZXQoVy5ib3R0b21MZWZ0KSk7cmV0dXJuIHlrKEQsTyxhdCxnLHgpfSxnZW5lcmF0ZUJhcnJlbEJlemllclB0czpmdW5jdGlvbihnLHgsVCxBKXt2YXIgRD14LzIsTz1nLzIsJD1ULU8scT1UK08sUz1BLUQsRz1BK0QsVz1TTChnLHgpLGV0PVcuaGVpZ2h0T2Zmc2V0LGF0PVcud2lkdGhPZmZzZXQsbHQ9Vy5jdHJsUHRPZmZzZXRQY3QqZyxmdD17dG9wTGVmdDpbJCxTK2V0LCQrbHQsUywkK2F0LFNdLHRvcFJpZ2h0OltxLWF0LFMscS1sdCxTLHEsUytldF0sYm90dG9tUmlnaHQ6W3EsRy1ldCxxLWx0LEcscS1hdCxHXSxib3R0b21MZWZ0OlskK2F0LEcsJCtsdCxHLCQsRy1ldF19O3JldHVybiBmdC50b3BMZWZ0LmlzVG9wPSEwLGZ0LnRvcFJpZ2h0LmlzVG9wPSEwLGZ0LmJvdHRvbUxlZnQuaXNCb3R0b209ITAsZnQuYm90dG9tUmlnaHQuaXNCb3R0b209ITAsZnR9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9U0woQSxEKSxTPXEuaGVpZ2h0T2Zmc2V0LEc9cS53aWR0aE9mZnNldDtpZihsdihnLHgsdGhpcy5wb2ludHMsTywkLEEsRC0yKlMsWzAsLTFdLFQpfHxsdihnLHgsdGhpcy5wb2ludHMsTywkLEEtMipHLEQsWzAsLTFdLFQpKXJldHVybiEwO2Zvcih2YXIgVz10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKEEsRCxPLCQpLGV0PWZ1bmN0aW9uKHp0LGVlLFZ0KXt2YXIgZmU9VnRbNF0sZ2U9VnRbMl0sbmU9VnRbMF0sUGU9VnRbNV0scGU9VnRbMV0sYm49TWF0aC5taW4oZmUsbmUpLHplPU1hdGgubWF4KGZlLG5lKSxWZT1NYXRoLm1pbihQZSxwZSksRW49TWF0aC5tYXgoUGUscGUpO2lmKGJuPD16dCYmenQ8PXplJiZWZTw9ZWUmJmVlPD1Fbil7dmFyIERuPVJZKGZlLGdlLG5lKSxLbj1JWShEblswXSxEblsxXSxEblsyXSx6dCksU249S24uZmlsdGVyKGZ1bmN0aW9uKFduKXtyZXR1cm4gMDw9V24mJlduPD0xfSk7aWYoU24ubGVuZ3RoPjApcmV0dXJuIFNuWzBdfXJldHVybiBudWxsfSxhdD1PYmplY3Qua2V5cyhXKSxsdD0wO2x0PGF0Lmxlbmd0aDtsdCsrKXt2YXIgZnQ9YXRbbHRdLEF0PVdbZnRdLGt0PWV0KGcseCxBdCk7aWYoa3QhPW51bGwpe3ZhciBNdD1BdFs1XSxEdD1BdFszXSxqdD1BdFsxXSxadD1yZihNdCxEdCxqdCxrdCk7aWYoQXQuaXNUb3AmJlp0PD14fHxBdC5pc0JvdHRvbSYmeDw9WnQpcmV0dXJuITB9fXJldHVybiExfX19LGR2LmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJib3R0b20tcm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmJvdHRvbXJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLHBvaW50czpuZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsQSxEKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEEsRCl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9Zy0oVC8yKyQpLFM9eC0oQS8yKyQpLEc9UyxXPWcrKFQvMiskKSxldD12bShELE8sZyx4LHEsUyxXLEcsITEpO3JldHVybiBldC5sZW5ndGg+MD9ldDplRihELE8sZyx4LFQsQSwkKX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxBLEQsTywkKXt2YXIgcT14ayhBLEQpLFM9MipxO2lmKGx2KGcseCx0aGlzLnBvaW50cyxPLCQsQSxELVMsWzAsLTFdLFQpfHxsdihnLHgsdGhpcy5wb2ludHMsTywkLEEtUyxELFswLC0xXSxUKSlyZXR1cm4hMDt2YXIgRz1BLzIrMipULFc9RC8yKzIqVCxldD1bTy1HLCQtVyxPLUcsJCxPK0csJCxPK0csJC1XXTtyZXR1cm4hIShqZChnLHgsZXQpfHxDMyhnLHgsUyxTLE8rQS8yLXEsJCtELzItcSxUKXx8QzMoZyx4LFMsUyxPLUEvMitxLCQrRC8yLXEsVCkpfX19LGR2LnJlZ2lzdGVyTm9kZVNoYXBlcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMubm9kZVNoYXBlcz17fSxnPXRoaXM7dGhpcy5nZW5lcmF0ZUVsbGlwc2UoKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidHJpYW5nbGUiLG5kKDMsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRyaWFuZ2xlIixuZCgzLDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmVjdGFuZ2xlIixuZCg0LDApKSx5LnNxdWFyZT15LnJlY3RhbmdsZSx0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUJhcnJlbCgpLHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO3t2YXIgeD1bMCwxLDEsMCwwLC0xLC0xLDBdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJkaWFtb25kIix4KSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1kaWFtb25kIix4KX10aGlzLmdlbmVyYXRlUG9seWdvbigicGVudGFnb24iLG5kKDUsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXBlbnRhZ29uIixuZCg1LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGV4YWdvbiIsbmQoNiwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGV4YWdvbiIsbmQoNiwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhlcHRhZ29uIixuZCg3LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXB0YWdvbiIsbmQoNywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oIm9jdGFnb24iLG5kKDgsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLW9jdGFnb24iLG5kKDgsMCkpO3ZhciBUPW5ldyBBcnJheSgyMCk7e3ZhciBBPUNMKDUsMCksRD1DTCg1LE1hdGguUEkvNSksTz0uNSooMy1NYXRoLnNxcnQoNSkpO08qPTEuNTc7Zm9yKHZhciAkPTA7JDxELmxlbmd0aC8yOyQrKylEWyQqMl0qPU8sRFskKjIrMV0qPU87Zm9yKHZhciAkPTA7JDwyMC80OyQrKylUWyQqNF09QVskKjJdLFRbJCo0KzFdPUFbJCoyKzFdLFRbJCo0KzJdPURbJCoyXSxUWyQqNCszXT1EWyQqMisxXX1UPWlGKFQpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJzdGFyIixUKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidmVlIixbLTEsLTEsMCwtLjMzMywxLC0xLDAsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaG9tYm9pZCIsWy0xLC0xLC4zMzMsLTEsMSwxLC0uMzMzLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIHE9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIscSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIixxKX15Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKFMpe3ZhciBHPVMuam9pbigiJCIpLFc9InBvbHlnb24tIitHLGV0O3JldHVybihldD10aGlzW1ddKT9ldDpnLmdlbmVyYXRlUG9seWdvbihXLFMpfX07dmFyICRrPXt9OyRrLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fSwkay5yZWRyYXc9ZnVuY3Rpb24oeSl7eT15fHxLUCgpO3ZhciBnPXRoaXM7Zy5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKGcuYXZlcmFnZVJlZHJhd1RpbWU9MCksZy5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKGcubGFzdFJlZHJhd1RpbWU9MCksZy5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihnLmxhc3REcmF3VGltZT0wKSxnLnJlcXVlc3RlZEZyYW1lPSEwLGcucmVuZGVyT3B0aW9ucz15fSwkay5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oeSxnKXtpZighdGhpcy5kZXN0cm95ZWQpe2c9PW51bGwmJmJsKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciB4PXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO3gucHVzaCh7Zm46eSxwcmlvcml0eTpnfSkseC5zb3J0KGZ1bmN0aW9uKFQsQSl7cmV0dXJuIEEucHJpb3JpdHktVC5wcmlvcml0eX0pfX07dmFyIFZCPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9Zy5iZWZvcmVSZW5kZXJDYWxsYmFja3MsRD0wO0Q8QS5sZW5ndGg7RCsrKUFbRF0uZm4oeCxUKX07JGsuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuY3k7aWYoIXkucmVuZGVyTG9vcFN0YXJ0ZWQpe3kucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIHg9ZnVuY3Rpb24gVChBKXtpZigheS5kZXN0cm95ZWQpe2lmKCFnLmJhdGNoaW5nKCkpaWYoeS5yZXF1ZXN0ZWRGcmFtZSYmIXkuc2tpcEZyYW1lKXtWQih5LCEwLEEpO3ZhciBEPWRnKCk7eS5yZW5kZXIoeS5yZW5kZXJPcHRpb25zKTt2YXIgTz15Lmxhc3REcmF3VGltZT1kZygpO3kuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih5LmF2ZXJhZ2VSZWRyYXdUaW1lPU8tRCkseS5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHkucmVkcmF3Q291bnQ9MCkseS5yZWRyYXdDb3VudCsrLHkucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYoeS5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyICQ9Ty1EO3kucmVkcmF3VG90YWxUaW1lKz0kLHkubGFzdFJlZHJhd1RpbWU9JCx5LmF2ZXJhZ2VSZWRyYXdUaW1lPXkuYXZlcmFnZVJlZHJhd1RpbWUvMiskLzIseS5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIFZCKHksITEsQSk7eS5za2lwRnJhbWU9ITEsRmYoVCl9fTtGZih4KX19O3ZhciBldHQ9ZnVuY3Rpb24oZyl7dGhpcy5pbml0KGcpfSxRTD1ldHQsTTM9UUwucHJvdG90eXBlO00zLmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdLE0zLmluaXQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcztnLm9wdGlvbnM9eSxnLmN5PXkuY3k7dmFyIHg9Zy5jb250YWluZXI9eS5jeS5jb250YWluZXIoKTtpZihSKXt2YXIgVD1SLmRvY3VtZW50LEE9VC5oZWFkLEQ9Il9fX19fX19fX19jeXRvc2NhcGVfc3R5bGVzaGVldCIsTz0iX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXIiLCQ9VC5nZXRFbGVtZW50QnlJZChEKSE9bnVsbDtpZih4LmNsYXNzTmFtZS5pbmRleE9mKE8pPDAmJih4LmNsYXNzTmFtZT0oeC5jbGFzc05hbWV8fCIiKSsiICIrTyksISQpe3ZhciBxPVQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtxLmlkPUQscS5pbm5lckhUTUw9Ii4iK08rIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsQS5pbnNlcnRCZWZvcmUocSxBLmNoaWxkcmVuWzBdKX12YXIgUz1SLmdldENvbXB1dGVkU3R5bGUoeCksRz1TLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7Rz09PSJzdGF0aWMiJiZTYygiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1nLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLGcuYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxnLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxnLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sZy50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sZy5yZWRyYXdzPTAsZy5zaG93RnBzPXkuc2hvd0ZwcyxnLmRlYnVnPXkuZGVidWcsZy5oaWRlRWRnZXNPblZpZXdwb3J0PXkuaGlkZUVkZ2VzT25WaWV3cG9ydCxnLnRleHR1cmVPblZpZXdwb3J0PXkudGV4dHVyZU9uVmlld3BvcnQsZy53aGVlbFNlbnNpdGl2aXR5PXkud2hlZWxTZW5zaXRpdml0eSxnLm1vdGlvbkJsdXJFbmFibGVkPXkubW90aW9uQmx1cixnLmZvcmNlZFBpeGVsUmF0aW89WCh5LnBpeGVsUmF0aW8pP3kucGl4ZWxSYXRpbzpudWxsLGcubW90aW9uQmx1cj15Lm1vdGlvbkJsdXIsZy5tb3Rpb25CbHVyT3BhY2l0eT15Lm1vdGlvbkJsdXJPcGFjaXR5LGcubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWcubW90aW9uQmx1ck9wYWNpdHksZy5tb3Rpb25CbHVyUHhSYXRpbz0xLGcubWJQeFJCbHVycnk9MSxnLm1pbk1iTG93UXVhbEZyYW1lcz00LGcuZnVsbFF1YWxpdHlNYj0hMSxnLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGcuZGVza3RvcFRhcFRocmVzaG9sZD15LmRlc2t0b3BUYXBUaHJlc2hvbGQsZy5kZXNrdG9wVGFwVGhyZXNob2xkMj15LmRlc2t0b3BUYXBUaHJlc2hvbGQqeS5kZXNrdG9wVGFwVGhyZXNob2xkLGcudG91Y2hUYXBUaHJlc2hvbGQ9eS50b3VjaFRhcFRocmVzaG9sZCxnLnRvdWNoVGFwVGhyZXNob2xkMj15LnRvdWNoVGFwVGhyZXNob2xkKnkudG91Y2hUYXBUaHJlc2hvbGQsZy50YXBob2xkRHVyYXRpb249NTAwLGcuYmluZGluZ3M9W10sZy5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZy5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxnLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGcucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGcucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxNMy5ub3RpZnk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHk9PT0iaW5pdCIpe3gubG9hZCgpO3JldHVybn1pZih5PT09ImRlc3Ryb3kiKXt4LmRlc3Ryb3koKTtyZXR1cm59KHk9PT0iYWRkInx8eT09PSJyZW1vdmUifHx5PT09Im1vdmUiJiZULmhhc0NvbXBvdW5kTm9kZXMoKXx8eT09PSJsb2FkInx8eT09PSJ6b3JkZXIifHx5PT09Im1vdW50IikmJnguaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseT09PSJ2aWV3cG9ydCImJngucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHk9PT0ibG9hZCJ8fHk9PT0icmVzaXplInx8eT09PSJtb3VudCIpJiYoeC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSx4Lm1hdGNoQ2FudmFzU2l6ZSh4LmNvbnRhaW5lcikpLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LE0zLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeT10aGlzO3kuZGVzdHJveWVkPSEwLHkuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIGc9MDtnPHkuYmluZGluZ3MubGVuZ3RoO2crKyl7dmFyIHg9eS5iaW5kaW5nc1tnXSxUPXgsQT1ULnRhcmdldDsoQS5vZmZ8fEEucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoQSxULmFyZ3MpfWlmKHkuYmluZGluZ3M9W10seS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seS5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHkucmVtb3ZlT2JzZXJ2ZXImJnkucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHkuc3R5bGVPYnNlcnZlciYmeS5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LnJlc2l6ZU9ic2VydmVyJiZ5LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh5LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sTTMuaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbS0wsamssR0Isb3gsZHYsJGtdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoTTMseSl9KTt2YXIgWkw9MWUzLzYwLHY5PXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxBPXRoaXMucmVuZGVyZXI7aWYoIVQuZGVxdWV1ZWluZ1NldHVwKXtULmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgRD1XYyhmdW5jdGlvbigpe0EucmVkcmF3SGludCgiZWxlcyIsITApLEEucmVkcmF3SGludCgiZHJhZyIsITApLEEucmVkcmF3KCl9LGcuZGVxUmVkcmF3VGhyZXNob2xkKSxPPWZ1bmN0aW9uKFMsRyl7dmFyIFc9ZGcoKSxldD1BLmF2ZXJhZ2VSZWRyYXdUaW1lLGF0PUEubGFzdFJlZHJhd1RpbWUsbHQ9W10sZnQ9QS5jeS5leHRlbnQoKSxBdD1BLmdldFBpeGVsUmF0aW8oKTtmb3IoU3x8QS5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBrdD1kZygpLE10PWt0LVcsRHQ9a3QtRztpZihhdDxaTCl7dmFyIGp0PVpMLShTP2V0OjApO2lmKER0Pj1nLmRlcUZhc3RDb3N0Kmp0KWJyZWFrfWVsc2UgaWYoUyl7aWYoTXQ+PWcuZGVxQ29zdCphdHx8TXQ+PWcuZGVxQXZnQ29zdCpldClicmVha31lbHNlIGlmKER0Pj1nLmRlcU5vRHJhd0Nvc3QqWkwpYnJlYWs7dmFyIFp0PWcuZGVxKFQsQXQsZnQpO2lmKFp0Lmxlbmd0aD4wKWZvcih2YXIgS3Q9MDtLdDxadC5sZW5ndGg7S3QrKylsdC5wdXNoKFp0W0t0XSk7ZWxzZSBicmVha31sdC5sZW5ndGg+MCYmKGcub25EZXFkKFQsbHQpLCFTJiZnLnNob3VsZFJlZHJhdyhULGx0LEF0LGZ0KSYmRCgpKX0sJD1nLnByaW9yaXR5fHx3TDtBLmJlZm9yZVJlbmRlcihPLCQoVCkpfX19fSxudHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpnbTtwKHRoaXMseSksdGhpcy5pZHNCeUtleT1uZXcgemIsdGhpcy5rZXlGb3JJZD1uZXcgemIsdGhpcy5jYWNoZXNCeUx2bD1uZXcgemIsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PWcsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT14fXJldHVybiBtKHksW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oeCl7eD09bnVsbCYmYmwoIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFQ9dGhpcy5pZHNCeUtleSxBPXRoaXMuaWRzQnlLZXkuZ2V0KHgpO3JldHVybiBBfHwoQT1uZXcgejUsVC5zZXQoeCxBKSksQX19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmFkZChUKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmRlbGV0ZShUKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4geD09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKHgpLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD14LmlkKCksQT10aGlzLmtleUZvcklkLmdldChUKSxEPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlSWRGb3JLZXkoQSxUKSx0aGlzLmFkZElkRm9yS2V5KEQsVCksdGhpcy5rZXlGb3JJZC5zZXQoVCxEKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxBPXRoaXMua2V5Rm9ySWQuZ2V0KFQpO3RoaXMuZGVsZXRlSWRGb3JLZXkoQSxUKSx0aGlzLmtleUZvcklkLmRlbGV0ZShUKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxBPXRoaXMua2V5Rm9ySWQuZ2V0KFQpLEQ9dGhpcy5nZXRLZXkoeCk7cmV0dXJuIEEhPT1EfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKHgpfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHgpfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXMuY2FjaGVzQnlMdmwsQT10aGlzLmx2bHMsRD1ULmdldCh4KTtyZXR1cm4gRHx8KEQ9bmV3IHpiLFQuc2V0KHgsRCksQS5wdXNoKHgpKSxEfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuZ2V0KHgpfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBBPXRoaXMuZ2V0S2V5KHgpLEQ9dGhpcy5nZXRDYWNoZShBLFQpO3JldHVybiBEIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoeCksRH19LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLmtleUZvcklkLmdldCh4LmlkKCkpLEQ9dGhpcy5nZXRDYWNoZShBLFQpO3JldHVybiBEfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuaGFzKHgpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBBPXRoaXMuZ2V0S2V5KHgpO3JldHVybiB0aGlzLmhhc0NhY2hlKEEsVCl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oeCxULEEpe0Eua2V5PXgsdGhpcy5nZXRDYWNoZXNBdChUKS5zZXQoeCxBKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxULEEpe3ZhciBEPXRoaXMuZ2V0S2V5KHgpO3RoaXMuc2V0Q2FjaGUoRCxULEEpLHRoaXMudXBkYXRlS2V5TWFwcGluZ0Zvcih4KX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3RoaXMuZ2V0Q2FjaGVzQXQoVCkuZGVsZXRlKHgpfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBBPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlQ2FjaGUoQSxUKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oQSl7cmV0dXJuIFQuZGVsZXRlQ2FjaGUoeCxBKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9eC5pZCgpLEE9dGhpcy5rZXlGb3JJZC5nZXQoVCk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKHgpO3ZhciBEPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoeCk7cmV0dXJuIEQmJnRoaXMuaW52YWxpZGF0ZUtleShBKSxEfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KEEpPT09MH19XSkseX0oKSx3OT0yNSxtOT01MCxjeD0tNCxKTD0zLHRNPTcuOTkscnR0PTgsaXR0PTEwMjQsc3R0PTEwMjQsVUI9MTAyNCxhdHQ9LjIsb3R0PS44LGN0dD0xMCx1dHQ9LjE1LGx0dD0uMSxodHQ9LjksZnR0PS45LGR0dD0xMDAsZ3R0PTEsdXg9e2RlcXVldWU6ImRlcXVldWUiLGRvd25zY2FsZToiZG93bnNjYWxlIixoaWdoUXVhbGl0eToiaGlnaFF1YWxpdHkifSxwdHQ9QmYoe2dldEtleTpudWxsLGRvZXNFbGVJbnZhbGlkYXRlS2V5OmdtLGRyYXdFbGVtZW50Om51bGwsZ2V0Qm91bmRpbmdCb3g6bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6azMsYWxsb3dFZGdlVHhyQ2FjaGluZzohMCxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITB9KSx6az1mdW5jdGlvbihnLHgpe3ZhciBUPXRoaXM7VC5yZW5kZXJlcj1nLFQub25EZXF1ZXVlcz1bXTt2YXIgQT1wdHQoeCk7bWUoVCxBKSxULmxvb2t1cD1uZXcgbnR0KEEuZ2V0S2V5LEEuZG9lc0VsZUludmFsaWRhdGVLZXkpLFQuc2V0dXBEZXF1ZXVlaW5nKCl9LGtoPXprLnByb3RvdHlwZTtraC5yZWFzb25zPXV4LGtoLmdldFRleHR1cmVRdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLmVsZUltZ0NhY2hlcz1nLmVsZUltZ0NhY2hlc3x8e30sZy5lbGVJbWdDYWNoZXNbeV09Zy5lbGVJbWdDYWNoZXNbeV18fFtdfSxraC5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1nLmVsZUltZ0NhY2hlcy5yZXRpcmVkPWcuZWxlSW1nQ2FjaGVzLnJldGlyZWR8fHt9LFQ9eFt5XT14W3ldfHxbXTtyZXR1cm4gVH0sa2guZ2V0RWxlbWVudFF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlQ2FjaGVRdWV1ZT15LmVsZUNhY2hlUXVldWV8fG5ldyB2ayhmdW5jdGlvbih4LFQpe3JldHVybiBULnJlcXMteC5yZXFzfSk7cmV0dXJuIGd9LGtoLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlS2V5VG9DYWNoZVF1ZXVlPXkuZWxlS2V5VG9DYWNoZVF1ZXVlfHx7fTtyZXR1cm4gZ30sa2guZ2V0RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBEPXRoaXMsTz10aGlzLnJlbmRlcmVyLCQ9Ty5jeS56b29tKCkscT10aGlzLmxvb2t1cDtpZighZ3x8Zy53PT09MHx8Zy5oPT09MHx8aXNOYU4oZy53KXx8aXNOYU4oZy5oKXx8IXkudmlzaWJsZSgpfHx5LnJlbW92ZWQoKXx8IUQuYWxsb3dFZGdlVHhyQ2FjaGluZyYmeS5pc0VkZ2UoKXx8IUQuYWxsb3dQYXJlbnRUeHJDYWNoaW5nJiZ5LmlzUGFyZW50KCkpcmV0dXJuIG51bGw7aWYoVD09bnVsbCYmKFQ9TWF0aC5jZWlsKHhMKCQqeCkpKSxUPGN4KVQ9Y3g7ZWxzZSBpZigkPj10TXx8VD5KTClyZXR1cm4gbnVsbDt2YXIgUz1NYXRoLnBvdygyLFQpLEc9Zy5oKlMsVz1nLncqUyxldD1PLmVsZVRleHRCaWdnZXJUaGFuTWluKHksUyk7aWYoIXRoaXMuaXNWaXNpYmxlKHksZXQpKXJldHVybiBudWxsO3ZhciBhdD1xLmdldCh5LFQpO2lmKGF0JiZhdC5pbnZhbGlkYXRlZCYmKGF0LmludmFsaWRhdGVkPSExLGF0LnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09YXQud2lkdGgpLGF0KXJldHVybiBhdDt2YXIgbHQ7aWYoRzw9dzk/bHQ9dzk6Rzw9bTk/bHQ9bTk6bHQ9TWF0aC5jZWlsKEcvbTkpKm05LEc+VUJ8fFc+c3R0KXJldHVybiBudWxsO3ZhciBmdD1ELmdldFRleHR1cmVRdWV1ZShsdCksQXQ9ZnRbZnQubGVuZ3RoLTJdLGt0PWZ1bmN0aW9uKCl7cmV0dXJuIEQucmVjeWNsZVRleHR1cmUobHQsVyl8fEQuYWRkVGV4dHVyZShsdCxXKX07QXR8fChBdD1mdFtmdC5sZW5ndGgtMV0pLEF0fHwoQXQ9a3QoKSksQXQud2lkdGgtQXQudXNlZFdpZHRoPFcmJihBdD1rdCgpKTtmb3IodmFyIE10PWZ1bmN0aW9uKHplKXtyZXR1cm4gemUmJnplLnNjYWxlZExhYmVsU2hvd249PT1ldH0sRHQ9QSYmQT09PXV4LmRlcXVldWUsanQ9QSYmQT09PXV4LmhpZ2hRdWFsaXR5LFp0PUEmJkE9PT11eC5kb3duc2NhbGUsS3QsenQ9VCsxO3p0PD1KTDt6dCsrKXt2YXIgZWU9cS5nZXQoeSx6dCk7aWYoZWUpe0t0PWVlO2JyZWFrfX12YXIgVnQ9S3QmJkt0LmxldmVsPT09VCsxP0t0Om51bGwsZmU9ZnVuY3Rpb24oKXtBdC5jb250ZXh0LmRyYXdJbWFnZShWdC50ZXh0dXJlLmNhbnZhcyxWdC54LDAsVnQud2lkdGgsVnQuaGVpZ2h0LEF0LnVzZWRXaWR0aCwwLFcsRyl9O2lmKEF0LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxBdC5jb250ZXh0LmNsZWFyUmVjdChBdC51c2VkV2lkdGgsMCxXLGx0KSxNdChWdCkpZmUoKTtlbHNlIGlmKE10KEt0KSlpZihqdCl7Zm9yKHZhciBnZT1LdC5sZXZlbDtnZT5UO2dlLS0pVnQ9RC5nZXRFbGVtZW50KHksZyx4LGdlLHV4LmRvd25zY2FsZSk7ZmUoKX1lbHNlIHJldHVybiBELnF1ZXVlRWxlbWVudCh5LEt0LmxldmVsLTEpLEt0O2Vsc2V7dmFyIG5lO2lmKCFEdCYmIWp0JiYhWnQpZm9yKHZhciBQZT1ULTE7UGU+PWN4O1BlLS0pe3ZhciBwZT1xLmdldCh5LFBlKTtpZihwZSl7bmU9cGU7YnJlYWt9fWlmKE10KG5lKSlyZXR1cm4gRC5xdWV1ZUVsZW1lbnQoeSxUKSxuZTtBdC5jb250ZXh0LnRyYW5zbGF0ZShBdC51c2VkV2lkdGgsMCksQXQuY29udGV4dC5zY2FsZShTLFMpLHRoaXMuZHJhd0VsZW1lbnQoQXQuY29udGV4dCx5LGcsZXQsITEpLEF0LmNvbnRleHQuc2NhbGUoMS9TLDEvUyksQXQuY29udGV4dC50cmFuc2xhdGUoLUF0LnVzZWRXaWR0aCwwKX1yZXR1cm4gYXQ9e3g6QXQudXNlZFdpZHRoLHRleHR1cmU6QXQsbGV2ZWw6VCxzY2FsZTpTLHdpZHRoOlcsaGVpZ2h0Okcsc2NhbGVkTGFiZWxTaG93bjpldH0sQXQudXNlZFdpZHRoKz1NYXRoLmNlaWwoVytydHQpLEF0LmVsZUNhY2hlcy5wdXNoKGF0KSxxLnNldCh5LFQsYXQpLEQuY2hlY2tUZXh0dXJlRnVsbG5lc3MoQXQpLGF0fSxraC5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPTA7Zzx5Lmxlbmd0aDtnKyspdGhpcy5pbnZhbGlkYXRlRWxlbWVudCh5W2ddKX0sa2guaW52YWxpZGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubG9va3VwLFQ9W10sQT14LmlzSW52YWxpZCh5KTtpZihBKXtmb3IodmFyIEQ9Y3g7RDw9Skw7RCsrKXt2YXIgTz14LmdldEZvckNhY2hlZEtleSh5LEQpO08mJlQucHVzaChPKX12YXIgJD14LmludmFsaWRhdGUoeSk7aWYoJClmb3IodmFyIHE9MDtxPFQubGVuZ3RoO3ErKyl7dmFyIFM9VFtxXSxHPVMudGV4dHVyZTtHLmludmFsaWRhdGVkV2lkdGgrPVMud2lkdGgsUy5pbnZhbGlkYXRlZD0hMCxnLmNoZWNrVGV4dHVyZVV0aWxpdHkoRyl9Zy5yZW1vdmVGcm9tUXVldWUoeSl9fSxraC5jaGVja1RleHR1cmVVdGlsaXR5PWZ1bmN0aW9uKHkpe3kuaW52YWxpZGF0ZWRXaWR0aD49YXR0Knkud2lkdGgmJnRoaXMucmV0aXJlVGV4dHVyZSh5KX0sa2guY2hlY2tUZXh0dXJlRnVsbG5lc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZ2V0VGV4dHVyZVF1ZXVlKHkuaGVpZ2h0KTt5LnVzZWRXaWR0aC95LndpZHRoPm90dCYmeS5mdWxsbmVzc0NoZWNrcz49Y3R0P3BtKHgseSk6eS5mdWxsbmVzc0NoZWNrcysrfSxraC5yZXRpcmVUZXh0dXJlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD15LmhlaWdodCxUPWcuZ2V0VGV4dHVyZVF1ZXVlKHgpLEE9dGhpcy5sb29rdXA7cG0oVCx5KSx5LnJldGlyZWQ9ITA7Zm9yKHZhciBEPXkuZWxlQ2FjaGVzLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXTtBLmRlbGV0ZUNhY2hlKCQua2V5LCQubGV2ZWwpfW1MKEQpO3ZhciBxPWcuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh4KTtxLnB1c2goeSl9LGtoLmFkZFRleHR1cmU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5nZXRUZXh0dXJlUXVldWUoeSksQT17fTtyZXR1cm4gVC5wdXNoKEEpLEEuZWxlQ2FjaGVzPVtdLEEuaGVpZ2h0PXksQS53aWR0aD1NYXRoLm1heChpdHQsZyksQS51c2VkV2lkdGg9MCxBLmludmFsaWRhdGVkV2lkdGg9MCxBLmZ1bGxuZXNzQ2hlY2tzPTAsQS5jYW52YXM9eC5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKEEud2lkdGgsQS5oZWlnaHQpLEEuY29udGV4dD1BLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLEF9LGtoLnJlY3ljbGVUZXh0dXJlPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PXRoaXMsVD14LmdldFRleHR1cmVRdWV1ZSh5KSxBPXguZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh5KSxEPTA7RDxBLmxlbmd0aDtEKyspe3ZhciBPPUFbRF07aWYoTy53aWR0aD49ZylyZXR1cm4gTy5yZXRpcmVkPSExLE8udXNlZFdpZHRoPTAsTy5pbnZhbGlkYXRlZFdpZHRoPTAsTy5mdWxsbmVzc0NoZWNrcz0wLG1MKE8uZWxlQ2FjaGVzKSxPLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxPLmNvbnRleHQuY2xlYXJSZWN0KDAsMCxPLndpZHRoLE8uaGVpZ2h0KSxwbShBLE8pLFQucHVzaChPKSxPfX0sa2gucXVldWVFbGVtZW50PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXguZ2V0RWxlbWVudFF1ZXVlKCksQT14LmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksRD10aGlzLmdldEtleSh5KSxPPUFbRF07aWYoTylPLmxldmVsPU1hdGgubWF4KE8ubGV2ZWwsZyksTy5lbGVzLm1lcmdlKHkpLE8ucmVxcysrLFQudXBkYXRlSXRlbShPKTtlbHNle3ZhciAkPXtlbGVzOnkuc3Bhd24oKS5tZXJnZSh5KSxsZXZlbDpnLHJlcXM6MSxrZXk6RH07VC5wdXNoKCQpLEFbRF09JH19LGtoLmRlcXVldWU9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLmdldEVsZW1lbnRRdWV1ZSgpLFQ9Zy5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLEE9W10sRD1nLmxvb2t1cCxPPTA7TzxndHQmJnguc2l6ZSgpPjA7TysrKXt2YXIgJD14LnBvcCgpLHE9JC5rZXksUz0kLmVsZXNbMF0sRz1ELmhhc0NhY2hlKFMsJC5sZXZlbCk7aWYoVFtxXT1udWxsLEcpY29udGludWU7QS5wdXNoKCQpO3ZhciBXPWcuZ2V0Qm91bmRpbmdCb3goUyk7Zy5nZXRFbGVtZW50KFMsVyx5LCQubGV2ZWwsdXguZGVxdWV1ZSl9cmV0dXJuIEF9LGtoLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9Zy5nZXRFbGVtZW50UXVldWUoKSxUPWcuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxBPXRoaXMuZ2V0S2V5KHkpLEQ9VFtBXTtEIT1udWxsJiYoRC5lbGVzLmxlbmd0aD09PTE/KEQucmVxcz0kNSx4LnVwZGF0ZUl0ZW0oRCkseC5wb3AoKSxUW0FdPW51bGwpOkQuZWxlcy51bm1lcmdlKHkpKX0sa2gub25EZXF1ZXVlPWZ1bmN0aW9uKHkpe3RoaXMub25EZXF1ZXVlcy5wdXNoKHkpfSxraC5vZmZEZXF1ZXVlPWZ1bmN0aW9uKHkpe3BtKHRoaXMub25EZXF1ZXVlcyx5KX0sa2guc2V0dXBEZXF1ZXVlaW5nPXY5LnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOmR0dCxkZXFDb3N0OnV0dCxkZXFBdmdDb3N0Omx0dCxkZXFOb0RyYXdDb3N0Omh0dCxkZXFGYXN0Q29zdDpmdHQsZGVxOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZy5kZXF1ZXVlKHgsVCl9LG9uRGVxZDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5vbkRlcXVldWVzLmxlbmd0aDtUKyspe3ZhciBBPWcub25EZXF1ZXVlc1tUXTtBKHgpfX0sc2hvdWxkUmVkcmF3OmZ1bmN0aW9uKGcseCxULEEpe2Zvcih2YXIgRD0wO0Q8eC5sZW5ndGg7RCsrKWZvcih2YXIgTz14W0RdLmVsZXMsJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdLmJvdW5kaW5nQm94KCk7aWYoRUwocSxBKSlyZXR1cm4hMH1yZXR1cm4hMX0scHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXF9fSk7dmFyIGJ0dD0xLGx4PS00LHFrPTIseTk9My45OSxIaz01MCxiZz01MCx2dHQ9LjE1LGVwdD0uMSxucHQ9LjkscnB0PS45LGlwdD0xLGVNPTI1MCxzcHQ9NGUzKjRlMyxhcHQ9ITAsd3R0PWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LnJlbmRlcmVyPWcsQT1ULmN5O3gubGF5ZXJzQnlMZXZlbD17fSx4LmZpcnN0R2V0PSEwLHgubGFzdEludmFsaWRhdGlvblRpbWU9ZGcoKS0yKmVNLHguc2tpcHBpbmc9ITEseC5lbGVUeHJEZXFzPUEuY29sbGVjdGlvbigpLHguc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD1XYyhmdW5jdGlvbigpe3gucmVmaW5lRWxlbWVudFRleHR1cmVzKHguZWxlVHhyRGVxcykseC5lbGVUeHJEZXFzLnVubWVyZ2UoeC5lbGVUeHJEZXFzKX0sYmcpLFQuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE8sJCl7JC14Lmxhc3RJbnZhbGlkYXRpb25UaW1lPD1lTT94LnNraXBwaW5nPSEwOnguc2tpcHBpbmc9ITF9LFQuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgRD1mdW5jdGlvbigkLHEpe3JldHVybiBxLnJlcXMtJC5yZXFzfTt4LmxheWVyc1F1ZXVlPW5ldyB2ayhEKSx4LnNldHVwRGVxdWV1ZWluZygpfSxwMT13dHQucHJvdG90eXBlLG10dD0wLG9wdD1NYXRoLnBvdygyLDUzKS0xO3AxLm1ha2VMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PU1hdGgucG93KDIsZyksVD1NYXRoLmNlaWwoeS53KngpLEE9TWF0aC5jZWlsKHkuaCp4KSxEPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhULEEpLE89e2lkOm10dD0rK210dCVvcHQsYmI6eSxsZXZlbDpnLHdpZHRoOlQsaGVpZ2h0OkEsY2FudmFzOkQsY29udGV4dDpELmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPU8uY29udGV4dCxxPS1PLmJiLngxLFM9LU8uYmIueTE7cmV0dXJuICQuc2NhbGUoeCx4KSwkLnRyYW5zbGF0ZShxLFMpLE99LHAxLmdldExheWVycz1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcyxBPVQucmVuZGVyZXIsRD1BLmN5LE89RC56b29tKCksJD1ULmZpcnN0R2V0O2lmKFQuZmlyc3RHZXQ9ITEseD09bnVsbCl7aWYoeD1NYXRoLmNlaWwoeEwoTypnKSkseDxseCl4PWx4O2Vsc2UgaWYoTz49eTl8fHg+cWspcmV0dXJuIG51bGx9VC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyh4LHkpO3ZhciBxPVQubGF5ZXJzQnlMZXZlbCxTPU1hdGgucG93KDIseCksRz1xW3hdPXFbeF18fFtdLFcsZXQ9VC5sZXZlbElzQ29tcGxldGUoeCx5KSxhdCxsdD1mdW5jdGlvbigpe3ZhciBmZT1mdW5jdGlvbihibil7aWYoVC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhibix5KSxULmxldmVsSXNDb21wbGV0ZShibix5KSlyZXR1cm4gYXQ9cVtibl0sITB9LGdlPWZ1bmN0aW9uKGJuKXtpZighYXQpZm9yKHZhciB6ZT14K2JuO2x4PD16ZSYmemU8PXFrJiYhZmUoemUpO3plKz1ibik7fTtnZSgxKSxnZSgtMSk7Zm9yKHZhciBuZT1HLmxlbmd0aC0xO25lPj0wO25lLS0pe3ZhciBQZT1HW25lXTtQZS5pbnZhbGlkJiZwbShHLFBlKX19O2lmKCFldClsdCgpO2Vsc2UgcmV0dXJuIEc7dmFyIGZ0PWZ1bmN0aW9uKCl7aWYoIVcpe1c9UmQoKTtmb3IodmFyIGZlPTA7ZmU8eS5sZW5ndGg7ZmUrKylfWShXLHlbZmVdLmJvdW5kaW5nQm94KCkpfXJldHVybiBXfSxBdD1mdW5jdGlvbihmZSl7ZmU9ZmV8fHt9O3ZhciBnZT1mZS5hZnRlcjtmdCgpO3ZhciBuZT1XLncqUyooVy5oKlMpO2lmKG5lPnNwdClyZXR1cm4gbnVsbDt2YXIgUGU9VC5tYWtlTGF5ZXIoVyx4KTtpZihnZSE9bnVsbCl7dmFyIHBlPUcuaW5kZXhPZihnZSkrMTtHLnNwbGljZShwZSwwLFBlKX1lbHNlKGZlLmluc2VydD09PXZvaWQgMHx8ZmUuaW5zZXJ0KSYmRy51bnNoaWZ0KFBlKTtyZXR1cm4gUGV9O2lmKFQuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIga3Q9bnVsbCxNdD15Lmxlbmd0aC9idHQsRHQ9ISQsanQ9MDtqdDx5Lmxlbmd0aDtqdCsrKXt2YXIgWnQ9eVtqdF0sS3Q9WnQuX3ByaXZhdGUucnNjcmF0Y2gsenQ9S3QuaW1nTGF5ZXJDYWNoZXM9S3QuaW1nTGF5ZXJDYWNoZXN8fHt9LGVlPXp0W3hdO2lmKGVlKXtrdD1lZTtjb250aW51ZX1pZigoIWt0fHxrdC5lbGVzLmxlbmd0aD49TXR8fCF0RihrdC5iYixadC5ib3VuZGluZ0JveCgpKSkmJihrdD1BdCh7aW5zZXJ0OiEwLGFmdGVyOmt0fSksIWt0KSlyZXR1cm4gbnVsbDthdHx8RHQ/VC5xdWV1ZUxheWVyKGt0LFp0KTpULmRyYXdFbGVJbkxheWVyKGt0LFp0LHgsZyksa3QuZWxlcy5wdXNoKFp0KSx6dFt4XT1rdH1yZXR1cm4gYXR8fChEdD9udWxsOkcpfSxwMS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeSxnKXtyZXR1cm4geX0scDEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcyxEPXRoaXMucmVuZGVyZXIsTz15LmNvbnRleHQsJD1nLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IWcudmlzaWJsZSgpfHwoeD1BLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbCh4LFQpLEQuc2V0SW1nU21vb3RoaW5nKE8sITEpLEQuZHJhd0NhY2hlZEVsZW1lbnQoTyxnLG51bGwsbnVsbCx4LGFwdCksRC5zZXRJbWdTbW9vdGhpbmcoTywhMCkpfSxwMS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5sYXllcnNCeUxldmVsW3ldO2lmKCFUfHxULmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBBPTAsRD0wO0Q8VC5sZW5ndGg7RCsrKXt2YXIgTz1UW0RdO2lmKE8ucmVxcz4wfHxPLmludmFsaWQpcmV0dXJuITE7QSs9Ty5lbGVzLmxlbmd0aH1yZXR1cm4gQT09PWcubGVuZ3RofSxwMS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGF5ZXJzQnlMZXZlbFt5XTtpZih4KWZvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXtmb3IodmFyIEE9eFtUXSxEPS0xLE89MDtPPGcubGVuZ3RoO08rKylpZihBLmVsZXNbMF09PT1nW09dKXtEPU87YnJlYWt9aWYoRDwwKXt0aGlzLmludmFsaWRhdGVMYXllcihBKTtjb250aW51ZX1mb3IodmFyICQ9RCxPPTA7TzxBLmVsZXMubGVuZ3RoO08rKylpZihBLmVsZXNbT10hPT1nWyQrT10pe3RoaXMuaW52YWxpZGF0ZUxheWVyKEEpO2JyZWFrfX19LHAxLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9dGhpcyxUPW50KHlbMF0pLEE9MDtBPHkubGVuZ3RoO0ErKylmb3IodmFyIEQ9VD9udWxsOnlbQV0sTz1UP3lbQV06eVtBXS5lbGUsJD1PLl9wcml2YXRlLnJzY3JhdGNoLHE9JC5pbWdMYXllckNhY2hlcz0kLmltZ0xheWVyQ2FjaGVzfHx7fSxTPWx4O1M8PXFrO1MrKyl7dmFyIEc9cVtTXTtHJiYoRCYmeC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoRy5sZXZlbCkhPT1ELmxldmVsfHxnKEcsTyxEKSl9fSxwMS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMsZz0hMSx4PWx4O3g8PXFrO3grKyl7dmFyIFQ9eS5sYXllcnNCeUxldmVsW3hdO2lmKFQmJlQubGVuZ3RoPjApe2c9ITA7YnJlYWt9fXJldHVybiBnfSxwMS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpczt5Lmxlbmd0aCE9PTAmJihnLmxhc3RJbnZhbGlkYXRpb25UaW1lPWRnKCksISh5Lmxlbmd0aD09PTB8fCFnLmhhdmVMYXllcnMoKSkmJmcudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsQSxEKXtnLmludmFsaWRhdGVMYXllcihUKX0pKX0scDEuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHkpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9ZGcoKSwheS5pbnZhbGlkKXt2YXIgZz15LmxldmVsLHg9eS5lbGVzLFQ9dGhpcy5sYXllcnNCeUxldmVsW2ddO3BtKFQseSkseS5lbGVzUXVldWU9W10seS5pbnZhbGlkPSEwLHkucmVwbGFjZW1lbnQmJih5LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgQT0wO0E8eC5sZW5ndGg7QSsrKXt2YXIgRD14W0FdLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO0QmJihEW2ddPW51bGwpfX19LHAxLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2cudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsQSxEKXt2YXIgTz1ULnJlcGxhY2VtZW50O2lmKE98fChPPVQucmVwbGFjZW1lbnQ9Zy5tYWtlTGF5ZXIoVC5iYixULmxldmVsKSxPLnJlcGxhY2VzPVQsTy5lbGVzPVQuZWxlcyksIU8ucmVxcylmb3IodmFyICQ9MDskPE8uZWxlcy5sZW5ndGg7JCsrKWcucXVldWVMYXllcihPLE8uZWxlc1skXSl9KX0scDEuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50PWZ1bmN0aW9uKHkpe3RoaXMuZWxlVHhyRGVxcy5tZXJnZSh5KSx0aGlzLnNjaGVkdWxlRWxlbWVudFJlZmluZW1lbnQoKX0scDEucXVldWVMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14LmxheWVyc1F1ZXVlLEE9eS5lbGVzUXVldWUsRD1BLmhhc0lkPUEuaGFzSWR8fHt9O2lmKCF5LnJlcGxhY2VtZW50KXtpZihnKXtpZihEW2cuaWQoKV0pcmV0dXJuO0EucHVzaChnKSxEW2cuaWQoKV09ITB9eS5yZXFzPyh5LnJlcXMrKyxULnVwZGF0ZUl0ZW0oeSkpOih5LnJlcXM9MSxULnB1c2goeSkpfX0scDEuZGVxdWV1ZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9dGhpcyx4PWcubGF5ZXJzUXVldWUsVD1bXSxBPTA7QTxpcHQmJnguc2l6ZSgpIT09MDspe3ZhciBEPXgucGVlaygpO2lmKEQucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoRC5yZXBsYWNlcyYmRCE9PUQucmVwbGFjZXMucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoRC5pbnZhbGlkKXt4LnBvcCgpO2NvbnRpbnVlfXZhciBPPUQuZWxlc1F1ZXVlLnNoaWZ0KCk7TyYmKGcuZHJhd0VsZUluTGF5ZXIoRCxPLEQubGV2ZWwseSksQSsrKSxULmxlbmd0aD09PTAmJlQucHVzaCghMCksRC5lbGVzUXVldWUubGVuZ3RoPT09MCYmKHgucG9wKCksRC5yZXFzPTAsRC5yZXBsYWNlcyYmZy5hcHBseUxheWVyUmVwbGFjZW1lbnQoRCksZy5yZXF1ZXN0UmVkcmF3KCkpfXJldHVybiBUfSxwMS5hcHBseUxheWVyUmVwbGFjZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubGF5ZXJzQnlMZXZlbFt5LmxldmVsXSxUPXkucmVwbGFjZXMsQT14LmluZGV4T2YoVCk7aWYoIShBPDB8fFQuaW52YWxpZCkpe3hbQV09eTtmb3IodmFyIEQ9MDtEPHkuZWxlcy5sZW5ndGg7RCsrKXt2YXIgTz15LmVsZXNbRF0uX3ByaXZhdGUsJD1PLmltZ0xheWVyQ2FjaGVzPU8uaW1nTGF5ZXJDYWNoZXN8fHt9OyQmJigkW3kubGV2ZWxdPXkpfWcucmVxdWVzdFJlZHJhdygpfX0scDEucmVxdWVzdFJlZHJhdz1XYyhmdW5jdGlvbigpe3ZhciB5PXRoaXMucmVuZGVyZXI7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXcoKX0sMTAwKSxwMS5zZXR1cERlcXVldWVpbmc9djkuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6SGssZGVxQ29zdDp2dHQsZGVxQXZnQ29zdDplcHQsZGVxTm9EcmF3Q29zdDpucHQsZGVxRmFzdENvc3Q6cnB0LGRlcTpmdW5jdGlvbihnLHgpe3JldHVybiBnLmRlcXVldWUoeCl9LG9uRGVxZDp3TCxzaG91bGRSZWRyYXc6azMscHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIF8wPXt9LHl0dDtmdW5jdGlvbiBXQih5LGcpe2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgVD1nW3hdO3kubGluZVRvKFQueCxULnkpfX1mdW5jdGlvbiBLQih5LGcseCl7Zm9yKHZhciBULEE9MDtBPGcubGVuZ3RoO0ErKyl7dmFyIEQ9Z1tBXTtBPT09MCYmKFQ9RCkseS5saW5lVG8oRC54LEQueSl9eS5xdWFkcmF0aWNDdXJ2ZVRvKHgueCx4LnksVC54LFQueSl9ZnVuY3Rpb24geHR0KHksZyx4KXt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKTtmb3IodmFyIFQ9ZyxBPTA7QTxULmxlbmd0aDtBKyspe3ZhciBEPVRbQV07eS5saW5lVG8oRC54LEQueSl9dmFyIE89eCwkPXhbMF07eS5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBBPTE7QTxPLmxlbmd0aDtBKyspe3ZhciBEPU9bQV07eS5saW5lVG8oRC54LEQueSl9eS5jbG9zZVBhdGgmJnkuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gY3B0KHksZyx4LFQsQSl7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5hcmMoeCxULEEsMCxNYXRoLlBJKjIsITEpO3ZhciBEPWcsTz1EWzBdO3kubW92ZVRvKE8ueCxPLnkpO2Zvcih2YXIgJD0wOyQ8RC5sZW5ndGg7JCsrKXt2YXIgcT1EWyRdO3kubGluZVRvKHEueCxxLnkpfXkuY2xvc2VQYXRoJiZ5LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIHVwdCh5LGcseCxUKXt5LmFyYyhnLHgsVCwwLE1hdGguUEkqMiwhMSl9XzAuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24oeSl7cmV0dXJuKHl0dHx8KHl0dD17cG9seWdvbjpXQiwidHJpYW5nbGUtYmFja2N1cnZlIjpLQiwidHJpYW5nbGUtdGVlIjp4dHQsImNpcmNsZS10cmlhbmdsZSI6Y3B0LCJ0cmlhbmdsZS1jcm9zcyI6eHR0LGNpcmNsZTp1cHR9KSlbeV19O3ZhciBndj17fTtndi5kcmF3RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEEsRCl7dmFyIE89dGhpcztnLmlzTm9kZSgpP08uZHJhd05vZGUoeSxnLHgsVCxBLEQpOk8uZHJhd0VkZ2UoeSxnLHgsVCxBLEQpfSxndi5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzO2cuaXNOb2RlKCk/eC5kcmF3Tm9kZU92ZXJsYXkoeSxnKTp4LmRyYXdFZGdlT3ZlcmxheSh5LGcpfSxndi5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztnLmlzTm9kZSgpP3guZHJhd05vZGVVbmRlcmxheSh5LGcpOnguZHJhd0VkZ2VVbmRlcmxheSh5LGcpfSxndi5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24oeSxnLHgsVCxBLEQsTywkKXt2YXIgcT10aGlzLFM9eC5nZXRCb3VuZGluZ0JveChnKTtpZighKFMudz09PTB8fFMuaD09PTApKXt2YXIgRz14LmdldEVsZW1lbnQoZyxTLFQsQSxEKTtpZihHIT1udWxsKXt2YXIgVz0kKHEsZyk7aWYoVz09PTApcmV0dXJuO3ZhciBldD1PKHEsZyksYXQ9Uy54MSxsdD1TLnkxLGZ0PVMudyxBdD1TLmgsa3QsTXQsRHQsanQsWnQ7aWYoZXQhPT0wKXt2YXIgS3Q9eC5nZXRSb3RhdGlvblBvaW50KGcpO0R0PUt0LngsanQ9S3QueSx5LnRyYW5zbGF0ZShEdCxqdCkseS5yb3RhdGUoZXQpLFp0PXEuZ2V0SW1nU21vb3RoaW5nKHkpLFp0fHxxLnNldEltZ1Ntb290aGluZyh5LCEwKTt2YXIgenQ9eC5nZXRSb3RhdGlvbk9mZnNldChnKTtrdD16dC54LE10PXp0Lnl9ZWxzZSBrdD1hdCxNdD1sdDt2YXIgZWU7VyE9PTEmJihlZT15Lmdsb2JhbEFscGhhLHkuZ2xvYmFsQWxwaGE9ZWUqVykseS5kcmF3SW1hZ2UoRy50ZXh0dXJlLmNhbnZhcyxHLngsMCxHLndpZHRoLEcuaGVpZ2h0LGt0LE10LGZ0LEF0KSxXIT09MSYmKHkuZ2xvYmFsQWxwaGE9ZWUpLGV0IT09MCYmKHkucm90YXRlKC1ldCkseS50cmFuc2xhdGUoLUR0LC1qdCksWnR8fHEuc2V0SW1nU21vb3RoaW5nKHksITEpKX1lbHNlIHguZHJhd0VsZW1lbnQoeSxnKX19O3ZhciBuTT1mdW5jdGlvbigpe3JldHVybiAwfSx4OT1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LG51bGwpfSxZQj1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LCJzb3VyY2UiKX0sbHB0PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuZ2V0VGV4dEFuZ2xlKHgsInRhcmdldCIpfSxocHQ9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geC5lZmZlY3RpdmVPcGFjaXR5KCl9LFhCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIHgucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS5wZlZhbHVlKnguZWZmZWN0aXZlT3BhY2l0eSgpfTtndi5kcmF3Q2FjaGVkRWxlbWVudD1mdW5jdGlvbih5LGcseCxULEEsRCl7dmFyIE89dGhpcywkPU8uZGF0YSxxPSQuZWxlVHhyQ2FjaGUsUz0kLmxibFR4ckNhY2hlLEc9JC5zbGJUeHJDYWNoZSxXPSQudGxiVHhyQ2FjaGUsZXQ9Zy5ib3VuZGluZ0JveCgpLGF0PUQ9PT0hMD9xLnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKGV0Lnc9PT0wfHxldC5oPT09MHx8IWcudmlzaWJsZSgpKSYmKCFUfHxFTChldCxUKSkpe3ZhciBsdD1nLmlzRWRnZSgpLGZ0PWcuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7Ty5kcmF3RWxlbWVudFVuZGVybGF5KHksZyksTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLHEseCxBLGF0LG5NLGhwdCksKCFsdHx8IWZ0KSYmTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFMseCxBLGF0LHg5LFhCKSxsdCYmIWZ0JiYoTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLEcseCxBLGF0LFlCLFhCKSxPLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih5LGcsVyx4LEEsYXQsbHB0LFhCKSksTy5kcmF3RWxlbWVudE92ZXJsYXkoeSxnKX19LGd2LmRyYXdFbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEE9Z1tUXTt4LmRyYXdFbGVtZW50KHksQSl9fSxndi5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBBPXRoaXMsRD0wO0Q8Zy5sZW5ndGg7RCsrKXt2YXIgTz1nW0RdO0EuZHJhd0NhY2hlZEVsZW1lbnQoeSxPLHgsVCl9fSxndi5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBBPXRoaXMsRD0wO0Q8Zy5sZW5ndGg7RCsrKXt2YXIgTz1nW0RdO08uaXNOb2RlKCkmJkEuZHJhd0NhY2hlZEVsZW1lbnQoeSxPLHgsVCl9fSxndi5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBBPXRoaXMsRD1BLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKGcseCk7aWYoRClmb3IodmFyIE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXSxxPSQuYmI7cS53PT09MHx8cS5oPT09MHx8eS5kcmF3SW1hZ2UoJC5jYW52YXMscS54MSxxLnkxLHEudyxxLmgpfWVsc2UgQS5kcmF3Q2FjaGVkRWxlbWVudHMoeSxnLHgsVCl9O3ZhciBwdj17fTtwdi5kcmF3RWRnZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLEE9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLEQ9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLE89dGhpcywkPWcuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShEJiYhZy52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciBxO3gmJihxPXgseS50cmFuc2xhdGUoLXEueDEsLXEueTEpKTt2YXIgUz1EP2cucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxHPUQ/Zy5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsVz1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxldD1nLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLGF0PWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsbHQ9Zy5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsZnQ9UypHLEF0PVMqRyxrdD1mdW5jdGlvbigpe3ZhciBuZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ZnQ7Vz09PSJzdHJhaWdodC10cmlhbmdsZSI/KE8uZWxlU3Ryb2tlU3R5bGUoeSxnLG5lKSxPLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGcseSwkLmFsbHB0cykpOih5LmxpbmVXaWR0aD1hdCx5LmxpbmVDYXA9bHQsTy5lbGVTdHJva2VTdHlsZSh5LGcsbmUpLE8uZHJhd0VkZ2VQYXRoKGcseSwkLmFsbHB0cyxldCkseS5saW5lQ2FwPSJidXR0Iil9LE10PWZ1bmN0aW9uKCl7QSYmTy5kcmF3RWRnZU92ZXJsYXkoeSxnKX0sRHQ9ZnVuY3Rpb24oKXtBJiZPLmRyYXdFZGdlVW5kZXJsYXkoeSxnKX0sanQ9ZnVuY3Rpb24oKXt2YXIgbmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkF0O08uZHJhd0Fycm93aGVhZHMoeSxnLG5lKX0sWnQ9ZnVuY3Rpb24oKXtPLmRyYXdFbGVtZW50VGV4dCh5LGcsbnVsbCxUKX07eS5saW5lSm9pbj0icm91bmQiO3ZhciBLdD1nLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKEt0KXt2YXIgenQ9Zy5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxlZT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLFZ0PWcucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsZmU9ZnQqVnQ7eS50cmFuc2xhdGUoenQsZWUpLGt0KGZlKSxqdChmZSkseS50cmFuc2xhdGUoLXp0LC1lZSl9RHQoKSxrdCgpLGp0KCksTXQoKSxadCgpLHgmJnkudHJhbnNsYXRlKHEueDEscS55MSl9fTt2YXIga3R0PWZ1bmN0aW9uKGcpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbih4LFQpe2lmKFQudmlzaWJsZSgpKXt2YXIgQT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLW9wYWNpdHkiKSkudmFsdWU7aWYoQSE9PTApe3ZhciBEPXRoaXMsTz1ELnVzZVBhdGhzKCksJD1ULl9wcml2YXRlLnJzY3JhdGNoLHE9VC5wc3R5bGUoIiIuY29uY2F0KGcsIi1wYWRkaW5nIikpLnBmVmFsdWUsUz0yKnEsRz1ULnBzdHlsZSgiIi5jb25jYXQoZywiLWNvbG9yIikpLnZhbHVlO3gubGluZVdpZHRoPVMsJC5lZGdlVHlwZT09PSJzZWxmIiYmIU8/eC5saW5lQ2FwPSJidXR0Ijp4LmxpbmVDYXA9InJvdW5kIixELmNvbG9yU3Ryb2tlU3R5bGUoeCxHWzBdLEdbMV0sR1syXSxBKSxELmRyYXdFZGdlUGF0aChULHgsJC5hbGxwdHMsInNvbGlkIil9fX19O3B2LmRyYXdFZGdlT3ZlcmxheT1rdHQoIm92ZXJsYXkiKSxwdi5kcmF3RWRnZVVuZGVybGF5PWt0dCgidW5kZXJsYXkiKSxwdi5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9eS5fcHJpdmF0ZS5yc2NyYXRjaCxEPWcsTywkPSExLHE9dGhpcy51c2VQYXRocygpLFM9eS5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxHPXkucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZihxKXt2YXIgVz14LmpvaW4oIiQiKSxldD1BLnBhdGhDYWNoZUtleSYmQS5wYXRoQ2FjaGVLZXk9PT1XO2V0PyhPPWc9QS5wYXRoQ2FjaGUsJD0hMCk6KE89Zz1uZXcgUGF0aDJELEEucGF0aENhY2hlS2V5PVcsQS5wYXRoQ2FjaGU9Tyl9aWYoRC5zZXRMaW5lRGFzaClzd2l0Y2goVCl7Y2FzZSJkb3R0ZWQiOkQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpELnNldExpbmVEYXNoKFMpLEQubGluZURhc2hPZmZzZXQ9RzticmVhaztjYXNlInNvbGlkIjpELnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIUEuYmFkTGluZSlzd2l0Y2goZy5iZWdpblBhdGgmJmcuYmVnaW5QYXRoKCksZy5tb3ZlVG8oeFswXSx4WzFdKSxBLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIGF0PTI7YXQrMzx4Lmxlbmd0aDthdCs9NClnLnF1YWRyYXRpY0N1cnZlVG8oeFthdF0seFthdCsxXSx4W2F0KzJdLHhbYXQrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgbHQ9MjtsdCsxPHgubGVuZ3RoO2x0Kz0yKWcubGluZVRvKHhbbHRdLHhbbHQrMV0pO2JyZWFrfWc9RCxxP2cuc3Ryb2tlKE8pOmcuc3Ryb2tlKCksZy5zZXRMaW5lRGFzaCYmZy5zZXRMaW5lRGFzaChbXSl9LHB2LmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4KXtnLmZpbGxTdHlsZT1nLnN0cm9rZVN0eWxlO2Zvcih2YXIgVD15LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLEE9MDtBKzE8eC5sZW5ndGg7QSs9Mil7dmFyIEQ9W3hbQSsyXS14W0FdLHhbQSszXS14W0ErMV1dLE89TWF0aC5zcXJ0KERbMF0qRFswXStEWzFdKkRbMV0pLCQ9W0RbMV0vTywtRFswXS9PXSxxPVskWzBdKlQvMiwkWzFdKlQvMl07Zy5iZWdpblBhdGgoKSxnLm1vdmVUbyh4W0FdLXFbMF0seFtBKzFdLXFbMV0pLGcubGluZVRvKHhbQV0rcVswXSx4W0ErMV0rcVsxXSksZy5saW5lVG8oeFtBKzJdLHhbQSszXSksZy5jbG9zZVBhdGgoKSxnLmZpbGwoKX19LHB2LmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD1nLl9wcml2YXRlLnJzY3JhdGNoLEE9VC5lZGdlVHlwZT09PSJoYXlzdGFjayI7QXx8dGhpcy5kcmF3QXJyb3doZWFkKHksZywic291cmNlIixULmFycm93U3RhcnRYLFQuYXJyb3dTdGFydFksVC5zcmNBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC10YXJnZXQiLFQubWlkWCxULm1pZFksVC5taWR0Z3RBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC1zb3VyY2UiLFQubWlkWCxULm1pZFksVC5taWRzcmNBcnJvd0FuZ2xlLHgpLEF8fHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsInRhcmdldCIsVC5hcnJvd0VuZFgsVC5hcnJvd0VuZFksVC50Z3RBcnJvd0FuZ2xlLHgpfSxwdi5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHksZyx4LFQsQSxELE8pe2lmKCEoaXNOYU4oVCl8fFQ9PW51bGx8fGlzTmFOKEEpfHxBPT1udWxsfHxpc05hTihEKXx8RD09bnVsbCkpe3ZhciAkPXRoaXMscT1nLnBzdHlsZSh4KyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihxIT09Im5vbmUiKXt2YXIgUz1nLnBzdHlsZSh4KyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLEc9Zy5wc3R5bGUoeCsiLWFycm93LWZpbGwiKS52YWx1ZSxXPWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsZXQ9Zy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtPPT09dm9pZCAwJiYoTz1ldCk7dmFyIGF0PXkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOyhPIT09MXx8Rz09PSJob2xsb3ciKSYmKHkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLCQuY29sb3JGaWxsU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmRyYXdBcnJvd1NoYXBlKGcseSxTLFcscSxULEEsRCkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YXQpO3ZhciBsdD1nLnBzdHlsZSh4KyItYXJyb3ctY29sb3IiKS52YWx1ZTskLmNvbG9yRmlsbFN0eWxlKHksbHRbMF0sbHRbMV0sbHRbMl0sTyksJC5jb2xvclN0cm9rZVN0eWxlKHksbHRbMF0sbHRbMV0sbHRbMl0sTyksJC5kcmF3QXJyb3dTaGFwZShnLHksRyxXLHEsVCxBLEQpfX19LHB2LmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKHksZyx4LFQsQSxELE8sJCl7dmFyIHE9dGhpcyxTPXRoaXMudXNlUGF0aHMoKSYmQSE9PSJ0cmlhbmdsZS1jcm9zcyIsRz0hMSxXLGV0PWcsYXQ9e3g6RCx5Ok99LGx0PXkucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGZ0PXRoaXMuZ2V0QXJyb3dXaWR0aChULGx0KSxBdD1xLmFycm93U2hhcGVzW0FdO2lmKFMpe3ZhciBrdD1xLmFycm93UGF0aENhY2hlPXEuYXJyb3dQYXRoQ2FjaGV8fFtdLE10PXRkKEEpLER0PWt0W010XTtEdCE9bnVsbD8oVz1nPUR0LEc9ITApOihXPWc9bmV3IFBhdGgyRCxrdFtNdF09Vyl9R3x8KGcuYmVnaW5QYXRoJiZnLmJlZ2luUGF0aCgpLFM/QXQuZHJhdyhnLDEsMCx7eDowLHk6MH0sMSk6QXQuZHJhdyhnLGZ0LCQsYXQsVCksZy5jbG9zZVBhdGgmJmcuY2xvc2VQYXRoKCkpLGc9ZXQsUyYmKGcudHJhbnNsYXRlKEQsTyksZy5yb3RhdGUoJCksZy5zY2FsZShmdCxmdCkpLCh4PT09ImZpbGxlZCJ8fHg9PT0iYm90aCIpJiYoUz9nLmZpbGwoVyk6Zy5maWxsKCkpLCh4PT09ImhvbGxvdyJ8fHg9PT0iYm90aCIpJiYoZy5saW5lV2lkdGg9KEF0Lm1hdGNoRWRnZVdpZHRoP1Q6MSkvKFM/ZnQ6MSksZy5saW5lSm9pbj0ibWl0ZXIiLFM/Zy5zdHJva2UoVyk6Zy5zdHJva2UoKSksUyYmKGcuc2NhbGUoMS9mdCwxL2Z0KSxnLnJvdGF0ZSgtJCksZy50cmFuc2xhdGUoLUQsLU8pKX07dmFyIGs5PXt9O2s5LnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeSxnLHgsVCxBLEQsTywkLHEsUyl7aWYoIShBPD0wfHxEPD0wfHxxPD0wfHxTPD0wKSl0cnl7eS5kcmF3SW1hZ2UoZyx4LFQsQSxELE8sJCxxLFMpfWNhdGNoKEcpe1NjKEcpfX0sazkuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9dGhpcyxPPXgucG9zaXRpb24oKSwkPU8ueCxxPU8ueSxTPXguY3koKS5zdHlsZSgpLEc9Uy5nZXRJbmRleGVkU3R5bGUuYmluZChTKSxXPUcoeCwiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsVCksZXQ9Ryh4LCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixUKSxhdD14LndpZHRoKCksbHQ9eC5oZWlnaHQoKSxmdD14LnBhZGRpbmcoKSoyLEF0PWF0KyhHKHgsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsVCk9PT0iaW5uZXIiPzA6ZnQpLGt0PWx0KyhHKHgsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFQpPT09ImlubmVyIj8wOmZ0KSxNdD14Ll9wcml2YXRlLnJzY3JhdGNoLER0PUcoeCwiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFQpLGp0PUR0PT09Im5vZGUiLFp0PUcoeCwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFQpKkEsS3Q9Ryh4LCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixUKSx6dD1nLndpZHRofHxnLmNhY2hlZFcsZWU9Zy5oZWlnaHR8fGcuY2FjaGVkSDsoenQ9PW51bGx8fGVlPT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZyksenQ9Zy5jYWNoZWRXPWcud2lkdGh8fGcub2Zmc2V0V2lkdGgsZWU9Zy5jYWNoZWRIPWcuaGVpZ2h0fHxnLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpKTt2YXIgVnQ9enQsZmU9ZWU7aWYoRyh4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFQpIT09ImF1dG8iJiYoRyh4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFQpPT09IiUiP1Z0PUcoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKkF0OlZ0PUcoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKSxHKHgsImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFQpIT09ImF1dG8iJiYoRyh4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixUKT09PSIlIj9mZT1HKHgsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsVCkqa3Q6ZmU9Ryh4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFQpKSwhKFZ0PT09MHx8ZmU9PT0wKSl7aWYoVz09PSJjb250YWluIil7dmFyIGdlPU1hdGgubWluKEF0L1Z0LGt0L2ZlKTtWdCo9Z2UsZmUqPWdlfWVsc2UgaWYoVz09PSJjb3ZlciIpe3ZhciBnZT1NYXRoLm1heChBdC9WdCxrdC9mZSk7VnQqPWdlLGZlKj1nZX12YXIgbmU9JC1BdC8yLFBlPUcoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFQpLHBlPUcoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsVCk7UGU9PT0iJSI/bmUrPShBdC1WdCkqcGU6bmUrPXBlO3ZhciBibj1HKHgsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsVCksemU9Ryh4LCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsVCk7Ym49PT0iJSI/bmUrPShBdC1WdCkqemU6bmUrPXplO3ZhciBWZT1xLWt0LzIsRW49Ryh4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsVCksRG49Ryh4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixUKTtFbj09PSIlIj9WZSs9KGt0LWZlKSpEbjpWZSs9RG47dmFyIEtuPUcoeCwiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixUKSxTbj1HKHgsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixUKTtLbj09PSIlIj9WZSs9KGt0LWZlKSpTbjpWZSs9U24sTXQucGF0aENhY2hlJiYobmUtPSQsVmUtPXEsJD0wLHE9MCk7dmFyIFduPXkuZ2xvYmFsQWxwaGE7eS5nbG9iYWxBbHBoYT1adDt2YXIgcnI9RC5nZXRJbWdTbW9vdGhpbmcoeSksdnI9ITE7aWYoS3Q9PT0ibm8iJiZycj8oRC5zZXRJbWdTbW9vdGhpbmcoeSwhMSksdnI9ITApOkt0PT09InllcyImJiFyciYmKEQuc2V0SW1nU21vb3RoaW5nKHksITApLHZyPSEwKSxldD09PSJuby1yZXBlYXQiKWp0JiYoeS5zYXZlKCksTXQucGF0aENhY2hlP3kuY2xpcChNdC5wYXRoQ2FjaGUpOihELm5vZGVTaGFwZXNbRC5nZXROb2RlU2hhcGUoeCldLmRyYXcoeSwkLHEsQXQsa3QpLHkuY2xpcCgpKSksRC5zYWZlRHJhd0ltYWdlKHksZywwLDAsenQsZWUsbmUsVmUsVnQsZmUpLGp0JiZ5LnJlc3RvcmUoKTtlbHNle3ZhciB1cj15LmNyZWF0ZVBhdHRlcm4oZyxldCk7eS5maWxsU3R5bGU9dXIsRC5ub2RlU2hhcGVzW0QuZ2V0Tm9kZVNoYXBlKHgpXS5kcmF3KHksJCxxLEF0LGt0KSx5LnRyYW5zbGF0ZShuZSxWZSkseS5maWxsKCkseS50cmFuc2xhdGUoLW5lLC1WZSl9eS5nbG9iYWxBbHBoYT1Xbix2ciYmRC5zZXRJbWdTbW9vdGhpbmcoeSxycil9fTt2YXIgaHg9e307aHguZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeSxnKXtpZighZyl7dmFyIHg9eS5jeSgpLnpvb20oKSxUPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLEE9TWF0aC5jZWlsKHhMKHgqVCkpO2c9TWF0aC5wb3coMixBKX12YXIgRD15LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSpnLE89eS5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKEQ8Tyl9LGh4LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBEPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxPPXRoaXM7aWYoVD09bnVsbCl7aWYoRCYmIU8uZWxlVGV4dEJpZ2dlclRoYW5NaW4oZykpcmV0dXJufWVsc2UgaWYoVD09PSExKXJldHVybjtpZihnLmlzTm9kZSgpKXt2YXIgJD1nLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciBxPU8uZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGcpO3kudGV4dEFsaWduPXEseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgUz1nLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLEc9Zy5wc3R5bGUoImxhYmVsIiksVz1nLnBzdHlsZSgic291cmNlLWxhYmVsIiksZXQ9Zy5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKFN8fCghR3x8IUcudmFsdWUpJiYoIVd8fCFXLnZhbHVlKSYmKCFldHx8IWV0LnZhbHVlKSlyZXR1cm47eS50ZXh0QWxpZ249ImNlbnRlciIseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIGF0PSF4LGx0O3gmJihsdD14LHkudHJhbnNsYXRlKC1sdC54MSwtbHQueTEpKSxBPT1udWxsPyhPLmRyYXdUZXh0KHksZyxudWxsLGF0LEQpLGcuaXNFZGdlKCkmJihPLmRyYXdUZXh0KHksZywic291cmNlIixhdCxEKSxPLmRyYXdUZXh0KHksZywidGFyZ2V0IixhdCxEKSkpOk8uZHJhd1RleHQoeSxnLEEsYXQsRCkseCYmeS50cmFuc2xhdGUobHQueDEsbHQueTEpfSxoeC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeSl7dmFyIGc7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciB4PTA7eDx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3grKylpZihnPXRoaXMuZm9udENhY2hlc1t4XSxnLmNvbnRleHQ9PT15KXJldHVybiBnO3JldHVybiBnPXtjb250ZXh0Onl9LHRoaXMuZm9udENhY2hlcy5wdXNoKGcpLGd9LGh4LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFQ9Zy5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxBPWcucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsRD1nLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxPPWcucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9eD9nLmVmZmVjdGl2ZU9wYWNpdHkoKSpnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSxxPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQsUz1nLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxHPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt5LmZvbnQ9VCsiICIrTysiICIrQSsiICIrRCx5LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh5LFNbMF0sU1sxXSxTWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh5LEdbMF0sR1sxXSxHWzJdLHEpfTtmdW5jdGlvbiBmcHQoeSxnLHgsVCxBKXt2YXIgRD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06NTt5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGcrRCx4KSx5LmxpbmVUbyhnK1QtRCx4KSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgsZytULHgrRCkseS5saW5lVG8oZytULHgrQS1EKSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgrQSxnK1QtRCx4K0EpLHkubGluZVRvKGcrRCx4K0EpLHkucXVhZHJhdGljQ3VydmVUbyhnLHgrQSxnLHgrQS1EKSx5LmxpbmVUbyhnLHgrRCkseS5xdWFkcmF0aWNDdXJ2ZVRvKGcseCxnK0QseCkseS5jbG9zZVBhdGgoKSx5LmZpbGwoKX1oeC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeCxUPXkuX3ByaXZhdGUsQT1ULnJzY3JhdGNoLEQ9Zz9nKyItIjoiIixPPXkucHN0eWxlKEQrInRleHQtcm90YXRpb24iKSwkPWJwKEEsImxhYmVsQW5nbGUiLGcpO3JldHVybiBPLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiP3g9eS5pc0VkZ2UoKT8kOjA6Ty5zdHJWYWx1ZT09PSJub25lIj94PTA6eD1PLnBmVmFsdWUseH0saHguZHJhd1RleHQ9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxEPWcuX3ByaXZhdGUsTz1ELnJzY3JhdGNoLCQ9QT9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxO2lmKCEoQSYmKCQ9PT0wfHxnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU9PT0wKSkpe3g9PT0ibWFpbiImJih4PW51bGwpO3ZhciBxPWJwKE8sImxhYmVsWCIseCksUz1icChPLCJsYWJlbFkiLHgpLEcsVyxldD10aGlzLmdldExhYmVsVGV4dChnLHgpO2lmKGV0IT1udWxsJiZldCE9PSIiJiYhaXNOYU4ocSkmJiFpc05hTihTKSl7dGhpcy5zZXR1cFRleHRTdHlsZSh5LGcsQSk7dmFyIGF0PXg/eCsiLSI6IiIsbHQ9YnAoTywibGFiZWxXaWR0aCIseCksZnQ9YnAoTywibGFiZWxIZWlnaHQiLHgpLEF0PWcucHN0eWxlKGF0KyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxrdD1nLnBzdHlsZShhdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsTXQ9Zy5pc0VkZ2UoKSxEdD1nLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSxqdD1nLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtNdCYmKER0PSJjZW50ZXIiLGp0PSJjZW50ZXIiKSxxKz1BdCxTKz1rdDt2YXIgWnQ7c3dpdGNoKFQ/WnQ9dGhpcy5nZXRUZXh0QW5nbGUoZyx4KTpadD0wLFp0IT09MCYmKEc9cSxXPVMseS50cmFuc2xhdGUoRyxXKSx5LnJvdGF0ZShadCkscT0wLFM9MCksanQpe2Nhc2UidG9wIjpicmVhaztjYXNlImNlbnRlciI6Uys9ZnQvMjticmVhaztjYXNlImJvdHRvbSI6Uys9ZnQ7YnJlYWt9dmFyIEt0PWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlLHp0PWcucHN0eWxlKCJ0ZXh0LWJvcmRlci1vcGFjaXR5IikudmFsdWUsZWU9Zy5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxWdD1nLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlO2lmKEt0PjB8fGVlPjAmJnp0PjApe3ZhciBmZT1xLVZ0O3N3aXRjaChEdCl7Y2FzZSJsZWZ0IjpmZS09bHQ7YnJlYWs7Y2FzZSJjZW50ZXIiOmZlLT1sdC8yO2JyZWFrfXZhciBnZT1TLWZ0LVZ0LG5lPWx0KzIqVnQsUGU9ZnQrMipWdDtpZihLdD4wKXt2YXIgcGU9eS5maWxsU3R5bGUsYm49Zy5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3kuZmlsbFN0eWxlPSJyZ2JhKCIrYm5bMF0rIiwiK2JuWzFdKyIsIitiblsyXSsiLCIrS3QqJCsiKSI7dmFyIHplPWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiKS5zdHJWYWx1ZTt6ZS5pbmRleE9mKCJyb3VuZCIpPT09MD9mcHQoeSxmZSxnZSxuZSxQZSwyKTp5LmZpbGxSZWN0KGZlLGdlLG5lLFBlKSx5LmZpbGxTdHlsZT1wZX1pZihlZT4wJiZ6dD4wKXt2YXIgVmU9eS5zdHJva2VTdHlsZSxFbj15LmxpbmVXaWR0aCxEbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxLbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih5LnN0cm9rZVN0eWxlPSJyZ2JhKCIrRG5bMF0rIiwiK0RuWzFdKyIsIitEblsyXSsiLCIrenQqJCsiKSIseS5saW5lV2lkdGg9ZWUseS5zZXRMaW5lRGFzaClzd2l0Y2goS24pe2Nhc2UiZG90dGVkIjp5LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eS5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOnkubGluZVdpZHRoPWVlLzQseS5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoeS5zdHJva2VSZWN0KGZlLGdlLG5lLFBlKSxLbj09PSJkb3VibGUiKXt2YXIgU249ZWUvMjt5LnN0cm9rZVJlY3QoZmUrU24sZ2UrU24sbmUtU24qMixQZS1TbioyKX15LnNldExpbmVEYXNoJiZ5LnNldExpbmVEYXNoKFtdKSx5LmxpbmVXaWR0aD1Fbix5LnN0cm9rZVN0eWxlPVZlfX12YXIgV249MipnLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihXbj4wJiYoeS5saW5lV2lkdGg9V24pLGcucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZT09PSJ3cmFwIil7dmFyIHJyPWJwKE8sImxhYmVsV3JhcENhY2hlZExpbmVzIix4KSx2cj1icChPLCJsYWJlbExpbmVIZWlnaHQiLHgpLHVyPWx0LzIsdHI9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZyk7c3dpdGNoKHRyPT09ImF1dG8ifHwoRHQ9PT0ibGVmdCI/dHI9PT0ibGVmdCI/cSs9LWx0OnRyPT09ImNlbnRlciImJihxKz0tdXIpOkR0PT09ImNlbnRlciI/dHI9PT0ibGVmdCI/cSs9LXVyOnRyPT09InJpZ2h0IiYmKHErPXVyKTpEdD09PSJyaWdodCImJih0cj09PSJjZW50ZXIiP3ErPXVyOnRyPT09InJpZ2h0IiYmKHErPWx0KSkpLGp0KXtjYXNlInRvcCI6Uy09KHJyLmxlbmd0aC0xKSp2cjticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOlMtPShyci5sZW5ndGgtMSkqdnI7YnJlYWt9Zm9yKHZhciB3bj0wO3duPHJyLmxlbmd0aDt3bisrKVduPjAmJnkuc3Ryb2tlVGV4dChyclt3bl0scSxTKSx5LmZpbGxUZXh0KHJyW3duXSxxLFMpLFMrPXZyfWVsc2UgV24+MCYmeS5zdHJva2VUZXh0KGV0LHEsUykseS5maWxsVGV4dChldCxxLFMpO1p0IT09MCYmKHkucm90YXRlKC1adCkseS50cmFuc2xhdGUoLUcsLVcpKX19fTt2YXIgR2s9e307R2suZHJhd05vZGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxEPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxPPXRoaXMsJCxxLFM9Zy5fcHJpdmF0ZSxHPVMucnNjcmF0Y2gsVz1nLnBvc2l0aW9uKCk7aWYoISghWChXLngpfHwhWChXLnkpKSYmIShEJiYhZy52aXNpYmxlKCkpKXt2YXIgZXQ9RD9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxLGF0PU8udXNlUGF0aHMoKSxsdCxmdD0hMSxBdD1nLnBhZGRpbmcoKTskPWcud2lkdGgoKSsyKkF0LHE9Zy5oZWlnaHQoKSsyKkF0O3ZhciBrdDt4JiYoa3Q9eCx5LnRyYW5zbGF0ZSgta3QueDEsLWt0LnkxKSk7Zm9yKHZhciBNdD1nLnBzdHlsZSgiYmFja2dyb3VuZC1pbWFnZSIpLER0PU10LnZhbHVlLGp0PW5ldyBBcnJheShEdC5sZW5ndGgpLFp0PW5ldyBBcnJheShEdC5sZW5ndGgpLEt0PTAsenQ9MDt6dDxEdC5sZW5ndGg7enQrKyl7dmFyIGVlPUR0W3p0XSxWdD1qdFt6dF09ZWUhPW51bGwmJmVlIT09Im5vbmUiO2lmKFZ0KXt2YXIgZmU9Zy5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGcsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLCJ2YWx1ZSIsenQpO0t0KyssWnRbenRdPU8uZ2V0Q2FjaGVkSW1hZ2UoZWUsZmUsZnVuY3Rpb24oKXtTLmJhY2tncm91bmRUaW1lc3RhbXA9RGF0ZS5ub3coKSxnLmVtaXRBbmROb3RpZnkoImJhY2tncm91bmQiKX0pfX12YXIgZ2U9Zy5wc3R5bGUoImJhY2tncm91bmQtYmxhY2tlbiIpLnZhbHVlLG5lPWcucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLFBlPWcucHN0eWxlKCJiYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpldCxwZT1nLnBzdHlsZSgiYm9yZGVyLWNvbG9yIikudmFsdWUsYm49Zy5wc3R5bGUoImJvcmRlci1zdHlsZSIpLnZhbHVlLHplPWcucHN0eWxlKCJib3JkZXItb3BhY2l0eSIpLnZhbHVlKmV0O3kubGluZUpvaW49Im1pdGVyIjt2YXIgVmU9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOlBlO08uZWxlRmlsbFN0eWxlKHksZyxTaSl9LEVuPWZ1bmN0aW9uKCl7dmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp6ZTtPLmNvbG9yU3Ryb2tlU3R5bGUoeSxwZVswXSxwZVsxXSxwZVsyXSxTaSl9LERuPWcucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLEtuPWcucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYoYXQpe3kudHJhbnNsYXRlKFcueCxXLnkpO3ZhciBTbj1PLm5vZGVQYXRoQ2FjaGU9Ty5ub2RlUGF0aENhY2hlfHxbXSxXbj1lZChEbj09PSJwb2x5Z29uIj9EbisiLCIrS24uam9pbigiLCIpOkRuLCIiK3EsIiIrJCkscnI9U25bV25dO3JyIT1udWxsPyhsdD1ycixmdD0hMCxHLnBhdGhDYWNoZT1sdCk6KGx0PW5ldyBQYXRoMkQsU25bV25dPUcucGF0aENhY2hlPWx0KX12YXIgdnI9ZnVuY3Rpb24oKXtpZighZnQpe3ZhciBTaT1XO2F0JiYoU2k9e3g6MCx5OjB9KSxPLm5vZGVTaGFwZXNbTy5nZXROb2RlU2hhcGUoZyldLmRyYXcobHR8fHksU2kueCxTaS55LCQscSl9YXQ/eS5maWxsKGx0KTp5LmZpbGwoKX0sdXI9ZnVuY3Rpb24oKXtmb3IodmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpldCxVaT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsR2E9Uy5iYWNrZ3JvdW5kaW5nLFlzPTAsenM9MDt6czxadC5sZW5ndGg7enMrKyl7dmFyIEVyPWcuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShnLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLHpzKTtpZihVaSYmRXI9PT0ib3ZlciJ8fCFVaSYmRXI9PT0iaW5zaWRlIil7WXMrKztjb250aW51ZX1qdFt6c10mJlp0W3pzXS5jb21wbGV0ZSYmIVp0W3pzXS5lcnJvciYmKFlzKyssTy5kcmF3SW5zY3JpYmVkSW1hZ2UoeSxadFt6c10sZyx6cyxTaSkpfVMuYmFja2dyb3VuZGluZz1ZcyE9PUt0LEdhIT09Uy5iYWNrZ3JvdW5kaW5nJiZnLnVwZGF0ZVN0eWxlKCExKX0sdHI9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpldDtPLmhhc1BpZShnKSYmKE8uZHJhd1BpZSh5LGcsVWkpLFNpJiYoYXR8fE8ubm9kZVNoYXBlc1tPLmdldE5vZGVTaGFwZShnKV0uZHJhdyh5LFcueCxXLnksJCxxKSkpfSx3bj1mdW5jdGlvbigpe3ZhciBTaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ZXQsVWk9KGdlPjA/Z2U6LWdlKSpTaSxHYT1nZT4wPzA6MjU1O2dlIT09MCYmKE8uY29sb3JGaWxsU3R5bGUoeSxHYSxHYSxHYSxVaSksYXQ/eS5maWxsKGx0KTp5LmZpbGwoKSl9LGdyPWZ1bmN0aW9uKCl7aWYobmU+MCl7aWYoeS5saW5lV2lkdGg9bmUseS5saW5lQ2FwPSJidXR0Iix5LnNldExpbmVEYXNoKXN3aXRjaChibil7Y2FzZSJkb3R0ZWQiOnkuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp5LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoYXQ/eS5zdHJva2UobHQpOnkuc3Ryb2tlKCksYm49PT0iZG91YmxlIil7eS5saW5lV2lkdGg9bmUvMzt2YXIgU2k9eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsYXQ/eS5zdHJva2UobHQpOnkuc3Ryb2tlKCkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249U2l9eS5zZXRMaW5lRGFzaCYmeS5zZXRMaW5lRGFzaChbXSl9fSxmcj1mdW5jdGlvbigpe0EmJk8uZHJhd05vZGVPdmVybGF5KHksZyxXLCQscSl9LEpyPWZ1bmN0aW9uKCl7QSYmTy5kcmF3Tm9kZVVuZGVybGF5KHksZyxXLCQscSl9LHdpPWZ1bmN0aW9uKCl7Ty5kcmF3RWxlbWVudFRleHQoeSxnLG51bGwsVCl9LEtzPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoS3Mpe3ZhciBrYT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLENpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsaGk9Zy5wc3R5bGUoImdob3N0LW9wYWNpdHkiKS52YWx1ZSxncz1oaSpldDt5LnRyYW5zbGF0ZShrYSxDaSksVmUoaGkqUGUpLHZyKCksdXIoZ3MsITApLEVuKGhpKnplKSxncigpLHRyKGdlIT09MHx8bmUhPT0wKSx1cihncywhMSksd24oZ3MpLHkudHJhbnNsYXRlKC1rYSwtQ2kpfWF0JiZ5LnRyYW5zbGF0ZSgtVy54LC1XLnkpLEpyKCksYXQmJnkudHJhbnNsYXRlKFcueCxXLnkpLFZlKCksdnIoKSx1cihldCwhMCksRW4oKSxncigpLHRyKGdlIT09MHx8bmUhPT0wKSx1cihldCwhMSksd24oKSxhdCYmeS50cmFuc2xhdGUoLVcueCwtVy55KSx3aSgpLGZyKCkseCYmeS50cmFuc2xhdGUoa3QueDEsa3QueTEpfX07dmFyIEV0dD1mdW5jdGlvbihnKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhnKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24oeCxULEEsRCxPKXt2YXIgJD10aGlzO2lmKFQudmlzaWJsZSgpKXt2YXIgcT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXBhZGRpbmciKSkucGZWYWx1ZSxTPVQucHN0eWxlKCIiLmNvbmNhdChnLCItb3BhY2l0eSIpKS52YWx1ZSxHPVQucHN0eWxlKCIiLmNvbmNhdChnLCItY29sb3IiKSkudmFsdWUsVz1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXNoYXBlIikpLnZhbHVlO2lmKFM+MCl7aWYoQT1BfHxULnBvc2l0aW9uKCksRD09bnVsbHx8Tz09bnVsbCl7dmFyIGV0PVQucGFkZGluZygpO0Q9VC53aWR0aCgpKzIqZXQsTz1ULmhlaWdodCgpKzIqZXR9JC5jb2xvckZpbGxTdHlsZSh4LEdbMF0sR1sxXSxHWzJdLFMpLCQubm9kZVNoYXBlc1tXXS5kcmF3KHgsQS54LEEueSxEK3EqMixPK3EqMikseC5maWxsKCl9fX19O0drLmRyYXdOb2RlT3ZlcmxheT1FdHQoIm92ZXJsYXkiKSxHay5kcmF3Tm9kZVVuZGVybGF5PUV0dCgidW5kZXJsYXkiKSxHay5oYXNQaWU9ZnVuY3Rpb24oeSl7cmV0dXJuIHk9eVswXSx5Ll9wcml2YXRlLmhhc1BpZX0sR2suZHJhd1BpZT1mdW5jdGlvbih5LGcseCxUKXtnPWdbMF0sVD1UfHxnLnBvc2l0aW9uKCk7dmFyIEE9Zy5jeSgpLnN0eWxlKCksRD1nLnBzdHlsZSgicGllLXNpemUiKSxPPVQueCwkPVQueSxxPWcud2lkdGgoKSxTPWcuaGVpZ2h0KCksRz1NYXRoLm1pbihxLFMpLzIsVz0wLGV0PXRoaXMudXNlUGF0aHMoKTtldCYmKE89MCwkPTApLEQudW5pdHM9PT0iJSI/Rz1HKkQucGZWYWx1ZTpELnBmVmFsdWUhPT12b2lkIDAmJihHPUQucGZWYWx1ZS8yKTtmb3IodmFyIGF0PTE7YXQ8PUEucGllQmFja2dyb3VuZE47YXQrKyl7dmFyIGx0PWcucHN0eWxlKCJwaWUtIithdCsiLWJhY2tncm91bmQtc2l6ZSIpLnZhbHVlLGZ0PWcucHN0eWxlKCJwaWUtIithdCsiLWJhY2tncm91bmQtY29sb3IiKS52YWx1ZSxBdD1nLnBzdHlsZSgicGllLSIrYXQrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSp4LGt0PWx0LzEwMDtrdCtXPjEmJihrdD0xLVcpO3ZhciBNdD0xLjUqTWF0aC5QSSsyKk1hdGguUEkqVyxEdD0yKk1hdGguUEkqa3QsanQ9TXQrRHQ7bHQ9PT0wfHxXPj0xfHxXK2t0PjF8fCh5LmJlZ2luUGF0aCgpLHkubW92ZVRvKE8sJCkseS5hcmMoTywkLEcsTXQsanQpLHkuY2xvc2VQYXRoKCksdGhpcy5jb2xvckZpbGxTdHlsZSh5LGZ0WzBdLGZ0WzFdLGZ0WzJdLEF0KSx5LmZpbGwoKSxXKz1rdCl9fTt2YXIgdmc9e30sZHB0PTEwMDt2Zy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5kYXRhLmNvbnRleHRzWzBdO2lmKHRoaXMuZm9yY2VkUGl4ZWxSYXRpbyE9bnVsbClyZXR1cm4gdGhpcy5mb3JjZWRQaXhlbFJhdGlvO3ZhciBnPXkuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eS53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHkubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDE7cmV0dXJuKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKS9nfSx2Zy5wYWludENhY2hlPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLHg9ITAsVCxBPTA7QTxnLmxlbmd0aDtBKyspaWYoVD1nW0FdLFQuY29udGV4dD09PXkpe3g9ITE7YnJlYWt9cmV0dXJuIHgmJihUPXtjb250ZXh0Onl9LGcucHVzaChUKSksVH0sdmcuY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBELE89dGhpcy51c2VQYXRocygpLCQ9eC5wc3R5bGUoZysiLWdyYWRpZW50LXN0b3AtY29sb3JzIikudmFsdWUscT14LnBzdHlsZShnKyItZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiKS5wZlZhbHVlO2lmKFQ9PT0icmFkaWFsLWdyYWRpZW50IilpZih4LmlzRWRnZSgpKXt2YXIgUz14LnNvdXJjZUVuZHBvaW50KCksRz14LnRhcmdldEVuZHBvaW50KCksVz14Lm1pZHBvaW50KCksZXQ9RTMoUyxXKSxhdD1FMyhHLFcpO0Q9eS5jcmVhdGVSYWRpYWxHcmFkaWVudChXLngsVy55LDAsVy54LFcueSxNYXRoLm1heChldCxhdCkpfWVsc2V7dmFyIGx0PU8/e3g6MCx5OjB9OngucG9zaXRpb24oKSxmdD14LnBhZGRlZFdpZHRoKCksQXQ9eC5wYWRkZWRIZWlnaHQoKTtEPXkuY3JlYXRlUmFkaWFsR3JhZGllbnQobHQueCxsdC55LDAsbHQueCxsdC55LE1hdGgubWF4KGZ0LEF0KSl9ZWxzZSBpZih4LmlzRWRnZSgpKXt2YXIga3Q9eC5zb3VyY2VFbmRwb2ludCgpLE10PXgudGFyZ2V0RW5kcG9pbnQoKTtEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoa3QueCxrdC55LE10LngsTXQueSl9ZWxzZXt2YXIgRHQ9Tz97eDowLHk6MH06eC5wb3NpdGlvbigpLGp0PXgucGFkZGVkV2lkdGgoKSxadD14LnBhZGRlZEhlaWdodCgpLEt0PWp0LzIsenQ9WnQvMixlZT14LnBzdHlsZSgiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iKS52YWx1ZTtzd2l0Y2goZWUpe2Nhc2UidG8tYm90dG9tIjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueCxEdC55LXp0LER0LngsRHQueSt6dCk7YnJlYWs7Y2FzZSJ0by10b3AiOkQ9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChEdC54LER0LnkrenQsRHQueCxEdC55LXp0KTticmVhaztjYXNlInRvLWxlZnQiOkQ9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChEdC54K0t0LER0LnksRHQueC1LdCxEdC55KTticmVhaztjYXNlInRvLXJpZ2h0IjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueC1LdCxEdC55LER0LngrS3QsRHQueSk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tcmlnaHQiOmNhc2UidG8tcmlnaHQtYm90dG9tIjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueC1LdCxEdC55LXp0LER0LngrS3QsRHQueSt6dCk7YnJlYWs7Y2FzZSJ0by10b3AtcmlnaHQiOmNhc2UidG8tcmlnaHQtdG9wIjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueC1LdCxEdC55K3p0LER0LngrS3QsRHQueS16dCk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tbGVmdCI6Y2FzZSJ0by1sZWZ0LWJvdHRvbSI6RD15LmNyZWF0ZUxpbmVhckdyYWRpZW50KER0LngrS3QsRHQueS16dCxEdC54LUt0LER0LnkrenQpO2JyZWFrO2Nhc2UidG8tdG9wLWxlZnQiOmNhc2UidG8tbGVmdC10b3AiOkQ9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChEdC54K0t0LER0LnkrenQsRHQueC1LdCxEdC55LXp0KTticmVha319aWYoIUQpcmV0dXJuIG51bGw7Zm9yKHZhciBWdD1xLmxlbmd0aD09PSQubGVuZ3RoLGZlPSQubGVuZ3RoLGdlPTA7Z2U8ZmU7Z2UrKylELmFkZENvbG9yU3RvcChWdD9xW2dlXTpnZS8oZmUtMSksInJnYmEoIiskW2dlXVswXSsiLCIrJFtnZV1bMV0rIiwiKyRbZ2VdWzJdKyIsIitBKyIpIik7cmV0dXJuIER9LHZnLmdyYWRpZW50RmlsbFN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBBPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJiYWNrZ3JvdW5kIixnLHgsVCk7aWYoIUEpcmV0dXJuIG51bGw7eS5maWxsU3R5bGU9QX0sdmcuY29sb3JGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgsVCxBKXt5LmZpbGxTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0ErIikifSx2Zy5lbGVGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWcucHN0eWxlKCJiYWNrZ3JvdW5kLWZpbGwiKS52YWx1ZTtpZihUPT09ImxpbmVhci1ncmFkaWVudCJ8fFQ9PT0icmFkaWFsLWdyYWRpZW50Iil0aGlzLmdyYWRpZW50RmlsbFN0eWxlKHksZyxULHgpO2Vsc2V7dmFyIEE9Zy5wc3R5bGUoImJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yRmlsbFN0eWxlKHksQVswXSxBWzFdLEFbMl0seCl9fSx2Zy5ncmFkaWVudFN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBBPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJsaW5lIixnLHgsVCk7aWYoIUEpcmV0dXJuIG51bGw7eS5zdHJva2VTdHlsZT1BfSx2Zy5jb2xvclN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQsQSl7eS5zdHJva2VTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0ErIikifSx2Zy5lbGVTdHJva2VTdHlsZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9Zy5wc3R5bGUoImxpbmUtZmlsbCIpLnZhbHVlO2lmKFQ9PT0ibGluZWFyLWdyYWRpZW50Inx8VD09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZSh5LGcsVCx4KTtlbHNle3ZhciBBPWcucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWU7dGhpcy5jb2xvclN0cm9rZVN0eWxlKHksQVswXSxBWzFdLEFbMl0seCl9fSx2Zy5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZGF0YSxUPWcuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEE9VFsyXSxEPVRbM10sTz1nLmdldFBpeGVsUmF0aW8oKSwkPWcubW90aW9uQmx1clB4UmF0aW87KHk9PT1nLmRhdGEuYnVmZmVyQ2FudmFzZXNbZy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8eT09PWcuZGF0YS5idWZmZXJDYW52YXNlc1tnLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSYmKE89JCk7dmFyIHE9QSpPLFM9RCpPLEc7aWYoIShxPT09Zy5jYW52YXNXaWR0aCYmUz09PWcuY2FudmFzSGVpZ2h0KSl7Zy5mb250Q2FjaGVzPW51bGw7dmFyIFc9eC5jYW52YXNDb250YWluZXI7Vy5zdHlsZS53aWR0aD1BKyJweCIsVy5zdHlsZS5oZWlnaHQ9RCsicHgiO2Zvcih2YXIgZXQ9MDtldDxnLkNBTlZBU19MQVlFUlM7ZXQrKylHPXguY2FudmFzZXNbZXRdLEcud2lkdGg9cSxHLmhlaWdodD1TLEcuc3R5bGUud2lkdGg9QSsicHgiLEcuc3R5bGUuaGVpZ2h0PUQrInB4Ijtmb3IodmFyIGV0PTA7ZXQ8Zy5CVUZGRVJfQ09VTlQ7ZXQrKylHPXguYnVmZmVyQ2FudmFzZXNbZXRdLEcud2lkdGg9cSxHLmhlaWdodD1TLEcuc3R5bGUud2lkdGg9QSsicHgiLEcuc3R5bGUuaGVpZ2h0PUQrInB4IjtnLnRleHR1cmVNdWx0PTEsTzw9MSYmKEc9eC5idWZmZXJDYW52YXNlc1tnLlRFWFRVUkVfQlVGRkVSXSxnLnRleHR1cmVNdWx0PTIsRy53aWR0aD1xKmcudGV4dHVyZU11bHQsRy5oZWlnaHQ9UypnLnRleHR1cmVNdWx0KSxnLmNhbnZhc1dpZHRoPXEsZy5jYW52YXNIZWlnaHQ9U319LHZnLnJlbmRlclRvPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMucmVuZGVyKHtmb3JjZWRDb250ZXh0OnksZm9yY2VkWm9vbTpnLGZvcmNlZFBhbjp4LGRyYXdBbGxMYXllcnM6ITAsZm9yY2VkUHhSYXRpbzpUfSl9LHZnLnJlbmRlcj1mdW5jdGlvbih5KXt5PXl8fEtQKCk7dmFyIGc9eS5mb3JjZWRDb250ZXh0LHg9eS5kcmF3QWxsTGF5ZXJzLFQ9eS5kcmF3T25seU5vZGVMYXllcixBPXkuZm9yY2VkWm9vbSxEPXkuZm9yY2VkUGFuLE89dGhpcywkPXkuZm9yY2VkUHhSYXRpbz09PXZvaWQgMD90aGlzLmdldFBpeGVsUmF0aW8oKTp5LmZvcmNlZFB4UmF0aW8scT1PLmN5LFM9Ty5kYXRhLEc9Uy5jYW52YXNOZWVkc1JlZHJhdyxXPU8udGV4dHVyZU9uVmlld3BvcnQmJiFnJiYoTy5waW5jaGluZ3x8Ty5ob3ZlckRhdGEuZHJhZ2dpbmd8fE8uc3dpcGVQYW5uaW5nfHxPLmRhdGEud2hlZWxab29taW5nKSxldD15Lm1vdGlvbkJsdXIhPT12b2lkIDA/eS5tb3Rpb25CbHVyOk8ubW90aW9uQmx1cixhdD1PLm1vdGlvbkJsdXJQeFJhdGlvLGx0PXEuaGFzQ29tcG91bmROb2RlcygpLGZ0PU8uaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyxBdD0hIShPLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fE8udG91Y2hEYXRhLnNlbGVjdGluZyk7ZXQ9ZXQmJiFnJiZPLm1vdGlvbkJsdXJFbmFibGVkJiYhQXQ7dmFyIGt0PWV0O2d8fChPLnByZXZQeFJhdGlvIT09JCYmKE8uaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksTy5tYXRjaENhbnZhc1NpemUoTy5jb250YWluZXIpLE8ucmVkcmF3SGludCgiZWxlcyIsITApLE8ucmVkcmF3SGludCgiZHJhZyIsITApKSxPLnByZXZQeFJhdGlvPSQpLCFnJiZPLm1vdGlvbkJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQoTy5tb3Rpb25CbHVyVGltZW91dCksZXQmJihPLm1iRnJhbWVzPT1udWxsJiYoTy5tYkZyYW1lcz0wKSxPLm1iRnJhbWVzKyssTy5tYkZyYW1lczwzJiYoa3Q9ITEpLE8ubWJGcmFtZXM+Ty5taW5NYkxvd1F1YWxGcmFtZXMmJihPLm1vdGlvbkJsdXJQeFJhdGlvPU8ubWJQeFJCbHVycnkpKSxPLmNsZWFyaW5nTW90aW9uQmx1ciYmKE8ubW90aW9uQmx1clB4UmF0aW89MSksTy50ZXh0dXJlRHJhd0xhc3RGcmFtZSYmIVcmJihHW08uTk9ERV09ITAsR1tPLlNFTEVDVF9CT1hdPSEwKTt2YXIgTXQ9cS5zdHlsZSgpLER0PXEuem9vbSgpLGp0PUEhPT12b2lkIDA/QTpEdCxadD1xLnBhbigpLEt0PXt4Olp0LngseTpadC55fSx6dD17em9vbTpEdCxwYW46e3g6WnQueCx5Olp0Lnl9fSxlZT1PLnByZXZWaWV3cG9ydCxWdD1lZT09PXZvaWQgMHx8enQuem9vbSE9PWVlLnpvb218fHp0LnBhbi54IT09ZWUucGFuLnh8fHp0LnBhbi55IT09ZWUucGFuLnk7IVZ0JiYhKGZ0JiYhbHQpJiYoTy5tb3Rpb25CbHVyUHhSYXRpbz0xKSxEJiYoS3Q9RCksanQqPSQsS3QueCo9JCxLdC55Kj0kO3ZhciBmZT1PLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7ZnVuY3Rpb24gZ2UoQ2ksaGksZ3MscWksU2kpe3ZhciBVaT1DaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247Q2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLE8uY29sb3JGaWxsU3R5bGUoQ2ksMjU1LDI1NSwyNTUsTy5tb3Rpb25CbHVyVHJhbnNwYXJlbmN5KSxDaS5maWxsUmVjdChoaSxncyxxaSxTaSksQ2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVVpfWZ1bmN0aW9uIG5lKENpLGhpKXt2YXIgZ3MscWksU2ksVWk7IU8uY2xlYXJpbmdNb3Rpb25CbHVyJiYoQ2k9PT1TLmJ1ZmZlckNvbnRleHRzW08uTU9USU9OQkxVUl9CVUZGRVJfTk9ERV18fENpPT09Uy5idWZmZXJDb250ZXh0c1tPLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKT8oZ3M9e3g6WnQueCphdCx5Olp0LnkqYXR9LHFpPUR0KmF0LFNpPU8uY2FudmFzV2lkdGgqYXQsVWk9Ty5jYW52YXNIZWlnaHQqYXQpOihncz1LdCxxaT1qdCxTaT1PLmNhbnZhc1dpZHRoLFVpPU8uY2FudmFzSGVpZ2h0KSxDaS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGhpPT09Im1vdGlvbkJsdXIiP2dlKENpLDAsMCxTaSxVaSk6IWcmJihoaT09PXZvaWQgMHx8aGkpJiZDaS5jbGVhclJlY3QoMCwwLFNpLFVpKSx4fHwoQ2kudHJhbnNsYXRlKGdzLngsZ3MueSksQ2kuc2NhbGUocWkscWkpKSxEJiZDaS50cmFuc2xhdGUoRC54LEQueSksQSYmQ2kuc2NhbGUoQSxBKX1pZihXfHwoTy50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMSksVyl7aWYoTy50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMCwhTy50ZXh0dXJlQ2FjaGUpe08udGV4dHVyZUNhY2hlPXt9LE8udGV4dHVyZUNhY2hlLmJiPXEubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSxPLnRleHR1cmVDYWNoZS50ZXh0dXJlPU8uZGF0YS5idWZmZXJDYW52YXNlc1tPLlRFWFRVUkVfQlVGRkVSXTt2YXIgUGU9Ty5kYXRhLmJ1ZmZlckNvbnRleHRzW08uVEVYVFVSRV9CVUZGRVJdO1BlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksUGUuY2xlYXJSZWN0KDAsMCxPLmNhbnZhc1dpZHRoKk8udGV4dHVyZU11bHQsTy5jYW52YXNIZWlnaHQqTy50ZXh0dXJlTXVsdCksTy5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6UGUsZHJhd09ubHlOb2RlTGF5ZXI6ITAsZm9yY2VkUHhSYXRpbzokKk8udGV4dHVyZU11bHR9KTt2YXIgenQ9Ty50ZXh0dXJlQ2FjaGUudmlld3BvcnQ9e3pvb206cS56b29tKCkscGFuOnEucGFuKCksd2lkdGg6Ty5jYW52YXNXaWR0aCxoZWlnaHQ6Ty5jYW52YXNIZWlnaHR9O3p0Lm1wYW49e3g6KDAtenQucGFuLngpL3p0Lnpvb20seTooMC16dC5wYW4ueSkvenQuem9vbX19R1tPLkRSQUddPSExLEdbTy5OT0RFXT0hMTt2YXIgcGU9Uy5jb250ZXh0c1tPLk5PREVdLGJuPU8udGV4dHVyZUNhY2hlLnRleHR1cmUsenQ9Ty50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7cGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxldD9nZShwZSwwLDAsenQud2lkdGgsenQuaGVpZ2h0KTpwZS5jbGVhclJlY3QoMCwwLHp0LndpZHRoLHp0LmhlaWdodCk7dmFyIHplPU10LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIpLnZhbHVlLFZlPU10LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IikudmFsdWU7Ty5jb2xvckZpbGxTdHlsZShwZSx6ZVswXSx6ZVsxXSx6ZVsyXSxWZSkscGUuZmlsbFJlY3QoMCwwLHp0LndpZHRoLHp0LmhlaWdodCk7dmFyIER0PXEuem9vbSgpO25lKHBlLCExKSxwZS5jbGVhclJlY3QoenQubXBhbi54LHp0Lm1wYW4ueSx6dC53aWR0aC96dC56b29tLyQsenQuaGVpZ2h0L3p0Lnpvb20vJCkscGUuZHJhd0ltYWdlKGJuLHp0Lm1wYW4ueCx6dC5tcGFuLnksenQud2lkdGgvenQuem9vbS8kLHp0LmhlaWdodC96dC56b29tLyQpfWVsc2UgTy50ZXh0dXJlT25WaWV3cG9ydCYmIWcmJihPLnRleHR1cmVDYWNoZT1udWxsKTt2YXIgRW49cS5leHRlbnQoKSxEbj1PLnBpbmNoaW5nfHxPLmhvdmVyRGF0YS5kcmFnZ2luZ3x8Ty5zd2lwZVBhbm5pbmd8fE8uZGF0YS53aGVlbFpvb21pbmd8fE8uaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8Ty5jeS5hbmltYXRlZCgpLEtuPU8uaGlkZUVkZ2VzT25WaWV3cG9ydCYmRG4sU249W107aWYoU25bTy5OT0RFXT0hR1tPLk5PREVdJiZldCYmIU8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5OT0RFXXx8Ty5jbGVhcmluZ01vdGlvbkJsdXIsU25bTy5OT0RFXSYmKE8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5OT0RFXT0hMCksU25bTy5EUkFHXT0hR1tPLkRSQUddJiZldCYmIU8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5EUkFHXXx8Ty5jbGVhcmluZ01vdGlvbkJsdXIsU25bTy5EUkFHXSYmKE8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5EUkFHXT0hMCksR1tPLk5PREVdfHx4fHxUfHxTbltPLk5PREVdKXt2YXIgV249ZXQmJiFTbltPLk5PREVdJiZhdCE9PTEscGU9Z3x8KFduP08uZGF0YS5idWZmZXJDb250ZXh0c1tPLk1PVElPTkJMVVJfQlVGRkVSX05PREVdOlMuY29udGV4dHNbTy5OT0RFXSkscnI9ZXQmJiFXbj8ibW90aW9uQmx1ciI6dm9pZCAwO25lKHBlLHJyKSxLbj9PLmRyYXdDYWNoZWROb2RlcyhwZSxmZS5ub25kcmFnLCQsRW4pOk8uZHJhd0xheWVyZWRFbGVtZW50cyhwZSxmZS5ub25kcmFnLCQsRW4pLE8uZGVidWcmJk8uZHJhd0RlYnVnUG9pbnRzKHBlLGZlLm5vbmRyYWcpLCF4JiYhZXQmJihHW08uTk9ERV09ITEpfWlmKCFUJiYoR1tPLkRSQUddfHx4fHxTbltPLkRSQUddKSl7dmFyIFduPWV0JiYhU25bTy5EUkFHXSYmYXQhPT0xLHBlPWd8fChXbj9PLmRhdGEuYnVmZmVyQ29udGV4dHNbTy5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTpTLmNvbnRleHRzW08uRFJBR10pO25lKHBlLGV0JiYhV24/Im1vdGlvbkJsdXIiOnZvaWQgMCksS24/Ty5kcmF3Q2FjaGVkTm9kZXMocGUsZmUuZHJhZywkLEVuKTpPLmRyYXdDYWNoZWRFbGVtZW50cyhwZSxmZS5kcmFnLCQsRW4pLE8uZGVidWcmJk8uZHJhd0RlYnVnUG9pbnRzKHBlLGZlLmRyYWcpLCF4JiYhZXQmJihHW08uRFJBR109ITEpfWlmKE8uc2hvd0Zwc3x8IVQmJkdbTy5TRUxFQ1RfQk9YXSYmIXgpe3ZhciBwZT1nfHxTLmNvbnRleHRzW08uU0VMRUNUX0JPWF07aWYobmUocGUpLE8uc2VsZWN0aW9uWzRdPT0xJiYoTy5ob3ZlckRhdGEuc2VsZWN0aW5nfHxPLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgRHQ9Ty5jeS56b29tKCksdnI9TXQuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS9EdDtwZS5saW5lV2lkdGg9dnIscGUuZmlsbFN0eWxlPSJyZ2JhKCIrTXQuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzBdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK010LmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsyXSsiLCIrTXQuY29yZSgic2VsZWN0aW9uLWJveC1vcGFjaXR5IikudmFsdWUrIikiLHBlLmZpbGxSZWN0KE8uc2VsZWN0aW9uWzBdLE8uc2VsZWN0aW9uWzFdLE8uc2VsZWN0aW9uWzJdLU8uc2VsZWN0aW9uWzBdLE8uc2VsZWN0aW9uWzNdLU8uc2VsZWN0aW9uWzFdKSx2cj4wJiYocGUuc3Ryb2tlU3R5bGU9InJnYmEoIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzFdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzJdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIscGUuc3Ryb2tlUmVjdChPLnNlbGVjdGlvblswXSxPLnNlbGVjdGlvblsxXSxPLnNlbGVjdGlvblsyXS1PLnNlbGVjdGlvblswXSxPLnNlbGVjdGlvblszXS1PLnNlbGVjdGlvblsxXSkpfWlmKFMuYmdBY3RpdmVQb3Npc3Rpb24mJiFPLmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBEdD1PLmN5Lnpvb20oKSx1cj1TLmJnQWN0aXZlUG9zaXN0aW9uO3BlLmZpbGxTdHlsZT0icmdiYSgiK010LmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzBdKyIsIitNdC5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsxXSsiLCIrTXQuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMl0rIiwiK010LmNvcmUoImFjdGl2ZS1iZy1vcGFjaXR5IikudmFsdWUrIikiLHBlLmJlZ2luUGF0aCgpLHBlLmFyYyh1ci54LHVyLnksTXQuY29yZSgiYWN0aXZlLWJnLXNpemUiKS5wZlZhbHVlL0R0LDAsMipNYXRoLlBJKSxwZS5maWxsKCl9dmFyIHRyPU8ubGFzdFJlZHJhd1RpbWU7aWYoTy5zaG93RnBzJiZ0cil7dHI9TWF0aC5yb3VuZCh0cik7dmFyIHduPU1hdGgucm91bmQoMWUzL3RyKTtwZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHBlLmZpbGxTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixwZS5zdHJva2VTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixwZS5saW5lV2lkdGg9MSxwZS5maWxsVGV4dCgiMSBmcmFtZSA9ICIrdHIrIiBtcyA9ICIrd24rIiBmcHMiLDAsMjApO3ZhciBncj02MDtwZS5zdHJva2VSZWN0KDAsMzAsMjUwLDIwKSxwZS5maWxsUmVjdCgwLDMwLDI1MCpNYXRoLm1pbih3bi9nciwxKSwyMCl9eHx8KEdbTy5TRUxFQ1RfQk9YXT0hMSl9aWYoZXQmJmF0IT09MSl7dmFyIGZyPVMuY29udGV4dHNbTy5OT0RFXSxKcj1PLmRhdGEuYnVmZmVyQ2FudmFzZXNbTy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSx3aT1TLmNvbnRleHRzW08uRFJBR10sS3M9Ty5kYXRhLmJ1ZmZlckNhbnZhc2VzW08uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10sa2E9ZnVuY3Rpb24oaGksZ3MscWkpe2hpLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscWl8fCFrdD9oaS5jbGVhclJlY3QoMCwwLE8uY2FudmFzV2lkdGgsTy5jYW52YXNIZWlnaHQpOmdlKGhpLDAsMCxPLmNhbnZhc1dpZHRoLE8uY2FudmFzSGVpZ2h0KTt2YXIgU2k9YXQ7aGkuZHJhd0ltYWdlKGdzLDAsMCxPLmNhbnZhc1dpZHRoKlNpLE8uY2FudmFzSGVpZ2h0KlNpLDAsMCxPLmNhbnZhc1dpZHRoLE8uY2FudmFzSGVpZ2h0KX07KEdbTy5OT0RFXXx8U25bTy5OT0RFXSkmJihrYShmcixKcixTbltPLk5PREVdKSxHW08uTk9ERV09ITEpLChHW08uRFJBR118fFNuW08uRFJBR10pJiYoa2Eod2ksS3MsU25bTy5EUkFHXSksR1tPLkRSQUddPSExKX1PLnByZXZWaWV3cG9ydD16dCxPLmNsZWFyaW5nTW90aW9uQmx1ciYmKE8uY2xlYXJpbmdNb3Rpb25CbHVyPSExLE8ubW90aW9uQmx1ckNsZWFyZWQ9ITAsTy5tb3Rpb25CbHVyPSEwKSxldCYmKE8ubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe08ubW90aW9uQmx1clRpbWVvdXQ9bnVsbCxPLmNsZWFyZWRGb3JNb3Rpb25CbHVyW08uTk9ERV09ITEsTy5jbGVhcmVkRm9yTW90aW9uQmx1cltPLkRSQUddPSExLE8ubW90aW9uQmx1cj0hMSxPLmNsZWFyaW5nTW90aW9uQmx1cj0hVyxPLm1iRnJhbWVzPTAsR1tPLk5PREVdPSEwLEdbTy5EUkFHXT0hMCxPLnJlZHJhdygpfSxkcHQpKSxnfHxxLmVtaXQoInJlbmRlciIpfTt2YXIgSTM9e307STMuZHJhd1BvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSxEKXt2YXIgTz1ULzIsJD1BLzI7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oZytPKkRbMF0seCskKkRbMV0pO2Zvcih2YXIgcT0xO3E8RC5sZW5ndGgvMjtxKyspeS5saW5lVG8oZytPKkRbcSoyXSx4KyQqRFtxKjIrMV0pO3kuY2xvc2VQYXRoKCl9LEkzLmRyYXdSb3VuZFBvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSxEKXt2YXIgTz1ULzIsJD1BLzIscT1fTChULEEpO3kuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpO2Zvcih2YXIgUz0wO1M8RC5sZW5ndGgvNDtTKyspe3ZhciBHPXZvaWQgMCxXPXZvaWQgMDtTPT09MD9HPUQubGVuZ3RoLTI6Rz1TKjQtMixXPVMqNCsyO3ZhciBldD1nK08qRFtTKjRdLGF0PXgrJCpEW1MqNCsxXSxsdD0tRFtHXSpEW1ddLURbRysxXSpEW1crMV0sZnQ9cS9NYXRoLnRhbihNYXRoLmFjb3MobHQpLzIpLEF0PWV0LWZ0KkRbR10sa3Q9YXQtZnQqRFtHKzFdLE10PWV0K2Z0KkRbV10sRHQ9YXQrZnQqRFtXKzFdO1M9PT0wP3kubW92ZVRvKEF0LGt0KTp5LmxpbmVUbyhBdCxrdCkseS5hcmNUbyhldCxhdCxNdCxEdCxxKX15LmNsb3NlUGF0aCgpfSxJMy5kcmF3Um91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9VC8yLE89QS8yLCQ9eGsoVCxBKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtTykseS5hcmNUbyhnK0QseC1PLGcrRCx4LCQpLHkuYXJjVG8oZytELHgrTyxnLHgrTywkKSx5LmFyY1RvKGctRCx4K08sZy1ELHgsJCkseS5hcmNUbyhnLUQseC1PLGcseC1PLCQpLHkubGluZVRvKGcseC1PKSx5LmNsb3NlUGF0aCgpfSxJMy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9VC8yLE89QS8yLCQ9eGsoVCxBKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtTykseS5saW5lVG8oZytELHgtTykseS5saW5lVG8oZytELHgpLHkuYXJjVG8oZytELHgrTyxnLHgrTywkKSx5LmFyY1RvKGctRCx4K08sZy1ELHgsJCkseS5saW5lVG8oZy1ELHgtTykseS5saW5lVG8oZyx4LU8pLHkuY2xvc2VQYXRoKCl9LEkzLmRyYXdDdXRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9VC8yLE89QS8yLCQ9c0YoKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLUQrJCx4LU8pLHkubGluZVRvKGcrRC0kLHgtTykseS5saW5lVG8oZytELHgtTyskKSx5LmxpbmVUbyhnK0QseCtPLSQpLHkubGluZVRvKGcrRC0kLHgrTykseS5saW5lVG8oZy1EKyQseCtPKSx5LmxpbmVUbyhnLUQseCtPLSQpLHkubGluZVRvKGctRCx4LU8rJCkseS5jbG9zZVBhdGgoKX0sSTMuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxBKXt2YXIgRD1ULzIsTz1BLzIsJD1nLUQscT1nK0QsUz14LU8sRz14K08sVz1TTChULEEpLGV0PVcud2lkdGhPZmZzZXQsYXQ9Vy5oZWlnaHRPZmZzZXQsbHQ9Vy5jdHJsUHRPZmZzZXRQY3QqZXQ7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oJCxTK2F0KSx5LmxpbmVUbygkLEctYXQpLHkucXVhZHJhdGljQ3VydmVUbygkK2x0LEcsJCtldCxHKSx5LmxpbmVUbyhxLWV0LEcpLHkucXVhZHJhdGljQ3VydmVUbyhxLWx0LEcscSxHLWF0KSx5LmxpbmVUbyhxLFMrYXQpLHkucXVhZHJhdGljQ3VydmVUbyhxLWx0LFMscS1ldCxTKSx5LmxpbmVUbygkK2V0LFMpLHkucXVhZHJhdGljQ3VydmVUbygkK2x0LFMsJCxTK2F0KSx5LmNsb3NlUGF0aCgpfTtmb3IodmFyIFR0dD1NYXRoLnNpbigwKSxDdHQ9TWF0aC5jb3MoMCksUUI9e30sWkI9e30sX3R0PU1hdGguUEkvNDAsVms9MCpNYXRoLlBJO1ZrPDIqTWF0aC5QSTtWays9X3R0KVFCW1ZrXT1NYXRoLnNpbihWayksWkJbVmtdPU1hdGguY29zKFZrKTtJMy5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxBKXtpZih5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5LmVsbGlwc2UpeS5lbGxpcHNlKGcseCxULzIsQS8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBELE8sJD1ULzIscT1BLzIsUz0wKk1hdGguUEk7UzwyKk1hdGguUEk7Uys9X3R0KUQ9Zy0kKlFCW1NdKlR0dCskKlpCW1NdKkN0dCxPPXgrcSpaQltTXSpUdHQrcSpRQltTXSpDdHQsUz09PTA/eS5tb3ZlVG8oRCxPKTp5LmxpbmVUbyhELE8pO3kuY2xvc2VQYXRoKCl9O3ZhciBFOT17fTtFOS5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oeSxnKXt2YXIgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4geC53aWR0aD15LHguaGVpZ2h0PWcsW3gseC5nZXRDb250ZXh0KCIyZCIpXX0sRTkuYnVmZmVyQ2FudmFzSW1hZ2U9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5jeSx4PWcubXV0YWJsZUVsZW1lbnRzKCksVD14LmJvdW5kaW5nQm94KCksQT10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxEPXkuZnVsbD9NYXRoLmNlaWwoVC53KTpBWzJdLE89eS5mdWxsP01hdGguY2VpbChULmgpOkFbM10sJD1YKHkubWF4V2lkdGgpfHxYKHkubWF4SGVpZ2h0KSxxPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLFM9MTtpZih5LnNjYWxlIT09dm9pZCAwKUQqPXkuc2NhbGUsTyo9eS5zY2FsZSxTPXkuc2NhbGU7ZWxzZSBpZigkKXt2YXIgRz0xLzAsVz0xLzA7WCh5Lm1heFdpZHRoKSYmKEc9Uyp5Lm1heFdpZHRoL0QpLFgoeS5tYXhIZWlnaHQpJiYoVz1TKnkubWF4SGVpZ2h0L08pLFM9TWF0aC5taW4oRyxXKSxEKj1TLE8qPVN9JHx8KEQqPXEsTyo9cSxTKj1xKTt2YXIgZXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZXQud2lkdGg9RCxldC5oZWlnaHQ9TyxldC5zdHlsZS53aWR0aD1EKyJweCIsZXQuc3R5bGUuaGVpZ2h0PU8rInB4Ijt2YXIgYXQ9ZXQuZ2V0Q29udGV4dCgiMmQiKTtpZihEPjAmJk8+MCl7YXQuY2xlYXJSZWN0KDAsMCxELE8pLGF0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBsdD10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYoeS5mdWxsKWF0LnRyYW5zbGF0ZSgtVC54MSpTLC1ULnkxKlMpLGF0LnNjYWxlKFMsUyksdGhpcy5kcmF3RWxlbWVudHMoYXQsbHQpLGF0LnNjYWxlKDEvUywxL1MpLGF0LnRyYW5zbGF0ZShULngxKlMsVC55MSpTKTtlbHNle3ZhciBmdD1nLnBhbigpLEF0PXt4OmZ0LngqUyx5OmZ0LnkqU307Uyo9Zy56b29tKCksYXQudHJhbnNsYXRlKEF0LngsQXQueSksYXQuc2NhbGUoUyxTKSx0aGlzLmRyYXdFbGVtZW50cyhhdCxsdCksYXQuc2NhbGUoMS9TLDEvUyksYXQudHJhbnNsYXRlKC1BdC54LC1BdC55KX15LmJnJiYoYXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIixhdC5maWxsU3R5bGU9eS5iZyxhdC5yZWN0KDAsMCxELE8pLGF0LmZpbGwoKSl9cmV0dXJuIGV0fTtmdW5jdGlvbiBncHQoeSxnKXtmb3IodmFyIHg9YXRvYih5KSxUPW5ldyBBcnJheUJ1ZmZlcih4Lmxlbmd0aCksQT1uZXcgVWludDhBcnJheShUKSxEPTA7RDx4Lmxlbmd0aDtEKyspQVtEXT14LmNoYXJDb2RlQXQoRCk7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpnfSl9ZnVuY3Rpb24gU3R0KHkpe3ZhciBnPXkuaW5kZXhPZigiLCIpO3JldHVybiB5LnN1YnN0cihnKzEpfWZ1bmN0aW9uIEF0dCh5LGcseCl7dmFyIFQ9ZnVuY3Rpb24oKXtyZXR1cm4gZy50b0RhdGFVUkwoeCx5LnF1YWxpdHkpfTtzd2l0Y2goeS5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IEs1KGZ1bmN0aW9uKEEsRCl7dHJ5e2cudG9CbG9iKGZ1bmN0aW9uKE8pe08hPW51bGw/QShPKTpEKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSx4LHkucXVhbGl0eSl9Y2F0Y2goTyl7RChPKX19KTtjYXNlImJsb2IiOnJldHVybiBncHQoU3R0KFQoKSkseCk7Y2FzZSJiYXNlNjQiOnJldHVybiBTdHQoVCgpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gVCgpfX1FOS5wbmc9ZnVuY3Rpb24oeSl7cmV0dXJuIEF0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL3BuZyIpfSxFOS5qcGc9ZnVuY3Rpb24oeSl7cmV0dXJuIEF0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL2pwZWciKX07dmFyIEx0dD17fTtMdHQubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih5LGcseCxULEEsRCxPKXtzd2l0Y2goeSl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgoZyx4LFQsQSxEKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChnLHgsVCxBLEQsTyk7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChnLHgsVCxBLEQsTyk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZyx4LFQsQSxEKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChnLHgsVCxBLEQpO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChnLHgsVCxBLEQpO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChnLHgsVCxBLEQpfX07dmFyIHBwdD1KQix3Yz1KQi5wcm90b3R5cGU7d2MuQ0FOVkFTX0xBWUVSUz0zLHdjLlNFTEVDVF9CT1g9MCx3Yy5EUkFHPTEsd2MuTk9ERT0yLHdjLkJVRkZFUl9DT1VOVD0zLHdjLlRFWFRVUkVfQlVGRkVSPTAsd2MuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xLHdjLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtmdW5jdGlvbiBKQih5KXt2YXIgZz10aGlzO2cuZGF0YT17Y2FudmFzZXM6bmV3IEFycmF5KHdjLkNBTlZBU19MQVlFUlMpLGNvbnRleHRzOm5ldyBBcnJheSh3Yy5DQU5WQVNfTEFZRVJTKSxjYW52YXNOZWVkc1JlZHJhdzpuZXcgQXJyYXkod2MuQ0FOVkFTX0xBWUVSUyksYnVmZmVyQ2FudmFzZXM6bmV3IEFycmF5KHdjLkJVRkZFUl9DT1VOVCksYnVmZmVyQ29udGV4dHM6bmV3IEFycmF5KHdjLkNBTlZBU19MQVlFUlMpfTt2YXIgeD0iLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIixUPSJyZ2JhKDAsMCwwLDApIjtnLmRhdGEuY2FudmFzQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBBPWcuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7Zy5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVt4XT1ULEEucG9zaXRpb249InJlbGF0aXZlIixBLnpJbmRleD0iMCIsQS5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgRD15LmN5LmNvbnRhaW5lcigpO0QuYXBwZW5kQ2hpbGQoZy5kYXRhLmNhbnZhc0NvbnRhaW5lciksRC5zdHlsZVt4XT1UO3ZhciBPPXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07RnQoKSYmKE9bIi1tcy10b3VjaC1hY3Rpb24iXT0ibm9uZSIsT1sidG91Y2gtYWN0aW9uIl09Im5vbmUiKTtmb3IodmFyICQ9MDskPHdjLkNBTlZBU19MQVlFUlM7JCsrKXt2YXIgcT1nLmRhdGEuY2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zy5kYXRhLmNvbnRleHRzWyRdPXEuZ2V0Q29udGV4dCgiMmQiKSxPYmplY3Qua2V5cyhPKS5mb3JFYWNoKGZ1bmN0aW9uKHRyKXtxLnN0eWxlW3RyXT1PW3RyXX0pLHEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixxLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIiskKSxxLnN0eWxlLnpJbmRleD1TdHJpbmcod2MuQ0FOVkFTX0xBWUVSUy0kKSxnLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKHEpLGcuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1skXT0hMX1nLmRhdGEudG9wQ2FudmFzPWcuZGF0YS5jYW52YXNlc1swXSxnLmRhdGEuY2FudmFzZXNbd2MuTk9ERV0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK3djLk5PREUrIi1ub2RlIiksZy5kYXRhLmNhbnZhc2VzW3djLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit3Yy5TRUxFQ1RfQk9YKyItc2VsZWN0Ym94IiksZy5kYXRhLmNhbnZhc2VzW3djLkRSQUddLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit3Yy5EUkFHKyItZHJhZyIpO2Zvcih2YXIgJD0wOyQ8d2MuQlVGRkVSX0NPVU5UOyQrKylnLmRhdGEuYnVmZmVyQ2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZy5kYXRhLmJ1ZmZlckNvbnRleHRzWyRdPWcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5nZXRDb250ZXh0KCIyZCIpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJidWZmZXIiKyQpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS56SW5kZXg9U3RyaW5nKC0kLTEpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2cucGF0aHNFbmFibGVkPSEwO3ZhciBTPVJkKCksRz1mdW5jdGlvbih3bil7cmV0dXJue3g6KHduLngxK3duLngyKS8yLHk6KHduLnkxK3duLnkyKS8yfX0sVz1mdW5jdGlvbih3bil7cmV0dXJue3g6LXduLncvMix5Oi13bi5oLzJ9fSxldD1mdW5jdGlvbih3bil7dmFyIGdyPXduWzBdLl9wcml2YXRlLGZyPWdyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9PT1nci5iYWNrZ3JvdW5kVGltZXN0YW1wO3JldHVybiFmcn0sYXQ9ZnVuY3Rpb24od24pe3JldHVybiB3blswXS5fcHJpdmF0ZS5ub2RlS2V5fSxsdD1mdW5jdGlvbih3bil7cmV0dXJuIHduWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXl9LGZ0PWZ1bmN0aW9uKHduKXtyZXR1cm4gd25bMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sQXQ9ZnVuY3Rpb24od24pe3JldHVybiB3blswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSxrdD1mdW5jdGlvbih3bixncixmcixKcix3aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnQod24sZ3IsZnIsITEsITEsd2kpfSxNdD1mdW5jdGlvbih3bixncixmcixKcix3aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHduLGdyLGZyLEpyLCJtYWluIix3aSl9LER0PWZ1bmN0aW9uKHduLGdyLGZyLEpyLHdpKXtyZXR1cm4gZy5kcmF3RWxlbWVudFRleHQod24sZ3IsZnIsSnIsInNvdXJjZSIsd2kpfSxqdD1mdW5jdGlvbih3bixncixmcixKcix3aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHduLGdyLGZyLEpyLCJ0YXJnZXQiLHdpKX0sWnQ9ZnVuY3Rpb24od24pe3JldHVybiB3bi5ib3VuZGluZ0JveCgpLHduWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LEt0PWZ1bmN0aW9uKHduKXtyZXR1cm4gd24uYm91bmRpbmdCb3goKSx3blswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxTfSx6dD1mdW5jdGlvbih3bil7cmV0dXJuIHduLmJvdW5kaW5nQm94KCksd25bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMuc291cmNlfHxTfSxlZT1mdW5jdGlvbih3bil7cmV0dXJuIHduLmJvdW5kaW5nQm94KCksd25bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0fHxTfSxWdD1mdW5jdGlvbih3bixncil7cmV0dXJuIGdyfSxmZT1mdW5jdGlvbih3bil7cmV0dXJuIEcoWnQod24pKX0sZ2U9ZnVuY3Rpb24od24sZ3IsZnIpe3ZhciBKcj13bj93bisiLSI6IiI7cmV0dXJue3g6Z3IueCtmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6Z3IueStmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlfX0sbmU9ZnVuY3Rpb24od24sZ3IsZnIpe3ZhciBKcj13blswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDpKcltncl0seTpKcltmcl19fSxQZT1mdW5jdGlvbih3bil7cmV0dXJuIGdlKCIiLG5lKHduLCJsYWJlbFgiLCJsYWJlbFkiKSx3bil9LHBlPWZ1bmN0aW9uKHduKXtyZXR1cm4gZ2UoInNvdXJjZSIsbmUod24sInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLHduKX0sYm49ZnVuY3Rpb24od24pe3JldHVybiBnZSgidGFyZ2V0IixuZSh3biwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksd24pfSx6ZT1mdW5jdGlvbih3bil7cmV0dXJuIFcoWnQod24pKX0sVmU9ZnVuY3Rpb24od24pe3JldHVybiBXKHp0KHduKSl9LEVuPWZ1bmN0aW9uKHduKXtyZXR1cm4gVyhlZSh3bikpfSxEbj1mdW5jdGlvbih3bil7dmFyIGdyPUt0KHduKSxmcj1XKEt0KHduKSk7aWYod24uaXNOb2RlKCkpe3N3aXRjaCh3bi5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUpe2Nhc2UibGVmdCI6ZnIueD0tZ3IudzticmVhaztjYXNlInJpZ2h0Ijpmci54PTA7YnJlYWt9c3dpdGNoKHduLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZSl7Y2FzZSJ0b3AiOmZyLnk9LWdyLmg7YnJlYWs7Y2FzZSJib3R0b20iOmZyLnk9MDticmVha319cmV0dXJuIGZyfSxLbj1nLmRhdGEuZWxlVHhyQ2FjaGU9bmV3IHprKGcse2dldEtleTphdCxkb2VzRWxlSW52YWxpZGF0ZUtleTpldCxkcmF3RWxlbWVudDprdCxnZXRCb3VuZGluZ0JveDpadCxnZXRSb3RhdGlvblBvaW50OmZlLGdldFJvdGF0aW9uT2Zmc2V0OnplLGFsbG93RWRnZVR4ckNhY2hpbmc6ITEsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiExfSksU249Zy5kYXRhLmxibFR4ckNhY2hlPW5ldyB6ayhnLHtnZXRLZXk6bHQsZHJhd0VsZW1lbnQ6TXQsZ2V0Qm91bmRpbmdCb3g6S3QsZ2V0Um90YXRpb25Qb2ludDpQZSxnZXRSb3RhdGlvbk9mZnNldDpEbixpc1Zpc2libGU6VnR9KSxXbj1nLmRhdGEuc2xiVHhyQ2FjaGU9bmV3IHprKGcse2dldEtleTpmdCxkcmF3RWxlbWVudDpEdCxnZXRCb3VuZGluZ0JveDp6dCxnZXRSb3RhdGlvblBvaW50OnBlLGdldFJvdGF0aW9uT2Zmc2V0OlZlLGlzVmlzaWJsZTpWdH0pLHJyPWcuZGF0YS50bGJUeHJDYWNoZT1uZXcgemsoZyx7Z2V0S2V5OkF0LGRyYXdFbGVtZW50Omp0LGdldEJvdW5kaW5nQm94OmVlLGdldFJvdGF0aW9uUG9pbnQ6Ym4sZ2V0Um90YXRpb25PZmZzZXQ6RW4saXNWaXNpYmxlOlZ0fSksdnI9Zy5kYXRhLmx5clR4ckNhY2hlPW5ldyB3dHQoZyk7Zy5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uKHduLGdyKXtLbi5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLFNuLmludmFsaWRhdGVFbGVtZW50cyhnciksV24uaW52YWxpZGF0ZUVsZW1lbnRzKGdyKSxyci5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLHZyLmludmFsaWRhdGVFbGVtZW50cyhncik7Zm9yKHZhciBmcj0wO2ZyPGdyLmxlbmd0aDtmcisrKXt2YXIgSnI9Z3JbZnJdLl9wcml2YXRlO0pyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9SnIuYmFja2dyb3VuZFRpbWVzdGFtcH19KTt2YXIgdXI9ZnVuY3Rpb24od24pe2Zvcih2YXIgZ3I9MDtncjx3bi5sZW5ndGg7Z3IrKyl2ci5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQod25bZ3JdLmVsZSl9O0tuLm9uRGVxdWV1ZSh1ciksU24ub25EZXF1ZXVlKHVyKSxXbi5vbkRlcXVldWUodXIpLHJyLm9uRGVxdWV1ZSh1cil9d2MucmVkcmF3SGludD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXM7c3dpdGNoKHkpe2Nhc2UiZWxlcyI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3djLk5PREVdPWc7YnJlYWs7Y2FzZSJkcmFnIjp4LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbd2MuRFJBR109ZzticmVhaztjYXNlInNlbGVjdCI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3djLlNFTEVDVF9CT1hdPWc7YnJlYWt9fTt2YXIgTXR0PXR5cGVvZiBQYXRoMkQ8InUiO3djLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeSl7aWYoeT09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF5fSx3Yy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiBNdHQmJnRoaXMucGF0aHNFbmFibGVkfSx3Yy5zZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeSxnKXt5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZD1nOih5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZD1nLHkubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPWcseS5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZD1nKX0sd2MuZ2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHkpe3JldHVybiB5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZDp5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZHx8eS5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWR8fHkubXNJbWFnZVNtb290aGluZ0VuYWJsZWR9LHdjLm1ha2VPZmZzY3JlZW5DYW52YXM9ZnVuY3Rpb24oeSxnKXt2YXIgeDtyZXR1cm4odHlwZW9mIE9mZnNjcmVlbkNhbnZhcz4idSI/InVuZGVmaW5lZCI6ZihPZmZzY3JlZW5DYW52YXMpKSE9PSJ1bmRlZmluZWQiP3g9bmV3IE9mZnNjcmVlbkNhbnZhcyh5LGcpOih4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHgud2lkdGg9eSx4LmhlaWdodD1nKSx4fSxbXzAsZ3YscHYsazksaHgsR2ssdmcsSTMsRTksTHR0XS5mb3JFYWNoKGZ1bmN0aW9uKHkpe21lKHdjLHkpfSk7dmFyIGZ4PVt7bmFtZToibnVsbCIsaW1wbDpGQn0se25hbWU6ImJhc2UiLGltcGw6UUx9LHtuYW1lOiJjYW52YXMiLGltcGw6cHB0fV0sd2c9W3t0eXBlOiJsYXlvdXQiLGV4dGVuc2lvbnM6Skp9LHt0eXBlOiJyZW5kZXJlciIsZXh0ZW5zaW9uczpmeH1dLFRtPXt9LHJNPXt9O2Z1bmN0aW9uIGIxKHksZyx4KXt2YXIgVD14LEE9ZnVuY3Rpb24oZWUpe1NjKCJDYW4gbm90IHJlZ2lzdGVyIGAiK2crImAgZm9yIGAiK3krImAgc2luY2UgYCIrZWUrImAgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHByb3RvdHlwZSBhbmQgY2FuIG5vdCBiZSBvdmVycmlkZGVuIil9O2lmKHk9PT0iY29yZSIpe2lmKEZrLnByb3RvdHlwZVtnXSlyZXR1cm4gQShnKTtGay5wcm90b3R5cGVbZ109eH1lbHNlIGlmKHk9PT0iY29sbGVjdGlvbiIpe2lmKGpmLnByb3RvdHlwZVtnXSlyZXR1cm4gQShnKTtqZi5wcm90b3R5cGVbZ109eH1lbHNlIGlmKHk9PT0ibGF5b3V0Iil7Zm9yKHZhciBEPWZ1bmN0aW9uKGVlKXt0aGlzLm9wdGlvbnM9ZWUseC5jYWxsKHRoaXMsZWUpLGh0KHRoaXMuX3ByaXZhdGUpfHwodGhpcy5fcHJpdmF0ZT17fSksdGhpcy5fcHJpdmF0ZS5jeT1lZS5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sTz1ELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHgucHJvdG90eXBlKSwkPVtdLHE9MDtxPCQubGVuZ3RoO3ErKyl7dmFyIFM9JFtxXTtPW1NdPU9bU118fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fU8uc3RhcnQmJiFPLnJ1bj9PLnJ1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0KCksdGhpc306IU8uc3RhcnQmJk8ucnVuJiYoTy5zdGFydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJ1bigpLHRoaXN9KTt2YXIgRz14LnByb3RvdHlwZS5zdG9wO08uc3RvcD1mdW5jdGlvbigpe3ZhciB6dD10aGlzLm9wdGlvbnM7aWYoenQmJnp0LmFuaW1hdGUpe3ZhciBlZT10aGlzLmFuaW1hdGlvbnM7aWYoZWUpZm9yKHZhciBWdD0wO1Z0PGVlLmxlbmd0aDtWdCsrKWVlW1Z0XS5zdG9wKCl9cmV0dXJuIEc/Ry5jYWxsKHRoaXMpOnRoaXMuZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9LE8uZGVzdHJveXx8KE8uZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksTy5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fTt2YXIgVz1mdW5jdGlvbihlZSl7cmV0dXJuIGVlLl9wcml2YXRlLmN5fSxldD17YWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZWUsVnQpe1Z0LmxheW91dD1lZSxWdC5jeT1XKGVlKSxWdC50YXJnZXQ9ZWV9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZWUpe3JldHVybiBXKGVlKX19O21lKE8se2NyZWF0ZUVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyPW5ldyBKVChldCx0aGlzKSx0aGlzfSxlbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sb246ZnVuY3Rpb24oZWUsVnQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihlZSxWdCksdGhpc30sb25lOmZ1bmN0aW9uKGVlLFZ0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGVlLFZ0KSx0aGlzfSxvbmNlOmZ1bmN0aW9uKGVlLFZ0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGVlLFZ0KSx0aGlzfSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlZSxWdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKGVlLFZ0KSx0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sZW1pdDpmdW5jdGlvbihlZSxWdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLmVtaXQoZWUsVnQpLHRoaXN9fSksQWMuZXZlbnRBbGlhc2VzT24oTyksVD1EfWVsc2UgaWYoeT09PSJyZW5kZXJlciImJmchPT0ibnVsbCImJmchPT0iYmFzZSIpe3ZhciBhdD1keCgicmVuZGVyZXIiLCJiYXNlIiksbHQ9YXQucHJvdG90eXBlLGZ0PXgsQXQ9eC5wcm90b3R5cGUsa3Q9ZnVuY3Rpb24oKXthdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxNdD1rdC5wcm90b3R5cGU7Zm9yKHZhciBEdCBpbiBsdCl7dmFyIGp0PWx0W0R0XSxadD1BdFtEdF0hPW51bGw7aWYoWnQpcmV0dXJuIEEoRHQpO010W0R0XT1qdH1mb3IodmFyIEt0IGluIEF0KU10W0t0XT1BdFtLdF07bHQuY2xpZW50RnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oenQpe010W3p0XT1NdFt6dF18fGZ1bmN0aW9uKCl7YmwoIlJlbmRlcmVyIGRvZXMgbm90IGltcGxlbWVudCBgcmVuZGVyZXIuIit6dCsiKClgIG9uIGl0cyBwcm90b3R5cGUiKX19KSxUPWt0fWVsc2UgaWYoeT09PSJfX3Byb3RvX18ifHx5PT09ImNvbnN0cnVjdG9yInx8eT09PSJwcm90b3R5cGUiKXJldHVybiBibCh5KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gRHIoe21hcDpUbSxrZXlzOlt5LGddLHZhbHVlOlR9KX1mdW5jdGlvbiBkeCh5LGcpe3JldHVybiBucih7bWFwOlRtLGtleXM6W3ksZ119KX1mdW5jdGlvbiBJdHQoeSxnLHgsVCxBKXtyZXR1cm4gRHIoe21hcDpyTSxrZXlzOlt5LGcseCxUXSx2YWx1ZTpBfSl9ZnVuY3Rpb24gdFIoeSxnLHgsVCl7cmV0dXJuIG5yKHttYXA6ck0sa2V5czpbeSxnLHgsVF19KX12YXIgRDM9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MilyZXR1cm4gZHguYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBiMS5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTQpcmV0dXJuIHRSLmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09NSlyZXR1cm4gSXR0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtibCgiSW52YWxpZCBleHRlbnNpb24gYWNjZXNzIHN5bnRheCIpfTtGay5wcm90b3R5cGUuZXh0ZW5zaW9uPUQzLHdnLmZvckVhY2goZnVuY3Rpb24oeSl7eS5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24oZyl7YjEoeS50eXBlLGcubmFtZSxnLmltcGwpfSl9KTt2YXIgaU09ZnVuY3Rpb24geSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeTt0aGlzLmxlbmd0aD0wfSxDbT1pTS5wcm90b3R5cGU7Q20uaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGVzaGVldCJ9LENtLnNlbGVjdG9yPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbZ109e3NlbGVjdG9yOnkscHJvcGVydGllczpbXX0sdGhpc30sQ20uY3NzPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5sZW5ndGgtMTtpZihtdCh5KSl0aGlzW3hdLnByb3BlcnRpZXMucHVzaCh7bmFtZTp5LHZhbHVlOmd9KTtlbHNlIGlmKGh0KHkpKWZvcih2YXIgVD15LEE9T2JqZWN0LmtleXMoVCksRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgTz1BW0RdLCQ9VFtPXTtpZigkIT1udWxsKXt2YXIgcT1kMS5wcm9wZXJ0aWVzW09dfHxkMS5wcm9wZXJ0aWVzW01lKE8pXTtpZihxIT1udWxsKXt2YXIgUz1xLm5hbWUsRz0kO3RoaXNbeF0ucHJvcGVydGllcy5wdXNoKHtuYW1lOlMsdmFsdWU6R30pfX19cmV0dXJuIHRoaXN9LENtLnN0eWxlPUNtLmNzcyxDbS5nZW5lcmF0ZVN0eWxlPWZ1bmN0aW9uKHkpe3ZhciBnPW5ldyBkMSh5KTtyZXR1cm4gdGhpcy5hcHBlbmRUb1N0eWxlKGcpfSxDbS5hcHBlbmRUb1N0eWxlPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeD10aGlzW2ddLFQ9eC5zZWxlY3RvcixBPXgucHJvcGVydGllczt5LnNlbGVjdG9yKFQpO2Zvcih2YXIgRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgTz1BW0RdO3kuY3NzKE8ubmFtZSxPLnZhbHVlKX19cmV0dXJuIHl9O3ZhciBlUj0iMy4yMy4wIix2MT1mdW5jdGlvbihnKXtpZihnPT09dm9pZCAwJiYoZz17fSksaHQoZykpcmV0dXJuIG5ldyBGayhnKTtpZihtdChnKSlyZXR1cm4gRDMuYXBwbHkoRDMsYXJndW1lbnRzKX07cmV0dXJuIHYxLnVzZT1mdW5jdGlvbih5KXt2YXIgZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGcudW5zaGlmdCh2MSkseS5hcHBseShudWxsLGcpLHRoaXN9LHYxLndhcm5pbmdzPWZ1bmN0aW9uKHkpe3JldHVybiBXUCh5KX0sdjEudmVyc2lvbj1lUix2MS5zdHlsZXNoZWV0PXYxLlN0eWxlc2hlZXQ9aU0sdjF9KX0pKEtqdCk7dmFyIG9XZT1LanQuZXhwb3J0cztjb25zdCBZanQ9Qjcob1dlKTt2YXIgWGp0PXtleHBvcnRzOnt9fSxWZ3Q9e2V4cG9ydHM6e319LFVndD17ZXhwb3J0czp7fX0sUWp0O2Z1bmN0aW9uIGNXZSgpe3JldHVybiBRanR8fChRanQ9MSxmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihwLHYpe2kuZXhwb3J0cz12KCl9KShkMCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihmKXt2YXIgcD17fTtmdW5jdGlvbiB2KG0pe2lmKHBbbV0pcmV0dXJuIHBbbV0uZXhwb3J0czt2YXIgYj1wW21dPXtpOm0sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZlttXS5jYWxsKGIuZXhwb3J0cyxiLGIuZXhwb3J0cyx2KSxiLmw9ITAsYi5leHBvcnRzfXJldHVybiB2Lm09Zix2LmM9cCx2Lmk9ZnVuY3Rpb24obSl7cmV0dXJuIG19LHYuZD1mdW5jdGlvbihtLGIsRSl7di5vKG0sYil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLGIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpFfSl9LHYubj1mdW5jdGlvbihtKXt2YXIgYj1tJiZtLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gbS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBtfTtyZXR1cm4gdi5kKGIsImEiLGIpLGJ9LHYubz1mdW5jdGlvbihtLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxiKX0sdi5wPSIiLHYodi5zPTI2KX0oW2Z1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKCl7fW0uUVVBTElUWT0xLG0uREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEPSExLG0uREVGQVVMVF9JTkNSRU1FTlRBTD0hMSxtLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVD0hMCxtLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ9ITEsbS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q9NTAsbS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPSExLG0uREVGQVVMVF9HUkFQSF9NQVJHSU49MTUsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9ITEsbS5TSU1QTEVfTk9ERV9TSVpFPTQwLG0uU0lNUExFX05PREVfSEFMRl9TSVpFPW0uU0lNUExFX05PREVfU0laRS8yLG0uRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFPTQwLG0uTUlOX0VER0VfTEVOR1RIPTEsbS5XT1JMRF9CT1VOREFSWT0xZTYsbS5JTklUSUFMX1dPUkxEX0JPVU5EQVJZPW0uV09STERfQk9VTkRBUlkvMWUzLG0uV09STERfQ0VOVEVSX1g9MTIwMCxtLldPUkxEX0NFTlRFUl9ZPTkwMCxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMiksYj12KDgpLEU9dig5KTtmdW5jdGlvbiBfKE4sQixqKXttLmNhbGwodGhpcyxqKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD0hMSx0aGlzLnZHcmFwaE9iamVjdD1qLHRoaXMuYmVuZHBvaW50cz1bXSx0aGlzLnNvdXJjZT1OLHRoaXMudGFyZ2V0PUJ9Xy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBMIGluIG0pX1tMXT1tW0xdO18ucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZX0sXy5wcm90b3R5cGUuZ2V0VGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0fSxfLnByb3RvdHlwZS5pc0ludGVyR3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludGVyR3JhcGh9LF8ucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sXy5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fSxfLnByb3RvdHlwZS5nZXRCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmVuZHBvaW50c30sXy5wcm90b3R5cGUuZ2V0TGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGNhfSxfLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZUluTGNhfSxfLnByb3RvdHlwZS5nZXRUYXJnZXRJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldEluTGNhfSxfLnByb3RvdHlwZS5nZXRPdGhlckVuZD1mdW5jdGlvbihOKXtpZih0aGlzLnNvdXJjZT09PU4pcmV0dXJuIHRoaXMudGFyZ2V0O2lmKHRoaXMudGFyZ2V0PT09TilyZXR1cm4gdGhpcy5zb3VyY2U7dGhyb3ciTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2UifSxfLnByb3RvdHlwZS5nZXRPdGhlckVuZEluR3JhcGg9ZnVuY3Rpb24oTixCKXtmb3IodmFyIGo9dGhpcy5nZXRPdGhlckVuZChOKSxSPUIuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpOzspe2lmKGouZ2V0T3duZXIoKT09QilyZXR1cm4gajtpZihqLmdldE93bmVyKCk9PVIpYnJlYWs7aj1qLmdldE93bmVyKCkuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9LF8ucHJvdG90eXBlLnVwZGF0ZUxlbmd0aD1mdW5jdGlvbigpe3ZhciBOPW5ldyBBcnJheSg0KTt0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1iLmdldEludGVyc2VjdGlvbih0aGlzLnRhcmdldC5nZXRSZWN0KCksdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLE4pLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fHwodGhpcy5sZW5ndGhYPU5bMF0tTlsyXSx0aGlzLmxlbmd0aFk9TlsxXS1OWzNdLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1FLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPUUuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKSl9LF8ucHJvdG90eXBlLnVwZGF0ZUxlbmd0aFNpbXBsZT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoWD10aGlzLnRhcmdldC5nZXRDZW50ZXJYKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWCgpLHRoaXMubGVuZ3RoWT10aGlzLnRhcmdldC5nZXRDZW50ZXJZKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWSgpLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1FLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPUUuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKX0sZi5leHBvcnRzPV99LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKGIpe3RoaXMudkdyYXBoT2JqZWN0PWJ9Zi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDIpLGI9digxMCksRT12KDEzKSxfPXYoMCksTD12KDE2KSxOPXYoNCk7ZnVuY3Rpb24gQihSLHosSyxpdCl7Sz09bnVsbCYmaXQ9PW51bGwmJihpdD16KSxtLmNhbGwodGhpcyxpdCksUi5ncmFwaE1hbmFnZXIhPW51bGwmJihSPVIuZ3JhcGhNYW5hZ2VyKSx0aGlzLmVzdGltYXRlZFNpemU9Yi5NSU5fVkFMVUUsdGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9Yi5NQVhfVkFMVUUsdGhpcy52R3JhcGhPYmplY3Q9aXQsdGhpcy5lZGdlcz1bXSx0aGlzLmdyYXBoTWFuYWdlcj1SLEshPW51bGwmJnohPW51bGw/dGhpcy5yZWN0PW5ldyBFKHoueCx6LnksSy53aWR0aCxLLmhlaWdodCk6dGhpcy5yZWN0PW5ldyBFfUIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgaiBpbiBtKUJbal09bVtqXTtCLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxCLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkfSxCLnByb3RvdHlwZS5nZXRPd25lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyfSxCLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3Qud2lkdGh9LEIucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKFIpe3RoaXMucmVjdC53aWR0aD1SfSxCLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LmhlaWdodH0sQi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKFIpe3RoaXMucmVjdC5oZWlnaHQ9Un0sQi5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMn0sQi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzJ9LEIucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgTih0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzIpfSxCLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgTih0aGlzLnJlY3QueCx0aGlzLnJlY3QueSl9LEIucHJvdG90eXBlLmdldFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0fSxCLnByb3RvdHlwZS5nZXREaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQpfSxCLnByb3RvdHlwZS5nZXRIYWxmVGhlRGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCt0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoKS8yfSxCLnByb3RvdHlwZS5zZXRSZWN0PWZ1bmN0aW9uKFIseil7dGhpcy5yZWN0Lng9Ui54LHRoaXMucmVjdC55PVIueSx0aGlzLnJlY3Qud2lkdGg9ei53aWR0aCx0aGlzLnJlY3QuaGVpZ2h0PXouaGVpZ2h0fSxCLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24oUix6KXt0aGlzLnJlY3QueD1SLXRoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55PXotdGhpcy5yZWN0LmhlaWdodC8yfSxCLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihSLHope3RoaXMucmVjdC54PVIsdGhpcy5yZWN0Lnk9en0sQi5wcm90b3R5cGUubW92ZUJ5PWZ1bmN0aW9uKFIseil7dGhpcy5yZWN0LngrPVIsdGhpcy5yZWN0LnkrPXp9LEIucHJvdG90eXBlLmdldEVkZ2VMaXN0VG9Ob2RlPWZ1bmN0aW9uKFIpe3ZhciB6PVtdLEs9dGhpcztyZXR1cm4gSy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtpZihpdC50YXJnZXQ9PVIpe2lmKGl0LnNvdXJjZSE9Syl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhIjt6LnB1c2goaXQpfX0pLHp9LEIucHJvdG90eXBlLmdldEVkZ2VzQmV0d2Vlbj1mdW5jdGlvbihSKXt2YXIgej1bXSxLPXRoaXM7cmV0dXJuIEsuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihpdCl7aWYoIShpdC5zb3VyY2U9PUt8fGl0LnRhcmdldD09SykpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQiOyhpdC50YXJnZXQ9PVJ8fGl0LnNvdXJjZT09UikmJnoucHVzaChpdCl9KSx6fSxCLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0PWZ1bmN0aW9uKCl7dmFyIFI9bmV3IFNldCx6PXRoaXM7cmV0dXJuIHouZWRnZXMuZm9yRWFjaChmdW5jdGlvbihLKXtpZihLLnNvdXJjZT09eilSLmFkZChLLnRhcmdldCk7ZWxzZXtpZihLLnRhcmdldCE9eil0aHJvdyJJbmNvcnJlY3QgaW5jaWRlbmN5ISI7Ui5hZGQoSy5zb3VyY2UpfX0pLFJ9LEIucHJvdG90eXBlLndpdGhDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBSPW5ldyBTZXQseixLO2lmKFIuYWRkKHRoaXMpLHRoaXMuY2hpbGQhPW51bGwpZm9yKHZhciBpdD10aGlzLmNoaWxkLmdldE5vZGVzKCksc3Q9MDtzdDxpdC5sZW5ndGg7c3QrKyl6PWl0W3N0XSxLPXoud2l0aENoaWxkcmVuKCksSy5mb3JFYWNoKGZ1bmN0aW9uKHV0KXtSLmFkZCh1dCl9KTtyZXR1cm4gUn0sQi5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIFI9MCx6O2lmKHRoaXMuY2hpbGQ9PW51bGwpUj0xO2Vsc2UgZm9yKHZhciBLPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxpdD0wO2l0PEsubGVuZ3RoO2l0Kyspej1LW2l0XSxSKz16LmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBSPT0wJiYoUj0xKSxSfSxCLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxCLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxCLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIFIseixLPS1fLklOSVRJQUxfV09STERfQk9VTkRBUlksaXQ9Xy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1I9Xy5XT1JMRF9DRU5URVJfWCtMLm5leHREb3VibGUoKSooaXQtSykrSzt2YXIgc3Q9LV8uSU5JVElBTF9XT1JMRF9CT1VOREFSWSx1dD1fLklOSVRJQUxfV09STERfQk9VTkRBUlk7ej1fLldPUkxEX0NFTlRFUl9ZK0wubmV4dERvdWJsZSgpKih1dC1zdCkrc3QsdGhpcy5yZWN0Lng9Uix0aGlzLnJlY3QueT16fSxCLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmdldENoaWxkKCk9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYodGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkubGVuZ3RoIT0wKXt2YXIgUj10aGlzLmdldENoaWxkKCk7aWYoUi51cGRhdGVCb3VuZHMoITApLHRoaXMucmVjdC54PVIuZ2V0TGVmdCgpLHRoaXMucmVjdC55PVIuZ2V0VG9wKCksdGhpcy5zZXRXaWR0aChSLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCkpLHRoaXMuc2V0SGVpZ2h0KFIuZ2V0Qm90dG9tKCktUi5nZXRUb3AoKSksXy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciB6PVIuZ2V0UmlnaHQoKS1SLmdldExlZnQoKSxLPVIuZ2V0Qm90dG9tKCktUi5nZXRUb3AoKTt0aGlzLmxhYmVsV2lkdGg+eiYmKHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLXopLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKSx0aGlzLmxhYmVsSGVpZ2h0PksmJih0aGlzLmxhYmVsUG9zPT0iY2VudGVyIj90aGlzLnJlY3QueS09KHRoaXMubGFiZWxIZWlnaHQtSykvMjp0aGlzLmxhYmVsUG9zPT0idG9wIiYmKHRoaXMucmVjdC55LT10aGlzLmxhYmVsSGVpZ2h0LUspLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKX19fSxCLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09Yi5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxCLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5yZWN0Lng7ej5fLldPUkxEX0JPVU5EQVJZP3o9Xy5XT1JMRF9CT1VOREFSWTp6PC1fLldPUkxEX0JPVU5EQVJZJiYoej0tXy5XT1JMRF9CT1VOREFSWSk7dmFyIEs9dGhpcy5yZWN0Lnk7Sz5fLldPUkxEX0JPVU5EQVJZP0s9Xy5XT1JMRF9CT1VOREFSWTpLPC1fLldPUkxEX0JPVU5EQVJZJiYoSz0tXy5XT1JMRF9CT1VOREFSWSk7dmFyIGl0PW5ldyBOKHosSyksc3Q9Ui5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoaXQpO3RoaXMuc2V0TG9jYXRpb24oc3QueCxzdC55KX0sQi5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueH0sQi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRofSxCLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnl9LEIucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0fSxCLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcj09bnVsbD9udWxsOnRoaXMub3duZXIuZ2V0UGFyZW50KCl9LGYuZXhwb3J0cz1CfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbShiLEUpe2I9PW51bGwmJkU9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKToodGhpcy54PWIsdGhpcy55PUUpfW0ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxtLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbS5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sbS5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihiKXt0aGlzLnk9Yn0sbS5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWIueCx0aGlzLnktYi55KX0sbS5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh0aGlzLngsdGhpcy55KX0sbS5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngrPWIud2lkdGgsdGhpcy55Kz1iLmhlaWdodCx0aGlzfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMiksYj12KDEwKSxFPXYoMCksXz12KDYpLEw9digzKSxOPXYoMSksQj12KDEzKSxqPXYoMTIpLFI9digxMSk7ZnVuY3Rpb24geihpdCxzdCx1dCl7bS5jYWxsKHRoaXMsdXQpLHRoaXMuZXN0aW1hdGVkU2l6ZT1iLk1JTl9WQUxVRSx0aGlzLm1hcmdpbj1FLkRFRkFVTFRfR1JBUEhfTUFSR0lOLHRoaXMuZWRnZXM9W10sdGhpcy5ub2Rlcz1bXSx0aGlzLmlzQ29ubmVjdGVkPSExLHRoaXMucGFyZW50PWl0LHN0IT1udWxsJiZzdCBpbnN0YW5jZW9mIF8/dGhpcy5ncmFwaE1hbmFnZXI9c3Q6c3QhPW51bGwmJnN0IGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9c3QuZ3JhcGhNYW5hZ2VyKX16LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIEsgaW4gbSl6W0tdPW1bS107ei5wcm90b3R5cGUuZ2V0Tm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc30sei5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30sei5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSx6LnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LHoucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0fSx6LnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0fSx6LnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3B9LHoucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdHRvbX0sei5wcm90b3R5cGUuaXNDb25uZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZH0sei5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGl0LHN0LHV0KXtpZihzdD09bnVsbCYmdXQ9PW51bGwpe3ZhciBidD1pdDtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoYnQpPi0xKXRocm93Ik5vZGUgYWxyZWFkeSBpbiBncmFwaCEiO3JldHVybiBidC5vd25lcj10aGlzLHRoaXMuZ2V0Tm9kZXMoKS5wdXNoKGJ0KSxidH1lbHNle3ZhciBtdD1pdDtpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHN0KT4tMSYmdGhpcy5nZXROb2RlcygpLmluZGV4T2YodXQpPi0xKSl0aHJvdyJTb3VyY2Ugb3IgdGFyZ2V0IG5vdCBpbiBncmFwaCEiO2lmKCEoc3Qub3duZXI9PXV0Lm93bmVyJiZzdC5vd25lcj09dGhpcykpdGhyb3ciQm90aCBvd25lcnMgbXVzdCBiZSB0aGlzIGdyYXBoISI7cmV0dXJuIHN0Lm93bmVyIT11dC5vd25lcj9udWxsOihtdC5zb3VyY2U9c3QsbXQudGFyZ2V0PXV0LG10LmlzSW50ZXJHcmFwaD0hMSx0aGlzLmdldEVkZ2VzKCkucHVzaChtdCksc3QuZWRnZXMucHVzaChtdCksdXQhPXN0JiZ1dC5lZGdlcy5wdXNoKG10KSxtdCl9fSx6LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oaXQpe3ZhciBzdD1pdDtpZihpdCBpbnN0YW5jZW9mIEwpe2lmKHN0PT1udWxsKXRocm93Ik5vZGUgaXMgbnVsbCEiO2lmKCEoc3Qub3duZXIhPW51bGwmJnN0Lm93bmVyPT10aGlzKSl0aHJvdyJPd25lciBncmFwaCBpcyBpbnZhbGlkISI7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkISI7Zm9yKHZhciB1dD1zdC5lZGdlcy5zbGljZSgpLGJ0LG10PXV0Lmxlbmd0aCx5dD0wO3l0PG10O3l0KyspYnQ9dXRbeXRdLGJ0LmlzSW50ZXJHcmFwaD90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoYnQpOmJ0LnNvdXJjZS5vd25lci5yZW1vdmUoYnQpO3ZhciBkdD10aGlzLm5vZGVzLmluZGV4T2Yoc3QpO2lmKGR0PT0tMSl0aHJvdyJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhIjt0aGlzLm5vZGVzLnNwbGljZShkdCwxKX1lbHNlIGlmKGl0IGluc3RhbmNlb2YgTil7dmFyIGJ0PWl0O2lmKGJ0PT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCEoYnQuc291cmNlIT1udWxsJiZidC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKGJ0LnNvdXJjZS5vd25lciE9bnVsbCYmYnQudGFyZ2V0Lm93bmVyIT1udWxsJiZidC5zb3VyY2Uub3duZXI9PXRoaXMmJmJ0LnRhcmdldC5vd25lcj09dGhpcykpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCEiO3ZhciBodD1idC5zb3VyY2UuZWRnZXMuaW5kZXhPZihidCksd3Q9YnQudGFyZ2V0LmVkZ2VzLmluZGV4T2YoYnQpO2lmKCEoaHQ+LTEmJnd0Pi0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7YnQuc291cmNlLmVkZ2VzLnNwbGljZShodCwxKSxidC50YXJnZXQhPWJ0LnNvdXJjZSYmYnQudGFyZ2V0LmVkZ2VzLnNwbGljZSh3dCwxKTt2YXIgZHQ9YnQuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZihidCk7aWYoZHQ9PS0xKXRocm93Ik5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCEiO2J0LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLnNwbGljZShkdCwxKX19LHoucHJvdG90eXBlLnVwZGF0ZUxlZnRUb3A9ZnVuY3Rpb24oKXtmb3IodmFyIGl0PWIuTUFYX1ZBTFVFLHN0PWIuTUFYX1ZBTFVFLHV0LGJ0LG10LHl0PXRoaXMuZ2V0Tm9kZXMoKSxkdD15dC5sZW5ndGgsaHQ9MDtodDxkdDtodCsrKXt2YXIgd3Q9eXRbaHRdO3V0PXd0LmdldFRvcCgpLGJ0PXd0LmdldExlZnQoKSxpdD51dCYmKGl0PXV0KSxzdD5idCYmKHN0PWJ0KX1yZXR1cm4gaXQ9PWIuTUFYX1ZBTFVFP251bGw6KHl0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP210PXl0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0Om10PXRoaXMubWFyZ2luLHRoaXMubGVmdD1zdC1tdCx0aGlzLnRvcD1pdC1tdCxuZXcgaih0aGlzLmxlZnQsdGhpcy50b3ApKX0sei5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKGl0KXtmb3IodmFyIHN0PWIuTUFYX1ZBTFVFLHV0PS1iLk1BWF9WQUxVRSxidD1iLk1BWF9WQUxVRSxtdD0tYi5NQVhfVkFMVUUseXQsZHQsaHQsd3QsWCxwdD10aGlzLm5vZGVzLFU9cHQubGVuZ3RoLHh0PTA7eHQ8VTt4dCsrKXt2YXIgbnQ9cHRbeHRdO2l0JiZudC5jaGlsZCE9bnVsbCYmbnQudXBkYXRlQm91bmRzKCkseXQ9bnQuZ2V0TGVmdCgpLGR0PW50LmdldFJpZ2h0KCksaHQ9bnQuZ2V0VG9wKCksd3Q9bnQuZ2V0Qm90dG9tKCksc3Q+eXQmJihzdD15dCksdXQ8ZHQmJih1dD1kdCksYnQ+aHQmJihidD1odCksbXQ8d3QmJihtdD13dCl9dmFyIE90PW5ldyBCKHN0LGJ0LHV0LXN0LG10LWJ0KTtzdD09Yi5NQVhfVkFMVUUmJih0aGlzLmxlZnQ9dGhpcy5wYXJlbnQuZ2V0TGVmdCgpLHRoaXMucmlnaHQ9dGhpcy5wYXJlbnQuZ2V0UmlnaHQoKSx0aGlzLnRvcD10aGlzLnBhcmVudC5nZXRUb3AoKSx0aGlzLmJvdHRvbT10aGlzLnBhcmVudC5nZXRCb3R0b20oKSkscHRbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/WD1wdFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpYPXRoaXMubWFyZ2luLHRoaXMubGVmdD1PdC54LVgsdGhpcy5yaWdodD1PdC54K090LndpZHRoK1gsdGhpcy50b3A9T3QueS1YLHRoaXMuYm90dG9tPU90LnkrT3QuaGVpZ2h0K1h9LHouY2FsY3VsYXRlQm91bmRzPWZ1bmN0aW9uKGl0KXtmb3IodmFyIHN0PWIuTUFYX1ZBTFVFLHV0PS1iLk1BWF9WQUxVRSxidD1iLk1BWF9WQUxVRSxtdD0tYi5NQVhfVkFMVUUseXQsZHQsaHQsd3QsWD1pdC5sZW5ndGgscHQ9MDtwdDxYO3B0Kyspe3ZhciBVPWl0W3B0XTt5dD1VLmdldExlZnQoKSxkdD1VLmdldFJpZ2h0KCksaHQ9VS5nZXRUb3AoKSx3dD1VLmdldEJvdHRvbSgpLHN0Pnl0JiYoc3Q9eXQpLHV0PGR0JiYodXQ9ZHQpLGJ0Pmh0JiYoYnQ9aHQpLG10PHd0JiYobXQ9d3QpfXZhciB4dD1uZXcgQihzdCxidCx1dC1zdCxtdC1idCk7cmV0dXJuIHh0fSx6LnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LHoucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWIuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LHoucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBpdD0wLHN0PXRoaXMubm9kZXMsdXQ9c3QubGVuZ3RoLGJ0PTA7YnQ8dXQ7YnQrKyl7dmFyIG10PXN0W2J0XTtpdCs9bXQuY2FsY0VzdGltYXRlZFNpemUoKX1yZXR1cm4gaXQ9PTA/dGhpcy5lc3RpbWF0ZWRTaXplPUUuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFOnRoaXMuZXN0aW1hdGVkU2l6ZT1pdC9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0sei5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIGl0PXRoaXM7aWYodGhpcy5ub2Rlcy5sZW5ndGg9PTApe3RoaXMuaXNDb25uZWN0ZWQ9ITA7cmV0dXJufXZhciBzdD1uZXcgUix1dD1uZXcgU2V0LGJ0PXRoaXMubm9kZXNbMF0sbXQseXQsZHQ9YnQud2l0aENoaWxkcmVuKCk7Zm9yKGR0LmZvckVhY2goZnVuY3Rpb24oeHQpe3N0LnB1c2goeHQpLHV0LmFkZCh4dCl9KTtzdC5sZW5ndGghPT0wOyl7YnQ9c3Quc2hpZnQoKSxtdD1idC5nZXRFZGdlcygpO2Zvcih2YXIgaHQ9bXQubGVuZ3RoLHd0PTA7d3Q8aHQ7d3QrKyl7dmFyIFg9bXRbd3RdO2lmKHl0PVguZ2V0T3RoZXJFbmRJbkdyYXBoKGJ0LHRoaXMpLHl0IT1udWxsJiYhdXQuaGFzKHl0KSl7dmFyIHB0PXl0LndpdGhDaGlsZHJlbigpO3B0LmZvckVhY2goZnVuY3Rpb24oeHQpe3N0LnB1c2goeHQpLHV0LmFkZCh4dCl9KX19fWlmKHRoaXMuaXNDb25uZWN0ZWQ9ITEsdXQuc2l6ZT49dGhpcy5ub2Rlcy5sZW5ndGgpe3ZhciBVPTA7dXQuZm9yRWFjaChmdW5jdGlvbih4dCl7eHQub3duZXI9PWl0JiZVKyt9KSxVPT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sZi5leHBvcnRzPXp9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbSxiPXYoMSk7ZnVuY3Rpb24gRShfKXttPXYoNSksdGhpcy5sYXlvdXQ9Xyx0aGlzLmdyYXBocz1bXSx0aGlzLmVkZ2VzPVtdfUUucHJvdG90eXBlLmFkZFJvb3Q9ZnVuY3Rpb24oKXt2YXIgXz10aGlzLmxheW91dC5uZXdHcmFwaCgpLEw9dGhpcy5sYXlvdXQubmV3Tm9kZShudWxsKSxOPXRoaXMuYWRkKF8sTCk7cmV0dXJuIHRoaXMuc2V0Um9vdEdyYXBoKE4pLHRoaXMucm9vdEdyYXBofSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oXyxMLE4sQixqKXtpZihOPT1udWxsJiZCPT1udWxsJiZqPT1udWxsKXtpZihfPT1udWxsKXRocm93IkdyYXBoIGlzIG51bGwhIjtpZihMPT1udWxsKXRocm93IlBhcmVudCBub2RlIGlzIG51bGwhIjtpZih0aGlzLmdyYXBocy5pbmRleE9mKF8pPi0xKXRocm93IkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZih0aGlzLmdyYXBocy5wdXNoKF8pLF8ucGFyZW50IT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgcGFyZW50ISI7aWYoTC5jaGlsZCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIGNoaWxkISI7cmV0dXJuIF8ucGFyZW50PUwsTC5jaGlsZD1fLF99ZWxzZXtqPU4sQj1MLE49Xzt2YXIgUj1CLmdldE93bmVyKCksej1qLmdldE93bmVyKCk7aWYoIShSIT1udWxsJiZSLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJTb3VyY2Ugbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoISh6IT1udWxsJiZ6LmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoUj09eilyZXR1cm4gTi5pc0ludGVyR3JhcGg9ITEsUi5hZGQoTixCLGopO2lmKE4uaXNJbnRlckdyYXBoPSEwLE4uc291cmNlPUIsTi50YXJnZXQ9aix0aGlzLmVkZ2VzLmluZGV4T2YoTik+LTEpdGhyb3ciRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCEiO2lmKHRoaXMuZWRnZXMucHVzaChOKSwhKE4uc291cmNlIT1udWxsJiZOLnRhcmdldCE9bnVsbCkpdGhyb3ciRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShOLnNvdXJjZS5lZGdlcy5pbmRleE9mKE4pPT0tMSYmTi50YXJnZXQuZWRnZXMuaW5kZXhPZihOKT09LTEpKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBzb3VyY2UgYW5kL29yIHRhcmdldCBpbmNpZGVuY3kgbGlzdCEiO3JldHVybiBOLnNvdXJjZS5lZGdlcy5wdXNoKE4pLE4udGFyZ2V0LmVkZ2VzLnB1c2goTiksTn19LEUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihfKXtpZihfIGluc3RhbmNlb2YgbSl7dmFyIEw9XztpZihMLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IkdyYXBoIG5vdCBpbiB0aGlzIGdyYXBoIG1nciI7aWYoIShMPT10aGlzLnJvb3RHcmFwaHx8TC5wYXJlbnQhPW51bGwmJkwucGFyZW50LmdyYXBoTWFuYWdlcj09dGhpcykpdGhyb3ciSW52YWxpZCBwYXJlbnQgbm9kZSEiO3ZhciBOPVtdO049Ti5jb25jYXQoTC5nZXRFZGdlcygpKTtmb3IodmFyIEIsaj1OLmxlbmd0aCxSPTA7UjxqO1IrKylCPU5bUl0sTC5yZW1vdmUoQik7dmFyIHo9W107ej16LmNvbmNhdChMLmdldE5vZGVzKCkpO3ZhciBLO2o9ei5sZW5ndGg7Zm9yKHZhciBSPTA7UjxqO1IrKylLPXpbUl0sTC5yZW1vdmUoSyk7TD09dGhpcy5yb290R3JhcGgmJnRoaXMuc2V0Um9vdEdyYXBoKG51bGwpO3ZhciBpdD10aGlzLmdyYXBocy5pbmRleE9mKEwpO3RoaXMuZ3JhcGhzLnNwbGljZShpdCwxKSxMLnBhcmVudD1udWxsfWVsc2UgaWYoXyBpbnN0YW5jZW9mIGIpe2lmKEI9XyxCPT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCFCLmlzSW50ZXJHcmFwaCl0aHJvdyJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSEiO2lmKCEoQi5zb3VyY2UhPW51bGwmJkIudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShCLnNvdXJjZS5lZGdlcy5pbmRleE9mKEIpIT0tMSYmQi50YXJnZXQuZWRnZXMuaW5kZXhPZihCKSE9LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt2YXIgaXQ9Qi5zb3VyY2UuZWRnZXMuaW5kZXhPZihCKTtpZihCLnNvdXJjZS5lZGdlcy5zcGxpY2UoaXQsMSksaXQ9Qi50YXJnZXQuZWRnZXMuaW5kZXhPZihCKSxCLnRhcmdldC5lZGdlcy5zcGxpY2UoaXQsMSksIShCLnNvdXJjZS5vd25lciE9bnVsbCYmQi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkhPW51bGwpKXRocm93IkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsISI7aWYoQi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihCKT09LTEpdGhyb3ciTm90IGluIG93bmVyIGdyYXBoIG1hbmFnZXIncyBlZGdlIGxpc3QhIjt2YXIgaXQ9Qi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihCKTtCLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoaXQsMSl9fSxFLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHMoITApfSxFLnByb3RvdHlwZS5nZXRHcmFwaHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaHN9LEUucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxOb2Rlcz09bnVsbCl7Zm9yKHZhciBfPVtdLEw9dGhpcy5nZXRHcmFwaHMoKSxOPUwubGVuZ3RoLEI9MDtCPE47QisrKV89Xy5jb25jYXQoTFtCXS5nZXROb2RlcygpKTt0aGlzLmFsbE5vZGVzPV99cmV0dXJuIHRoaXMuYWxsTm9kZXN9LEUucHJvdG90eXBlLnJlc2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzPW51bGx9LEUucHJvdG90eXBlLnJlc2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbEVkZ2VzPW51bGx9LEUucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPW51bGx9LEUucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxFZGdlcz09bnVsbCl7dmFyIF89W10sTD10aGlzLmdldEdyYXBocygpO0wubGVuZ3RoO2Zvcih2YXIgTj0wO048TC5sZW5ndGg7TisrKV89Xy5jb25jYXQoTFtOXS5nZXRFZGdlcygpKTtfPV8uY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9X31yZXR1cm4gdGhpcy5hbGxFZGdlc30sRS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sRS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oXyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPV99LEUucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LEUucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihfKXtpZihfLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9XyxfLnBhcmVudD09bnVsbCYmKF8ucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sRS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxFLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihfLEwpe2lmKCEoXyE9bnVsbCYmTCE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYoXz09TClyZXR1cm4hMDt2YXIgTj1fLmdldE93bmVyKCksQjtkb3tpZihCPU4uZ2V0UGFyZW50KCksQj09bnVsbClicmVhaztpZihCPT1MKXJldHVybiEwO2lmKE49Qi5nZXRPd25lcigpLE49PW51bGwpYnJlYWt9d2hpbGUoITApO049TC5nZXRPd25lcigpO2Rve2lmKEI9Ti5nZXRQYXJlbnQoKSxCPT1udWxsKWJyZWFrO2lmKEI9PV8pcmV0dXJuITA7aWYoTj1CLmdldE93bmVyKCksTj09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LEUucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIF8sTCxOLEIsaixSPXRoaXMuZ2V0QWxsRWRnZXMoKSx6PVIubGVuZ3RoLEs9MDtLPHo7SysrKXtpZihfPVJbS10sTD1fLnNvdXJjZSxOPV8udGFyZ2V0LF8ubGNhPW51bGwsXy5zb3VyY2VJbkxjYT1MLF8udGFyZ2V0SW5MY2E9TixMPT1OKXtfLmxjYT1MLmdldE93bmVyKCk7Y29udGludWV9Zm9yKEI9TC5nZXRPd25lcigpO18ubGNhPT1udWxsOyl7Zm9yKF8udGFyZ2V0SW5MY2E9TixqPU4uZ2V0T3duZXIoKTtfLmxjYT09bnVsbDspe2lmKGo9PUIpe18ubGNhPWo7YnJlYWt9aWYoaj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYoXy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7Xy50YXJnZXRJbkxjYT1qLmdldFBhcmVudCgpLGo9Xy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKEI9PXRoaXMucm9vdEdyYXBoKWJyZWFrO18ubGNhPT1udWxsJiYoXy5zb3VyY2VJbkxjYT1CLmdldFBhcmVudCgpLEI9Xy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihfLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LEUucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihfLEwpe2lmKF89PUwpcmV0dXJuIF8uZ2V0T3duZXIoKTt2YXIgTj1fLmdldE93bmVyKCk7ZG97aWYoTj09bnVsbClicmVhazt2YXIgQj1MLmdldE93bmVyKCk7ZG97aWYoQj09bnVsbClicmVhaztpZihCPT1OKXJldHVybiBCO0I9Qi5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTtOPU4uZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIE59LEUucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKF8sTCl7Xz09bnVsbCYmTD09bnVsbCYmKF89dGhpcy5yb290R3JhcGgsTD0xKTtmb3IodmFyIE4sQj1fLmdldE5vZGVzKCksaj1CLmxlbmd0aCxSPTA7UjxqO1IrKylOPUJbUl0sTi5pbmNsdXNpb25UcmVlRGVwdGg9TCxOLmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKE4uY2hpbGQsTCsxKX0sRS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgXyxMPXRoaXMuZWRnZXMubGVuZ3RoLE49MDtOPEw7TisrKWlmKF89dGhpcy5lZGdlc1tOXSx0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKF8uc291cmNlLF8udGFyZ2V0KSlyZXR1cm4hMDtyZXR1cm4hMX0sZi5leHBvcnRzPUV9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDApO2Z1bmN0aW9uIGIoKXt9Zm9yKHZhciBFIGluIG0pYltFXT1tW0VdO2IuTUFYX0lURVJBVElPTlM9MjUwMCxiLkRFRkFVTFRfRURHRV9MRU5HVEg9NTAsYi5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD0uNDUsYi5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD00NTAwLGIuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPS40LGIuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPTEsYi5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTMuOCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9MS41LGIuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT049ITAsYi5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT049ITAsYi5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPS4zLGIuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUj0uMzMsYi5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ9MWUzLGIuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUPTVlMyxiLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTD0xMDAsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ9Yi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwqMyxiLk1JTl9SRVBVTFNJT05fRElTVD1iLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAsYi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9MTAwLGIuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj0uMSxiLk1JTl9FREdFX0xFTkdUSD0xLGIuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9MTAsZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDEyKTtmdW5jdGlvbiBiKCl7fWIuY2FsY1NlcGFyYXRpb25BbW91bnQ9ZnVuY3Rpb24oRSxfLEwsTil7aWYoIUUuaW50ZXJzZWN0cyhfKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjt2YXIgQj1uZXcgQXJyYXkoMik7dGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhFLF8sQiksTFswXT1NYXRoLm1pbihFLmdldFJpZ2h0KCksXy5nZXRSaWdodCgpKS1NYXRoLm1heChFLngsXy54KSxMWzFdPU1hdGgubWluKEUuZ2V0Qm90dG9tKCksXy5nZXRCb3R0b20oKSktTWF0aC5tYXgoRS55LF8ueSksRS5nZXRYKCk8PV8uZ2V0WCgpJiZFLmdldFJpZ2h0KCk+PV8uZ2V0UmlnaHQoKT9MWzBdKz1NYXRoLm1pbihfLmdldFgoKS1FLmdldFgoKSxFLmdldFJpZ2h0KCktXy5nZXRSaWdodCgpKTpfLmdldFgoKTw9RS5nZXRYKCkmJl8uZ2V0UmlnaHQoKT49RS5nZXRSaWdodCgpJiYoTFswXSs9TWF0aC5taW4oRS5nZXRYKCktXy5nZXRYKCksXy5nZXRSaWdodCgpLUUuZ2V0UmlnaHQoKSkpLEUuZ2V0WSgpPD1fLmdldFkoKSYmRS5nZXRCb3R0b20oKT49Xy5nZXRCb3R0b20oKT9MWzFdKz1NYXRoLm1pbihfLmdldFkoKS1FLmdldFkoKSxFLmdldEJvdHRvbSgpLV8uZ2V0Qm90dG9tKCkpOl8uZ2V0WSgpPD1FLmdldFkoKSYmXy5nZXRCb3R0b20oKT49RS5nZXRCb3R0b20oKSYmKExbMV0rPU1hdGgubWluKEUuZ2V0WSgpLV8uZ2V0WSgpLF8uZ2V0Qm90dG9tKCktRS5nZXRCb3R0b20oKSkpO3ZhciBqPU1hdGguYWJzKChfLmdldENlbnRlclkoKS1FLmdldENlbnRlclkoKSkvKF8uZ2V0Q2VudGVyWCgpLUUuZ2V0Q2VudGVyWCgpKSk7Xy5nZXRDZW50ZXJZKCk9PT1FLmdldENlbnRlclkoKSYmXy5nZXRDZW50ZXJYKCk9PT1FLmdldENlbnRlclgoKSYmKGo9MSk7dmFyIFI9aipMWzBdLHo9TFsxXS9qO0xbMF08ej96PUxbMF06Uj1MWzFdLExbMF09LTEqQlswXSooei8yK04pLExbMV09LTEqQlsxXSooUi8yK04pfSxiLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzPWZ1bmN0aW9uKEUsXyxMKXtFLmdldENlbnRlclgoKTxfLmdldENlbnRlclgoKT9MWzBdPS0xOkxbMF09MSxFLmdldENlbnRlclkoKTxfLmdldENlbnRlclkoKT9MWzFdPS0xOkxbMV09MX0sYi5nZXRJbnRlcnNlY3Rpb24yPWZ1bmN0aW9uKEUsXyxMKXt2YXIgTj1FLmdldENlbnRlclgoKSxCPUUuZ2V0Q2VudGVyWSgpLGo9Xy5nZXRDZW50ZXJYKCksUj1fLmdldENlbnRlclkoKTtpZihFLmludGVyc2VjdHMoXykpcmV0dXJuIExbMF09TixMWzFdPUIsTFsyXT1qLExbM109UiwhMDt2YXIgej1FLmdldFgoKSxLPUUuZ2V0WSgpLGl0PUUuZ2V0UmlnaHQoKSxzdD1FLmdldFgoKSx1dD1FLmdldEJvdHRvbSgpLGJ0PUUuZ2V0UmlnaHQoKSxtdD1FLmdldFdpZHRoSGFsZigpLHl0PUUuZ2V0SGVpZ2h0SGFsZigpLGR0PV8uZ2V0WCgpLGh0PV8uZ2V0WSgpLHd0PV8uZ2V0UmlnaHQoKSxYPV8uZ2V0WCgpLHB0PV8uZ2V0Qm90dG9tKCksVT1fLmdldFJpZ2h0KCkseHQ9Xy5nZXRXaWR0aEhhbGYoKSxudD1fLmdldEhlaWdodEhhbGYoKSxPdD0hMSxOdD0hMTtpZihOPT09ail7aWYoQj5SKXJldHVybiBMWzBdPU4sTFsxXT1LLExbMl09aixMWzNdPXB0LCExO2lmKEI8UilyZXR1cm4gTFswXT1OLExbMV09dXQsTFsyXT1qLExbM109aHQsITF9ZWxzZSBpZihCPT09Uil7aWYoTj5qKXJldHVybiBMWzBdPXosTFsxXT1CLExbMl09d3QsTFszXT1SLCExO2lmKE48ailyZXR1cm4gTFswXT1pdCxMWzFdPUIsTFsyXT1kdCxMWzNdPVIsITF9ZWxzZXt2YXIgcXQ9RS5oZWlnaHQvRS53aWR0aCxDdD1fLmhlaWdodC9fLndpZHRoLFo9KFItQikvKGotTiksVHQ9dm9pZCAwLEh0PXZvaWQgMCxJdD12b2lkIDAsRnQ9dm9pZCAwLGtlPXZvaWQgMCxwbj12b2lkIDA7aWYoLXF0PT09Wj9OPmo/KExbMF09c3QsTFsxXT11dCxPdD0hMCk6KExbMF09aXQsTFsxXT1LLE90PSEwKTpxdD09PVomJihOPmo/KExbMF09eixMWzFdPUssT3Q9ITApOihMWzBdPWJ0LExbMV09dXQsT3Q9ITApKSwtQ3Q9PT1aP2o+Tj8oTFsyXT1YLExbM109cHQsTnQ9ITApOihMWzJdPXd0LExbM109aHQsTnQ9ITApOkN0PT09WiYmKGo+Tj8oTFsyXT1kdCxMWzNdPWh0LE50PSEwKTooTFsyXT1VLExbM109cHQsTnQ9ITApKSxPdCYmTnQpcmV0dXJuITE7aWYoTj5qP0I+Uj8oVHQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihxdCxaLDQpLEh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQ3QsWiwyKSk6KFR0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXF0LFosMyksSHQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtQ3QsWiwxKSk6Qj5SPyhUdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1xdCxaLDEpLEh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUN0LFosMykpOihUdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHF0LFosMiksSHQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihDdCxaLDQpKSwhT3Qpc3dpdGNoKFR0KXtjYXNlIDE6RnQ9SyxJdD1OKy15dC9aLExbMF09SXQsTFsxXT1GdDticmVhaztjYXNlIDI6SXQ9YnQsRnQ9QittdCpaLExbMF09SXQsTFsxXT1GdDticmVhaztjYXNlIDM6RnQ9dXQsSXQ9Tit5dC9aLExbMF09SXQsTFsxXT1GdDticmVhaztjYXNlIDQ6SXQ9c3QsRnQ9QistbXQqWixMWzBdPUl0LExbMV09RnQ7YnJlYWt9aWYoIU50KXN3aXRjaChIdCl7Y2FzZSAxOnBuPWh0LGtlPWorLW50L1osTFsyXT1rZSxMWzNdPXBuO2JyZWFrO2Nhc2UgMjprZT1VLHBuPVIreHQqWixMWzJdPWtlLExbM109cG47YnJlYWs7Y2FzZSAzOnBuPXB0LGtlPWorbnQvWixMWzJdPWtlLExbM109cG47YnJlYWs7Y2FzZSA0OmtlPVgscG49UisteHQqWixMWzJdPWtlLExbM109cG47YnJlYWt9fXJldHVybiExfSxiLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKEUsXyxMKXtyZXR1cm4gRT5fP0w6MStMJTR9LGIuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKEUsXyxMLE4pe2lmKE49PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihFLF8sTCk7dmFyIEI9RS54LGo9RS55LFI9Xy54LHo9Xy55LEs9TC54LGl0PUwueSxzdD1OLngsdXQ9Ti55LGJ0PXZvaWQgMCxtdD12b2lkIDAseXQ9dm9pZCAwLGR0PXZvaWQgMCxodD12b2lkIDAsd3Q9dm9pZCAwLFg9dm9pZCAwLHB0PXZvaWQgMCxVPXZvaWQgMDtyZXR1cm4geXQ9ei1qLGh0PUItUixYPVIqai1CKnosZHQ9dXQtaXQsd3Q9Sy1zdCxwdD1zdCppdC1LKnV0LFU9eXQqd3QtZHQqaHQsVT09PTA/bnVsbDooYnQ9KGh0KnB0LXd0KlgpL1UsbXQ9KGR0KlgteXQqcHQpL1UsbmV3IG0oYnQsbXQpKX0sYi5hbmdsZU9mVmVjdG9yPWZ1bmN0aW9uKEUsXyxMLE4pe3ZhciBCPXZvaWQgMDtyZXR1cm4gRSE9PUw/KEI9TWF0aC5hdGFuKChOLV8pLyhMLUUpKSxMPEU/Qis9TWF0aC5QSTpOPF8mJihCKz10aGlzLlRXT19QSSkpOk48Xz9CPXRoaXMuT05FX0FORF9IQUxGX1BJOkI9dGhpcy5IQUxGX1BJLEJ9LGIuZG9JbnRlcnNlY3Q9ZnVuY3Rpb24oRSxfLEwsTil7dmFyIEI9RS54LGo9RS55LFI9Xy54LHo9Xy55LEs9TC54LGl0PUwueSxzdD1OLngsdXQ9Ti55LGJ0PShSLUIpKih1dC1pdCktKHN0LUspKih6LWopO2lmKGJ0PT09MClyZXR1cm4hMTt2YXIgbXQ9KCh1dC1pdCkqKHN0LUIpKyhLLXN0KSoodXQtaikpL2J0LHl0PSgoai16KSooc3QtQikrKFItQikqKHV0LWopKS9idDtyZXR1cm4gMDxtdCYmbXQ8MSYmMDx5dCYmeXQ8MX0sYi5IQUxGX1BJPS41Kk1hdGguUEksYi5PTkVfQU5EX0hBTEZfUEk9MS41Kk1hdGguUEksYi5UV09fUEk9MipNYXRoLlBJLGIuVEhSRUVfUEk9MypNYXRoLlBJLGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbSgpe31tLnNpZ249ZnVuY3Rpb24oYil7cmV0dXJuIGI+MD8xOmI8MD8tMTowfSxtLmZsb29yPWZ1bmN0aW9uKGIpe3JldHVybiBiPDA/TWF0aC5jZWlsKGIpOk1hdGguZmxvb3IoYil9LG0uY2VpbD1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguZmxvb3IoYik6TWF0aC5jZWlsKGIpfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oKXt9bS5NQVhfVkFMVUU9MjE0NzQ4MzY0NyxtLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQihqLFIpe2Zvcih2YXIgej0wO3o8Ui5sZW5ndGg7eisrKXt2YXIgSz1SW3pdO0suZW51bWVyYWJsZT1LLmVudW1lcmFibGV8fCExLEsuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBLJiYoSy53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosSy5rZXksSyl9fXJldHVybiBmdW5jdGlvbihqLFIseil7cmV0dXJuIFImJkIoai5wcm90b3R5cGUsUikseiYmQihqLHopLGp9fSgpO2Z1bmN0aW9uIGIoQixqKXtpZighKEIgaW5zdGFuY2VvZiBqKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgRT1mdW5jdGlvbihqKXtyZXR1cm57dmFsdWU6aixuZXh0Om51bGwscHJldjpudWxsfX0sXz1mdW5jdGlvbihqLFIseixLKXtyZXR1cm4gaiE9PW51bGw/ai5uZXh0PVI6Sy5oZWFkPVIseiE9PW51bGw/ei5wcmV2PVI6Sy50YWlsPVIsUi5wcmV2PWosUi5uZXh0PXosSy5sZW5ndGgrKyxSfSxMPWZ1bmN0aW9uKGosUil7dmFyIHo9ai5wcmV2LEs9ai5uZXh0O3JldHVybiB6IT09bnVsbD96Lm5leHQ9SzpSLmhlYWQ9SyxLIT09bnVsbD9LLnByZXY9ejpSLnRhaWw9eixqLnByZXY9ai5uZXh0PW51bGwsUi5sZW5ndGgtLSxqfSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQihqKXt2YXIgUj10aGlzO2IodGhpcyxCKSx0aGlzLmxlbmd0aD0wLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLGohPW51bGwmJmouZm9yRWFjaChmdW5jdGlvbih6KXtyZXR1cm4gUi5wdXNoKHopfSl9cmV0dXJuIG0oQixbe2tleToic2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9fSx7a2V5OiJpbnNlcnRCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKFIseil7cmV0dXJuIF8oei5wcmV2LEUoUikseix0aGlzKX19LHtrZXk6Imluc2VydEFmdGVyIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHosRShSKSx6Lm5leHQsdGhpcyl9fSx7a2V5OiJpbnNlcnROb2RlQmVmb3JlIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHoucHJldixSLHosdGhpcyl9fSx7a2V5OiJpbnNlcnROb2RlQWZ0ZXIiLHZhbHVlOmZ1bmN0aW9uKFIseil7cmV0dXJuIF8oeixSLHoubmV4dCx0aGlzKX19LHtrZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKFIpe3JldHVybiBfKHRoaXMudGFpbCxFKFIpLG51bGwsdGhpcyl9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihSKXtyZXR1cm4gXyhudWxsLEUoUiksdGhpcy5oZWFkLHRoaXMpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbihSKXtyZXR1cm4gTChSLHRoaXMpfX0se2tleToicG9wIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBMKHRoaXMudGFpbCx0aGlzKS52YWx1ZX19LHtrZXk6InBvcE5vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy50YWlsLHRoaXMpfX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5oZWFkLHRoaXMpLnZhbHVlfX0se2tleToic2hpZnROb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBMKHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6ImdldF9vYmplY3RfYXQiLHZhbHVlOmZ1bmN0aW9uKFIpe2lmKFI8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgej0xLEs9dGhpcy5oZWFkO3o8UjspSz1LLm5leHQseisrO3JldHVybiBLLnZhbHVlfX19LHtrZXk6InNldF9vYmplY3RfYXQiLHZhbHVlOmZ1bmN0aW9uKFIseil7aWYoUjw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBLPTEsaXQ9dGhpcy5oZWFkO0s8UjspaXQ9aXQubmV4dCxLKys7aXQudmFsdWU9en19fV0pLEJ9KCk7Zi5leHBvcnRzPU59LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKGIsRSxfKXt0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCxiPT1udWxsJiZFPT1udWxsJiZfPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6dHlwZW9mIGI9PSJudW1iZXIiJiZ0eXBlb2YgRT09Im51bWJlciImJl89PW51bGw/KHRoaXMueD1iLHRoaXMueT1FKTpiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJkU9PW51bGwmJl89PW51bGwmJihfPWIsdGhpcy54PV8ueCx0aGlzLnk9Xy55KX1tLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG0ucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtKHRoaXMueCx0aGlzLnkpfSxtLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihiLEUsXyl7Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZFPT1udWxsJiZfPT1udWxsPyhfPWIsdGhpcy5zZXRMb2NhdGlvbihfLngsXy55KSk6dHlwZW9mIGI9PSJudW1iZXIiJiZ0eXBlb2YgRT09Im51bWJlciImJl89PW51bGwmJihwYXJzZUludChiKT09YiYmcGFyc2VJbnQoRSk9PUU/dGhpcy5tb3ZlKGIsRSk6KHRoaXMueD1NYXRoLmZsb29yKGIrLjUpLHRoaXMueT1NYXRoLmZsb29yKEUrLjUpKSl9LG0ucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYixFKXt0aGlzLng9Yix0aGlzLnk9RX0sbS5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGIsRSl7dGhpcy54Kz1iLHRoaXMueSs9RX0sbS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGIpe2lmKGIuY29uc3RydWN0b3IubmFtZT09IlBvaW50Iil7dmFyIEU9YjtyZXR1cm4gdGhpcy54PT1FLngmJnRoaXMueT09RS55fXJldHVybiB0aGlzPT1ifSxtLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBuZXcgbSgpLmNvbnN0cnVjdG9yLm5hbWUrIlt4PSIrdGhpcy54KyIseT0iK3RoaXMueSsiXSJ9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbShiLEUsXyxMKXt0aGlzLng9MCx0aGlzLnk9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxiIT1udWxsJiZFIT1udWxsJiZfIT1udWxsJiZMIT1udWxsJiYodGhpcy54PWIsdGhpcy55PUUsdGhpcy53aWR0aD1fLHRoaXMuaGVpZ2h0PUwpfW0ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxtLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGIpe3RoaXMueD1ifSxtLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbS5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihiKXt0aGlzLnk9Yn0sbS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbS5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oYil7dGhpcy53aWR0aD1ifSxtLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG0ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihiKXt0aGlzLmhlaWdodD1ifSxtLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aH0sbS5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodH0sbS5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihiKXtyZXR1cm4hKHRoaXMuZ2V0UmlnaHQoKTxiLnh8fHRoaXMuZ2V0Qm90dG9tKCk8Yi55fHxiLmdldFJpZ2h0KCk8dGhpcy54fHxiLmdldEJvdHRvbSgpPHRoaXMueSl9LG0ucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGgvMn0sbS5wcm90b3R5cGUuZ2V0TWluWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKX0sbS5wcm90b3R5cGUuZ2V0TWF4WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKSt0aGlzLndpZHRofSxtLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodC8yfSxtLnByb3RvdHlwZS5nZXRNaW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpfSxtLnByb3RvdHlwZS5nZXRNYXhZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpK3RoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5nZXRXaWR0aEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aC8yfSxtLnByb3RvdHlwZS5nZXRIZWlnaHRIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0LzJ9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdil7dmFyIG09dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oRSl7cmV0dXJuIHR5cGVvZiBFfTpmdW5jdGlvbihFKXtyZXR1cm4gRSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmRS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIEV9O2Z1bmN0aW9uIGIoKXt9Yi5sYXN0SUQ9MCxiLmNyZWF0ZUlEPWZ1bmN0aW9uKEUpe3JldHVybiBiLmlzUHJpbWl0aXZlKEUpP0U6KEUudW5pcXVlSUQhPW51bGx8fChFLnVuaXF1ZUlEPWIuZ2V0U3RyaW5nKCksYi5sYXN0SUQrKyksRS51bmlxdWVJRCl9LGIuZ2V0U3RyaW5nPWZ1bmN0aW9uKEUpe3JldHVybiBFPT1udWxsJiYoRT1iLmxhc3RJRCksIk9iamVjdCMiK0V9LGIuaXNQcmltaXRpdmU9ZnVuY3Rpb24oRSl7dmFyIF89dHlwZW9mIEU+InUiPyJ1bmRlZmluZWQiOm0oRSk7cmV0dXJuIEU9PW51bGx8fF8hPSJvYmplY3QiJiZfIT0iZnVuY3Rpb24ifSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oSyl7aWYoQXJyYXkuaXNBcnJheShLKSl7Zm9yKHZhciBpdD0wLHN0PUFycmF5KEsubGVuZ3RoKTtpdDxLLmxlbmd0aDtpdCsrKXN0W2l0XT1LW2l0XTtyZXR1cm4gc3R9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShLKX12YXIgYj12KDApLEU9dig2KSxfPXYoMyksTD12KDEpLE49dig1KSxCPXYoNCksaj12KDE3KSxSPXYoMjcpO2Z1bmN0aW9uIHooSyl7Ui5jYWxsKHRoaXMpLHRoaXMubGF5b3V0UXVhbGl0eT1iLlFVQUxJVFksdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWIuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWIuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9Yi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcz1uZXcgTWFwLHRoaXMuZ3JhcGhNYW5hZ2VyPW5ldyBFKHRoaXMpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLmlzU3ViTGF5b3V0PSExLHRoaXMuaXNSZW1vdGVVc2U9ITEsSyE9bnVsbCYmKHRoaXMuaXNSZW1vdGVVc2U9Syl9ei5SQU5ET01fU0VFRD0xLHoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpLHoucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0sei5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKX0sei5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKX0sei5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKX0sei5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIEs9bmV3IEUodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPUssS30sei5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBOKG51bGwsdGhpcy5ncmFwaE1hbmFnZXIsSyl9LHoucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBfKHRoaXMuZ3JhcGhNYW5hZ2VyLEspfSx6LnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgTChudWxsLG51bGwsSyl9LHoucHJvdG90eXBlLmNoZWNrTGF5b3V0U3VjY2Vzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk9PW51bGx8fHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLmxlbmd0aD09MHx8dGhpcy5ncmFwaE1hbmFnZXIuaW5jbHVkZXNJbnZhbGlkRWRnZSgpfSx6LnByb3RvdHlwZS5ydW5MYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy50aWxpbmdQcmVMYXlvdXQmJnRoaXMudGlsaW5nUHJlTGF5b3V0KCksdGhpcy5pbml0UGFyYW1ldGVycygpO3ZhciBLO3JldHVybiB0aGlzLmNoZWNrTGF5b3V0U3VjY2VzcygpP0s9ITE6Sz10aGlzLmxheW91dCgpLGIuQU5JTUFURT09PSJkdXJpbmciPyExOihLJiYodGhpcy5pc1N1YkxheW91dHx8dGhpcy5kb1Bvc3RMYXlvdXQoKSksdGhpcy50aWxpbmdQb3N0TGF5b3V0JiZ0aGlzLnRpbGluZ1Bvc3RMYXlvdXQoKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITAsSyl9LHoucHJvdG90eXBlLmRvUG9zdExheW91dD1mdW5jdGlvbigpe3RoaXMuaW5jcmVtZW50YWx8fHRoaXMudHJhbnNmb3JtKCksdGhpcy51cGRhdGUoKX0sei5wcm90b3R5cGUudXBkYXRlMj1mdW5jdGlvbigpe2lmKHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSwhdGhpcy5pc1JlbW90ZVVzZSl7Zm9yKHZhciBLPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCksaXQ9MDtpdDxLLmxlbmd0aDtpdCsrKUtbaXRdO2Zvcih2YXIgc3Q9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksaXQ9MDtpdDxzdC5sZW5ndGg7aXQrKylzdFtpdF07dGhpcy51cGRhdGUodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKX19LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihLKXtpZihLPT1udWxsKXRoaXMudXBkYXRlMigpO2Vsc2UgaWYoSyBpbnN0YW5jZW9mIF8pe3ZhciBpdD1LO2lmKGl0LmdldENoaWxkKCkhPW51bGwpZm9yKHZhciBzdD1pdC5nZXRDaGlsZCgpLmdldE5vZGVzKCksdXQ9MDt1dDxzdC5sZW5ndGg7dXQrKyl1cGRhdGUoc3RbdXRdKTtpZihpdC52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBidD1pdC52R3JhcGhPYmplY3Q7YnQudXBkYXRlKGl0KX19ZWxzZSBpZihLIGluc3RhbmNlb2YgTCl7dmFyIG10PUs7aWYobXQudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgeXQ9bXQudkdyYXBoT2JqZWN0O3l0LnVwZGF0ZShtdCl9fWVsc2UgaWYoSyBpbnN0YW5jZW9mIE4pe3ZhciBkdD1LO2lmKGR0LnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIGh0PWR0LnZHcmFwaE9iamVjdDtodC51cGRhdGUoZHQpfX19LHoucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dGhpcy5pc1N1YkxheW91dHx8KHRoaXMubGF5b3V0UXVhbGl0eT1iLlFVQUxJVFksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWIuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5pbmNyZW1lbnRhbD1iLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWIuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9Yi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTKSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmKHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9ITEpfSx6LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oSyl7aWYoSz09bnVsbCl0aGlzLnRyYW5zZm9ybShuZXcgQigwLDApKTtlbHNle3ZhciBpdD1uZXcgaixzdD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO2lmKHN0IT1udWxsKXtpdC5zZXRXb3JsZE9yZ1goSy54KSxpdC5zZXRXb3JsZE9yZ1koSy55KSxpdC5zZXREZXZpY2VPcmdYKHN0LngpLGl0LnNldERldmljZU9yZ1koc3QueSk7Zm9yKHZhciB1dD10aGlzLmdldEFsbE5vZGVzKCksYnQsbXQ9MDttdDx1dC5sZW5ndGg7bXQrKylidD11dFttdF0sYnQudHJhbnNmb3JtKGl0KX19fSx6LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHk9ZnVuY3Rpb24oSyl7aWYoSz09bnVsbCl0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSksdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKCEwKTtlbHNlIGZvcih2YXIgaXQsc3QsdXQ9Sy5nZXROb2RlcygpLGJ0PTA7YnQ8dXQubGVuZ3RoO2J0KyspaXQ9dXRbYnRdLHN0PWl0LmdldENoaWxkKCksc3Q9PW51bGx8fHN0LmdldE5vZGVzKCkubGVuZ3RoPT0wP2l0LnNjYXR0ZXIoKToodGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoc3QpLGl0LnVwZGF0ZUJvdW5kcygpKX0sei5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdD1mdW5jdGlvbigpe2Zvcih2YXIgSz1bXSxpdD0hMCxzdD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx1dD0hMCxidD0wO2J0PHN0Lmxlbmd0aDtidCsrKXN0W2J0XS5nZXRDaGlsZCgpIT1udWxsJiYodXQ9ITEpO2lmKCF1dClyZXR1cm4gSzt2YXIgbXQ9bmV3IFNldCx5dD1bXSxkdD1uZXcgTWFwLGh0PVtdO2ZvcihodD1odC5jb25jYXQoc3QpO2h0Lmxlbmd0aD4wJiZpdDspe2Zvcih5dC5wdXNoKGh0WzBdKTt5dC5sZW5ndGg+MCYmaXQ7KXt2YXIgd3Q9eXRbMF07eXQuc3BsaWNlKDAsMSksbXQuYWRkKHd0KTtmb3IodmFyIFg9d3QuZ2V0RWRnZXMoKSxidD0wO2J0PFgubGVuZ3RoO2J0Kyspe3ZhciBwdD1YW2J0XS5nZXRPdGhlckVuZCh3dCk7aWYoZHQuZ2V0KHd0KSE9cHQpaWYoIW10LmhhcyhwdCkpeXQucHVzaChwdCksZHQuc2V0KHB0LHd0KTtlbHNle2l0PSExO2JyZWFrfX19aWYoIWl0KUs9W107ZWxzZXt2YXIgVT1bXS5jb25jYXQobShtdCkpO0sucHVzaChVKTtmb3IodmFyIGJ0PTA7YnQ8VS5sZW5ndGg7YnQrKyl7dmFyIHh0PVVbYnRdLG50PWh0LmluZGV4T2YoeHQpO250Pi0xJiZodC5zcGxpY2UobnQsMSl9bXQ9bmV3IFNldCxkdD1uZXcgTWFwfX1yZXR1cm4gS30sei5wcm90b3R5cGUuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHM9ZnVuY3Rpb24oSyl7Zm9yKHZhciBpdD1bXSxzdD1LLnNvdXJjZSx1dD10aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IoSy5zb3VyY2UsSy50YXJnZXQpLGJ0PTA7YnQ8Sy5iZW5kcG9pbnRzLmxlbmd0aDtidCsrKXt2YXIgbXQ9dGhpcy5uZXdOb2RlKG51bGwpO210LnNldFJlY3QobmV3IFBvaW50KDAsMCksbmV3IERpbWVuc2lvbigxLDEpKSx1dC5hZGQobXQpO3ZhciB5dD10aGlzLm5ld0VkZ2UobnVsbCk7dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHl0LHN0LG10KSxpdC5hZGQobXQpLHN0PW10fXZhciB5dD10aGlzLm5ld0VkZ2UobnVsbCk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5dCxzdCxLLnRhcmdldCksdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChLLGl0KSxLLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShLKTp1dC5yZW1vdmUoSyksaXR9LHoucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2Rlcz1mdW5jdGlvbigpe3ZhciBLPVtdO0s9Sy5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSksSz1bXS5jb25jYXQobSh0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KEspO2Zvcih2YXIgaXQ9MDtpdDxLLmxlbmd0aDtpdCsrKXt2YXIgc3Q9S1tpdF07aWYoc3QuYmVuZHBvaW50cy5sZW5ndGg+MCl7Zm9yKHZhciB1dD10aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KHN0KSxidD0wO2J0PHV0Lmxlbmd0aDtidCsrKXt2YXIgbXQ9dXRbYnRdLHl0PW5ldyBCKG10LmdldENlbnRlclgoKSxtdC5nZXRDZW50ZXJZKCkpLGR0PXN0LmJlbmRwb2ludHMuZ2V0KGJ0KTtkdC54PXl0LngsZHQueT15dC55LG10LmdldE93bmVyKCkucmVtb3ZlKG10KX10aGlzLmdyYXBoTWFuYWdlci5hZGQoc3Qsc3Quc291cmNlLHN0LnRhcmdldCl9fX0sei50cmFuc2Zvcm09ZnVuY3Rpb24oSyxpdCxzdCx1dCl7aWYoc3QhPW51bGwmJnV0IT1udWxsKXt2YXIgYnQ9aXQ7aWYoSzw9NTApe3ZhciBtdD1pdC9zdDtidC09KGl0LW10KS81MCooNTAtSyl9ZWxzZXt2YXIgeXQ9aXQqdXQ7YnQrPSh5dC1pdCkvNTAqKEstNTApfXJldHVybiBidH1lbHNle3ZhciBkdCxodDtyZXR1cm4gSzw9NTA/KGR0PTkqaXQvNTAwLGh0PWl0LzEwKTooZHQ9OSppdC81MCxodD0tOCppdCksZHQqSytodH19LHouZmluZENlbnRlck9mVHJlZT1mdW5jdGlvbihLKXt2YXIgaXQ9W107aXQ9aXQuY29uY2F0KEspO3ZhciBzdD1bXSx1dD1uZXcgTWFwLGJ0PSExLG10PW51bGw7KGl0Lmxlbmd0aD09MXx8aXQubGVuZ3RoPT0yKSYmKGJ0PSEwLG10PWl0WzBdKTtmb3IodmFyIHl0PTA7eXQ8aXQubGVuZ3RoO3l0Kyspe3ZhciBkdD1pdFt5dF0saHQ9ZHQuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7dXQuc2V0KGR0LGR0LmdldE5laWdoYm9yc0xpc3QoKS5zaXplKSxodD09MSYmc3QucHVzaChkdCl9dmFyIHd0PVtdO2Zvcih3dD13dC5jb25jYXQoc3QpOyFidDspe3ZhciBYPVtdO1g9WC5jb25jYXQod3QpLHd0PVtdO2Zvcih2YXIgeXQ9MDt5dDxpdC5sZW5ndGg7eXQrKyl7dmFyIGR0PWl0W3l0XSxwdD1pdC5pbmRleE9mKGR0KTtwdD49MCYmaXQuc3BsaWNlKHB0LDEpO3ZhciBVPWR0LmdldE5laWdoYm9yc0xpc3QoKTtVLmZvckVhY2goZnVuY3Rpb24oT3Qpe2lmKHN0LmluZGV4T2YoT3QpPDApe3ZhciBOdD11dC5nZXQoT3QpLHF0PU50LTE7cXQ9PTEmJnd0LnB1c2goT3QpLHV0LnNldChPdCxxdCl9fSl9c3Q9c3QuY29uY2F0KHd0KSwoaXQubGVuZ3RoPT0xfHxpdC5sZW5ndGg9PTIpJiYoYnQ9ITAsbXQ9aXRbMF0pfXJldHVybiBtdH0sei5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKEspe3RoaXMuZ3JhcGhNYW5hZ2VyPUt9LGYuZXhwb3J0cz16fSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbSgpe31tLnNlZWQ9MSxtLng9MCxtLm5leHREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gbS54PU1hdGguc2luKG0uc2VlZCsrKSoxZTQsbS54LU1hdGguZmxvb3IobS54KX0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDQpO2Z1bmN0aW9uIGIoRSxfKXt0aGlzLmx3b3JsZE9yZ1g9MCx0aGlzLmx3b3JsZE9yZ1k9MCx0aGlzLmxkZXZpY2VPcmdYPTAsdGhpcy5sZGV2aWNlT3JnWT0wLHRoaXMubHdvcmxkRXh0WD0xLHRoaXMubHdvcmxkRXh0WT0xLHRoaXMubGRldmljZUV4dFg9MSx0aGlzLmxkZXZpY2VFeHRZPTF9Yi5wcm90b3R5cGUuZ2V0V29ybGRPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWH0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdYPWZ1bmN0aW9uKEUpe3RoaXMubHdvcmxkT3JnWD1FfSxiLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdZfSxiLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oRSl7dGhpcy5sd29ybGRPcmdZPUV9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFh9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WD1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZEV4dFg9RX0sYi5wcm90b3R5cGUuZ2V0V29ybGRFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WX0sYi5wcm90b3R5cGUuc2V0V29ybGRFeHRZPWZ1bmN0aW9uKEUpe3RoaXMubHdvcmxkRXh0WT1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1h9LGIucHJvdG90eXBlLnNldERldmljZU9yZ1g9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlT3JnWD1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1l9LGIucHJvdG90eXBlLnNldERldmljZU9yZ1k9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlT3JnWT1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFh9LGIucHJvdG90eXBlLnNldERldmljZUV4dFg9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlRXh0WD1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFl9LGIucHJvdG90eXBlLnNldERldmljZUV4dFk9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlRXh0WT1FfSxiLnByb3RvdHlwZS50cmFuc2Zvcm1YPWZ1bmN0aW9uKEUpe3ZhciBfPTAsTD10aGlzLmx3b3JsZEV4dFg7cmV0dXJuIEwhPTAmJihfPXRoaXMubGRldmljZU9yZ1grKEUtdGhpcy5sd29ybGRPcmdYKSp0aGlzLmxkZXZpY2VFeHRYL0wpLF99LGIucHJvdG90eXBlLnRyYW5zZm9ybVk9ZnVuY3Rpb24oRSl7dmFyIF89MCxMPXRoaXMubHdvcmxkRXh0WTtyZXR1cm4gTCE9MCYmKF89dGhpcy5sZGV2aWNlT3JnWSsoRS10aGlzLmx3b3JsZE9yZ1kpKnRoaXMubGRldmljZUV4dFkvTCksX30sYi5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVg9ZnVuY3Rpb24oRSl7dmFyIF89MCxMPXRoaXMubGRldmljZUV4dFg7cmV0dXJuIEwhPTAmJihfPXRoaXMubHdvcmxkT3JnWCsoRS10aGlzLmxkZXZpY2VPcmdYKSp0aGlzLmx3b3JsZEV4dFgvTCksX30sYi5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVk9ZnVuY3Rpb24oRSl7dmFyIF89MCxMPXRoaXMubGRldmljZUV4dFk7cmV0dXJuIEwhPTAmJihfPXRoaXMubHdvcmxkT3JnWSsoRS10aGlzLmxkZXZpY2VPcmdZKSp0aGlzLmx3b3JsZEV4dFkvTCksX30sYi5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVBvaW50PWZ1bmN0aW9uKEUpe3ZhciBfPW5ldyBtKHRoaXMuaW52ZXJzZVRyYW5zZm9ybVgoRS54KSx0aGlzLmludmVyc2VUcmFuc2Zvcm1ZKEUueSkpO3JldHVybiBffSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oUil7aWYoQXJyYXkuaXNBcnJheShSKSl7Zm9yKHZhciB6PTAsSz1BcnJheShSLmxlbmd0aCk7ejxSLmxlbmd0aDt6KyspS1t6XT1SW3pdO3JldHVybiBLfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oUil9dmFyIGI9digxNSksRT12KDcpLF89digwKSxMPXYoOCksTj12KDkpO2Z1bmN0aW9uIEIoKXtiLmNhbGwodGhpcyksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPUUuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5pZGVhbEVkZ2VMZW5ndGg9RS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMuc3ByaW5nQ29uc3RhbnQ9RS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PUUuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9RS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1FLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqRS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLmNvb2xpbmdGYWN0b3I9RS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9RS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5tYXhJdGVyYXRpb25zPUUuTUFYX0lURVJBVElPTlN9Qi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBqIGluIGIpQltqXT1iW2pdO0IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7Yi5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy50b3RhbEl0ZXJhdGlvbnM9MCx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wLHRoaXMudXNlRlJHcmlkVmFyaWFudD1FLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTix0aGlzLmdyaWQ9W119LEIucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSLHosSyxpdCxzdCx1dCxidD10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksbXQ9MDttdDxidC5sZW5ndGg7bXQrKylSPWJ0W210XSxSLmlkZWFsTGVuZ3RoPXRoaXMuaWRlYWxFZGdlTGVuZ3RoLFIuaXNJbnRlckdyYXBoJiYoSz1SLmdldFNvdXJjZSgpLGl0PVIuZ2V0VGFyZ2V0KCksc3Q9Ui5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx1dD1SLmdldFRhcmdldEluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiYmKFIuaWRlYWxMZW5ndGgrPXN0K3V0LTIqXy5TSU1QTEVfTk9ERV9TSVpFKSx6PVIuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCksUi5pZGVhbExlbmd0aCs9RS5ERUZBVUxUX0VER0VfTEVOR1RIKkUuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiooSy5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKStpdC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKS0yKnopKX0sQi5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDt0aGlzLmluY3JlbWVudGFsPyhSPkUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUJiYodGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvcipFLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsdGhpcy5jb29saW5nRmFjdG9yLShSLUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oRS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtRS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKnRoaXMuY29vbGluZ0ZhY3RvciooMS1FLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKSksdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PUUuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKTooUj5FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD90aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgoRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLDEtKFItRS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhFLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqKDEtRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk6dGhpcy5jb29saW5nRmFjdG9yPTEsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj10aGlzLmNvb2xpbmdGYWN0b3IsdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PUUuTUFYX05PREVfRElTUExBQ0VNRU5UKSx0aGlzLm1heEl0ZXJhdGlvbnM9TWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCo1LHRoaXMubWF4SXRlcmF0aW9ucyksdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZD10aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUqdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCx0aGlzLnJlcHVsc2lvblJhbmdlPXRoaXMuY2FsY1JlcHVsc2lvblJhbmdlKCl9LEIucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5nZXRBbGxFZGdlcygpLHosSz0wO0s8Ui5sZW5ndGg7SysrKXo9UltLXSx0aGlzLmNhbGNTcHJpbmdGb3JjZSh6LHouaWRlYWxMZW5ndGgpfSxCLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2VzPWZ1bmN0aW9uKCl7dmFyIFI9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLHo9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLEssaXQsc3QsdXQsYnQ9dGhpcy5nZXRBbGxOb2RlcygpLG10O2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlRS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmUiYmdGhpcy51cGRhdGVHcmlkKCksbXQ9bmV3IFNldCxLPTA7SzxidC5sZW5ndGg7SysrKXN0PWJ0W0tdLHRoaXMuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlKHN0LG10LFIseiksbXQuYWRkKHN0KTtlbHNlIGZvcihLPTA7SzxidC5sZW5ndGg7SysrKWZvcihzdD1idFtLXSxpdD1LKzE7aXQ8YnQubGVuZ3RoO2l0KyspdXQ9YnRbaXRdLHN0LmdldE93bmVyKCk9PXV0LmdldE93bmVyKCkmJnRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKHN0LHV0KX0sQi5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFIsej10aGlzLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCksSz0wO0s8ei5sZW5ndGg7SysrKVI9eltLXSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UoUil9LEIucHJvdG90eXBlLm1vdmVOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgUj10aGlzLmdldEFsbE5vZGVzKCkseixLPTA7SzxSLmxlbmd0aDtLKyspej1SW0tdLHoubW92ZSgpfSxCLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2U9ZnVuY3Rpb24oUix6KXt2YXIgSz1SLmdldFNvdXJjZSgpLGl0PVIuZ2V0VGFyZ2V0KCksc3QsdXQsYnQsbXQ7aWYodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmSy5nZXRDaGlsZCgpPT1udWxsJiZpdC5nZXRDaGlsZCgpPT1udWxsKVIudXBkYXRlTGVuZ3RoU2ltcGxlKCk7ZWxzZSBpZihSLnVwZGF0ZUxlbmd0aCgpLFIuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KXJldHVybjtzdD1SLmdldExlbmd0aCgpLHN0IT0wJiYodXQ9dGhpcy5zcHJpbmdDb25zdGFudCooc3QteiksYnQ9dXQqKFIubGVuZ3RoWC9zdCksbXQ9dXQqKFIubGVuZ3RoWS9zdCksSy5zcHJpbmdGb3JjZVgrPWJ0LEsuc3ByaW5nRm9yY2VZKz1tdCxpdC5zcHJpbmdGb3JjZVgtPWJ0LGl0LnNwcmluZ0ZvcmNlWS09bXQpfSxCLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2U9ZnVuY3Rpb24oUix6KXt2YXIgSz1SLmdldFJlY3QoKSxpdD16LmdldFJlY3QoKSxzdD1uZXcgQXJyYXkoMiksdXQ9bmV3IEFycmF5KDQpLGJ0LG10LHl0LGR0LGh0LHd0LFg7aWYoSy5pbnRlcnNlY3RzKGl0KSl7TC5jYWxjU2VwYXJhdGlvbkFtb3VudChLLGl0LHN0LEUuREVGQVVMVF9FREdFX0xFTkdUSC8yKSx3dD0yKnN0WzBdLFg9MipzdFsxXTt2YXIgcHQ9Ui5ub09mQ2hpbGRyZW4qei5ub09mQ2hpbGRyZW4vKFIubm9PZkNoaWxkcmVuK3oubm9PZkNoaWxkcmVuKTtSLnJlcHVsc2lvbkZvcmNlWC09cHQqd3QsUi5yZXB1bHNpb25Gb3JjZVktPXB0Klgsei5yZXB1bHNpb25Gb3JjZVgrPXB0Knd0LHoucmVwdWxzaW9uRm9yY2VZKz1wdCpYfWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmUi5nZXRDaGlsZCgpPT1udWxsJiZ6LmdldENoaWxkKCk9PW51bGw/KGJ0PWl0LmdldENlbnRlclgoKS1LLmdldENlbnRlclgoKSxtdD1pdC5nZXRDZW50ZXJZKCktSy5nZXRDZW50ZXJZKCkpOihMLmdldEludGVyc2VjdGlvbihLLGl0LHV0KSxidD11dFsyXS11dFswXSxtdD11dFszXS11dFsxXSksTWF0aC5hYnMoYnQpPEUuTUlOX1JFUFVMU0lPTl9ESVNUJiYoYnQ9Ti5zaWduKGJ0KSpFLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMobXQpPEUuTUlOX1JFUFVMU0lPTl9ESVNUJiYobXQ9Ti5zaWduKG10KSpFLk1JTl9SRVBVTFNJT05fRElTVCkseXQ9YnQqYnQrbXQqbXQsZHQ9TWF0aC5zcXJ0KHl0KSxodD10aGlzLnJlcHVsc2lvbkNvbnN0YW50KlIubm9PZkNoaWxkcmVuKnoubm9PZkNoaWxkcmVuL3l0LHd0PWh0KmJ0L2R0LFg9aHQqbXQvZHQsUi5yZXB1bHNpb25Gb3JjZVgtPXd0LFIucmVwdWxzaW9uRm9yY2VZLT1YLHoucmVwdWxzaW9uRm9yY2VYKz13dCx6LnJlcHVsc2lvbkZvcmNlWSs9WH0sQi5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihSKXt2YXIgeixLLGl0LHN0LHV0LGJ0LG10LHl0O3o9Ui5nZXRPd25lcigpLEs9KHouZ2V0UmlnaHQoKSt6LmdldExlZnQoKSkvMixpdD0oei5nZXRUb3AoKSt6LmdldEJvdHRvbSgpKS8yLHN0PVIuZ2V0Q2VudGVyWCgpLUssdXQ9Ui5nZXRDZW50ZXJZKCktaXQsYnQ9TWF0aC5hYnMoc3QpK1IuZ2V0V2lkdGgoKS8yLG10PU1hdGguYWJzKHV0KStSLmdldEhlaWdodCgpLzIsUi5nZXRPd25lcigpPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/KHl0PXouZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLChidD55dHx8bXQ+eXQpJiYoUi5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqc3QsUi5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdXQpKTooeXQ9ei5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciwoYnQ+eXR8fG10Pnl0KSYmKFIuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnN0KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQsUi5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdXQqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCkpfSxCLnByb3RvdHlwZS5pc0NvbnZlcmdlZD1mdW5jdGlvbigpe3ZhciBSLHo9ITE7cmV0dXJuIHRoaXMudG90YWxJdGVyYXRpb25zPnRoaXMubWF4SXRlcmF0aW9ucy8zJiYoej1NYXRoLmFicyh0aGlzLnRvdGFsRGlzcGxhY2VtZW50LXRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQpPDIpLFI9dGhpcy50b3RhbERpc3BsYWNlbWVudDx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9dGhpcy50b3RhbERpc3BsYWNlbWVudCxSfHx6fSxCLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJiF0aGlzLmlzU3ViTGF5b3V0JiYodGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9PXRoaXMuYW5pbWF0aW9uUGVyaW9kPyh0aGlzLnVwZGF0ZSgpLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTApOnRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zKyspfSxCLnByb3RvdHlwZS5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFIsej10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEs9MDtLPHoubGVuZ3RoO0srKylSPXpbS10sUi5ub09mQ2hpbGRyZW49Ui5nZXROb09mQ2hpbGRyZW4oKX0sQi5wcm90b3R5cGUuY2FsY0dyaWQ9ZnVuY3Rpb24oUil7dmFyIHo9MCxLPTA7ej1wYXJzZUludChNYXRoLmNlaWwoKFIuZ2V0UmlnaHQoKS1SLmdldExlZnQoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLEs9cGFyc2VJbnQoTWF0aC5jZWlsKChSLmdldEJvdHRvbSgpLVIuZ2V0VG9wKCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGl0PW5ldyBBcnJheSh6KSxzdD0wO3N0PHo7c3QrKylpdFtzdF09bmV3IEFycmF5KEspO2Zvcih2YXIgc3Q9MDtzdDx6O3N0KyspZm9yKHZhciB1dD0wO3V0PEs7dXQrKylpdFtzdF1bdXRdPW5ldyBBcnJheTtyZXR1cm4gaXR9LEIucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQ9ZnVuY3Rpb24oUix6LEspe3ZhciBpdD0wLHN0PTAsdXQ9MCxidD0wO2l0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLngteikvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHN0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLndpZHRoK1IuZ2V0UmVjdCgpLngteikvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHV0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLnktSykvdGhpcy5yZXB1bHNpb25SYW5nZSkpLGJ0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLmhlaWdodCtSLmdldFJlY3QoKS55LUspL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIG10PWl0O210PD1zdDttdCsrKWZvcih2YXIgeXQ9dXQ7eXQ8PWJ0O3l0KyspdGhpcy5ncmlkW210XVt5dF0ucHVzaChSKSxSLnNldEdyaWRDb29yZGluYXRlcyhpdCxzdCx1dCxidCl9LEIucHJvdG90eXBlLnVwZGF0ZUdyaWQ9ZnVuY3Rpb24oKXt2YXIgUix6LEs9dGhpcy5nZXRBbGxOb2RlcygpO2Zvcih0aGlzLmdyaWQ9dGhpcy5jYWxjR3JpZCh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpLFI9MDtSPEsubGVuZ3RoO1IrKyl6PUtbUl0sdGhpcy5hZGROb2RlVG9HcmlkKHosdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldExlZnQoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0VG9wKCkpfSxCLnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGU9ZnVuY3Rpb24oUix6LEssaXQpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zJUUuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJkt8fGl0KXt2YXIgc3Q9bmV3IFNldDtSLnN1cnJvdW5kaW5nPW5ldyBBcnJheTtmb3IodmFyIHV0LGJ0PXRoaXMuZ3JpZCxtdD1SLnN0YXJ0WC0xO210PFIuZmluaXNoWCsyO210KyspZm9yKHZhciB5dD1SLnN0YXJ0WS0xO3l0PFIuZmluaXNoWSsyO3l0KyspaWYoIShtdDwwfHx5dDwwfHxtdD49YnQubGVuZ3RofHx5dD49YnRbMF0ubGVuZ3RoKSl7Zm9yKHZhciBkdD0wO2R0PGJ0W210XVt5dF0ubGVuZ3RoO2R0KyspaWYodXQ9YnRbbXRdW3l0XVtkdF0sIShSLmdldE93bmVyKCkhPXV0LmdldE93bmVyKCl8fFI9PXV0KSYmIXouaGFzKHV0KSYmIXN0Lmhhcyh1dCkpe3ZhciBodD1NYXRoLmFicyhSLmdldENlbnRlclgoKS11dC5nZXRDZW50ZXJYKCkpLShSLmdldFdpZHRoKCkvMit1dC5nZXRXaWR0aCgpLzIpLHd0PU1hdGguYWJzKFIuZ2V0Q2VudGVyWSgpLXV0LmdldENlbnRlclkoKSktKFIuZ2V0SGVpZ2h0KCkvMit1dC5nZXRIZWlnaHQoKS8yKTtodDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmd3Q8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnN0LmFkZCh1dCl9fVIuc3Vycm91bmRpbmc9W10uY29uY2F0KG0oc3QpKX1mb3IobXQ9MDttdDxSLnN1cnJvdW5kaW5nLmxlbmd0aDttdCsrKXRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKFIsUi5zdXJyb3VuZGluZ1ttdF0pfSxCLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZi5leHBvcnRzPUJ9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDEpLGI9dig3KTtmdW5jdGlvbiBFKEwsTixCKXttLmNhbGwodGhpcyxMLE4sQiksdGhpcy5pZGVhbExlbmd0aD1iLkRFRkFVTFRfRURHRV9MRU5HVEh9RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBfIGluIG0pRVtfXT1tW19dO2YuZXhwb3J0cz1FfSxmdW5jdGlvbihmLHAsdil7dmFyIG09digzKTtmdW5jdGlvbiBiKF8sTCxOLEIpe20uY2FsbCh0aGlzLF8sTCxOLEIpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MCx0aGlzLnN0YXJ0WD0wLHRoaXMuZmluaXNoWD0wLHRoaXMuc3RhcnRZPTAsdGhpcy5maW5pc2hZPTAsdGhpcy5zdXJyb3VuZGluZz1bXX1iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIEUgaW4gbSliW0VdPW1bRV07Yi5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKF8sTCxOLEIpe3RoaXMuc3RhcnRYPV8sdGhpcy5maW5pc2hYPUwsdGhpcy5zdGFydFk9Tix0aGlzLmZpbmlzaFk9Qn0sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKGIsRSl7dGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9PW51bGwmJkUhPT1udWxsJiYodGhpcy5oZWlnaHQ9RSx0aGlzLndpZHRoPWIpfW0ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG0ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5tYXA9e30sdGhpcy5rZXlzPVtdfWIucHJvdG90eXBlLnB1dD1mdW5jdGlvbihFLF8pe3ZhciBMPW0uY3JlYXRlSUQoRSk7dGhpcy5jb250YWlucyhMKXx8KHRoaXMubWFwW0xdPV8sdGhpcy5rZXlzLnB1c2goRSkpfSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihFKXtyZXR1cm4gbS5jcmVhdGVJRChFKSx0aGlzLm1hcFtFXSE9bnVsbH0sYi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKEUpe3ZhciBfPW0uY3JlYXRlSUQoRSk7cmV0dXJuIHRoaXMubWFwW19dfSxiLnByb3RvdHlwZS5rZXlTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzfSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMTQpO2Z1bmN0aW9uIGIoKXt0aGlzLnNldD17fX1iLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oRSl7dmFyIF89bS5jcmVhdGVJRChFKTt0aGlzLmNvbnRhaW5zKF8pfHwodGhpcy5zZXRbX109RSl9LGIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihFKXtkZWxldGUgdGhpcy5zZXRbbS5jcmVhdGVJRChFKV19LGIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGIucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnNldFttLmNyZWF0ZUlEKEUpXT09RX0sYi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGIucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0sYi5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oRSl7Zm9yKHZhciBfPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxMPV8ubGVuZ3RoLE49MDtOPEw7TisrKUUucHVzaCh0aGlzLnNldFtfW05dXSl9LGIucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0sYi5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKEUpe2Zvcih2YXIgXz1FLmxlbmd0aCxMPTA7TDxfO0wrKyl7dmFyIE49RVtMXTt0aGlzLmFkZChOKX19LGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdil7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBMKE4sQil7Zm9yKHZhciBqPTA7ajxCLmxlbmd0aDtqKyspe3ZhciBSPUJbal07Ui5lbnVtZXJhYmxlPVIuZW51bWVyYWJsZXx8ITEsUi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFImJihSLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixSLmtleSxSKX19cmV0dXJuIGZ1bmN0aW9uKE4sQixqKXtyZXR1cm4gQiYmTChOLnByb3RvdHlwZSxCKSxqJiZMKE4saiksTn19KCk7ZnVuY3Rpb24gYihMLE4pe2lmKCEoTCBpbnN0YW5jZW9mIE4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBFPXYoMTEpLF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBMKE4sQil7Yih0aGlzLEwpLChCIT09bnVsbHx8QiE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgaj12b2lkIDA7TiBpbnN0YW5jZW9mIEU/aj1OLnNpemUoKTpqPU4ubGVuZ3RoLHRoaXMuX3F1aWNrc29ydChOLDAsai0xKX1yZXR1cm4gbShMLFt7a2V5OiJfcXVpY2tzb3J0Iix2YWx1ZTpmdW5jdGlvbihCLGosUil7aWYoajxSKXt2YXIgej10aGlzLl9wYXJ0aXRpb24oQixqLFIpO3RoaXMuX3F1aWNrc29ydChCLGoseiksdGhpcy5fcXVpY2tzb3J0KEIseisxLFIpfX19LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOmZ1bmN0aW9uKEIsaixSKXtmb3IodmFyIHo9dGhpcy5fZ2V0KEIsaiksSz1qLGl0PVI7Oyl7Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih6LHRoaXMuX2dldChCLGl0KSk7KWl0LS07Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoQixLKSx6KTspSysrO2lmKEs8aXQpdGhpcy5fc3dhcChCLEssaXQpLEsrKyxpdC0tO2Vsc2UgcmV0dXJuIGl0fX19LHtrZXk6Il9nZXQiLHZhbHVlOmZ1bmN0aW9uKEIsail7cmV0dXJuIEIgaW5zdGFuY2VvZiBFP0IuZ2V0X29iamVjdF9hdChqKTpCW2pdfX0se2tleToiX3NldCIsdmFsdWU6ZnVuY3Rpb24oQixqLFIpe0IgaW5zdGFuY2VvZiBFP0Iuc2V0X29iamVjdF9hdChqLFIpOkJbal09Un19LHtrZXk6Il9zd2FwIix2YWx1ZTpmdW5jdGlvbihCLGosUil7dmFyIHo9dGhpcy5fZ2V0KEIsaik7dGhpcy5fc2V0KEIsaix0aGlzLl9nZXQoQixSKSksdGhpcy5fc2V0KEIsUix6KX19LHtrZXk6Il9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihCLGope3JldHVybiBqPkJ9fV0pLEx9KCk7Zi5leHBvcnRzPV99LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIF8oTCxOKXtmb3IodmFyIEI9MDtCPE4ubGVuZ3RoO0IrKyl7dmFyIGo9TltCXTtqLmVudW1lcmFibGU9ai5lbnVtZXJhYmxlfHwhMSxqLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaiYmKGoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLGoua2V5LGopfX1yZXR1cm4gZnVuY3Rpb24oTCxOLEIpe3JldHVybiBOJiZfKEwucHJvdG90eXBlLE4pLEImJl8oTCxCKSxMfX0oKTtmdW5jdGlvbiBiKF8sTCl7aWYoIShfIGluc3RhbmNlb2YgTCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKEwsTil7dmFyIEI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsaj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsUj1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7Yih0aGlzLF8pLHRoaXMuc2VxdWVuY2UxPUwsdGhpcy5zZXF1ZW5jZTI9Tix0aGlzLm1hdGNoX3Njb3JlPUIsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWosdGhpcy5nYXBfcGVuYWx0eT1SLHRoaXMuaU1heD1MLmxlbmd0aCsxLHRoaXMuak1heD1OLmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHo9MDt6PHRoaXMuaU1heDt6Kyspe3RoaXMuZ3JpZFt6XT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIEs9MDtLPHRoaXMuak1heDtLKyspdGhpcy5ncmlkW3pdW0tdPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgaXQ9MDtpdDx0aGlzLmlNYXg7aXQrKyl7dGhpcy50cmFjZWJhY2tHcmlkW2l0XT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIHN0PTA7c3Q8dGhpcy5qTWF4O3N0KyspdGhpcy50cmFjZWJhY2tHcmlkW2l0XVtzdF09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBtKF8sW3trZXk6ImdldFNjb3JlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjb3JlfX0se2tleToiZ2V0QWxpZ25tZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfX0se2tleToiY29tcHV0ZUdyaWRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgTj0xO048dGhpcy5qTWF4O04rKyl0aGlzLmdyaWRbMF1bTl09dGhpcy5ncmlkWzBdW04tMV0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbMF1bTl09WyExLCExLCEwXTtmb3IodmFyIEI9MTtCPHRoaXMuaU1heDtCKyspdGhpcy5ncmlkW0JdWzBdPXRoaXMuZ3JpZFtCLTFdWzBdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkW0JdWzBdPVshMSwhMCwhMV07Zm9yKHZhciBqPTE7ajx0aGlzLmlNYXg7aisrKWZvcih2YXIgUj0xO1I8dGhpcy5qTWF4O1IrKyl7dmFyIHo9dm9pZCAwO3RoaXMuc2VxdWVuY2UxW2otMV09PT10aGlzLnNlcXVlbmNlMltSLTFdP3o9dGhpcy5ncmlkW2otMV1bUi0xXSt0aGlzLm1hdGNoX3Njb3JlOno9dGhpcy5ncmlkW2otMV1bUi0xXSt0aGlzLm1pc21hdGNoX3BlbmFsdHk7dmFyIEs9dGhpcy5ncmlkW2otMV1bUl0rdGhpcy5nYXBfcGVuYWx0eSxpdD10aGlzLmdyaWRbal1bUi0xXSt0aGlzLmdhcF9wZW5hbHR5LHN0PVt6LEssaXRdLHV0PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHN0KTt0aGlzLmdyaWRbal1bUl09c3RbdXRbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtqXVtSXT1bdXQuaW5jbHVkZXMoMCksdXQuaW5jbHVkZXMoMSksdXQuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19fSx7a2V5OiJhbGlnbm1lbnRUcmFjZWJhY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIE49W107Zm9yKE4ucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTtOWzBdOyl7dmFyIEI9TlswXSxqPXRoaXMudHJhY2ViYWNrR3JpZFtCLnBvc1swXV1bQi5wb3NbMV1dO2pbMF0mJk4ucHVzaCh7cG9zOltCLnBvc1swXS0xLEIucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbQi5wb3NbMF0tMV0rQi5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbQi5wb3NbMV0tMV0rQi5zZXEyfSksalsxXSYmTi5wdXNoKHtwb3M6W0IucG9zWzBdLTEsQi5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbQi5wb3NbMF0tMV0rQi5zZXExLHNlcTI6Ii0iK0Iuc2VxMn0pLGpbMl0mJk4ucHVzaCh7cG9zOltCLnBvc1swXSxCLnBvc1sxXS0xXSxzZXExOiItIitCLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltCLnBvc1sxXS0xXStCLnNlcTJ9KSxCLnBvc1swXT09PTAmJkIucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpCLnNlcTEsc2VxdWVuY2UyOkIuc2VxMn0pLE4uc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfX0se2tleToiZ2V0QWxsSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oTixCKXtmb3IodmFyIGo9W10sUj0tMTsoUj1OLmluZGV4T2YoQixSKzEpKSE9PS0xOylqLnB1c2goUik7cmV0dXJuIGp9fSx7a2V5OiJhcnJheUFsbE1heEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmdldEFsbEluZGV4ZXMoTixNYXRoLm1heC5hcHBseShudWxsLE4pKX19XSksX30oKTtmLmV4cG9ydHM9RX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPWZ1bmN0aW9uKCl7fTttLkZETGF5b3V0PXYoMTgpLG0uRkRMYXlvdXRDb25zdGFudHM9dig3KSxtLkZETGF5b3V0RWRnZT12KDE5KSxtLkZETGF5b3V0Tm9kZT12KDIwKSxtLkRpbWVuc2lvbkQ9digyMSksbS5IYXNoTWFwPXYoMjIpLG0uSGFzaFNldD12KDIzKSxtLklHZW9tZXRyeT12KDgpLG0uSU1hdGg9dig5KSxtLkludGVnZXI9digxMCksbS5Qb2ludD12KDEyKSxtLlBvaW50RD12KDQpLG0uUmFuZG9tU2VlZD12KDE2KSxtLlJlY3RhbmdsZUQ9digxMyksbS5UcmFuc2Zvcm09digxNyksbS5VbmlxdWVJREdlbmVyZXRvcj12KDE0KSxtLlF1aWNrc29ydD12KDI0KSxtLkxpbmtlZExpc3Q9digxMSksbS5MR3JhcGhPYmplY3Q9digyKSxtLkxHcmFwaD12KDUpLG0uTEVkZ2U9digxKSxtLkxHcmFwaE1hbmFnZXI9dig2KSxtLkxOb2RlPXYoMyksbS5MYXlvdXQ9digxNSksbS5MYXlvdXRDb25zdGFudHM9digwKSxtLk5lZWRsZW1hbld1bnNjaD12KDI1KSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oKXt0aGlzLmxpc3RlbmVycz1bXX12YXIgYj1tLnByb3RvdHlwZTtiLmFkZExpc3RlbmVyPWZ1bmN0aW9uKEUsXyl7dGhpcy5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6RSxjYWxsYmFjazpffSl9LGIucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRSxfKXtmb3IodmFyIEw9dGhpcy5saXN0ZW5lcnMubGVuZ3RoO0w+PTA7TC0tKXt2YXIgTj10aGlzLmxpc3RlbmVyc1tMXTtOLmV2ZW50PT09RSYmTi5jYWxsYmFjaz09PV8mJnRoaXMubGlzdGVuZXJzLnNwbGljZShMLDEpfX0sYi5lbWl0PWZ1bmN0aW9uKEUsXyl7Zm9yKHZhciBMPTA7TDx0aGlzLmxpc3RlbmVycy5sZW5ndGg7TCsrKXt2YXIgTj10aGlzLmxpc3RlbmVyc1tMXTtFPT09Ti5ldmVudCYmTi5jYWxsYmFjayhfKX19LGYuZXhwb3J0cz1tfV0pfSl9KFVndCkpLFVndC5leHBvcnRzfXZhciBaanQ7ZnVuY3Rpb24gdVdlKCl7cmV0dXJuIFpqdHx8KFpqdD0xLGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKHAsdil7aS5leHBvcnRzPXYoY1dlKCkpfSkoZDAsZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKHApe3ZhciB2PXt9O2Z1bmN0aW9uIG0oYil7aWYodltiXSlyZXR1cm4gdltiXS5leHBvcnRzO3ZhciBFPXZbYl09e2k6YixsOiExLGV4cG9ydHM6e319O3JldHVybiBwW2JdLmNhbGwoRS5leHBvcnRzLEUsRS5leHBvcnRzLG0pLEUubD0hMCxFLmV4cG9ydHN9cmV0dXJuIG0ubT1wLG0uYz12LG0uaT1mdW5jdGlvbihiKXtyZXR1cm4gYn0sbS5kPWZ1bmN0aW9uKGIsRSxfKXttLm8oYixFKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsRSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Ol99KX0sbS5uPWZ1bmN0aW9uKGIpe3ZhciBFPWImJmIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBiLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiBtLmQoRSwiYSIsRSksRX0sbS5vPWZ1bmN0aW9uKGIsRSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLEUpfSxtLnA9IiIsbShtLnM9Nyl9KFtmdW5jdGlvbihwLHYpe3AuZXhwb3J0cz1mfSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9bSgwKS5GRExheW91dENvbnN0YW50cztmdW5jdGlvbiBFKCl7fWZvcih2YXIgXyBpbiBiKUVbX109YltfXTtFLkRFRkFVTFRfVVNFX01VTFRJX0xFVkVMX1NDQUxJTkc9ITEsRS5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OPWIuREVGQVVMVF9FREdFX0xFTkdUSCxFLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT049NjAsRS5USUxFPSEwLEUuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9MTAsRS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPTEwLEUuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITEscC5leHBvcnRzPUV9LGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1tKDApLkZETGF5b3V0RWRnZTtmdW5jdGlvbiBFKEwsTixCKXtiLmNhbGwodGhpcyxMLE4sQil9RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBfIGluIGIpRVtfXT1iW19dO3AuZXhwb3J0cz1FfSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9bSgwKS5MR3JhcGg7ZnVuY3Rpb24gRShMLE4sQil7Yi5jYWxsKHRoaXMsTCxOLEIpfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBiKUVbX109YltfXTtwLmV4cG9ydHM9RX0sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkuTEdyYXBoTWFuYWdlcjtmdW5jdGlvbiBFKEwpe2IuY2FsbCh0aGlzLEwpfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBiKUVbX109YltfXTtwLmV4cG9ydHM9RX0sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkuRkRMYXlvdXROb2RlLEU9bSgwKS5JTWF0aDtmdW5jdGlvbiBfKE4sQixqLFIpe2IuY2FsbCh0aGlzLE4sQixqLFIpfV8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgTCBpbiBiKV9bTF09YltMXTtfLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7dGhpcy5kaXNwbGFjZW1lbnRYPU4uY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5ub09mQ2hpbGRyZW4sdGhpcy5kaXNwbGFjZW1lbnRZPU4uY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5ub09mQ2hpbGRyZW4sTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKT5OLmNvb2xpbmdGYWN0b3IqTi5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRYPU4uY29vbGluZ0ZhY3RvcipOLm1heE5vZGVEaXNwbGFjZW1lbnQqRS5zaWduKHRoaXMuZGlzcGxhY2VtZW50WCkpLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSk+Ti5jb29saW5nRmFjdG9yKk4ubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WT1OLmNvb2xpbmdGYWN0b3IqTi5tYXhOb2RlRGlzcGxhY2VtZW50KkUuc2lnbih0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLmNoaWxkPT1udWxsP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/dGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSk6dGhpcy5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpLE4udG90YWxEaXNwbGFjZW1lbnQrPU1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkrTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTB9LF8ucHJvdG90eXBlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW49ZnVuY3Rpb24oTixCKXtmb3IodmFyIGo9dGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCksUix6PTA7ejxqLmxlbmd0aDt6KyspUj1qW3pdLFIuZ2V0Q2hpbGQoKT09bnVsbD8oUi5tb3ZlQnkoTixCKSxSLmRpc3BsYWNlbWVudFgrPU4sUi5kaXNwbGFjZW1lbnRZKz1CKTpSLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4oTixCKX0sXy5wcm90b3R5cGUuc2V0UHJlZDE9ZnVuY3Rpb24oTil7dGhpcy5wcmVkMT1OfSxfLnByb3RvdHlwZS5nZXRQcmVkMT1mdW5jdGlvbigpe3JldHVybiBwcmVkMX0sXy5wcm90b3R5cGUuZ2V0UHJlZDI9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDJ9LF8ucHJvdG90eXBlLnNldE5leHQ9ZnVuY3Rpb24oTil7dGhpcy5uZXh0PU59LF8ucHJvdG90eXBlLmdldE5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV4dH0sXy5wcm90b3R5cGUuc2V0UHJvY2Vzc2VkPWZ1bmN0aW9uKE4pe3RoaXMucHJvY2Vzc2VkPU59LF8ucHJvdG90eXBlLmlzUHJvY2Vzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3NlZH0scC5leHBvcnRzPV99LGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1tKDApLkZETGF5b3V0LEU9bSg0KSxfPW0oMyksTD1tKDUpLE49bSgyKSxCPW0oMSksaj1tKDApLkZETGF5b3V0Q29uc3RhbnRzLFI9bSgwKS5MYXlvdXRDb25zdGFudHMsej1tKDApLlBvaW50LEs9bSgwKS5Qb2ludEQsaXQ9bSgwKS5MYXlvdXQsc3Q9bSgwKS5JbnRlZ2VyLHV0PW0oMCkuSUdlb21ldHJ5LGJ0PW0oMCkuTEdyYXBoLG10PW0oMCkuVHJhbnNmb3JtO2Z1bmN0aW9uIHl0KCl7Yi5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9fXl0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIGR0IGluIGIpeXRbZHRdPWJbZHRdO3l0LnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgaHQ9bmV3IEUodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPWh0LGh0fSx5dC5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24oaHQpe3JldHVybiBuZXcgXyhudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLGh0KX0seXQucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24oaHQpe3JldHVybiBuZXcgTCh0aGlzLmdyYXBoTWFuYWdlcixodCl9LHl0LnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKGh0KXtyZXR1cm4gbmV3IE4obnVsbCxudWxsLGh0KX0seXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7Yi5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy5pc1N1YkxheW91dHx8KEIuREVGQVVMVF9FREdFX0xFTkdUSDwxMD90aGlzLmlkZWFsRWRnZUxlbmd0aD0xMDp0aGlzLmlkZWFsRWRnZUxlbmd0aD1CLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPUIuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5zcHJpbmdDb25zdGFudD1qLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RILHRoaXMucmVwdWxzaW9uQ29uc3RhbnQ9ai5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLmdyYXZpdHlDb25zdGFudD1qLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWouREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWouREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWouREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLnBydW5lZE5vZGVzQWxsPVtdLHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zPTAsdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnM9MCx0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSExLHRoaXMuY29vbGluZ0N5Y2xlPTAsdGhpcy5tYXhDb29saW5nQ3ljbGU9dGhpcy5tYXhJdGVyYXRpb25zL2ouQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9ELHRoaXMuZmluYWxUZW1wZXJhdHVyZT1qLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRC90aGlzLm1heEl0ZXJhdGlvbnMsdGhpcy5jb29saW5nQWRqdXN0ZXI9MSl9LHl0LnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oKXt2YXIgaHQ9Ui5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ7cmV0dXJuIGh0JiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LHl0LnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5ub2Rlc1dpdGhHcmF2aXR5PXRoaXMuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25UbygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSksdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLmNhbGNJZGVhbEVkZ2VMZW5ndGhzKCksdGhpcy5pbmNyZW1lbnRhbCl7aWYoQi5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCl7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgd3Q9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLFg9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbih4dCl7cmV0dXJuIHd0Lmhhcyh4dCl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihYKX19ZWxzZXt2YXIgaHQ9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoaHQubGVuZ3RoPjApdGhpcy5wb3NpdGlvbk5vZGVzUmFkaWFsbHkoaHQpO2Vsc2V7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgd3Q9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLFg9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihwdCl7cmV0dXJuIHd0LmhhcyhwdCl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihYKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSx0aGlzLnJ1blNwcmluZ0VtYmVkZGVyKCksITB9LHl0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWouQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBodD1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksd3Q9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gaHQuaGFzKFUpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24od3QpLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuY29vbGluZ0ZhY3Rvcj1qLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUx9ZWxzZSB0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSEwO3RoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zKyt9aWYodGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpcmV0dXJuITA7dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTAmJih0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSksdGhpcy5jb29saW5nRmFjdG9yPWouREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBYPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQscHQ9dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNUcmVlR3Jvd2luZ3x8dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNHcm93dGhGaW5pc2hlZDtyZXR1cm4gdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMuY2FsY1NwcmluZ0ZvcmNlcygpLHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhYLHB0KSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzKCksdGhpcy5tb3ZlTm9kZXMoKSx0aGlzLmFuaW1hdGUoKSwhMX0seXQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIGh0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksd3Q9e30sWD0wO1g8aHQubGVuZ3RoO1grKyl7dmFyIHB0PWh0W1hdLnJlY3QsVT1odFtYXS5pZDt3dFtVXT17aWQ6VSx4OnB0LmdldENlbnRlclgoKSx5OnB0LmdldENlbnRlclkoKSx3OnB0LndpZHRoLGg6cHQuaGVpZ2h0fX1yZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5ydW5TcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZD0yNSx0aGlzLmFuaW1hdGlvblBlcmlvZD10aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q7dmFyIGh0PSExO2lmKGouQU5JTUFURT09PSJkdXJpbmciKXRoaXMuZW1pdCgibGF5b3V0c3RhcnRlZCIpO2Vsc2V7Zm9yKDshaHQ7KWh0PXRoaXMudGljaygpO3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpfX0seXQucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgaHQ9W10sd3QsWD10aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKSxwdD1YLmxlbmd0aCxVO2ZvcihVPTA7VTxwdDtVKyspd3Q9WFtVXSx3dC51cGRhdGVDb25uZWN0ZWQoKSx3dC5pc0Nvbm5lY3RlZHx8KGh0PWh0LmNvbmNhdCh3dC5nZXROb2RlcygpKSk7cmV0dXJuIGh0fSx5dC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50cz1mdW5jdGlvbigpe3ZhciBodD1bXTtodD1odC5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7dmFyIHd0PW5ldyBTZXQsWDtmb3IoWD0wO1g8aHQubGVuZ3RoO1grKyl7dmFyIHB0PWh0W1hdO2lmKCF3dC5oYXMocHQpKXt2YXIgVT1wdC5nZXRTb3VyY2UoKSx4dD1wdC5nZXRUYXJnZXQoKTtpZihVPT14dClwdC5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgSykscHQuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IEspLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMocHQpLHd0LmFkZChwdCk7ZWxzZXt2YXIgbnQ9W107aWYobnQ9bnQuY29uY2F0KFUuZ2V0RWRnZUxpc3RUb05vZGUoeHQpKSxudD1udC5jb25jYXQoeHQuZ2V0RWRnZUxpc3RUb05vZGUoVSkpLCF3dC5oYXMobnRbMF0pKXtpZihudC5sZW5ndGg+MSl7dmFyIE90O2ZvcihPdD0wO090PG50Lmxlbmd0aDtPdCsrKXt2YXIgTnQ9bnRbT3RdO050LmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBLKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKE50KX19bnQuZm9yRWFjaChmdW5jdGlvbihxdCl7d3QuYWRkKHF0KX0pfX19aWYod3Quc2l6ZT09aHQubGVuZ3RoKWJyZWFrfX0seXQucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihodCl7Zm9yKHZhciB3dD1uZXcgeigwLDApLFg9TWF0aC5jZWlsKE1hdGguc3FydChodC5sZW5ndGgpKSxwdD0wLFU9MCx4dD0wLG50PW5ldyBLKDAsMCksT3Q9MDtPdDxodC5sZW5ndGg7T3QrKyl7T3QlWD09MCYmKHh0PTAsVT1wdCxPdCE9MCYmKFUrPUIuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTikscHQ9MCk7dmFyIE50PWh0W090XSxxdD1pdC5maW5kQ2VudGVyT2ZUcmVlKE50KTt3dC54PXh0LHd0Lnk9VSxudD15dC5yYWRpYWxMYXlvdXQoTnQscXQsd3QpLG50Lnk+cHQmJihwdD1NYXRoLmZsb29yKG50LnkpKSx4dD1NYXRoLmZsb29yKG50LngrQi5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKX10aGlzLnRyYW5zZm9ybShuZXcgSyhSLldPUkxEX0NFTlRFUl9YLW50LngvMixSLldPUkxEX0NFTlRFUl9ZLW50LnkvMikpfSx5dC5yYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oaHQsd3QsWCl7dmFyIHB0PU1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUoaHQpLEIuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7eXQuYnJhbmNoUmFkaWFsTGF5b3V0KHd0LG51bGwsMCwzNTksMCxwdCk7dmFyIFU9YnQuY2FsY3VsYXRlQm91bmRzKGh0KSx4dD1uZXcgbXQ7eHQuc2V0RGV2aWNlT3JnWChVLmdldE1pblgoKSkseHQuc2V0RGV2aWNlT3JnWShVLmdldE1pblkoKSkseHQuc2V0V29ybGRPcmdYKFgueCkseHQuc2V0V29ybGRPcmdZKFgueSk7Zm9yKHZhciBudD0wO250PGh0Lmxlbmd0aDtudCsrKXt2YXIgT3Q9aHRbbnRdO090LnRyYW5zZm9ybSh4dCl9dmFyIE50PW5ldyBLKFUuZ2V0TWF4WCgpLFUuZ2V0TWF4WSgpKTtyZXR1cm4geHQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KE50KX0seXQuYnJhbmNoUmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGh0LHd0LFgscHQsVSx4dCl7dmFyIG50PShwdC1YKzEpLzI7bnQ8MCYmKG50Kz0xODApO3ZhciBPdD0obnQrWCklMzYwLE50PU90KnV0LlRXT19QSS8zNjAscXQ9VSpNYXRoLmNvcyhOdCksQ3Q9VSpNYXRoLnNpbihOdCk7aHQuc2V0Q2VudGVyKHF0LEN0KTt2YXIgWj1bXTtaPVouY29uY2F0KGh0LmdldEVkZ2VzKCkpO3ZhciBUdD1aLmxlbmd0aDt3dCE9bnVsbCYmVHQtLTtmb3IodmFyIEh0PTAsSXQ9Wi5sZW5ndGgsRnQsa2U9aHQuZ2V0RWRnZXNCZXR3ZWVuKHd0KTtrZS5sZW5ndGg+MTspe3ZhciBwbj1rZVswXTtrZS5zcGxpY2UoMCwxKTt2YXIgTWU9Wi5pbmRleE9mKHBuKTtNZT49MCYmWi5zcGxpY2UoTWUsMSksSXQtLSxUdC0tfXd0IT1udWxsP0Z0PShaLmluZGV4T2Yoa2VbMF0pKzEpJUl0OkZ0PTA7Zm9yKHZhciB2ZT1NYXRoLmFicyhwdC1YKS9UdCxHZT1GdDtIdCE9VHQ7R2U9KytHZSVJdCl7dmFyIEtlPVpbR2VdLmdldE90aGVyRW5kKGh0KTtpZihLZSE9d3Qpe3ZhciB3ZT0oWCtIdCp2ZSklMzYwLF9lPSh3ZSt2ZSklMzYwO3l0LmJyYW5jaFJhZGlhbExheW91dChLZSxodCx3ZSxfZSxVK3h0LHh0KSxIdCsrfX19LHl0Lm1heERpYWdvbmFsSW5UcmVlPWZ1bmN0aW9uKGh0KXtmb3IodmFyIHd0PXN0Lk1JTl9WQUxVRSxYPTA7WDxodC5sZW5ndGg7WCsrKXt2YXIgcHQ9aHRbWF0sVT1wdC5nZXREaWFnb25hbCgpO1U+d3QmJih3dD1VKX1yZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0seXQucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaHQ9dGhpcyx3dD17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBYPVtdLHB0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksVT0wO1U8cHQubGVuZ3RoO1UrKyl7dmFyIHh0PXB0W1VdLG50PXh0LmdldFBhcmVudCgpO3RoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbih4dCk9PT0wJiYobnQuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChudCkpJiZYLnB1c2goeHQpfWZvcih2YXIgVT0wO1U8WC5sZW5ndGg7VSsrKXt2YXIgeHQ9WFtVXSxPdD14dC5nZXRQYXJlbnQoKS5pZDt0eXBlb2Ygd3RbT3RdPiJ1IiYmKHd0W090XT1bXSksd3RbT3RdPXd0W090XS5jb25jYXQoeHQpfU9iamVjdC5rZXlzKHd0KS5mb3JFYWNoKGZ1bmN0aW9uKE50KXtpZih3dFtOdF0ubGVuZ3RoPjEpe3ZhciBxdD0iRHVtbXlDb21wb3VuZF8iK050O2h0Lm1lbWJlckdyb3Vwc1txdF09d3RbTnRdO3ZhciBDdD13dFtOdF1bMF0uZ2V0UGFyZW50KCksWj1uZXcgTChodC5ncmFwaE1hbmFnZXIpO1ouaWQ9cXQsWi5wYWRkaW5nTGVmdD1DdC5wYWRkaW5nTGVmdHx8MCxaLnBhZGRpbmdSaWdodD1DdC5wYWRkaW5nUmlnaHR8fDAsWi5wYWRkaW5nQm90dG9tPUN0LnBhZGRpbmdCb3R0b218fDAsWi5wYWRkaW5nVG9wPUN0LnBhZGRpbmdUb3B8fDAsaHQuaWRUb0R1bW15Tm9kZVtxdF09Wjt2YXIgVHQ9aHQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGh0Lm5ld0dyYXBoKCksWiksSHQ9Q3QuZ2V0Q2hpbGQoKTtIdC5hZGQoWik7Zm9yKHZhciBJdD0wO0l0PHd0W050XS5sZW5ndGg7SXQrKyl7dmFyIEZ0PXd0W050XVtJdF07SHQucmVtb3ZlKEZ0KSxUdC5hZGQoRnQpfX19KX0seXQucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIGh0PXt9LHd0PXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBYPTA7WDx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO1grKyl3dFt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltYXSxodFt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbWF0uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW1hdLmdldENoaWxkKCkpLHRoaXMuY29tcG91bmRPcmRlcltYXS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoaHQsd3QpfSx5dC5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBodD10aGlzLHd0PXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgcHQ9aHQuaWRUb0R1bW15Tm9kZVtYXTt3dFtYXT1odC50aWxlTm9kZXMoaHQubWVtYmVyR3JvdXBzW1hdLHB0LnBhZGRpbmdMZWZ0K3B0LnBhZGRpbmdSaWdodCkscHQucmVjdC53aWR0aD13dFtYXS53aWR0aCxwdC5yZWN0LmhlaWdodD13dFtYXS5oZWlnaHR9KX0seXQucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIGh0PXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtodD49MDtodC0tKXt2YXIgd3Q9dGhpcy5jb21wb3VuZE9yZGVyW2h0XSxYPXd0LmlkLHB0PXd0LnBhZGRpbmdMZWZ0LFU9d3QucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tYXSx3dC5yZWN0Lngsd3QucmVjdC55LHB0LFUpfX0seXQucHJvdG90eXBlLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBodD10aGlzLHd0PXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyh3dCkuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgcHQ9aHQuaWRUb0R1bW15Tm9kZVtYXSxVPXB0LnBhZGRpbmdMZWZ0LHh0PXB0LnBhZGRpbmdUb3A7aHQuYWRqdXN0TG9jYXRpb25zKHd0W1hdLHB0LnJlY3QueCxwdC5yZWN0LnksVSx4dCl9KX0seXQucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihodCl7dmFyIHd0PWh0LmlkO2lmKHRoaXMudG9CZVRpbGVkW3d0XSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbd3RdO3ZhciBYPWh0LmdldENoaWxkKCk7aWYoWD09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbd3RdPSExLCExO2Zvcih2YXIgcHQ9WC5nZXROb2RlcygpLFU9MDtVPHB0Lmxlbmd0aDtVKyspe3ZhciB4dD1wdFtVXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoeHQpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW3d0XT0hMSwhMTtpZih4dC5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFt4dC5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKHh0KSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbd3RdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFt3dF09ITAsITB9LHl0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKGh0KXtodC5pZDtmb3IodmFyIHd0PWh0LmdldEVkZ2VzKCksWD0wLHB0PTA7cHQ8d3QubGVuZ3RoO3B0Kyspe3ZhciBVPXd0W3B0XTtVLmdldFNvdXJjZSgpLmlkIT09VS5nZXRUYXJnZXQoKS5pZCYmKFg9WCsxKX1yZXR1cm4gWH0seXQucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oaHQpe3ZhciB3dD10aGlzLmdldE5vZGVEZWdyZWUoaHQpO2lmKGh0LmdldENoaWxkKCk9PW51bGwpcmV0dXJuIHd0O2Zvcih2YXIgWD1odC5nZXRDaGlsZCgpLmdldE5vZGVzKCkscHQ9MDtwdDxYLmxlbmd0aDtwdCsrKXt2YXIgVT1YW3B0XTt3dCs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFUpfXJldHVybiB3dH0seXQucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0seXQucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKGh0KXtmb3IodmFyIHd0PTA7d3Q8aHQubGVuZ3RoO3d0Kyspe3ZhciBYPWh0W3d0XTtYLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoWC5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKFgpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChYKX19LHl0LnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24oaHQsd3QsWCxwdCxVKXt3dCs9cHQsWCs9VTtmb3IodmFyIHh0PXd0LG50PTA7bnQ8aHQucm93cy5sZW5ndGg7bnQrKyl7dmFyIE90PWh0LnJvd3NbbnRdO3d0PXh0O2Zvcih2YXIgTnQ9MCxxdD0wO3F0PE90Lmxlbmd0aDtxdCsrKXt2YXIgQ3Q9T3RbcXRdO0N0LnJlY3QueD13dCxDdC5yZWN0Lnk9WCx3dCs9Q3QucmVjdC53aWR0aCtodC5ob3Jpem9udGFsUGFkZGluZyxDdC5yZWN0LmhlaWdodD5OdCYmKE50PUN0LnJlY3QuaGVpZ2h0KX1YKz1OdCtodC52ZXJ0aWNhbFBhZGRpbmd9fSx5dC5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihodCx3dCl7dmFyIFg9dGhpczt0aGlzLnRpbGVkTWVtYmVyUGFjaz1bXSxPYmplY3Qua2V5cyhodCkuZm9yRWFjaChmdW5jdGlvbihwdCl7dmFyIFU9d3RbcHRdO1gudGlsZWRNZW1iZXJQYWNrW3B0XT1YLnRpbGVOb2RlcyhodFtwdF0sVS5wYWRkaW5nTGVmdCtVLnBhZGRpbmdSaWdodCksVS5yZWN0LndpZHRoPVgudGlsZWRNZW1iZXJQYWNrW3B0XS53aWR0aCxVLnJlY3QuaGVpZ2h0PVgudGlsZWRNZW1iZXJQYWNrW3B0XS5oZWlnaHR9KX0seXQucHJvdG90eXBlLnRpbGVOb2Rlcz1mdW5jdGlvbihodCx3dCl7dmFyIFg9Qi5USUxJTkdfUEFERElOR19WRVJUSUNBTCxwdD1CLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsVT17cm93czpbXSxyb3dXaWR0aDpbXSxyb3dIZWlnaHQ6W10sd2lkdGg6MCxoZWlnaHQ6d3QsdmVydGljYWxQYWRkaW5nOlgsaG9yaXpvbnRhbFBhZGRpbmc6cHR9O2h0LnNvcnQoZnVuY3Rpb24oT3QsTnQpe3JldHVybiBPdC5yZWN0LndpZHRoKk90LnJlY3QuaGVpZ2h0Pk50LnJlY3Qud2lkdGgqTnQucmVjdC5oZWlnaHQ/LTE6T3QucmVjdC53aWR0aCpPdC5yZWN0LmhlaWdodDxOdC5yZWN0LndpZHRoKk50LnJlY3QuaGVpZ2h0PzE6MH0pO2Zvcih2YXIgeHQ9MDt4dDxodC5sZW5ndGg7eHQrKyl7dmFyIG50PWh0W3h0XTtVLnJvd3MubGVuZ3RoPT0wP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KFUsbnQsMCx3dCk6dGhpcy5jYW5BZGRIb3Jpem9udGFsKFUsbnQucmVjdC53aWR0aCxudC5yZWN0LmhlaWdodCk/dGhpcy5pbnNlcnROb2RlVG9Sb3coVSxudCx0aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoVSksd3QpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KFUsbnQsVS5yb3dzLmxlbmd0aCx3dCksdGhpcy5zaGlmdFRvTGFzdFJvdyhVKX1yZXR1cm4gVX0seXQucHJvdG90eXBlLmluc2VydE5vZGVUb1Jvdz1mdW5jdGlvbihodCx3dCxYLHB0KXt2YXIgVT1wdDtpZihYPT1odC5yb3dzLmxlbmd0aCl7dmFyIHh0PVtdO2h0LnJvd3MucHVzaCh4dCksaHQucm93V2lkdGgucHVzaChVKSxodC5yb3dIZWlnaHQucHVzaCgwKX12YXIgbnQ9aHQucm93V2lkdGhbWF0rd3QucmVjdC53aWR0aDtodC5yb3dzW1hdLmxlbmd0aD4wJiYobnQrPWh0Lmhvcml6b250YWxQYWRkaW5nKSxodC5yb3dXaWR0aFtYXT1udCxodC53aWR0aDxudCYmKGh0LndpZHRoPW50KTt2YXIgT3Q9d3QucmVjdC5oZWlnaHQ7WD4wJiYoT3QrPWh0LnZlcnRpY2FsUGFkZGluZyk7dmFyIE50PTA7T3Q+aHQucm93SGVpZ2h0W1hdJiYoTnQ9aHQucm93SGVpZ2h0W1hdLGh0LnJvd0hlaWdodFtYXT1PdCxOdD1odC5yb3dIZWlnaHRbWF0tTnQpLGh0LmhlaWdodCs9TnQsaHQucm93c1tYXS5wdXNoKHd0KX0seXQucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oaHQpe2Zvcih2YXIgd3Q9LTEsWD1OdW1iZXIuTUFYX1ZBTFVFLHB0PTA7cHQ8aHQucm93cy5sZW5ndGg7cHQrKylodC5yb3dXaWR0aFtwdF08WCYmKHd0PXB0LFg9aHQucm93V2lkdGhbcHRdKTtyZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oaHQpe2Zvcih2YXIgd3Q9LTEsWD1OdW1iZXIuTUlOX1ZBTFVFLHB0PTA7cHQ8aHQucm93cy5sZW5ndGg7cHQrKylodC5yb3dXaWR0aFtwdF0+WCYmKHd0PXB0LFg9aHQucm93V2lkdGhbcHRdKTtyZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKGh0LHd0LFgpe3ZhciBwdD10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoaHQpO2lmKHB0PDApcmV0dXJuITA7dmFyIFU9aHQucm93V2lkdGhbcHRdO2lmKFUraHQuaG9yaXpvbnRhbFBhZGRpbmcrd3Q8PWh0LndpZHRoKXJldHVybiEwO3ZhciB4dD0wO2h0LnJvd0hlaWdodFtwdF08WCYmcHQ+MCYmKHh0PVgraHQudmVydGljYWxQYWRkaW5nLWh0LnJvd0hlaWdodFtwdF0pO3ZhciBudDtodC53aWR0aC1VPj13dCtodC5ob3Jpem9udGFsUGFkZGluZz9udD0oaHQuaGVpZ2h0K3h0KS8oVSt3dCtodC5ob3Jpem9udGFsUGFkZGluZyk6bnQ9KGh0LmhlaWdodCt4dCkvaHQud2lkdGgseHQ9WCtodC52ZXJ0aWNhbFBhZGRpbmc7dmFyIE90O3JldHVybiBodC53aWR0aDx3dD9PdD0oaHQuaGVpZ2h0K3h0KS93dDpPdD0oaHQuaGVpZ2h0K3h0KS9odC53aWR0aCxPdDwxJiYoT3Q9MS9PdCksbnQ8MSYmKG50PTEvbnQpLG50PE90fSx5dC5wcm90b3R5cGUuc2hpZnRUb0xhc3RSb3c9ZnVuY3Rpb24oaHQpe3ZhciB3dD10aGlzLmdldExvbmdlc3RSb3dJbmRleChodCksWD1odC5yb3dXaWR0aC5sZW5ndGgtMSxwdD1odC5yb3dzW3d0XSxVPXB0W3B0Lmxlbmd0aC0xXSx4dD1VLndpZHRoK2h0Lmhvcml6b250YWxQYWRkaW5nO2lmKGh0LndpZHRoLWh0LnJvd1dpZHRoW1hdPnh0JiZ3dCE9WCl7cHQuc3BsaWNlKC0xLDEpLGh0LnJvd3NbWF0ucHVzaChVKSxodC5yb3dXaWR0aFt3dF09aHQucm93V2lkdGhbd3RdLXh0LGh0LnJvd1dpZHRoW1hdPWh0LnJvd1dpZHRoW1hdK3h0LGh0LndpZHRoPWh0LnJvd1dpZHRoW2luc3RhbmNlLmdldExvbmdlc3RSb3dJbmRleChodCldO2Zvcih2YXIgbnQ9TnVtYmVyLk1JTl9WQUxVRSxPdD0wO090PHB0Lmxlbmd0aDtPdCsrKXB0W090XS5oZWlnaHQ+bnQmJihudD1wdFtPdF0uaGVpZ2h0KTt3dD4wJiYobnQrPWh0LnZlcnRpY2FsUGFkZGluZyk7dmFyIE50PWh0LnJvd0hlaWdodFt3dF0raHQucm93SGVpZ2h0W1hdO2h0LnJvd0hlaWdodFt3dF09bnQsaHQucm93SGVpZ2h0W1hdPFUuaGVpZ2h0K2h0LnZlcnRpY2FsUGFkZGluZyYmKGh0LnJvd0hlaWdodFtYXT1VLmhlaWdodCtodC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBxdD1odC5yb3dIZWlnaHRbd3RdK2h0LnJvd0hlaWdodFtYXTtodC5oZWlnaHQrPXF0LU50LHRoaXMuc2hpZnRUb0xhc3RSb3coaHQpfX0seXQucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe0IuVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LHl0LnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0PWZ1bmN0aW9uKCl7Qi5USUxFJiYodGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKSl9LHl0LnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgaHQ9W10sd3Q9ITAsWDt3dDspe3ZhciBwdD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLFU9W107d3Q9ITE7Zm9yKHZhciB4dD0wO3h0PHB0Lmxlbmd0aDt4dCsrKVg9cHRbeHRdLFguZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJiFYLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZYLmdldENoaWxkKCk9PW51bGwmJihVLnB1c2goW1gsWC5nZXRFZGdlcygpWzBdLFguZ2V0T3duZXIoKV0pLHd0PSEwKTtpZih3dD09ITApe2Zvcih2YXIgbnQ9W10sT3Q9MDtPdDxVLmxlbmd0aDtPdCsrKVVbT3RdWzBdLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYobnQucHVzaChVW090XSksVVtPdF1bMF0uZ2V0T3duZXIoKS5yZW1vdmUoVVtPdF1bMF0pKTtodC5wdXNoKG50KSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPWh0fSx5dC5wcm90b3R5cGUuZ3Jvd1RyZWU9ZnVuY3Rpb24oaHQpe2Zvcih2YXIgd3Q9aHQubGVuZ3RoLFg9aHRbd3QtMV0scHQsVT0wO1U8WC5sZW5ndGg7VSsrKXB0PVhbVV0sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKHB0KSxwdFsyXS5hZGQocHRbMF0pLHB0WzJdLmFkZChwdFsxXSxwdFsxXS5zb3VyY2UscHRbMV0udGFyZ2V0KTtodC5zcGxpY2UoaHQubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0seXQucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oaHQpe3ZhciB3dCxYLHB0PWh0WzBdO3B0PT1odFsxXS5zb3VyY2U/WD1odFsxXS50YXJnZXQ6WD1odFsxXS5zb3VyY2U7dmFyIFU9WC5zdGFydFgseHQ9WC5maW5pc2hYLG50PVguc3RhcnRZLE90PVguZmluaXNoWSxOdD0wLHF0PTAsQ3Q9MCxaPTAsVHQ9W050LEN0LHF0LFpdO2lmKG50PjApZm9yKHZhciBIdD1VO0h0PD14dDtIdCsrKVR0WzBdKz10aGlzLmdyaWRbSHRdW250LTFdLmxlbmd0aCt0aGlzLmdyaWRbSHRdW250XS5sZW5ndGgtMTtpZih4dDx0aGlzLmdyaWQubGVuZ3RoLTEpZm9yKHZhciBIdD1udDtIdDw9T3Q7SHQrKylUdFsxXSs9dGhpcy5ncmlkW3h0KzFdW0h0XS5sZW5ndGgrdGhpcy5ncmlkW3h0XVtIdF0ubGVuZ3RoLTE7aWYoT3Q8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIgSHQ9VTtIdDw9eHQ7SHQrKylUdFsyXSs9dGhpcy5ncmlkW0h0XVtPdCsxXS5sZW5ndGgrdGhpcy5ncmlkW0h0XVtPdF0ubGVuZ3RoLTE7aWYoVT4wKWZvcih2YXIgSHQ9bnQ7SHQ8PU90O0h0KyspVHRbM10rPXRoaXMuZ3JpZFtVLTFdW0h0XS5sZW5ndGgrdGhpcy5ncmlkW1VdW0h0XS5sZW5ndGgtMTtmb3IodmFyIEl0PXN0Lk1BWF9WQUxVRSxGdCxrZSxwbj0wO3BuPFR0Lmxlbmd0aDtwbisrKVR0W3BuXTxJdD8oSXQ9VHRbcG5dLEZ0PTEsa2U9cG4pOlR0W3BuXT09SXQmJkZ0Kys7aWYoRnQ9PTMmJkl0PT0wKVR0WzBdPT0wJiZUdFsxXT09MCYmVHRbMl09PTA/d3Q9MTpUdFswXT09MCYmVHRbMV09PTAmJlR0WzNdPT0wP3d0PTA6VHRbMF09PTAmJlR0WzJdPT0wJiZUdFszXT09MD93dD0zOlR0WzFdPT0wJiZUdFsyXT09MCYmVHRbM109PTAmJih3dD0yKTtlbHNlIGlmKEZ0PT0yJiZJdD09MCl7dmFyIE1lPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtUdFswXT09MCYmVHRbMV09PTA/TWU9PTA/d3Q9MDp3dD0xOlR0WzBdPT0wJiZUdFsyXT09MD9NZT09MD93dD0wOnd0PTI6VHRbMF09PTAmJlR0WzNdPT0wP01lPT0wP3d0PTA6d3Q9MzpUdFsxXT09MCYmVHRbMl09PTA/TWU9PTA/d3Q9MTp3dD0yOlR0WzFdPT0wJiZUdFszXT09MD9NZT09MD93dD0xOnd0PTM6TWU9PTA/d3Q9Mjp3dD0zfWVsc2UgaWYoRnQ9PTQmJkl0PT0wKXt2YXIgTWU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpO3d0PU1lfWVsc2Ugd3Q9a2U7d3Q9PTA/cHQuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLFguZ2V0Q2VudGVyWSgpLVguZ2V0SGVpZ2h0KCkvMi1qLkRFRkFVTFRfRURHRV9MRU5HVEgtcHQuZ2V0SGVpZ2h0KCkvMik6d3Q9PTE/cHQuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpK1guZ2V0V2lkdGgoKS8yK2ouREVGQVVMVF9FREdFX0xFTkdUSCtwdC5nZXRXaWR0aCgpLzIsWC5nZXRDZW50ZXJZKCkpOnd0PT0yP3B0LnNldENlbnRlcihYLmdldENlbnRlclgoKSxYLmdldENlbnRlclkoKStYLmdldEhlaWdodCgpLzIrai5ERUZBVUxUX0VER0VfTEVOR1RIK3B0LmdldEhlaWdodCgpLzIpOnB0LnNldENlbnRlcihYLmdldENlbnRlclgoKS1YLmdldFdpZHRoKCkvMi1qLkRFRkFVTFRfRURHRV9MRU5HVEgtcHQuZ2V0V2lkdGgoKS8yLFguZ2V0Q2VudGVyWSgpKX0scC5leHBvcnRzPXl0fSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9e307Yi5sYXlvdXRCYXNlPW0oMCksYi5Db1NFQ29uc3RhbnRzPW0oMSksYi5Db1NFRWRnZT1tKDIpLGIuQ29TRUdyYXBoPW0oMyksYi5Db1NFR3JhcGhNYW5hZ2VyPW0oNCksYi5Db1NFTGF5b3V0PW0oNiksYi5Db1NFTm9kZT1tKDUpLHAuZXhwb3J0cz1ifV0pfSl9KFZndCkpLFZndC5leHBvcnRzfShmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihwLHYpe2kuZXhwb3J0cz12KHVXZSgpKX0pKGQwLGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihwKXt2YXIgdj17fTtmdW5jdGlvbiBtKGIpe2lmKHZbYl0pcmV0dXJuIHZbYl0uZXhwb3J0czt2YXIgRT12W2JdPXtpOmIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcFtiXS5jYWxsKEUuZXhwb3J0cyxFLEUuZXhwb3J0cyxtKSxFLmw9ITAsRS5leHBvcnRzfXJldHVybiBtLm09cCxtLmM9dixtLmk9ZnVuY3Rpb24oYil7cmV0dXJuIGJ9LG0uZD1mdW5jdGlvbihiLEUsXyl7bS5vKGIsRSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLEUse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpffSl9LG0ubj1mdW5jdGlvbihiKXt2YXIgRT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gbS5kKEUsImEiLEUpLEV9LG0ubz1mdW5jdGlvbihiLEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixFKX0sbS5wPSIiLG0obS5zPTEpfShbZnVuY3Rpb24ocCx2KXtwLmV4cG9ydHM9Zn0sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkubGF5b3V0QmFzZS5MYXlvdXRDb25zdGFudHMsRT1tKDApLmxheW91dEJhc2UuRkRMYXlvdXRDb25zdGFudHMsXz1tKDApLkNvU0VDb25zdGFudHMsTD1tKDApLkNvU0VMYXlvdXQsTj1tKDApLkNvU0VOb2RlLEI9bSgwKS5sYXlvdXRCYXNlLlBvaW50RCxqPW0oMCkubGF5b3V0QmFzZS5EaW1lbnNpb25ELFI9e3JlYWR5OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxxdWFsaXR5OiJkZWZhdWx0Iixub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmVmcmVzaDozMCxmaXQ6ITAscGFkZGluZzoxMCxyYW5kb21pemU6ITAsbm9kZVJlcHVsc2lvbjo0NTAwLGlkZWFsRWRnZUxlbmd0aDo1MCxlZGdlRWxhc3RpY2l0eTouNDUsbmVzdGluZ0ZhY3RvcjouMSxncmF2aXR5Oi4yNSxudW1JdGVyOjI1MDAsdGlsZTohMCxhbmltYXRlOiJlbmQiLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCx0aWxpbmdQYWRkaW5nVmVydGljYWw6MTAsdGlsaW5nUGFkZGluZ0hvcml6b250YWw6MTAsZ3Jhdml0eVJhbmdlQ29tcG91bmQ6MS41LGdyYXZpdHlDb21wb3VuZDoxLGdyYXZpdHlSYW5nZTozLjgsaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWw6LjV9O2Z1bmN0aW9uIHoodXQsYnQpe3ZhciBtdD17fTtmb3IodmFyIHl0IGluIHV0KW10W3l0XT11dFt5dF07Zm9yKHZhciB5dCBpbiBidCltdFt5dF09YnRbeXRdO3JldHVybiBtdH1mdW5jdGlvbiBLKHV0KXt0aGlzLm9wdGlvbnM9eihSLHV0KSxpdCh0aGlzLm9wdGlvbnMpfXZhciBpdD1mdW5jdGlvbihidCl7YnQubm9kZVJlcHVsc2lvbiE9bnVsbCYmKF8uREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9RS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD1idC5ub2RlUmVwdWxzaW9uKSxidC5pZGVhbEVkZ2VMZW5ndGghPW51bGwmJihfLkRFRkFVTFRfRURHRV9MRU5HVEg9RS5ERUZBVUxUX0VER0VfTEVOR1RIPWJ0LmlkZWFsRWRnZUxlbmd0aCksYnQuZWRnZUVsYXN0aWNpdHkhPW51bGwmJihfLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPUUuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9YnQuZWRnZUVsYXN0aWNpdHkpLGJ0Lm5lc3RpbmdGYWN0b3IhPW51bGwmJihfLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9RS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWJ0Lm5lc3RpbmdGYWN0b3IpLGJ0LmdyYXZpdHkhPW51bGwmJihfLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD1FLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD1idC5ncmF2aXR5KSxidC5udW1JdGVyIT1udWxsJiYoXy5NQVhfSVRFUkFUSU9OUz1FLk1BWF9JVEVSQVRJT05TPWJ0Lm51bUl0ZXIpLGJ0LmdyYXZpdHlSYW5nZSE9bnVsbCYmKF8uREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1FLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9YnQuZ3Jhdml0eVJhbmdlKSxidC5ncmF2aXR5Q29tcG91bmQhPW51bGwmJihfLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD1idC5ncmF2aXR5Q29tcG91bmQpLGJ0LmdyYXZpdHlSYW5nZUNvbXBvdW5kIT1udWxsJiYoXy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPUUuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1idC5ncmF2aXR5UmFuZ2VDb21wb3VuZCksYnQuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwhPW51bGwmJihfLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9RS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWJ0LmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsKSxidC5xdWFsaXR5PT0iZHJhZnQiP2IuUVVBTElUWT0wOmJ0LnF1YWxpdHk9PSJwcm9vZiI/Yi5RVUFMSVRZPTI6Yi5RVUFMSVRZPTEsXy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9RS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9Yi5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9YnQubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzLF8uREVGQVVMVF9JTkNSRU1FTlRBTD1FLkRFRkFVTFRfSU5DUkVNRU5UQUw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSFidC5yYW5kb21pemUsXy5BTklNQVRFPUUuQU5JTUFURT1iLkFOSU1BVEU9YnQuYW5pbWF0ZSxfLlRJTEU9YnQudGlsZSxfLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPXR5cGVvZiBidC50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/YnQudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLmNhbGwoKTpidC50aWxpbmdQYWRkaW5nVmVydGljYWwsXy5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPXR5cGVvZiBidC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj9idC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCk6YnQudGlsaW5nUGFkZGluZ0hvcml6b250YWx9O0sucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB1dCxidCxtdD10aGlzLm9wdGlvbnM7dGhpcy5pZFRvTE5vZGU9e307dmFyIHl0PXRoaXMubGF5b3V0PW5ldyBMLGR0PXRoaXM7ZHQuc3RvcHBlZD0hMSx0aGlzLmN5PXRoaXMub3B0aW9ucy5jeSx0aGlzLmN5LnRyaWdnZXIoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6dGhpc30pO3ZhciBodD15dC5uZXdHcmFwaE1hbmFnZXIoKTt0aGlzLmdtPWh0O3ZhciB3dD10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLFg9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKTt0aGlzLnJvb3Q9aHQuYWRkUm9vdCgpLHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsdGhpcy5nZXRUb3BNb3N0Tm9kZXMod3QpLHl0KTtmb3IodmFyIHB0PTA7cHQ8WC5sZW5ndGg7cHQrKyl7dmFyIFU9WFtwdF0seHQ9dGhpcy5pZFRvTE5vZGVbVS5kYXRhKCJzb3VyY2UiKV0sbnQ9dGhpcy5pZFRvTE5vZGVbVS5kYXRhKCJ0YXJnZXQiKV07aWYoeHQhPT1udCYmeHQuZ2V0RWRnZXNCZXR3ZWVuKG50KS5sZW5ndGg9PTApe3ZhciBPdD1odC5hZGQoeXQubmV3RWRnZSgpLHh0LG50KTtPdC5pZD1VLmlkKCl9fXZhciBOdD1mdW5jdGlvbihaLFR0KXt0eXBlb2YgWj09Im51bWJlciImJihaPVR0KTt2YXIgSHQ9Wi5kYXRhKCJpZCIpLEl0PWR0LmlkVG9MTm9kZVtIdF07cmV0dXJue3g6SXQuZ2V0UmVjdCgpLmdldENlbnRlclgoKSx5Okl0LmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9fSxxdD1mdW5jdGlvbiBDdCgpe2Zvcih2YXIgWj1mdW5jdGlvbigpe210LmZpdCYmbXQuY3kuZml0KG10LmVsZXMsbXQucGFkZGluZyksdXR8fCh1dD0hMCxkdC5jeS5vbmUoImxheW91dHJlYWR5IixtdC5yZWFkeSksZHQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpkdH0pKX0sVHQ9ZHQub3B0aW9ucy5yZWZyZXNoLEh0LEl0PTA7SXQ8VHQmJiFIdDtJdCsrKUh0PWR0LnN0b3BwZWR8fGR0LmxheW91dC50aWNrKCk7aWYoSHQpe3l0LmNoZWNrTGF5b3V0U3VjY2VzcygpJiYheXQuaXNTdWJMYXlvdXQmJnl0LmRvUG9zdExheW91dCgpLHl0LnRpbGluZ1Bvc3RMYXlvdXQmJnl0LnRpbGluZ1Bvc3RMYXlvdXQoKSx5dC5pc0xheW91dEZpbmlzaGVkPSEwLGR0Lm9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhOdCksWigpLGR0LmN5Lm9uZSgibGF5b3V0c3RvcCIsZHQub3B0aW9ucy5zdG9wKSxkdC5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZHR9KSxidCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoYnQpLHV0PSExO3JldHVybn12YXIgRnQ9ZHQubGF5b3V0LmdldFBvc2l0aW9uc0RhdGEoKTttdC5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKGtlLHBuKXtpZih0eXBlb2Yga2U9PSJudW1iZXIiJiYoa2U9cG4pLCFrZS5pc1BhcmVudCgpKXtmb3IodmFyIE1lPWtlLmlkKCksdmU9RnRbTWVdLEdlPWtlO3ZlPT1udWxsJiYodmU9RnRbR2UuZGF0YSgicGFyZW50IildfHxGdFsiRHVtbXlDb21wb3VuZF8iK0dlLmRhdGEoInBhcmVudCIpXSxGdFtNZV09dmUsR2U9R2UucGFyZW50KClbMF0sR2UhPW51bGwpOyk7cmV0dXJuIHZlIT1udWxsP3t4OnZlLngseTp2ZS55fTp7eDprZS5wb3NpdGlvbigieCIpLHk6a2UucG9zaXRpb24oInkiKX19fSksWigpLGJ0PXJlcXVlc3RBbmltYXRpb25GcmFtZShDdCl9O3JldHVybiB5dC5hZGRMaXN0ZW5lcigibGF5b3V0c3RhcnRlZCIsZnVuY3Rpb24oKXtkdC5vcHRpb25zLmFuaW1hdGU9PT0iZHVyaW5nIiYmKGJ0PXJlcXVlc3RBbmltYXRpb25GcmFtZShxdCkpfSkseXQucnVuTGF5b3V0KCksdGhpcy5vcHRpb25zLmFuaW1hdGUhPT0iZHVyaW5nIiYmKGR0Lm9wdGlvbnMuZWxlcy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLmxheW91dFBvc2l0aW9ucyhkdCxkdC5vcHRpb25zLE50KSx1dD0hMSksdGhpc30sSy5wcm90b3R5cGUuZ2V0VG9wTW9zdE5vZGVzPWZ1bmN0aW9uKHV0KXtmb3IodmFyIGJ0PXt9LG10PTA7bXQ8dXQubGVuZ3RoO210KyspYnRbdXRbbXRdLmlkKCldPSEwO3ZhciB5dD11dC5maWx0ZXIoZnVuY3Rpb24oZHQsaHQpe3R5cGVvZiBkdD09Im51bWJlciImJihkdD1odCk7Zm9yKHZhciB3dD1kdC5wYXJlbnQoKVswXTt3dCE9bnVsbDspe2lmKGJ0W3d0LmlkKCldKXJldHVybiExO3d0PXd0LnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIHl0fSxLLnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW5MaXN0PWZ1bmN0aW9uKHV0LGJ0LG10KXtmb3IodmFyIHl0PWJ0Lmxlbmd0aCxkdD0wO2R0PHl0O2R0Kyspe3ZhciBodD1idFtkdF0sd3Q9aHQuY2hpbGRyZW4oKSxYLHB0PWh0LmxheW91dERpbWVuc2lvbnMoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczp0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzfSk7aWYoaHQub3V0ZXJXaWR0aCgpIT1udWxsJiZodC5vdXRlckhlaWdodCgpIT1udWxsP1g9dXQuYWRkKG5ldyBOKG10LmdyYXBoTWFuYWdlcixuZXcgQihodC5wb3NpdGlvbigieCIpLXB0LncvMixodC5wb3NpdGlvbigieSIpLXB0LmgvMiksbmV3IGoocGFyc2VGbG9hdChwdC53KSxwYXJzZUZsb2F0KHB0LmgpKSkpOlg9dXQuYWRkKG5ldyBOKHRoaXMuZ3JhcGhNYW5hZ2VyKSksWC5pZD1odC5kYXRhKCJpZCIpLFgucGFkZGluZ0xlZnQ9cGFyc2VJbnQoaHQuY3NzKCJwYWRkaW5nIikpLFgucGFkZGluZ1RvcD1wYXJzZUludChodC5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nUmlnaHQ9cGFyc2VJbnQoaHQuY3NzKCJwYWRkaW5nIikpLFgucGFkZGluZ0JvdHRvbT1wYXJzZUludChodC5jc3MoInBhZGRpbmciKSksdGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmaHQuaXNQYXJlbnQoKSl7dmFyIFU9aHQuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExfSkudyx4dD1odC5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS5oLG50PWh0LmNzcygidGV4dC1oYWxpZ24iKTtYLmxhYmVsV2lkdGg9VSxYLmxhYmVsSGVpZ2h0PXh0LFgubGFiZWxQb3M9bnR9aWYodGhpcy5pZFRvTE5vZGVbaHQuZGF0YSgiaWQiKV09WCxpc05hTihYLnJlY3QueCkmJihYLnJlY3QueD0wKSxpc05hTihYLnJlY3QueSkmJihYLnJlY3QueT0wKSx3dCE9bnVsbCYmd3QubGVuZ3RoPjApe3ZhciBPdDtPdD1tdC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQobXQubmV3R3JhcGgoKSxYKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoT3Qsd3QsbXQpfX19LEsucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciBzdD1mdW5jdGlvbihidCl7YnQoImxheW91dCIsImNvc2UtYmlsa2VudCIsSyl9O3R5cGVvZiBjeXRvc2NhcGU8InUiJiZzdChjeXRvc2NhcGUpLHAuZXhwb3J0cz1zdH1dKX0pfSkoWGp0KTt2YXIgbFdlPVhqdC5leHBvcnRzO2NvbnN0IGhXZT1CNyhsV2UpO1lqdC51c2UoaFdlKTtmdW5jdGlvbiBKanQoaSxhLGYscCl7V2p0LmRyYXdOb2RlKGksYSxmLHApLGEuY2hpbGRyZW4mJmEuY2hpbGRyZW4uZm9yRWFjaCgodixtKT0+e0pqdChpLHYsZjwwP206ZixwKX0pfWZ1bmN0aW9uIGZXZShpLGEpe2EuZWRnZXMoKS5tYXAoKGYscCk9Pntjb25zdCB2PWYuZGF0YSgpO2lmKGZbMF0uX3ByaXZhdGUuYm9keUJvdW5kcyl7Y29uc3QgbT1mWzBdLl9wcml2YXRlLnJzY3JhdGNoO1V0LnRyYWNlKCJFZGdlOiAiLHAsdiksaS5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke20uc3RhcnRYfSwke20uc3RhcnRZfSBMICR7bS5taWRYfSwke20ubWlkWX0gTCR7bS5lbmRYfSwke20uZW5kWX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK3Yuc2VjdGlvbisiIGVkZ2UtZGVwdGgtIit2LmRlcHRoKX19KX1mdW5jdGlvbiB0JHQoaSxhLGYscCl7YS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7aWQ6aS5pZCxsYWJlbFRleHQ6aS5kZXNjcixoZWlnaHQ6aS5oZWlnaHQsd2lkdGg6aS53aWR0aCxsZXZlbDpwLG5vZGVJZDppLmlkLHBhZGRpbmc6aS5wYWRkaW5nLHR5cGU6aS50eXBlfSxwb3NpdGlvbjp7eDppLngseTppLnl9fSksaS5jaGlsZHJlbiYmaS5jaGlsZHJlbi5mb3JFYWNoKHY9Pnt0JHQodixhLGYscCsxKSxhLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntpZDpgJHtpLmlkfV8ke3YuaWR9YCxzb3VyY2U6aS5pZCx0YXJnZXQ6di5pZCxkZXB0aDpwLHNlY3Rpb246di5zZWN0aW9ufX0pfSl9ZnVuY3Rpb24gZFdlKGksYSl7cmV0dXJuIG5ldyBQcm9taXNlKGY9Pntjb25zdCBwPXlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImN5IikuYXR0cigic3R5bGUiLCJkaXNwbGF5Om5vbmUiKSx2PVlqdCh7Y29udGFpbmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjeSIpLHN0eWxlOlt7c2VsZWN0b3I6ImVkZ2UiLHN0eWxlOnsiY3VydmUtc3R5bGUiOiJiZXppZXIifX1dfSk7cC5yZW1vdmUoKSx0JHQoaSx2LGEsMCksdi5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24obSl7bS5sYXlvdXREaW1lbnNpb25zPSgpPT57Y29uc3QgYj1tLmRhdGEoKTtyZXR1cm57dzpiLndpZHRoLGg6Yi5oZWlnaHR9fX0pLHYubGF5b3V0KHtuYW1lOiJjb3NlLWJpbGtlbnQiLHF1YWxpdHk6InByb29mIixzdHlsZUVuYWJsZWQ6ITEsYW5pbWF0ZTohMX0pLnJ1bigpLHYucmVhZHkobT0+e1V0LmluZm8oIlJlYWR5IixtKSxmKHYpfSl9KX1mdW5jdGlvbiBnV2UoaSl7aS5ub2RlcygpLm1hcCgoYSxmKT0+e2NvbnN0IHA9YS5kYXRhKCk7cC54PWEucG9zaXRpb24oKS54LHAueT1hLnBvc2l0aW9uKCkueSxXanQucG9zaXRpb25Ob2RlKHApO2NvbnN0IHY9R2d0KHAubm9kZUlkKTtVdC5pbmZvKCJJZDoiLGYsIlBvc2l0aW9uOiAoIixhLnBvc2l0aW9uKCkueCwiLCAiLGEucG9zaXRpb24oKS55LCIpIixwKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2EucG9zaXRpb24oKS54LXAud2lkdGgvMn0sICR7YS5wb3NpdGlvbigpLnktcC5oZWlnaHQvMn0pYCksdi5hdHRyKCJhdHRyIixgYXBhLSR7Zn0pYCl9KX1jb25zdCBwV2U9e2RyYXc6YXN5bmMoaSxhLGYscCk9Pntjb25zdCB2PUxlKCk7di5odG1sTGFiZWxzPSExLFV0LmRlYnVnKGBSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtCmAraSxwLnBhcnNlcik7Y29uc3QgbT1MZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7bT09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgXz15cihtPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrYSk7Xy5hcHBlbmQoImciKTtjb25zdCBMPXAuZGIuZ2V0TWluZG1hcCgpLE49Xy5hcHBlbmQoImciKTtOLmF0dHIoImNsYXNzIiwibWluZG1hcC1lZGdlcyIpO2NvbnN0IEI9Xy5hcHBlbmQoImciKTtCLmF0dHIoImNsYXNzIiwibWluZG1hcC1ub2RlcyIpLEpqdChCLEwsLTEsdik7Y29uc3Qgaj1hd2FpdCBkV2UoTCx2KTtmV2UoTixqKSxnV2UoaiksY1Qodm9pZCAwLF8sdi5taW5kbWFwLnBhZGRpbmcsdi5taW5kbWFwLnVzZU1heFdpZHRoKX19LGJXZT1pPT57bGV0IGE9IiI7Zm9yKGxldCBmPTA7ZjxpLlRIRU1FX0NPTE9SX0xJTUlUO2YrKylpWyJsaW5lQ29sb3IiK2ZdPWlbImxpbmVDb2xvciIrZl18fGlbImNTY2FsZUludiIrZl0sSjcoaVsibGluZUNvbG9yIitmXSk/aVsibGluZUNvbG9yIitmXT1icyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTppWyJsaW5lQ29sb3IiK2ZdPWpzKGlbImxpbmVDb2xvciIrZl0sMjApO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspe2NvbnN0IHA9IiIrKDE3LTMqZik7YSs9YAogICAgLnNlY3Rpb24tJHtmLTF9IHJlY3QsIC5zZWN0aW9uLSR7Zi0xfSBwYXRoLCAuc2VjdGlvbi0ke2YtMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2YtMX0gcG9seWdvbiwgLnNlY3Rpb24tJHtmLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtpWyJjU2NhbGUiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSB0ZXh0IHsKICAgICBmaWxsOiAke2lbImNTY2FsZUxhYmVsIitmXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7Zi0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtmLTF9ewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlIitmXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke2YtMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtwfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZUludiIrZl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiBsaWdodGdyYXk7CiAgICB9CiAgICAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6ICNlZmVmZWY7CiAgICB9CiAgICBgfXJldHVybiBhfSx2V2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e2RiOlpVZSxyZW5kZXJlcjpwV2UscGFyc2VyOnFVZSxzdHlsZXM6aT0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtiV2UoaSl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHsKICAgIGZpbGw6ICR7aS5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAubWluZG1hcC1ub2RlLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFdndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEUsXyxMLE4pe2ZvcihMPUx8fHt9LE49RS5sZW5ndGg7Ti0tO0xbRVtOXV09Xyk7cmV0dXJuIEx9LGE9WzEsOV0sZj1bMSwxMF0scD1bMSw1LDEwLDEyXSx2PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTQU5LRVk6NCxORVdMSU5FOjUsY3N2OjYsb3B0X2VvZjo3LHJlY29yZDo4LGNzdl90YWlsOjksRU9GOjEwLCJmaWVsZFtzb3VyY2VdIjoxMSxDT01NQToxMiwiZmllbGRbdGFyZ2V0XSI6MTMsImZpZWxkW3ZhbHVlXSI6MTQsZmllbGQ6MTUsZXNjYXBlZDoxNixub25fZXNjYXBlZDoxNyxEUVVPVEU6MTgsRVNDQVBFRF9URVhUOjE5LE5PTl9FU0NBUEVEX1RFWFQ6MjAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNBTktFWSIsNToiTkVXTElORSIsMTA6IkVPRiIsMTE6ImZpZWxkW3NvdXJjZV0iLDEyOiJDT01NQSIsMTM6ImZpZWxkW3RhcmdldF0iLDE0OiJmaWVsZFt2YWx1ZV0iLDE4OiJEUVVPVEUiLDE5OiJFU0NBUEVEX1RFWFQiLDIwOiJOT05fRVNDQVBFRF9URVhUIn0scHJvZHVjdGlvbnNfOlswLFszLDRdLFs2LDJdLFs5LDJdLFs5LDBdLFs3LDFdLFs3LDBdLFs4LDVdLFsxNSwxXSxbMTUsMV0sWzE2LDNdLFsxNywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihfLEwsTixCLGosUix6KXt2YXIgSz1SLmxlbmd0aC0xO3N3aXRjaChqKXtjYXNlIDc6Y29uc3QgaXQ9Qi5maW5kT3JDcmVhdGVOb2RlKFJbSy00XS50cmltKCkucmVwbGFjZUFsbCgnIiInLCciJykpLHN0PUIuZmluZE9yQ3JlYXRlTm9kZShSW0stMl0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSx1dD1wYXJzZUZsb2F0KFJbS10udHJpbSgpKTtCLmFkZExpbmsoaXQsc3QsdXQpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMTp0aGlzLiQ9UltLXTticmVhaztjYXNlIDEwOnRoaXMuJD1SW0stMV07YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdfSx7Njo0LDg6NSwxNTo2LDE2OjcsMTc6OCwxODphLDIwOmZ9LHsxOlsyLDZdLDc6MTEsMTA6WzEsMTJdfSxpKGYsWzIsNF0sezk6MTMsNTpbMSwxNF19KSx7MTI6WzEsMTVdfSxpKHAsWzIsOF0pLGkocCxbMiw5XSksezE5OlsxLDE2XX0saShwLFsyLDExXSksezE6WzIsMV19LHsxOlsyLDVdfSxpKGYsWzIsMl0pLHs2OjE3LDg6NSwxNTo2LDE2OjcsMTc6OCwxODphLDIwOmZ9LHsxNToxOCwxNjo3LDE3OjgsMTg6YSwyMDpmfSx7MTg6WzEsMTldfSxpKGYsWzIsM10pLHsxMjpbMSwyMF19LGkocCxbMiwxMF0pLHsxNToyMSwxNjo3LDE3OjgsMTg6YSwyMDpmfSxpKFsxLDUsMTBdLFsyLDddKV0sZGVmYXVsdEFjdGlvbnM6ezExOlsyLDFdLDEyOlsyLDVdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKF8sTCl7aWYoTC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKF8pO2Vsc2V7dmFyIE49bmV3IEVycm9yKF8pO3Rocm93IE4uaGFzaD1MLE59fSxwYXJzZTpmdW5jdGlvbihfKXt2YXIgTD10aGlzLE49WzBdLEI9W10saj1bbnVsbF0sUj1bXSx6PXRoaXMudGFibGUsSz0iIixpdD0wLHN0PTAsdXQ9MixidD0xLG10PVIuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseXQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxkdD17eXk6e319O2Zvcih2YXIgaHQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxodCkmJihkdC55eVtodF09dGhpcy55eVtodF0pO3l0LnNldElucHV0KF8sZHQueXkpLGR0Lnl5LmxleGVyPXl0LGR0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiB5dC55eWxsb2M+InUiJiYoeXQueXlsbG9jPXt9KTt2YXIgd3Q9eXQueXlsbG9jO1IucHVzaCh3dCk7dmFyIFg9eXQub3B0aW9ucyYmeXQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGR0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWR0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHB0KCl7dmFyIEl0O3JldHVybiBJdD1CLnBvcCgpfHx5dC5sZXgoKXx8YnQsdHlwZW9mIEl0IT0ibnVtYmVyIiYmKEl0IGluc3RhbmNlb2YgQXJyYXkmJihCPUl0LEl0PUIucG9wKCkpLEl0PUwuc3ltYm9sc19bSXRdfHxJdCksSXR9Zm9yKHZhciBVLHh0LG50LE90LE50PXt9LHF0LEN0LFosVHQ7Oyl7aWYoeHQ9TltOLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3h0XT9udD10aGlzLmRlZmF1bHRBY3Rpb25zW3h0XTooKFU9PT1udWxsfHx0eXBlb2YgVT4idSIpJiYoVT1wdCgpKSxudD16W3h0XSYmelt4dF1bVV0pLHR5cGVvZiBudD4idSJ8fCFudC5sZW5ndGh8fCFudFswXSl7dmFyIEh0PSIiO1R0PVtdO2ZvcihxdCBpbiB6W3h0XSl0aGlzLnRlcm1pbmFsc19bcXRdJiZxdD51dCYmVHQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3F0XSsiJyIpO3l0LnNob3dQb3NpdGlvbj9IdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhpdCsxKStgOgpgK3l0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArVHQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVXXx8VSkrIiciOkh0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGl0KzEpKyI6IFVuZXhwZWN0ZWQgIisoVT09YnQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVV18fFUpKyInIiksdGhpcy5wYXJzZUVycm9yKEh0LHt0ZXh0Onl0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tVXXx8VSxsaW5lOnl0Lnl5bGluZW5vLGxvYzp3dCxleHBlY3RlZDpUdH0pfWlmKG50WzBdaW5zdGFuY2VvZiBBcnJheSYmbnQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4dCsiLCB0b2tlbjogIitVKTtzd2l0Y2gobnRbMF0pe2Nhc2UgMTpOLnB1c2goVSksai5wdXNoKHl0Lnl5dGV4dCksUi5wdXNoKHl0Lnl5bGxvYyksTi5wdXNoKG50WzFdKSxVPW51bGwsc3Q9eXQueXlsZW5nLEs9eXQueXl0ZXh0LGl0PXl0Lnl5bGluZW5vLHd0PXl0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoQ3Q9dGhpcy5wcm9kdWN0aW9uc19bbnRbMV1dWzFdLE50LiQ9altqLmxlbmd0aC1DdF0sTnQuXyQ9e2ZpcnN0X2xpbmU6UltSLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpSW1IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UltSLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46UltSLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sWCYmKE50Ll8kLnJhbmdlPVtSW1IubGVuZ3RoLShDdHx8MSldLnJhbmdlWzBdLFJbUi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxPdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTnQsW0ssc3QsaXQsZHQueXksbnRbMV0saixSXS5jb25jYXQobXQpKSx0eXBlb2YgT3Q8InUiKXJldHVybiBPdDtDdCYmKE49Ti5zbGljZSgwLC0xKkN0KjIpLGo9ai5zbGljZSgwLC0xKkN0KSxSPVIuc2xpY2UoMCwtMSpDdCkpLE4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tudFsxXV1bMF0pLGoucHVzaChOdC4kKSxSLnB1c2goTnQuXyQpLFo9eltOW04ubGVuZ3RoLTJdXVtOW04ubGVuZ3RoLTFdXSxOLnB1c2goWik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LG09ZnVuY3Rpb24oKXt2YXIgRT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihMLE4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoTCxOKTtlbHNlIHRocm93IG5ldyBFcnJvcihMKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oXyxMKXtyZXR1cm4gdGhpcy55eT1MfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1fLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBfPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1fLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1fLHRoaXMubWF0Y2hlZCs9Xzt2YXIgTD1fLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gTD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksX30sdW5wdXQ6ZnVuY3Rpb24oXyl7dmFyIEw9Xy5sZW5ndGgsTj1fLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Xyt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtTCksdGhpcy5vZmZzZXQtPUw7dmFyIEI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksTi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPU4ubGVuZ3RoLTEpO3ZhciBqPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpOPyhOLmxlbmd0aD09PUIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStCW0IubGVuZ3RoLU4ubGVuZ3RoXS5sZW5ndGgtTlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUx9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1balswXSxqWzBdK3RoaXMueXlsZW5nLUxdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihfKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoXykpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgXz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKF8ubGVuZ3RoPjIwPyIuLi4iOiIiKStfLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5tYXRjaDtyZXR1cm4gXy5sZW5ndGg8MjAmJihfKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1fLmxlbmd0aCkpLChfLnN1YnN0cigwLDIwKSsoXy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5wYXN0SW5wdXQoKSxMPW5ldyBBcnJheShfLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIF8rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0wrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKF8sTCl7dmFyIE4sQixqO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihqPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGoueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQj1fWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxCJiYodGhpcy55eWxpbmVubys9Qi5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpCP0JbQi5sZW5ndGgtMV0ubGVuZ3RoLUJbQi5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitfWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPV9bMF0sdGhpcy5tYXRjaCs9X1swXSx0aGlzLm1hdGNoZXM9Xyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShfWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1fWzBdLE49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsTCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxOKXJldHVybiBOO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBSIGluIGopdGhpc1tSXT1qW1JdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIF8sTCxOLEI7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaj10aGlzLl9jdXJyZW50UnVsZXMoKSxSPTA7UjxqLmxlbmd0aDtSKyspaWYoTj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2pbUl1dKSxOJiYoIUx8fE5bMF0ubGVuZ3RoPkxbMF0ubGVuZ3RoKSl7aWYoTD1OLEI9Uix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihfPXRoaXMudGVzdF9tYXRjaChOLGpbUl0pLF8hPT0hMSlyZXR1cm4gXztpZih0aGlzLl9iYWNrdHJhY2spe0w9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gTD8oXz10aGlzLnRlc3RfbWF0Y2goTCxqW0JdKSxfIT09ITE/XzohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5uZXh0KCk7cmV0dXJuIEx8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEwpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChMKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgTD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBMPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oTCl7cmV0dXJuIEw9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhMfHwwKSxMPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbTF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oTCl7dGhpcy5iZWdpbihMKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e2Vhc3lfa2V3b3JkX3J1bGVzOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEwsTixCLGope3N3aXRjaChCKXtjYXNlIDA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJjc3YiKSw0O2Nhc2UgMTpyZXR1cm4gMTA7Y2FzZSAyOnJldHVybiA1O2Nhc2UgMzpyZXR1cm4gMTI7Y2FzZSA0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZXNjYXBlZF90ZXh0IiksMTg7Y2FzZSA1OnJldHVybiAyMDtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNzpyZXR1cm4gMTl9fSxydWxlczpbL14oPzpzYW5rZXktYmV0YVxiKS8sL14oPzokKS8sL14oPzooKFx1MDAwRFx1MDAwQSl8KFx1MDAwQSkpKS8sL14oPzooXHUwMDJDKSkvLC9eKD86KFx1MDAyMikpLywvXig/OihbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSkqKS8sL14oPzooXHUwMDIyKSg/IShcdTAwMjIpKSkvLC9eKD86KChbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSl8KFx1MDAyQyl8KFx1MDAwRCl8KFx1MDAwQSl8KFx1MDAyMikoXHUwMDIyKSkqKS9dLGNvbmRpdGlvbnM6e2Nzdjp7cnVsZXM6WzEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMX0sZXNjYXBlZF90ZXh0OntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gRX0oKTt2LmxleGVyPW07ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIGIucHJvdG90eXBlPXYsdi5QYXJzZXI9YixuZXcgYn0oKTtXZ3QucGFyc2VyPVdndDtjb25zdCBVSz1XZ3Q7bGV0IFdLPVtdLEtLPVtdLHZMPXt9O2NvbnN0IHdXZT0oKT0+e1dLPVtdLEtLPVtdLHZMPXt9LGFwKCl9O2NsYXNzIG1XZXtjb25zdHJ1Y3RvcihhLGYscD0wKXt0aGlzLnNvdXJjZT1hLHRoaXMudGFyZ2V0PWYsdGhpcy52YWx1ZT1wfX1jb25zdCB5V2U9KGksYSxmKT0+e1dLLnB1c2gobmV3IG1XZShpLGEsZikpfTtjbGFzcyB4V2V7Y29uc3RydWN0b3IoYSl7dGhpcy5JRD1hfX1jb25zdCBrV2U9e25vZGVzTWFwOnZMLGdldENvbmZpZzooKT0+TGUoKS5zYW5rZXksZ2V0Tm9kZXM6KCk9PktLLGdldExpbmtzOigpPT5XSyxnZXRHcmFwaDooKT0+KHtub2RlczpLSy5tYXAoaT0+KHtpZDppLklEfSkpLGxpbmtzOldLLm1hcChpPT4oe3NvdXJjZTppLnNvdXJjZS5JRCx0YXJnZXQ6aS50YXJnZXQuSUQsdmFsdWU6aS52YWx1ZX0pKX0pLGFkZExpbms6eVdlLGZpbmRPckNyZWF0ZU5vZGU6aT0+KGk9WXIuc2FuaXRpemVUZXh0KGksTGUoKSksdkxbaV18fCh2TFtpXT1uZXcgeFdlKGkpLEtLLnB1c2godkxbaV0pKSx2TFtpXSksZ2V0QWNjVGl0bGU6b3Asc2V0QWNjVGl0bGU6Y2csZ2V0QWNjRGVzY3JpcHRpb246dXAsc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0RGlhZ3JhbVRpdGxlOkRiLHNldERpYWdyYW1UaXRsZTpaMixjbGVhcjp3V2V9O2Z1bmN0aW9uIGUkdChpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZjxwfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY8dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIG4kdChpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZj5wfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY+dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIEtndChpLGEpe2xldCBmPTA7aWYoYT09PXZvaWQgMClmb3IobGV0IHAgb2YgaSkocD0rcCkmJihmKz1wKTtlbHNle2xldCBwPS0xO2ZvcihsZXQgdiBvZiBpKSh2PSthKHYsKytwLGkpKSYmKGYrPXYpfXJldHVybiBmfWZ1bmN0aW9uIEVXZShpKXtyZXR1cm4gaS50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gVFdlKGkpe3JldHVybiBpLmRlcHRofWZ1bmN0aW9uIENXZShpLGEpe3JldHVybiBhLTEtaS5oZWlnaHR9ZnVuY3Rpb24gciR0KGksYSl7cmV0dXJuIGkuc291cmNlTGlua3MubGVuZ3RoP2kuZGVwdGg6YS0xfWZ1bmN0aW9uIF9XZShpKXtyZXR1cm4gaS50YXJnZXRMaW5rcy5sZW5ndGg/aS5kZXB0aDppLnNvdXJjZUxpbmtzLmxlbmd0aD9uJHQoaS5zb3VyY2VMaW5rcyxFV2UpLTE6MH1mdW5jdGlvbiBZSyhpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gaSR0KGksYSl7cmV0dXJuIFhLKGkuc291cmNlLGEuc291cmNlKXx8aS5pbmRleC1hLmluZGV4fWZ1bmN0aW9uIHMkdChpLGEpe3JldHVybiBYSyhpLnRhcmdldCxhLnRhcmdldCl8fGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiBYSyhpLGEpe3JldHVybiBpLnkwLWEueTB9ZnVuY3Rpb24gWWd0KGkpe3JldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFNXZShpKXtyZXR1cm4gaS5pbmRleH1mdW5jdGlvbiBBV2UoaSl7cmV0dXJuIGkubm9kZXN9ZnVuY3Rpb24gTFdlKGkpe3JldHVybiBpLmxpbmtzfWZ1bmN0aW9uIGEkdChpLGEpe2NvbnN0IGY9aS5nZXQoYSk7aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2EpO3JldHVybiBmfWZ1bmN0aW9uIG8kdCh7bm9kZXM6aX0pe2Zvcihjb25zdCBhIG9mIGkpe2xldCBmPWEueTAscD1mO2Zvcihjb25zdCB2IG9mIGEuc291cmNlTGlua3Mpdi55MD1mK3Yud2lkdGgvMixmKz12LndpZHRoO2Zvcihjb25zdCB2IG9mIGEudGFyZ2V0TGlua3Mpdi55MT1wK3Yud2lkdGgvMixwKz12LndpZHRofX1mdW5jdGlvbiBNV2UoKXtsZXQgaT0wLGE9MCxmPTEscD0xLHY9MjQsbT04LGIsRT1TV2UsXz1yJHQsTCxOLEI9QVdlLGo9TFdlLFI9NjtmdW5jdGlvbiB6KCl7Y29uc3QgTnQ9e25vZGVzOkIuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOmouYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gSyhOdCksaXQoTnQpLHN0KE50KSx1dChOdCkseXQoTnQpLG8kdChOdCksTnR9ei51cGRhdGU9ZnVuY3Rpb24oTnQpe3JldHVybiBvJHQoTnQpLE50fSx6Lm5vZGVJZD1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dHlwZW9mIE50PT0iZnVuY3Rpb24iP050OllLKE50KSx6KTpFfSx6Lm5vZGVBbGlnbj1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dHlwZW9mIE50PT0iZnVuY3Rpb24iP050OllLKE50KSx6KTpffSx6Lm5vZGVTb3J0PWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD1OdCx6KTpMfSx6Lm5vZGVXaWR0aD1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K050LHopOnZ9LHoubm9kZVBhZGRpbmc9ZnVuY3Rpb24oTnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWI9K050LHopOm19LHoubm9kZXM9ZnVuY3Rpb24oTnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhCPXR5cGVvZiBOdD09ImZ1bmN0aW9uIj9OdDpZSyhOdCkseik6Qn0sei5saW5rcz1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGo9dHlwZW9mIE50PT0iZnVuY3Rpb24iP050OllLKE50KSx6KTpqfSx6LmxpbmtTb3J0PWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj1OdCx6KTpOfSx6LnNpemU9ZnVuY3Rpb24oTnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9MCxmPStOdFswXSxwPStOdFsxXSx6KTpbZi1pLHAtYV19LHouZXh0ZW50PWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rTnRbMF1bMF0sZj0rTnRbMV1bMF0sYT0rTnRbMF1bMV0scD0rTnRbMV1bMV0seik6W1tpLGFdLFtmLHBdXX0sei5pdGVyYXRpb25zPWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUj0rTnQseik6Un07ZnVuY3Rpb24gSyh7bm9kZXM6TnQsbGlua3M6cXR9KXtmb3IoY29uc3RbWixUdF1vZiBOdC5lbnRyaWVzKCkpVHQuaW5kZXg9WixUdC5zb3VyY2VMaW5rcz1bXSxUdC50YXJnZXRMaW5rcz1bXTtjb25zdCBDdD1uZXcgTWFwKE50Lm1hcCgoWixUdCk9PltFKFosVHQsTnQpLFpdKSk7Zm9yKGNvbnN0W1osVHRdb2YgcXQuZW50cmllcygpKXtUdC5pbmRleD1aO2xldHtzb3VyY2U6SHQsdGFyZ2V0Okl0fT1UdDt0eXBlb2YgSHQhPSJvYmplY3QiJiYoSHQ9VHQuc291cmNlPWEkdChDdCxIdCkpLHR5cGVvZiBJdCE9Im9iamVjdCImJihJdD1UdC50YXJnZXQ9YSR0KEN0LEl0KSksSHQuc291cmNlTGlua3MucHVzaChUdCksSXQudGFyZ2V0TGlua3MucHVzaChUdCl9aWYoTiE9bnVsbClmb3IoY29uc3R7c291cmNlTGlua3M6Wix0YXJnZXRMaW5rczpUdH1vZiBOdClaLnNvcnQoTiksVHQuc29ydChOKX1mdW5jdGlvbiBpdCh7bm9kZXM6TnR9KXtmb3IoY29uc3QgcXQgb2YgTnQpcXQudmFsdWU9cXQuZml4ZWRWYWx1ZT09PXZvaWQgMD9NYXRoLm1heChLZ3QocXQuc291cmNlTGlua3MsWWd0KSxLZ3QocXQudGFyZ2V0TGlua3MsWWd0KSk6cXQuZml4ZWRWYWx1ZX1mdW5jdGlvbiBzdCh7bm9kZXM6TnR9KXtjb25zdCBxdD1OdC5sZW5ndGg7bGV0IEN0PW5ldyBTZXQoTnQpLFo9bmV3IFNldCxUdD0wO2Zvcig7Q3Quc2l6ZTspe2Zvcihjb25zdCBIdCBvZiBDdCl7SHQuZGVwdGg9VHQ7Zm9yKGNvbnN0e3RhcmdldDpJdH1vZiBIdC5zb3VyY2VMaW5rcylaLmFkZChJdCl9aWYoKytUdD5xdCl0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtDdD1aLFo9bmV3IFNldH19ZnVuY3Rpb24gdXQoe25vZGVzOk50fSl7Y29uc3QgcXQ9TnQubGVuZ3RoO2xldCBDdD1uZXcgU2V0KE50KSxaPW5ldyBTZXQsVHQ9MDtmb3IoO0N0LnNpemU7KXtmb3IoY29uc3QgSHQgb2YgQ3Qpe0h0LmhlaWdodD1UdDtmb3IoY29uc3R7c291cmNlOkl0fW9mIEh0LnRhcmdldExpbmtzKVouYWRkKEl0KX1pZigrK1R0PnF0KXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0N0PVosWj1uZXcgU2V0fX1mdW5jdGlvbiBidCh7bm9kZXM6TnR9KXtjb25zdCBxdD1lJHQoTnQsVHQ9PlR0LmRlcHRoKSsxLEN0PShmLWktdikvKHF0LTEpLFo9bmV3IEFycmF5KHF0KTtmb3IoY29uc3QgVHQgb2YgTnQpe2NvbnN0IEh0PU1hdGgubWF4KDAsTWF0aC5taW4ocXQtMSxNYXRoLmZsb29yKF8uY2FsbChudWxsLFR0LHF0KSkpKTtUdC5sYXllcj1IdCxUdC54MD1pK0h0KkN0LFR0LngxPVR0LngwK3YsWltIdF0/WltIdF0ucHVzaChUdCk6WltIdF09W1R0XX1pZihMKWZvcihjb25zdCBUdCBvZiBaKVR0LnNvcnQoTCk7cmV0dXJuIFp9ZnVuY3Rpb24gbXQoTnQpe2NvbnN0IHF0PW4kdChOdCxDdD0+KHAtYS0oQ3QubGVuZ3RoLTEpKmIpL0tndChDdCxZZ3QpKTtmb3IoY29uc3QgQ3Qgb2YgTnQpe2xldCBaPWE7Zm9yKGNvbnN0IFR0IG9mIEN0KXtUdC55MD1aLFR0LnkxPVorVHQudmFsdWUqcXQsWj1UdC55MStiO2Zvcihjb25zdCBIdCBvZiBUdC5zb3VyY2VMaW5rcylIdC53aWR0aD1IdC52YWx1ZSpxdH1aPShwLVorYikvKEN0Lmxlbmd0aCsxKTtmb3IobGV0IFR0PTA7VHQ8Q3QubGVuZ3RoOysrVHQpe2NvbnN0IEh0PUN0W1R0XTtIdC55MCs9WiooVHQrMSksSHQueTErPVoqKFR0KzEpfXh0KEN0KX19ZnVuY3Rpb24geXQoTnQpe2NvbnN0IHF0PWJ0KE50KTtiPU1hdGgubWluKG0sKHAtYSkvKGUkdChxdCxDdD0+Q3QubGVuZ3RoKS0xKSksbXQocXQpO2ZvcihsZXQgQ3Q9MDtDdDxSOysrQ3Qpe2NvbnN0IFo9TWF0aC5wb3coLjk5LEN0KSxUdD1NYXRoLm1heCgxLVosKEN0KzEpL1IpO2h0KHF0LFosVHQpLGR0KHF0LFosVHQpfX1mdW5jdGlvbiBkdChOdCxxdCxDdCl7Zm9yKGxldCBaPTEsVHQ9TnQubGVuZ3RoO1o8VHQ7KytaKXtjb25zdCBIdD1OdFtaXTtmb3IoY29uc3QgSXQgb2YgSHQpe2xldCBGdD0wLGtlPTA7Zm9yKGNvbnN0e3NvdXJjZTpNZSx2YWx1ZTp2ZX1vZiBJdC50YXJnZXRMaW5rcyl7bGV0IEdlPXZlKihJdC5sYXllci1NZS5sYXllcik7RnQrPW50KE1lLEl0KSpHZSxrZSs9R2V9aWYoIShrZT4wKSljb250aW51ZTtsZXQgcG49KEZ0L2tlLUl0LnkwKSpxdDtJdC55MCs9cG4sSXQueTErPXBuLFUoSXQpfUw9PT12b2lkIDAmJkh0LnNvcnQoWEspLHd0KEh0LEN0KX19ZnVuY3Rpb24gaHQoTnQscXQsQ3Qpe2ZvcihsZXQgWj1OdC5sZW5ndGgsVHQ9Wi0yO1R0Pj0wOy0tVHQpe2NvbnN0IEh0PU50W1R0XTtmb3IoY29uc3QgSXQgb2YgSHQpe2xldCBGdD0wLGtlPTA7Zm9yKGNvbnN0e3RhcmdldDpNZSx2YWx1ZTp2ZX1vZiBJdC5zb3VyY2VMaW5rcyl7bGV0IEdlPXZlKihNZS5sYXllci1JdC5sYXllcik7RnQrPU90KEl0LE1lKSpHZSxrZSs9R2V9aWYoIShrZT4wKSljb250aW51ZTtsZXQgcG49KEZ0L2tlLUl0LnkwKSpxdDtJdC55MCs9cG4sSXQueTErPXBuLFUoSXQpfUw9PT12b2lkIDAmJkh0LnNvcnQoWEspLHd0KEh0LEN0KX19ZnVuY3Rpb24gd3QoTnQscXQpe2NvbnN0IEN0PU50Lmxlbmd0aD4+MSxaPU50W0N0XTtwdChOdCxaLnkwLWIsQ3QtMSxxdCksWChOdCxaLnkxK2IsQ3QrMSxxdCkscHQoTnQscCxOdC5sZW5ndGgtMSxxdCksWChOdCxhLDAscXQpfWZ1bmN0aW9uIFgoTnQscXQsQ3QsWil7Zm9yKDtDdDxOdC5sZW5ndGg7KytDdCl7Y29uc3QgVHQ9TnRbQ3RdLEh0PShxdC1UdC55MCkqWjtIdD4xZS02JiYoVHQueTArPUh0LFR0LnkxKz1IdCkscXQ9VHQueTErYn19ZnVuY3Rpb24gcHQoTnQscXQsQ3QsWil7Zm9yKDtDdD49MDstLUN0KXtjb25zdCBUdD1OdFtDdF0sSHQ9KFR0LnkxLXF0KSpaO0h0PjFlLTYmJihUdC55MC09SHQsVHQueTEtPUh0KSxxdD1UdC55MC1ifX1mdW5jdGlvbiBVKHtzb3VyY2VMaW5rczpOdCx0YXJnZXRMaW5rczpxdH0pe2lmKE49PT12b2lkIDApe2Zvcihjb25zdHtzb3VyY2U6e3NvdXJjZUxpbmtzOkN0fX1vZiBxdClDdC5zb3J0KHMkdCk7Zm9yKGNvbnN0e3RhcmdldDp7dGFyZ2V0TGlua3M6Q3R9fW9mIE50KUN0LnNvcnQoaSR0KX19ZnVuY3Rpb24geHQoTnQpe2lmKE49PT12b2lkIDApZm9yKGNvbnN0e3NvdXJjZUxpbmtzOnF0LHRhcmdldExpbmtzOkN0fW9mIE50KXF0LnNvcnQocyR0KSxDdC5zb3J0KGkkdCl9ZnVuY3Rpb24gbnQoTnQscXQpe2xldCBDdD1OdC55MC0oTnQuc291cmNlTGlua3MubGVuZ3RoLTEpKmIvMjtmb3IoY29uc3R7dGFyZ2V0Olosd2lkdGg6VHR9b2YgTnQuc291cmNlTGlua3Mpe2lmKFo9PT1xdClicmVhaztDdCs9VHQrYn1mb3IoY29uc3R7c291cmNlOlosd2lkdGg6VHR9b2YgcXQudGFyZ2V0TGlua3Mpe2lmKFo9PT1OdClicmVhaztDdC09VHR9cmV0dXJuIEN0fWZ1bmN0aW9uIE90KE50LHF0KXtsZXQgQ3Q9cXQueTAtKHF0LnRhcmdldExpbmtzLmxlbmd0aC0xKSpiLzI7Zm9yKGNvbnN0e3NvdXJjZTpaLHdpZHRoOlR0fW9mIHF0LnRhcmdldExpbmtzKXtpZihaPT09TnQpYnJlYWs7Q3QrPVR0K2J9Zm9yKGNvbnN0e3RhcmdldDpaLHdpZHRoOlR0fW9mIE50LnNvdXJjZUxpbmtzKXtpZihaPT09cXQpYnJlYWs7Q3QtPVR0fXJldHVybiBDdH1yZXR1cm4gen12YXIgWGd0PU1hdGguUEksUWd0PTIqWGd0LE1UPTFlLTYsSVdlPVFndC1NVDtmdW5jdGlvbiBaZ3QoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBjJHQoKXtyZXR1cm4gbmV3IFpndH1aZ3QucHJvdG90eXBlPWMkdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlpndCxtb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK2ErIiwiKyh0aGlzLl94MT0rZikrIiwiKyh0aGlzLl95MT0rcCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCx2LG0pe3RoaXMuXys9IkMiKyAraSsiLCIrICthKyIsIisgK2YrIiwiKyArcCsiLCIrKHRoaXMuX3gxPSt2KSsiLCIrKHRoaXMuX3kxPSttKX0sYXJjVG86ZnVuY3Rpb24oaSxhLGYscCx2KXtpPStpLGE9K2EsZj0rZixwPStwLHY9K3Y7dmFyIG09dGhpcy5feDEsYj10aGlzLl95MSxFPWYtaSxfPXAtYSxMPW0taSxOPWItYSxCPUwqTCtOKk47aWYodjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3YpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1hKTtlbHNlIGlmKEI+TVQpaWYoIShNYXRoLmFicyhOKkUtXypMKT5NVCl8fCF2KXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPWEpO2Vsc2V7dmFyIGo9Zi1tLFI9cC1iLHo9RSpFK18qXyxLPWoqaitSKlIsaXQ9TWF0aC5zcXJ0KHopLHN0PU1hdGguc3FydChCKSx1dD12Kk1hdGgudGFuKChYZ3QtTWF0aC5hY29zKCh6K0ItSykvKDIqaXQqc3QpKSkvMiksYnQ9dXQvc3QsbXQ9dXQvaXQ7TWF0aC5hYnMoYnQtMSk+TVQmJih0aGlzLl8rPSJMIisoaStidCpMKSsiLCIrKGErYnQqTikpLHRoaXMuXys9IkEiK3YrIiwiK3YrIiwwLDAsIisgKyhOKmo+TCpSKSsiLCIrKHRoaXMuX3gxPWkrbXQqRSkrIiwiKyh0aGlzLl95MT1hK210Kl8pfX0sYXJjOmZ1bmN0aW9uKGksYSxmLHAsdixtKXtpPStpLGE9K2EsZj0rZixtPSEhbTt2YXIgYj1mKk1hdGguY29zKHApLEU9ZipNYXRoLnNpbihwKSxfPWkrYixMPWErRSxOPTFebSxCPW0/cC12OnYtcDtpZihmPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK18rIiwiK0w6KE1hdGguYWJzKHRoaXMuX3gxLV8pPk1UfHxNYXRoLmFicyh0aGlzLl95MS1MKT5NVCkmJih0aGlzLl8rPSJMIitfKyIsIitMKSxmJiYoQjwwJiYoQj1CJVFndCtRZ3QpLEI+SVdlP3RoaXMuXys9IkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisoaS1iKSsiLCIrKGEtRSkrIkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisodGhpcy5feDE9XykrIiwiKyh0aGlzLl95MT1MKTpCPk1UJiYodGhpcy5fKz0iQSIrZisiLCIrZisiLDAsIisgKyhCPj1YZ3QpKyIsIitOKyIsIisodGhpcy5feDE9aStmKk1hdGguY29zKHYpKSsiLCIrKHRoaXMuX3kxPWErZipNYXRoLnNpbih2KSkpKX0scmVjdDpmdW5jdGlvbihpLGEsZixwKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpKyJoIisgK2YrInYiKyArcCsiaCIrLWYrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiB1JHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIERXZShpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBPV2UoaSl7cmV0dXJuIGlbMV19dmFyIE5XZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gUFdlKGkpe3JldHVybiBpLnNvdXJjZX1mdW5jdGlvbiBGV2UoaSl7cmV0dXJuIGkudGFyZ2V0fWZ1bmN0aW9uIEJXZShpKXt2YXIgYT1QV2UsZj1GV2UscD1EV2Usdj1PV2UsbT1udWxsO2Z1bmN0aW9uIGIoKXt2YXIgRSxfPU5XZS5jYWxsKGFyZ3VtZW50cyksTD1hLmFwcGx5KHRoaXMsXyksTj1mLmFwcGx5KHRoaXMsXyk7aWYobXx8KG09RT1jJHQoKSksaShtLCtwLmFwcGx5KHRoaXMsKF9bMF09TCxfKSksK3YuYXBwbHkodGhpcyxfKSwrcC5hcHBseSh0aGlzLChfWzBdPU4sXykpLCt2LmFwcGx5KHRoaXMsXykpLEUpcmV0dXJuIG09bnVsbCxFKyIifHxudWxsfXJldHVybiBiLnNvdXJjZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FLGIpOmF9LGIudGFyZ2V0PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUUsYik6Zn0sYi54PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6dSR0KCtFKSxiKTpwfSxiLnk9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTp1JHQoK0UpLGIpOnZ9LGIuY29udGV4dD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1FPz9udWxsLGIpOm19LGJ9ZnVuY3Rpb24gUldlKGksYSxmLHAsdil7aS5tb3ZlVG8oYSxmKSxpLmJlemllckN1cnZlVG8oYT0oYStwKS8yLGYsYSx2LHAsdil9ZnVuY3Rpb24galdlKCl7cmV0dXJuIEJXZShSV2UpfWZ1bmN0aW9uICRXZShpKXtyZXR1cm5baS5zb3VyY2UueDEsaS55MF19ZnVuY3Rpb24geldlKGkpe3JldHVybltpLnRhcmdldC54MCxpLnkxXX1mdW5jdGlvbiBxV2UoKXtyZXR1cm4galdlKCkuc291cmNlKCRXZSkudGFyZ2V0KHpXZSl9Y29uc3QgSmd0PWNsYXNze3N0YXRpYyBuZXh0KGkpe3JldHVybiBuZXcgSmd0KGkrICsrSmd0LmNvdW50KX1jb25zdHJ1Y3RvcihpKXt0aGlzLmlkPWksdGhpcy5ocmVmPWAjJHtpfWB9dG9TdHJpbmcoKXtyZXR1cm4idXJsKCIrdGhpcy5ocmVmKyIpIn19O2xldCB0cHQ9Smd0O3RwdC5jb3VudD0wO2NvbnN0IEhXZT17bGVmdDpUV2UscmlnaHQ6Q1dlLGNlbnRlcjpfV2UsanVzdGlmeTpyJHR9LEdXZT17ZHJhdzpmdW5jdGlvbihpLGEsZixwKXtjb25zdHtzZWN1cml0eUxldmVsOnYsc2Fua2V5Om19PUxlKCksYj1vVC5zYW5rZXk7bGV0IEU7dj09PSJzYW5kYm94IiYmKEU9eXIoIiNpIithKSk7Y29uc3QgXz15cih2PT09InNhbmRib3giP0Uubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEw9dj09PSJzYW5kYm94Ij9fLnNlbGVjdChgW2lkPSIke2F9Il1gKTp5cihgW2lkPSIke2F9Il1gKSxOPShtPT1udWxsP3ZvaWQgMDptLndpZHRoKT8/Yi53aWR0aCxCPShtPT1udWxsP3ZvaWQgMDptLmhlaWdodCk/P2Iud2lkdGgsaj0obT09bnVsbD92b2lkIDA6bS51c2VNYXhXaWR0aCk/P2IudXNlTWF4V2lkdGgsUj0obT09bnVsbD92b2lkIDA6bS5ub2RlQWxpZ25tZW50KT8/Yi5ub2RlQWxpZ25tZW50LHo9KG09PW51bGw/dm9pZCAwOm0ucHJlZml4KT8/Yi5wcmVmaXgsSz0obT09bnVsbD92b2lkIDA6bS5zdWZmaXgpPz9iLnN1ZmZpeCxpdD0obT09bnVsbD92b2lkIDA6bS5zaG93VmFsdWVzKT8/Yi5zaG93VmFsdWVzO29nKEwsQixOLGopO2NvbnN0IHN0PXAuZGIuZ2V0R3JhcGgoKSx1dD1IV2VbUl0sYnQ9MTA7TVdlKCkubm9kZUlkKHB0PT5wdC5pZCkubm9kZVdpZHRoKGJ0KS5ub2RlUGFkZGluZygxMCsoaXQ/MTU6MCkpLm5vZGVBbGlnbih1dCkuZXh0ZW50KFtbMCwwXSxbTixCXV0pKHN0KTtjb25zdCB5dD14MXQoUzdlKTtMLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKS5zZWxlY3RBbGwoIi5ub2RlIikuZGF0YShzdC5ub2Rlcykuam9pbigiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLmF0dHIoImlkIixwdD0+KHB0LnVpZD10cHQubmV4dCgibm9kZS0iKSkuaWQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24ocHQpe3JldHVybiJ0cmFuc2xhdGUoIitwdC54MCsiLCIrcHQueTArIikifSkuYXR0cigieCIscHQ9PnB0LngwKS5hdHRyKCJ5IixwdD0+cHQueTApLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIscHQ9PnB0LnkxLXB0LnkwKS5hdHRyKCJ3aWR0aCIscHQ9PnB0LngxLXB0LngwKS5hdHRyKCJmaWxsIixwdD0+eXQocHQuaWQpKTtjb25zdCBkdD0oe2lkOnB0LHZhbHVlOlV9KT0+aXQ/YCR7cHR9CiR7en0ke01hdGgucm91bmQoVSoxMDApLzEwMH0ke0t9YDpwdDtMLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbHMiKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLDE0KS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHN0Lm5vZGVzKS5qb2luKCJ0ZXh0IikuYXR0cigieCIscHQ9PnB0LngwPE4vMj9wdC54MSs2OnB0LngwLTYpLmF0dHIoInkiLHB0PT4ocHQueTErcHQueTApLzIpLmF0dHIoImR5IixgJHtpdD8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLHB0PT5wdC54MDxOLzI/InN0YXJ0IjoiZW5kIikudGV4dChkdCk7Y29uc3QgaHQ9TC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKHN0LmxpbmtzKS5qb2luKCJnIikuYXR0cigiY2xhc3MiLCJsaW5rIikuc3R5bGUoIm1peC1ibGVuZC1tb2RlIiwibXVsdGlwbHkiKSx3dD0obT09bnVsbD92b2lkIDA6bS5saW5rQ29sb3IpfHwiZ3JhZGllbnQiO2lmKHd0PT09ImdyYWRpZW50Iil7Y29uc3QgcHQ9aHQuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixVPT4oVS51aWQ9dHB0Lm5leHQoImxpbmVhckdyYWRpZW50LSIpKS5pZCkuYXR0cigiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigieDEiLFU9PlUuc291cmNlLngxKS5hdHRyKCJ4MiIsVT0+VS50YXJnZXQueDApO3B0LmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsIjAlIikuYXR0cigic3RvcC1jb2xvciIsVT0+eXQoVS5zb3VyY2UuaWQpKSxwdC5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIxMDAlIikuYXR0cigic3RvcC1jb2xvciIsVT0+eXQoVS50YXJnZXQuaWQpKX1sZXQgWDtzd2l0Y2god3Qpe2Nhc2UiZ3JhZGllbnQiOlg9cHQ9PnB0LnVpZDticmVhaztjYXNlInNvdXJjZSI6WD1wdD0+eXQocHQuc291cmNlLmlkKTticmVhaztjYXNlInRhcmdldCI6WD1wdD0+eXQocHQudGFyZ2V0LmlkKTticmVhaztkZWZhdWx0Olg9d3R9aHQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscVdlKCkpLmF0dHIoInN0cm9rZSIsWCkuYXR0cigic3Ryb2tlLXdpZHRoIixwdD0+TWF0aC5tYXgoMSxwdC53aWR0aCkpfX0sVldlPWk9PmkucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksVVdlPVVLLnBhcnNlLmJpbmQoVUspO1VLLnBhcnNlPWk9PlVXZShWV2UoaSkpO2NvbnN0IFdXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOlVLLGRiOmtXZSxyZW5kZXJlcjpHV2V9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3JldHVybiBPYn0pOwo=`;