mberr · data · 2.7c767379.chunk.js_28
{
"2.7c767379.chunk.js_28": "base64:TklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGUuc2lnaW5mby5hbGdvcml0aG1PaWQpLmdldEJ5dGVzKCkpLG0oZS5zaWdpbmZvLmFsZ29yaXRobU9pZCxlLnNpZ2luZm8ucGFyYW1ldGVycyldKSx5KGUuaXNzdWVyKSxpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW3Qscl0pLHkoZS5zdWJqZWN0KSxvLnB1YmxpY0tleVRvQXNuMShlLnB1YmxpY0tleSldKTtyZXR1cm4gZS5pc3N1ZXIudW5pcXVlSWQmJmEudmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDApK2UuaXNzdWVyLnVuaXF1ZUlkKV0pKSxlLnN1YmplY3QudW5pcXVlSWQmJmEudmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMiwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDApK2Uuc3ViamVjdC51bmlxdWVJZCldKSksZS5leHRlbnNpb25zLmxlbmd0aD4wJiZhLnZhbHVlLnB1c2goby5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNUb0FzbjEoZS5leHRlbnNpb25zKSksYX0sby5nZXRDZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm89ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS52ZXJzaW9uKS5nZXRCeXRlcygpKSx5KGUuc3ViamVjdCksby5wdWJsaWNLZXlUb0FzbjEoZS5wdWJsaWNLZXkpLGIoZSldKX0sby5kaXN0aW5ndWlzaGVkTmFtZVRvQXNuMT1mdW5jdGlvbihlKXtyZXR1cm4geShlKX0sby5jZXJ0aWZpY2F0ZVRvQXNuMT1mdW5jdGlvbihlKXt2YXIgdD1lLnRic0NlcnRpZmljYXRlfHxvLmdldFRCU0NlcnRpZmljYXRlKGUpO3JldHVybiBpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW3QsaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIoZS5zaWduYXR1cmVPaWQpLmdldEJ5dGVzKCkpLG0oZS5zaWduYXR1cmVPaWQsZS5zaWduYXR1cmVQYXJhbWV0ZXJzKV0pLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CSVRTVFJJTkcsITEsU3RyaW5nLmZyb21DaGFyQ29kZSgwKStlLnNpZ25hdHVyZSldKX0sby5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNUb0FzbjE9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDMsITAsW10pLHI9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKTt0LnZhbHVlLnB1c2gocik7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pci52YWx1ZS5wdXNoKG8uY2VydGlmaWNhdGVFeHRlbnNpb25Ub0FzbjEoZVtuXSkpO3JldHVybiB0fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uVG9Bc24xPWZ1bmN0aW9uKGUpe3ZhciB0PWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSk7dC52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5PSUQsITEsaS5vaWRUb0RlcihlLmlkKS5nZXRCeXRlcygpKSksZS5jcml0aWNhbCYmdC52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CT09MRUFOLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KSkpO3ZhciByPWUudmFsdWU7cmV0dXJuInN0cmluZyIhPT10eXBlb2YgZS52YWx1ZSYmKHI9aS50b0RlcihyKS5nZXRCeXRlcygpKSx0LnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9DVEVUU1RSSU5HLCExLHIpKSx0fSxvLmNlcnRpZmljYXRpb25SZXF1ZXN0VG9Bc24xPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvfHxvLmdldENlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyhlKTtyZXR1cm4gaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFt0LGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGUuc2lnbmF0dXJlT2lkKS5nZXRCeXRlcygpKSxtKGUuc2lnbmF0dXJlT2lkLGUuc2lnbmF0dXJlUGFyYW1ldGVycyldKSxpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuQklUU1RSSU5HLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMCkrZS5zaWduYXR1cmUpXSl9LG8uY3JlYXRlQ2FTdG9yZT1mdW5jdGlvbihlKXt2YXIgdD17Y2VydHM6e319O2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGEoZSksdC5jZXJ0c1tlLmhhc2hdfHxudWxsfWZ1bmN0aW9uIGEoZSl7aWYoIWUuaGFzaCl7dmFyIHQ9bi5tZC5zaGExLmNyZWF0ZSgpO2UuYXR0cmlidXRlcz1vLlJETkF0dHJpYnV0ZXNBc0FycmF5KHkoZSksdCksZS5oYXNoPXQuZGlnZXN0KCkudG9IZXgoKX19aWYodC5nZXRJc3N1ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5pc3N1ZXIpfSx0LmFkZENlcnRpZmljYXRlPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT09dHlwZW9mIGUmJihlPW4ucGtpLmNlcnRpZmljYXRlRnJvbVBlbShlKSksYShlLnN1YmplY3QpLCF0Lmhhc0NlcnRpZmljYXRlKGUpKWlmKGUuc3ViamVjdC5oYXNoIGluIHQuY2VydHMpe3ZhciByPXQuY2VydHNbZS5zdWJqZWN0Lmhhc2hdO24udXRpbC5pc0FycmF5KHIpfHwocj1bcl0pLHIucHVzaChlKSx0LmNlcnRzW2Uuc3ViamVjdC5oYXNoXT1yfWVsc2UgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF09ZX0sdC5oYXNDZXJ0aWZpY2F0ZT1mdW5jdGlvbihlKXsic3RyaW5nIj09PXR5cGVvZiBlJiYoZT1uLnBraS5jZXJ0aWZpY2F0ZUZyb21QZW0oZSkpO3ZhciB0PXIoZS5zdWJqZWN0KTtpZighdClyZXR1cm4hMTtuLnV0aWwuaXNBcnJheSh0KXx8KHQ9W3RdKTtmb3IodmFyIGE9aS50b0RlcihvLmNlcnRpZmljYXRlVG9Bc24xKGUpKS5nZXRCeXRlcygpLHM9MDtzPHQubGVuZ3RoOysrcyl7aWYoYT09PWkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMSh0W3NdKSkuZ2V0Qnl0ZXMoKSlyZXR1cm4hMH1yZXR1cm4hMX0sdC5saXN0QWxsQ2VydGlmaWNhdGVzPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQuY2VydHMpaWYodC5jZXJ0cy5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIGk9dC5jZXJ0c1tyXTtpZihuLnV0aWwuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoOysrbyllLnB1c2goaVtvXSk7ZWxzZSBlLnB1c2goaSl9cmV0dXJuIGV9LHQucmVtb3ZlQ2VydGlmaWNhdGU9ZnVuY3Rpb24oZSl7dmFyIHM7aWYoInN0cmluZyI9PT10eXBlb2YgZSYmKGU9bi5wa2kuY2VydGlmaWNhdGVGcm9tUGVtKGUpKSxhKGUuc3ViamVjdCksIXQuaGFzQ2VydGlmaWNhdGUoZSkpcmV0dXJuIG51bGw7dmFyIHU9cihlLnN1YmplY3QpO2lmKCFuLnV0aWwuaXNBcnJheSh1KSlyZXR1cm4gcz10LmNlcnRzW2Uuc3ViamVjdC5oYXNoXSxkZWxldGUgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF0scztmb3IodmFyIGM9aS50b0RlcihvLmNlcnRpZmljYXRlVG9Bc24xKGUpKS5nZXRCeXRlcygpLGY9MDtmPHUubGVuZ3RoOysrZil7Yz09PWkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMSh1W2ZdKSkuZ2V0Qnl0ZXMoKSYmKHM9dVtmXSx1LnNwbGljZShmLDEpKX1yZXR1cm4gMD09PXUubGVuZ3RoJiZkZWxldGUgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF0sc30sZSlmb3IodmFyIHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIHU9ZVtzXTt0LmFkZENlcnRpZmljYXRlKHUpfXJldHVybiB0fSxvLmNlcnRpZmljYXRlRXJyb3I9e2JhZF9jZXJ0aWZpY2F0ZToiZm9yZ2UucGtpLkJhZENlcnRpZmljYXRlIix1bnN1cHBvcnRlZF9jZXJ0aWZpY2F0ZToiZm9yZ2UucGtpLlVuc3VwcG9ydGVkQ2VydGlmaWNhdGUiLGNlcnRpZmljYXRlX3Jldm9rZWQ6ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZVJldm9rZWQiLGNlcnRpZmljYXRlX2V4cGlyZWQ6ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZUV4cGlyZWQiLGNlcnRpZmljYXRlX3Vua25vd246ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZVVua25vd24iLHVua25vd25fY2E6ImZvcmdlLnBraS5Vbmtub3duQ2VydGlmaWNhdGVBdXRob3JpdHkifSxvLnZlcmlmeUNlcnRpZmljYXRlQ2hhaW49ZnVuY3Rpb24oZSx0LHIpeyJmdW5jdGlvbiI9PT10eXBlb2YgciYmKHI9e3ZlcmlmeTpyfSkscj1yfHx7fTt2YXIgaT0odD10LnNsaWNlKDApKS5zbGljZSgwKSxhPXIudmFsaWRpdHlDaGVja0RhdGU7InVuZGVmaW5lZCI9PT10eXBlb2YgYSYmKGE9bmV3IERhdGUpO3ZhciBzPSEwLHU9bnVsbCxjPTA7ZG97dmFyIGY9dC5zaGlmdCgpLGw9bnVsbCxoPSExO2lmKGEmJihhPGYudmFsaWRpdHkubm90QmVmb3JlfHxhPmYudmFsaWRpdHkubm90QWZ0ZXIpJiYodT17bWVzc2FnZToiQ2VydGlmaWNhdGUgaXMgbm90IHZhbGlkIHlldCBvciBoYXMgZXhwaXJlZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci5jZXJ0aWZpY2F0ZV9leHBpcmVkLG5vdEJlZm9yZTpmLnZhbGlkaXR5Lm5vdEJlZm9yZSxub3RBZnRlcjpmLnZhbGlkaXR5Lm5vdEFmdGVyLG5vdzphfSksbnVsbD09PXUpe2lmKG51bGw9PT0obD10WzBdfHxlLmdldElzc3VlcihmKSkmJmYuaXNJc3N1ZXIoZikmJihoPSEwLGw9ZiksbCl7dmFyIHA9bDtuLnV0aWwuaXNBcnJheShwKXx8KHA9W3BdKTtmb3IodmFyIGQ9ITE7IWQmJnAubGVuZ3RoPjA7KXtsPXAuc2hpZnQoKTt0cnl7ZD1sLnZlcmlmeShmKX1jYXRjaChFKXt9fWR8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBzaWduYXR1cmUgaXMgaW52YWxpZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci5iYWRfY2VydGlmaWNhdGV9KX1udWxsIT09dXx8bCYmIWh8fGUuaGFzQ2VydGlmaWNhdGUoZil8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci51bmtub3duX2NhfSl9aWYobnVsbD09PXUmJmwmJiFmLmlzSXNzdWVyKGwpJiYodT17bWVzc2FnZToiQ2VydGlmaWNhdGUgaXNzdWVyIGlzIGludmFsaWQuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSksbnVsbD09PXUpZm9yKHZhciB5PXtrZXlVc2FnZTohMCxiYXNpY0NvbnN0cmFpbnRzOiEwfSxnPTA7bnVsbD09PXUmJmc8Zi5leHRlbnNpb25zLmxlbmd0aDsrK2cpe3ZhciB2PWYuZXh0ZW5zaW9uc1tnXTshdi5jcml0aWNhbHx8di5uYW1lIGluIHl8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBoYXMgYW4gdW5zdXBwb3J0ZWQgY3JpdGljYWwgZXh0ZW5zaW9uLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLnVuc3VwcG9ydGVkX2NlcnRpZmljYXRlfSl9aWYobnVsbD09PXUmJighc3x8MD09PXQubGVuZ3RoJiYoIWx8fGgpKSl7dmFyIG09Zi5nZXRFeHRlbnNpb24oImJhc2ljQ29uc3RyYWludHMiKSxiPWYuZ2V0RXh0ZW5zaW9uKCJrZXlVc2FnZSIpO2lmKG51bGwhPT1iJiYoYi5rZXlDZXJ0U2lnbiYmbnVsbCE9PW18fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBrZXlVc2FnZSBvciBiYXNpY0NvbnN0cmFpbnRzIGNvbmZsaWN0IG9yIGluZGljYXRlIHRoYXQgdGhlIGNlcnRpZmljYXRlIGlzIG5vdCBhIENBLiBJZiB0aGUgY2VydGlmaWNhdGUgaXMgdGhlIG9ubHkgb25lIGluIHRoZSBjaGFpbiBvciBpc24ndCB0aGUgZmlyc3QgdGhlbiB0aGUgY2VydGlmaWNhdGUgbXVzdCBiZSBhIHZhbGlkIENBLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLmJhZF9jZXJ0aWZpY2F0ZX0pKSxudWxsIT09dXx8bnVsbD09PW18fG0uY0F8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBiYXNpY0NvbnN0cmFpbnRzIGluZGljYXRlcyB0aGUgY2VydGlmaWNhdGUgaXMgbm90IGEgQ0EuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSksbnVsbD09PXUmJm51bGwhPT1iJiYicGF0aExlbkNvbnN0cmFpbnQiaW4gbSljLTE+bS5wYXRoTGVuQ29uc3RyYWludCYmKHU9e21lc3NhZ2U6IkNlcnRpZmljYXRlIGJhc2ljQ29uc3RyYWludHMgcGF0aExlbkNvbnN0cmFpbnQgdmlvbGF0ZWQuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSl9dmFyIF89bnVsbD09PXV8fHUuZXJyb3IsUz1yLnZlcmlmeT9yLnZlcmlmeShfLGMsaSk6XztpZighMCE9PVMpdGhyb3chMD09PV8mJih1PXttZXNzYWdlOiJUaGUgYXBwbGljYXRpb24gcmVqZWN0ZWQgdGhlIGNlcnRpZmljYXRlLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLmJhZF9jZXJ0aWZpY2F0ZX0pLChTfHwwPT09UykmJigib2JqZWN0IiE9PXR5cGVvZiBTfHxuLnV0aWwuaXNBcnJheShTKT8ic3RyaW5nIj09PXR5cGVvZiBTJiYodS5lcnJvcj1TKTooUy5tZXNzYWdlJiYodS5tZXNzYWdlPVMubWVzc2FnZSksUy5lcnJvciYmKHUuZXJyb3I9Uy5lcnJvcikpKSx1O3U9bnVsbCxzPSExLCsrY313aGlsZSh0Lmxlbmd0aD4wKTtyZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDYpO3IoNTIpLHIoMTApLChlLmV4cG9ydHM9bi5wc3M9bi5wc3N8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJihlPXttZDphcmd1bWVudHNbMF0sbWdmOmFyZ3VtZW50c1sxXSxzYWx0TGVuZ3RoOmFyZ3VtZW50c1syXX0pO3ZhciB0LHI9ZS5tZCxpPWUubWdmLG89ci5kaWdlc3RMZW5ndGgsYT1lLnNhbHR8fG51bGw7aWYoInN0cmluZyI9PT10eXBlb2YgYSYmKGE9bi51dGlsLmNyZWF0ZUJ1ZmZlcihhKSksInNhbHRMZW5ndGgiaW4gZSl0PWUuc2FsdExlbmd0aDtlbHNle2lmKG51bGw9PT1hKXRocm93IG5ldyBFcnJvcigiU2FsdCBsZW5ndGggbm90IHNwZWNpZmllZCBvciBzcGVjaWZpYyBzYWx0IG5vdCBnaXZlbi4iKTt0PWEubGVuZ3RoKCl9aWYobnVsbCE9PWEmJmEubGVuZ3RoKCkhPT10KXRocm93IG5ldyBFcnJvcigiR2l2ZW4gc2FsdCBsZW5ndGggZG9lcyBub3QgbWF0Y2ggbGVuZ3RoIG9mIGdpdmVuIHNhbHQuIik7dmFyIHM9ZS5wcm5nfHxuLnJhbmRvbSx1PXtlbmNvZGU6ZnVuY3Rpb24oZSx1KXt2YXIgYyxmLGw9dS0xLGg9TWF0aC5jZWlsKGwvOCkscD1lLmRpZ2VzdCgpLmdldEJ5dGVzKCk7aWYoaDxvK3QrMil0aHJvdyBuZXcgRXJyb3IoIk1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gZW5jcnlwdC4iKTtmPW51bGw9PT1hP3MuZ2V0Qnl0ZXNTeW5jKHQpOmEuYnl0ZXMoKTt2YXIgZD1uZXcgbi51dGlsLkJ5dGVCdWZmZXI7ZC5maWxsV2l0aEJ5dGUoMCw4KSxkLnB1dEJ5dGVzKHApLGQucHV0Qnl0ZXMoZiksci5zdGFydCgpLHIudXBkYXRlKGQuZ2V0Qnl0ZXMoKSk7dmFyIHk9ci5kaWdlc3QoKS5nZXRCeXRlcygpLGc9bmV3IG4udXRpbC5CeXRlQnVmZmVyO2cuZmlsbFdpdGhCeXRlKDAsaC10LW8tMiksZy5wdXRCeXRlKDEpLGcucHV0Qnl0ZXMoZik7dmFyIHY9Zy5nZXRCeXRlcygpLG09aC1vLTEsYj1pLmdlbmVyYXRlKHksbSksXz0iIjtmb3IoYz0wO2M8bTtjKyspXys9U3RyaW5nLmZyb21DaGFyQ29kZSh2LmNoYXJDb2RlQXQoYyleYi5jaGFyQ29kZUF0KGMpKTt2YXIgUz02NTI4MD4+OCpoLWwmMjU1O3JldHVybihfPVN0cmluZy5mcm9tQ2hhckNvZGUoXy5jaGFyQ29kZUF0KDApJn5TKStfLnN1YnN0cigxKSkreStTdHJpbmcuZnJvbUNoYXJDb2RlKDE4OCl9LHZlcmlmeTpmdW5jdGlvbihlLGEscyl7dmFyIHUsYz1zLTEsZj1NYXRoLmNlaWwoYy84KTtpZihhPWEuc3Vic3RyKC1mKSxmPG8rdCsyKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IHBhcmFtZXRlcnMgdG8gUFNTIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uIik7aWYoMTg4IT09YS5jaGFyQ29kZUF0KGYtMSkpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4QkMuIik7dmFyIGw9Zi1vLTEsaD1hLnN1YnN0cigwLGwpLHA9YS5zdWJzdHIobCxvKSxkPTY1MjgwPj44KmYtYyYyNTU7aWYoMCE9PShoLmNoYXJDb2RlQXQoMCkmZCkpdGhyb3cgbmV3IEVycm9yKCJCaXRzIGJleW9uZCBrZXlzaXplIG5vdCB6ZXJvIGFzIGV4cGVjdGVkLiIpO3ZhciB5PWkuZ2VuZXJhdGUocCxsKSxnPSIiO2Zvcih1PTA7dTxsO3UrKylnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGguY2hhckNvZGVBdCh1KV55LmNoYXJDb2RlQXQodSkpO2c9U3RyaW5nLmZyb21DaGFyQ29kZShnLmNoYXJDb2RlQXQoMCkmfmQpK2cuc3Vic3RyKDEpO3ZhciB2PWYtby10LTI7Zm9yKHU9MDt1PHY7dSsrKWlmKDAhPT1nLmNoYXJDb2RlQXQodSkpdGhyb3cgbmV3IEVycm9yKCJMZWZ0bW9zdCBvY3RldHMgbm90IHplcm8gYXMgZXhwZWN0ZWQiKTtpZigxIT09Zy5jaGFyQ29kZUF0KHYpKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IFBTUyBzaWduYXR1cmUsIDB4MDEgbWFya2VyIG5vdCBmb3VuZCIpO3ZhciBtPWcuc3Vic3RyKC10KSxiPW5ldyBuLnV0aWwuQnl0ZUJ1ZmZlcjtyZXR1cm4gYi5maWxsV2l0aEJ5dGUoMCw4KSxiLnB1dEJ5dGVzKGUpLGIucHV0Qnl0ZXMobSksci5zdGFydCgpLHIudXBkYXRlKGIuZ2V0Qnl0ZXMoKSkscD09PXIuZGlnZXN0KCkuZ2V0Qnl0ZXMoKX19O3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cigxMzcpLGk9cigzNTkpLG89cigxMzYpLGE9cig2Nykscz1yKDE2NiksdT1yKDIyOCksYz1yKDE2Nyk7dC5zZWVkV2l0aE5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3NlZWQ6aS5TZWVkLnRvQmluYXJ5KGUpLnNlZWQsbm9uY2U6dH19O3Qua2V5UGFpcj1mdW5jdGlvbihlKXt2YXIgdD1pLlNlZWQudG9CaW5hcnkoZSkscj1mdW5jdGlvbihlLHQpe3ZhciByPVswLDAsMCwwXTtpZih0JiZ0PjApZm9yKHZhciBuPXQsaT0zO2k+PTA7aS0tKXJbMy1pXT1NYXRoLmZsb29yKG4vTWF0aC5wb3coMiw4KmkpKSxuJT1NYXRoLnBvdygyLDgqaSk7dmFyIGE9cy5jb25jYXQocixlKSx1PW8uX2hhc2hDaGFpbihhKTtyZXR1cm4gby5zaGEyNTYodSl9KHQuc2VlZCx0Lm5vbmNlKSxuPWMuZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXIocik7cmV0dXJue3ByaXZhdGVLZXk6bi5wcml2YXRlLHB1YmxpY0tleTpuLnB1YmxpY319LHQuYWRkcmVzcz1mdW5jdGlvbihlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj1uLk1BSU5fTkVUX0NIQUlOX0lEKSx1LmlzUHVibGljS2V5KGUpP2Z1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9bi5NQUlOX05FVF9DSEFJTl9JRCk7dmFyIHI9WzEsInN0cmluZyI9PT10eXBlb2YgdD90LmNoYXJDb2RlQXQoMCk6dF0saT1vLl9oYXNoQ2hhaW4oZSkuc2xpY2UoMCwyMCksYT1zLmNvbmNhdChyLGkpLHU9by5faGFzaENoYWluKGEpLnNsaWNlKDAsNCk7cmV0dXJuIHMuY29uY2F0KGEsdSl9KGEuX2Zyb21JbihlLnB1YmxpY0tleSkscik6dC5hZGRyZXNzKHQua2V5UGFpcihlKSxyKX0sdC5wdWJsaWNLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQua2V5UGFpcihlKS5wdWJsaWNLZXl9LHQucHJpdmF0ZUtleT1mdW5jdGlvbihlKXtyZXR1cm4gdC5rZXlQYWlyKGUpLnByaXZhdGVLZXl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzUHVibGljS2V5PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lLnB1YmxpY0tleX0sdC5pc1ByaXZhdGVLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUucHJpdmF0ZUtleX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29uY2F0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbXS5jb25jYXQobihlKSxuKHQpKSl9LG5ldyBVaW50OEFycmF5KDApKX0sdC5yYW5nZT1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6dC1lfSkubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4qcitlfSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1yKDM2MiksaT1yKDY0NSksbz1yKDM2MSksYT1yKDIwNCk7dC5BTElBU19WRVJTSU9OPTI7dC5QX09QVElPTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoMD09PXRbcl0pcmV0dXJue3ZhbHVlOm51bGwsc2hpZnQ6MX07dmFyIG49ZSh0LHIrMSk7cmV0dXJue3ZhbHVlOm4udmFsdWUsc2hpZnQ6bi5zaGlmdCsxfX19LHQuUF9CWVRFPWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXSxzaGlmdDoxfX0sdC5QX1NIT1JUPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybnt2YWx1ZToyNTYqZVt0XStlW3QrMV0sc2hpZnQ6Mn19LHQuUF9JTlQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJue3ZhbHVlOk1hdGgucG93KDIsMjQpKmVbdF0rTWF0aC5wb3coMiwxNikqZVt0KzFdK01hdGgucG93KDIsOCkqZVt0KzJdK2VbdCszXSxzaGlmdDo0fX0sdC5QX0xPTkc9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJue3ZhbHVlOm4uZnJvbUJ5dGVzQkUoQXJyYXkuZnJvbShlLnNsaWNlKHQsdCs4KSkpLnRvU3RyaW5nKCksc2hpZnQ6OH19LHQuUF9CT09MRUFOPWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTohIWVbYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjBdLHNoaWZ0OjF9fSx0LlBfU1RSSU5HX0ZJWEVEPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPWkuVXRmOEFycmF5VG9TdHIodC5zbGljZShyLHIrZSkpO3JldHVybntzaGlmdDplLHZhbHVlOm59fX0sdC5QX1NUUklOR19WQVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGk9ZShyLG4pLG89dC5QX1NUUklOR19GSVhFRChpLnZhbHVlKShyLG4raS5zaGlmdCkudmFsdWU7cmV0dXJue3NoaWZ0OmkudmFsdWUraS5zaGlmdCx2YWx1ZTpvfX19LHQuUF9CQVNFNThfRklYRUQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybnt2YWx1ZTpvLmRlZmF1bHQuZW5jb2RlKHQuc2xpY2UocixyK2UpKSxzaGlmdDplfX19LHQuUF9CQVNFNThfVkFSPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxpPWUocixuKSxvPXQuUF9CQVNFNThfRklYRUQoaS52YWx1ZSkocixuKzIpLnZhbHVlO3JldHVybntzaGlmdDppLnZhbHVlKzIsdmFsdWU6b319fSx0LlBfQkFTRTY0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPWUodCxyKSxpPSJiYXNlNjQ6Ii5jb25jYXQoYS5mcm9tQnl0ZUFycmF5KHQuc2xpY2UocituLnNoaWZ0LHIrbi5zaGlmdCtuLnZhbHVlKSkpO3JldHVybntzaGlmdDpuLnZhbHVlK24uc2hpZnQsdmFsdWU6aX19fTt0LmJ5dGVUb1N0cmluZ1dpdGhMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxvPXQuUF9TSE9SVChlLG4pLGE9KHI9by52YWx1ZSxmdW5jdGlvbihlLHQpe3ZhciBuPWkuVXRmOEFycmF5VG9TdHIoZS5zbGljZSh0LHQrcikpO3JldHVybntzaGlmdDpyLHZhbHVlOm59fSkoZSxuKzIpLnZhbHVlO3JldHVybntzaGlmdDpvLnZhbHVlKzIsdmFsdWU6YX19LHQuYnl0ZVRvQmFzZTU4PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLHI9KGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKXx8MzI7cmV0dXJue3ZhbHVlOm8uZGVmYXVsdC5lbmNvZGUoZS5zbGljZSh0LHQrcikpLHNoaWZ0OnJ9fSx0LmJ5dGVUb0Jhc2U1OFdpdGhMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj10LlBfU0hPUlQoZSxyKTtyZXR1cm57dmFsdWU6by5kZWZhdWx0LmVuY29kZShlLnNsaWNlKHIrbi5zaGlmdCxyK24uc2hpZnQrbi52YWx1ZSkpLHNoaWZ0Om4uc2hpZnQrbi52YWx1ZX19LHQuYnl0ZVRvQWRkcmVzc09yQWxpYXM9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoZVtyXT09PXQuQUxJQVNfVkVSU0lPTil7dmFyIG49dC5ieXRlVG9TdHJpbmdXaXRoTGVuZ3RoKGUscisyKTtyZXR1cm57c2hpZnQ6bi5zaGlmdCsyLHZhbHVlOiJhbGlhczoiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGVbcisxXSksIjoiKS5jb25jYXQobi52YWx1ZSl9fXJldHVybiB0LmJ5dGVUb0Jhc2U1OChlLHIsMjYpfSx0LmJ5dGVOZXdBbGlhc1RvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybntzaGlmdDp0LlBfU0hPUlQoZSxyKS52YWx1ZSsyLHZhbHVlOnQuYnl0ZVRvU3RyaW5nV2l0aExlbmd0aChlLHIpLnZhbHVlfX0sdC5ieXRlVG9TY3JpcHQ9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoMD09PWVbcl0pcmV0dXJue3NoaWZ0OjEsdmFsdWU6bnVsbH07dmFyIG49dC5QX1NIT1JUKGUscisxKSxpPXIrMStuLnNoaWZ0LG89cisxK24uc2hpZnQrbi52YWx1ZTtyZXR1cm57dmFsdWU6ImJhc2U2NDoiLmNvbmNhdChhLmZyb21CeXRlQXJyYXkoZS5zbGljZShpLG8pKSksc2hpZnQ6by1yfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMDMpLGk9cigyMiksbz1yKDg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9cigxMzkpLHM9cigyMjkpLHU9cigxMzgpO3Quc2VyaWFsaXplckZyb21TY2hlbWE9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGMsZjtpZigiYXJyYXkiPT09ZS50eXBlKXJldHVybiBjPXQuc2VyaWFsaXplckZyb21TY2hlbWEoZS5pdGVtcyxyKSxmPXMuY29uY2F0LmFwcGx5KHMsbyh1Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKSkscy5jb25jYXQoKGUudG9CeXRlc3x8YS5TSE9SVCkodS5sZW5ndGgpLGYpO2lmKCJvYmplY3QiPT09ZS50eXBlKXt2YXIgbD1VaW50OEFycmF5LmZyb20oW10pO2lmKGUub3B0aW9uYWwmJm51bGw9PXUpcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbMF0pO2lmKGUuc2NoZW1hLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG8sYT1pKGUsMiksaD1hWzBdLHA9YVsxXTtvPUFycmF5LmlzQXJyYXkoaCk/aC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLG4oe30sdCx1W3RdKSl9LHt9KTp1W2hdLGM9dC5zZXJpYWxpemVyRnJvbVNjaGVtYShwLHIpLGY9YyhvKSxsPXMuY29uY2F0KGwsZil9KSxlLndpdGhMZW5ndGgpe3ZhciBoPWUud2l0aExlbmd0aC50b0J5dGVzKGwubGVuZ3RoKTtsPXMuY29uY2F0KGgsbCl9cmV0dXJuIGUub3B0aW9uYWwmJihsPXMuY29uY2F0KFsxXSxsKSksbH1pZigiYW55T2YiPT09ZS50eXBlKXt2YXIgcD11W2UuZGlzY3JpbWluYXRvckZpZWxkXSxkPWUuaXRlbUJ5S2V5KHApO2lmKG51bGw9PWQpdGhyb3cgbmV3IEVycm9yKCJTZXJpYWxpemVyIEVycm9yOiBVbmtub3duIGFueU9mIHR5cGU6ICIuY29uY2F0KHApKTtyZXR1cm4iYm9vbGVhbiI9PT1kLnN0cktleSYmNj09PWQua2V5JiYhMT09PXUudmFsdWUmJihkLmtleT03KSxjPXQuc2VyaWFsaXplckZyb21TY2hlbWEoZC5zY2hlbWEsciksbnVsbD09ZS52YWx1ZUZpZWxkP2ModSk6KGY9Yyh1W2UudmFsdWVGaWVsZF0pLHMuY29uY2F0KChlLnRvQnl0ZXN8fGEuQllURSkoZC5rZXkpLGYpKX1pZigicHJpbWl0aXZlIj09PWUudHlwZXx8dm9pZCAwPT09ZS50eXBlKXJldHVybiBlLnRvQnl0ZXModSk7aWYoImRhdGFUeEZpZWxkIj09PWUudHlwZSl7dmFyIHk9YS5MRU4oYS5TSE9SVCkoYS5TVFJJTkcpKHUua2V5KSxnPXUudHlwZSx2PWUuaXRlbXMuZ2V0KGcpO2lmKG51bGw9PXYpdGhyb3cgbmV3IEVycm9yKCJTZXJpYWxpemVyIEVycm9yOiBVbmtub3duIGRhdGFUeEZpZWxkIHR5cGU6ICIuY29uY2F0KGcpKTt2YXIgbT1vKGUuaXRlbXMudmFsdWVzKCkpLmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZ9KTtyZXR1cm4gYz10LnNlcmlhbGl6ZXJGcm9tU2NoZW1hKHYsciksZj1jKHUudmFsdWUpLHMuY29uY2F0KHksYS5CWVRFKG0pLGYpfXRocm93IG5ldyBFcnJvcigiU2VyaWFsaXplciBFcnJvcjogVW5rbm93biBzY2hlbWEgdHlwZTogIi5jb25jYXQoZS50eXBlKSl9fSx0LnNlcmlhbGl6ZVR4PWZ1bmN0aW9uKGUscil7dmFyIG49ZS50eXBlLGk9ZS52ZXJzaW9uLG89dS5nZXRUcmFuc2FjdGlvblNjaGVtYShuLGkpO3JldHVybiB0LnNlcmlhbGl6ZXJGcm9tU2NoZW1hKG8scikoZSl9LHQuc2VyaWFsaXplT3JkZXI9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnZlcnNpb258fDEsaT11Lm9yZGVyVmVyc2lvbk1hcFtuXTtpZihudWxsPT1pKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciB2ZXJzaW9uOiAiLmNvbmNhdChuKSk7cmV0dXJuIHQuc2VyaWFsaXplckZyb21TY2hlbWEoaSxyKShlKX19LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigzOTEpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1yKDkxKSxpPXIoMTExOSksbz1yKDgwKTtmdW5jdGlvbiBhKGUpe3JldHVybiBudWxsPT1lfWZ1bmN0aW9uIHMoZSx0LHIpe3ZhciBuPWkucGF0aChbImNhbGN1bGF0ZV9mZWVfcnVsZXMiLGUsdF0scik7cmV0dXJuIGEobik/aS5wYXRoKFsiY2FsY3VsYXRlX2ZlZV9ydWxlcyIsImRlZmF1bHQiLHRdLHIpOm59dC5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHRbcl09PT1lW3JdfSl9LGk9MDtpPHQubGVuZ3RoO2krKylpZihuKHRbaV0pKXJldHVybiB0W2ldO3JldHVybiBudWxsfSx0LmlzRW1wdHk9YSx0Lm5vcm1hbGl6ZUFzc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fG8uV0FWRVNfSUR9LHQubGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX0sdC5UUkFOU0FDVElPTl9UWVBFPXtHRU5FU0lTOjEsUEFZTUVOVDoyLElTU1VFOjMsVFJBTlNGRVI6NCxSRUlTU1VFOjUsQlVSTjo2LEVYQ0hBTkdFOjcsTEVBU0U6OCxDQU5DRUxfTEVBU0U6OSxBTElBUzoxMCxNQVNTX1RSQU5TRkVSOjExLERBVEE6MTIsU0VUX1NDUklQVDoxMyxTUE9OU09SU0hJUDoxNCxTRVRfQVNTRVRfU0NSSVBUOjE1LFNDUklQVF9JTlZPQ0FUSU9OOjE2fSx0LmN1cnJlbnRDcmVhdGVPcmRlckZhY3Rvcnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpLG8pe3ZvaWQgMD09PWkmJihpPSExKSx2b2lkIDA9PT1vJiYobz1bXSk7dmFyIGE9aT9uZXcgbi5CaWdOdW1iZXIoZS5zbWFydF9hY2NvdW50X2V4dHJhX2ZlZSk6bmV3IG4uQmlnTnVtYmVyKDApLHM9T2JqZWN0LnZhbHVlcyhyLmFzc2V0UGFpcikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLmluY2x1ZGVzKHQpP25ldyBuLkJpZ051bWJlcihlLnNtYXJ0X2Fzc2V0X2V4dHJhX2ZlZSk6bmV3IG4uQmlnTnVtYmVyKDApfSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYWRkKHQpfSxuZXcgbi5CaWdOdW1iZXIoMCkpO3JldHVybiB0LmFkZChhKS5hZGQocyl9fSx0LmN1cnJlbnRGZWVGYWN0b3J5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyLG8sYSx1KXt2YXIgYz1hP25ldyBuLkJpZ051bWJlcihlLnNtYXJ0X2FjY291bnRfZXh0cmFfZmVlKTpuZXcgbi5CaWdOdW1iZXIoMCksZj1jLmFkZChzKHIudHlwZSwiZmVlIixlKSk7c3dpdGNoKHIudHlwZSl7Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuQ0FOQ0VMX0xFQVNFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkFMSUFTOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkxFQVNFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLlNFVF9BU1NFVF9TQ1JJUFQ6Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuU0VUX1NDUklQVDpjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5TUE9OU09SU0hJUDpyZXR1cm4gZjtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5SRUlTU1VFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkJVUk46Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuVFJBTlNGRVI6cmV0dXJuIGYuYWRkKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmci5pbmNsdWRlcyhlKT9uZXcgbi5CaWdOdW1iZXIodC5zbWFydF9hc3NldF9leHRyYV9mZWUpOm5ldyBuLkJpZ051bWJlcigwKX0oci5hc3NldElkLGUsdXx8W10pKTtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5NQVNTX1RSQU5TRkVSOnJldHVybiBmLmFkZChmdW5jdGlvbihlLHQscil7dmFyIG89bmV3IG4uQmlnTnVtYmVyKHMoZS50eXBlLCJwcmljZV9wZXJfdHJhbnNmZXIiLHQpfHwwKSxhPWkucGF0aChbInRyYW5zZmVycyIsImxlbmd0aCJdLGUpfHwwLHU9ZS5hc3NldElkJiZyLmluY2x1ZGVzKGUuYXNzZXRJZCk/bmV3IG4uQmlnTnVtYmVyKHQuc21hcnRfYXNzZXRfZXh0cmFfZmVlKTpuZXcgbi5CaWdOdW1iZXIoMCksYz1uZXcgbi5CaWdOdW1iZXIocyhlLnR5cGUsIm1pbl9wcmljZV9zdGVwIix0KSksZj1vLm11bChhKTtyZXR1cm4gZi5kaXYoYykuaXNJbnQoKXx8KGY9Zi5kaXYoYykucm91bmRUbygwLDApLm11bChjKSksZi5hZGQodSl9KHIsZSx1fHxbXSkpO2Nhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkRBVEE6cmV0dXJuIGMuYWRkKGZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1zKHQudHlwZSwicHJpY2VfcGVyX2tiIixyKXx8MDtyZXR1cm4gbmV3IG4uQmlnTnVtYmVyKGkpLm11bChNYXRoLmZsb29yKDErKGUubGVuZ3RoLTEpLzEwMjQpKX0obyxyLGUpKTtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5JU1NVRTpyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXQuYWRkKHMoZS50eXBlLCJmZWUiLHIpKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5xdWFudGl0eSxyPWUucHJlY2lzaW9uLGk9ZS5kZWNpbWFscyxvPWUucmVpc3N1YWJsZSxhPW5ldyBuLkJpZ051bWJlcih0KS5lcSgxKSxzPW5ldyBuLkJpZ051bWJlcihyfHxpfHwwKS5lcSgwKTtyZXR1cm4hbyYmcyYmYX0oZSk/dC5hZGQocyhlLnR5cGUsIm5mdEZlZSIscikpOml9KHIsYyxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiV3JvbmcgdHJhbnNhY3Rpb24gdHlwZSEiKX19fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UWVBFUz17R0VORVNJUzoxLFBBWU1FTlQ6MixJU1NVRTozLFRSQU5TRkVSOjQsUkVJU1NVRTo1LEJVUk46NixFWENIQU5HRTo3LExFQVNFOjgsQ0FOQ0VMX0xFQVNFOjksQUxJQVM6MTAsTUFTU19UUkFOU0ZFUjoxMSxEQVRBOjEyLFNFVF9TQ1JJUFQ6MTMsU1BPTlNPUlNISVA6MTQsU0VUX0FTU0VUX1NDUklQVDoxNSxJTlZPS0VfU0NSSVBUOjE2fSx0LkFMSUFTPXtBVkFJTEFCTEVfQ0hBUlM6Ii0uMDEyMzQ1Njc4OUBfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE1BWF9BTElBU19MRU5HVEg6MzAsTUlOX0FMSUFTX0xFTkdUSDo0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cig3MDUpO3QuQXNzZXQ9bi5Bc3NldDt2YXIgaT1yKDcwNik7dC5DYW5kbGU9aS5DYW5kbGU7dmFyIG89cig3MDcpO3QuTW9uZXk9by5Nb25leTt2YXIgYT1yKDcwOCk7dC5PcmRlclByaWNlPWEuT3JkZXJQcmljZTt2YXIgcz1yKDcwOSk7dC5Bc3NldFBhaXI9cy5Bc3NldFBhaXI7dmFyIHU9cigyMzYpO3QuY29uZmlnPXUuY29uZmlnfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj17cmVtYXBBc3NldDpmdW5jdGlvbihlKXtyZXR1cm4gZX0scmVtYXBDYW5kbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fTshZnVuY3Rpb24oZSl7ZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19LGUuc2V0PWZ1bmN0aW9uIGUodCxyKXsic3RyaW5nIj09PXR5cGVvZiB0P25bdF09cjpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiBlKHIsdFtyXSl9KX19KHQuY29uZmlnfHwodC5jb25maWc9e30pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPTEsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW3JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5pbmRleE9mKG4pPDAmJihyW25dPWVbbl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9MDtmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2k8bi5sZW5ndGg7aSsrKXQuaW5kZXhPZihuW2ldKTwwJiYocltuW2ldXT1lW25baV1dKX1yZXR1cm4gcn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPXIoMzEpLGE9cigyMzUpLHM9cig5MSksdT1vLmxpYnMuY3J5cHRvLGM9dS5zdHJpbmdUb0J5dGVzLGY9dS5iYXNlNThEZWNvZGUsbD11LmtlY2NhayxoPXUuYmxha2UyYixwPTE0MCxkPXtBVkFJTEFCTEVfQ0hBUlM6Ii0uMDEyMzQ1Njc4OUBfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE1BWF9BTElBU19MRU5HVEg6MzAsTUlOX0FMSUFTX0xFTkdUSDo0fSx5PTQ1LGc9NCx2PTE2LG09MWUzO3QuRVJST1JfTVNHPXtSRVFVSVJFRDoiZmllbGQgaXMgcmVxdWlyZWQiLFdST05HX1RZUEU6ImZpZWxkIGlzIHdyb25nIHR5cGUiLFdST05HX05VTUJFUjoiZmllbGQgaXMgbm90IG51bWJlciIsV1JPTkdfVElNRVNUQU1QOiJmaWVsZCBpcyBub3QgdGltZXN0YW1wIixTTUFMTF9GSUVMRDoiZmllbGQgaXMgc21hbGwiLExBUkdFX0ZJRUxEOiJmaWVsZCBpcyBsYXJnZSIsV1JPTkdfU1lNQk9MUzoiZmllbGQgaGFzIHdyb25nIHN5bWJvbHMiLFdST05HX0FERFJFU1M6ImZpZWxkIGlzIHdyb25nIGFkZHJlc3MiLFdST05HX0JPT0xFQU46ImZpZWxkIGlzIHdyb25nIGJvb2xlYW4iLFdST05HX0FTU0VUX0lEOiJmaWVsZCBpcyB3cm9uZyBhc3NldElkIixXUk9OR19PUkRFUl9UWVBFOidmaWVsZCBpcyB3cm9uZyBvcmRlciB0eXBlLiBGaWVsZCBjYW4gYmUgImJ1eSIgb3IgInNlbGwiJyxOT1RfSFRUUFNfVVJMOiJmaWVsZCBjYW4gYmUgdXJsIHdpdGggaHR0cHMgcHJvdG9jb2wiLEJBU0U2NDonZmllbGQgY2FuIGJlIGJhc2U2NCBzdHJpbmcgd2l0aCBwcmVmaXggImJhc2U2NDoiJyxFTVBUWV9CQVNFNjQ6J2ZpZWxkIGNhbiBiZSBub3QgZW1wdHkgYmFzZTY0Iid9LHQuaXNWYWxpZEFkZHJlc3M9ZnVuY3Rpb24oZSx0KXtpZighZXx8InN0cmluZyIhPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIk1pc3Npbmcgb3IgaW52YWxpZCBhZGRyZXNzIik7dmFyIHI9ZihlKTtpZigxIT09clswXXx8clsxXSE9PXQpcmV0dXJuITE7Zm9yKHZhciBuPXIuc2xpY2UoMCwyMiksaT1yLnNsaWNlKDIyLDI2KSxvPWwoaChuKSkuc2xpY2UoMCw0KSxhPTA7YTw0O2ErKylpZihpW2FdIT09b1thXSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT09dHlwZW9mIGU/ZS50b1N0cmluZygpOmV9LFM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZhbHVlLG49aShlLFsidmFsdWUiXSk7dGhyb3d7dmFsdWU6cixmaWVsZDpuLm5hbWUsdHlwZTpuLnR5cGUsbWVzc2FnZTp0fX0sRT1mdW5jdGlvbihlKXt2YXIgcj1lLnZhbHVlO2Uub3B0aW9uYWx8fG51bGwhPXJ8fFMoZSx0LkVSUk9SX01TRy5SRVFVSVJFRCl9LHc9ZnVuY3Rpb24oZSl7ZT1uKHt9LGUse3ZhbHVlOl8oZS52YWx1ZSl9KSxFKGUpO3ZhciByPWUudmFsdWU7aWYoIWUub3B0aW9uYWwmJm51bGw9PXImJm51bGwhPXImJiJzdHJpbmciIT09dHlwZW9mIHIpcmV0dXJuIFMoZSx0LkVSUk9SX01TRy5XUk9OR19UWVBFKX0sVD1mdW5jdGlvbihlKXtFKGUpO3ZhciByPWUudmFsdWU7aWYobnVsbCE9ciYmImJvb2xlYW4iIT09dHlwZW9mIHIpcmV0dXJuIFMoZSx0LkVSUk9SX01TRy5XUk9OR19CT09MRUFOKX0sQT1mdW5jdGlvbihlKXtFKGUpO3ZhciByPWUudmFsdWU7aWYobnVsbCE9cilzd2l0Y2goITApe2Nhc2UhKHIgaW5zdGFuY2VvZiBhLk1vbmV5KTpyZXR1cm4gUyhlLHQuRVJST1JfTVNHLldST05HX1RZUEUpO2Nhc2UgciBpbnN0YW5jZW9mIGEuTW9uZXkmJnIuZ2V0Q29pbnMoKS5pc05hTigpOnJldHVybiBTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKX19LEM9ZnVuY3Rpb24oZSxyLG4pe0UoZSk7dmFyIGk9ZS52YWx1ZTtpZihudWxsIT1pKXt2YXIgbz1mdW5jdGlvbihpKXtudWxsIT1yJiZpLmx0KG5ldyBzLkJpZ051bWJlcihyKSkmJlMoZSx0LkVSUk9SX01TRy5TTUFMTF9GSUVMRCksbnVsbCE9biYmaS5ndChuZXcgcy5CaWdOdW1iZXIobikpJiZTKGUsdC5FUlJPUl9NU0cuTEFSR0VfRklFTEQpfTtzd2l0Y2goITApe2Nhc2UgaSBpbnN0YW5jZW9mIHMuQmlnTnVtYmVyOmkuaXNOYU4oKSYmUyhlLHQuRVJST1JfTVNHLldST05HX1RZUEUpLG8oaSk7YnJlYWs7Y2FzZSBpIGluc3RhbmNlb2YgYS5Nb25leTp2YXIgdT1pLmdldENvaW5zKCk7dS5pc05hTigpJiZTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKSxvKHUpO2JyZWFrO2Nhc2Uic3RyaW5nIj09PXR5cGVvZiBpJiYhaTpTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKTticmVhaztjYXNlIG5ldyBzLkJpZ051bWJlcihpKS5pc05hTigpOnJldHVybiBTKGUsdC5FUlJPUl9NU0cuV1I="
}
Changelog:
{
"2020.03.29 15:15": "base64:TklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGUuc2lnaW5mby5hbGdvcml0aG1PaWQpLmdldEJ5dGVzKCkpLG0oZS5zaWdpbmZvLmFsZ29yaXRobU9pZCxlLnNpZ2luZm8ucGFyYW1ldGVycyldKSx5KGUuaXNzdWVyKSxpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW3Qscl0pLHkoZS5zdWJqZWN0KSxvLnB1YmxpY0tleVRvQXNuMShlLnB1YmxpY0tleSldKTtyZXR1cm4gZS5pc3N1ZXIudW5pcXVlSWQmJmEudmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDApK2UuaXNzdWVyLnVuaXF1ZUlkKV0pKSxlLnN1YmplY3QudW5pcXVlSWQmJmEudmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMiwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDApK2Uuc3ViamVjdC51bmlxdWVJZCldKSksZS5leHRlbnNpb25zLmxlbmd0aD4wJiZhLnZhbHVlLnB1c2goby5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNUb0FzbjEoZS5leHRlbnNpb25zKSksYX0sby5nZXRDZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm89ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS52ZXJzaW9uKS5nZXRCeXRlcygpKSx5KGUuc3ViamVjdCksby5wdWJsaWNLZXlUb0FzbjEoZS5wdWJsaWNLZXkpLGIoZSldKX0sby5kaXN0aW5ndWlzaGVkTmFtZVRvQXNuMT1mdW5jdGlvbihlKXtyZXR1cm4geShlKX0sby5jZXJ0aWZpY2F0ZVRvQXNuMT1mdW5jdGlvbihlKXt2YXIgdD1lLnRic0NlcnRpZmljYXRlfHxvLmdldFRCU0NlcnRpZmljYXRlKGUpO3JldHVybiBpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW3QsaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIoZS5zaWduYXR1cmVPaWQpLmdldEJ5dGVzKCkpLG0oZS5zaWduYXR1cmVPaWQsZS5zaWduYXR1cmVQYXJhbWV0ZXJzKV0pLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CSVRTVFJJTkcsITEsU3RyaW5nLmZyb21DaGFyQ29kZSgwKStlLnNpZ25hdHVyZSldKX0sby5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNUb0FzbjE9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDMsITAsW10pLHI9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKTt0LnZhbHVlLnB1c2gocik7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pci52YWx1ZS5wdXNoKG8uY2VydGlmaWNhdGVFeHRlbnNpb25Ub0FzbjEoZVtuXSkpO3JldHVybiB0fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uVG9Bc24xPWZ1bmN0aW9uKGUpe3ZhciB0PWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSk7dC52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5PSUQsITEsaS5vaWRUb0RlcihlLmlkKS5nZXRCeXRlcygpKSksZS5jcml0aWNhbCYmdC52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CT09MRUFOLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KSkpO3ZhciByPWUudmFsdWU7cmV0dXJuInN0cmluZyIhPT10eXBlb2YgZS52YWx1ZSYmKHI9aS50b0RlcihyKS5nZXRCeXRlcygpKSx0LnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9DVEVUU1RSSU5HLCExLHIpKSx0fSxvLmNlcnRpZmljYXRpb25SZXF1ZXN0VG9Bc24xPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvfHxvLmdldENlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyhlKTtyZXR1cm4gaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFt0LGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGUuc2lnbmF0dXJlT2lkKS5nZXRCeXRlcygpKSxtKGUuc2lnbmF0dXJlT2lkLGUuc2lnbmF0dXJlUGFyYW1ldGVycyldKSxpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuQklUU1RSSU5HLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMCkrZS5zaWduYXR1cmUpXSl9LG8uY3JlYXRlQ2FTdG9yZT1mdW5jdGlvbihlKXt2YXIgdD17Y2VydHM6e319O2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGEoZSksdC5jZXJ0c1tlLmhhc2hdfHxudWxsfWZ1bmN0aW9uIGEoZSl7aWYoIWUuaGFzaCl7dmFyIHQ9bi5tZC5zaGExLmNyZWF0ZSgpO2UuYXR0cmlidXRlcz1vLlJETkF0dHJpYnV0ZXNBc0FycmF5KHkoZSksdCksZS5oYXNoPXQuZGlnZXN0KCkudG9IZXgoKX19aWYodC5nZXRJc3N1ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5pc3N1ZXIpfSx0LmFkZENlcnRpZmljYXRlPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT09dHlwZW9mIGUmJihlPW4ucGtpLmNlcnRpZmljYXRlRnJvbVBlbShlKSksYShlLnN1YmplY3QpLCF0Lmhhc0NlcnRpZmljYXRlKGUpKWlmKGUuc3ViamVjdC5oYXNoIGluIHQuY2VydHMpe3ZhciByPXQuY2VydHNbZS5zdWJqZWN0Lmhhc2hdO24udXRpbC5pc0FycmF5KHIpfHwocj1bcl0pLHIucHVzaChlKSx0LmNlcnRzW2Uuc3ViamVjdC5oYXNoXT1yfWVsc2UgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF09ZX0sdC5oYXNDZXJ0aWZpY2F0ZT1mdW5jdGlvbihlKXsic3RyaW5nIj09PXR5cGVvZiBlJiYoZT1uLnBraS5jZXJ0aWZpY2F0ZUZyb21QZW0oZSkpO3ZhciB0PXIoZS5zdWJqZWN0KTtpZighdClyZXR1cm4hMTtuLnV0aWwuaXNBcnJheSh0KXx8KHQ9W3RdKTtmb3IodmFyIGE9aS50b0RlcihvLmNlcnRpZmljYXRlVG9Bc24xKGUpKS5nZXRCeXRlcygpLHM9MDtzPHQubGVuZ3RoOysrcyl7aWYoYT09PWkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMSh0W3NdKSkuZ2V0Qnl0ZXMoKSlyZXR1cm4hMH1yZXR1cm4hMX0sdC5saXN0QWxsQ2VydGlmaWNhdGVzPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQuY2VydHMpaWYodC5jZXJ0cy5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIGk9dC5jZXJ0c1tyXTtpZihuLnV0aWwuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoOysrbyllLnB1c2goaVtvXSk7ZWxzZSBlLnB1c2goaSl9cmV0dXJuIGV9LHQucmVtb3ZlQ2VydGlmaWNhdGU9ZnVuY3Rpb24oZSl7dmFyIHM7aWYoInN0cmluZyI9PT10eXBlb2YgZSYmKGU9bi5wa2kuY2VydGlmaWNhdGVGcm9tUGVtKGUpKSxhKGUuc3ViamVjdCksIXQuaGFzQ2VydGlmaWNhdGUoZSkpcmV0dXJuIG51bGw7dmFyIHU9cihlLnN1YmplY3QpO2lmKCFuLnV0aWwuaXNBcnJheSh1KSlyZXR1cm4gcz10LmNlcnRzW2Uuc3ViamVjdC5oYXNoXSxkZWxldGUgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF0scztmb3IodmFyIGM9aS50b0RlcihvLmNlcnRpZmljYXRlVG9Bc24xKGUpKS5nZXRCeXRlcygpLGY9MDtmPHUubGVuZ3RoOysrZil7Yz09PWkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMSh1W2ZdKSkuZ2V0Qnl0ZXMoKSYmKHM9dVtmXSx1LnNwbGljZShmLDEpKX1yZXR1cm4gMD09PXUubGVuZ3RoJiZkZWxldGUgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF0sc30sZSlmb3IodmFyIHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIHU9ZVtzXTt0LmFkZENlcnRpZmljYXRlKHUpfXJldHVybiB0fSxvLmNlcnRpZmljYXRlRXJyb3I9e2JhZF9jZXJ0aWZpY2F0ZToiZm9yZ2UucGtpLkJhZENlcnRpZmljYXRlIix1bnN1cHBvcnRlZF9jZXJ0aWZpY2F0ZToiZm9yZ2UucGtpLlVuc3VwcG9ydGVkQ2VydGlmaWNhdGUiLGNlcnRpZmljYXRlX3Jldm9rZWQ6ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZVJldm9rZWQiLGNlcnRpZmljYXRlX2V4cGlyZWQ6ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZUV4cGlyZWQiLGNlcnRpZmljYXRlX3Vua25vd246ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZVVua25vd24iLHVua25vd25fY2E6ImZvcmdlLnBraS5Vbmtub3duQ2VydGlmaWNhdGVBdXRob3JpdHkifSxvLnZlcmlmeUNlcnRpZmljYXRlQ2hhaW49ZnVuY3Rpb24oZSx0LHIpeyJmdW5jdGlvbiI9PT10eXBlb2YgciYmKHI9e3ZlcmlmeTpyfSkscj1yfHx7fTt2YXIgaT0odD10LnNsaWNlKDApKS5zbGljZSgwKSxhPXIudmFsaWRpdHlDaGVja0RhdGU7InVuZGVmaW5lZCI9PT10eXBlb2YgYSYmKGE9bmV3IERhdGUpO3ZhciBzPSEwLHU9bnVsbCxjPTA7ZG97dmFyIGY9dC5zaGlmdCgpLGw9bnVsbCxoPSExO2lmKGEmJihhPGYudmFsaWRpdHkubm90QmVmb3JlfHxhPmYudmFsaWRpdHkubm90QWZ0ZXIpJiYodT17bWVzc2FnZToiQ2VydGlmaWNhdGUgaXMgbm90IHZhbGlkIHlldCBvciBoYXMgZXhwaXJlZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci5jZXJ0aWZpY2F0ZV9leHBpcmVkLG5vdEJlZm9yZTpmLnZhbGlkaXR5Lm5vdEJlZm9yZSxub3RBZnRlcjpmLnZhbGlkaXR5Lm5vdEFmdGVyLG5vdzphfSksbnVsbD09PXUpe2lmKG51bGw9PT0obD10WzBdfHxlLmdldElzc3VlcihmKSkmJmYuaXNJc3N1ZXIoZikmJihoPSEwLGw9ZiksbCl7dmFyIHA9bDtuLnV0aWwuaXNBcnJheShwKXx8KHA9W3BdKTtmb3IodmFyIGQ9ITE7IWQmJnAubGVuZ3RoPjA7KXtsPXAuc2hpZnQoKTt0cnl7ZD1sLnZlcmlmeShmKX1jYXRjaChFKXt9fWR8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBzaWduYXR1cmUgaXMgaW52YWxpZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci5iYWRfY2VydGlmaWNhdGV9KX1udWxsIT09dXx8bCYmIWh8fGUuaGFzQ2VydGlmaWNhdGUoZil8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci51bmtub3duX2NhfSl9aWYobnVsbD09PXUmJmwmJiFmLmlzSXNzdWVyKGwpJiYodT17bWVzc2FnZToiQ2VydGlmaWNhdGUgaXNzdWVyIGlzIGludmFsaWQuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSksbnVsbD09PXUpZm9yKHZhciB5PXtrZXlVc2FnZTohMCxiYXNpY0NvbnN0cmFpbnRzOiEwfSxnPTA7bnVsbD09PXUmJmc8Zi5leHRlbnNpb25zLmxlbmd0aDsrK2cpe3ZhciB2PWYuZXh0ZW5zaW9uc1tnXTshdi5jcml0aWNhbHx8di5uYW1lIGluIHl8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBoYXMgYW4gdW5zdXBwb3J0ZWQgY3JpdGljYWwgZXh0ZW5zaW9uLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLnVuc3VwcG9ydGVkX2NlcnRpZmljYXRlfSl9aWYobnVsbD09PXUmJighc3x8MD09PXQubGVuZ3RoJiYoIWx8fGgpKSl7dmFyIG09Zi5nZXRFeHRlbnNpb24oImJhc2ljQ29uc3RyYWludHMiKSxiPWYuZ2V0RXh0ZW5zaW9uKCJrZXlVc2FnZSIpO2lmKG51bGwhPT1iJiYoYi5rZXlDZXJ0U2lnbiYmbnVsbCE9PW18fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBrZXlVc2FnZSBvciBiYXNpY0NvbnN0cmFpbnRzIGNvbmZsaWN0IG9yIGluZGljYXRlIHRoYXQgdGhlIGNlcnRpZmljYXRlIGlzIG5vdCBhIENBLiBJZiB0aGUgY2VydGlmaWNhdGUgaXMgdGhlIG9ubHkgb25lIGluIHRoZSBjaGFpbiBvciBpc24ndCB0aGUgZmlyc3QgdGhlbiB0aGUgY2VydGlmaWNhdGUgbXVzdCBiZSBhIHZhbGlkIENBLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLmJhZF9jZXJ0aWZpY2F0ZX0pKSxudWxsIT09dXx8bnVsbD09PW18fG0uY0F8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBiYXNpY0NvbnN0cmFpbnRzIGluZGljYXRlcyB0aGUgY2VydGlmaWNhdGUgaXMgbm90IGEgQ0EuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSksbnVsbD09PXUmJm51bGwhPT1iJiYicGF0aExlbkNvbnN0cmFpbnQiaW4gbSljLTE+bS5wYXRoTGVuQ29uc3RyYWludCYmKHU9e21lc3NhZ2U6IkNlcnRpZmljYXRlIGJhc2ljQ29uc3RyYWludHMgcGF0aExlbkNvbnN0cmFpbnQgdmlvbGF0ZWQuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSl9dmFyIF89bnVsbD09PXV8fHUuZXJyb3IsUz1yLnZlcmlmeT9yLnZlcmlmeShfLGMsaSk6XztpZighMCE9PVMpdGhyb3chMD09PV8mJih1PXttZXNzYWdlOiJUaGUgYXBwbGljYXRpb24gcmVqZWN0ZWQgdGhlIGNlcnRpZmljYXRlLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLmJhZF9jZXJ0aWZpY2F0ZX0pLChTfHwwPT09UykmJigib2JqZWN0IiE9PXR5cGVvZiBTfHxuLnV0aWwuaXNBcnJheShTKT8ic3RyaW5nIj09PXR5cGVvZiBTJiYodS5lcnJvcj1TKTooUy5tZXNzYWdlJiYodS5tZXNzYWdlPVMubWVzc2FnZSksUy5lcnJvciYmKHUuZXJyb3I9Uy5lcnJvcikpKSx1O3U9bnVsbCxzPSExLCsrY313aGlsZSh0Lmxlbmd0aD4wKTtyZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDYpO3IoNTIpLHIoMTApLChlLmV4cG9ydHM9bi5wc3M9bi5wc3N8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJihlPXttZDphcmd1bWVudHNbMF0sbWdmOmFyZ3VtZW50c1sxXSxzYWx0TGVuZ3RoOmFyZ3VtZW50c1syXX0pO3ZhciB0LHI9ZS5tZCxpPWUubWdmLG89ci5kaWdlc3RMZW5ndGgsYT1lLnNhbHR8fG51bGw7aWYoInN0cmluZyI9PT10eXBlb2YgYSYmKGE9bi51dGlsLmNyZWF0ZUJ1ZmZlcihhKSksInNhbHRMZW5ndGgiaW4gZSl0PWUuc2FsdExlbmd0aDtlbHNle2lmKG51bGw9PT1hKXRocm93IG5ldyBFcnJvcigiU2FsdCBsZW5ndGggbm90IHNwZWNpZmllZCBvciBzcGVjaWZpYyBzYWx0IG5vdCBnaXZlbi4iKTt0PWEubGVuZ3RoKCl9aWYobnVsbCE9PWEmJmEubGVuZ3RoKCkhPT10KXRocm93IG5ldyBFcnJvcigiR2l2ZW4gc2FsdCBsZW5ndGggZG9lcyBub3QgbWF0Y2ggbGVuZ3RoIG9mIGdpdmVuIHNhbHQuIik7dmFyIHM9ZS5wcm5nfHxuLnJhbmRvbSx1PXtlbmNvZGU6ZnVuY3Rpb24oZSx1KXt2YXIgYyxmLGw9dS0xLGg9TWF0aC5jZWlsKGwvOCkscD1lLmRpZ2VzdCgpLmdldEJ5dGVzKCk7aWYoaDxvK3QrMil0aHJvdyBuZXcgRXJyb3IoIk1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gZW5jcnlwdC4iKTtmPW51bGw9PT1hP3MuZ2V0Qnl0ZXNTeW5jKHQpOmEuYnl0ZXMoKTt2YXIgZD1uZXcgbi51dGlsLkJ5dGVCdWZmZXI7ZC5maWxsV2l0aEJ5dGUoMCw4KSxkLnB1dEJ5dGVzKHApLGQucHV0Qnl0ZXMoZiksci5zdGFydCgpLHIudXBkYXRlKGQuZ2V0Qnl0ZXMoKSk7dmFyIHk9ci5kaWdlc3QoKS5nZXRCeXRlcygpLGc9bmV3IG4udXRpbC5CeXRlQnVmZmVyO2cuZmlsbFdpdGhCeXRlKDAsaC10LW8tMiksZy5wdXRCeXRlKDEpLGcucHV0Qnl0ZXMoZik7dmFyIHY9Zy5nZXRCeXRlcygpLG09aC1vLTEsYj1pLmdlbmVyYXRlKHksbSksXz0iIjtmb3IoYz0wO2M8bTtjKyspXys9U3RyaW5nLmZyb21DaGFyQ29kZSh2LmNoYXJDb2RlQXQoYyleYi5jaGFyQ29kZUF0KGMpKTt2YXIgUz02NTI4MD4+OCpoLWwmMjU1O3JldHVybihfPVN0cmluZy5mcm9tQ2hhckNvZGUoXy5jaGFyQ29kZUF0KDApJn5TKStfLnN1YnN0cigxKSkreStTdHJpbmcuZnJvbUNoYXJDb2RlKDE4OCl9LHZlcmlmeTpmdW5jdGlvbihlLGEscyl7dmFyIHUsYz1zLTEsZj1NYXRoLmNlaWwoYy84KTtpZihhPWEuc3Vic3RyKC1mKSxmPG8rdCsyKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IHBhcmFtZXRlcnMgdG8gUFNTIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uIik7aWYoMTg4IT09YS5jaGFyQ29kZUF0KGYtMSkpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4QkMuIik7dmFyIGw9Zi1vLTEsaD1hLnN1YnN0cigwLGwpLHA9YS5zdWJzdHIobCxvKSxkPTY1MjgwPj44KmYtYyYyNTU7aWYoMCE9PShoLmNoYXJDb2RlQXQoMCkmZCkpdGhyb3cgbmV3IEVycm9yKCJCaXRzIGJleW9uZCBrZXlzaXplIG5vdCB6ZXJvIGFzIGV4cGVjdGVkLiIpO3ZhciB5PWkuZ2VuZXJhdGUocCxsKSxnPSIiO2Zvcih1PTA7dTxsO3UrKylnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGguY2hhckNvZGVBdCh1KV55LmNoYXJDb2RlQXQodSkpO2c9U3RyaW5nLmZyb21DaGFyQ29kZShnLmNoYXJDb2RlQXQoMCkmfmQpK2cuc3Vic3RyKDEpO3ZhciB2PWYtby10LTI7Zm9yKHU9MDt1PHY7dSsrKWlmKDAhPT1nLmNoYXJDb2RlQXQodSkpdGhyb3cgbmV3IEVycm9yKCJMZWZ0bW9zdCBvY3RldHMgbm90IHplcm8gYXMgZXhwZWN0ZWQiKTtpZigxIT09Zy5jaGFyQ29kZUF0KHYpKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IFBTUyBzaWduYXR1cmUsIDB4MDEgbWFya2VyIG5vdCBmb3VuZCIpO3ZhciBtPWcuc3Vic3RyKC10KSxiPW5ldyBuLnV0aWwuQnl0ZUJ1ZmZlcjtyZXR1cm4gYi5maWxsV2l0aEJ5dGUoMCw4KSxiLnB1dEJ5dGVzKGUpLGIucHV0Qnl0ZXMobSksci5zdGFydCgpLHIudXBkYXRlKGIuZ2V0Qnl0ZXMoKSkscD09PXIuZGlnZXN0KCkuZ2V0Qnl0ZXMoKX19O3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cigxMzcpLGk9cigzNTkpLG89cigxMzYpLGE9cig2Nykscz1yKDE2NiksdT1yKDIyOCksYz1yKDE2Nyk7dC5zZWVkV2l0aE5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3NlZWQ6aS5TZWVkLnRvQmluYXJ5KGUpLnNlZWQsbm9uY2U6dH19O3Qua2V5UGFpcj1mdW5jdGlvbihlKXt2YXIgdD1pLlNlZWQudG9CaW5hcnkoZSkscj1mdW5jdGlvbihlLHQpe3ZhciByPVswLDAsMCwwXTtpZih0JiZ0PjApZm9yKHZhciBuPXQsaT0zO2k+PTA7aS0tKXJbMy1pXT1NYXRoLmZsb29yKG4vTWF0aC5wb3coMiw4KmkpKSxuJT1NYXRoLnBvdygyLDgqaSk7dmFyIGE9cy5jb25jYXQocixlKSx1PW8uX2hhc2hDaGFpbihhKTtyZXR1cm4gby5zaGEyNTYodSl9KHQuc2VlZCx0Lm5vbmNlKSxuPWMuZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXIocik7cmV0dXJue3ByaXZhdGVLZXk6bi5wcml2YXRlLHB1YmxpY0tleTpuLnB1YmxpY319LHQuYWRkcmVzcz1mdW5jdGlvbihlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj1uLk1BSU5fTkVUX0NIQUlOX0lEKSx1LmlzUHVibGljS2V5KGUpP2Z1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9bi5NQUlOX05FVF9DSEFJTl9JRCk7dmFyIHI9WzEsInN0cmluZyI9PT10eXBlb2YgdD90LmNoYXJDb2RlQXQoMCk6dF0saT1vLl9oYXNoQ2hhaW4oZSkuc2xpY2UoMCwyMCksYT1zLmNvbmNhdChyLGkpLHU9by5faGFzaENoYWluKGEpLnNsaWNlKDAsNCk7cmV0dXJuIHMuY29uY2F0KGEsdSl9KGEuX2Zyb21JbihlLnB1YmxpY0tleSkscik6dC5hZGRyZXNzKHQua2V5UGFpcihlKSxyKX0sdC5wdWJsaWNLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQua2V5UGFpcihlKS5wdWJsaWNLZXl9LHQucHJpdmF0ZUtleT1mdW5jdGlvbihlKXtyZXR1cm4gdC5rZXlQYWlyKGUpLnByaXZhdGVLZXl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzUHVibGljS2V5PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lLnB1YmxpY0tleX0sdC5pc1ByaXZhdGVLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUucHJpdmF0ZUtleX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29uY2F0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbXS5jb25jYXQobihlKSxuKHQpKSl9LG5ldyBVaW50OEFycmF5KDApKX0sdC5yYW5nZT1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6dC1lfSkubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4qcitlfSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1yKDM2MiksaT1yKDY0NSksbz1yKDM2MSksYT1yKDIwNCk7dC5BTElBU19WRVJTSU9OPTI7dC5QX09QVElPTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoMD09PXRbcl0pcmV0dXJue3ZhbHVlOm51bGwsc2hpZnQ6MX07dmFyIG49ZSh0LHIrMSk7cmV0dXJue3ZhbHVlOm4udmFsdWUsc2hpZnQ6bi5zaGlmdCsxfX19LHQuUF9CWVRFPWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXSxzaGlmdDoxfX0sdC5QX1NIT1JUPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybnt2YWx1ZToyNTYqZVt0XStlW3QrMV0sc2hpZnQ6Mn19LHQuUF9JTlQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJue3ZhbHVlOk1hdGgucG93KDIsMjQpKmVbdF0rTWF0aC5wb3coMiwxNikqZVt0KzFdK01hdGgucG93KDIsOCkqZVt0KzJdK2VbdCszXSxzaGlmdDo0fX0sdC5QX0xPTkc9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJue3ZhbHVlOm4uZnJvbUJ5dGVzQkUoQXJyYXkuZnJvbShlLnNsaWNlKHQsdCs4KSkpLnRvU3RyaW5nKCksc2hpZnQ6OH19LHQuUF9CT09MRUFOPWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTohIWVbYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjBdLHNoaWZ0OjF9fSx0LlBfU1RSSU5HX0ZJWEVEPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPWkuVXRmOEFycmF5VG9TdHIodC5zbGljZShyLHIrZSkpO3JldHVybntzaGlmdDplLHZhbHVlOm59fX0sdC5QX1NUUklOR19WQVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGk9ZShyLG4pLG89dC5QX1NUUklOR19GSVhFRChpLnZhbHVlKShyLG4raS5zaGlmdCkudmFsdWU7cmV0dXJue3NoaWZ0OmkudmFsdWUraS5zaGlmdCx2YWx1ZTpvfX19LHQuUF9CQVNFNThfRklYRUQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybnt2YWx1ZTpvLmRlZmF1bHQuZW5jb2RlKHQuc2xpY2UocixyK2UpKSxzaGlmdDplfX19LHQuUF9CQVNFNThfVkFSPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxpPWUocixuKSxvPXQuUF9CQVNFNThfRklYRUQoaS52YWx1ZSkocixuKzIpLnZhbHVlO3JldHVybntzaGlmdDppLnZhbHVlKzIsdmFsdWU6b319fSx0LlBfQkFTRTY0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPWUodCxyKSxpPSJiYXNlNjQ6Ii5jb25jYXQoYS5mcm9tQnl0ZUFycmF5KHQuc2xpY2UocituLnNoaWZ0LHIrbi5zaGlmdCtuLnZhbHVlKSkpO3JldHVybntzaGlmdDpuLnZhbHVlK24uc2hpZnQsdmFsdWU6aX19fTt0LmJ5dGVUb1N0cmluZ1dpdGhMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxvPXQuUF9TSE9SVChlLG4pLGE9KHI9by52YWx1ZSxmdW5jdGlvbihlLHQpe3ZhciBuPWkuVXRmOEFycmF5VG9TdHIoZS5zbGljZSh0LHQrcikpO3JldHVybntzaGlmdDpyLHZhbHVlOm59fSkoZSxuKzIpLnZhbHVlO3JldHVybntzaGlmdDpvLnZhbHVlKzIsdmFsdWU6YX19LHQuYnl0ZVRvQmFzZTU4PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLHI9KGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKXx8MzI7cmV0dXJue3ZhbHVlOm8uZGVmYXVsdC5lbmNvZGUoZS5zbGljZSh0LHQrcikpLHNoaWZ0OnJ9fSx0LmJ5dGVUb0Jhc2U1OFdpdGhMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj10LlBfU0hPUlQoZSxyKTtyZXR1cm57dmFsdWU6by5kZWZhdWx0LmVuY29kZShlLnNsaWNlKHIrbi5zaGlmdCxyK24uc2hpZnQrbi52YWx1ZSkpLHNoaWZ0Om4uc2hpZnQrbi52YWx1ZX19LHQuYnl0ZVRvQWRkcmVzc09yQWxpYXM9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoZVtyXT09PXQuQUxJQVNfVkVSU0lPTil7dmFyIG49dC5ieXRlVG9TdHJpbmdXaXRoTGVuZ3RoKGUscisyKTtyZXR1cm57c2hpZnQ6bi5zaGlmdCsyLHZhbHVlOiJhbGlhczoiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGVbcisxXSksIjoiKS5jb25jYXQobi52YWx1ZSl9fXJldHVybiB0LmJ5dGVUb0Jhc2U1OChlLHIsMjYpfSx0LmJ5dGVOZXdBbGlhc1RvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybntzaGlmdDp0LlBfU0hPUlQoZSxyKS52YWx1ZSsyLHZhbHVlOnQuYnl0ZVRvU3RyaW5nV2l0aExlbmd0aChlLHIpLnZhbHVlfX0sdC5ieXRlVG9TY3JpcHQ9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoMD09PWVbcl0pcmV0dXJue3NoaWZ0OjEsdmFsdWU6bnVsbH07dmFyIG49dC5QX1NIT1JUKGUscisxKSxpPXIrMStuLnNoaWZ0LG89cisxK24uc2hpZnQrbi52YWx1ZTtyZXR1cm57dmFsdWU6ImJhc2U2NDoiLmNvbmNhdChhLmZyb21CeXRlQXJyYXkoZS5zbGljZShpLG8pKSksc2hpZnQ6by1yfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMDMpLGk9cigyMiksbz1yKDg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9cigxMzkpLHM9cigyMjkpLHU9cigxMzgpO3Quc2VyaWFsaXplckZyb21TY2hlbWE9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGMsZjtpZigiYXJyYXkiPT09ZS50eXBlKXJldHVybiBjPXQuc2VyaWFsaXplckZyb21TY2hlbWEoZS5pdGVtcyxyKSxmPXMuY29uY2F0LmFwcGx5KHMsbyh1Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKSkscy5jb25jYXQoKGUudG9CeXRlc3x8YS5TSE9SVCkodS5sZW5ndGgpLGYpO2lmKCJvYmplY3QiPT09ZS50eXBlKXt2YXIgbD1VaW50OEFycmF5LmZyb20oW10pO2lmKGUub3B0aW9uYWwmJm51bGw9PXUpcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbMF0pO2lmKGUuc2NoZW1hLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG8sYT1pKGUsMiksaD1hWzBdLHA9YVsxXTtvPUFycmF5LmlzQXJyYXkoaCk/aC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLG4oe30sdCx1W3RdKSl9LHt9KTp1W2hdLGM9dC5zZXJpYWxpemVyRnJvbVNjaGVtYShwLHIpLGY9YyhvKSxsPXMuY29uY2F0KGwsZil9KSxlLndpdGhMZW5ndGgpe3ZhciBoPWUud2l0aExlbmd0aC50b0J5dGVzKGwubGVuZ3RoKTtsPXMuY29uY2F0KGgsbCl9cmV0dXJuIGUub3B0aW9uYWwmJihsPXMuY29uY2F0KFsxXSxsKSksbH1pZigiYW55T2YiPT09ZS50eXBlKXt2YXIgcD11W2UuZGlzY3JpbWluYXRvckZpZWxkXSxkPWUuaXRlbUJ5S2V5KHApO2lmKG51bGw9PWQpdGhyb3cgbmV3IEVycm9yKCJTZXJpYWxpemVyIEVycm9yOiBVbmtub3duIGFueU9mIHR5cGU6ICIuY29uY2F0KHApKTtyZXR1cm4iYm9vbGVhbiI9PT1kLnN0cktleSYmNj09PWQua2V5JiYhMT09PXUudmFsdWUmJihkLmtleT03KSxjPXQuc2VyaWFsaXplckZyb21TY2hlbWEoZC5zY2hlbWEsciksbnVsbD09ZS52YWx1ZUZpZWxkP2ModSk6KGY9Yyh1W2UudmFsdWVGaWVsZF0pLHMuY29uY2F0KChlLnRvQnl0ZXN8fGEuQllURSkoZC5rZXkpLGYpKX1pZigicHJpbWl0aXZlIj09PWUudHlwZXx8dm9pZCAwPT09ZS50eXBlKXJldHVybiBlLnRvQnl0ZXModSk7aWYoImRhdGFUeEZpZWxkIj09PWUudHlwZSl7dmFyIHk9YS5MRU4oYS5TSE9SVCkoYS5TVFJJTkcpKHUua2V5KSxnPXUudHlwZSx2PWUuaXRlbXMuZ2V0KGcpO2lmKG51bGw9PXYpdGhyb3cgbmV3IEVycm9yKCJTZXJpYWxpemVyIEVycm9yOiBVbmtub3duIGRhdGFUeEZpZWxkIHR5cGU6ICIuY29uY2F0KGcpKTt2YXIgbT1vKGUuaXRlbXMudmFsdWVzKCkpLmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZ9KTtyZXR1cm4gYz10LnNlcmlhbGl6ZXJGcm9tU2NoZW1hKHYsciksZj1jKHUudmFsdWUpLHMuY29uY2F0KHksYS5CWVRFKG0pLGYpfXRocm93IG5ldyBFcnJvcigiU2VyaWFsaXplciBFcnJvcjogVW5rbm93biBzY2hlbWEgdHlwZTogIi5jb25jYXQoZS50eXBlKSl9fSx0LnNlcmlhbGl6ZVR4PWZ1bmN0aW9uKGUscil7dmFyIG49ZS50eXBlLGk9ZS52ZXJzaW9uLG89dS5nZXRUcmFuc2FjdGlvblNjaGVtYShuLGkpO3JldHVybiB0LnNlcmlhbGl6ZXJGcm9tU2NoZW1hKG8scikoZSl9LHQuc2VyaWFsaXplT3JkZXI9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnZlcnNpb258fDEsaT11Lm9yZGVyVmVyc2lvbk1hcFtuXTtpZihudWxsPT1pKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciB2ZXJzaW9uOiAiLmNvbmNhdChuKSk7cmV0dXJuIHQuc2VyaWFsaXplckZyb21TY2hlbWEoaSxyKShlKX19LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigzOTEpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1yKDkxKSxpPXIoMTExOSksbz1yKDgwKTtmdW5jdGlvbiBhKGUpe3JldHVybiBudWxsPT1lfWZ1bmN0aW9uIHMoZSx0LHIpe3ZhciBuPWkucGF0aChbImNhbGN1bGF0ZV9mZWVfcnVsZXMiLGUsdF0scik7cmV0dXJuIGEobik/aS5wYXRoKFsiY2FsY3VsYXRlX2ZlZV9ydWxlcyIsImRlZmF1bHQiLHRdLHIpOm59dC5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHRbcl09PT1lW3JdfSl9LGk9MDtpPHQubGVuZ3RoO2krKylpZihuKHRbaV0pKXJldHVybiB0W2ldO3JldHVybiBudWxsfSx0LmlzRW1wdHk9YSx0Lm5vcm1hbGl6ZUFzc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fG8uV0FWRVNfSUR9LHQubGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX0sdC5UUkFOU0FDVElPTl9UWVBFPXtHRU5FU0lTOjEsUEFZTUVOVDoyLElTU1VFOjMsVFJBTlNGRVI6NCxSRUlTU1VFOjUsQlVSTjo2LEVYQ0hBTkdFOjcsTEVBU0U6OCxDQU5DRUxfTEVBU0U6OSxBTElBUzoxMCxNQVNTX1RSQU5TRkVSOjExLERBVEE6MTIsU0VUX1NDUklQVDoxMyxTUE9OU09SU0hJUDoxNCxTRVRfQVNTRVRfU0NSSVBUOjE1LFNDUklQVF9JTlZPQ0FUSU9OOjE2fSx0LmN1cnJlbnRDcmVhdGVPcmRlckZhY3Rvcnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpLG8pe3ZvaWQgMD09PWkmJihpPSExKSx2b2lkIDA9PT1vJiYobz1bXSk7dmFyIGE9aT9uZXcgbi5CaWdOdW1iZXIoZS5zbWFydF9hY2NvdW50X2V4dHJhX2ZlZSk6bmV3IG4uQmlnTnVtYmVyKDApLHM9T2JqZWN0LnZhbHVlcyhyLmFzc2V0UGFpcikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLmluY2x1ZGVzKHQpP25ldyBuLkJpZ051bWJlcihlLnNtYXJ0X2Fzc2V0X2V4dHJhX2ZlZSk6bmV3IG4uQmlnTnVtYmVyKDApfSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYWRkKHQpfSxuZXcgbi5CaWdOdW1iZXIoMCkpO3JldHVybiB0LmFkZChhKS5hZGQocyl9fSx0LmN1cnJlbnRGZWVGYWN0b3J5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyLG8sYSx1KXt2YXIgYz1hP25ldyBuLkJpZ051bWJlcihlLnNtYXJ0X2FjY291bnRfZXh0cmFfZmVlKTpuZXcgbi5CaWdOdW1iZXIoMCksZj1jLmFkZChzKHIudHlwZSwiZmVlIixlKSk7c3dpdGNoKHIudHlwZSl7Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuQ0FOQ0VMX0xFQVNFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkFMSUFTOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkxFQVNFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLlNFVF9BU1NFVF9TQ1JJUFQ6Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuU0VUX1NDUklQVDpjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5TUE9OU09SU0hJUDpyZXR1cm4gZjtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5SRUlTU1VFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkJVUk46Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuVFJBTlNGRVI6cmV0dXJuIGYuYWRkKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmci5pbmNsdWRlcyhlKT9uZXcgbi5CaWdOdW1iZXIodC5zbWFydF9hc3NldF9leHRyYV9mZWUpOm5ldyBuLkJpZ051bWJlcigwKX0oci5hc3NldElkLGUsdXx8W10pKTtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5NQVNTX1RSQU5TRkVSOnJldHVybiBmLmFkZChmdW5jdGlvbihlLHQscil7dmFyIG89bmV3IG4uQmlnTnVtYmVyKHMoZS50eXBlLCJwcmljZV9wZXJfdHJhbnNmZXIiLHQpfHwwKSxhPWkucGF0aChbInRyYW5zZmVycyIsImxlbmd0aCJdLGUpfHwwLHU9ZS5hc3NldElkJiZyLmluY2x1ZGVzKGUuYXNzZXRJZCk/bmV3IG4uQmlnTnVtYmVyKHQuc21hcnRfYXNzZXRfZXh0cmFfZmVlKTpuZXcgbi5CaWdOdW1iZXIoMCksYz1uZXcgbi5CaWdOdW1iZXIocyhlLnR5cGUsIm1pbl9wcmljZV9zdGVwIix0KSksZj1vLm11bChhKTtyZXR1cm4gZi5kaXYoYykuaXNJbnQoKXx8KGY9Zi5kaXYoYykucm91bmRUbygwLDApLm11bChjKSksZi5hZGQodSl9KHIsZSx1fHxbXSkpO2Nhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkRBVEE6cmV0dXJuIGMuYWRkKGZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1zKHQudHlwZSwicHJpY2VfcGVyX2tiIixyKXx8MDtyZXR1cm4gbmV3IG4uQmlnTnVtYmVyKGkpLm11bChNYXRoLmZsb29yKDErKGUubGVuZ3RoLTEpLzEwMjQpKX0obyxyLGUpKTtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5JU1NVRTpyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXQuYWRkKHMoZS50eXBlLCJmZWUiLHIpKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5xdWFudGl0eSxyPWUucHJlY2lzaW9uLGk9ZS5kZWNpbWFscyxvPWUucmVpc3N1YWJsZSxhPW5ldyBuLkJpZ051bWJlcih0KS5lcSgxKSxzPW5ldyBuLkJpZ051bWJlcihyfHxpfHwwKS5lcSgwKTtyZXR1cm4hbyYmcyYmYX0oZSk/dC5hZGQocyhlLnR5cGUsIm5mdEZlZSIscikpOml9KHIsYyxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiV3JvbmcgdHJhbnNhY3Rpb24gdHlwZSEiKX19fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UWVBFUz17R0VORVNJUzoxLFBBWU1FTlQ6MixJU1NVRTozLFRSQU5TRkVSOjQsUkVJU1NVRTo1LEJVUk46NixFWENIQU5HRTo3LExFQVNFOjgsQ0FOQ0VMX0xFQVNFOjksQUxJQVM6MTAsTUFTU19UUkFOU0ZFUjoxMSxEQVRBOjEyLFNFVF9TQ1JJUFQ6MTMsU1BPTlNPUlNISVA6MTQsU0VUX0FTU0VUX1NDUklQVDoxNSxJTlZPS0VfU0NSSVBUOjE2fSx0LkFMSUFTPXtBVkFJTEFCTEVfQ0hBUlM6Ii0uMDEyMzQ1Njc4OUBfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE1BWF9BTElBU19MRU5HVEg6MzAsTUlOX0FMSUFTX0xFTkdUSDo0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cig3MDUpO3QuQXNzZXQ9bi5Bc3NldDt2YXIgaT1yKDcwNik7dC5DYW5kbGU9aS5DYW5kbGU7dmFyIG89cig3MDcpO3QuTW9uZXk9by5Nb25leTt2YXIgYT1yKDcwOCk7dC5PcmRlclByaWNlPWEuT3JkZXJQcmljZTt2YXIgcz1yKDcwOSk7dC5Bc3NldFBhaXI9cy5Bc3NldFBhaXI7dmFyIHU9cigyMzYpO3QuY29uZmlnPXUuY29uZmlnfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj17cmVtYXBBc3NldDpmdW5jdGlvbihlKXtyZXR1cm4gZX0scmVtYXBDYW5kbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fTshZnVuY3Rpb24oZSl7ZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19LGUuc2V0PWZ1bmN0aW9uIGUodCxyKXsic3RyaW5nIj09PXR5cGVvZiB0P25bdF09cjpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiBlKHIsdFtyXSl9KX19KHQuY29uZmlnfHwodC5jb25maWc9e30pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPTEsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW3JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5pbmRleE9mKG4pPDAmJihyW25dPWVbbl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9MDtmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2k8bi5sZW5ndGg7aSsrKXQuaW5kZXhPZihuW2ldKTwwJiYocltuW2ldXT1lW25baV1dKX1yZXR1cm4gcn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPXIoMzEpLGE9cigyMzUpLHM9cig5MSksdT1vLmxpYnMuY3J5cHRvLGM9dS5zdHJpbmdUb0J5dGVzLGY9dS5iYXNlNThEZWNvZGUsbD11LmtlY2NhayxoPXUuYmxha2UyYixwPTE0MCxkPXtBVkFJTEFCTEVfQ0hBUlM6Ii0uMDEyMzQ1Njc4OUBfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE1BWF9BTElBU19MRU5HVEg6MzAsTUlOX0FMSUFTX0xFTkdUSDo0fSx5PTQ1LGc9NCx2PTE2LG09MWUzO3QuRVJST1JfTVNHPXtSRVFVSVJFRDoiZmllbGQgaXMgcmVxdWlyZWQiLFdST05HX1RZUEU6ImZpZWxkIGlzIHdyb25nIHR5cGUiLFdST05HX05VTUJFUjoiZmllbGQgaXMgbm90IG51bWJlciIsV1JPTkdfVElNRVNUQU1QOiJmaWVsZCBpcyBub3QgdGltZXN0YW1wIixTTUFMTF9GSUVMRDoiZmllbGQgaXMgc21hbGwiLExBUkdFX0ZJRUxEOiJmaWVsZCBpcyBsYXJnZSIsV1JPTkdfU1lNQk9MUzoiZmllbGQgaGFzIHdyb25nIHN5bWJvbHMiLFdST05HX0FERFJFU1M6ImZpZWxkIGlzIHdyb25nIGFkZHJlc3MiLFdST05HX0JPT0xFQU46ImZpZWxkIGlzIHdyb25nIGJvb2xlYW4iLFdST05HX0FTU0VUX0lEOiJmaWVsZCBpcyB3cm9uZyBhc3NldElkIixXUk9OR19PUkRFUl9UWVBFOidmaWVsZCBpcyB3cm9uZyBvcmRlciB0eXBlLiBGaWVsZCBjYW4gYmUgImJ1eSIgb3IgInNlbGwiJyxOT1RfSFRUUFNfVVJMOiJmaWVsZCBjYW4gYmUgdXJsIHdpdGggaHR0cHMgcHJvdG9jb2wiLEJBU0U2NDonZmllbGQgY2FuIGJlIGJhc2U2NCBzdHJpbmcgd2l0aCBwcmVmaXggImJhc2U2NDoiJyxFTVBUWV9CQVNFNjQ6J2ZpZWxkIGNhbiBiZSBub3QgZW1wdHkgYmFzZTY0Iid9LHQuaXNWYWxpZEFkZHJlc3M9ZnVuY3Rpb24oZSx0KXtpZighZXx8InN0cmluZyIhPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIk1pc3Npbmcgb3IgaW52YWxpZCBhZGRyZXNzIik7dmFyIHI9ZihlKTtpZigxIT09clswXXx8clsxXSE9PXQpcmV0dXJuITE7Zm9yKHZhciBuPXIuc2xpY2UoMCwyMiksaT1yLnNsaWNlKDIyLDI2KSxvPWwoaChuKSkuc2xpY2UoMCw0KSxhPTA7YTw0O2ErKylpZihpW2FdIT09b1thXSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT09dHlwZW9mIGU/ZS50b1N0cmluZygpOmV9LFM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZhbHVlLG49aShlLFsidmFsdWUiXSk7dGhyb3d7dmFsdWU6cixmaWVsZDpuLm5hbWUsdHlwZTpuLnR5cGUsbWVzc2FnZTp0fX0sRT1mdW5jdGlvbihlKXt2YXIgcj1lLnZhbHVlO2Uub3B0aW9uYWx8fG51bGwhPXJ8fFMoZSx0LkVSUk9SX01TRy5SRVFVSVJFRCl9LHc9ZnVuY3Rpb24oZSl7ZT1uKHt9LGUse3ZhbHVlOl8oZS52YWx1ZSl9KSxFKGUpO3ZhciByPWUudmFsdWU7aWYoIWUub3B0aW9uYWwmJm51bGw9PXImJm51bGwhPXImJiJzdHJpbmciIT09dHlwZW9mIHIpcmV0dXJuIFMoZSx0LkVSUk9SX01TRy5XUk9OR19UWVBFKX0sVD1mdW5jdGlvbihlKXtFKGUpO3ZhciByPWUudmFsdWU7aWYobnVsbCE9ciYmImJvb2xlYW4iIT09dHlwZW9mIHIpcmV0dXJuIFMoZSx0LkVSUk9SX01TRy5XUk9OR19CT09MRUFOKX0sQT1mdW5jdGlvbihlKXtFKGUpO3ZhciByPWUudmFsdWU7aWYobnVsbCE9cilzd2l0Y2goITApe2Nhc2UhKHIgaW5zdGFuY2VvZiBhLk1vbmV5KTpyZXR1cm4gUyhlLHQuRVJST1JfTVNHLldST05HX1RZUEUpO2Nhc2UgciBpbnN0YW5jZW9mIGEuTW9uZXkmJnIuZ2V0Q29pbnMoKS5pc05hTigpOnJldHVybiBTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKX19LEM9ZnVuY3Rpb24oZSxyLG4pe0UoZSk7dmFyIGk9ZS52YWx1ZTtpZihudWxsIT1pKXt2YXIgbz1mdW5jdGlvbihpKXtudWxsIT1yJiZpLmx0KG5ldyBzLkJpZ051bWJlcihyKSkmJlMoZSx0LkVSUk9SX01TRy5TTUFMTF9GSUVMRCksbnVsbCE9biYmaS5ndChuZXcgcy5CaWdOdW1iZXIobikpJiZTKGUsdC5FUlJPUl9NU0cuTEFSR0VfRklFTEQpfTtzd2l0Y2goITApe2Nhc2UgaSBpbnN0YW5jZW9mIHMuQmlnTnVtYmVyOmkuaXNOYU4oKSYmUyhlLHQuRVJST1JfTVNHLldST05HX1RZUEUpLG8oaSk7YnJlYWs7Y2FzZSBpIGluc3RhbmNlb2YgYS5Nb25leTp2YXIgdT1pLmdldENvaW5zKCk7dS5pc05hTigpJiZTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKSxvKHUpO2JyZWFrO2Nhc2Uic3RyaW5nIj09PXR5cGVvZiBpJiYhaTpTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKTticmVhaztjYXNlIG5ldyBzLkJpZ051bWJlcihpKS5pc05hTigpOnJldHVybiBTKGUsdC5FUlJPUl9NU0cuV1I=",
"2020.03.29 15:15": "base64:TklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGUuc2lnaW5mby5hbGdvcml0aG1PaWQpLmdldEJ5dGVzKCkpLG0oZS5zaWdpbmZvLmFsZ29yaXRobU9pZCxlLnNpZ2luZm8ucGFyYW1ldGVycyldKSx5KGUuaXNzdWVyKSxpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW3Qscl0pLHkoZS5zdWJqZWN0KSxvLnB1YmxpY0tleVRvQXNuMShlLnB1YmxpY0tleSldKTtyZXR1cm4gZS5pc3N1ZXIudW5pcXVlSWQmJmEudmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDApK2UuaXNzdWVyLnVuaXF1ZUlkKV0pKSxlLnN1YmplY3QudW5pcXVlSWQmJmEudmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMiwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDApK2Uuc3ViamVjdC51bmlxdWVJZCldKSksZS5leHRlbnNpb25zLmxlbmd0aD4wJiZhLnZhbHVlLnB1c2goby5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNUb0FzbjEoZS5leHRlbnNpb25zKSksYX0sby5nZXRDZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm89ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS52ZXJzaW9uKS5nZXRCeXRlcygpKSx5KGUuc3ViamVjdCksby5wdWJsaWNLZXlUb0FzbjEoZS5wdWJsaWNLZXkpLGIoZSldKX0sby5kaXN0aW5ndWlzaGVkTmFtZVRvQXNuMT1mdW5jdGlvbihlKXtyZXR1cm4geShlKX0sby5jZXJ0aWZpY2F0ZVRvQXNuMT1mdW5jdGlvbihlKXt2YXIgdD1lLnRic0NlcnRpZmljYXRlfHxvLmdldFRCU0NlcnRpZmljYXRlKGUpO3JldHVybiBpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW3QsaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIoZS5zaWduYXR1cmVPaWQpLmdldEJ5dGVzKCkpLG0oZS5zaWduYXR1cmVPaWQsZS5zaWduYXR1cmVQYXJhbWV0ZXJzKV0pLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CSVRTVFJJTkcsITEsU3RyaW5nLmZyb21DaGFyQ29kZSgwKStlLnNpZ25hdHVyZSldKX0sby5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNUb0FzbjE9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDMsITAsW10pLHI9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKTt0LnZhbHVlLnB1c2gocik7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pci52YWx1ZS5wdXNoKG8uY2VydGlmaWNhdGVFeHRlbnNpb25Ub0FzbjEoZVtuXSkpO3JldHVybiB0fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uVG9Bc24xPWZ1bmN0aW9uKGUpe3ZhciB0PWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSk7dC52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5PSUQsITEsaS5vaWRUb0RlcihlLmlkKS5nZXRCeXRlcygpKSksZS5jcml0aWNhbCYmdC52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CT09MRUFOLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KSkpO3ZhciByPWUudmFsdWU7cmV0dXJuInN0cmluZyIhPT10eXBlb2YgZS52YWx1ZSYmKHI9aS50b0RlcihyKS5nZXRCeXRlcygpKSx0LnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9DVEVUU1RSSU5HLCExLHIpKSx0fSxvLmNlcnRpZmljYXRpb25SZXF1ZXN0VG9Bc24xPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvfHxvLmdldENlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyhlKTtyZXR1cm4gaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFt0LGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGUuc2lnbmF0dXJlT2lkKS5nZXRCeXRlcygpKSxtKGUuc2lnbmF0dXJlT2lkLGUuc2lnbmF0dXJlUGFyYW1ldGVycyldKSxpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuQklUU1RSSU5HLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMCkrZS5zaWduYXR1cmUpXSl9LG8uY3JlYXRlQ2FTdG9yZT1mdW5jdGlvbihlKXt2YXIgdD17Y2VydHM6e319O2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGEoZSksdC5jZXJ0c1tlLmhhc2hdfHxudWxsfWZ1bmN0aW9uIGEoZSl7aWYoIWUuaGFzaCl7dmFyIHQ9bi5tZC5zaGExLmNyZWF0ZSgpO2UuYXR0cmlidXRlcz1vLlJETkF0dHJpYnV0ZXNBc0FycmF5KHkoZSksdCksZS5oYXNoPXQuZGlnZXN0KCkudG9IZXgoKX19aWYodC5nZXRJc3N1ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5pc3N1ZXIpfSx0LmFkZENlcnRpZmljYXRlPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT09dHlwZW9mIGUmJihlPW4ucGtpLmNlcnRpZmljYXRlRnJvbVBlbShlKSksYShlLnN1YmplY3QpLCF0Lmhhc0NlcnRpZmljYXRlKGUpKWlmKGUuc3ViamVjdC5oYXNoIGluIHQuY2VydHMpe3ZhciByPXQuY2VydHNbZS5zdWJqZWN0Lmhhc2hdO24udXRpbC5pc0FycmF5KHIpfHwocj1bcl0pLHIucHVzaChlKSx0LmNlcnRzW2Uuc3ViamVjdC5oYXNoXT1yfWVsc2UgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF09ZX0sdC5oYXNDZXJ0aWZpY2F0ZT1mdW5jdGlvbihlKXsic3RyaW5nIj09PXR5cGVvZiBlJiYoZT1uLnBraS5jZXJ0aWZpY2F0ZUZyb21QZW0oZSkpO3ZhciB0PXIoZS5zdWJqZWN0KTtpZighdClyZXR1cm4hMTtuLnV0aWwuaXNBcnJheSh0KXx8KHQ9W3RdKTtmb3IodmFyIGE9aS50b0RlcihvLmNlcnRpZmljYXRlVG9Bc24xKGUpKS5nZXRCeXRlcygpLHM9MDtzPHQubGVuZ3RoOysrcyl7aWYoYT09PWkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMSh0W3NdKSkuZ2V0Qnl0ZXMoKSlyZXR1cm4hMH1yZXR1cm4hMX0sdC5saXN0QWxsQ2VydGlmaWNhdGVzPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQuY2VydHMpaWYodC5jZXJ0cy5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIGk9dC5jZXJ0c1tyXTtpZihuLnV0aWwuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoOysrbyllLnB1c2goaVtvXSk7ZWxzZSBlLnB1c2goaSl9cmV0dXJuIGV9LHQucmVtb3ZlQ2VydGlmaWNhdGU9ZnVuY3Rpb24oZSl7dmFyIHM7aWYoInN0cmluZyI9PT10eXBlb2YgZSYmKGU9bi5wa2kuY2VydGlmaWNhdGVGcm9tUGVtKGUpKSxhKGUuc3ViamVjdCksIXQuaGFzQ2VydGlmaWNhdGUoZSkpcmV0dXJuIG51bGw7dmFyIHU9cihlLnN1YmplY3QpO2lmKCFuLnV0aWwuaXNBcnJheSh1KSlyZXR1cm4gcz10LmNlcnRzW2Uuc3ViamVjdC5oYXNoXSxkZWxldGUgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF0scztmb3IodmFyIGM9aS50b0RlcihvLmNlcnRpZmljYXRlVG9Bc24xKGUpKS5nZXRCeXRlcygpLGY9MDtmPHUubGVuZ3RoOysrZil7Yz09PWkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMSh1W2ZdKSkuZ2V0Qnl0ZXMoKSYmKHM9dVtmXSx1LnNwbGljZShmLDEpKX1yZXR1cm4gMD09PXUubGVuZ3RoJiZkZWxldGUgdC5jZXJ0c1tlLnN1YmplY3QuaGFzaF0sc30sZSlmb3IodmFyIHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIHU9ZVtzXTt0LmFkZENlcnRpZmljYXRlKHUpfXJldHVybiB0fSxvLmNlcnRpZmljYXRlRXJyb3I9e2JhZF9jZXJ0aWZpY2F0ZToiZm9yZ2UucGtpLkJhZENlcnRpZmljYXRlIix1bnN1cHBvcnRlZF9jZXJ0aWZpY2F0ZToiZm9yZ2UucGtpLlVuc3VwcG9ydGVkQ2VydGlmaWNhdGUiLGNlcnRpZmljYXRlX3Jldm9rZWQ6ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZVJldm9rZWQiLGNlcnRpZmljYXRlX2V4cGlyZWQ6ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZUV4cGlyZWQiLGNlcnRpZmljYXRlX3Vua25vd246ImZvcmdlLnBraS5DZXJ0aWZpY2F0ZVVua25vd24iLHVua25vd25fY2E6ImZvcmdlLnBraS5Vbmtub3duQ2VydGlmaWNhdGVBdXRob3JpdHkifSxvLnZlcmlmeUNlcnRpZmljYXRlQ2hhaW49ZnVuY3Rpb24oZSx0LHIpeyJmdW5jdGlvbiI9PT10eXBlb2YgciYmKHI9e3ZlcmlmeTpyfSkscj1yfHx7fTt2YXIgaT0odD10LnNsaWNlKDApKS5zbGljZSgwKSxhPXIudmFsaWRpdHlDaGVja0RhdGU7InVuZGVmaW5lZCI9PT10eXBlb2YgYSYmKGE9bmV3IERhdGUpO3ZhciBzPSEwLHU9bnVsbCxjPTA7ZG97dmFyIGY9dC5zaGlmdCgpLGw9bnVsbCxoPSExO2lmKGEmJihhPGYudmFsaWRpdHkubm90QmVmb3JlfHxhPmYudmFsaWRpdHkubm90QWZ0ZXIpJiYodT17bWVzc2FnZToiQ2VydGlmaWNhdGUgaXMgbm90IHZhbGlkIHlldCBvciBoYXMgZXhwaXJlZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci5jZXJ0aWZpY2F0ZV9leHBpcmVkLG5vdEJlZm9yZTpmLnZhbGlkaXR5Lm5vdEJlZm9yZSxub3RBZnRlcjpmLnZhbGlkaXR5Lm5vdEFmdGVyLG5vdzphfSksbnVsbD09PXUpe2lmKG51bGw9PT0obD10WzBdfHxlLmdldElzc3VlcihmKSkmJmYuaXNJc3N1ZXIoZikmJihoPSEwLGw9ZiksbCl7dmFyIHA9bDtuLnV0aWwuaXNBcnJheShwKXx8KHA9W3BdKTtmb3IodmFyIGQ9ITE7IWQmJnAubGVuZ3RoPjA7KXtsPXAuc2hpZnQoKTt0cnl7ZD1sLnZlcmlmeShmKX1jYXRjaChFKXt9fWR8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBzaWduYXR1cmUgaXMgaW52YWxpZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci5iYWRfY2VydGlmaWNhdGV9KX1udWxsIT09dXx8bCYmIWh8fGUuaGFzQ2VydGlmaWNhdGUoZil8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZC4iLGVycm9yOm8uY2VydGlmaWNhdGVFcnJvci51bmtub3duX2NhfSl9aWYobnVsbD09PXUmJmwmJiFmLmlzSXNzdWVyKGwpJiYodT17bWVzc2FnZToiQ2VydGlmaWNhdGUgaXNzdWVyIGlzIGludmFsaWQuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSksbnVsbD09PXUpZm9yKHZhciB5PXtrZXlVc2FnZTohMCxiYXNpY0NvbnN0cmFpbnRzOiEwfSxnPTA7bnVsbD09PXUmJmc8Zi5leHRlbnNpb25zLmxlbmd0aDsrK2cpe3ZhciB2PWYuZXh0ZW5zaW9uc1tnXTshdi5jcml0aWNhbHx8di5uYW1lIGluIHl8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBoYXMgYW4gdW5zdXBwb3J0ZWQgY3JpdGljYWwgZXh0ZW5zaW9uLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLnVuc3VwcG9ydGVkX2NlcnRpZmljYXRlfSl9aWYobnVsbD09PXUmJighc3x8MD09PXQubGVuZ3RoJiYoIWx8fGgpKSl7dmFyIG09Zi5nZXRFeHRlbnNpb24oImJhc2ljQ29uc3RyYWludHMiKSxiPWYuZ2V0RXh0ZW5zaW9uKCJrZXlVc2FnZSIpO2lmKG51bGwhPT1iJiYoYi5rZXlDZXJ0U2lnbiYmbnVsbCE9PW18fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBrZXlVc2FnZSBvciBiYXNpY0NvbnN0cmFpbnRzIGNvbmZsaWN0IG9yIGluZGljYXRlIHRoYXQgdGhlIGNlcnRpZmljYXRlIGlzIG5vdCBhIENBLiBJZiB0aGUgY2VydGlmaWNhdGUgaXMgdGhlIG9ubHkgb25lIGluIHRoZSBjaGFpbiBvciBpc24ndCB0aGUgZmlyc3QgdGhlbiB0aGUgY2VydGlmaWNhdGUgbXVzdCBiZSBhIHZhbGlkIENBLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLmJhZF9jZXJ0aWZpY2F0ZX0pKSxudWxsIT09dXx8bnVsbD09PW18fG0uY0F8fCh1PXttZXNzYWdlOiJDZXJ0aWZpY2F0ZSBiYXNpY0NvbnN0cmFpbnRzIGluZGljYXRlcyB0aGUgY2VydGlmaWNhdGUgaXMgbm90IGEgQ0EuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSksbnVsbD09PXUmJm51bGwhPT1iJiYicGF0aExlbkNvbnN0cmFpbnQiaW4gbSljLTE+bS5wYXRoTGVuQ29uc3RyYWludCYmKHU9e21lc3NhZ2U6IkNlcnRpZmljYXRlIGJhc2ljQ29uc3RyYWludHMgcGF0aExlbkNvbnN0cmFpbnQgdmlvbGF0ZWQuIixlcnJvcjpvLmNlcnRpZmljYXRlRXJyb3IuYmFkX2NlcnRpZmljYXRlfSl9dmFyIF89bnVsbD09PXV8fHUuZXJyb3IsUz1yLnZlcmlmeT9yLnZlcmlmeShfLGMsaSk6XztpZighMCE9PVMpdGhyb3chMD09PV8mJih1PXttZXNzYWdlOiJUaGUgYXBwbGljYXRpb24gcmVqZWN0ZWQgdGhlIGNlcnRpZmljYXRlLiIsZXJyb3I6by5jZXJ0aWZpY2F0ZUVycm9yLmJhZF9jZXJ0aWZpY2F0ZX0pLChTfHwwPT09UykmJigib2JqZWN0IiE9PXR5cGVvZiBTfHxuLnV0aWwuaXNBcnJheShTKT8ic3RyaW5nIj09PXR5cGVvZiBTJiYodS5lcnJvcj1TKTooUy5tZXNzYWdlJiYodS5tZXNzYWdlPVMubWVzc2FnZSksUy5lcnJvciYmKHUuZXJyb3I9Uy5lcnJvcikpKSx1O3U9bnVsbCxzPSExLCsrY313aGlsZSh0Lmxlbmd0aD4wKTtyZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDYpO3IoNTIpLHIoMTApLChlLmV4cG9ydHM9bi5wc3M9bi5wc3N8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJihlPXttZDphcmd1bWVudHNbMF0sbWdmOmFyZ3VtZW50c1sxXSxzYWx0TGVuZ3RoOmFyZ3VtZW50c1syXX0pO3ZhciB0LHI9ZS5tZCxpPWUubWdmLG89ci5kaWdlc3RMZW5ndGgsYT1lLnNhbHR8fG51bGw7aWYoInN0cmluZyI9PT10eXBlb2YgYSYmKGE9bi51dGlsLmNyZWF0ZUJ1ZmZlcihhKSksInNhbHRMZW5ndGgiaW4gZSl0PWUuc2FsdExlbmd0aDtlbHNle2lmKG51bGw9PT1hKXRocm93IG5ldyBFcnJvcigiU2FsdCBsZW5ndGggbm90IHNwZWNpZmllZCBvciBzcGVjaWZpYyBzYWx0IG5vdCBnaXZlbi4iKTt0PWEubGVuZ3RoKCl9aWYobnVsbCE9PWEmJmEubGVuZ3RoKCkhPT10KXRocm93IG5ldyBFcnJvcigiR2l2ZW4gc2FsdCBsZW5ndGggZG9lcyBub3QgbWF0Y2ggbGVuZ3RoIG9mIGdpdmVuIHNhbHQuIik7dmFyIHM9ZS5wcm5nfHxuLnJhbmRvbSx1PXtlbmNvZGU6ZnVuY3Rpb24oZSx1KXt2YXIgYyxmLGw9dS0xLGg9TWF0aC5jZWlsKGwvOCkscD1lLmRpZ2VzdCgpLmdldEJ5dGVzKCk7aWYoaDxvK3QrMil0aHJvdyBuZXcgRXJyb3IoIk1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gZW5jcnlwdC4iKTtmPW51bGw9PT1hP3MuZ2V0Qnl0ZXNTeW5jKHQpOmEuYnl0ZXMoKTt2YXIgZD1uZXcgbi51dGlsLkJ5dGVCdWZmZXI7ZC5maWxsV2l0aEJ5dGUoMCw4KSxkLnB1dEJ5dGVzKHApLGQucHV0Qnl0ZXMoZiksci5zdGFydCgpLHIudXBkYXRlKGQuZ2V0Qnl0ZXMoKSk7dmFyIHk9ci5kaWdlc3QoKS5nZXRCeXRlcygpLGc9bmV3IG4udXRpbC5CeXRlQnVmZmVyO2cuZmlsbFdpdGhCeXRlKDAsaC10LW8tMiksZy5wdXRCeXRlKDEpLGcucHV0Qnl0ZXMoZik7dmFyIHY9Zy5nZXRCeXRlcygpLG09aC1vLTEsYj1pLmdlbmVyYXRlKHksbSksXz0iIjtmb3IoYz0wO2M8bTtjKyspXys9U3RyaW5nLmZyb21DaGFyQ29kZSh2LmNoYXJDb2RlQXQoYyleYi5jaGFyQ29kZUF0KGMpKTt2YXIgUz02NTI4MD4+OCpoLWwmMjU1O3JldHVybihfPVN0cmluZy5mcm9tQ2hhckNvZGUoXy5jaGFyQ29kZUF0KDApJn5TKStfLnN1YnN0cigxKSkreStTdHJpbmcuZnJvbUNoYXJDb2RlKDE4OCl9LHZlcmlmeTpmdW5jdGlvbihlLGEscyl7dmFyIHUsYz1zLTEsZj1NYXRoLmNlaWwoYy84KTtpZihhPWEuc3Vic3RyKC1mKSxmPG8rdCsyKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IHBhcmFtZXRlcnMgdG8gUFNTIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uIik7aWYoMTg4IT09YS5jaGFyQ29kZUF0KGYtMSkpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4QkMuIik7dmFyIGw9Zi1vLTEsaD1hLnN1YnN0cigwLGwpLHA9YS5zdWJzdHIobCxvKSxkPTY1MjgwPj44KmYtYyYyNTU7aWYoMCE9PShoLmNoYXJDb2RlQXQoMCkmZCkpdGhyb3cgbmV3IEVycm9yKCJCaXRzIGJleW9uZCBrZXlzaXplIG5vdCB6ZXJvIGFzIGV4cGVjdGVkLiIpO3ZhciB5PWkuZ2VuZXJhdGUocCxsKSxnPSIiO2Zvcih1PTA7dTxsO3UrKylnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGguY2hhckNvZGVBdCh1KV55LmNoYXJDb2RlQXQodSkpO2c9U3RyaW5nLmZyb21DaGFyQ29kZShnLmNoYXJDb2RlQXQoMCkmfmQpK2cuc3Vic3RyKDEpO3ZhciB2PWYtby10LTI7Zm9yKHU9MDt1PHY7dSsrKWlmKDAhPT1nLmNoYXJDb2RlQXQodSkpdGhyb3cgbmV3IEVycm9yKCJMZWZ0bW9zdCBvY3RldHMgbm90IHplcm8gYXMgZXhwZWN0ZWQiKTtpZigxIT09Zy5jaGFyQ29kZUF0KHYpKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IFBTUyBzaWduYXR1cmUsIDB4MDEgbWFya2VyIG5vdCBmb3VuZCIpO3ZhciBtPWcuc3Vic3RyKC10KSxiPW5ldyBuLnV0aWwuQnl0ZUJ1ZmZlcjtyZXR1cm4gYi5maWxsV2l0aEJ5dGUoMCw4KSxiLnB1dEJ5dGVzKGUpLGIucHV0Qnl0ZXMobSksci5zdGFydCgpLHIudXBkYXRlKGIuZ2V0Qnl0ZXMoKSkscD09PXIuZGlnZXN0KCkuZ2V0Qnl0ZXMoKX19O3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cigxMzcpLGk9cigzNTkpLG89cigxMzYpLGE9cig2Nykscz1yKDE2NiksdT1yKDIyOCksYz1yKDE2Nyk7dC5zZWVkV2l0aE5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3NlZWQ6aS5TZWVkLnRvQmluYXJ5KGUpLnNlZWQsbm9uY2U6dH19O3Qua2V5UGFpcj1mdW5jdGlvbihlKXt2YXIgdD1pLlNlZWQudG9CaW5hcnkoZSkscj1mdW5jdGlvbihlLHQpe3ZhciByPVswLDAsMCwwXTtpZih0JiZ0PjApZm9yKHZhciBuPXQsaT0zO2k+PTA7aS0tKXJbMy1pXT1NYXRoLmZsb29yKG4vTWF0aC5wb3coMiw4KmkpKSxuJT1NYXRoLnBvdygyLDgqaSk7dmFyIGE9cy5jb25jYXQocixlKSx1PW8uX2hhc2hDaGFpbihhKTtyZXR1cm4gby5zaGEyNTYodSl9KHQuc2VlZCx0Lm5vbmNlKSxuPWMuZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXIocik7cmV0dXJue3ByaXZhdGVLZXk6bi5wcml2YXRlLHB1YmxpY0tleTpuLnB1YmxpY319LHQuYWRkcmVzcz1mdW5jdGlvbihlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj1uLk1BSU5fTkVUX0NIQUlOX0lEKSx1LmlzUHVibGljS2V5KGUpP2Z1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9bi5NQUlOX05FVF9DSEFJTl9JRCk7dmFyIHI9WzEsInN0cmluZyI9PT10eXBlb2YgdD90LmNoYXJDb2RlQXQoMCk6dF0saT1vLl9oYXNoQ2hhaW4oZSkuc2xpY2UoMCwyMCksYT1zLmNvbmNhdChyLGkpLHU9by5faGFzaENoYWluKGEpLnNsaWNlKDAsNCk7cmV0dXJuIHMuY29uY2F0KGEsdSl9KGEuX2Zyb21JbihlLnB1YmxpY0tleSkscik6dC5hZGRyZXNzKHQua2V5UGFpcihlKSxyKX0sdC5wdWJsaWNLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQua2V5UGFpcihlKS5wdWJsaWNLZXl9LHQucHJpdmF0ZUtleT1mdW5jdGlvbihlKXtyZXR1cm4gdC5rZXlQYWlyKGUpLnByaXZhdGVLZXl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzUHVibGljS2V5PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lLnB1YmxpY0tleX0sdC5pc1ByaXZhdGVLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUucHJpdmF0ZUtleX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29uY2F0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbXS5jb25jYXQobihlKSxuKHQpKSl9LG5ldyBVaW50OEFycmF5KDApKX0sdC5yYW5nZT1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6dC1lfSkubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4qcitlfSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1yKDM2MiksaT1yKDY0NSksbz1yKDM2MSksYT1yKDIwNCk7dC5BTElBU19WRVJTSU9OPTI7dC5QX09QVElPTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoMD09PXRbcl0pcmV0dXJue3ZhbHVlOm51bGwsc2hpZnQ6MX07dmFyIG49ZSh0LHIrMSk7cmV0dXJue3ZhbHVlOm4udmFsdWUsc2hpZnQ6bi5zaGlmdCsxfX19LHQuUF9CWVRFPWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXSxzaGlmdDoxfX0sdC5QX1NIT1JUPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybnt2YWx1ZToyNTYqZVt0XStlW3QrMV0sc2hpZnQ6Mn19LHQuUF9JTlQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJue3ZhbHVlOk1hdGgucG93KDIsMjQpKmVbdF0rTWF0aC5wb3coMiwxNikqZVt0KzFdK01hdGgucG93KDIsOCkqZVt0KzJdK2VbdCszXSxzaGlmdDo0fX0sdC5QX0xPTkc9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJue3ZhbHVlOm4uZnJvbUJ5dGVzQkUoQXJyYXkuZnJvbShlLnNsaWNlKHQsdCs4KSkpLnRvU3RyaW5nKCksc2hpZnQ6OH19LHQuUF9CT09MRUFOPWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTohIWVbYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjBdLHNoaWZ0OjF9fSx0LlBfU1RSSU5HX0ZJWEVEPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPWkuVXRmOEFycmF5VG9TdHIodC5zbGljZShyLHIrZSkpO3JldHVybntzaGlmdDplLHZhbHVlOm59fX0sdC5QX1NUUklOR19WQVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGk9ZShyLG4pLG89dC5QX1NUUklOR19GSVhFRChpLnZhbHVlKShyLG4raS5zaGlmdCkudmFsdWU7cmV0dXJue3NoaWZ0OmkudmFsdWUraS5zaGlmdCx2YWx1ZTpvfX19LHQuUF9CQVNFNThfRklYRUQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybnt2YWx1ZTpvLmRlZmF1bHQuZW5jb2RlKHQuc2xpY2UocixyK2UpKSxzaGlmdDplfX19LHQuUF9CQVNFNThfVkFSPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxpPWUocixuKSxvPXQuUF9CQVNFNThfRklYRUQoaS52YWx1ZSkocixuKzIpLnZhbHVlO3JldHVybntzaGlmdDppLnZhbHVlKzIsdmFsdWU6b319fSx0LlBfQkFTRTY0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPWUodCxyKSxpPSJiYXNlNjQ6Ii5jb25jYXQoYS5mcm9tQnl0ZUFycmF5KHQuc2xpY2UocituLnNoaWZ0LHIrbi5zaGlmdCtuLnZhbHVlKSkpO3JldHVybntzaGlmdDpuLnZhbHVlK24uc2hpZnQsdmFsdWU6aX19fTt0LmJ5dGVUb1N0cmluZ1dpdGhMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxvPXQuUF9TSE9SVChlLG4pLGE9KHI9by52YWx1ZSxmdW5jdGlvbihlLHQpe3ZhciBuPWkuVXRmOEFycmF5VG9TdHIoZS5zbGljZSh0LHQrcikpO3JldHVybntzaGlmdDpyLHZhbHVlOm59fSkoZSxuKzIpLnZhbHVlO3JldHVybntzaGlmdDpvLnZhbHVlKzIsdmFsdWU6YX19LHQuYnl0ZVRvQmFzZTU4PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLHI9KGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKXx8MzI7cmV0dXJue3ZhbHVlOm8uZGVmYXVsdC5lbmNvZGUoZS5zbGljZSh0LHQrcikpLHNoaWZ0OnJ9fSx0LmJ5dGVUb0Jhc2U1OFdpdGhMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj10LlBfU0hPUlQoZSxyKTtyZXR1cm57dmFsdWU6by5kZWZhdWx0LmVuY29kZShlLnNsaWNlKHIrbi5zaGlmdCxyK24uc2hpZnQrbi52YWx1ZSkpLHNoaWZ0Om4uc2hpZnQrbi52YWx1ZX19LHQuYnl0ZVRvQWRkcmVzc09yQWxpYXM9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoZVtyXT09PXQuQUxJQVNfVkVSU0lPTil7dmFyIG49dC5ieXRlVG9TdHJpbmdXaXRoTGVuZ3RoKGUscisyKTtyZXR1cm57c2hpZnQ6bi5zaGlmdCsyLHZhbHVlOiJhbGlhczoiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGVbcisxXSksIjoiKS5jb25jYXQobi52YWx1ZSl9fXJldHVybiB0LmJ5dGVUb0Jhc2U1OChlLHIsMjYpfSx0LmJ5dGVOZXdBbGlhc1RvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybntzaGlmdDp0LlBfU0hPUlQoZSxyKS52YWx1ZSsyLHZhbHVlOnQuYnl0ZVRvU3RyaW5nV2l0aExlbmd0aChlLHIpLnZhbHVlfX0sdC5ieXRlVG9TY3JpcHQ9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoMD09PWVbcl0pcmV0dXJue3NoaWZ0OjEsdmFsdWU6bnVsbH07dmFyIG49dC5QX1NIT1JUKGUscisxKSxpPXIrMStuLnNoaWZ0LG89cisxK24uc2hpZnQrbi52YWx1ZTtyZXR1cm57dmFsdWU6ImJhc2U2NDoiLmNvbmNhdChhLmZyb21CeXRlQXJyYXkoZS5zbGljZShpLG8pKSksc2hpZnQ6by1yfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMDMpLGk9cigyMiksbz1yKDg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9cigxMzkpLHM9cigyMjkpLHU9cigxMzgpO3Quc2VyaWFsaXplckZyb21TY2hlbWE9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGMsZjtpZigiYXJyYXkiPT09ZS50eXBlKXJldHVybiBjPXQuc2VyaWFsaXplckZyb21TY2hlbWEoZS5pdGVtcyxyKSxmPXMuY29uY2F0LmFwcGx5KHMsbyh1Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKSkscy5jb25jYXQoKGUudG9CeXRlc3x8YS5TSE9SVCkodS5sZW5ndGgpLGYpO2lmKCJvYmplY3QiPT09ZS50eXBlKXt2YXIgbD1VaW50OEFycmF5LmZyb20oW10pO2lmKGUub3B0aW9uYWwmJm51bGw9PXUpcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbMF0pO2lmKGUuc2NoZW1hLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG8sYT1pKGUsMiksaD1hWzBdLHA9YVsxXTtvPUFycmF5LmlzQXJyYXkoaCk/aC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLG4oe30sdCx1W3RdKSl9LHt9KTp1W2hdLGM9dC5zZXJpYWxpemVyRnJvbVNjaGVtYShwLHIpLGY9YyhvKSxsPXMuY29uY2F0KGwsZil9KSxlLndpdGhMZW5ndGgpe3ZhciBoPWUud2l0aExlbmd0aC50b0J5dGVzKGwubGVuZ3RoKTtsPXMuY29uY2F0KGgsbCl9cmV0dXJuIGUub3B0aW9uYWwmJihsPXMuY29uY2F0KFsxXSxsKSksbH1pZigiYW55T2YiPT09ZS50eXBlKXt2YXIgcD11W2UuZGlzY3JpbWluYXRvckZpZWxkXSxkPWUuaXRlbUJ5S2V5KHApO2lmKG51bGw9PWQpdGhyb3cgbmV3IEVycm9yKCJTZXJpYWxpemVyIEVycm9yOiBVbmtub3duIGFueU9mIHR5cGU6ICIuY29uY2F0KHApKTtyZXR1cm4iYm9vbGVhbiI9PT1kLnN0cktleSYmNj09PWQua2V5JiYhMT09PXUudmFsdWUmJihkLmtleT03KSxjPXQuc2VyaWFsaXplckZyb21TY2hlbWEoZC5zY2hlbWEsciksbnVsbD09ZS52YWx1ZUZpZWxkP2ModSk6KGY9Yyh1W2UudmFsdWVGaWVsZF0pLHMuY29uY2F0KChlLnRvQnl0ZXN8fGEuQllURSkoZC5rZXkpLGYpKX1pZigicHJpbWl0aXZlIj09PWUudHlwZXx8dm9pZCAwPT09ZS50eXBlKXJldHVybiBlLnRvQnl0ZXModSk7aWYoImRhdGFUeEZpZWxkIj09PWUudHlwZSl7dmFyIHk9YS5MRU4oYS5TSE9SVCkoYS5TVFJJTkcpKHUua2V5KSxnPXUudHlwZSx2PWUuaXRlbXMuZ2V0KGcpO2lmKG51bGw9PXYpdGhyb3cgbmV3IEVycm9yKCJTZXJpYWxpemVyIEVycm9yOiBVbmtub3duIGRhdGFUeEZpZWxkIHR5cGU6ICIuY29uY2F0KGcpKTt2YXIgbT1vKGUuaXRlbXMudmFsdWVzKCkpLmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZ9KTtyZXR1cm4gYz10LnNlcmlhbGl6ZXJGcm9tU2NoZW1hKHYsciksZj1jKHUudmFsdWUpLHMuY29uY2F0KHksYS5CWVRFKG0pLGYpfXRocm93IG5ldyBFcnJvcigiU2VyaWFsaXplciBFcnJvcjogVW5rbm93biBzY2hlbWEgdHlwZTogIi5jb25jYXQoZS50eXBlKSl9fSx0LnNlcmlhbGl6ZVR4PWZ1bmN0aW9uKGUscil7dmFyIG49ZS50eXBlLGk9ZS52ZXJzaW9uLG89dS5nZXRUcmFuc2FjdGlvblNjaGVtYShuLGkpO3JldHVybiB0LnNlcmlhbGl6ZXJGcm9tU2NoZW1hKG8scikoZSl9LHQuc2VyaWFsaXplT3JkZXI9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnZlcnNpb258fDEsaT11Lm9yZGVyVmVyc2lvbk1hcFtuXTtpZihudWxsPT1pKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciB2ZXJzaW9uOiAiLmNvbmNhdChuKSk7cmV0dXJuIHQuc2VyaWFsaXplckZyb21TY2hlbWEoaSxyKShlKX19LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigzOTEpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1yKDkxKSxpPXIoMTExOSksbz1yKDgwKTtmdW5jdGlvbiBhKGUpe3JldHVybiBudWxsPT1lfWZ1bmN0aW9uIHMoZSx0LHIpe3ZhciBuPWkucGF0aChbImNhbGN1bGF0ZV9mZWVfcnVsZXMiLGUsdF0scik7cmV0dXJuIGEobik/aS5wYXRoKFsiY2FsY3VsYXRlX2ZlZV9ydWxlcyIsImRlZmF1bHQiLHRdLHIpOm59dC5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHRbcl09PT1lW3JdfSl9LGk9MDtpPHQubGVuZ3RoO2krKylpZihuKHRbaV0pKXJldHVybiB0W2ldO3JldHVybiBudWxsfSx0LmlzRW1wdHk9YSx0Lm5vcm1hbGl6ZUFzc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fG8uV0FWRVNfSUR9LHQubGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX0sdC5UUkFOU0FDVElPTl9UWVBFPXtHRU5FU0lTOjEsUEFZTUVOVDoyLElTU1VFOjMsVFJBTlNGRVI6NCxSRUlTU1VFOjUsQlVSTjo2LEVYQ0hBTkdFOjcsTEVBU0U6OCxDQU5DRUxfTEVBU0U6OSxBTElBUzoxMCxNQVNTX1RSQU5TRkVSOjExLERBVEE6MTIsU0VUX1NDUklQVDoxMyxTUE9OU09SU0hJUDoxNCxTRVRfQVNTRVRfU0NSSVBUOjE1LFNDUklQVF9JTlZPQ0FUSU9OOjE2fSx0LmN1cnJlbnRDcmVhdGVPcmRlckZhY3Rvcnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpLG8pe3ZvaWQgMD09PWkmJihpPSExKSx2b2lkIDA9PT1vJiYobz1bXSk7dmFyIGE9aT9uZXcgbi5CaWdOdW1iZXIoZS5zbWFydF9hY2NvdW50X2V4dHJhX2ZlZSk6bmV3IG4uQmlnTnVtYmVyKDApLHM9T2JqZWN0LnZhbHVlcyhyLmFzc2V0UGFpcikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLmluY2x1ZGVzKHQpP25ldyBuLkJpZ051bWJlcihlLnNtYXJ0X2Fzc2V0X2V4dHJhX2ZlZSk6bmV3IG4uQmlnTnVtYmVyKDApfSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYWRkKHQpfSxuZXcgbi5CaWdOdW1iZXIoMCkpO3JldHVybiB0LmFkZChhKS5hZGQocyl9fSx0LmN1cnJlbnRGZWVGYWN0b3J5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyLG8sYSx1KXt2YXIgYz1hP25ldyBuLkJpZ051bWJlcihlLnNtYXJ0X2FjY291bnRfZXh0cmFfZmVlKTpuZXcgbi5CaWdOdW1iZXIoMCksZj1jLmFkZChzKHIudHlwZSwiZmVlIixlKSk7c3dpdGNoKHIudHlwZSl7Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuQ0FOQ0VMX0xFQVNFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkFMSUFTOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkxFQVNFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLlNFVF9BU1NFVF9TQ1JJUFQ6Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuU0VUX1NDUklQVDpjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5TUE9OU09SU0hJUDpyZXR1cm4gZjtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5SRUlTU1VFOmNhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkJVUk46Y2FzZSB0LlRSQU5TQUNUSU9OX1RZUEUuVFJBTlNGRVI6cmV0dXJuIGYuYWRkKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmci5pbmNsdWRlcyhlKT9uZXcgbi5CaWdOdW1iZXIodC5zbWFydF9hc3NldF9leHRyYV9mZWUpOm5ldyBuLkJpZ051bWJlcigwKX0oci5hc3NldElkLGUsdXx8W10pKTtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5NQVNTX1RSQU5TRkVSOnJldHVybiBmLmFkZChmdW5jdGlvbihlLHQscil7dmFyIG89bmV3IG4uQmlnTnVtYmVyKHMoZS50eXBlLCJwcmljZV9wZXJfdHJhbnNmZXIiLHQpfHwwKSxhPWkucGF0aChbInRyYW5zZmVycyIsImxlbmd0aCJdLGUpfHwwLHU9ZS5hc3NldElkJiZyLmluY2x1ZGVzKGUuYXNzZXRJZCk/bmV3IG4uQmlnTnVtYmVyKHQuc21hcnRfYXNzZXRfZXh0cmFfZmVlKTpuZXcgbi5CaWdOdW1iZXIoMCksYz1uZXcgbi5CaWdOdW1iZXIocyhlLnR5cGUsIm1pbl9wcmljZV9zdGVwIix0KSksZj1vLm11bChhKTtyZXR1cm4gZi5kaXYoYykuaXNJbnQoKXx8KGY9Zi5kaXYoYykucm91bmRUbygwLDApLm11bChjKSksZi5hZGQodSl9KHIsZSx1fHxbXSkpO2Nhc2UgdC5UUkFOU0FDVElPTl9UWVBFLkRBVEE6cmV0dXJuIGMuYWRkKGZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1zKHQudHlwZSwicHJpY2VfcGVyX2tiIixyKXx8MDtyZXR1cm4gbmV3IG4uQmlnTnVtYmVyKGkpLm11bChNYXRoLmZsb29yKDErKGUubGVuZ3RoLTEpLzEwMjQpKX0obyxyLGUpKTtjYXNlIHQuVFJBTlNBQ1RJT05fVFlQRS5JU1NVRTpyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXQuYWRkKHMoZS50eXBlLCJmZWUiLHIpKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5xdWFudGl0eSxyPWUucHJlY2lzaW9uLGk9ZS5kZWNpbWFscyxvPWUucmVpc3N1YWJsZSxhPW5ldyBuLkJpZ051bWJlcih0KS5lcSgxKSxzPW5ldyBuLkJpZ051bWJlcihyfHxpfHwwKS5lcSgwKTtyZXR1cm4hbyYmcyYmYX0oZSk/dC5hZGQocyhlLnR5cGUsIm5mdEZlZSIscikpOml9KHIsYyxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiV3JvbmcgdHJhbnNhY3Rpb24gdHlwZSEiKX19fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UWVBFUz17R0VORVNJUzoxLFBBWU1FTlQ6MixJU1NVRTozLFRSQU5TRkVSOjQsUkVJU1NVRTo1LEJVUk46NixFWENIQU5HRTo3LExFQVNFOjgsQ0FOQ0VMX0xFQVNFOjksQUxJQVM6MTAsTUFTU19UUkFOU0ZFUjoxMSxEQVRBOjEyLFNFVF9TQ1JJUFQ6MTMsU1BPTlNPUlNISVA6MTQsU0VUX0FTU0VUX1NDUklQVDoxNSxJTlZPS0VfU0NSSVBUOjE2fSx0LkFMSUFTPXtBVkFJTEFCTEVfQ0hBUlM6Ii0uMDEyMzQ1Njc4OUBfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE1BWF9BTElBU19MRU5HVEg6MzAsTUlOX0FMSUFTX0xFTkdUSDo0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cig3MDUpO3QuQXNzZXQ9bi5Bc3NldDt2YXIgaT1yKDcwNik7dC5DYW5kbGU9aS5DYW5kbGU7dmFyIG89cig3MDcpO3QuTW9uZXk9by5Nb25leTt2YXIgYT1yKDcwOCk7dC5PcmRlclByaWNlPWEuT3JkZXJQcmljZTt2YXIgcz1yKDcwOSk7dC5Bc3NldFBhaXI9cy5Bc3NldFBhaXI7dmFyIHU9cigyMzYpO3QuY29uZmlnPXUuY29uZmlnfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj17cmVtYXBBc3NldDpmdW5jdGlvbihlKXtyZXR1cm4gZX0scmVtYXBDYW5kbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fTshZnVuY3Rpb24oZSl7ZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19LGUuc2V0PWZ1bmN0aW9uIGUodCxyKXsic3RyaW5nIj09PXR5cGVvZiB0P25bdF09cjpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiBlKHIsdFtyXSl9KX19KHQuY29uZmlnfHwodC5jb25maWc9e30pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPTEsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW3JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5pbmRleE9mKG4pPDAmJihyW25dPWVbbl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9MDtmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2k8bi5sZW5ndGg7aSsrKXQuaW5kZXhPZihuW2ldKTwwJiYocltuW2ldXT1lW25baV1dKX1yZXR1cm4gcn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPXIoMzEpLGE9cigyMzUpLHM9cig5MSksdT1vLmxpYnMuY3J5cHRvLGM9dS5zdHJpbmdUb0J5dGVzLGY9dS5iYXNlNThEZWNvZGUsbD11LmtlY2NhayxoPXUuYmxha2UyYixwPTE0MCxkPXtBVkFJTEFCTEVfQ0hBUlM6Ii0uMDEyMzQ1Njc4OUBfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE1BWF9BTElBU19MRU5HVEg6MzAsTUlOX0FMSUFTX0xFTkdUSDo0fSx5PTQ1LGc9NCx2PTE2LG09MWUzO3QuRVJST1JfTVNHPXtSRVFVSVJFRDoiZmllbGQgaXMgcmVxdWlyZWQiLFdST05HX1RZUEU6ImZpZWxkIGlzIHdyb25nIHR5cGUiLFdST05HX05VTUJFUjoiZmllbGQgaXMgbm90IG51bWJlciIsV1JPTkdfVElNRVNUQU1QOiJmaWVsZCBpcyBub3QgdGltZXN0YW1wIixTTUFMTF9GSUVMRDoiZmllbGQgaXMgc21hbGwiLExBUkdFX0ZJRUxEOiJmaWVsZCBpcyBsYXJnZSIsV1JPTkdfU1lNQk9MUzoiZmllbGQgaGFzIHdyb25nIHN5bWJvbHMiLFdST05HX0FERFJFU1M6ImZpZWxkIGlzIHdyb25nIGFkZHJlc3MiLFdST05HX0JPT0xFQU46ImZpZWxkIGlzIHdyb25nIGJvb2xlYW4iLFdST05HX0FTU0VUX0lEOiJmaWVsZCBpcyB3cm9uZyBhc3NldElkIixXUk9OR19PUkRFUl9UWVBFOidmaWVsZCBpcyB3cm9uZyBvcmRlciB0eXBlLiBGaWVsZCBjYW4gYmUgImJ1eSIgb3IgInNlbGwiJyxOT1RfSFRUUFNfVVJMOiJmaWVsZCBjYW4gYmUgdXJsIHdpdGggaHR0cHMgcHJvdG9jb2wiLEJBU0U2NDonZmllbGQgY2FuIGJlIGJhc2U2NCBzdHJpbmcgd2l0aCBwcmVmaXggImJhc2U2NDoiJyxFTVBUWV9CQVNFNjQ6J2ZpZWxkIGNhbiBiZSBub3QgZW1wdHkgYmFzZTY0Iid9LHQuaXNWYWxpZEFkZHJlc3M9ZnVuY3Rpb24oZSx0KXtpZighZXx8InN0cmluZyIhPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIk1pc3Npbmcgb3IgaW52YWxpZCBhZGRyZXNzIik7dmFyIHI9ZihlKTtpZigxIT09clswXXx8clsxXSE9PXQpcmV0dXJuITE7Zm9yKHZhciBuPXIuc2xpY2UoMCwyMiksaT1yLnNsaWNlKDIyLDI2KSxvPWwoaChuKSkuc2xpY2UoMCw0KSxhPTA7YTw0O2ErKylpZihpW2FdIT09b1thXSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT09dHlwZW9mIGU/ZS50b1N0cmluZygpOmV9LFM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZhbHVlLG49aShlLFsidmFsdWUiXSk7dGhyb3d7dmFsdWU6cixmaWVsZDpuLm5hbWUsdHlwZTpuLnR5cGUsbWVzc2FnZTp0fX0sRT1mdW5jdGlvbihlKXt2YXIgcj1lLnZhbHVlO2Uub3B0aW9uYWx8fG51bGwhPXJ8fFMoZSx0LkVSUk9SX01TRy5SRVFVSVJFRCl9LHc9ZnVuY3Rpb24oZSl7ZT1uKHt9LGUse3ZhbHVlOl8oZS52YWx1ZSl9KSxFKGUpO3ZhciByPWUudmFsdWU7aWYoIWUub3B0aW9uYWwmJm51bGw9PXImJm51bGwhPXImJiJzdHJpbmciIT09dHlwZW9mIHIpcmV0dXJuIFMoZSx0LkVSUk9SX01TRy5XUk9OR19UWVBFKX0sVD1mdW5jdGlvbihlKXtFKGUpO3ZhciByPWUudmFsdWU7aWYobnVsbCE9ciYmImJvb2xlYW4iIT09dHlwZW9mIHIpcmV0dXJuIFMoZSx0LkVSUk9SX01TRy5XUk9OR19CT09MRUFOKX0sQT1mdW5jdGlvbihlKXtFKGUpO3ZhciByPWUudmFsdWU7aWYobnVsbCE9cilzd2l0Y2goITApe2Nhc2UhKHIgaW5zdGFuY2VvZiBhLk1vbmV5KTpyZXR1cm4gUyhlLHQuRVJST1JfTVNHLldST05HX1RZUEUpO2Nhc2UgciBpbnN0YW5jZW9mIGEuTW9uZXkmJnIuZ2V0Q29pbnMoKS5pc05hTigpOnJldHVybiBTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKX19LEM9ZnVuY3Rpb24oZSxyLG4pe0UoZSk7dmFyIGk9ZS52YWx1ZTtpZihudWxsIT1pKXt2YXIgbz1mdW5jdGlvbihpKXtudWxsIT1yJiZpLmx0KG5ldyBzLkJpZ051bWJlcihyKSkmJlMoZSx0LkVSUk9SX01TRy5TTUFMTF9GSUVMRCksbnVsbCE9biYmaS5ndChuZXcgcy5CaWdOdW1iZXIobikpJiZTKGUsdC5FUlJPUl9NU0cuTEFSR0VfRklFTEQpfTtzd2l0Y2goITApe2Nhc2UgaSBpbnN0YW5jZW9mIHMuQmlnTnVtYmVyOmkuaXNOYU4oKSYmUyhlLHQuRVJST1JfTVNHLldST05HX1RZUEUpLG8oaSk7YnJlYWs7Y2FzZSBpIGluc3RhbmNlb2YgYS5Nb25leTp2YXIgdT1pLmdldENvaW5zKCk7dS5pc05hTigpJiZTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKSxvKHUpO2JyZWFrO2Nhc2Uic3RyaW5nIj09PXR5cGVvZiBpJiYhaTpTKGUsdC5FUlJPUl9NU0cuV1JPTkdfTlVNQkVSKTticmVhaztjYXNlIG5ldyBzLkJpZ051bWJlcihpKS5pc05hTigpOnJldHVybiBTKGUsdC5FUlJPUl9NU0cuV1I="
}