mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-18 09:35:20 +02:00
a278c2c32a
``` Release Notes 8.8.4 Re-align gantt chart dateFormat table with spaces (#1764) @AloisMahdal Docs/update edit this page (#1774) @sy-records Fixed typo in the docs (#1780) @manicki Move babel-eslint to devDependencies (#1772) @glensc Add Doscy to list of integrations (#1784) @gwatts Changed regex for multi-line state notes (#1773) @tomatoman25 Add different id generators (#1787) @julianbei Bump highlight.js from 9.18.1 to 9.18.5 (#1789) @dependabot Fixed markdown error in Relationship Syntax (#1796) @kciter remove classDiagram duplicate options (#1786) @JiChao99 Update copyright years (#1805) @BastianZim 🐛 Bug Fixes Add sans-serif to default font settings (#1776) @GDFaber ignore build files in dist folder (#1777) @GDFaber Narrow down console logging when flowchart subgraphs are added (#1782) @GDFaber Apply style settings to subgraphs in "flowchart" diagrams (#1781) @GDFaber Release Notes 8.8.3 Fix styling of links for new beta flowchart (#1730) @knsv Fix typo in pie.md (#1705) @hwine Fixing broken links and misspellings (#1727) @deining Fixed empty code examples (#1729) @Eraledm README: use stateDiagram-v2 (#1728) @alexislefebvre #1724 Adding fontawesome to edge labels (#1731) @knsv Fix broken links in gantt.md (#1703) @wontonst Replace fregante/setup-git-token with setup-git-user (#1735) @fregante Updated docs (#1739) @BastianZim 1740 nested subgraps directions (#1741) @knsv Switching to Docsify and adding search (#1746) @NeilCuzon Fixed bad tertiary operator (#1743) @lishid fix broken links in README (#1749) @levlas Release Notes 8.8.2 1704 Revert to original behavior of nodes and subgraphs (#1709) @knsv There is some ambiguity about what subgraph a node belongs to when it appears in several subgraphs. Should it stick to the first subgraph it appears in, or should the last subgraph it gets added to be the one it belongs to. With this change the original behavior is retained. ```
1 line
1.1 MiB
1 line
1.1 MiB
module.exports = `IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIGk9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPXQsbi5jPWUsbi5kPWZ1bmN0aW9uKHQsZSxyKXtuLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1uKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KW4uZChyLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIHJ9LG4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUsImEiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPSIiLG4obi5zPTM4Myl9KFtmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKTt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0saT1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcihlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fTt2YXIgYT1pKHIpLG89YS5yaWdodCxzPWEubGVmdCxjPW8sdT1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWwpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPWUoaSxpPXRbKytuXSk7cmV0dXJuIGF9O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm5bdCxlXX12YXIgaD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWwpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9LGY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0scD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1kKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1kKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9LGc9ZnVuY3Rpb24odCxlKXt2YXIgbj1wKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59LHk9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49dFtvXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sdj1BcnJheS5wcm90b3R5cGUsbT12LnNsaWNlLGI9di5tYXAseD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LF89ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGs9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytyPGk7KWFbcl09dCtyKm47cmV0dXJuIGF9LHc9TWF0aC5zcXJ0KDUwKSxFPU1hdGguc3FydCgxMCksVD1NYXRoLnNxcnQoMiksQz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1TKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiByJiZhLnJldmVyc2UoKSxhfTtmdW5jdGlvbiBTKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49dz8xMDphPj1FPzU6YT49VD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PXc/MTA6YT49RT81OmE+PVQ/MjoxKX1mdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj13P2kqPTEwOmE+PUU/aSo9NTphPj1UJiYoaSo9MiksZTx0Py1pOml9dmFyIE09ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LE89ZnVuY3Rpb24oKXt2YXIgdD1fLGU9eSxuPU07ZnVuY3Rpb24gcihyKXt2YXIgaSxhLG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyk7Zm9yKGk9MDtpPG87KytpKXNbaV09dChyW2ldLGkscik7dmFyIHU9ZShzKSxsPXVbMF0saD11WzFdLGY9bihzLGwsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9QShsLGgsZiksZj1rKE1hdGguY2VpbChsL2YpKmYsaCxmKSk7Zm9yKHZhciBkPWYubGVuZ3RoO2ZbMF08PWw7KWYuc2hpZnQoKSwtLWQ7Zm9yKDtmW2QtMV0+aDspZi5wb3AoKSwtLWQ7dmFyIHAsZz1uZXcgQXJyYXkoZCsxKTtmb3IoaT0wO2k8PWQ7KytpKShwPWdbaV09W10pLngwPWk+MD9mW2ktMV06bCxwLngxPWk8ZD9mW2ldOmg7Zm9yKGk9MDtpPG87KytpKWw8PShhPXNbaV0pJiZhPD1oJiZnW2MoZixhLDAsZCldLnB1c2gocltpXSk7cmV0dXJuIGd9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp4KGUpLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eChbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT94KG0uY2FsbCh0KSk6eCh0KSxyKTpufSxyfSxEPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1uJiYobj1kKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxOPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1iLmNhbGwodCxkKS5zb3J0KHIpLE1hdGguY2VpbCgobi1lKS8oMiooRCh0LC43NSktRCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSpnKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEw9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9LFA9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49ZCh0W2FdKSk/LS1pOm8rPW47ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPWQoZSh0W2FdLGEsdCkpKT8tLWk6bys9bjtpZihpKXJldHVybiBvL2l9LEY9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KythPGk7KWlzTmFOKG49ZCh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKG49ZChlKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIEQoby5zb3J0KHIpLC41KX0sST1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufSxqPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49dFthXSkmJnI+biYmKHI9bil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZyPm4mJihyPW4pO3JldHVybiByfSxSPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pO24tLTspcltuXT10W2Vbbl1dO3JldHVybiByfSxZPWZ1bmN0aW9uKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9cik7KythPG47KShlKGk9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9aSxvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX0sej1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksYT0obnVsbD09bj90Lmxlbmd0aDpuKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxyPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1yO3JldHVybiB0fSxVPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPHI7KShuPSt0W2ldKSYmKGErPW4pO2Vsc2UgZm9yKDsrK2k8cjspKG49K2UodFtpXSxpLHQpKSYmKGErPW4pO3JldHVybiBhfSwkPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49aih0LFcpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQubGVuZ3RofXZhciBWPWZ1bmN0aW9uKCl7cmV0dXJuICQoYXJndW1lbnRzKX0sSD1BcnJheS5wcm90b3R5cGUuc2xpY2UsRz1mdW5jdGlvbih0KXtyZXR1cm4gdH07ZnVuY3Rpb24gcSh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIFgodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBaKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gSih0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBRKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEsodCxlKXt2YXIgbj1bXSxyPW51bGwsaT1udWxsLGE9NixvPTYscz0zLGM9MT09PXR8fDQ9PT10Py0xOjEsdT00PT09dHx8Mj09PXQ/IngiOiJ5IixsPTE9PT10fHwzPT09dD9xOlg7ZnVuY3Rpb24gaChoKXt2YXIgZj1udWxsPT1yP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6cixkPW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOkc6aSxwPU1hdGgubWF4KGEsMCkrcyxnPWUucmFuZ2UoKSx5PStnWzBdKy41LHY9K2dbZy5sZW5ndGgtMV0rLjUsbT0oZS5iYW5kd2lkdGg/SjpaKShlLmNvcHkoKSksYj1oLnNlbGVjdGlvbj9oLnNlbGVjdGlvbigpOmgseD1iLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxfPWIuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZixlKS5vcmRlcigpLGs9Xy5leGl0KCksdz1fLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksRT1fLnNlbGVjdCgibGluZSIpLFQ9Xy5zZWxlY3QoInRleHQiKTt4PXgubWVyZ2UoeC5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksXz1fLm1lcmdlKHcpLEU9RS5tZXJnZSh3LmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIodSsiMiIsYyphKSksVD1ULm1lcmdlKHcuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIodSxjKnApLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGghPT1iJiYoeD14LnRyYW5zaXRpb24oaCksXz1fLnRyYW5zaXRpb24oaCksRT1FLnRyYW5zaXRpb24oaCksVD1ULnRyYW5zaXRpb24oaCksaz1rLnRyYW5zaXRpb24oaCkuYXR0cigib3BhY2l0eSIsMWUtNikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9bSh0KSk/bCh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSksdy5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBsKGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTptKHQpKX0pKSksay5yZW1vdmUoKSx4LmF0dHIoImQiLDQ9PT10fHwyPT10P28/Ik0iK2MqbysiLCIreSsiSDAuNVYiK3YrIkgiK2MqbzoiTTAuNSwiK3krIlYiK3Y6bz8iTSIreSsiLCIrYypvKyJWMC41SCIrdisiViIrYypvOiJNIit5KyIsMC41SCIrdiksXy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbChtKHQpKX0pKSxFLmF0dHIodSsiMiIsYyphKSxULmF0dHIodSxjKnApLnRleHQoZCksYi5maWx0ZXIoUSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksYi5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPW19KSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49SC5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106SC5jYWxsKHQpLGgpOm4uc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDpILmNhbGwodCksaCk6ciYmci5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW89K3QsaCk6YX0saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGgpOmF9LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxoKTpvfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGgpOnN9LGh9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIEsoMSx0KX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gSygyLHQpfWZ1bmN0aW9uIG50KHQpe3JldHVybiBLKDMsdCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIEsoNCx0KX12YXIgaXQ9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gYXQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgb3Qocil9ZnVuY3Rpb24gb3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGN0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gdXQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPWl0LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1vdC5wcm90b3R5cGU9YXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9c3QodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09dXQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT11dChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49Y3QocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgb3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBsdD1hdDtmdW5jdGlvbiBodCgpe312YXIgZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX07ZnVuY3Rpb24gZHQoKXtyZXR1cm5bXX12YXIgcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/ZHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19LHl0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfTtmdW5jdGlvbiB2dCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZ0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O2Z1bmN0aW9uIG10KHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyB2dCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24gYnQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9e30saD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT0iJCIrby5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpLHUgaW4gbD9pW3NdPWM6bFt1XT1jKTtmb3Iocz0wO3M8ZjsrK3MpKGM9bFt1PSIkIitvLmNhbGwodCxhW3NdLHMsYSldKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsW3VdPW51bGwpOm5bc109bmV3IHZ0KHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsW2Rbc11dPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIF90PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixrdD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6X3QseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSx3dD1mdW5jdGlvbih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxrdC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6a3RbZV0sbG9jYWw6dH06dH07ZnVuY3Rpb24gRXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFR0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gQ3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBTdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBBdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19dmFyIE90PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gRHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gTnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBCdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBMdCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fE90KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIFB0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBGdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gSXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24ganQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFJ0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFl0KHQpfWZ1bmN0aW9uIFl0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1qdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHp0KHQsZSl7Zm9yKHZhciBuPVJ0KHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gVXQodCxlKXtmb3IodmFyIG49UnQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiAkdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt6dCh0aGlzLHQpfX1mdW5jdGlvbiBXdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtVdCh0aGlzLHQpfX1mdW5jdGlvbiBWdCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT96dDpVdCkodGhpcyx0KX19WXQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTtmdW5jdGlvbiBIdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gWHQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBKdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIFF0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEt0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gdGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1fdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09X3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIGVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fXZhciBuZT1mdW5jdGlvbih0KXt2YXIgZT13dCh0KTtyZXR1cm4oZS5sb2NhbD9lZTp0ZSkoZSl9O2Z1bmN0aW9uIHJlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaWUoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBhZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gb2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fXZhciBzZT17fSxjZT1udWxsOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KHNlPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTtmdW5jdGlvbiB1ZSh0LGUsbil7cmV0dXJuIHQ9bGUodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBsZSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPWNlO2NlPXI7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e2NlPWl9fX1mdW5jdGlvbiBoZSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBmZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZGUodCxlLG4pe3ZhciByPXNlLmhhc093blByb3BlcnR5KHQudHlwZSk/dWU6bGU7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcyxjPXRoaXMuX19vbix1PXIoZSxhLG8pO2lmKGMpZm9yKHZhciBsPTAsaD1jLmxlbmd0aDtsPGg7KytsKWlmKChzPWNbbF0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPXUscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHUsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjp1LGNhcHR1cmU6bn0sYz9jLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gcGUodCxlLG4scil7dmFyIGk9Y2U7dC5zb3VyY2VFdmVudD1jZSxjZT10O3RyeXtyZXR1cm4gZS5hcHBseShuLHIpfWZpbmFsbHl7Y2U9aX19ZnVuY3Rpb24gZ2UodCxlLG4pe3ZhciByPU90KHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHllKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdlKHRoaXMsdCxlKX19ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2UodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIG1lPVtudWxsXTtmdW5jdGlvbiBiZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB4ZSgpe3JldHVybiBuZXcgYmUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxtZSl9YmUucHJvdG90eXBlPXhlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YmUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1mdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cHQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IGJlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtwWysrbF09dH0pKSxwO3ZhciBuLHI9ZT9idDptdCxpPXRoaXMuX3BhcmVudHMsYT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBvPWEubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXt2YXIgaD1pW2xdLGY9YVtsXSxkPWYubGVuZ3RoLHA9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyxsLGkpLGc9cC5sZW5ndGgseT1jW2xdPW5ldyBBcnJheShnKSx2PXNbbF09bmV3IEFycmF5KGcpO3IoaCxmLHksdix1W2xdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgbSxiLHg9MCxfPTA7eDxnOysreClpZihtPXlbeF0pe2Zvcih4Pj1fJiYoXz14KzEpOyEoYj12W19dKSYmKytfPGc7KTttLl9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyBiZShzLGkpKS5fZW50ZXI9YyxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHl0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgYmUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh5dCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBiZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD14dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgYmUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj13dCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/VHQ6RXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9NdDpBdDpuLmxvY2FsP1N0OkN0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0R0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0J0Ok50KSh0LGUsbnVsbD09bj8iIjpuKSk6THQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/UHQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/SXQ6RnQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49anQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9UnQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/VnQ6ZT8kdDpXdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/SHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3F0Okd0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/WHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0p0Olp0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goUXQpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goS3QpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpuZSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5lKHQpLHI9bnVsbD09ZT9yZToiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGllKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/b2U6YWUpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9aGUodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/ZGU6ZmUsbnVsbD09biYmKG49ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3ZlOnllKSh0LGUpKX19O3ZhciBfZT14ZSxrZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGJlKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgYmUoW1t0XV0sbWUpfTtmdW5jdGlvbiB3ZSgpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBFZT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LFRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49a2UodCkub24oImRyYWdzdGFydC5kcmFnIixFZSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixFZSwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9O2Z1bmN0aW9uIENlKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1rZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihyLm9uKCJjbGljay5kcmFnIixFZSwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfXZhciBTZT1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIEFlKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE1lKCl7fXZhciBPZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsRGU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEJlPS9eIyhbMC05YS1mXXszLDh9KSQvLExlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tPZSxPZSxPZV0rIlxcKSQiKSxQZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTmUsTmUsTmVdKyJcXCkkIiksRmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tPZSxPZSxPZSxEZV0rIlxcKSQiKSxJZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW05lLE5lLE5lLERlXSsiXFwpJCIpLGplPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tEZSxOZSxOZV0rIlxcKSQiKSxSZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0RlLE5lLE5lLERlXSsiXFwpJCIpLFllPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHplKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gVWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiAkZSh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1CZS5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP1dlKGUpOjM9PT1uP25ldyBxZShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/bmV3IHFlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP25ldyBxZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUxlLmV4ZWModCkpP25ldyBxZShlWzFdLGVbMl0sZVszXSwxKTooZT1QZS5leGVjKHQpKT9uZXcgcWUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9RmUuZXhlYyh0KSk/VmUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9SWUuZXhlYyh0KSk/VmUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9amUuZXhlYyh0KSk/UWUoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1SZS5leGVjKHQpKT9RZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlllLmhhc093blByb3BlcnR5KHQpP1dlKFllW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgcWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBXZSh0KXtyZXR1cm4gbmV3IHFlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBWZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IHFlKHQsZSxuLHIpfWZ1bmN0aW9uIEhlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWV8fCh0PSRlKHQpKSx0P25ldyBxZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgcWV9ZnVuY3Rpb24gR2UodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0hlKHQpOm5ldyBxZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gcWUodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFhlKCl7cmV0dXJuIiMiK0plKHRoaXMucikrSmUodGhpcy5nKStKZSh0aGlzLmIpfWZ1bmN0aW9uIFplKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gSmUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBRZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IGVuKHQsZSxuLHIpfWZ1bmN0aW9uIEtlKHQpe2lmKHQgaW5zdGFuY2VvZiBlbilyZXR1cm4gbmV3IGVuKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE1lfHwodD0kZSh0KSksIXQpcmV0dXJuIG5ldyBlbjtpZih0IGluc3RhbmNlb2YgZW4pcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBlbihvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHRuKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9LZSh0KTpuZXcgZW4odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGVuKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBubih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gcm4odCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn1TZShNZSwkZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp6ZSxmb3JtYXRIZXg6emUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6VWUsdG9TdHJpbmc6VWV9KSxTZShxZSxHZSxBZShNZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHFlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBxZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlhlLGZvcm1hdEhleDpYZSxmb3JtYXRSZ2I6WmUsdG9TdHJpbmc6WmV9KSksU2UoZW4sdG4sQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IHFlKG5uKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLG5uKHQsaSxyKSxubih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBhbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gcm4oKG4tci9lKSplLG8saSxhLHMpfX0sb249ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBybigobi1yL2UpKmUsaSxhLG8scyl9fSxzbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIGNuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gdW4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/Y24odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOnNuKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbG4odCl7cmV0dXJuIDE9PSh0PSt0KT9objpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOnNuKGlzTmFOKGUpP246ZSl9fWZ1bmN0aW9uIGhuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2NuKHQsbik6c24oaXNOYU4odCk/ZTp0KX12YXIgZm49ZnVuY3Rpb24gdChlKXt2YXIgbj1sbihlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1HZSh0KSkuciwoZT1HZShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPWhuKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBkbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPUdlKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fXZhciBwbj1kbihhbiksZ249ZG4ob24pLHluPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fTtmdW5jdGlvbiB2bih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIG1uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHZuKGUpP3luOmJuKSh0LGUpfTtmdW5jdGlvbiBibih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPUFuKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319dmFyIHhuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQqKDEtcikrZSpyKSxufX0sX249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19LGtuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1Bbih0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fSx3bj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csRW49bmV3IFJlZ0V4cCh3bi5zb3VyY2UsImciKTt2YXIgVG4sQ24sU249ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT13bi5sYXN0SW5kZXg9RW4ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPXduLmV4ZWModCkpJiYocj1Fbi5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6X24obixyKX0pKSxhPUVuLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LEFuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9zbihlKTooIm51bWJlciI9PT1yP19uOiJzdHJpbmciPT09cj8obj0kZShlKSk/KGU9bixmbik6U246ZSBpbnN0YW5jZW9mICRlP2ZuOmUgaW5zdGFuY2VvZiBEYXRlP3huOnZuKGUpP3luOkFycmF5LmlzQXJyYXkoZSk/Ym46ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP2tuOl9uKSh0LGUpfSxNbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPWNlO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfSxPbj1mdW5jdGlvbih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PWUuY2xpZW50WCxyLnk9ZS5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfSxEbj1mdW5jdGlvbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9TW4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBPbih0LHIpO3JldHVybiBudWxsfSxObj1mdW5jdGlvbih0KXt2YXIgZT1NbigpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxPbih0LGUpfSxCbj0wLExuPTAsUG49MCxGbj0wLEluPTAsam49MCxSbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxZbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiB6bigpe3JldHVybiBJbnx8KFluKFVuKSxJbj1Sbi5ub3coKStqbil9ZnVuY3Rpb24gVW4oKXtJbj0wfWZ1bmN0aW9uICRuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBXbih0LGUsbil7dmFyIHI9bmV3ICRuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gVm4oKXt6bigpLCsrQm47Zm9yKHZhciB0LGU9VG47ZTspKHQ9SW4tZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUJufWZ1bmN0aW9uIEhuKCl7SW49KEZuPVJuLm5vdygpKStqbixCbj1Mbj0wO3RyeXtWbigpfWZpbmFsbHl7Qm49MCxmdW5jdGlvbigpe3ZhciB0LGUsbj1UbixyPTEvMDtmb3IoO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpUbj1lKTtDbj10LHFuKHIpfSgpLEluPTB9fWZ1bmN0aW9uIEduKCl7dmFyIHQ9Um4ubm93KCksZT10LUZuO2U+MWUzJiYoam4tPWUsRm49dCl9ZnVuY3Rpb24gcW4odCl7Qm58fChMbiYmKExuPWNsZWFyVGltZW91dChMbikpLHQtSW4+MjQ/KHQ8MS8wJiYoTG49c2V0VGltZW91dChIbix0LVJuLm5vdygpLWpuKSksUG4mJihQbj1jbGVhckludGVydmFsKFBuKSkpOihQbnx8KEZuPVJuLm5vdygpLFBuPXNldEludGVydmFsKEduLDFlMykpLEJuPTEsWW4oSG4pKSl9JG4ucHJvdG90eXBlPVduLnByb3RvdHlwZT17Y29uc3RydWN0b3I6JG4scmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP3puKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fENuPT09dGhpc3x8KENuP0NuLl9uZXh0PXRoaXM6VG49dGhpcyxDbj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLHFuKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHFuKCkpfX07dmFyIFhuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG47cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfSxabj1sdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxKbj1bXSxRbj1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gWG4oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihYbigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1XbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpabix0d2VlbjpKbix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9O2Z1bmN0aW9uIEtuKHQsZSl7dmFyIG49ZXIodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB0cih0LGUpe3ZhciBuPWVyKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGVyKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59dmFyIG5yLHJyLGlyLGFyLG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LHNyPTE4MC9NYXRoLlBJLGNyPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LHVyPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKnNyLHNrZXdYOk1hdGguYXRhbihjKSpzcixzY2FsZVg6byxzY2FsZVk6c319O2Z1bmN0aW9uIGxyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6X24odCxpKX0se2k6Yy0yLHg6X24ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4Ol9uKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4Ol9uKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4Ol9uKHQsbil9LHtpOnMtMix4Ol9uKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGhyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P2NyOihucnx8KG5yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHJyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpcj1kb2N1bWVudC5kZWZhdWx0VmlldyksbnIuc3R5bGUudHJhbnNmb3JtPXQsdD1pci5nZXRDb21wdXRlZFN0eWxlKHJyLmFwcGVuZENoaWxkKG5yKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxyci5yZW1vdmVDaGlsZChuciksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksdXIoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLGZyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9jcjooYXJ8fChhcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxhci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9YXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsdXIodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpjcil9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIGRyKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10cih0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIHByKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10cih0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiBncih0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10cih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LHIpLnZhbHVlW2VdfX12YXIgeXI9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP19uOmUgaW5zdGFuY2VvZiAkZT9mbjoobj0kZShlKSk/KGU9bixmbik6U24pKHQsZSl9O2Z1bmN0aW9uIHZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBtcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGJyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHhyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBfcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHdyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBFcih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFRyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmRXIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIENyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmd3IodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7S24odGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEFyKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtLbih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt0cih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIERyKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3RyKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBOcih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/S246dHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIEJyPV9lLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBMcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBQcih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gRnIodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJlByKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIElyKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBqcih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZJcihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBScj0wO2Z1bmN0aW9uIFlyKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiB6cih0KXtyZXR1cm4gX2UoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIFVyKCl7cmV0dXJuKytScn12YXIgJHI9X2UucHJvdG90eXBlO2Z1bmN0aW9uIFdyKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBWcih0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gSHIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9WXIucHJvdG90eXBlPXpyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZnQodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxRbihoW2ZdLGUsbixmLGgsZXIocyxuKSkpO3JldHVybiBuZXcgWXIoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXB0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPWVyKGMsbiksZz0wLHk9ZC5sZW5ndGg7Zzx5OysrZykoZj1kW2ddKSYmUW4oZixlLG4sZyxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyBZcihhLG8sZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgWXIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aCxhPU1hdGgubWluKHIsaSksbz1uZXcgQXJyYXkocikscz0wO3M8YTsrK3MpZm9yKHZhciBjLHU9ZVtzXSxsPW5bc10saD11Lmxlbmd0aCxmPW9bc109bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKShjPXVbZF18fGxbZF0pJiYoZltkXT1jKTtmb3IoO3M8cjsrK3Mpb1tzXT1lW3NdO3JldHVybiBuZXcgWXIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJyKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1VcigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKG89c1t1XSl7dmFyIGw9ZXIobyxlKTtRbihvLHQsbix1LHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOiRyLmNhbGwsbm9kZXM6JHIubm9kZXMsbm9kZTokci5ub2RlLHNpemU6JHIuc2l6ZSxlbXB0eTokci5lbXB0eSxlYWNoOiRyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2VyKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChOcihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49d3QodCkscj0idHJhbnNmb3JtIj09PW4/ZnI6eXI7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/a3I6X3IpKG4scixncih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9tcjp2cikobik6KG4ubG9jYWw/eHI6YnIpKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9d3QodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9UcjpDcikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9ocjp5cjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1MdCh0aGlzLHQpLG89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksTHQodGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsTHIodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9THQodGhpcyx0KSksbz09PWM/bnVsbDpvPT09ciYmYz09PWk/YTooaT1jLGE9ZShyPW8scykpfX0odCxyLGdyKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvPSJzdHlsZS4iK2Uscz0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz10cih0aGlzLHQpLHU9Yy5vbixsPW51bGw9PWMudmFsdWVbb10/YXx8KGE9THIoZSkpOnZvaWQgMDt1PT09biYmaT09PWx8fChyPShuPXUpLmNvcHkoKSkub24ocyxpPWwpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsRnIodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oZ3IodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLGpyKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1lcih0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZHI6cHIpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/U3I6QXIpKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P01yOk9yKShlLHQpKTplcih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goRHIoZSx0KSk6ZXIodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj10cih0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSl9KSl9fTt2YXIgR3I9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOkhyfTtmdW5jdGlvbiBxcih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBHci50aW1lPXpuKCksR3I7cmV0dXJuIG59X2UucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe29yKHRoaXMsdCl9KSl9LF9lLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIFlyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9VXIoKSwobj1HcikudGltZT16bigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJlFuKG8sdCxlLHUscyxufHxxcihvLGUpKTtyZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgWHI9W251bGxdLFpyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBZcihbW3RdXSxYcixlLCtyKTtyZXR1cm4gbnVsbH0sSnI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxRcj1mdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlbGVjdGlvbj1ufTtmdW5jdGlvbiBLcigpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB0aT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGVpPXtuYW1lOiJkcmFnIn0sbmk9e25hbWU6InNwYWNlIn0scmk9e25hbWU6ImhhbmRsZSJ9LGlpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBhaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIG9pKHQpe3JldHVyblthaSh0WzBdKSxhaSh0WzFdKV19ZnVuY3Rpb24gc2kodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBEbihlLGNlLnRvdWNoZXMsdCl9fXZhciBjaT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKHlpKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sdWk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcCh5aSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGxpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcCh5aSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpvaSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0saGk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGZpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0scGk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sZ2k9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24geWkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gdmkoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBtaSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHhpKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gX2kodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBraSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIHdpKCl7cmV0dXJuIENpKGNpKX1mdW5jdGlvbiBFaSgpe3JldHVybiBDaSh1aSl9dmFyIFRpPWZ1bmN0aW9uKCl7cmV0dXJuIENpKGxpKX07ZnVuY3Rpb24gQ2kodCl7dmFyIGUsbj1taSxyPXZpLGk9YmksYT0hMCxvPWx0KCJzdGFydCIsImJydXNoIiwiZW5kIikscz02O2Z1bmN0aW9uIGMoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIsZykuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW3lpKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9eGkodGhpcykuZXh0ZW50O2tlKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW3lpKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGhpLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciByPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBoaVt0LnR5cGVdfSkpLGUuZWFjaCh1KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixkKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHApLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB1KCl7dmFyIHQ9a2UodGhpcyksZT14aSh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLXMvMjplWzBdWzBdLXMvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tcy8yOmVbMF1bMV0tcy8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK3M6c30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rczpzfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gbCh0LGUsbil7cmV0dXJuIW4mJnQuX19icnVzaC5lbWl0dGVyfHxuZXcgaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGYoKXtpZigoIWV8fGNlLnRvdWNoZXMpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4saSxvLHMsYyxoLGYsZCxwLGcseSx2PXRoaXMsbT1jZS50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGEmJmNlLm1ldGFLZXk/bT0ib3ZlcmxheSI6bSk/ZWk6YSYmY2UuYWx0S2V5P2lpOnJpLHg9dD09PXVpP251bGw6cGlbbV0sXz10PT09Y2k/bnVsbDpnaVttXSxrPXhpKHYpLHc9ay5leHRlbnQsRT1rLnNlbGVjdGlvbixUPXdbMF1bMF0sQz13WzBdWzFdLFM9d1sxXVswXSxBPXdbMV1bMV0sTT0wLE89MCxEPXgmJl8mJmEmJmNlLnNoaWZ0S2V5LE49Y2UudG91Y2hlcz9zaShjZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTpObixCPU4odiksTD1CLFA9bCh2LGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT1tPyhFJiYocD0hMCksay5zZWxlY3Rpb249RT1bW249dD09PXVpP1Q6QlswXSxvPXQ9PT1jaT9DOkJbMV1dLFtjPXQ9PT11aT9TOm4sZj10PT09Y2k/QTpvXV0pOihuPUVbMF1bMF0sbz1FWzBdWzFdLGM9RVsxXVswXSxmPUVbMV1bMV0pLGk9bixzPW8saD1jLGQ9Zjt2YXIgRj1rZSh2KS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxJPUYuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsaGlbbV0pO2lmKGNlLnRvdWNoZXMpUC5tb3ZlZD1SLFAuZW5kZWQ9ejtlbHNle3ZhciBqPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLFIsITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZqLm9uKCJrZXlkb3duLmJydXNoIixVLCEwKS5vbigia2V5dXAuYnJ1c2giLCQsITApLFRlKGNlLnZpZXcpfUtyKCksb3IodiksdS5jYWxsKHYpLFAuc3RhcnQoKX1mdW5jdGlvbiBSKCl7dmFyIHQ9Tih2KTshRHx8Z3x8eXx8KE1hdGguYWJzKHRbMF0tTFswXSk+TWF0aC5hYnModFsxXS1MWzFdKT95PSEwOmc9ITApLEw9dCxwPSEwLHRpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2goTT1MWzBdLUJbMF0sTz1MWzFdLUJbMV0sYil7Y2FzZSBuaTpjYXNlIGVpOngmJihNPU1hdGgubWF4KFQtbixNYXRoLm1pbihTLWMsTSkpLGk9bitNLGg9YytNKSxfJiYoTz1NYXRoLm1heChDLW8sTWF0aC5taW4oQS1mLE8pKSxzPW8rTyxkPWYrTyk7YnJlYWs7Y2FzZSByaTp4PDA/KE09TWF0aC5tYXgoVC1uLE1hdGgubWluKFMtbixNKSksaT1uK00saD1jKTp4PjAmJihNPU1hdGgubWF4KFQtYyxNYXRoLm1pbihTLWMsTSkpLGk9bixoPWMrTSksXzwwPyhPPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLW8sTykpLHM9bytPLGQ9Zik6Xz4wJiYoTz1NYXRoLm1heChDLWYsTWF0aC5taW4oQS1mLE8pKSxzPW8sZD1mK08pO2JyZWFrO2Nhc2UgaWk6eCYmKGk9TWF0aC5tYXgoVCxNYXRoLm1pbihTLG4tTSp4KSksaD1NYXRoLm1heChULE1hdGgubWluKFMsYytNKngpKSksXyYmKHM9TWF0aC5tYXgoQyxNYXRoLm1pbihBLG8tTypfKSksZD1NYXRoLm1heChDLE1hdGgubWluKEEsZitPKl8pKSl9aDxpJiYoeCo9LTEsdD1uLG49YyxjPXQsdD1pLGk9aCxoPXQsbSBpbiBmaSYmSS5hdHRyKCJjdXJzb3IiLGhpW209ZmlbbV1dKSksZDxzJiYoXyo9LTEsdD1vLG89ZixmPXQsdD1zLHM9ZCxkPXQsbSBpbiBkaSYmSS5hdHRyKCJjdXJzb3IiLGhpW209ZGlbbV1dKSksay5zZWxlY3Rpb24mJihFPWsuc2VsZWN0aW9uKSxnJiYoaT1FWzBdWzBdLGg9RVsxXVswXSkseSYmKHM9RVswXVsxXSxkPUVbMV1bMV0pLEVbMF1bMF09PT1pJiZFWzBdWzFdPT09cyYmRVsxXVswXT09PWgmJkVbMV1bMV09PT1kfHwoay5zZWxlY3Rpb249W1tpLHNdLFtoLGRdXSx1LmNhbGwodiksUC5icnVzaCgpKX1mdW5jdGlvbiB6KCl7aWYoS3IoKSxjZS50b3VjaGVzKXtpZihjZS50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApfWVsc2UgQ2UoY2UudmlldyxwKSxqLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtGLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksSS5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLGsuc2VsZWN0aW9uJiYoRT1rLnNlbGVjdGlvbiksX2koRSkmJihrLnNlbGVjdGlvbj1udWxsLHUuY2FsbCh2KSksUC5lbmQoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKGNlLmtleUNvZGUpe2Nhc2UgMTY6RD14JiZfO2JyZWFrO2Nhc2UgMTg6Yj09PXJpJiYoeCYmKGM9aC1NKngsbj1pK00qeCksXyYmKGY9ZC1PKl8sbz1zK08qXyksYj1paSxZKCkpO2JyZWFrO2Nhc2UgMzI6YiE9PXJpJiZiIT09aWl8fCh4PDA/Yz1oLU06eD4wJiYobj1pLU0pLF88MD9mPWQtTzpfPjAmJihvPXMtTyksYj1uaSxJLmF0dHIoImN1cnNvciIsaGkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXRpKCl9ZnVuY3Rpb24gJCgpe3N3aXRjaChjZS5rZXlDb2RlKXtjYXNlIDE2OkQmJihnPXk9RD0hMSxZKCkpO2JyZWFrO2Nhc2UgMTg6Yj09PWlpJiYoeDwwP2M9aDp4PjAmJihuPWkpLF88MD9mPWQ6Xz4wJiYobz1zKSxiPXJpLFkoKSk7YnJlYWs7Y2FzZSAzMjpiPT09bmkmJihjZS5hbHRLZXk/KHgmJihjPWgtTSp4LG49aStNKngpLF8mJihmPWQtTypfLG89cytPKl8pLGI9aWkpOih4PDA/Yz1oOng+MCYmKG49aSksXzwwP2Y9ZDpfPjAmJihvPXMpLGI9cmkpLEkuYXR0cigiY3Vyc29yIixoaVttXSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn10aSgpfX1mdW5jdGlvbiBkKCl7bCh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBwKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD1vaShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1lLl9fYnJ1c2gsaT1sKGUsYXJndW1lbnRzKSxhPXIuc2VsZWN0aW9uLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLHIuZXh0ZW50KSxzPUFuKGEsbyk7ZnVuY3Rpb24gYyh0KXtyLnNlbGVjdGlvbj0xPT09dCYmbnVsbD09PW8/bnVsbDpzKHQpLHUuY2FsbChlKSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09bz9jOmMoMSl9KSk6ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHMsaT1lLl9fYnJ1c2gsYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuLGkuZXh0ZW50KSxvPWwoZSxyKS5iZWZvcmVzdGFydCgpO29yKGUpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSx1LmNhbGwoZSksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7cGUobmV3IFFyKGMsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpyKG9pKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpyKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKcighIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIFNpPU1hdGguY29zLEFpPU1hdGguc2luLE1pPU1hdGguUEksT2k9TWkvMixEaT0yKk1pLE5pPU1hdGgubWF4O2Z1bmN0aW9uIEJpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19dmFyIExpPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPW51bGwsbj1udWxsLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBhLG8scyxjLHUsbCxoPWkubGVuZ3RoLGY9W10sZD1rKGgpLHA9W10sZz1bXSx5PWcuZ3JvdXBzPW5ldyBBcnJheShoKSx2PW5ldyBBcnJheShoKmgpO2ZvcihhPTAsdT0tMTsrK3U8aDspe2ZvcihvPTAsbD0tMTsrK2w8aDspbys9aVt1XVtsXTtmLnB1c2gobykscC5wdXNoKGsoaCkpLGErPW99Zm9yKGUmJmQuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShmW3RdLGZbbl0pfSkpLG4mJnAuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIG4oaVtlXVt0XSxpW2VdW3JdKX0pKX0pKSxjPShhPU5pKDAsRGktdCpoKS9hKT90OkRpL2gsbz0wLHU9LTE7Kyt1PGg7KXtmb3Iocz1vLGw9LTE7KytsPGg7KXt2YXIgbT1kW3VdLGI9cFttXVtsXSx4PWlbbV1bYl0sXz1vLHc9bys9eCphO3ZbYipoK21dPXtpbmRleDptLHN1YmluZGV4OmIsc3RhcnRBbmdsZTpfLGVuZEFuZ2xlOncsdmFsdWU6eH19eVttXT17aW5kZXg6bSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6byx2YWx1ZTpmW21dfSxvKz1jfWZvcih1PS0xOysrdTxoOylmb3IobD11LTE7KytsPGg7KXt2YXIgRT12W2wqaCt1XSxUPXZbdSpoK2xdOyhFLnZhbHVlfHxULnZhbHVlKSYmZy5wdXNoKEUudmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0OkV9Ontzb3VyY2U6RSx0YXJnZXQ6VH0pfXJldHVybiByP2cuc29ydChyKTpnfXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU5pKDAsZSksaSk6dH0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaSk6ZX0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bnVsbDoocj1CaSh0KSkuXz10LGkpOnImJnIuX30saX0sUGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLEZpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sSWk9TWF0aC5QSSxqaT0yKklpLFJpPWppLTFlLTY7ZnVuY3Rpb24gWWkoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB6aSgpe3JldHVybiBuZXcgWWl9WWkucHJvdG90eXBlPXppLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WWksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dD0rdCxlPStlLG49K24scj0rcixpPStpO3ZhciBhPXRoaXMuX3gxLG89dGhpcy5feTEscz1uLXQsYz1yLWUsdT1hLXQsbD1vLWUsaD11KnUrbCpsO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMobCpzLWMqdSk+MWUtNiYmaSl7dmFyIGY9bi1hLGQ9ci1vLHA9cypzK2MqYyxnPWYqZitkKmQseT1NYXRoLnNxcnQocCksdj1NYXRoLnNxcnQoaCksbT1pKk1hdGgudGFuKChJaS1NYXRoLmFjb3MoKHAraC1nKS8oMip5KnYpKSkvMiksYj1tL3YseD1tL3k7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYip1KSsiLCIrKGUrYipsKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGwqZj51KmQpKyIsIisodGhpcy5feDE9dCt4KnMpKyIsIisodGhpcy5feTE9ZSt4KmMpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZTt9LGFyYzpmdW5jdGlvbih0LGUsbixyLGksYSl7dD0rdCxlPStlLGE9ISFhO3ZhciBvPShuPStuKSpNYXRoLmNvcyhyKSxzPW4qTWF0aC5zaW4ociksYz10K28sdT1lK3MsbD0xXmEsaD1hP3ItaTppLXI7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitjKyIsIit1OihNYXRoLmFicyh0aGlzLl94MS1jKT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS11KT4xZS02KSYmKHRoaXMuXys9IkwiK2MrIiwiK3UpLG4mJihoPDAmJihoPWglamkramkpLGg+Umk/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0LW8pKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPXUpOmg+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoaD49SWkpKyIsIitsKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgVWk9emk7ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIFdpKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gSGkodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBHaSh0KXtyZXR1cm4gdC5lbmRBbmdsZX12YXIgcWk9ZnVuY3Rpb24oKXt2YXIgdD0kaSxlPVdpLG49Vmkscj1IaSxpPUdpLGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1QaS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMscyksdT1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGg9ci5hcHBseSh0aGlzLHMpLU9pLGY9aS5hcHBseSh0aGlzLHMpLU9pLGQ9bCpTaShoKSxwPWwqQWkoaCksZz0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLHk9ci5hcHBseSh0aGlzLHMpLU9pLHY9aS5hcHBseSh0aGlzLHMpLU9pO2lmKGF8fChhPW89VWkoKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAsbCxoLGYpLGg9PT15JiZmPT09dnx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAsZypTaSh5KSxnKkFpKHkpKSxhLmFyYygwLDAsZyx5LHYpKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGaSgrdCksbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGaSgrdCksbyk6aX0sby5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfTtmdW5jdGlvbiBYaSgpe31mdW5jdGlvbiBaaSh0LGUpe3ZhciBuPW5ldyBYaTtpZih0IGluc3RhbmNlb2YgWGkpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLGE9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxhOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspbi5zZXQoZShyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBvIGluIHQpbi5zZXQobyx0W29dKTtyZXR1cm4gbn1YaS5wcm90b3R5cGU9WmkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYaSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgSmk9WmksUWk9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj1bXSxpPVtdO2Z1bmN0aW9uIGEobixpLG8scyl7aWYoaT49ci5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIGMsdSxsLGg9LTEsZj1uLmxlbmd0aCxkPXJbaSsrXSxwPUppKCksZz1vKCk7KytoPGY7KShsPXAuZ2V0KGM9ZCh1PW5baF0pKyIiKSk/bC5wdXNoKHUpOnAuc2V0KGMsW3VdKTtyZXR1cm4gcC5lYWNoKChmdW5jdGlvbih0LGUpe3MoZyxlLGEodCxpLG8scykpfSkpLGd9cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsS2ksdGEpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCwwLGVhLG5hKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChuLGEpe2lmKCsrYT5yLmxlbmd0aClyZXR1cm4gbjt2YXIgbyxzPWlbYS0xXTtyZXR1cm4gbnVsbCE9ZSYmYT49ci5sZW5ndGg/bz1uLmVudHJpZXMoKToobz1bXSxuLmVhY2goKGZ1bmN0aW9uKGUsbil7by5wdXNoKHtrZXk6bix2YWx1ZXM6dChlLGEpfSl9KSkpLG51bGwhPXM/by5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzKHQua2V5LGUua2V5KX0pKTpvfShhKHQsMCxlYSxuYSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX07ZnVuY3Rpb24gS2koKXtyZXR1cm57fX1mdW5jdGlvbiB0YSh0LGUsbil7dFtlXT1ufWZ1bmN0aW9uIGVhKCl7cmV0dXJuIEppKCl9ZnVuY3Rpb24gbmEodCxlLG4pe3Quc2V0KGUsbil9ZnVuY3Rpb24gcmEoKXt9dmFyIGlhPUppLnByb3RvdHlwZTtmdW5jdGlvbiBhYSh0LGUpe3ZhciBuPW5ldyByYTtpZih0IGluc3RhbmNlb2YgcmEpdC5lYWNoKChmdW5jdGlvbih0KXtuLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciByPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxpOyluLmFkZCh0W3JdKTtlbHNlIGZvcig7KytyPGk7KW4uYWRkKGUodFtyXSxyLHQpKX1yZXR1cm4gbn1yYS5wcm90b3R5cGU9YWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyYSxoYXM6aWEuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6aWEucmVtb3ZlLGNsZWFyOmlhLmNsZWFyLHZhbHVlczppYS5rZXlzLHNpemU6aWEuc2l6ZSxlbXB0eTppYS5lbXB0eSxlYWNoOmlhLmVhY2h9O3ZhciBvYT1hYSxzYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9LGNhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh0W25dKTtyZXR1cm4gZX0sdWE9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LGxhPU1hdGguUEkvMTgwLGhhPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIGZhKHQpe2lmKHQgaW5zdGFuY2VvZiBnYSlyZXR1cm4gbmV3IGdhKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBFYSh0KTt0IGluc3RhbmNlb2YgcWV8fCh0PUhlKHQpKTt2YXIgZSxuLHI9YmEodC5yKSxpPWJhKHQuZyksYT1iYSh0LmIpLG89eWEoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPXlhKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvLjk2NDIyKSxuPXlhKCguMDEzOTMyMipyKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkvLjgyNTIxKSksbmV3IGdhKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBkYSh0LGUpe3JldHVybiBuZXcgZ2EodCwwLDAsbnVsbD09ZT8xOmUpfWZ1bmN0aW9uIHBhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mYSh0KTpuZXcgZ2EodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGdhKHQsZSxuLHIpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiB5YSh0KXtyZXR1cm4gdD42LzI5Kig2LzI5KSooNi8yOSk/TWF0aC5wb3codCwxLzMpOnQvKDYvMjkqMyooNi8yOSkpKzQvMjl9ZnVuY3Rpb24gdmEodCl7cmV0dXJuIHQ+Ni8yOT90KnQqdDo2LzI5KjMqKDYvMjkpKih0LTQvMjkpfWZ1bmN0aW9uIG1hKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYmEodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24geGEodCl7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBuZXcgd2EodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZ2F8fCh0PWZhKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgd2EoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqaGE7cmV0dXJuIG5ldyB3YShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBfYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKG4sZSx0LG51bGw9PXI/MTpyKX1mdW5jdGlvbiBrYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB3YSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gRWEodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IGdhKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqbGE7cmV0dXJuIG5ldyBnYSh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfVNlKGdhLHBhLEFlKE1lLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGdhKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2EodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHFlKG1hKDMuMTMzODU2MSooZT0uOTY0MjIqdmEoZSkpLTEuNjE2ODY2NyoodD0xKnZhKHQpKS0uNDkwNjE0Nioobj0uODI1MjEqdmEobikpKSxtYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLG1hKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksU2Uod2Esa2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2EodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3YSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBFYSh0aGlzKS5yZ2IoKX19KSk7dmFyIFRhPS0uMjkyMjcsQ2E9LTEuNzg4NDUwMzgwNixTYT0zLjUxNzI5ODI0MzgsQWE9LS42NTU3NjM2NjY3OTk5OTk5O2Z1bmN0aW9uIE1hKHQpe2lmKHQgaW5zdGFuY2VvZiBEYSlyZXR1cm4gbmV3IERhKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHFlfHwodD1IZSh0KSk7dmFyIGU9dC5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9KEFhKnIrQ2EqZS1TYSpuKS8oQWErQ2EtU2EpLGE9ci1pLG89KDEuOTcyOTQqKG4taSktVGEqYSkvLS45MDY0OSxzPU1hdGguc3FydChvKm8rYSphKS8oMS45NzI5NCppKigxLWkpKSxjPXM/TWF0aC5hdGFuMihvLGEpKmhhLTEyMDpOYU47cmV0dXJuIG5ldyBEYShjPDA/YyszNjA6YyxzLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBPYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TWEodCk6bmV3IERhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBEYSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9U2UoRGEsT2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBEYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBEYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbGEsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IHFlKDI1NSooZStuKigtLjE0ODYxKnIrMS43ODI3NyppKSksMjU1KihlK24qKFRhKnIrLS45MDY0OSppKSksMjU1KihlK24qKDEuOTcyOTQqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBOYT1BcnJheS5wcm90b3R5cGUuc2xpY2UsQmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxMYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYobj1GYSh0LGVbcl0pKXJldHVybiBuO3JldHVybiAwfTtmdW5jdGlvbiBGYSh0LGUpe2Zvcih2YXIgbj1lWzBdLHI9ZVsxXSxpPS0xLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGM9dFthXSx1PWNbMF0sbD1jWzFdLGg9dFtzXSxmPWhbMF0sZD1oWzFdO2lmKElhKGMsaCxlKSlyZXR1cm4gMDtsPnIhPWQ+ciYmbjwoZi11KSooci1sKS8oZC1sKSt1JiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gSWEodCxlLG4pe3ZhciByLGksYSxvO3JldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk9PShuWzBdLXRbMF0pKihlWzFdLXRbMV0pfSh0LGUsbikmJihpPXRbcj0rKHRbMF09PT1lWzBdKV0sYT1uW3JdLG89ZVtyXSxpPD1hJiZhPD1vfHxvPD1hJiZhPD1pKX12YXIgamE9ZnVuY3Rpb24oKXt9LFJhPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV0sWWE9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPU0scj1zO2Z1bmN0aW9uIGkodCl7dmFyIGU9bih0KTtpZihBcnJheS5pc0FycmF5KGUpKWU9ZS5zbGljZSgpLnNvcnQoQmEpO2Vsc2V7dmFyIHI9eSh0KSxpPXJbMF0sbz1yWzFdO2U9QShpLG8sZSksZT1rKE1hdGguZmxvb3IoaS9lKSplLE1hdGguZmxvb3Ioby9lKSplLGUpfXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlKX0pKX1mdW5jdGlvbiBhKG4saSl7dmFyIGE9W10scz1bXTtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3ZhciBhLHMsYyx1LGwsaCxmPW5ldyBBcnJheSxkPW5ldyBBcnJheTthPXM9LTEsdT1uWzBdPj1yLFJhW3U8PDFdLmZvckVhY2gocCk7Zm9yKDsrK2E8dC0xOyljPXUsdT1uW2ErMV0+PXIsUmFbY3x1PDwxXS5mb3JFYWNoKHApO1JhW3U8PDBdLmZvckVhY2gocCk7Zm9yKDsrK3M8ZS0xOyl7Zm9yKGE9LTEsdT1uW3MqdCt0XT49cixsPW5bcyp0XT49cixSYVt1PDwxfGw8PDJdLmZvckVhY2gocCk7KythPHQtMTspYz11LHU9bltzKnQrdCthKzFdPj1yLGg9bCxsPW5bcyp0K2ErMV0+PXIsUmFbY3x1PDwxfGw8PDJ8aDw8M10uZm9yRWFjaChwKTtSYVt1fGw8PDNdLmZvckVhY2gocCl9YT0tMSxsPW5bcyp0XT49cixSYVtsPDwyXS5mb3JFYWNoKHApO2Zvcig7KythPHQtMTspaD1sLGw9bltzKnQrYSsxXT49cixSYVtsPDwyfGg8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgZSxuLHI9W3RbMF1bMF0rYSx0WzBdWzFdK3NdLGM9W3RbMV1bMF0rYSx0WzFdWzFdK3NdLHU9byhyKSxsPW8oYyk7KGU9ZFt1XSk/KG49ZltsXSk/KGRlbGV0ZSBkW2UuZW5kXSxkZWxldGUgZltuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2goYyksaShlLnJpbmcpKTpmW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgZFtlLmVuZF0sZS5yaW5nLnB1c2goYyksZFtlLmVuZD1sXT1lKTooZT1mW2xdKT8obj1kW3VdKT8oZGVsZXRlIGZbZS5zdGFydF0sZGVsZXRlIGRbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBmW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KHIpLGZbZS5zdGFydD11XT1lKTpmW3VdPWRbbF09e3N0YXJ0OnUsZW5kOmwscmluZzpbcixjXX19UmFbbDw8M10uZm9yRWFjaChwKX0obixpLChmdW5jdGlvbih0KXtyKHQsbixpKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLHI9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KXIrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiByfSh0KT4wP2EucHVzaChbdF0pOnMucHVzaCh0KX0pKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj1hLmxlbmd0aDtuPHI7KytuKWlmKC0xIT09UGEoKGU9YVtuXSlbMF0sdCkpcmV0dXJuIHZvaWQgZS5wdXNoKHQpfSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6YX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHQrMSkqNH1mdW5jdGlvbiBzKG4scixpKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhLG89blswXSxzPW5bMV0sYz0wfG8sdT0wfHMsbD1yW3UqdCtjXTtvPjAmJm88dCYmYz09PW8mJihhPXJbdSp0K2MtMV0sblswXT1vKyhpLWEpLyhsLWEpLS41KSxzPjAmJnM8ZSYmdT09PXMmJihhPXJbKHUtMSkqdCtjXSxuWzFdPXMrKGktYSkvKGwtYSktLjUpfSkpfXJldHVybiBpLmNvbnRvdXI9YSxpLnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3QsZV07dmFyIHI9TWF0aC5jZWlsKG5bMF0pLGE9TWF0aC5jZWlsKG5bMV0pO2lmKCEocj4wJiZhPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPWEsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9MYShOYS5jYWxsKHQpKTpMYSh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6amEsaSk6cj09PXN9LGl9O2Z1bmN0aW9uIHphKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288aTsrK28pZm9yKHZhciBzPTAsYz0wO3M8cituOysrcylzPHImJihjKz10LmRhdGFbcytvKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtzLWErbypyXSksZS5kYXRhW3MtbitvKnJdPWMvTWF0aC5taW4ocysxLHItMSthLXMsYSkpfWZ1bmN0aW9uIFVhKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288cjsrK28pZm9yKHZhciBzPTAsYz0wO3M8aStuOysrcylzPGkmJihjKz10LmRhdGFbbytzKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtvKyhzLWEpKnJdKSxlLmRhdGFbbysocy1uKSpyXT1jL01hdGgubWluKHMrMSxpLTErYS1zLGEpKX1mdW5jdGlvbiAkYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBXYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBWYSgpe3JldHVybiAxfXZhciBIYT1mdW5jdGlvbigpe3ZhciB0PSRhLGU9V2Esbj1WYSxyPTk2MCxpPTUwMCxhPTIwLG89MixzPTMqYSxjPXIrMipzPj5vLHU9aSsyKnM+Pm8sbD1MYSgyMCk7ZnVuY3Rpb24gaChyKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KGMqdSksaD1uZXcgRmxvYXQzMkFycmF5KGMqdSk7ci5mb3JFYWNoKChmdW5jdGlvbihyLGEsbCl7dmFyIGg9K3QocixhLGwpK3M+Pm8sZj0rZShyLGEsbCkrcz4+byxkPStuKHIsYSxsKTtoPj0wJiZoPGMmJmY+PTAmJmY8dSYmKGlbaCtmKmNdKz1kKX0pKSx6YSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksVWEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pLHphKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSxVYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byksemEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLFVhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKTt2YXIgZD1sKGkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgcD1MKGkpO2Q9QSgwLHAsZCksKGQ9aygwLE1hdGguZmxvb3IocC9kKSpkLGQpKS5zaGlmdCgpfXJldHVybiBZYSgpLnRocmVzaG9sZHMoZCkuc2l6ZShbYyx1XSkoaSkubWFwKGYpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqbyksdC5jb29yZGluYXRlcy5mb3JFYWNoKGQpLHR9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0LmZvckVhY2goZyl9ZnVuY3Rpb24gZyh0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixvKS1zLHRbMV09dFsxXSpNYXRoLnBvdygyLG8pLXN9ZnVuY3Rpb24geSgpe3JldHVybiBjPXIrMioocz0zKmEpPj5vLHU9aSsyKnM+Pm8saH1yZXR1cm4gaC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TGEoK2UpLGgpOnR9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTplfSxoLndlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTpufSxoLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3IsaV07dmFyIGU9TWF0aC5jZWlsKHRbMF0pLG49TWF0aC5jZWlsKHRbMV0pO2lmKCEoZT49MHx8ZT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1lLGk9bix5KCl9LGguY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PG87aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gbz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx5KCl9LGgudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/TGEoTmEuY2FsbCh0KSk6TGEodCksaCk6bH0saC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChhKihhKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBhPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSx5KCl9LGh9LEdhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gcWEodCxlLG4scixpLGEsbyxzLGMsdSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1hLHRoaXMueT1vLHRoaXMuZHg9cyx0aGlzLmR5PWMsdGhpcy5fPXV9ZnVuY3Rpb24gWGEoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBaYSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIG51bGw9PXQ/e3g6Y2UueCx5OmNlLnl9OnR9ZnVuY3Rpb24gUWEoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9cWEucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIEthPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1YYSxhPVphLG89SmEscz1RYSxjPXt9LHU9bHQoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGw9MCxoPTA7ZnVuY3Rpb24gZih0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIsZCkuZmlsdGVyKHMpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLHkpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsdikub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsbSkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXtpZighciYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPWIoIm1vdXNlIixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxObix0aGlzLGFyZ3VtZW50cyk7byYmKGtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIscCwhMCkub24oIm1vdXNldXAuZHJhZyIsZywhMCksVGUoY2Uudmlldyksd2UoKSxuPSExLHQ9Y2UuY2xpZW50WCxlPWNlLmNsaWVudFksbygic3RhcnQiKSl9fWZ1bmN0aW9uIHAoKXtpZihFZSgpLCFuKXt2YXIgcj1jZS5jbGllbnRYLXQsaT1jZS5jbGllbnRZLWU7bj1yKnIraSppPmh9Yy5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIGcoKXtrZShjZS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxDZShjZS52aWV3LG4pLEVlKCksYy5tb3VzZSgiZW5kIil9ZnVuY3Rpb24geSgpe2lmKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxlLG49Y2UuY2hhbmdlZFRvdWNoZXMscj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPW4ubGVuZ3RoO2Zvcih0PTA7dDxvOysrdCkoZT1iKG5bdF0uaWRlbnRpZmllcixyLERuLHRoaXMsYXJndW1lbnRzKSkmJih3ZSgpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiB2KCl7dmFyIHQsZSxuPWNlLmNoYW5nZWRUb3VjaGVzLHI9bi5sZW5ndGg7Zm9yKHQ9MDt0PHI7Kyt0KShlPWNbblt0XS5pZGVudGlmaWVyXSkmJihFZSgpLGUoImRyYWciKSl9ZnVuY3Rpb24gbSgpe3ZhciB0LGUsbj1jZS5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2ZvcihyJiZjbGVhclRpbWVvdXQocikscj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3I9bnVsbH0pLDUwMCksdD0wO3Q8aTsrK3QpKGU9Y1tuW3RdLmlkZW50aWZpZXJdKSYmKHdlKCksZSgiZW5kIikpfWZ1bmN0aW9uIGIodCxlLG4scixpKXt2YXIgYSxzLGgsZD1uKGUsdCkscD11LmNvcHkoKTtpZihwZShuZXcgcWEoZiwiYmVmb3Jlc3RhcnQiLGEsdCxsLGRbMF0sZFsxXSwwLDAscCksKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShjZS5zdWJqZWN0PWE9by5hcHBseShyLGkpKSYmKHM9YS54LWRbMF18fDAsaD1hLnktZFsxXXx8MCwhMCl9KSkpcmV0dXJuIGZ1bmN0aW9uIG8odSl7dmFyIGcseT1kO3N3aXRjaCh1KXtjYXNlInN0YXJ0IjpjW3RdPW8sZz1sKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBjW3RdLC0tbDtjYXNlImRyYWciOmQ9bihlLHQpLGc9bH1wZShuZXcgcWEoZix1LGEsdCxnLGRbMF0rcyxkWzFdK2gsZFswXS15WzBdLGRbMV0teVsxXSxwKSxwLmFwcGx5LHAsW3UscixpXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKCEhdCksZik6aX0sZi5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSh0KSxmKTphfSxmLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSh0KSxmKTpvfSxmLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKCEhdCksZik6c30sZi5vbj1mdW5jdGlvbigpe3ZhciB0PXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiB0PT09dT9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxmKTpNYXRoLnNxcnQoaCl9LGZ9LHRvPXt9LGVvPXt9O2Z1bmN0aW9uIG5vKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyddIHx8ICIiJ30pKS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBybyh0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBlfHxuLnB1c2goZVtyXT1yKX0pKSxufWZ1bmN0aW9uIGlvKHQsZSl7dmFyIG49dCsiIixyPW4ubGVuZ3RoO3JldHVybiByPGU/bmV3IEFycmF5KGUtcisxKS5qb2luKDApK246bn1mdW5jdGlvbiBhbyh0KXt2YXIgZSxuPXQuZ2V0VVRDSG91cnMoKSxyPXQuZ2V0VVRDTWludXRlcygpLGk9dC5nZXRVVENTZWNvbmRzKCksYT10LmdldFVUQ01pbGxpc2Vjb25kcygpO3JldHVybiBpc05hTih0KT8iSW52YWxpZCBEYXRlIjooKGU9dC5nZXRVVENGdWxsWWVhcigpKTwwPyItIitpbygtZSw2KTplPjk5OTk/IisiK2lvKGUsNik6aW8oZSw0KSkrIi0iK2lvKHQuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitpbyh0LmdldFVUQ0RhdGUoKSwyKSsoYT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiLiIraW8oYSwzKSsiWiI6aT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiWiI6cnx8bj8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiWiI6IiIpfXZhciBvbz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxhPXQubGVuZ3RoLG89MCxzPTAsYz1hPD0wLHU9ITE7ZnVuY3Rpb24gbCgpe2lmKGMpcmV0dXJuIGVvO2lmKHUpcmV0dXJuIHU9ITEsdG87dmFyIGUscixpPW87aWYoMzQ9PT10LmNoYXJDb2RlQXQoaSkpe2Zvcig7bysrPGEmJjM0IT09dC5jaGFyQ29kZUF0KG8pfHwzND09PXQuY2hhckNvZGVBdCgrK28pOyk7cmV0dXJuKGU9byk+PWE/Yz0hMDoxMD09PShyPXQuY2hhckNvZGVBdChvKyspKT91PSEwOjEzPT09ciYmKHU9ITAsMTA9PT10LmNoYXJDb2RlQXQobykmJisrbyksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtvPGE7KXtpZigxMD09PShyPXQuY2hhckNvZGVBdChlPW8rKykpKXU9ITA7ZWxzZSBpZigxMz09PXIpdT0hMCwxMD09PXQuY2hhckNvZGVBdChvKSYmKytvO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gYz0hMCx0LnNsaWNlKGksYSl9Zm9yKDEwPT09dC5jaGFyQ29kZUF0KGEtMSkmJi0tYSwxMz09PXQuY2hhckNvZGVBdChhLTEpJiYtLWE7KHI9bCgpKSE9PWVvOyl7Zm9yKHZhciBoPVtdO3IhPT10byYmciE9PWVvOyloLnB1c2gocikscj1sKCk7ZSYmbnVsbD09KGg9ZShoLHMrKykpfHxpLnB1c2goaCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShlLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pKS5qb2luKHQpfSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjp0IGluc3RhbmNlb2YgRGF0ZT9hbyh0KTplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixpLGE9cih0LChmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO2k9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj1ubyh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gZShuKHIpLGksdCl9fSh0LGUpOm5vKHQpfSkpO3JldHVybiBhLmNvbHVtbnM9aXx8W10sYX0scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPXJvKGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGkoZSxuKSkuam9pbigiXG4iKX0sZm9ybWF0Qm9keTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lJiYoZT1ybyh0KSksaSh0LGUpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGEpLmpvaW4oIlxuIil9LGZvcm1hdFJvdzphLGZvcm1hdFZhbHVlOm99fSxzbz1vbygiLCIpLGNvPXNvLnBhcnNlLHVvPXNvLnBhcnNlUm93cyxsbz1zby5mb3JtYXQsaG89c28uZm9ybWF0Qm9keSxmbz1zby5mb3JtYXRSb3dzLHBvPXNvLmZvcm1hdFJvdyxnbz1zby5mb3JtYXRWYWx1ZSx5bz1vbygiXHQiKSx2bz15by5wYXJzZSxtbz15by5wYXJzZVJvd3MsYm89eW8uZm9ybWF0LHhvPXlvLmZvcm1hdEJvZHksX289eW8uZm9ybWF0Um93cyxrbz15by5mb3JtYXRSb3csd289eW8uZm9ybWF0VmFsdWU7ZnVuY3Rpb24gRW8odCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuLHIsaT10W2VdLnRyaW0oKTtpZihpKWlmKCJ0cnVlIj09PWkpaT0hMDtlbHNlIGlmKCJmYWxzZSI9PT1pKWk9ITE7ZWxzZSBpZigiTmFOIj09PWkpaT1OYU47ZWxzZSBpZihpc05hTihuPStpKSl7aWYoIShyPWkubWF0Y2goL14oWy0rXVxkezJ9KT9cZHs0fSgtXGR7Mn0oLVxkezJ9KT8pPyhUXGR7Mn06XGR7Mn0oOlxkezJ9KFwuXGR7M30pPyk/KFp8Wy0rXVxkezJ9OlxkezJ9KT8pPyQvKSkpY29udGludWU7VG8mJnJbNF0mJiFyWzddJiYoaT1pLnJlcGxhY2UoLy0vZywiLyIpLnJlcGxhY2UoL1QvLCIgIikpLGk9bmV3IERhdGUoaSl9ZWxzZSBpPW47ZWxzZSBpPW51bGw7dFtlXT1pfXJldHVybiB0fXZhciBUbz1uZXcgRGF0ZSgiMjAxOS0wMS0wMVQwMDowMCIpLmdldEhvdXJzKCl8fG5ldyBEYXRlKCIyMDE5LTA3LTAxVDAwOjAwIikuZ2V0SG91cnMoKTtmdW5jdGlvbiBDbyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0KigyLXQpfWZ1bmN0aW9uIE1vKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfXZhciBPbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLERvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLE5vPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLEJvPU1hdGguUEksTG89Qm8vMjtmdW5jdGlvbiBQbyh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkxvKX1mdW5jdGlvbiBGbyh0KXtyZXR1cm4gTWF0aC5zaW4odCpMbyl9ZnVuY3Rpb24gSW8odCl7cmV0dXJuKDEtTWF0aC5jb3MoQm8qdCkpLzJ9ZnVuY3Rpb24gam8odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9ZnVuY3Rpb24gUm8odCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9ZnVuY3Rpb24gWW8odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiB6byh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIFVvKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uICRvKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIFdvKHQpe3JldHVybiAxLVZvKDEtdCl9ZnVuY3Rpb24gVm8odCl7cmV0dXJuKHQ9K3QpPDQvMTE/Ny41NjI1KnQqdDp0PDgvMTE/Ny41NjI1Kih0LT02LzExKSp0Ky43NTp0PDEwLzExPzcuNTYyNSoodC09OS8xMSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIxLzIyKSp0KzYzLzY0fWZ1bmN0aW9uIEhvKHQpe3JldHVybigodCo9Mik8PTE/MS1WbygxLXQpOlZvKHQtMSkrMSkvMn12YXIgR289ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxxbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLFhvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxabz0yKk1hdGguUEksSm89ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Wm8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUqTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxRbz1mdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1abyk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipabyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLEtvPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVpvKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL24pKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKTtmdW5jdGlvbiB0cyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYmxvYigpfXZhciBlcz1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4odHMpfTtmdW5jdGlvbiBucyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX12YXIgcnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKG5zKX07ZnVuY3Rpb24gaXModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX12YXIgYXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGlzKX07ZnVuY3Rpb24gb3ModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49dm9pZCAwKSxhcyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUscil9KSl9fWZ1bmN0aW9uIHNzKHQsZSxuLHIpezM9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCk7dmFyIGk9b28odCk7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pKX12YXIgY3M9b3MoY28pLHVzPW9zKHZvKSxscz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBhIGluIGUpaVthXT1lW2FdO2kub25lcnJvcj1yLGkub25sb2FkPWZ1bmN0aW9uKCl7bihpKX0saS5zcmM9dH0pKX07ZnVuY3Rpb24gaHModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX12YXIgZnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGhzKX07ZnVuY3Rpb24gZHModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpfSkpfX12YXIgcHM9ZHMoImFwcGxpY2F0aW9uL3htbCIpLGdzPWRzKCJ0ZXh0L2h0bWwiKSx5cz1kcygiaW1hZ2Uvc3ZnK3htbCIpLHZzPWZ1bmN0aW9uKHQsZSl7dmFyIG47ZnVuY3Rpb24gcigpe3ZhciByLGksYT1uLmxlbmd0aCxvPTAscz0wO2ZvcihyPTA7cjxhOysrcilvKz0oaT1uW3JdKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLHI9MDtyPGE7KytyKShpPW5bcl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LG1zPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sYnM9ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHhzKHQsZSxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZD10Ll9yb290LHA9e2RhdGE6cn0sZz10Ll94MCx5PXQuX3kwLHY9dC5feDEsbT10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKHU9ZT49KGE9KGcrdikvMikpP2c9YTp2PWEsKGw9bj49KG89KHkrbSkvMikpP3k9bzptPW8saT1kLCEoZD1kW2g9bDw8MXx1XSkpcmV0dXJuIGlbaF09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksYz0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmbj09PWMpcmV0dXJuIHAubmV4dD1kLGk/aVtoXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwodT1lPj0oYT0oZyt2KS8yKSk/Zz1hOnY9YSwobD1uPj0obz0oeSttKS8yKSk/eT1vOm09b313aGlsZSgoaD1sPDwxfHUpPT0oZj0oYz49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPWQsaVtoXT1wLHR9dmFyIF9zPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1pfTtmdW5jdGlvbiBrcyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3cyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBFcyh0LGUsbil7dmFyIHI9bmV3IFRzKG51bGw9PWU/a3M6ZSxudWxsPT1uP3dzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIFRzKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gQ3ModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBTcz1Fcy5wcm90b3R5cGU9VHMucHJvdG90eXBlO2Z1bmN0aW9uIEFzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gdC55K3Qudnl9U3MuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgVHModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIG47aWYoIXIubGVuZ3RoKXJldHVybiBuLl9yb290PUNzKHIpLG47Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9ci5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09Q3MoZSkpO3JldHVybiBufSxTcy5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiB4cyh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxTcy5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPTEvMCx1PTEvMCxsPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxhOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwob1tuXT1yLHNbbl09aSxyPGMmJihjPXIpLHI+bCYmKGw9ciksaTx1JiYodT1pKSxpPmgmJihoPWkpKTtpZihjPmx8fHU+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihjLHUpLmNvdmVyKGwsaCksbj0wO248YTsrK24peHModGhpcyxvW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LFNzLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKG4pKWk9KG49TWF0aC5mbG9vcih0KSkrMSxhPShyPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtmb3IodmFyIG8scyxjPWktbix1PXRoaXMuX3Jvb3Q7bj50fHx0Pj1pfHxyPmV8fGU+PWE7KXN3aXRjaChzPShlPHIpPDwxfHQ8biwobz1uZXcgQXJyYXkoNCkpW3NdPXUsdT1vLGMqPTIscyl7Y2FzZSAwOmk9bitjLGE9citjO2JyZWFrO2Nhc2UgMTpuPWktYyxhPXIrYzticmVhaztjYXNlIDI6aT1uK2Mscj1hLWM7YnJlYWs7Y2FzZSAzOm49aS1jLHI9YS1jfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD11KX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxTcy5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sU3MuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxTcy5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbyxzLGMsdSxsPXRoaXMuX3gwLGg9dGhpcy5feTAsZj10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10sZz10aGlzLl9yb290O2ZvcihnJiZwLnB1c2gobmV3IF9zKGcsbCxoLGYsZCkpLG51bGw9PW4/bj0xLzA6KGw9dC1uLGg9ZS1uLGY9dCtuLGQ9ZStuLG4qPW4pO2M9cC5wb3AoKTspaWYoISghKGc9Yy5ub2RlKXx8KGk9Yy54MCk+Znx8KGE9Yy55MCk+ZHx8KG89Yy54MSk8bHx8KHM9Yy55MSk8aCkpaWYoZy5sZW5ndGgpe3ZhciB5PShpK28pLzIsdj0oYStzKS8yO3AucHVzaChuZXcgX3MoZ1szXSx5LHYsbyxzKSxuZXcgX3MoZ1syXSxpLHYseSxzKSxuZXcgX3MoZ1sxXSx5LGEsbyx2KSxuZXcgX3MoZ1swXSxpLGEseSx2KSksKHU9KGU+PXYpPDwxfHQ+PXkpJiYoYz1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLXVdLHBbcC5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciBtPXQtK3RoaXMuX3guY2FsbChudWxsLGcuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxnLmRhdGEpLHg9bSptK2IqYjtpZih4PG4pe3ZhciBfPU1hdGguc3FydChuPXgpO2w9dC1fLGg9ZS1fLGY9dCtfLGQ9ZStfLHI9Zy5kYXRhfX1yZXR1cm4gcn0sU3MucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGgsZixkPXRoaXMuX3Jvb3QscD10aGlzLl94MCxnPXRoaXMuX3kwLHk9dGhpcy5feDEsdj10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKCh1PWE+PShzPShwK3kpLzIpKT9wPXM6eT1zLChsPW8+PShjPShnK3YpLzIpKT9nPWM6dj1jLGU9ZCwhKGQ9ZFtoPWw8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZj1oKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYobj9uW2ZdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxTcy5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxTcy5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LFNzLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxTcy52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scz1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJnMucHVzaChuZXcgX3MoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQoYz1lLm5vZGUscj1lLngwLGk9ZS55MCxhPWUueDEsbz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShyK2EpLzIsbD0oaStvKS8yOyhuPWNbM10pJiZzLnB1c2gobmV3IF9zKG4sdSxsLGEsbykpLChuPWNbMl0pJiZzLnB1c2gobmV3IF9zKG4scixsLHUsbykpLChuPWNbMV0pJiZzLnB1c2gobmV3IF9zKG4sdSxpLGEsbCkpLChuPWNbMF0pJiZzLnB1c2gobmV3IF9zKG4scixpLHUsbCkpfXJldHVybiB0aGlzfSxTcy52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10scj1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBfcyh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGM9ZS54MSx1PWUueTEsbD0obytjKS8yLGg9KHMrdSkvMjsoYT1pWzBdKSYmbi5wdXNoKG5ldyBfcyhhLG8scyxsLGgpKSwoYT1pWzFdKSYmbi5wdXNoKG5ldyBfcyhhLGwscyxjLGgpKSwoYT1pWzJdKSYmbi5wdXNoKG5ldyBfcyhhLG8saCxsLHUpKSwoYT1pWzNdKSYmbi5wdXNoKG5ldyBfcyhhLGwsaCxjLHUpKX1yLnB1c2goZSl9Zm9yKDtlPXIucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxTcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sU3MueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciBPcz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9MSxpPTE7ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdCxhLHMsYyx1LGwsaCxmPWUubGVuZ3RoLGQ9MDtkPGk7KytkKWZvcihhPUVzKGUsQXMsTXMpLnZpc2l0QWZ0ZXIobyksdD0wO3Q8ZjsrK3Qpcz1lW3RdLGw9bltzLmluZGV4XSxoPWwqbCxjPXMueCtzLnZ4LHU9cy55K3MudnksYS52aXNpdChwKTtmdW5jdGlvbiBwKHQsZSxuLGksYSl7dmFyIG89dC5kYXRhLGY9dC5yLGQ9bCtmO2lmKCFvKXJldHVybiBlPmMrZHx8aTxjLWR8fG4+dStkfHxhPHUtZDtpZihvLmluZGV4PnMuaW5kZXgpe3ZhciBwPWMtby54LW8udngsZz11LW8ueS1vLnZ5LHk9cCpwK2cqZzt5PGQqZCYmKDA9PT1wJiYoeSs9KHA9YnMoKSkqcCksMD09PWcmJih5Kz0oZz1icygpKSpnKSx5PShkLSh5PU1hdGguc3FydCh5KSkpL3kqcixzLnZ4Kz0ocCo9eSkqKGQ9KGYqPWYpLyhoK2YpKSxzLnZ5Kz0oZyo9eSkqZCxvLnZ4LT1wKihkPTEtZCksby52eS09ZypkKX19fWZ1bmN0aW9uIG8odCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIHIsaSxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxyPTA7cjxhOysrcilpPWVbcl0sbltpLmluZGV4XT0rdChpLHIsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcyhudWxsPT10PzE6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sYS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGEpOml9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsYSk6cn0sYS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSkscygpLGEpOnR9LGF9O2Z1bmN0aW9uIERzKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIE5zKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufXZhciBCcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG89RHMscz1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihpW3Quc291cmNlLmluZGV4XSxpW3QudGFyZ2V0LmluZGV4XSl9LGM9bXMoMzApLHU9MTtmdW5jdGlvbiBsKHIpe2Zvcih2YXIgaT0wLG89dC5sZW5ndGg7aTx1OysraSlmb3IodmFyIHMsYyxsLGgsZixkLHAsZz0wO2c8bzsrK2cpYz0ocz10W2ddKS5zb3VyY2UsaD0obD1zLnRhcmdldCkueCtsLnZ4LWMueC1jLnZ4fHxicygpLGY9bC55K2wudnktYy55LWMudnl8fGJzKCksaCo9ZD0oKGQ9TWF0aC5zcXJ0KGgqaCtmKmYpKS1uW2ddKS9kKnIqZVtnXSxmKj1kLGwudngtPWgqKHA9YVtnXSksbC52eS09ZipwLGMudngrPWgqKHA9MS1wKSxjLnZ5Kz1mKnB9ZnVuY3Rpb24gaCgpe2lmKHIpe3ZhciBzLGMsdT1yLmxlbmd0aCxsPXQubGVuZ3RoLGg9SmkocixvKTtmb3Iocz0wLGk9bmV3IEFycmF5KHUpO3M8bDsrK3MpKGM9dFtzXSkuaW5kZXg9cywib2JqZWN0IiE9dHlwZW9mIGMuc291cmNlJiYoYy5zb3VyY2U9TnMoaCxjLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgYy50YXJnZXQmJihjLnRhcmdldD1OcyhoLGMudGFyZ2V0KSksaVtjLnNvdXJjZS5pbmRleF09KGlbYy5zb3VyY2UuaW5kZXhdfHwwKSsxLGlbYy50YXJnZXQuaW5kZXhdPShpW2MudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iocz0wLGE9bmV3IEFycmF5KGwpO3M8bDsrK3MpYz10W3NdLGFbc109aVtjLnNvdXJjZS5pbmRleF0vKGlbYy5zb3VyY2UuaW5kZXhdK2lbYy50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShsKSxmKCksbj1uZXcgQXJyYXkobCksZCgpfX1mdW5jdGlvbiBmKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rcyh0W25dLG4sdCl9ZnVuY3Rpb24gZCgpe2lmKHIpZm9yKHZhciBlPTAsaT10Lmxlbmd0aDtlPGk7KytlKW5bZV09K2ModFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LGwubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxoKCksbCk6dH0sbC5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxsKTp1fSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGYoKSxsKTpzfSxsLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGQoKSxsKTpjfSxsfTtmdW5jdGlvbiBMcyh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFBzKHQpe3JldHVybiB0Lnl9dmFyIEZzPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxJcz1mdW5jdGlvbih0KXt2YXIgZSxuPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxhPTAsbz0uNixzPUppKCksYz1XbihsKSx1PWx0KCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gbCgpe2goKSx1LmNhbGwoInRpY2siLGUpLG48ciYmKGMuc3RvcCgpLHUuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gaChyKXt2YXIgYyx1LGw9dC5sZW5ndGg7dm9pZCAwPT09ciYmKHI9MSk7Zm9yKHZhciBoPTA7aDxyOysraClmb3Iobis9KGEtbikqaSxzLmVhY2goKGZ1bmN0aW9uKHQpe3Qobil9KSksYz0wO2M8bDsrK2MpbnVsbD09KHU9dFtjXSkuZng/dS54Kz11LnZ4Kj1vOih1Lng9dS5meCx1LnZ4PTApLG51bGw9PXUuZnk/dS55Kz11LnZ5Kj1vOih1Lnk9dS5meSx1LnZ5PTApO3JldHVybiBlfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGUsbj0wLHI9dC5sZW5ndGg7bjxyOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixudWxsIT1lLmZ4JiYoZS54PWUuZngpLG51bGwhPWUuZnkmJihlLnk9ZS5meSksaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9MTAqTWF0aC5zcXJ0KG4pLGE9bipGcztlLng9aSpNYXRoLmNvcyhhKSxlLnk9aSpNYXRoLnNpbihhKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGYoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBjLnJlc3RhcnQobCksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBjLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGYoKSxzLmVhY2goZCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsZSk6cn0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxlKToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsZSk6YX0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0xLXQsZSk6MS1vfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxkKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4scil7dmFyIGksYSxvLHMsYyx1PTAsbD10Lmxlbmd0aDtmb3IobnVsbD09cj9yPTEvMDpyKj1yLHU9MDt1PGw7Kyt1KShvPShpPWUtKHM9dFt1XSkueCkqaSsoYT1uLXMueSkqYSk8ciYmKGM9cyxyPW8pO3JldHVybiBjfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHUub24odCxuKSxlKTp1Lm9uKHQpfX19LGpzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1tcygtMzApLGE9MSxvPTEvMCxzPS44MTtmdW5jdGlvbiBjKHIpe3ZhciBpLGE9dC5sZW5ndGgsbz1Fcyh0LExzLFBzKS52aXNpdEFmdGVyKGwpO2ZvcihuPXIsaT0wO2k8YTsrK2kpZT10W2ldLG8udmlzaXQoaCl9ZnVuY3Rpb24gdSgpe2lmKHQpe3ZhciBlLG4sYT10Lmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2Upbj10W2VdLHJbbi5pbmRleF09K2kobixlLHQpfX1mdW5jdGlvbiBsKHQpe3ZhciBlLG4saSxhLG8scz0wLGM9MDtpZih0Lmxlbmd0aCl7Zm9yKGk9YT1vPTA7bzw0OysrbykoZT10W29dKSYmKG49TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSxjKz1uLGkrPW4qZS54LGErPW4qZS55KTt0Lng9aS9jLHQueT1hL2N9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1yW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiBoKHQsaSxjLHUpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBsPXQueC1lLngsaD10LnktZS55LGY9dS1pLGQ9bCpsK2gqaDtpZihmKmYvczxkKXJldHVybiBkPG8mJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSksZS52eCs9bCp0LnZhbHVlKm4vZCxlLnZ5Kz1oKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1vKSl7KHQuZGF0YSE9PWV8fHQubmV4dCkmJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSkpO2Rve3QuZGF0YSE9PWUmJihmPXJbdC5kYXRhLmluZGV4XSpuL2QsZS52eCs9bCpmLGUudnkrPWgqZil9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gYy5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSx1KCl9LGMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksdSgpLGMpOml9LGMuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGMpOk1hdGguc3FydChhKX0sYy5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsYyk6TWF0aC5zcXJ0KG8pfSxjLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQqdCxjKTpNYXRoLnNxcnQocyl9LGN9LFJzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz1tcyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG89MCxzPXIubGVuZ3RoO288czsrK28pe3ZhciBjPXJbb10sdT1jLngtZXx8MWUtNixsPWMueS1ufHwxZS02LGg9TWF0aC5zcXJ0KHUqdStsKmwpLGY9KGFbb10taCkqaVtvXSp0L2g7Yy52eCs9dSpmLGMudnkrPWwqZn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBlLG49ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKWFbZV09K3QocltlXSxlLHIpLGlbZV09aXNOYU4oYVtlXSk/MDorbyhyW2VdLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGMoKSxzKTpvfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxjKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfSxZcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaT1tcyguMSk7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KHJbYV0taS54KSpuW2FdKnR9ZnVuY3Rpb24gbygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGE9MDthPG87KythKW5bYV09aXNOYU4oclthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bXMobnVsbD09dD8wOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxvKCl9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksbygpLGEpOml9LGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxvKCksYSk6dH0sYX0senM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9bXMoLjEpO2Z1bmN0aW9uIGEodCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudnkrPShyW2FdLWkueSkqblthXSp0fWZ1bmN0aW9uIG8oKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxyPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSluW2FdPWlzTmFOKHJbYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW1zKG51bGw9PXQ/MDordCkpLGEuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsbygpfSxhLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLG8oKSxhKTppfSxhLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSksbygpLGEpOnR9LGF9LFVzPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfSwkcz1mdW5jdGlvbih0KXtyZXR1cm4odD1VcyhNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxXcz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBWcyh0KXtpZighKGU9V3MuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IEhzKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIEhzKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifVZzLnByb3RvdHlwZT1Icy5wcm90b3R5cGUsSHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIEdzLHFzLFhzLFpzLEpzPWZ1bmN0aW9uKHQsZSl7dmFyIG49VXModCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX0sUXM9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpzKDEwMCp0LGUpfSxyOkpzLHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1Vcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLGE9aS0oR3M9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLG89ci5sZW5ndGg7cmV0dXJuIGE9PT1vP3I6YT5vP3IrbmV3IEFycmF5KGEtbysxKS5qb2luKCIwIik6YT4wP3Iuc2xpY2UoMCxhKSsiLiIrci5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStVcyh0LE1hdGgubWF4KDAsZSthLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxLcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdGM9QXJyYXkucHJvdG90eXBlLm1hcCxlYz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0sbmM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP0tzOihlPXRjLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLG49dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGM9MDtpPjAmJnM+MCYmKGMrcysxPnImJihzPU1hdGgubWF4KDEsci1jKSksYS5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgoYys9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX0pLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLGE9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIscz12b2lkIDA9PT10Lm51bWVyYWxzP0tzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSh0Yy5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSksYz12b2lkIDA9PT10LnBlcmNlbnQ/IiUiOnQucGVyY2VudCsiIix1PXZvaWQgMD09PXQubWludXM/Ii0iOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PVZzKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCxnPXQuY29tbWEseT10LnByZWNpc2lvbix2PXQudHJpbSxtPXQudHlwZTsibiI9PT1tPyhnPSEwLG09ImciKTpRc1ttXXx8KHZvaWQgMD09PXkmJih5PTEyKSx2PSEwLG09ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdChtKT8iMCIrbS50b0xvd2VyQ2FzZSgpOiIiLHg9IiQiPT09Zj9hOi9bJXBdLy50ZXN0KG0pP2M6IiIsXz1Rc1ttXSxrPS9bZGVmZ3BycyVdLy50ZXN0KG0pO2Z1bmN0aW9uIHcodCl7dmFyIGksYSxjLGY9Yix3PXg7aWYoImMiPT09bSl3PV8odCkrdyx0PSIiO2Vsc2V7dmFyIEU9KHQ9K3QpPDA7aWYodD1pc05hTih0KT9sOl8oTWF0aC5hYnModCkseSksdiYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxFJiYwPT0rdCYmKEU9ITEpLGY9KEU/IigiPT09aD9oOnU6Ii0iPT09aHx8IigiPT09aD8iIjpoKStmLHc9KCJzIj09PW0/ZWNbOCtHcy8zXToiIikrdysoRSYmIigiPT09aD8iKSI6IiIpLGspZm9yKGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fWcmJiFkJiYodD1yKHQsMS8wKSk7dmFyIFQ9Zi5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsQz1UPHA/bmV3IEFycmF5KHAtVCsxKS5qb2luKGUpOiIiO3N3aXRjaChnJiZkJiYodD1yKEMrdCxDLmxlbmd0aD9wLXcubGVuZ3RoOjEvMCksQz0iIiksbil7Y2FzZSI8Ijp0PWYrdCt3K0M7YnJlYWs7Y2FzZSI9Ijp0PWYrQyt0K3c7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxUPUMubGVuZ3RoPj4xKStmK3QrdytDLnNsaWNlKFQpO2JyZWFrO2RlZmF1bHQ6dD1DK2YrdCt3fXJldHVybiBzKHQpfXJldHVybiB5PXZvaWQgMD09PXk/NjovW2dwcnNdLy50ZXN0KG0pP01hdGgubWF4KDEsTWF0aC5taW4oMjEseSkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAseSkpLHcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sd31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49aCgoKHQ9VnModCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKCRzKGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksYT1lY1s4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrYX19fX07ZnVuY3Rpb24gcmModCl7cmV0dXJuIHFzPW5jKHQpLFhzPXFzLmZvcm1hdCxacz1xcy5mb3JtYXRQcmVmaXgscXN9cmMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO3ZhciBpYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtJHMoTWF0aC5hYnModCkpKX0sYWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcigkcyhlKS8zKSkpLSRzKE1hdGguYWJzKHQpKSl9LG9jPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsJHMoZSktJHModCkpKzF9LHNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjY307ZnVuY3Rpb24gY2MoKXt0aGlzLnJlc2V0KCl9Y2MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjYyxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe2xjKHVjLHQsdGhpcy50KSxsYyh0aGlzLHVjLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz11Yy50OnRoaXMucz11Yy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciB1Yz1uZXcgY2M7ZnVuY3Rpb24gbGModCxlLG4pe3ZhciByPXQucz1lK24saT1yLWUsYT1yLWk7dC50PWUtYSsobi1pKX12YXIgaGM9TWF0aC5QSSxmYz1oYy8yLGRjPWhjLzQscGM9MipoYyxnYz0xODAvaGMseWM9aGMvMTgwLHZjPU1hdGguYWJzLG1jPU1hdGguYXRhbixiYz1NYXRoLmF0YW4yLHhjPU1hdGguY29zLF9jPU1hdGguY2VpbCxrYz1NYXRoLmV4cCx3Yz0oTWF0aC5mbG9vcixNYXRoLmxvZyksRWM9TWF0aC5wb3csVGM9TWF0aC5zaW4sQ2M9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LFNjPU1hdGguc3FydCxBYz1NYXRoLnRhbjtmdW5jdGlvbiBNYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9oYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gT2ModCl7cmV0dXJuIHQ+MT9mYzp0PC0xPy1mYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRGModCl7cmV0dXJuKHQ9VGModC8yKSkqdH1mdW5jdGlvbiBOYygpe31mdW5jdGlvbiBCYyh0LGUpe3QmJlBjLmhhc093blByb3BlcnR5KHQudHlwZSkmJlBjW3QudHlwZV0odCxlKX12YXIgTGM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtCYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspQmMobltyXS5nZW9tZXRyeSxlKX19LFBjPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7RmModC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KUZjKG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe0ljKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspSWMobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KUJjKG5bcl0sZSl9fTtmdW5jdGlvbiBGYyh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBJYyh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KUZjKHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX12YXIgamMsUmMsWWMsemMsVWMsJGM9ZnVuY3Rpb24odCxlKXt0JiZMYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0xjW3QudHlwZV0odCxlKTpCYyh0LGUpfSxXYz1zYygpLFZjPXNjKCksSGM9e3BvaW50Ok5jLGxpbmVTdGFydDpOYyxsaW5lRW5kOk5jLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1djLnJlc2V0KCksSGMubGluZVN0YXJ0PUdjLEhjLmxpbmVFbmQ9cWN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rV2M7VmMuYWRkKHQ8MD9wYyt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PU5jfSxzcGhlcmU6ZnVuY3Rpb24oKXtWYy5hZGQocGMpfX07ZnVuY3Rpb24gR2MoKXtIYy5wb2ludD1YY31mdW5jdGlvbiBxYygpe1pjKGpjLFJjKX1mdW5jdGlvbiBYYyh0LGUpe0hjLnBvaW50PVpjLGpjPXQsUmM9ZSxZYz10Kj15Yyx6Yz14YyhlPShlKj15YykvMitkYyksVWM9VGMoZSl9ZnVuY3Rpb24gWmModCxlKXt2YXIgbj0odCo9eWMpLVljLHI9bj49MD8xOi0xLGk9cipuLGE9eGMoZT0oZSo9eWMpLzIrZGMpLG89VGMoZSkscz1VYypvLGM9emMqYStzKnhjKGkpLHU9cypyKlRjKGkpO1djLmFkZChiYyh1LGMpKSxZYz10LHpjPWEsVWM9b312YXIgSmM9ZnVuY3Rpb24odCl7cmV0dXJuIFZjLnJlc2V0KCksJGModCxIYyksMipWY307ZnVuY3Rpb24gUWModCl7cmV0dXJuW2JjKHRbMV0sdFswXSksT2ModFsyXSldfWZ1bmN0aW9uIEtjKHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9eGMobik7cmV0dXJuW3IqeGMoZSkscipUYyhlKSxUYyhuKV19ZnVuY3Rpb24gdHUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gZXUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIG51KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIGl1KHQpe3ZhciBlPVNjKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgYXUsb3Usc3UsY3UsdXUsbHUsaHUsZnUsZHUscHUsZ3U9c2MoKSx5dT17cG9pbnQ6dnUsbGluZVN0YXJ0OmJ1LGxpbmVFbmQ6eHUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eXUucG9pbnQ9X3UseXUubGluZVN0YXJ0PWt1LHl1LmxpbmVFbmQ9d3UsZ3UucmVzZXQoKSxIYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0hjLnBvbHlnb25FbmQoKSx5dS5wb2ludD12dSx5dS5saW5lU3RhcnQ9YnUseXUubGluZUVuZD14dSxXYzwwPyhhdT0tKHN1PTE4MCksb3U9LShjdT05MCkpOmd1PjFlLTY/Y3U9OTA6Z3U8LTFlLTYmJihvdT0tOTApLHB1WzBdPWF1LHB1WzFdPXN1fSxzcGhlcmU6ZnVuY3Rpb24oKXthdT0tKHN1PTE4MCksb3U9LShjdT05MCl9fTtmdW5jdGlvbiB2dSh0LGUpe2R1LnB1c2gocHU9W2F1PXQsc3U9dF0pLGU8b3UmJihvdT1lKSxlPmN1JiYoY3U9ZSl9ZnVuY3Rpb24gbXUodCxlKXt2YXIgbj1LYyhbdCp5YyxlKnljXSk7aWYoZnUpe3ZhciByPWV1KGZ1LG4pLGk9ZXUoW3JbMV0sLXJbMF0sMF0scik7aXUoaSksaT1RYyhpKTt2YXIgYSxvPXQtdXUscz1vPjA/MTotMSxjPWlbMF0qZ2Mqcyx1PXZjKG8pPjE4MDt1XihzKnV1PGMmJmM8cyp0KT8oYT1pWzFdKmdjKT5jdSYmKGN1PWEpOnVeKHMqdXU8KGM9KGMrMzYwKSUzNjAtMTgwKSYmYzxzKnQpPyhhPS1pWzFdKmdjKTxvdSYmKG91PWEpOihlPG91JiYob3U9ZSksZT5jdSYmKGN1PWUpKSx1P3Q8dXU/RXUoYXUsdCk+RXUoYXUsc3UpJiYoc3U9dCk6RXUodCxzdSk+RXUoYXUsc3UpJiYoYXU9dCk6c3U+PWF1Pyh0PGF1JiYoYXU9dCksdD5zdSYmKHN1PXQpKTp0PnV1P0V1KGF1LHQpPkV1KGF1LHN1KSYmKHN1PXQpOkV1KHQsc3UpPkV1KGF1LHN1KSYmKGF1PXQpfWVsc2UgZHUucHVzaChwdT1bYXU9dCxzdT10XSk7ZTxvdSYmKG91PWUpLGU+Y3UmJihjdT1lKSxmdT1uLHV1PXR9ZnVuY3Rpb24gYnUoKXt5dS5wb2ludD1tdX1mdW5jdGlvbiB4dSgpe3B1WzBdPWF1LHB1WzFdPXN1LHl1LnBvaW50PXZ1LGZ1PW51bGx9ZnVuY3Rpb24gX3UodCxlKXtpZihmdSl7dmFyIG49dC11dTtndS5hZGQodmMobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBsdT10LGh1PWU7SGMucG9pbnQodCxlKSxtdSh0LGUpfWZ1bmN0aW9uIGt1KCl7SGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gd3UoKXtfdShsdSxodSksSGMubGluZUVuZCgpLHZjKGd1KT4xZS02JiYoYXU9LShzdT0xODApKSxwdVswXT1hdSxwdVsxXT1zdSxmdT1udWxsfWZ1bmN0aW9uIEV1KHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBUdSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQ3UodCxlKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1lJiZlPD10WzFdOmU8dFswXXx8dFsxXTxlfXZhciBTdSxBdSxNdSxPdSxEdSxOdSxCdSxMdSxQdSxGdSxJdSxqdSxSdSxZdSx6dSxVdSwkdT1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scztpZihjdT1zdT0tKGF1PW91PTEvMCksZHU9W10sJGModCx5dSksbj1kdS5sZW5ndGgpe2ZvcihkdS5zb3J0KFR1KSxlPTEsYT1bcj1kdVswXV07ZTxuOysrZSlDdShyLChpPWR1W2VdKVswXSl8fEN1KHIsaVsxXSk/KEV1KHJbMF0saVsxXSk+RXUoclswXSxyWzFdKSYmKHJbMV09aVsxXSksRXUoaVswXSxyWzFdKT5FdShyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6YS5wdXNoKHI9aSk7Zm9yKG89LTEvMCxlPTAscj1hW249YS5sZW5ndGgtMV07ZTw9bjtyPWksKytlKWk9YVtlXSwocz1FdShyWzFdLGlbMF0pKT5vJiYobz1zLGF1PWlbMF0sc3U9clsxXSl9cmV0dXJuIGR1PXB1PW51bGwsYXU9PT0xLzB8fG91PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2F1LG91XSxbc3UsY3VdXX0sV3U9e3NwaGVyZTpOYyxwb2ludDpWdSxsaW5lU3RhcnQ6R3UsbGluZUVuZDpadSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtXdS5saW5lU3RhcnQ9SnUsV3UubGluZUVuZD1RdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1d1LmxpbmVTdGFydD1HdSxXdS5saW5lRW5kPVp1fX07ZnVuY3Rpb24gVnUodCxlKXt0Kj15Yzt2YXIgbj14YyhlKj15Yyk7SHUobip4Yyh0KSxuKlRjKHQpLFRjKGUpKX1mdW5jdGlvbiBIdSh0LGUsbil7KytTdSxNdSs9KHQtTXUpL1N1LE91Kz0oZS1PdSkvU3UsRHUrPShuLUR1KS9TdX1mdW5jdGlvbiBHdSgpe1d1LnBvaW50PXF1fWZ1bmN0aW9uIHF1KHQsZSl7dCo9eWM7dmFyIG49eGMoZSo9eWMpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxXdS5wb2ludD1YdSxIdShZdSx6dSxVdSl9ZnVuY3Rpb24gWHUodCxlKXt0Kj15Yzt2YXIgbj14YyhlKj15Yykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89YmMoU2MoKG89enUqYS1VdSppKSpvKyhvPVV1KnItWXUqYSkqbysobz1ZdSppLXp1KnIpKm8pLFl1KnIrenUqaStVdSphKTtBdSs9byxOdSs9byooWXUrKFl1PXIpKSxCdSs9byooenUrKHp1PWkpKSxMdSs9byooVXUrKFV1PWEpKSxIdShZdSx6dSxVdSl9ZnVuY3Rpb24gWnUoKXtXdS5wb2ludD1WdX1mdW5jdGlvbiBKdSgpe1d1LnBvaW50PUt1fWZ1bmN0aW9uIFF1KCl7dGwoanUsUnUpLFd1LnBvaW50PVZ1fWZ1bmN0aW9uIEt1KHQsZSl7anU9dCxSdT1lLHQqPXljLGUqPXljLFd1LnBvaW50PXRsO3ZhciBuPXhjKGUpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxIdShZdSx6dSxVdSl9ZnVuY3Rpb24gdGwodCxlKXt0Kj15Yzt2YXIgbj14YyhlKj15Yykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89enUqYS1VdSppLHM9VXUqci1ZdSphLGM9WXUqaS16dSpyLHU9U2MobypvK3MqcytjKmMpLGw9T2ModSksaD11JiYtbC91O1B1Kz1oKm8sRnUrPWgqcyxJdSs9aCpjLEF1Kz1sLE51Kz1sKihZdSsoWXU9cikpLEJ1Kz1sKih6dSsoenU9aSkpLEx1Kz1sKihVdSsoVXU9YSkpLEh1KFl1LHp1LFV1KX12YXIgZWw9ZnVuY3Rpb24odCl7U3U9QXU9TXU9T3U9RHU9TnU9QnU9THU9UHU9RnU9SXU9MCwkYyh0LFd1KTt2YXIgZT1QdSxuPUZ1LHI9SXUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTwxZS0xMiYmKGU9TnUsbj1CdSxyPUx1LEF1PDFlLTYmJihlPU11LG49T3Uscj1EdSksKGk9ZSplK24qbityKnIpPDFlLTEyKT9bTmFOLE5hTl06W2JjKG4sZSkqZ2MsT2Moci9TYyhpKSkqZ2NdfSxubD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHJsPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPXQobixyKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49ZS5pbnZlcnQobixyKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufTtmdW5jdGlvbiBpbCh0LGUpe3JldHVyblt2Yyh0KT5oYz90K01hdGgucm91bmQoLXQvcGMpKnBjOnQsZV19ZnVuY3Rpb24gYWwodCxlLG4pe3JldHVybih0JT1wYyk/ZXx8bj9ybChzbCh0KSxjbChlLG4pKTpzbCh0KTplfHxuP2NsKGUsbik6aWx9ZnVuY3Rpb24gb2wodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5oYz9lLXBjOmU8LWhjP2UrcGM6ZSxuXX19ZnVuY3Rpb24gc2wodCl7dmFyIGU9b2wodCk7cmV0dXJuIGUuaW52ZXJ0PW9sKC10KSxlfWZ1bmN0aW9uIGNsKHQsZSl7dmFyIG49eGModCkscj1UYyh0KSxpPXhjKGUpLGE9VGMoZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqbitzKnI7cmV0dXJuW2JjKGMqaS1sKmEscypuLXUqciksT2MobCppK2MqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqaS1jKmE7cmV0dXJuW2JjKGMqaSt1KmEscypuK2wqciksT2MobCpuLXMqcildfSxvfWlsLmludmVydD1pbDt2YXIgdWw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qeWMsZVsxXSp5YykpWzBdKj1nYyxlWzFdKj1nYyxlfXJldHVybiB0PWFsKHRbMF0qeWMsdFsxXSp5Yyx0Lmxlbmd0aD4yP3RbMl0qeWM6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSp5YyxlWzFdKnljKSlbMF0qPWdjLGVbMV0qPWdjLGV9LGV9O2Z1bmN0aW9uIGxsKHQsZSxuLHIsaSxhKXtpZihuKXt2YXIgbz14YyhlKSxzPVRjKGUpLGM9cipuO251bGw9PWk/KGk9ZStyKnBjLGE9ZS1jLzIpOihpPWhsKG8saSksYT1obChvLGEpLChyPjA/aTxhOmk+YSkmJihpKz1yKnBjKSk7Zm9yKHZhciB1LGw9aTtyPjA/bD5hOmw8YTtsLT1jKXU9UWMoW28sLXMqeGMobCksLXMqVGMobCldKSx0LnBvaW50KHVbMF0sdVsxXSl9fWZ1bmN0aW9uIGhsKHQsZSl7KGU9S2MoZSkpWzBdLT10LGl1KGUpO3ZhciBuPU1jKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrcGMtMWUtNiklcGN9dmFyIGZsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5sKFswLDBdKSxyPW5sKDkwKSxpPW5sKDYpLGE9e3BvaW50OmZ1bmN0aW9uKG4scil7dC5wdXNoKG49ZShuLHIpKSxuWzBdKj1nYyxuWzFdKj1nY319O2Z1bmN0aW9uIG8oKXt2YXIgbz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKnljLGM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWM7cmV0dXJuIHQ9W10sZT1hbCgtb1swXSp5Yywtb1sxXSp5YywwKS5pbnZlcnQsbGwoYSxzLGMsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5sKFsrdFswXSwrdFsxXV0pLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOnJ9LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOml9LG99LGRsPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuKXt0LnB1c2goW2Usbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6TmMscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19LHBsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZjKHRbMF0tZVswXSk8MWUtNiYmdmModFsxXS1lWzFdKTwxZS02fTtmdW5jdGlvbiBnbCh0LGUsbixyKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfXZhciB5bD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhLG8scz1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4scj10WzBdLG89dFtlXTtpZihwbChyLG8pKXtmb3IoaS5saW5lU3RhcnQoKSxhPTA7YTxlOysrYSlpLnBvaW50KChyPXRbYV0pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2Ugcy5wdXNoKG49bmV3IGdsKHIsdCxudWxsLCEwKSksYy5wdXNoKG4ubz1uZXcgZ2wocixudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgZ2wobyx0LG51bGwsITEpKSxjLnB1c2gobi5vPW5ldyBnbChvLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGMuc29ydChlKSx2bChzKSx2bChjKSxhPTAsbz1jLmxlbmd0aDthPG87KythKWNbYV0uZT1uPSFuO2Zvcih2YXIgdSxsLGg9c1swXTs7KXtmb3IodmFyIGY9aCxkPSEwO2YudjspaWYoKGY9Zi5uKT09PWgpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYoZClmb3IoYT0wLG89dS5sZW5ndGg7YTxvOysrYSlpLnBvaW50KChsPXVbYV0pWzBdLGxbMV0pO2Vsc2UgcihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKGQpZm9yKHU9Zi5wLnosYT11Lmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLnAueCwtMSxpKTtmPWYucH11PShmPWYubykueixkPSFkfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19O2Z1bmN0aW9uIHZsKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLHI9MCxpPXRbMF07KytyPGU7KWkubj1uPXRbcl0sbi5wPWksaT1uO2kubj1uPXRbMF0sbi5wPWl9fXZhciBtbD1zYygpO2Z1bmN0aW9uIGJsKHQpe3JldHVybiB2Yyh0WzBdKTw9aGM/dFswXTpDYyh0WzBdKSooKHZjKHRbMF0pK2hjKSVwYy1oYyl9dmFyIHhsPWZ1bmN0aW9uKHQsZSl7dmFyIG49YmwoZSkscj1lWzFdLGk9VGMociksYT1bVGMobiksLXhjKG4pLDBdLG89MCxzPTA7bWwucmVzZXQoKSwxPT09aT9yPWZjKzFlLTY6LTE9PT1pJiYocj0tZmMtMWUtNik7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9YmwoZikscD1mWzFdLzIrZGMsZz1UYyhwKSx5PXhjKHApLHY9MDt2PGg7Kyt2LGQ9YixnPV8seT1rLGY9bSl7dmFyIG09bFt2XSxiPWJsKG0pLHg9bVsxXS8yK2RjLF89VGMoeCksaz14Yyh4KSx3PWItZCxFPXc+PTA/MTotMSxUPUUqdyxDPVQ+aGMsUz1nKl87aWYobWwuYWRkKGJjKFMqRSpUYyhUKSx5KmsrUyp4YyhUKSkpLG8rPUM/dytFKnBjOncsQ15kPj1uXmI+PW4pe3ZhciBBPWV1KEtjKGYpLEtjKG0pKTtpdShBKTt2YXIgTT1ldShhLEEpO2l1KE0pO3ZhciBPPShDXnc+PTA/LTE6MSkqT2MoTVsyXSk7KHI+T3x8cj09PU8mJihBWzBdfHxBWzFdKSkmJihzKz1DXnc+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPDFlLTYmJm1sPC0xZS02KV4xJnN9LF9sPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9ZGwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDpnLGxpbmVFbmQ6eSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXYsZi5saW5lU3RhcnQ9bSxmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9eSxvPUkobyk7dmFyIHQ9eGwoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCkseWwobyx3bCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiBnKCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24geSgpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiB2KHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gbSgpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7dihzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoa2wpKX1yZXR1cm4gZn19O2Z1bmN0aW9uIGtsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIHdsKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLWZjLTFlLTY6ZmMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLWZjLTFlLTY6ZmMtZVsxXSl9dmFyIEVsPV9sKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/aGM6LWhjLGM9dmMoYS1uKTt2YyhjLWhjKTwxZS02Pyh0LnBvaW50KG4scj0ocitvKS8yPjA/ZmM6LWZjKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksdC5wb2ludChhLHIpLGU9MCk6aSE9PXMmJmM+PWhjJiYodmMobi1pKTwxZS02JiYobi09MWUtNippKSx2YyhhLXMpPDFlLTYmJihhLT0xZS02KnMpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVRjKHQtbik7cmV0dXJuIHZjKG8pPjFlLTY/bWMoKFRjKGUpKihhPXhjKHIpKSpUYyhuKS1UYyhyKSooaT14YyhlKSkqVGModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qZmMsci5wb2ludCgtaGMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoaGMsaSksci5wb2ludChoYywwKSxyLnBvaW50KGhjLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLWhjLC1pKSxyLnBvaW50KC1oYywwKSxyLnBvaW50KC1oYyxpKTtlbHNlIGlmKHZjKHRbMF0tZVswXSk+MWUtNil7dmFyIGE9dFswXTxlWzBdP2hjOi1oYztpPW4qYS8yLHIucG9pbnQoLWEsaSksci5wb2ludCgwLGkpLHIucG9pbnQoYSxpKX1lbHNlIHIucG9pbnQoZVswXSxlWzFdKX0pLFstaGMsLWZjXSk7dmFyIFRsPWZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpLG49Nip5YyxyPWU+MCxpPXZjKGUpPjFlLTY7ZnVuY3Rpb24gYSh0LG4pe3JldHVybiB4Yyh0KSp4YyhuKT5lfWZ1bmN0aW9uIG8odCxuLHIpe3ZhciBpPVsxLDAsMF0sYT1ldShLYyh0KSxLYyhuKSksbz10dShhLGEpLHM9YVswXSxjPW8tcypzO2lmKCFjKXJldHVybiFyJiZ0O3ZhciB1PWUqby9jLGw9LWUqcy9jLGg9ZXUoaSxhKSxmPXJ1KGksdSk7bnUoZixydShhLGwpKTt2YXIgZD1oLHA9dHUoZixkKSxnPXR1KGQsZCkseT1wKnAtZyoodHUoZixmKS0xKTtpZighKHk8MCkpe3ZhciB2PVNjKHkpLG09cnUoZCwoLXAtdikvZyk7aWYobnUobSxmKSxtPVFjKG0pLCFyKXJldHVybiBtO3ZhciBiLHg9dFswXSxfPW5bMF0saz10WzFdLHc9blsxXTtfPHgmJihiPXgseD1fLF89Yik7dmFyIEU9Xy14LFQ9dmMoRS1oYyk8MWUtNjtpZighVCYmdzxrJiYoYj1rLGs9dyx3PWIpLFR8fEU8MWUtNj9UP2srdz4wXm1bMV08KHZjKG1bMF0teCk8MWUtNj9rOncpOms8PW1bMV0mJm1bMV08PXc6RT5oY14oeDw9bVswXSYmbVswXTw9Xykpe3ZhciBDPXJ1KGQsKC1wK3YpL2cpO3JldHVybiBudShDLGYpLFttLFFjKEMpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgaT1yP3Q6aGMtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX1yZXR1cm4gX2woYSwoZnVuY3Rpb24odCl7dmFyIGUsbixjLHUsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1jPSExLGw9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgZCxwPVtoLGZdLGc9YShoLGYpLHk9cj9nPzA6cyhoLGYpOmc/cyhoKyhoPDA/aGM6LWhjKSxmKTowO2lmKCFlJiYodT1jPWcpJiZ0LmxpbmVTdGFydCgpLGchPT1jJiYoIShkPW8oZSxwKSl8fHBsKGUsZCl8fHBsKHAsZCkpJiYocFswXSs9MWUtNixwWzFdKz0xZS02LGc9YShwWzBdLHBbMV0pKSxnIT09YylsPTAsZz8odC5saW5lU3RhcnQoKSxkPW8ocCxlKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPW8oZSxwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJeZyl7dmFyIHY7eSZufHwhKHY9byhwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSx0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSkpKX0hZ3x8ZSYmcGwoZSxwKXx8dC5wb2ludChwWzBdLHBbMV0pLGU9cCxjPWcsbj15fSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBsfCh1JiZjKTw8MX19fSksKGZ1bmN0aW9uKGUscixpLGEpe2xsKGEsdCxuLGksZSxyKX0pLHI/WzAsLXRdOlstaGMsdC1oY10pfTtmdW5jdGlvbiBDbCh0LGUsbixyKXtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIHQ8PWkmJmk8PW4mJmU8PWEmJmE8PXJ9ZnVuY3Rpb24gYShpLGEscyx1KXt2YXIgbD0wLGg9MDtpZihudWxsPT1pfHwobD1vKGkscykpIT09KGg9byhhLHMpKXx8YyhpLGEpPDBecz4wKWRve3UucG9pbnQoMD09PWx8fDM9PT1sP3Q6bixsPjE/cjplKX13aGlsZSgobD0obCtzKzQpJTQpIT09aCk7ZWxzZSB1LnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gbyhyLGkpe3JldHVybiB2YyhyWzBdLXQpPDFlLTY/aT4wPzA6Mzp2YyhyWzBdLW4pPDFlLTY/aT4wPzI6MTp2YyhyWzFdLWUpPDFlLTY/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LngsZS54KX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49byh0LDEpLHI9byhlLDEpO3JldHVybiBuIT09cj9uLXI6MD09PW4/ZVsxXS10WzFdOjE9PT1uP3RbMF0tZVswXToyPT09bj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihvKXt2YXIgYyx1LGwsaCxmLGQscCxnLHksdixtLGI9byx4PWRsKCksXz17cG9pbnQ6ayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PXcsdSYmdS5wdXNoKGw9W10pO3Y9ITAseT0hMSxwPWc9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmKHcoaCxmKSxkJiZ5JiZ4LnJlam9pbigpLGMucHVzaCh4LnJlc3VsdCgpKSk7Xy5wb2ludD1rLHkmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPXgsYz1bXSx1PVtdLG09ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49MCxpPXUubGVuZ3RoO248aTsrK24pZm9yKHZhciBhLG8scz11W25dLGM9MSxsPXMubGVuZ3RoLGg9c1swXSxmPWhbMF0sZD1oWzFdO2M8bDsrK2MpYT1mLG89ZCxoPXNbY10sZj1oWzBdLGQ9aFsxXSxvPD1yP2Q+ciYmKGYtYSkqKHItbyk+KGQtbykqKHQtYSkmJisrZTpkPD1yJiYoZi1hKSooci1vKTwoZC1vKSoodC1hKSYmLS1lO3JldHVybiBlfSgpLG49bSYmZSxpPShjPUkoYykpLmxlbmd0aDsobnx8aSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLGEobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGkmJnlsKGMscyxlLGEsbyksby5wb2x5Z29uRW5kKCkpO2I9byxjPXU9bD1udWxsfX07ZnVuY3Rpb24gayh0LGUpe2kodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIHcoYSxvKXt2YXIgcz1pKGEsbyk7aWYodSYmbC5wdXNoKFthLG9dKSx2KWg9YSxmPW8sZD1zLHY9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pKTtlbHNlIGlmKHMmJnkpYi5wb2ludChhLG8pO2Vsc2V7dmFyIGM9W3A9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTkscCkpLGc9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksZykpXSx4PVthPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGEpKSxvPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LG8pKV07IWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXRbMF0sYz10WzFdLHU9MCxsPTEsaD1lWzBdLXMsZj1lWzFdLWM7aWYobz1uLXMsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1pLXMsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9aWYobz1yLWMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoZj4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1hLWMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9cmV0dXJuIHU+MCYmKHRbMF09cyt1KmgsdFsxXT1jK3UqZiksbDwxJiYoZVswXT1zK2wqaCxlWzFdPWMrbCpmKSwhMH19fX19KGMseCx0LGUsbixyKT9zJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGEsbyksbT0hMSk6KHl8fChiLmxpbmVTdGFydCgpLGIucG9pbnQoY1swXSxjWzFdKSksYi5wb2ludCh4WzBdLHhbMV0pLHN8fGIubGluZUVuZCgpLG09ITEpfXA9YSxnPW8seT1zfXJldHVybiBffX12YXIgU2wsQWwsTWwsT2w9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9Q2wocixpLGEsbykoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbcixpXSxbYSxvXV19fX0sRGw9c2MoKSxObD17c3BoZXJlOk5jLHBvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe05sLnBvaW50PUxsLE5sLmxpbmVFbmQ9Qmx9LGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmN9O2Z1bmN0aW9uIEJsKCl7TmwucG9pbnQ9TmwubGluZUVuZD1OY31mdW5jdGlvbiBMbCh0LGUpe1NsPXQqPXljLEFsPVRjKGUqPXljKSxNbD14YyhlKSxObC5wb2ludD1QbH1mdW5jdGlvbiBQbCh0LGUpe3QqPXljO3ZhciBuPVRjKGUqPXljKSxyPXhjKGUpLGk9dmModC1TbCksYT14YyhpKSxvPXIqVGMoaSkscz1NbCpuLUFsKnIqYSxjPUFsKm4rTWwqciphO0RsLmFkZChiYyhTYyhvKm8rcypzKSxjKSksU2w9dCxBbD1uLE1sPXJ9dmFyIEZsPWZ1bmN0aW9uKHQpe3JldHVybiBEbC5yZXNldCgpLCRjKHQsTmwpLCtEbH0sSWw9W251bGwsbnVsbF0samw9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOklsfSxSbD1mdW5jdGlvbih0LGUpe3JldHVybiBJbFswXT10LElsWzFdPWUsRmwoamwpfSxZbD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBVbCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LHpsPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoJGwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBXbCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKFdsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihWbChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIFVsKHQsZSl7cmV0dXJuISghdHx8IXpsLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZ6bFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gJGwodCxlKXtyZXR1cm4gMD09PVJsKHQsZSl9ZnVuY3Rpb24gV2wodCxlKXtmb3IodmFyIG4scixpLGE9MCxvPXQubGVuZ3RoO2E8bzthKyspe2lmKDA9PT0ocj1SbCh0W2FdLGUpKSlyZXR1cm4hMDtpZihhPjAmJihpPVJsKHRbYV0sdFthLTFdKSk+MCYmbjw9aSYmcjw9aSYmKG4rci1pKSooMS1NYXRoLnBvdygobi1yKS9pLDIpKTwxZS0xMippKXJldHVybiEwO249cn1yZXR1cm4hMX1mdW5jdGlvbiBWbCh0LGUpe3JldHVybiEheGwodC5tYXAoSGwpLEdsKGUpKX1mdW5jdGlvbiBIbCh0KXtyZXR1cm4odD10Lm1hcChHbCkpLnBvcCgpLHR9ZnVuY3Rpb24gR2wodCl7cmV0dXJuW3RbMF0qeWMsdFsxXSp5Y119dmFyIHFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJllsLmhhc093blByb3BlcnR5KHQudHlwZSk/WWxbdC50eXBlXTpVbCkodCxlKX07ZnVuY3Rpb24gWGwodCxlLG4pe3ZhciByPWsodCxlLTFlLTYsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBabCh0LGUsbil7dmFyIHI9ayh0LGUtMWUtNixuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIEpsKCl7dmFyIHQsZSxuLHIsaSxhLG8scyxjLHUsbCxoLGY9MTAsZD1mLHA9OTAsZz0zNjAseT0yLjU7ZnVuY3Rpb24gdigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm0oKX19ZnVuY3Rpb24gbSgpe3JldHVybiBrKF9jKHIvcCkqcCxuLHApLm1hcChsKS5jb25jYXQoayhfYyhzL2cpKmcsbyxnKS5tYXAoaCkpLmNvbmNhdChrKF9jKGUvZikqZix0LGYpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQlcCk+MWUtNn0pKS5tYXAoYykpLmNvbmNhdChrKF9jKGEvZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQlZyk+MWUtNn0pKS5tYXAodSkpfXJldHVybiB2LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIG0oKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pKX0sdi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltsKHIpLmNvbmNhdChoKG8pLnNsaWNlKDEpLGwobikucmV2ZXJzZSgpLnNsaWNlKDEpLGgocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx2LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOnYuZXh0ZW50TWlub3IoKX0sdi5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxuPSt0WzFdWzBdLHM9K3RbMF1bMV0sbz0rdFsxXVsxXSxyPm4mJih0PXIscj1uLG49dCkscz5vJiYodD1zLHM9byxvPXQpLHYucHJlY2lzaW9uKHkpKTpbW3Isc10sW24sb11dfSx2LmV4dGVudE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdWzBdLHQ9K25bMV1bMF0sYT0rblswXVsxXSxpPStuWzFdWzFdLGU+dCYmKG49ZSxlPXQsdD1uKSxhPmkmJihuPWEsYT1pLGk9biksdi5wcmVjaXNpb24oeSkpOltbZSxhXSxbdCxpXV19LHYuc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6di5zdGVwTWlub3IoKX0sdi5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sZz0rdFsxXSx2KTpbcCxnXX0sdi5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3RbMF0sZD0rdFsxXSx2KTpbZixkXX0sdi5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K2YsYz1YbChhLGksOTApLHU9WmwoZSx0LHkpLGw9WGwocyxvLDkwKSxoPVpsKHIsbix5KSx2KTp5fSx2LmV4dGVudE1ham9yKFtbLTE4MCwxZS02LTkwXSxbMTgwLDkwLTFlLTZdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC0xZS02XSxbMTgwLDgwKzFlLTZdXSl9ZnVuY3Rpb24gUWwoKXtyZXR1cm4gSmwoKSgpfXZhciBLbCx0aCxlaCxuaCxyaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMF0qeWMscj10WzFdKnljLGk9ZVswXSp5YyxhPWVbMV0qeWMsbz14YyhyKSxzPVRjKHIpLGM9eGMoYSksdT1UYyhhKSxsPW8qeGMobiksaD1vKlRjKG4pLGY9Yyp4YyhpKSxkPWMqVGMoaSkscD0yKk9jKFNjKERjKGEtcikrbypjKkRjKGktbikpKSxnPVRjKHApLHk9cD9mdW5jdGlvbih0KXt2YXIgZT1UYyh0Kj1wKS9nLG49VGMocC10KS9nLHI9bipsK2UqZixpPW4qaCtlKmQsYT1uKnMrZSp1O3JldHVybltiYyhpLHIpKmdjLGJjKGEsU2MocipyK2kqaSkpKmdjXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipnYyxyKmdjXX07cmV0dXJuIHkuZGlzdGFuY2U9cCx5fSxpaD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYWg9c2MoKSxvaD1zYygpLHNoPXtwb2ludDpOYyxsaW5lU3RhcnQ6TmMsbGluZUVuZDpOYyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzaC5saW5lU3RhcnQ9Y2gsc2gubGluZUVuZD1oaH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3NoLmxpbmVTdGFydD1zaC5saW5lRW5kPXNoLnBvaW50PU5jLGFoLmFkZCh2YyhvaCkpLG9oLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWFoLzI7cmV0dXJuIGFoLnJlc2V0KCksdH19O2Z1bmN0aW9uIGNoKCl7c2gucG9pbnQ9dWh9ZnVuY3Rpb24gdWgodCxlKXtzaC5wb2ludD1saCxLbD1laD10LHRoPW5oPWV9ZnVuY3Rpb24gbGgodCxlKXtvaC5hZGQobmgqdC1laCplKSxlaD10LG5oPWV9ZnVuY3Rpb24gaGgoKXtsaChLbCx0aCl9dmFyIGZoPXNoLGRoPTEvMCxwaD1kaCxnaD0tZGgseWg9Z2g7dmFyIHZoLG1oLGJoLHhoLF9oPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8ZGgmJihkaD10KTt0PmdoJiYoZ2g9dCk7ZTxwaCYmKHBoPWUpO2U+eWgmJih5aD1lKX0sbGluZVN0YXJ0Ok5jLGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmMscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1tkaCxwaF0sW2doLHloXV07cmV0dXJuIGdoPXloPS0ocGg9ZGg9MS8wKSx0fX0sa2g9MCx3aD0wLEVoPTAsVGg9MCxDaD0wLFNoPTAsQWg9MCxNaD0wLE9oPTAsRGg9e3BvaW50Ok5oLGxpbmVTdGFydDpCaCxsaW5lRW5kOkZoLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0RoLmxpbmVTdGFydD1JaCxEaC5saW5lRW5kPWpofSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7RGgucG9pbnQ9TmgsRGgubGluZVN0YXJ0PUJoLERoLmxpbmVFbmQ9Rmh9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PU9oP1tBaC9PaCxNaC9PaF06U2g/W1RoL1NoLENoL1NoXTpFaD9ba2gvRWgsd2gvRWhdOltOYU4sTmFOXTtyZXR1cm4ga2g9d2g9RWg9VGg9Q2g9U2g9QWg9TWg9T2g9MCx0fX07ZnVuY3Rpb24gTmgodCxlKXtraCs9dCx3aCs9ZSwrK0VofWZ1bmN0aW9uIEJoKCl7RGgucG9pbnQ9TGh9ZnVuY3Rpb24gTGgodCxlKXtEaC5wb2ludD1QaCxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIFBoKHQsZSl7dmFyIG49dC1iaCxyPWUteGgsaT1TYyhuKm4rcipyKTtUaCs9aSooYmgrdCkvMixDaCs9aSooeGgrZSkvMixTaCs9aSxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIEZoKCl7RGgucG9pbnQ9Tmh9ZnVuY3Rpb24gSWgoKXtEaC5wb2ludD1SaH1mdW5jdGlvbiBqaCgpe1loKHZoLG1oKX1mdW5jdGlvbiBSaCh0LGUpe0RoLnBvaW50PVloLE5oKHZoPWJoPXQsbWg9eGg9ZSl9ZnVuY3Rpb24gWWgodCxlKXt2YXIgbj10LWJoLHI9ZS14aCxpPVNjKG4qbityKnIpO1RoKz1pKihiaCt0KS8yLENoKz1pKih4aCtlKS8yLFNoKz1pLEFoKz0oaT14aCp0LWJoKmUpKihiaCt0KSxNaCs9aSooeGgrZSksT2grPTMqaSxOaChiaD10LHhoPWUpfXZhciB6aD1EaDtmdW5jdGlvbiBVaCh0KXt0aGlzLl9jb250ZXh0PXR9VWgucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLHBjKX19LHJlc3VsdDpOY307dmFyICRoLFdoLFZoLEhoLEdoLHFoPXNjKCksWGg9e3BvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe1hoLnBvaW50PVpofSxsaW5lRW5kOmZ1bmN0aW9uKCl7JGgmJkpoKFdoLFZoKSxYaC5wb2ludD1OY30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7JGg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXskaD1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rcWg7cmV0dXJuIHFoLnJlc2V0KCksdH19O2Z1bmN0aW9uIFpoKHQsZSl7WGgucG9pbnQ9SmgsV2g9SGg9dCxWaD1HaD1lfWZ1bmN0aW9uIEpoKHQsZSl7SGgtPXQsR2gtPWUscWguYWRkKFNjKEhoKkhoK0doKkdoKSksSGg9dCxHaD1lfXZhciBRaD1YaDtmdW5jdGlvbiBLaCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB0Zih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1LaC5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6dGYoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT10Zih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19O3ZhciBlZj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksJGModCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oZmgpKSxmaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oUWgpKSxRaC5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuICRjKHQsbihfaCkpLF9oLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oemgpKSx6aC5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxpaCk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IEtoKTpuZXcgVWgoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sbmY9ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpyZih0KX19O2Z1bmN0aW9uIHJmKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgYWY7Zm9yKHZhciByIGluIHQpbltyXT10W3JdO3JldHVybiBuLnN0cmVhbT1lLG59fWZ1bmN0aW9uIGFmKCl7fWZ1bmN0aW9uIG9mKHQsZSxuKXt2YXIgcj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQobnVsbCksJGMobix0LnN0cmVhbShfaCkpLGUoX2gucmVzdWx0KCkpLG51bGwhPXImJnQuY2xpcEV4dGVudChyKSx0fWZ1bmN0aW9uIHNmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9ZVsxXVswXS1lWzBdWzBdLGk9ZVsxXVsxXS1lWzBdWzFdLGE9TWF0aC5taW4oci8oblsxXVswXS1uWzBdWzBdKSxpLyhuWzFdWzFdLW5bMF1bMV0pKSxvPStlWzBdWzBdKyhyLWEqKG5bMV1bMF0rblswXVswXSkpLzIscz0rZVswXVsxXSsoaS1hKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmEpLnRyYW5zbGF0ZShbbyxzXSl9KSxuKX1mdW5jdGlvbiBjZih0LGUsbil7cmV0dXJuIHNmKHQsW1swLDBdLGVdLG4pfWZ1bmN0aW9uIHVmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzBdLW5bMF1bMF0pLGE9KHItaSooblsxXVswXStuWzBdWzBdKSkvMixvPS1pKm5bMF1bMV07dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWZ1bmN0aW9uIGxmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzFdLW5bMF1bMV0pLGE9LWkqblswXVswXSxvPShyLWkqKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWFmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YWYscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIGhmPXhjKDMwKnljKSxmZj1mdW5jdGlvbih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyx1LGwsaCxmLGQscCxnLHkpe3ZhciB2PXUtcixtPWwtaSxiPXYqdittKm07aWYoYj40KmUmJmctLSl7dmFyIHg9bytmLF89cytkLGs9YytwLHc9U2MoeCp4K18qXytrKmspLEU9T2Moay89dyksVD12Yyh2YyhrKS0xKTwxZS02fHx2YyhhLWgpPDFlLTY/KGEraCkvMjpiYyhfLHgpLEM9dChULEUpLFM9Q1swXSxBPUNbMV0sTT1TLXIsTz1BLWksRD1tKk0tdipPOyhEKkQvYj5lfHx2YygodipNK20qTykvYi0uNSk+LjN8fG8qZitzKmQrYypwPGhmKSYmKG4ocixpLGEsbyxzLGMsUyxBLFQseC89dyxfLz13LGssZyx5KSx5LnBvaW50KFMsQSksbihTLEEsVCx4LF8sayx1LGwsaCxmLGQscCxnLHkpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksYSxvLHMsYyx1LGwsaCxmLGQscCxnPXtwb2ludDp5LGxpbmVTdGFydDp2LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLGcubGluZVN0YXJ0PXh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxnLmxpbmVTdGFydD12fX07ZnVuY3Rpb24geShuLHIpe249dChuLHIpLGUucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiB2KCl7bD1OYU4sZy5wb2ludD1tLGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbShyLGkpe3ZhciBhPUtjKFtyLGldKSxvPXQocixpKTtuKGwsaCx1LGYsZCxwLGw9b1swXSxoPW9bMV0sdT1yLGY9YVswXSxkPWFbMV0scD1hWzJdLDE2LGUpLGUucG9pbnQobCxoKX1mdW5jdGlvbiBiKCl7Zy5wb2ludD15LGUubGluZUVuZCgpfWZ1bmN0aW9uIHgoKXt2KCksZy5wb2ludD1fLGcubGluZUVuZD1rfWZ1bmN0aW9uIF8odCxlKXttKHI9dCxlKSxpPWwsYT1oLG89ZixzPWQsYz1wLGcucG9pbnQ9bX1mdW5jdGlvbiBrKCl7bihsLGgsdSxmLGQscCxpLGEscixvLHMsYywxNixlKSxnLmxpbmVFbmQ9YixiKCl9cmV0dXJuIGd9fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX07dmFyIGRmPXJmKHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqeWMsZSp5Yyl9fSk7ZnVuY3Rpb24gcGYodCxlLG4pe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bZSt0KnIsbi10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1lKS90LChuLWkpL3RdfSxyfWZ1bmN0aW9uIGdmKHQsZSxuLHIpe3ZhciBpPXhjKHIpLGE9VGMociksbz1pKnQscz1hKnQsYz1pL3QsdT1hL3QsbD0oYSpuLWkqZSkvdCxoPShhKmUraSpuKS90O2Z1bmN0aW9uIGYodCxyKXtyZXR1cm5bbyp0LXMqcitlLG4tcyp0LW8qcl19cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2MqdC11KmUrbCxoLXUqdC1jKmVdfSxmfWZ1bmN0aW9uIHlmKHQpe3JldHVybiB2ZigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIHZmKHQpe3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9MTUwLGY9NDgwLGQ9MjUwLHA9MCxnPTAseT0wLHY9MCxtPTAsYj0wLHg9bnVsbCxfPUVsLGs9bnVsbCx3PWloLEU9LjU7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gYyh0WzBdKnljLHRbMV0qeWMpfWZ1bmN0aW9uIEModCl7cmV0dXJuKHQ9Yy5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKmdjLHRbMV0qZ2NdfWZ1bmN0aW9uIFMoKXt2YXIgdD1nZihoLDAsMCxiKS5hcHBseShudWxsLGUocCxnKSkscj0oYj9nZjpwZikoaCxmLXRbMF0sZC10WzFdLGIpO3JldHVybiBuPWFsKHksdixtKSxzPXJsKGUsciksYz1ybChuLHMpLG89ZmYocyxFKSxBKCl9ZnVuY3Rpb24gQSgpe3JldHVybiB1PWw9bnVsbCxUfXJldHVybiBULnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PWRmKGZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKF8obyh3KGw9dCkpKSkpfSxULnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXZvaWQgMCxBKCkpOl99LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxrPXI9aT1hPW51bGwsQSgpKTp3fSxULmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rdD9UbCh4PXQqeWMpOih4PW51bGwsRWwpLEEoKSk6eCpnY30sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/KGs9cj1pPWE9bnVsbCxpaCk6Q2woaz0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksQSgpKTpudWxsPT1rP251bGw6W1trLHJdLFtpLGFdXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxTKCkpOmh9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sUygpKTpbZixkXX0sVC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqeWMsZz10WzFdJTM2MCp5YyxTKCkpOltwKmdjLGcqZ2NdfSxULnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10WzBdJTM2MCp5Yyx2PXRbMV0lMzYwKnljLG09dC5sZW5ndGg+Mj90WzJdJTM2MCp5YzowLFMoKSk6W3kqZ2MsdipnYyxtKmdjXX0sVC5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCp5YyxTKCkpOmIqZ2N9LFQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWZmKHMsRT10KnQpLEEoKSk6U2MoRSl9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKFQsdCxlKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNmKFQsdCxlKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB1ZihULHQsZSl9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKFQsdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxULmludmVydD1lLmludmVydCYmQyxTKCl9fWZ1bmN0aW9uIG1mKHQpe3ZhciBlPTAsbj1oYy8zLHI9dmYodCksaT1yKGUsbik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoZT10WzBdKnljLG49dFsxXSp5Yyk6W2UqZ2MsbipnY119LGl9ZnVuY3Rpb24gYmYodCxlKXt2YXIgbj1UYyh0KSxyPShuK1RjKGUpKS8yO2lmKHZjKHIpPDFlLTYpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLFRjKG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsT2MobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9U2MoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49U2MoaS0yKnIqVGMoZSkpL3I7cmV0dXJuW24qVGModCo9ciksYS1uKnhjKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksT2MoKGktKHQqdCtuKm4pKnIqcikvKDIqcikpXX0sb312YXIgeGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoYmYpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9LF9mPWZ1bmN0aW9uKCl7cmV0dXJuIHhmKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9O3ZhciBrZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPV9mKCkscz14ZigpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYz14ZigpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSx1PXtwb2ludDpmdW5jdGlvbih0LGUpe2E9W3QsZV19fTtmdW5jdGlvbiBsKHQpe3ZhciBlPXRbMF0sbz10WzFdO3JldHVybiBhPW51bGwsbi5wb2ludChlLG8pLGF8fChyLnBvaW50KGUsbyksYSl8fChpLnBvaW50KGUsbyksYSl9ZnVuY3Rpb24gaCgpe3JldHVybiB0PWU9bnVsbCxsfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1vLnNjYWxlKCksbj1vLnRyYW5zbGF0ZSgpLHI9KHRbMF0tblswXSkvZSxpPSh0WzFdLW5bMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/YzpvKS5pbnZlcnQodCl9LGwuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OihyPVtvLnN0cmVhbShlPW4pLHMuc3RyZWFtKG4pLGMuc3RyZWFtKG4pXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xOysrbjxpOylyW25dLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxsLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksYy5wcmVjaXNpb24odCksaCgpKTpvLnByZWNpc2lvbigpfSxsLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLGMuc2NhbGUodCksbC50cmFuc2xhdGUoby50cmFuc2xhdGUoKSkpOm8uc2NhbGUoKX0sbC50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG8udHJhbnNsYXRlKCk7dmFyIGU9by5zY2FsZSgpLGE9K3RbMF0sbD0rdFsxXTtyZXR1cm4gbj1vLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbYS0uNDU1KmUsbC0uMjM4KmVdLFthKy40NTUqZSxsKy4yMzgqZV1dKS5zdHJlYW0odSkscj1zLnRyYW5zbGF0ZShbYS0uMzA3KmUsbCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbYS0uNDI1KmUrMWUtNixsKy4xMiplKzFlLTZdLFthLS4yMTQqZS0xZS02LGwrLjIzNCplLTFlLTZdXSkuc3RyZWFtKHUpLGk9Yy50cmFuc2xhdGUoW2EtLjIwNSplLGwrLjIxMiplXSkuY2xpcEV4dGVudChbW2EtLjIxNCplKzFlLTYsbCsuMTY2KmUrMWUtNl0sW2EtLjExNSplLTFlLTYsbCsuMjM0KmUtMWUtNl1dKS5zdHJlYW0odSksaCgpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBzZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBsZihsLHQsZSl9LGwuc2NhbGUoMTA3MCl9O2Z1bmN0aW9uIHdmKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXhjKGUpLGk9eGMobiksYT10KHIqaSk7cmV0dXJuW2EqaSpUYyhlKSxhKlRjKG4pXX19ZnVuY3Rpb24gRWYodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9U2MoZSplK24qbiksaT10KHIpLGE9VGMoaSksbz14YyhpKTtyZXR1cm5bYmMoZSphLHIqbyksT2MociYmbiphL3IpXX19dmFyIFRmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4gU2MoMi8oMSt0KSl9KSk7VGYuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gMipPYyh0LzIpfSkpO3ZhciBDZj1mdW5jdGlvbigpe3JldHVybiB5ZihUZikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LFNmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4odD1NYyh0KSkmJnQvVGModCl9KSk7U2YuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTt2YXIgQWY9ZnVuY3Rpb24oKXtyZXR1cm4geWYoU2YpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX07ZnVuY3Rpb24gTWYodCxlKXtyZXR1cm5bdCx3YyhBYygoZmMrZSkvMikpXX1NZi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyKm1jKGtjKGUpKS1mY119O3ZhciBPZj1mdW5jdGlvbigpe3JldHVybiBEZihNZikuc2NhbGUoOTYxL3BjKX07ZnVuY3Rpb24gRGYodCl7dmFyIGUsbixyLGk9eWYodCksYT1pLmNlbnRlcixvPWkuc2NhbGUscz1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCx1PW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBhPWhjKm8oKSxzPWkodWwoaS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGMobnVsbD09dT9bW3NbMF0tYSxzWzFdLWFdLFtzWzBdK2Esc1sxXSthXV06dD09PU1mP1tbTWF0aC5tYXgoc1swXS1hLHUpLGVdLFtNYXRoLm1pbihzWzBdK2Esbikscl1dOltbdSxNYXRoLm1heChzWzFdLWEsZSldLFtuLE1hdGgubWluKHNbMV0rYSxyKV1dKX1yZXR1cm4gaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxsKCkpOm8oKX0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksbCgpKTpzKCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLGwoKSk6YSgpfSxpLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/dT1lPW49cj1udWxsOih1PSt0WzBdWzBdLGU9K3RbMF1bMV0sbj0rdFsxXVswXSxyPSt0WzFdWzFdKSxsKCkpOm51bGw9PXU/bnVsbDpbW3UsZV0sW24scl1dfSxsKCl9ZnVuY3Rpb24gTmYodCl7cmV0dXJuIEFjKChmYyt0KS8yKX1mdW5jdGlvbiBCZih0LGUpe3ZhciBuPXhjKHQpLHI9dD09PWU/VGModCk6d2Mobi94YyhlKSkvd2MoTmYoZSkvTmYodCkpLGk9bipFYyhOZih0KSxyKS9yO2lmKCFyKXJldHVybiBNZjtmdW5jdGlvbiBhKHQsZSl7aT4wP2U8MWUtNi1mYyYmKGU9MWUtNi1mYyk6ZT5mYy0xZS02JiYoZT1mYy0xZS02KTt2YXIgbj1pL0VjKE5mKGUpLHIpO3JldHVybltuKlRjKHIqdCksaS1uKnhjKHIqdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWktZSxhPUNjKHIpKlNjKHQqdCtuKm4pO3JldHVybltiYyh0LHZjKG4pKS9yKkNjKG4pLDIqbWMoRWMoaS9hLDEvcikpLWZjXX0sYX12YXIgTGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoQmYpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O2Z1bmN0aW9uIFBmKHQsZSl7cmV0dXJuW3QsZV19UGYuaW52ZXJ0PVBmO3ZhciBGZj1mdW5jdGlvbigpe3JldHVybiB5ZihQZikuc2NhbGUoMTUyLjYzKX07ZnVuY3Rpb24gSWYodCxlKXt2YXIgbj14Yyh0KSxyPXQ9PT1lP1RjKHQpOihuLXhjKGUpKS8oZS10KSxpPW4vcit0O2lmKHZjKHIpPDFlLTYpcmV0dXJuIFBmO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qVGMoYSksaS1uKnhjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksaS1DYyhyKSpTYyh0KnQrbipuKV19LGF9dmFyIGpmPWZ1bmN0aW9uKCl7cmV0dXJuIG1mKElmKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxSZj0xLjM0MDI2NCxZZj0tLjA4MTEwNix6Zj04OTNlLTYsVWY9LjAwMzc5NiwkZj1TYygzKS8yO2Z1bmN0aW9uIFdmKHQsZSl7dmFyIG49T2MoJGYqVGMoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3QqeGMobikvKCRmKihSZiszKllmKnIraSooNyp6Zis5KlVmKnIpKSksbiooUmYrWWYqcitpKih6ZitVZipyKSldfVdmLmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyPWUsaT1yKnIsYT1pKmkqaSxvPTA7bzwxMiYmKGE9KGk9KHItPW49KHIqKFJmK1lmKmkrYSooemYrVWYqaSkpLWUpLyhSZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKSkqcikqaSppLCEodmMobik8MWUtMTIpKTsrK28pO3JldHVyblskZip0KihSZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKS94YyhyKSxPYyhUYyhyKS8kZildfTt2YXIgVmY9ZnVuY3Rpb24oKXtyZXR1cm4geWYoV2YpLnNjYWxlKDE3Ny4xNTgpfTtmdW5jdGlvbiBIZih0LGUpe3ZhciBuPXhjKGUpLHI9eGModCkqbjtyZXR1cm5bbipUYyh0KS9yLFRjKGUpL3JdfUhmLmludmVydD1FZihtYyk7dmFyIEdmPWZ1bmN0aW9uKCl7cmV0dXJuIHlmKEhmKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfTtmdW5jdGlvbiBxZih0LGUsbixyKXtyZXR1cm4gMT09PXQmJjE9PT1lJiYwPT09biYmMD09PXI/aWg6cmYoe3BvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K24sYSplK3IpfX0pfXZhciBYZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPTEscz0wLGM9MCx1PTEsbD0xLGg9aWgsZj1udWxsLGQ9aWg7ZnVuY3Rpb24gcCgpe3JldHVybiByPWk9bnVsbCxhfXJldHVybiBhPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIHImJmk9PT10P3I6cj1oKGQoaT10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXIsZj10PWU9bj1udWxsLHAoKSk6ZH0sY2xpcEV4dGVudDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT1yPyhmPXQ9ZT1uPW51bGwsaWgpOkNsKGY9K3JbMF1bMF0sdD0rclswXVsxXSxlPStyWzFdWzBdLG49K3JbMV1bMV0pLHAoKSk6bnVsbD09Zj9udWxsOltbZix0XSxbZSxuXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXFmKChvPSt0KSp1LG8qbCxzLGMpLHAoKSk6b30sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXFmKG8qdSxvKmwscz0rdFswXSxjPSt0WzFdKSxwKCkpOltzLGNdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1xZihvKih1PXQ/LTE6MSksbypsLHMsYykscCgpKTp1PDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXFmKG8qdSxvKihsPXQ/LTE6MSkscyxjKSxwKCkpOmw8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKGEsdCxlKX0sZml0U2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjZihhLHQsZSl9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHVmKGEsdCxlKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKGEsdCxlKX19fTtmdW5jdGlvbiBaZih0LGUpe3ZhciBuPWUqZSxyPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK3IqKHIqKC4wMDM5NzEqbi0uMDAxNTI5KnIpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K3IqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqcikpKV19WmYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lLGk9MjU7ZG97dmFyIGE9cipyLG89YSphO3ItPW49KHIqKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZSh2YyhuKT4xZS02JiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfTt2YXIgSmY9ZnVuY3Rpb24oKXtyZXR1cm4geWYoWmYpLnNjYWxlKDE3NS4yOTUpfTtmdW5jdGlvbiBRZih0LGUpe3JldHVyblt4YyhlKSpUYyh0KSxUYyhlKV19UWYuaW52ZXJ0PUVmKE9jKTt2YXIgS2Y9ZnVuY3Rpb24oKXtyZXR1cm4geWYoUWYpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArMWUtNil9O2Z1bmN0aW9uIHRkKHQsZSl7dmFyIG49eGMoZSkscj0xK3hjKHQpKm47cmV0dXJuW24qVGModCkvcixUYyhlKS9yXX10ZC5pbnZlcnQ9RWYoKGZ1bmN0aW9uKHQpe3JldHVybiAyKm1jKHQpfSkpO3ZhciBlZD1mdW5jdGlvbigpe3JldHVybiB5Zih0ZCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX07ZnVuY3Rpb24gbmQodCxlKXtyZXR1cm5bd2MoQWMoKGZjK2UpLzIpKSwtdF19bmQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqbWMoa2ModCkpLWZjXX07dmFyIHJkPWZ1bmN0aW9uKCl7dmFyIHQ9RGYobmQpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfTtmdW5jdGlvbiBpZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBhZCh0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBvZCh0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9dmFyIHNkPWZ1bmN0aW9uKCl7dmFyIHQ9aWQsZT0xLG49MSxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbz0wO2kuZWFjaEFmdGVyKChmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoYWQsMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShvZCwwKX0obikpOihlLng9YT9vKz10KGUsYSk6MCxlLnk9MCxhPWUpfSkpO3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oaSksYz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGkpLHU9cy54LXQocyxjKS8yLGw9Yy54K3QoYyxzKS8yO3JldHVybiBpLmVhY2hBZnRlcihyP2Z1bmN0aW9uKHQpe3QueD0odC54LWkueCkqZSx0Lnk9KGkueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LXUpLyhsLXUpKmUsdC55PSgxLShpLnk/dC55L2kueToxKSkqbn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfTtmdW5jdGlvbiBjZCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIHVkKHQsZSl7dmFyIG4scixpLGEsbyxzPW5ldyBkZCh0KSxjPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9bGQpO249dS5wb3AoKTspaWYoYyYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKG89aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvKSxhPW8tMTthPj0wOy0tYSl1LnB1c2gocj1uLmNoaWxkcmVuW2FdPW5ldyBkZChpW2FdKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKGZkKX1mdW5jdGlvbiBsZCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBoZCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gZmQodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBkZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1kZC5wcm90b3R5cGU9dWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkZCxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihjZCl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10aGlzLG89W2FdO2Rve2ZvcihlPW8ucmV2ZXJzZSgpLG89W107YT1lLnBvcCgpOylpZih0KGEpLG49YS5jaGlsZHJlbilmb3Iocj0wLGk9bi5sZW5ndGg7cjxpOysrcilvLnB1c2gobltyXSl9d2hpbGUoby5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpPXRoaXMsYT1baV0sbz1bXTtpPWEucG9wKCk7KWlmKG8ucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24pYS5wdXNoKGVbbl0pO2Zvcig7aT1vLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksZT1yLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4paS5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxyPWUuY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KW4rPXJbaV0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxyPWUuYW5jZXN0b3JzKCksaT1udWxsO3Q9bi5wb3AoKSxlPXIucG9wKCk7Zm9yKDt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsci5wdXNoKGUpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gdWQodGhpcykuZWFjaEJlZm9yZShoZCl9fTt2YXIgcGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBnZD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPTAsaT0odD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXQubGVuZ3RoO3I7KW49TWF0aC5yYW5kb20oKSpyLS18MCxlPXRbcl0sdFtyXT10W25dLHRbbl09ZTtyZXR1cm4gdH0ocGQuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO3I8aTspZT10W3JdLG4mJm1kKG4sZSk/KytyOihuPXhkKGE9eWQoYSxlKSkscj0wKTtyZXR1cm4gbn07ZnVuY3Rpb24geWQodCxlKXt2YXIgbixyO2lmKGJkKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYodmQoZSx0W25dKSYmYmQoX2QodFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKHI9bisxO3I8dC5sZW5ndGg7KytyKWlmKHZkKF9kKHRbbl0sdFtyXSksZSkmJnZkKF9kKHRbbl0sZSksdFtyXSkmJnZkKF9kKHRbcl0sZSksdFtuXSkmJmJkKGtkKHRbbl0sdFtyXSxlKSx0KSlyZXR1cm5bdFtuXSx0W3JdLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiB2ZCh0LGUpe3ZhciBuPXQuci1lLnIscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48cipyK2kqaX1mdW5jdGlvbiBtZCh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIGJkKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIW1kKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geGQodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiBfZCh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4ga2QodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIF9kKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGM9YS1uLHU9by1yLGw9cy1pLGg9TWF0aC5zcXJ0KGMqYyt1KnUpO3JldHVybnt4OihuK2ErYy9oKmwpLzIseToocitvK3UvaCpsKS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBrZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGM9ZS5yLHU9bi54LGw9bi55LGg9bi5yLGY9ci1vLGQ9ci11LHA9aS1zLGc9aS1sLHk9Yy1hLHY9aC1hLG09cipyK2kqaS1hKmEsYj1tLW8qby1zKnMrYypjLHg9bS11KnUtbCpsK2gqaCxfPWQqcC1mKmcsaz0ocCp4LWcqYikvKDIqXyktcix3PShnKnktcCp2KS9fLEU9KGQqYi1mKngpLygyKl8pLWksVD0oZip2LWQqeSkvXyxDPXcqdytUKlQtMSxTPTIqKGErayp3K0UqVCksQT1rKmsrRSpFLWEqYSxNPS0oQz8oUytNYXRoLnNxcnQoUypTLTQqQypBKSkvKDIqQyk6QS9TKTtyZXR1cm57eDpyK2srdypNLHk6aStFK1QqTSxyOk19fWZ1bmN0aW9uIHdkKHQsZSxuKXt2YXIgcixpLGEsbyxzPXQueC1lLngsYz10LnktZS55LHU9cypzK2MqYzt1PyhpPWUucituLnIsaSo9aSxvPXQucituLnIsaT4obyo9byk/KHI9KHUrby1pKS8oMip1KSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54LXIqcy1hKmMsbi55PXQueS1yKmMrYSpzKToocj0odStpLW8pLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS91LXIqcikpLG4ueD1lLngrcipzLWEqYyxuLnk9ZS55K3IqYythKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gRWQodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBUZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLGE9KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiBDZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gU2QodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihuPXRbMV0sZS54PS1uLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7d2QobixlLHI9dFsyXSksZT1uZXcgQ2QoZSksbj1uZXcgQ2Qobikscj1uZXcgQ2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3dkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBDZChyKSxjPW4ubmV4dCx1PWUucHJldmlvdXMsbD1uLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKEVkKGMuXyxyLl8pKXtuPWMsZS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoRWQodS5fLHIuXykpeyhlPXUpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9dS5fLnIsdT11LnByZXZpb3VzfX13aGlsZShjIT09dS5uZXh0KTtmb3Ioci5wcmV2aW91cz1lLHIubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49cixhPVRkKGUpOyhyPXIubmV4dCkhPT1uOykobz1UZChyKSk8YSYmKGU9cixhPW8pO249ZS5uZXh0fWZvcihlPVtuLl9dLHI9bjsocj1yLm5leHQpIT09bjspZS5wdXNoKHIuXyk7Zm9yKHI9Z2QoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09ci54LGUueS09ci55O3JldHVybiByLnJ9dmFyIEFkPWZ1bmN0aW9uKHQpe3JldHVybiBTZCh0KSx0fTtmdW5jdGlvbiBNZCh0KXtyZXR1cm4gbnVsbD09dD9udWxsOk9kKHQpfWZ1bmN0aW9uIE9kKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBEZCgpe3JldHVybiAwfXZhciBOZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIEJkKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9dmFyIExkPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEsbj0xLHI9RGQ7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9bi8yLHQ/aS5lYWNoQmVmb3JlKFBkKHQpKS5lYWNoQWZ0ZXIoRmQociwuNSkpLmVhY2hCZWZvcmUoSWQoMSkpOmkuZWFjaEJlZm9yZShQZChCZCkpLmVhY2hBZnRlcihGZChEZCwxKSkuZWFjaEFmdGVyKEZkKHIsaS5yL01hdGgubWluKGUsbikpKS5lYWNoQmVmb3JlKElkKE1hdGgubWluKGUsbikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU1kKGUpLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLGkpOltlLG5dfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksaSk6cn0saX07ZnVuY3Rpb24gUGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBGZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLGksYSxvPXIubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKXJbaV0ucis9cztpZihhPVNkKHIpLHMpZm9yKGk9MDtpPG87KytpKXJbaV0uci09cztuLnI9YStzfX19ZnVuY3Rpb24gSWQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19dmFyIGpkPWZ1bmN0aW9uKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX0sUmQ9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsYz1vLmxlbmd0aCx1PXQudmFsdWUmJihyLWUpL3QudmFsdWU7KytzPGM7KShhPW9bc10pLnkwPW4sYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqdX0sWWQ9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1uLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmUmQocixyLngwLHQqKHIuZGVwdGgrMSkvZSxyLngxLHQqKHIuZGVwdGgrMikvZSk7dmFyIGk9ci54MCxhPXIueTAsbz1yLngxLW4scz1yLnkxLW47bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxyLngwPWksci55MD1hLHIueDE9byxyLnkxPXN9fShlLGEpKSxyJiZpLmVhY2hCZWZvcmUoamQpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSk6bn0saX0semQ9e2RlcHRoOi0xfSxVZD17fTtmdW5jdGlvbiAkZCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBXZCh0KXtyZXR1cm4gdC5wYXJlbnRJZH12YXIgVmQ9ZnVuY3Rpb24oKXt2YXIgdD0kZCxlPVdkO2Z1bmN0aW9uIG4obil7dmFyIHIsaSxhLG8scyxjLHUsbD1uLmxlbmd0aCxoPW5ldyBBcnJheShsKSxmPXt9O2ZvcihpPTA7aTxsOysraSlyPW5baV0scz1oW2ldPW5ldyBkZChyKSxudWxsIT0oYz10KHIsaSxuKSkmJihjKz0iIikmJihmW3U9IiQiKyhzLmlkPWMpXT11IGluIGY/VWQ6cyk7Zm9yKGk9MDtpPGw7KytpKWlmKHM9aFtpXSxudWxsIT0oYz1lKG5baV0saSxuKSkmJihjKz0iIikpe2lmKCEobz1mWyIkIitjXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2MpO2lmKG89PT1VZCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitjKTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PXpkLGEuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tbH0pKS5lYWNoQmVmb3JlKGZkKSxhLnBhcmVudD1udWxsLGw+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9T2QoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1PZCh0KSxuKTplfSxufTtmdW5jdGlvbiBIZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBHZCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIHFkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gWGQodCxlLG4pe3ZhciByPW4vKGUuaS10LmkpO2UuYy09cixlLnMrPW4sdC5jKz1yLGUueis9bixlLm0rPW59ZnVuY3Rpb24gWmQodCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gSmQodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1KZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkZC5wcm90b3R5cGUpO3ZhciBRZD1mdW5jdGlvbigpe3ZhciB0PUhkLGU9MSxuPTEscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpLGEsbz1uZXcgSmQodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKHI9ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPXIubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gobj1lLmNoaWxkcmVuW2ldPW5ldyBKZChyW2ldLGkpKSxuLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgSmQobnVsbCwwKSkuY2hpbGRyZW49W29dLG99KGkpO2lmKGMuZWFjaEFmdGVyKGEpLGMucGFyZW50Lm09LWMueixjLmVhY2hCZWZvcmUobykscilpLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgdT1pLGw9aSxoPWk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng8dS54JiYodT10KSx0Lng+bC54JiYobD10KSx0LmRlcHRoPmguZGVwdGgmJihoPXQpfSkpO3ZhciBmPXU9PT1sPzE6dCh1LGwpLzIsZD1mLXUueCxwPWUvKGwueCtmK2QpLGc9bi8oaC5kZXB0aHx8MSk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng9KHQueCtkKSpwLHQueT10LmRlcHRoKmd9KSl9cmV0dXJuIGl9ZnVuY3Rpb24gYShlKXt2YXIgbj1lLmNoaWxkcmVuLHI9ZS5wYXJlbnQuY2hpbGRyZW4saT1lLmk/cltlLmktMV06bnVsbDtpZihuKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxyPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7LS1hPj0wOykoZT1pW2FdKS56Kz1uLGUubSs9bixuKz1lLnMrKHIrPWUuYyl9KGUpO3ZhciBhPShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO2k/KGUuej1pLnordChlLl8saS5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgaSYmKGUuej1pLnordChlLl8saS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLG4scil7aWYobil7Zm9yKHZhciBpLGE9ZSxvPWUscz1uLGM9YS5wYXJlbnQuY2hpbGRyZW5bMF0sdT1hLm0sbD1vLm0saD1zLm0sZj1jLm07cz1xZChzKSxhPUdkKGEpLHMmJmE7KWM9R2QoYyksKG89cWQobykpLmE9ZSwoaT1zLnoraC1hLnotdSt0KHMuXyxhLl8pKT4wJiYoWGQoWmQocyxlLHIpLGUsaSksdSs9aSxsKz1pKSxoKz1zLm0sdSs9YS5tLGYrPWMubSxsKz1vLm07cyYmIXFkKG8pJiYoby50PXMsby5tKz1oLWwpLGEmJiFHZChjKSYmKGMudD1hLGMubSs9dS1mLHI9ZSl9cmV0dXJuIHJ9KGUsaSxlLnBhcmVudC5BfHxyWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpufXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfSxLZD1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSp1fSx0cD0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gZXAodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzLGMsdSxsLGgsZixkLHAsZyx5LHY9W10sbT1lLmNoaWxkcmVuLGI9MCx4PTAsXz1tLmxlbmd0aCxrPWUudmFsdWU7YjxfOyl7Yz1pLW4sdT1hLXI7ZG97bD1tW3grK10udmFsdWV9d2hpbGUoIWwmJng8Xyk7Zm9yKGg9Zj1sLHk9bCpsKihnPU1hdGgubWF4KHUvYyxjL3UpLyhrKnQpKSxwPU1hdGgubWF4KGYveSx5L2gpO3g8XzsrK3gpe2lmKGwrPXM9bVt4XS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cykseT1sKmwqZywoZD1NYXRoLm1heChmL3kseS9oKSk+cCl7bC09czticmVha31wPWR9di5wdXNoKG89e3ZhbHVlOmwsZGljZTpjPHUsY2hpbGRyZW46bS5zbGljZShiLHgpfSksby5kaWNlP1JkKG8sbixyLGksaz9yKz11KmwvazphKTpLZChvLG4scixrP24rPWMqbC9rOmksYSksay09bCxiPXh9cmV0dXJuIHZ9dmFyIG5wPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLGEpe2VwKGUsdCxuLHIsaSxhKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSh0cCkscnA9ZnVuY3Rpb24oKXt2YXIgdD1ucCxlPSExLG49MSxyPTEsaT1bMF0sYT1EZCxvPURkLHM9RGQsYz1EZCx1PURkO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPXIsdC5lYWNoQmVmb3JlKGgpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShqZCksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPWlbZS5kZXB0aF0scj1lLngwK24sbD1lLnkwK24saD1lLngxLW4sZj1lLnkxLW47aDxyJiYocj1oPShyK2gpLzIpLGY8bCYmKGw9Zj0obCtmKS8yKSxlLngwPXIsZS55MD1sLGUueDE9aCxlLnkxPWYsZS5jaGlsZHJlbiYmKG49aVtlLmRlcHRoKzFdPWEoZSkvMixyKz11KGUpLW4sbCs9byhlKS1uLChoLT1zKGUpLW4pPHImJihyPWg9KHIraCkvMiksKGYtPWMoZSktbik8bCYmKGw9Zj0obCtmKS8yKSx0KGUscixsLGgsZikpfXJldHVybiBsLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxsKTplfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0scj0rdFsxXSxsKTpbbixyXX0sbC50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU9kKGUpLGwpOnR9LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9sLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6bC5wYWRkaW5nSW5uZXIoKX0sbC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6YX0sbC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOmwucGFkZGluZ1RvcCgpfSxsLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6b30sbC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6c30sbC5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmQoK3QpLGwpOmN9LGwucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6dX0sbH0saXA9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMrMSk7Zm9yKHVbMF09bz1hPTA7YTxjOysrYSl1W2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciBsPXNbZV07cmV0dXJuIGwueDA9aSxsLnkwPWEsbC54MT1vLHZvaWQobC55MT1jKX12YXIgaD11W2VdLGY9ci8yK2gsZD1lKzEscD1uLTE7Zm9yKDtkPHA7KXt2YXIgZz1kK3A+Pj4xO3VbZ108Zj9kPWcrMTpwPWd9Zi11W2QtMV08dVtkXS1mJiZlKzE8ZCYmLS1kO3ZhciB5PXVbZF0taCx2PXIteTtpZihvLWk+Yy1hKXt2YXIgbT0oaSp2K28qeSkvcjt0KGUsZCx5LGksYSxtLGMpLHQoZCxuLHYsbSxhLG8sYyl9ZWxzZXt2YXIgYj0oYSp2K2MqeSkvcjt0KGUsZCx5LGksYSxvLGIpLHQoZCxuLHYsaSxiLG8sYyl9fSgwLGMsdC52YWx1ZSxlLG4scixpKX0sYXA9ZnVuY3Rpb24odCxlLG4scixpKXsoMSZ0LmRlcHRoP0tkOlJkKSh0LGUsbixyLGkpfSxvcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGMsdSxsLGg9LTEsZj1vLmxlbmd0aCxkPXQudmFsdWU7KytoPGY7KXtmb3IoYz0ocz1vW2hdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxsPWMubGVuZ3RoO3U8bDsrK3Upcy52YWx1ZSs9Y1t1XS52YWx1ZTtzLmRpY2U/UmQocyxuLHIsaSxyKz0oYS1yKSpzLnZhbHVlL2QpOktkKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxhKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1lcChlLHQsbixyLGksYSksby5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KHRwKSxzcD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX0sY3A9ZnVuY3Rpb24odCxlKXt2YXIgbj11bigrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW4odCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX0sdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19LGxwPU1hdGguU1FSVDI7ZnVuY3Rpb24gaHAodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9dmFyIGZwPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sYz1lWzFdLHU9ZVsyXSxsPXMtaSxoPWMtYSxmPWwqbCtoKmg7aWYoZjwxZS0xMilyPU1hdGgubG9nKHUvbykvbHAsbj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmwsYSt0KmgsbypNYXRoLmV4cChscCp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSxnPSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7cj0odi15KS9scCxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCpyLHM9aHAoeSksYz1vLygyKmQpKihzKihlPWxwKm4reSwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh5KSk7cmV0dXJuW2krYypsLGErYypoLG8qcy9ocChscCpuK3kpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn07ZnVuY3Rpb24gZHAodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT10bihlKSkuaCwobj10bihuKSkuaCksaT1obihlLnMsbi5zKSxhPWhuKGUubCxuLmwpLG89aG4oZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9aSh0KSxlLmw9YSh0KSxlLm9wYWNpdHk9byh0KSxlKyIifX19dmFyIHBwPWRwKHVuKSxncD1kcChobik7ZnVuY3Rpb24geXAodCxlKXt2YXIgbj1obigodD1wYSh0KSkubCwoZT1wYShlKSkubCkscj1obih0LmEsZS5hKSxpPWhuKHQuYixlLmIpLGE9aG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9cihlKSx0LmI9aShlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1mdW5jdGlvbiB2cCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWthKGUpKS5oLChuPWthKG4pKS5oKSxpPWhuKGUuYyxuLmMpLGE9aG4oZS5sLG4ubCksbz1obihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUuYz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX12YXIgbXA9dnAodW4pLGJwPXZwKGhuKTtmdW5jdGlvbiB4cCh0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtmdW5jdGlvbiByKGUscil7dmFyIGk9dCgoZT1PYShlKSkuaCwocj1PYShyKSkuaCksYT1obihlLnMsci5zKSxvPWhuKGUubCxyLmwpLHM9aG4oZS5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9YSh0KSxlLmw9byhNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixyLmdhbW1hPWUscn0oMSl9dmFyIF9wPXhwKHVuKSxrcD14cChobik7ZnVuY3Rpb24gd3AodCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KHI8MD8wOnIpO248cjspYVtuXT10KGksaT1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIGFbZV0odC1lKX19dmFyIEVwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxyPTA7cjxlOysrciluW3JdPXQoci8oZS0xKSk7cmV0dXJuIG59LFRwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sYT0wOysrbjxyOyllPWksaT10W25dLGErPWVbMV0qaVswXS1lWzBdKmlbMV07cmV0dXJuIGEvMn0sQ3A9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9MCxvPTAscz10W2ktMV0sYz0wOysrcjxpOyllPXMscz10W3JdLGMrPW49ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpuLG8rPShlWzFdK3NbMV0pKm47cmV0dXJuW2EvKGMqPTMpLG8vY119O2Z1bmN0aW9uIFNwKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIEFwKHQpe2Zvcih2YXIgZSxuLHIsaT10Lmxlbmd0aCxhPVswLDFdLG89MixzPTI7czxpOysrcyl7Zm9yKDtvPjEmJihlPXRbYVtvLTJdXSxuPXRbYVtvLTFdXSxyPXRbc10sKG5bMF0tZVswXSkqKHJbMV0tZVsxXSktKG5bMV0tZVsxXSkqKHJbMF0tZVswXSk8PTApOyktLW87YVtvKytdPXN9cmV0dXJuIGEuc2xpY2UoMCxvKX12YXIgTXA9ZnVuY3Rpb24odCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChTcCksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9QXAociksbz1BcChpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sdT1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKXUucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKXUucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gdX0sT3A9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixpPXQubGVuZ3RoLGE9dFtpLTFdLG89ZVswXSxzPWVbMV0sYz1hWzBdLHU9YVsxXSxsPSExLGg9MDtoPGk7KytoKW49KGE9dFtoXSlbMF0sKHI9YVsxXSk+cyE9dT5zJiZvPChjLW4pKihzLXIpLyh1LXIpK24mJihsPSFsKSxjPW4sdT1yO3JldHVybiBsfSxEcD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1hWzBdLHM9YVsxXSxjPTA7KytyPGk7KWU9byxuPXMsZS09bz0oYT10W3JdKVswXSxuLT1zPWFbMV0sYys9TWF0aC5zcXJ0KGUqZStuKm4pO3JldHVybiBjfSxOcD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfSxCcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLExwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGk7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9cilhPXIscj1udWxsO2Vsc2UgZG97cj0yKmUoKS0xLGE9MiplKCktMSxpPXIqcithKmF9d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrbiphKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLFBwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbigpe3ZhciB0PUxwLnNvdXJjZShlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxGcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAscj0wO3I8dDsrK3Ipbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCksSXA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPUZwLnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxqcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCk7ZnVuY3Rpb24gUnAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZShlKS5kb21haW4odCl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWXAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLmludGVycG9sYXRvcih0KTticmVhaztkZWZhdWx0OnRoaXMuaW50ZXJwb2xhdG9yKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc312YXIgenA9QXJyYXkucHJvdG90eXBlLFVwPXpwLm1hcCwkcD16cC5zbGljZSxXcD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBWcCgpe3ZhciB0PUppKCksZT1bXSxuPVtdLHI9V3A7ZnVuY3Rpb24gaShpKXt2YXIgYT1pKyIiLG89dC5nZXQoYSk7aWYoIW8pe2lmKHIhPT1XcClyZXR1cm4gcjt0LnNldChhLG89ZS5wdXNoKGkpKX1yZXR1cm4gblsoby0xKSVuLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PUppKCk7Zm9yKHZhciByLGEsbz0tMSxzPW4ubGVuZ3RoOysrbzxzOyl0LmhhcyhhPShyPW5bb10pKyIiKXx8dC5zZXQoYSxlLnB1c2gocikpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksaSk6bi5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVnAoZSxuKS51bmtub3duKHIpfSxScC5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiBIcCgpe3ZhciB0LGUsbj1WcCgpLnVua25vd24odm9pZCAwKSxyPW4uZG9tYWluLGk9bi5yYW5nZSxhPVswLDFdLG89ITEscz0wLGM9MCx1PS41O2Z1bmN0aW9uIGwoKXt2YXIgbj1yKCkubGVuZ3RoLGw9YVsxXTxhWzBdLGg9YVtsLTBdLGY9YVsxLWxdO3Q9KGYtaCkvTWF0aC5tYXgoMSxuLXMrMipjKSxvJiYodD1NYXRoLmZsb29yKHQpKSxoKz0oZi1oLXQqKG4tcykpKnUsZT10KigxLXMpLG8mJihoPU1hdGgucm91bmQoaCksZT1NYXRoLnJvdW5kKGUpKTt2YXIgZD1rKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGgrdCplfSkpO3JldHVybiBpKGw/ZC5yZXZlcnNlKCk6ZCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbCgpKTpyKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Wyt0WzBdLCt0WzFdXSxsKCkpOmEuc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPVsrdFswXSwrdFsxXV0sbz0hMCxsKCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxsKCkpOm99LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGM9K3QpLGwoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSx0KSxsKCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LGwoKSk6Y30sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGwoKSk6dX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhwKHIoKSxhKS5yb3VuZChvKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGMpLmFsaWduKHUpfSxScC5hcHBseShsKCksYXJndW1lbnRzKX1mdW5jdGlvbiBHcCh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBHcChlKCkpfSx0fWZ1bmN0aW9uIHFwKCl7cmV0dXJuIEdwKEhwLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBYcD1mdW5jdGlvbih0KXtyZXR1cm4rdH0sWnA9WzAsMV07ZnVuY3Rpb24gSnAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUXAodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KG49aXNOYU4oZSk/TmFOOi41LGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgbn1mdW5jdGlvbiBLcCh0KXt2YXIgZSxuPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBuPnImJihlPW4sbj1yLHI9ZSksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KG4sTWF0aC5taW4ocix0KSl9fWZ1bmN0aW9uIHRnKHQsZSxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBpPHI/KHI9UXAoaSxyKSxhPW4obyxhKSk6KHI9UXAocixpKSxhPW4oYSxvKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIGVnKHQsZSxuKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK288cjspaVtvXT1RcCh0W29dLHRbbysxXSksYVtvXT1uKGVbb10sZVtvKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49Yyh0LGUsMSxyKS0xO3JldHVybiBhW25dKGlbbl0oZSkpfX1mdW5jdGlvbiBuZyh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiByZygpe3ZhciB0LGUsbixyLGksYSxvPVpwLHM9WnAsYz1Bbix1PUpwO2Z1bmN0aW9uIGwoKXtyZXR1cm4gcj1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCk+Mj9lZzp0ZyxpPWE9bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246KGl8fChpPXIoby5tYXAodCkscyxjKSkpKHQodShlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gdShlKChhfHwoYT1yKHMsby5tYXAodCksX24pKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89VXAuY2FsbCh0LFhwKSx1PT09SnB8fCh1PUtwKG8pKSxsKCkpOm8uc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0kcC5jYWxsKHQpLGwoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9JHAuY2FsbCh0KSxjPXVwLGwoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10P0twKG8pOkpwLGgpOnUhPT1KcH0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGwoKSk6Y30saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixyKXtyZXR1cm4gdD1uLGU9cixsKCl9fWZ1bmN0aW9uIGlnKHQsZSl7cmV0dXJuIHJnKCkodCxlKX12YXIgYWc9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYT1BKHQsZSxuKTtzd2l0Y2goKHI9VnMobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9YWMoYSxvKSl8fChyLnByZWNpc2lvbj1pKSxacyhyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPW9jKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9aWMoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gWHMocil9O2Z1bmN0aW9uIG9nKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gQyhuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSgpO3JldHVybiBhZyhyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGk9ZSgpLGE9MCxvPWkubGVuZ3RoLTEscz1pW2FdLGM9aVtvXTtyZXR1cm4gYzxzJiYocj1zLHM9YyxjPXIscj1hLGE9byxvPXIpLChyPVMocyxjLG4pKT4wP3I9UyhzPU1hdGguZmxvb3Iocy9yKSpyLGM9TWF0aC5jZWlsKGMvcikqcixuKTpyPDAmJihyPVMocz1NYXRoLmNlaWwocypyKS9yLGM9TWF0aC5mbG9vcihjKnIpL3IsbikpLHI+MD8oaVthXT1NYXRoLmZsb29yKHMvcikqcixpW29dPU1hdGguY2VpbChjL3IpKnIsZShpKSk6cjwwJiYoaVthXT1NYXRoLmNlaWwocypyKS9yLGlbb109TWF0aC5mbG9vcihjKnIpL3IsZShpKSksdH0sdH1mdW5jdGlvbiBzZygpe3ZhciB0PWlnKEpwLEpwKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5nKHQsc2coKSl9LFJwLmFwcGx5KHQsYXJndW1lbnRzKSxvZyh0KX1mdW5jdGlvbiBjZyh0KXt2YXIgZTtmdW5jdGlvbiBuKHQpe3JldHVybiBpc05hTih0PSt0KT9lOnR9cmV0dXJuIG4uaW52ZXJ0PW4sbi5kb21haW49bi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VcC5jYWxsKGUsWHApLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNnKHQpLnVua25vd24oZSl9LHQ9YXJndW1lbnRzLmxlbmd0aD9VcC5jYWxsKHQsWHApOlswLDFdLG9nKG4pfXZhciB1Zz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9MCxpPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsYT10W3JdLG89dFtpXTtyZXR1cm4gbzxhJiYobj1yLHI9aSxpPW4sbj1hLGE9byxvPW4pLHRbcl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fTtmdW5jdGlvbiBsZyh0KXtyZXR1cm4gTWF0aC5sb2codCl9ZnVuY3Rpb24gaGcodCl7cmV0dXJuIE1hdGguZXhwKHQpfWZ1bmN0aW9uIGZnKHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gZGcodCl7cmV0dXJuLU1hdGguZXhwKC10KX1mdW5jdGlvbiBwZyh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gZ2codCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24geWcodCl7dmFyIGUsbixyPXQobGcsaGcpLGk9ci5kb21haW4sYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfShhKSxuPWZ1bmN0aW9uKHQpe3JldHVybiAxMD09PXQ/cGc6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KGEpLGkoKVswXTwwPyhlPWdnKGUpLG49Z2cobiksdChmZyxkZykpOnQobGcsaGcpLHJ9cmV0dXJuIHIuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKCkpOmF9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLG8oKSk6aSgpfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciByLG89aSgpLHM9b1swXSxjPW9bby5sZW5ndGgtMV07KHI9YzxzKSYmKGY9cyxzPWMsYz1mKTt2YXIgdSxsLGgsZj1lKHMpLGQ9ZShjKSxwPW51bGw9PXQ/MTA6K3QsZz1bXTtpZighKGElMSkmJmQtZjxwKXtpZihmPU1hdGgucm91bmQoZiktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7ZjxkOysrZilmb3IobD0xLHU9bihmKTtsPGE7KytsKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO2cucHVzaChoKX19ZWxzZSBmb3IoO2Y8ZDsrK2YpZm9yKGw9YS0xLHU9bihmKTtsPj0xOy0tbClpZighKChoPXUqbCk8cykpe2lmKGg+YylicmVhaztnLnB1c2goaCl9fWVsc2UgZz1DKGYsZCxNYXRoLm1pbihkLWYscCkpLm1hcChuKTtyZXR1cm4gcj9nLnJldmVyc2UoKTpnfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxpKXtpZihudWxsPT1pJiYoaT0xMD09PWE/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9WHMoaSkpLHQ9PT0xLzApcmV0dXJuIGk7bnVsbD09dCYmKHQ9MTApO3ZhciBvPU1hdGgubWF4KDEsYSp0L3IudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10L24oTWF0aC5yb3VuZChlKHQpKSk7cmV0dXJuIHIqYTxhLS41JiYocio9YSkscjw9bz9pKHQpOiIifX0sci5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkodWcoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0scn1mdW5jdGlvbiB2Zygpe3ZhciB0PXlnKHJnKCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmcodCx2ZygpKS5iYXNlKHQuYmFzZSgpKX0sUnAuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gbWcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5sb2cxcChNYXRoLmFicyhlL3QpKX19ZnVuY3Rpb24gYmcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5leHBtMShNYXRoLmFicyhlKSkqdH19ZnVuY3Rpb24geGcodCl7dmFyIGU9MSxuPXQobWcoZSksYmcoZSkpO3JldHVybiBuLmNvbnN0YW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QobWcoZT0rbiksYmcoZSkpOmV9LG9nKG4pfWZ1bmN0aW9uIF9nKCl7dmFyIHQ9eGcocmcoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBuZyh0LF9nKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LFJwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBrZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gd2codCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gRWcodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBUZyh0KXt2YXIgZT10KEpwLEpwKSxuPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09bj90KEpwLEpwKTouNT09PW4/dCh3ZyxFZyk6dChrZyhuKSxrZygxL24pKX1yZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKCkpOm59LG9nKGUpfWZ1bmN0aW9uIENnKCl7dmFyIHQ9VGcocmcoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBuZyh0LENnKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LFJwLmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIFNnKCl7cmV0dXJuIENnLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gQWcoKXt2YXIgdCxlPVtdLG49W10saT1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxyPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihpPW5ldyBBcnJheShyLTEpOysrdDxyOylpW3QtMV09RChlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW2MoaSxlKV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm4gcjwwP1tOYU4sTmFOXTpbcj4wP2lbci0xXTplWzBdLHI8aS5sZW5ndGg/aVtyXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShuPXRbaV0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQociksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEFnKCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LFJwLmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBNZygpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU8PWU/YVtjKGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT0kcC5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOmEuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5pbmRleE9mKHQpO3JldHVybiBvPDA/W05hTixOYU5dOm88MT9bZSxpWzBdXTpvPj1yP1tpW3ItMV0sbl06W2lbby0xXSxpW29dXX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6b30sby50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE1nKCkuZG9tYWluKFtlLG5dKS5yYW5nZShhKS51bmtub3duKHQpfSxScC5hcHBseShvZyhvKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9nKCl7dmFyIHQsZT1bLjVdLG49WzAsMV0scj0xO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGk8PWk/bltjKGUsaSwwLHIpXTp0fXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0kcC5jYWxsKHQpLHI9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSksaSk6ZS5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTpuLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm5bZVtyLTFdLGVbcl1dfSxpLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT2coKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sUnAuYXBwbHkoaSxhcmd1bWVudHMpfXZhciBEZz1uZXcgRGF0ZSxOZz1uZXcgRGF0ZTtmdW5jdGlvbiBCZyh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBCZygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBEZy5zZXRUaW1lKCtlKSxOZy5zZXRUaW1lKCtyKSx0KERnKSx0KE5nKSxNYXRoLmZsb29yKG4oRGcsTmcpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgTGc9QmcoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO0xnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/QmcoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBQZz1MZyxGZz1MZy5yYW5nZSxJZz1CZygoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLGpnPUlnLFJnPUlnLnJhbmdlO2Z1bmN0aW9uIFlnKHQpe3JldHVybiBCZygoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS82MDQ4ZTV9KSl9dmFyIHpnPVlnKDApLFVnPVlnKDEpLCRnPVlnKDIpLFdnPVlnKDMpLFZnPVlnKDQpLEhnPVlnKDUpLEdnPVlnKDYpLHFnPXpnLnJhbmdlLFhnPVVnLnJhbmdlLFpnPSRnLnJhbmdlLEpnPVdnLnJhbmdlLFFnPVZnLnJhbmdlLEtnPUhnLnJhbmdlLHR5PUdnLnJhbmdlLGV5PUJnKChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxueT1leSxyeT1leS5yYW5nZSxpeT1CZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS0xZTMqdC5nZXRTZWNvbmRzKCktNmU0KnQuZ2V0TWludXRlcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSkpLGF5PWl5LG95PWl5LnJhbmdlLHN5PUJnKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjeT1zeSx1eT1zeS5yYW5nZSxseT1CZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxoeT1seSxmeT1seS5yYW5nZSxkeT1CZygoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO2R5LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/QmcoKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0pLChmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KSk6ZHk6bnVsbH07dmFyIHB5PWR5LGd5PWR5LnJhbmdlO2Z1bmN0aW9uIHl5KHQpe3JldHVybiBCZygoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNjA0OGU1fSkpfXZhciB2eT15eSgwKSxteT15eSgxKSxieT15eSgyKSx4eT15eSgzKSxfeT15eSg0KSxreT15eSg1KSx3eT15eSg2KSxFeT12eS5yYW5nZSxUeT1teS5yYW5nZSxDeT1ieS5yYW5nZSxTeT14eS5yYW5nZSxBeT1feS5yYW5nZSxNeT1reS5yYW5nZSxPeT13eS5yYW5nZSxEeT1CZygoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLE55PUR5LEJ5PUR5LnJhbmdlLEx5PUJnKChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtMeS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP0JnKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgUHk9THksRnk9THkucmFuZ2U7ZnVuY3Rpb24gSXkodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIGp5KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFJ5KHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBZeSh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLG89dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsdT1ReShpKSxsPUt5KGkpLGg9UXkoYSksZj1LeShhKSxkPVF5KG8pLHA9S3kobyksZz1ReShzKSx5PUt5KHMpLHY9UXkoYyksbT1LeShjKSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6eHYsZTp4dixmOlR2LEg6X3YsSTprdixqOnd2LEw6RXYsbTpDdixNOlN2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROmVtLHM6bm0sUzpBdix1Ok12LFU6T3YsVjpEdix3Ok52LFc6QnYseDpudWxsLFg6bnVsbCx5Okx2LFk6UHYsWjpGdiwiJSI6dG19LHg9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpJdixlOkl2LGY6VXYsSDpqdixJOlJ2LGo6WXYsTDp6dixtOiR2LE06V3YscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6ZW0sczpubSxTOlZ2LHU6SHYsVTpHdixWOnF2LHc6WHYsVzpadix4Om51bGwsWDpudWxsLHk6SnYsWTpRdixaOkt2LCIlIjp0bX0sXz17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1mW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPW1bclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9Zy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09eVtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gRSh0LGUsbixyKX0sZDpsdixlOmx2LGY6eXYsSDpmdixJOmZ2LGo6aHYsTDpndixtOnV2LE06ZHYscDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnA9bFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxxOmN2LFE6bXYsczpidixTOnB2LHU6ZXYsVTpudixWOnJ2LHc6dHYsVzppdix4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRSh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIEUodCxyLGUsbil9LHk6b3YsWTphdixaOnN2LCIlIjp2dn07ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGEsbz1bXSxzPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShjLHMpKSxudWxsIT0oaT1IeVtyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKGE9ZVtyXSkmJihyPWEobixpKSksby5wdXNoKHIpLGM9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxzKSksby5qb2luKCIiKX19ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGE9UnkoMTkwMCx2b2lkIDAsMSk7aWYoRShhLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGEpcmV0dXJuIG5ldyBEYXRlKGEuUSk7aWYoInMiaW4gYSlyZXR1cm4gbmV3IERhdGUoMWUzKmEucysoIkwiaW4gYT9hLkw6MCkpO2lmKCFlfHwiWiJpbiBhfHwoYS5aPTApLCJwImluIGEmJihhLkg9YS5IJTEyKzEyKmEucCksdm9pZCAwPT09YS5tJiYoYS5tPSJxImluIGE/YS5xOjApLCJWImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYXx8KGEudz0xKSwiWiJpbiBhPyhpPShyPWp5KFJ5KGEueSwwLDEpKSkuZ2V0VVRDRGF5KCkscj1pPjR8fDA9PT1pP215LmNlaWwocik6bXkocikscj1OeS5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldFVUQ0Z1bGxZZWFyKCksYS5tPXIuZ2V0VVRDTW9udGgoKSxhLmQ9ci5nZXRVVENEYXRlKCkrKGEudys2KSU3KTooaT0ocj1JeShSeShhLnksMCwxKSkpLmdldERheSgpLHI9aT40fHwwPT09aT9VZy5jZWlsKHIpOlVnKHIpLHI9bnkub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRGdWxsWWVhcigpLGEubT1yLmdldE1vbnRoKCksYS5kPXIuZ2V0RGF0ZSgpKyhhLncrNiklNyl9ZWxzZSgiVyJpbiBhfHwiVSJpbiBhKSYmKCJ3ImluIGF8fChhLnc9InUiaW4gYT9hLnUlNzoiVyJpbiBhPzE6MCksaT0iWiJpbiBhP2p5KFJ5KGEueSwwLDEpKS5nZXRVVENEYXkoKTpJeShSeShhLnksMCwxKSkuZ2V0RGF5KCksYS5tPTAsYS5kPSJXImluIGE/KGEudys2KSU3KzcqYS5XLShpKzUpJTc6YS53KzcqYS5VLShpKzYpJTcpO3JldHVybiJaImluIGE/KGEuSCs9YS5aLzEwMHwwLGEuTSs9YS5aJTEwMCxqeShhKSk6SXkoYSl9fWZ1bmN0aW9uIEUodCxlLG4scil7Zm9yKHZhciBpLGEsbz0wLHM9ZS5sZW5ndGgsYz1uLmxlbmd0aDtvPHM7KXtpZihyPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPV9baSBpbiBIeT9lLmNoYXJBdChvKyspOmldKXx8KHI9YSh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4oYi54PWsobixiKSxiLlg9ayhyLGIpLGIuYz1rKGUsYikseC54PWsobix4KSx4Llg9ayhyLHgpLHguYz1rKGUseCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLGIpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLHgpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fSl9dmFyIHp5LFV5LCR5LFd5LFZ5LEh5PXsiLSI6IiIsXzoiICIsMDoiMCJ9LEd5PS9eXHMqXGQrLyxxeT0vXiUvLFh5PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBaeSh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBKeSh0KXtyZXR1cm4gdC5yZXBsYWNlKFh5LCJcXCQmIil9ZnVuY3Rpb24gUXkodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKEp5KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gS3kodCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gdHYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYXYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb3YodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzdih0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGN2KHQsZSxuKXt2YXIgcj1HeS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHV2KHQsZSxuKXt2YXIgcj1HeS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBodih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBndih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5dih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2dih0LGUsbil7dmFyIHI9cXkuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBtdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ2KHQsZSxuKXt2YXIgcj1HeS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geHYodCxlKXtyZXR1cm4gWnkodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBfdih0LGUpe3JldHVybiBaeSh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBrdih0LGUpe3JldHVybiBaeSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gd3YodCxlKXtyZXR1cm4gWnkoMStueS5jb3VudChQZyh0KSx0KSxlLDMpfWZ1bmN0aW9uIEV2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBUdih0LGUpe3JldHVybiBFdih0LGUpKyIwMDAifWZ1bmN0aW9uIEN2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gU3YodCxlKXtyZXR1cm4gWnkodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBBdih0LGUpe3JldHVybiBaeSh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE12KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBPdih0LGUpe3JldHVybiBaeSh6Zy5jb3VudChQZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gRHYodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP1ZnKHQpOlZnLmNlaWwodCksWnkoVmcuY291bnQoUGcodCksdCkrKDQ9PT1QZyh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBOdih0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBCdih0LGUpe3JldHVybiBaeShVZy5jb3VudChQZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gTHYodCxlKXtyZXR1cm4gWnkodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFB2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBGdih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK1p5KGUvNjB8MCwiMCIsMikrWnkoZSU2MCwiMCIsMil9ZnVuY3Rpb24gSXYodCxlKXtyZXR1cm4gWnkodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBqdih0LGUpe3JldHVybiBaeSh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBSdih0LGUpe3JldHVybiBaeSh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWXYodCxlKXtyZXR1cm4gWnkoMStOeS5jb3VudChQeSh0KSx0KSxlLDMpfWZ1bmN0aW9uIHp2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBVdih0LGUpe3JldHVybiB6dih0LGUpKyIwMDAifWZ1bmN0aW9uICR2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gV3YodCxlKXtyZXR1cm4gWnkodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBWdih0LGUpe3JldHVybiBaeSh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIEh2KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBHdih0LGUpe3JldHVybiBaeSh2eS5jb3VudChQeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gcXYodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP195KHQpOl95LmNlaWwodCksWnkoX3kuY291bnQoUHkodCksdCkrKDQ9PT1QeSh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBYdih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBadih0LGUpe3JldHVybiBaeShteS5jb3VudChQeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gSnYodCxlKXtyZXR1cm4gWnkodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFF2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBLdigpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gdG0oKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZW0odCl7cmV0dXJuK3R9ZnVuY3Rpb24gbm0odCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBybSh0KXtyZXR1cm4genk9WXkodCksVXk9enkuZm9ybWF0LCR5PXp5LnBhcnNlLFd5PXp5LnV0Y0Zvcm1hdCxWeT16eS51dGNQYXJzZSx6eX1ybSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIGltKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBhbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBvbSh0LGUsbixyLGEsbyxzLGMsdSl7dmFyIGw9aWcoSnAsSnApLGg9bC5pbnZlcnQsZj1sLmRvbWFpbixkPXUoIi4lTCIpLHA9dSgiOiVTIiksZz11KCIlSTolTSIpLHk9dSgiJUkgJXAiKSx2PXUoIiVhICVkIiksbT11KCIlYiAlZCIpLGI9dSgiJUIiKSx4PXUoIiVZIiksXz1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsNmU0XSxbbyw1LDNlNV0sW28sMTUsOWU1XSxbbywzMCwxOGU1XSxbYSwxLDM2ZTVdLFthLDMsMTA4ZTVdLFthLDYsMjE2ZTVdLFthLDEyLDQzMmU1XSxbciwxLDg2NGU1XSxbciwyLDE3MjhlNV0sW24sMSw2MDQ4ZTVdLFtlLDEsMjU5MmU2XSxbZSwzLDc3NzZlNl0sW3QsMSwzMTUzNmU2XV07ZnVuY3Rpb24gayhpKXtyZXR1cm4ocyhpKTxpP2Q6byhpKTxpP3A6YShpKTxpP2c6cihpKTxpP3k6ZShpKTxpP24oaSk8aT92Om06dChpKTxpP2I6eCkoaSl9ZnVuY3Rpb24gdyhlLG4scixhKXtpZihudWxsPT1lJiYoZT0xMCksIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbz1NYXRoLmFicyhyLW4pL2Uscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChfLG8pO3M9PT1fLmxlbmd0aD8oYT1BKG4vMzE1MzZlNixyLzMxNTM2ZTYsZSksZT10KTpzPyhhPShzPV9bby9fW3MtMV1bMl08X1tzXVsyXS9vP3MtMTpzXSlbMV0sZT1zWzBdKTooYT1NYXRoLm1heChBKG4scixlKSwxKSxlPWMpfXJldHVybiBudWxsPT1hP2U6ZS5ldmVyeShhKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGgodCkpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9mKFVwLmNhbGwodCxhbSkpOmYoKS5tYXAoaW0pfSxsLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mKCksaT1yWzBdLGE9cltyLmxlbmd0aC0xXSxvPWE8aTtyZXR1cm4gbyYmKG49aSxpPWEsYT1uKSxuPShuPXcodCxpLGEsZSkpP24ucmFuZ2UoaSxhKzEpOltdLG8/bi5yZXZlcnNlKCk6bn0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWU/azp1KGUpfSxsLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1mKCk7cmV0dXJuKHQ9dyh0LG5bMF0sbltuLmxlbmd0aC0xXSxlKSk/Zih1ZyhuLHQpKTpsfSxsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmcobCxvbSh0LGUsbixyLGEsbyxzLGMsdSkpfSxsfXZhciBzbT1mdW5jdGlvbigpe3JldHVybiBScC5hcHBseShvbShQZyxqZyx6ZyxueSxheSxjeSxoeSxweSxVeSkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9LGNtPUJnKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSksdW09Y20sbG09Y20ucmFuZ2UsaG09QmcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKSxmbT1obSxkbT1obS5yYW5nZSxwbT1CZygoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxnbT1wbSx5bT1wbS5yYW5nZSx2bT1mdW5jdGlvbigpe3JldHVybiBScC5hcHBseShvbShQeSx1bSx2eSxOeSxmbSxnbSxoeSxweSxXeSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIG1tKCl7dmFyIHQsZSxuLHIsaSxhPTAsbz0xLHM9SnAsYz0hMTtmdW5jdGlvbiB1KGUpe3JldHVybiBpc05hTihlPStlKT9pOnMoMD09PW4/LjU6KGU9KHIoZSktdCkqbixjP01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSkpfXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1yKGE9K2lbMF0pLGU9cihvPStpWzFdKSxuPXQ9PT1lPzA6MS8oZS10KSx1KTpbYSxvXX0sdS5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0hIXQsdSk6Y30sdS5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx1KTpzfSx1LnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCx1KTppfSxmdW5jdGlvbihpKXtyZXR1cm4gcj1pLHQ9aShhKSxlPWkobyksbj10PT09ZT8wOjEvKGUtdCksdX19ZnVuY3Rpb24gYm0odCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkuaW50ZXJwb2xhdG9yKHQuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24geG0oKXt2YXIgdD1vZyhtbSgpKEpwKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LHhtKCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gX20oKXt2YXIgdD15ZyhtbSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsX20oKSkuYmFzZSh0LmJhc2UoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBrbSgpe3ZhciB0PXhnKG1tKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxrbSgpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gd20oKXt2YXIgdD1UZyhtbSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsd20oKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIEVtKCl7cmV0dXJuIHdtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gVG0oKXt2YXIgdD1bXSxlPUpwO2Z1bmN0aW9uIG4obil7aWYoIWlzTmFOKG49K24pKXJldHVybiBlKChjKHQsbiktMSkvKHQubGVuZ3RoLTEpKX1yZXR1cm4gbi5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt0PVtdO2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKW51bGw9PShpPWVbYV0pfHxpc05hTihpPStpKXx8dC5wdXNoKGkpO3JldHVybiB0LnNvcnQociksbn0sbi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVG0oZSkuZG9tYWluKHQpfSxZcC5hcHBseShuLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ20oKXt2YXIgdCxlLG4scixpLGEsbyxzPTAsYz0uNSx1PTEsbD1KcCxoPSExO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP286KHQ9LjUrKCh0PSthKHQpKS1lKSoodDxlP3I6aSksbChoP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCkpfXJldHVybiBmLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1hKHM9K29bMF0pLGU9YShjPStvWzFdKSxuPWEodT0rb1syXSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmKTpbcyxjLHVdfSxmLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxmKTpofSxmLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LGYpOmx9LGYudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGYpOm99LGZ1bmN0aW9uKG8pe3JldHVybiBhPW8sdD1vKHMpLGU9byhjKSxuPW8odSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmfX1mdW5jdGlvbiBTbSgpe3ZhciB0PW9nKENtKCkoSnApKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsU20oKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBBbSgpe3ZhciB0PXlnKENtKCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxBbSgpKS5iYXNlKHQuYmFzZSgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIE1tKCl7dmFyIHQ9eGcoQ20oKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LE1tKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBPbSgpe3ZhciB0PVRnKENtKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxPbSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gRG0oKXtyZXR1cm4gT20uYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX12YXIgTm09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPSIjIit0LnNsaWNlKDYqciw2Kisrcik7cmV0dXJuIG59LEJtPU5tKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxMbT1ObSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksUG09Tm0oIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLEZtPU5tKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxJbT1ObSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksam09Tm0oImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLFJtPU5tKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxZbT1ObSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksem09Tm0oIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLFVtPU5tKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKSwkbT1mdW5jdGlvbih0KXtyZXR1cm4gcG4odFt0Lmxlbmd0aC0xXSl9LFdtPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChObSksVm09JG0oV20pLEhtPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChObSksR209JG0oSG0pLHFtPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChObSksWG09JG0ocW0pLFptPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChObSksSm09JG0oWm0pLFFtPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChObSksS209JG0oUW0pLHRiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChObSksZWI9JG0odGIpLG5iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChObSkscmI9JG0obmIpLGliPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChObSksYWI9JG0oaWIpLG9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChObSksc2I9JG0ob2IpLGNiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksdWI9JG0oY2IpLGxiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChObSksaGI9JG0obGIpLGZiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChObSksZGI9JG0oZmIpLHBiPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChObSksZ2I9JG0ocGIpLHliPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChObSksdmI9JG0oeWIpLG1iPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChObSksYmI9JG0obWIpLHhiPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChObSksX2I9JG0oeGIpLGtiPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChObSksd2I9JG0oa2IpLEViPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChObSksVGI9JG0oRWIpLENiPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChObSksU2I9JG0oQ2IpLEFiPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChObSksTWI9JG0oQWIpLE9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChObSksRGI9JG0oT2IpLE5iPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChObSksQmI9JG0oTmIpLExiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksUGI9JG0oTGIpLEZiPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChObSksSWI9JG0oRmIpLGpiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChObSksUmI9JG0oamIpLFliPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChObSksemI9JG0oWWIpLFViPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChObSksJGI9JG0oVWIpLFdiPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSxWYj1rcChPYSgzMDAsLjUsMCksT2EoLTI0MCwuNSwxKSksSGI9a3AoT2EoLTEwMCwuNzUsLjM1KSxPYSg4MCwxLjUsLjgpKSxHYj1rcChPYSgyNjAsLjc1LC4zNSksT2EoODAsMS41LC44KSkscWI9T2EoKSxYYj1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIGU9TWF0aC5hYnModC0uNSk7cmV0dXJuIHFiLmg9MzYwKnQtMTAwLHFiLnM9MS41LTEuNSplLHFiLmw9LjgtLjkqZSxxYisiIn0sWmI9R2UoKSxKYj1NYXRoLlBJLzMsUWI9MipNYXRoLlBJLzMsS2I9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQ9KC41LXQpKk1hdGguUEksWmIucj0yNTUqKGU9TWF0aC5zaW4odCkpKmUsWmIuZz0yNTUqKGU9TWF0aC5zaW4odCtKYikpKmUsWmIuYj0yNTUqKGU9TWF0aC5zaW4odCtRYikpKmUsWmIrIiJ9LHR4PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzQuNjErdCooMTE3Mi4zMy10KigxMDc5My41Ni10KigzMzMwMC4xMi10KigzODM5NC40OS0xNDgyNS4wNSp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjMuMzErdCooNTU3LjMzK3QqKDEyMjUuMzMtdCooMzU3NC45Ni10KigxMDczLjc3KzcwNy41Nip0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjcuMit0KigzMjExLjEtdCooMTUzMjcuOTctdCooMjc4MTQtdCooMjI1NjkuMTgtNjgzOC42Nip0KSkpKSkpKSsiKSJ9O2Z1bmN0aW9uIGV4KHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciBueD1leChObSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLHJ4PWV4KE5tKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksaXg9ZXgoTm0oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxheD1leChObSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpLG94PWZ1bmN0aW9uKHQpe3JldHVybiBrZShuZSh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxzeD0wO2Z1bmN0aW9uIGN4KCl7cmV0dXJuIG5ldyB1eH1mdW5jdGlvbiB1eCgpe3RoaXMuXz0iQCIrKCsrc3gpLnRvU3RyaW5nKDM2KX11eC5wcm90b3R5cGU9Y3gucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1eCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgbHg9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBiZShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBiZShbbnVsbD09dD9bXTp0XSxtZSl9LGh4PWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9TW4oKS50b3VjaGVzKTtmb3IodmFyIG49MCxyPWU/ZS5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtuPHI7KytuKWlbbl09T24odCxlW25dKTtyZXR1cm4gaX0sZng9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkeD1NYXRoLmFicyxweD1NYXRoLmF0YW4yLGd4PU1hdGguY29zLHl4PU1hdGgubWF4LHZ4PU1hdGgubWluLG14PU1hdGguc2luLGJ4PU1hdGguc3FydCx4eD1NYXRoLlBJLF94PXh4LzIsa3g9Mip4eDtmdW5jdGlvbiB3eCh0KXtyZXR1cm4gdD4xPzA6dDwtMT94eDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gRXgodCl7cmV0dXJuIHQ+PTE/X3g6dDw9LTE/LV94Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBUeCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBDeCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBTeCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEF4KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIE14KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIE94KHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LHU9ci1lLGw9by1pLGg9cy1hLGY9aCpjLWwqdTtpZighKGYqZjwxZS0xMikpcmV0dXJuW3QrKGY9KGwqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqdV19ZnVuY3Rpb24gRHgodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLHU9KG8/YTotYSkvYngocypzK2MqYyksbD11KmMsaD0tdSpzLGY9dCtsLGQ9ZStoLHA9bitsLGc9citoLHk9KGYrcCkvMix2PShkK2cpLzIsbT1wLWYsYj1nLWQseD1tKm0rYipiLF89aS1hLGs9ZipnLXAqZCx3PShiPDA/LTE6MSkqYngoeXgoMCxfKl8qeC1rKmspKSxFPShrKmItbSp3KS94LFQ9KC1rKm0tYip3KS94LEM9KGsqYittKncpL3gsUz0oLWsqbStiKncpL3gsQT1FLXksTT1ULXYsTz1DLXksRD1TLXY7cmV0dXJuIEEqQStNKk0+TypPK0QqRCYmKEU9QyxUPVMpLHtjeDpFLGN5OlQseDAxOi1sLHkwMTotaCx4MTE6RSooaS9fLTEpLHkxMTpUKihpL18tMSl9fXZhciBOeD1mdW5jdGlvbigpe3ZhciB0PVR4LGU9Q3gsbj1meCgwKSxyPW51bGwsaT1TeCxhPUF4LG89TXgscz1udWxsO2Z1bmN0aW9uIGMoKXt2YXIgYyx1LGw9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktX3gsZD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1feCxwPWR4KGQtZiksZz1kPmY7aWYoc3x8KHM9Yz1VaSgpKSxoPGwmJih1PWgsaD1sLGw9dSksaD4xZS0xMilpZihwPmt4LTFlLTEyKXMubW92ZVRvKGgqZ3goZiksaCpteChmKSkscy5hcmMoMCwwLGgsZixkLCFnKSxsPjFlLTEyJiYocy5tb3ZlVG8obCpneChkKSxsKm14KGQpKSxzLmFyYygwLDAsbCxkLGYsZykpO2Vsc2V7dmFyIHksdixtPWYsYj1kLHg9ZixfPWQsaz1wLHc9cCxFPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsVD1FPjFlLTEyJiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YngobCpsK2gqaCkpLEM9dngoZHgoaC1sKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksUz1DLEE9QztpZihUPjFlLTEyKXt2YXIgTT1FeChUL2wqbXgoRSkpLE89RXgoVC9oKm14KEUpKTsoay09MipNKT4xZS0xMj8oeCs9TSo9Zz8xOi0xLF8tPU0pOihrPTAseD1fPShmK2QpLzIpLCh3LT0yKk8pPjFlLTEyPyhtKz1PKj1nPzE6LTEsYi09Tyk6KHc9MCxtPWI9KGYrZCkvMil9dmFyIEQ9aCpneChtKSxOPWgqbXgobSksQj1sKmd4KF8pLEw9bCpteChfKTtpZihDPjFlLTEyKXt2YXIgUCxGPWgqZ3goYiksST1oKm14KGIpLGo9bCpneCh4KSxSPWwqbXgoeCk7aWYocDx4eCYmKFA9T3goRCxOLGosUixGLEksQixMKSkpe3ZhciBZPUQtUFswXSx6PU4tUFsxXSxVPUYtUFswXSwkPUktUFsxXSxXPTEvbXgod3goKFkqVSt6KiQpLyhieChZKlkreip6KSpieChVKlUrJCokKSkpLzIpLFY9YngoUFswXSpQWzBdK1BbMV0qUFsxXSk7Uz12eChDLChsLVYpLyhXLTEpKSxBPXZ4KEMsKGgtVikvKFcrMSkpfX13PjFlLTEyP0E+MWUtMTI/KHk9RHgoaixSLEQsTixoLEEsZyksdj1EeChGLEksQixMLGgsQSxnKSxzLm1vdmVUbyh5LmN4K3kueDAxLHkuY3kreS55MDEpLEE8Qz9zLmFyYyh5LmN4LHkuY3ksQSxweCh5LnkwMSx5LngwMSkscHgodi55MDEsdi54MDEpLCFnKToocy5hcmMoeS5jeCx5LmN5LEEscHgoeS55MDEseS54MDEpLHB4KHkueTExLHkueDExKSwhZykscy5hcmMoMCwwLGgscHgoeS5jeSt5LnkxMSx5LmN4K3kueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLCFnKSxzLmFyYyh2LmN4LHYuY3ksQSxweCh2LnkxMSx2LngxMSkscHgodi55MDEsdi54MDEpLCFnKSkpOihzLm1vdmVUbyhELE4pLHMuYXJjKDAsMCxoLG0sYiwhZykpOnMubW92ZVRvKEQsTiksbD4xZS0xMiYmaz4xZS0xMj9TPjFlLTEyPyh5PUR4KEIsTCxGLEksbCwtUyxnKSx2PUR4KEQsTixqLFIsbCwtUyxnKSxzLmxpbmVUbyh5LmN4K3kueDAxLHkuY3kreS55MDEpLFM8Qz9zLmFyYyh5LmN4LHkuY3ksUyxweCh5LnkwMSx5LngwMSkscHgodi55MDEsdi54MDEpLCFnKToocy5hcmMoeS5jeCx5LmN5LFMscHgoeS55MDEseS54MDEpLHB4KHkueTExLHkueDExKSwhZykscy5hcmMoMCwwLGwscHgoeS5jeSt5LnkxMSx5LmN4K3kueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLGcpLHMuYXJjKHYuY3gsdi5jeSxTLHB4KHYueTExLHYueDExKSxweCh2LnkwMSx2LngwMSksIWcpKSk6cy5hcmMoMCwwLGwsXyx4LGcpOnMubGluZVRvKEIsTCl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIteHgvMjtyZXR1cm5bZ3gocikqbixteChyKSpuXX0sYy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KCtlKSxjKTp0fSxjLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOmV9LGMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTpyfSxjLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6aX0sYy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTphfSxjLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxjKTpzfSxjfTtmdW5jdGlvbiBCeCh0KXt0aGlzLl9jb250ZXh0PXR9QngucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEx4PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQngodCl9O2Z1bmN0aW9uIFB4KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEZ4KHQpe3JldHVybiB0WzFdfXZhciBJeD1mdW5jdGlvbigpe3ZhciB0PVB4LGU9Rngsbj1meCghMCkscj1udWxsLGk9THgsYT1udWxsO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGw9by5sZW5ndGgsaD0hMTtmb3IobnVsbD09ciYmKGE9aSh1PVVpKCkpKSxzPTA7czw9bDsrK3MpIShzPGwmJm4oYz1vW3NdLHMsbykpPT09aCYmKChoPSFoKT9hLmxpbmVTdGFydCgpOmEubGluZUVuZCgpKSxoJiZhLnBvaW50KCt0KGMscyxvKSwrZShjLHMsbykpO2lmKHUpcmV0dXJuIGE9bnVsbCx1KyIifHxudWxsfXJldHVybiBvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksbyk6dH0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOmV9LG8uZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksbyk6bn0sby5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPXImJihhPWkocikpLG8pOml9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPWE9bnVsbDphPWkocj10KSxvKTpyfSxvfSxqeD1mdW5jdGlvbigpe3ZhciB0PVB4LGU9bnVsbCxuPWZ4KDApLHI9RngsaT1meCghMCksYT1udWxsLG89THgscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIHUsbCxoLGYsZCxwPWMubGVuZ3RoLGc9ITEseT1uZXcgQXJyYXkocCksdj1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PWEmJihzPW8oZD1VaSgpKSksdT0wO3U8PXA7Kyt1KXtpZighKHU8cCYmaShmPWNbdV0sdSxjKSk9PT1nKWlmKGc9IWcpbD11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9dS0xO2g+PWw7LS1oKXMucG9pbnQoeVtoXSx2W2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1nJiYoeVt1XT0rdChmLHUsYyksdlt1XT0rbihmLHUsYykscy5wb2ludChlPytlKGYsdSxjKTp5W3VdLHI/K3IoZix1LGMpOnZbdV0pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIEl4KCkuZGVmaW5lZChpKS5jdXJ2ZShvKS5jb250ZXh0KGEpfXJldHVybiBjLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmeCgrbiksZT1udWxsLGMpOnR9LGMueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksYyk6dH0sYy54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6ZX0sYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLHI9bnVsbCxjKTpufSxjLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOnJ9LGMubGluZVgwPWMubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGMubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGMubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksYyk6aX0sYy5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxjKTphfSxjfSxSeD1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sWXg9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHp4PWZ1bmN0aW9uKCl7dmFyIHQ9WXgsZT1SeCxuPW51bGwscj1meCgwKSxpPWZ4KGt4KSxhPWZ4KDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPW8ubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSxnPW5ldyBBcnJheShmKSx5PStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKGt4LE1hdGgubWF4KC1reCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSksbT1NYXRoLm1pbihNYXRoLmFicyh2KS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPW0qKHY8MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9Z1twW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShnW3RdLGdbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCx1PWQ/KHYtZipiKS9kOjA7czxmOysrcyx5PWwpYz1wW3NdLGw9eSsoKGg9Z1tjXSk+MD9oKnU6MCkrYixnW2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTpsLHBhZEFuZ2xlOm19O3JldHVybiBnfXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZngoK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTphfSxvfSxVeD1XeChMeCk7ZnVuY3Rpb24gJHgodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBXeCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgJHgodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBWeCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShXeCh0KSk6ZSgpLl9jdXJ2ZX0sdH0keC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19O3ZhciBIeD1mdW5jdGlvbigpe3JldHVybiBWeChJeCgpLmN1cnZlKFV4KSl9LEd4PWZ1bmN0aW9uKCl7dmFyIHQ9angoKS5jdXJ2ZShVeCksZT10LmN1cnZlLG49dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBWeChuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gVngocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFZ4KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBWeChhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFd4KHQpKTplKCkuX2N1cnZlfSx0fSxxeD1mdW5jdGlvbih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX0sWHg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFp4KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBKeCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gUXgodCl7dmFyIGU9Wngsbj1KeCxyPVB4LGk9RngsYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPVh4LmNhbGwoYXJndW1lbnRzKSxjPWUuYXBwbHkodGhpcyxzKSx1PW4uYXBwbHkodGhpcyxzKTtpZihhfHwoYT1vPVVpKCkpLHQoYSwrci5hcHBseSh0aGlzLChzWzBdPWMscykpLCtpLmFwcGx5KHRoaXMscyksK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTpyfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99ZnVuY3Rpb24gS3godCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK3IpLzIsbixlLGkscixpKX1mdW5jdGlvbiB0Xyh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obitpKS8yLHIsbixyLGkpfWZ1bmN0aW9uIGVfKHQsZSxuLHIsaSl7dmFyIGE9cXgoZSxuKSxvPXF4KGUsbj0obitpKS8yKSxzPXF4KHIsbiksYz1xeChyLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sY1swXSxjWzFdKX1mdW5jdGlvbiBuXygpe3JldHVybiBReChLeCl9ZnVuY3Rpb24gcl8oKXtyZXR1cm4gUXgodF8pfWZ1bmN0aW9uIGlfKCl7dmFyIHQ9UXgoZV8pO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9dmFyIGFfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUveHgpO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxreCl9fSxvXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxzXz1NYXRoLnNxcnQoMS8zKSxjXz0yKnNfLHVfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvY18pLHI9bipzXzt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LGxfPU1hdGguc2luKHh4LzEwKS9NYXRoLnNpbig3Knh4LzEwKSxoXz1NYXRoLnNpbihreC8xMCkqbF8sZl89LU1hdGguY29zKGt4LzEwKSpsXyxkXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxyPWhfKm4saT1mXypuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKHIsaSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89a3gqYS81LHM9TWF0aC5jb3MobyksYz1NYXRoLnNpbihvKTt0LmxpbmVUbyhjKm4sLXMqbiksdC5saW5lVG8ocypyLWMqaSxjKnIrcyppKX10LmNsb3NlUGF0aCgpfX0scF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSkscj0tbi8yO3QucmVjdChyLHIsbixuKX19LGdfPU1hdGguc3FydCgzKSx5Xz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMypnXykpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygtZ18qbiwtbiksdC5saW5lVG8oZ18qbiwtbiksdC5jbG9zZVBhdGgoKX19LHZfPU1hdGguc3FydCgzKS8yLG1fPTEvTWF0aC5zcXJ0KDEyKSxiXz0zKihtXy8yKzEpLHhfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvYl8pLHI9bi8yLGk9biptXyxhPXIsbz1uKm1fK24scz0tYSxjPW87dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhhLG8pLHQubGluZVRvKHMsYyksdC5saW5lVG8oLS41KnItdl8qaSx2XypyKy0uNSppKSx0LmxpbmVUbygtLjUqYS12XypvLHZfKmErLS41Km8pLHQubGluZVRvKC0uNSpzLXZfKmMsdl8qcystLjUqYyksdC5saW5lVG8oLS41KnIrdl8qaSwtLjUqaS12XypyKSx0LmxpbmVUbygtLjUqYSt2XypvLC0uNSpvLXZfKmEpLHQubGluZVRvKC0uNSpzK3ZfKmMsLS41KmMtdl8qcyksdC5jbG9zZVBhdGgoKX19LF9fPVthXyxvXyx1XyxwXyxkXyx5Xyx4X10sa189ZnVuY3Rpb24oKXt2YXIgdD1meChhXyksZT1meCg2NCksbj1udWxsO2Z1bmN0aW9uIHIoKXt2YXIgcjtpZihufHwobj1yPVVpKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIG49bnVsbCxyKyIifHxudWxsfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeChlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCkscik6ZX0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LHIpOm59LHJ9LHdfPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBFXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gVF8odCl7dGhpcy5fY29udGV4dD10fVRfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6RV8odGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBDXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRfKHQpfTtmdW5jdGlvbiBTXyh0KXt0aGlzLl9jb250ZXh0PXR9U18ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBBXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFNfKHQpfTtmdW5jdGlvbiBNXyh0KXt0aGlzLl9jb250ZXh0PXR9TV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4scik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpFXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIE9fPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTV8odCl9O2Z1bmN0aW9uIERfKHQsZSl7dGhpcy5fYmFzaXM9bmV3IFRfKHQpLHRoaXMuX2JldGE9ZX1EXy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIE5fPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IFRfKHQpOm5ldyBEXyh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpO2Z1bmN0aW9uIEJfKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gTF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUxfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpCXyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6Ql8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBQXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBMXyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBGXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9Rl8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OkJfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgSV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgRl8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gal8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkJfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgUl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgal8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gWV8odCxlLG4pe3ZhciByPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPjFlLTEyKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxjPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtyPShyKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvYyxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvY31pZih0Ll9sMjNfYT4xZS0xMil7dmFyIHU9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSp1K3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvbCxvPShvKnUrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9sfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB6Xyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyB6Xyh0LGUpOm5ldyBMXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uICRfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9JF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBXXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3ICRfKHQsZSk6bmV3IEZfKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gVl8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1WXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgSF89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBWXyh0LGUpOm5ldyBqXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIEdfKHQpe3RoaXMuX2NvbnRleHQ9dH1HXy5wcm90b3R5cGU9e2FyZWFTdGFydDp3XyxhcmVhRW5kOndfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19O3ZhciBxXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEdfKHQpfTtmdW5jdGlvbiBYXyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gWl8odCxlLG4pe3ZhciByPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLG89KG4tdC5feTEpLyhpfHxyPDAmJi0wKSxzPShhKmkrbypyKS8ocitpKTtyZXR1cm4oWF8oYSkrWF8obykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBKXyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gUV8odCxlLG4pe3ZhciByPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocitzLGkrcyplLGEtcyxvLXMqbixhLG8pfWZ1bmN0aW9uIEtfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB0ayh0KXt0aGlzLl9jb250ZXh0PW5ldyBlayh0KX1mdW5jdGlvbiBlayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbmsodCl7cmV0dXJuIG5ldyBLXyh0KX1mdW5jdGlvbiByayh0KXtyZXR1cm4gbmV3IHRrKHQpfWZ1bmN0aW9uIGlrKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhayh0KXt2YXIgZSxuLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsb1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLG9bZV0tPW4qb1tlLTFdO2ZvcihpW3ItMV09b1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfUtfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpRXyh0aGlzLHRoaXMuX3QwLEpfKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxRXyh0aGlzLEpfKHRoaXMsbj1aXyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6UV8odGhpcyx0aGlzLl90MCxuPVpfKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKHRrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEtfLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7S18ucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxlay5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxpay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1hayh0KSxpPWFrKGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgb2s9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpayh0KX07ZnVuY3Rpb24gc2sodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfXNrLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19O3ZhciBjaz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNrKHQsLjUpfTtmdW5jdGlvbiB1ayh0KXtyZXR1cm4gbmV3IHNrKHQsMCl9ZnVuY3Rpb24gbGsodCl7cmV0dXJuIG5ldyBzayh0LDEpfXZhciBoaz1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgbixyLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKHI9byxvPXRbZVthXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihyW25dWzFdKT9yW25dWzBdOnJbbl1bMV19LGZrPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn07ZnVuY3Rpb24gZGsodCxlKXtyZXR1cm4gdFtlXX12YXIgcGs9ZnVuY3Rpb24oKXt2YXIgdD1meChbXSksZT1mayxuPWhrLHI9ZGs7ZnVuY3Rpb24gaShpKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz1pLmxlbmd0aCx1PXMubGVuZ3RoLGw9bmV3IEFycmF5KHUpO2ZvcihhPTA7YTx1OysrYSl7Zm9yKHZhciBoLGY9c1thXSxkPWxbYV09bmV3IEFycmF5KGMpLHA9MDtwPGM7KytwKWRbcF09aD1bMCwrcihpW3BdLGYscCxpKV0saC5kYXRhPWlbcF07ZC5rZXk9Zn1mb3IoYT0wLG89ZShsKTthPHU7KythKWxbb1thXV0uaW5kZXg9YTtyZXR1cm4gbihsLG8pLGx9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KFh4LmNhbGwoZSkpLGkpOnR9LGkudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksaSk6cn0saS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P2ZrOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoWHguY2FsbCh0KSksaSk6ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9oazp0LGkpOm59LGl9LGdrPWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfWhrKHQsZSl9fSx5az1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4wKWZvcih2YXIgbixyLGksYSxvLHMsYz0wLHU9dFtlWzBdXS5sZW5ndGg7Yzx1OysrYylmb3IoYT1vPTAsbj0wO248czsrK24pKGk9KHI9dFtlW25dXVtjXSlbMV0tclswXSk+MD8oclswXT1hLHJbMV09YSs9aSk6aTwwPyhyWzFdPW8sclswXT1vKz1pKTooclswXT0wLHJbMV09aSl9LHZrPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyPTAsaT10W2VbMF1dLGE9aS5sZW5ndGg7cjxhOysrcil7Zm9yKHZhciBvPTAscz0wO288bjsrK28pcys9dFtvXVtyXVsxXXx8MDtpW3JdWzFdKz1pW3JdWzBdPS1zLzJ9aGsodCxlKX19LG1rPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCx1PTA7czxpOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0saD1sW29dWzFdfHwwLGY9KGgtKGxbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsdSs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPXUvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxoayh0LGUpfX0sYms9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoeGspO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIHhrKHQpe2Zvcih2YXIgZSxuPS0xLHI9MCxpPXQubGVuZ3RoLGE9LTEvMDsrK248aTspKGU9K3Rbbl1bMV0pPmEmJihhPWUscj1uKTtyZXR1cm4gcn12YXIgX2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoa2spO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIGtrKHQpe2Zvcih2YXIgZSxuPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykoZT0rdFtyXVsxXSkmJihuKz1lKTtyZXR1cm4gbn12YXIgd2s9ZnVuY3Rpb24odCl7cmV0dXJuIF9rKHQpLnJldmVyc2UoKX0sRWs9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAoa2spLGE9YmsodCksbz0wLHM9MCxjPVtdLHU9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSx1LnB1c2gobikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9LFRrPWZ1bmN0aW9uKHQpe3JldHVybiBmayh0KS5yZXZlcnNlKCl9O3ZhciBDaz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTpXeSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIFNrPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX06VnkoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLEFrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG4saT1lO3JldHVybiBudWxsPT1lPyhyLnJlc3RhcnQodCxlLG4pLHIpOihlPStlLG49bnVsbD09bj96bigpOituLHIucmVzdGFydCgoZnVuY3Rpb24gYShvKXtvKz1pLHIucmVzdGFydChhLGkrPWUsbiksdChvKX0pLGUsbikscil9LE1rPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gT2sodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gRGsodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTmsoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBCayh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIExrKHQsZSl7dmFyIG49ZSxyPWUuUixpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5SPXIuTCxuLlImJihuLlIuVT1uKSxyLkw9bn1mdW5jdGlvbiBQayh0LGUpe3ZhciBuPWUscj1lLkwsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24gRmsodCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fU5rLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TmssaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1Gayh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KHI9bi5VKS5MPyhpPXIuUikmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uUiYmKExrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLFBrKHRoaXMscikpOihpPXIuTCkmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uTCYmKFBrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLExrKHRoaXMscikpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLHIsaT10LlUsYT10Lkwsbz10LlI7aWYobj1hP28/Rmsobyk6YTpvLGk/aS5MPT09dD9pLkw9bjppLlI9bjp0aGlzLl89bixhJiZvPyhyPW4uQyxuLkM9dC5DLG4uTD1hLGEuVT1uLG4hPT1vPyhpPW4uVSxuLlU9dC5VLHQ9bi5SLGkuTD10LG4uUj1vLG8uVT1uKToobi5VPWksaT1uLHQ9bi5SKSk6KHI9dC5DLHQ9biksdCYmKHQuVT1pKSwhcilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLExrKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsUGsodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsTGsodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLFBrKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsTGsodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsUGsodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciBJaz1OaztmdW5jdGlvbiBqayh0LGUsbixyKXt2YXIgaT1bbnVsbCxudWxsXSxhPWN3LnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1lLG4mJllrKGksdCxlLG4pLHImJllrKGksZSx0LHIpLG93W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLG93W2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLGl9ZnVuY3Rpb24gUmsodCxlLG4pe3ZhciByPVtlLG5dO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIFlrKHQsZSxuLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiB6ayh0LGUsbixyLGkpe3ZhciBhLG89dFswXSxzPXRbMV0sYz1vWzBdLHU9b1sxXSxsPTAsaD0xLGY9c1swXS1jLGQ9c1sxXS11O2lmKGE9ZS1jLGZ8fCEoYT4wKSl7aWYoYS89ZixmPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGY+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9ci1jLGZ8fCEoYTwwKSl7aWYoYS89ZixmPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGY+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfWlmKGE9bi11LGR8fCEoYT4wKSl7aWYoYS89ZCxkPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGQ+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9aS11LGR8fCEoYTwwKSl7aWYoYS89ZCxkPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGQ+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfXJldHVybiEobD4wfHxoPDEpfHwobD4wJiYodFswXT1bYytsKmYsdStsKmRdKSxoPDEmJih0WzFdPVtjK2gqZix1K2gqZF0pLCEwKX19fX19ZnVuY3Rpb24gVWsodCxlLG4scixpKXt2YXIgYT10WzFdO2lmKGEpcmV0dXJuITA7dmFyIG8scyxjPXRbMF0sdT10LmxlZnQsbD10LnJpZ2h0LGg9dVswXSxmPXVbMV0sZD1sWzBdLHA9bFsxXSxnPShoK2QpLzIseT0oZitwKS8yO2lmKHA9PT1mKXtpZihnPGV8fGc+PXIpcmV0dXJuO2lmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVtnLG5dO2E9W2csaV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1bZyxpXTthPVtnLG5dfX1lbHNlIGlmKHM9eS0obz0oaC1kKS8ocC1mKSkqZyxvPC0xfHxvPjEpaWYoaD5kKXtpZihjKXtpZihjWzFdPj1pKXJldHVybn1lbHNlIGM9WyhuLXMpL28sbl07YT1bKGktcykvbyxpXX1lbHNle2lmKGMpe2lmKGNbMV08bilyZXR1cm59ZWxzZSBjPVsoaS1zKS9vLGldO2E9WyhuLXMpL28sbl19ZWxzZSBpZihmPHApe2lmKGMpe2lmKGNbMF0+PXIpcmV0dXJufWVsc2UgYz1bZSxvKmUrc107YT1bcixvKnIrc119ZWxzZXtpZihjKXtpZihjWzBdPGUpcmV0dXJufWVsc2UgYz1bcixvKnIrc107YT1bZSxvKmUrc119cmV0dXJuIHRbMF09Yyx0WzFdPWEsITB9ZnVuY3Rpb24gJGsodCxlKXt2YXIgbj10LnNpdGUscj1lLmxlZnQsaT1lLnJpZ2h0O3JldHVybiBuPT09aSYmKGk9cixyPW4pLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKToobj09PXI/KHI9ZVsxXSxpPWVbMF0pOihyPWVbMF0saT1lWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBXayh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gVmsodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfXZhciBIayxHaz1bXTtmdW5jdGlvbiBxaygpe0JrKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBYayh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIHI9ZS5zaXRlLGk9dC5zaXRlLGE9bi5zaXRlO2lmKHIhPT1hKXt2YXIgbz1pWzBdLHM9aVsxXSxjPXJbMF0tbyx1PXJbMV0tcyxsPWFbMF0tbyxoPWFbMV0tcyxmPTIqKGMqaC11KmwpO2lmKCEoZj49LWx3KSl7dmFyIGQ9YypjK3UqdSxwPWwqbCtoKmgsZz0oaCpkLXUqcCkvZix5PShjKnAtbCpkKS9mLHY9R2sucG9wKCl8fG5ldyBxazt2LmFyYz10LHYuc2l0ZT1pLHYueD1nK28sdi55PSh2LmN5PXkrcykrTWF0aC5zcXJ0KGcqZyt5KnkpLHQuY2lyY2xlPXY7Zm9yKHZhciBtPW51bGwsYj1zdy5fO2I7KWlmKHYueTxiLnl8fHYueT09PWIueSYmdi54PD1iLngpe2lmKCFiLkwpe209Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7bT1iO2JyZWFrfWI9Yi5SfXN3Lmluc2VydChtLHYpLG18fChIaz12KX19fX1mdW5jdGlvbiBaayh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoSGs9ZS5OKSxzdy5yZW1vdmUoZSksR2sucHVzaChlKSxCayhlKSx0LmNpcmNsZT1udWxsKX12YXIgSms9W107ZnVuY3Rpb24gUWsoKXtCayh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gS2sodCl7dmFyIGU9SmsucG9wKCl8fG5ldyBRaztyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiB0dyh0KXtaayh0KSxhdy5yZW1vdmUodCksSmsucHVzaCh0KSxCayh0KX1mdW5jdGlvbiBldyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxyPWUuY3ksaT1bbixyXSxhPXQuUCxvPXQuTixzPVt0XTt0dyh0KTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTx1dyYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8dXc7KWE9Yy5QLHMudW5zaGlmdChjKSx0dyhjKSxjPWE7cy51bnNoaWZ0KGMpLFprKGMpO2Zvcih2YXIgdT1vO3UuY2lyY2xlJiZNYXRoLmFicyhuLXUuY2lyY2xlLngpPHV3JiZNYXRoLmFicyhyLXUuY2lyY2xlLmN5KTx1dzspbz11Lk4scy5wdXNoKHUpLHR3KHUpLHU9bztzLnB1c2godSksWmsodSk7dmFyIGwsaD1zLmxlbmd0aDtmb3IobD0xO2w8aDsrK2wpdT1zW2xdLGM9c1tsLTFdLFlrKHUuZWRnZSxjLnNpdGUsdS5zaXRlLGkpO2M9c1swXSwodT1zW2gtMV0pLmVkZ2U9amsoYy5zaXRlLHUuc2l0ZSxudWxsLGkpLFhrKGMpLFhrKHUpfWZ1bmN0aW9uIG53KHQpe2Zvcih2YXIgZSxuLHIsaSxhPXRbMF0sbz10WzFdLHM9YXcuXztzOylpZigocj1ydyhzLG8pLWEpPnV3KXM9cy5MO2Vsc2V7aWYoISgoaT1hLWl3KHMsbykpPnV3KSl7cj4tdXc/KGU9cy5QLG49cyk6aT4tdXc/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXtvd1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciBjPUtrKHQpO2lmKGF3Lmluc2VydChlLGMpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBaayhlKSxuPUtrKGUuc2l0ZSksYXcuaW5zZXJ0KGMsbiksYy5lZGdlPW4uZWRnZT1qayhlLnNpdGUsYy5zaXRlKSxYayhlKSx2b2lkIFhrKG4pO2lmKG4pe1prKGUpLFprKG4pO3ZhciB1PWUuc2l0ZSxsPXVbMF0saD11WzFdLGY9dFswXS1sLGQ9dFsxXS1oLHA9bi5zaXRlLGc9cFswXS1sLHk9cFsxXS1oLHY9MiooZip5LWQqZyksbT1mKmYrZCpkLGI9ZypnK3kqeSx4PVsoeSptLWQqYikvditsLChmKmItZyptKS92K2hdO1lrKG4uZWRnZSx1LHAseCksYy5lZGdlPWprKHUsdCxudWxsLHgpLG4uZWRnZT1qayh0LHAsbnVsbCx4KSxYayhlKSxYayhuKX1lbHNlIGMuZWRnZT1qayhlLnNpdGUsYy5zaXRlKX19ZnVuY3Rpb24gcncodCxlKXt2YXIgbj10LnNpdGUscj1uWzBdLGk9blsxXSxhPWktZTtpZighYSlyZXR1cm4gcjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0obj1vLnNpdGUpWzBdLGM9blsxXSx1PWMtZTtpZighdSlyZXR1cm4gczt2YXIgbD1zLXIsaD0xL2EtMS91LGY9bC91O3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoobCpsLygtMip1KS1jK3UvMitpLWEvMikpKS9oK3I6KHIrcykvMn1mdW5jdGlvbiBpdyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBydyhuLGUpO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PWU/clswXToxLzB9dmFyIGF3LG93LHN3LGN3LHV3PTFlLTYsbHc9MWUtMTI7ZnVuY3Rpb24gaHcodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gZncodCxlKXt2YXIgbixyLGksYT10LnNvcnQoaHcpLnBvcCgpO2Zvcihjdz1bXSxvdz1uZXcgQXJyYXkodC5sZW5ndGgpLGF3PW5ldyBJayxzdz1uZXcgSWs7OylpZihpPUhrLGEmJighaXx8YVsxXTxpLnl8fGFbMV09PT1pLnkmJmFbMF08aS54KSlhWzBdPT09biYmYVsxXT09PXJ8fChudyhhKSxuPWFbMF0scj1hWzFdKSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztldyhpLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLHIsaT0wLGE9b3cubGVuZ3RoO2k8YTsrK2kpaWYoKHQ9b3dbaV0pJiYocj0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIG89bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilvW25dPW4sc1tuXT0kayh0LGN3W2Vbbl1dKTtmb3Ioby5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSksbj0wO248cjsrK24pc1tuXT1lW29bbl1dO2ZvcihuPTA7bjxyOysrbillW25dPXNbbl19fSgpLGUpe3ZhciBvPStlWzBdWzBdLHM9K2VbMF1bMV0sYz0rZVsxXVswXSx1PStlWzFdWzFdOyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGksYT1jdy5sZW5ndGg7YS0tOylVayhpPWN3W2FdLHQsZSxuLHIpJiZ6ayhpLHQsZSxuLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT51d3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT51dyl8fGRlbGV0ZSBjd1thXX0obyxzLGMsdSksZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCxnLHk9b3cubGVuZ3RoLHY9ITA7Zm9yKGk9MDtpPHk7KytpKWlmKGE9b3dbaV0pe2ZvcihvPWEuc2l0ZSxzPShjPWEuaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOyljd1tjW3NdXXx8Yy5zcGxpY2UocywxKTtmb3Iocz0wLHU9Yy5sZW5ndGg7czx1OylwPShkPVZrKGEsY3dbY1tzXV0pKVswXSxnPWRbMV0saD0obD1XayhhLGN3W2NbKytzJXVdXSkpWzBdLGY9bFsxXSwoTWF0aC5hYnMocC1oKT51d3x8TWF0aC5hYnMoZy1mKT51dykmJihjLnNwbGljZShzLDAsY3cucHVzaChSayhvLGQsTWF0aC5hYnMocC10KTx1dyYmci1nPnV3P1t0LE1hdGguYWJzKGgtdCk8dXc/ZjpyXTpNYXRoLmFicyhnLXIpPHV3JiZuLXA+dXc/W01hdGguYWJzKGYtcik8dXc/aDpuLHJdOk1hdGguYWJzKHAtbik8dXcmJmctZT51dz9bbixNYXRoLmFicyhoLW4pPHV3P2Y6ZV06TWF0aC5hYnMoZy1lKTx1dyYmcC10PnV3P1tNYXRoLmFicyhmLWUpPHV3P2g6dCxlXTpudWxsKSktMSksKyt1KTt1JiYodj0hMSl9aWYodil7dmFyIG0sYix4LF89MS8wO2ZvcihpPTAsdj1udWxsO2k8eTsrK2kpKGE9b3dbaV0pJiYoeD0obT0obz1hLnNpdGUpWzBdLXQpKm0rKGI9b1sxXS1lKSpiKTxfJiYoXz14LHY9YSk7aWYodil7dmFyIGs9W3QsZV0sdz1bdCxyXSxFPVtuLHJdLFQ9W24sZV07di5oYWxmZWRnZXMucHVzaChjdy5wdXNoKFJrKG89di5zaXRlLGssdykpLTEsY3cucHVzaChSayhvLHcsRSkpLTEsY3cucHVzaChSayhvLEUsVCkpLTEsY3cucHVzaChSayhvLFQsaykpLTEpfX1mb3IoaT0wO2k8eTsrK2kpKGE9b3dbaV0pJiYoYS5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgb3dbaV0pfShvLHMsYyx1KX10aGlzLmVkZ2VzPWN3LHRoaXMuY2VsbHM9b3csYXc9c3c9Y3c9b3c9bnVsbH1mdy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmZ3LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIFdrKGUsdFtuXSl9KSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSkpfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24obixyKXtpZihhPShpPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBpLGEsbyxzLGMsdSxsPW4uc2l0ZSxoPS0xLGY9ZVtpW2EtMV1dLGQ9Zi5sZWZ0PT09bD9mLnJpZ2h0OmYubGVmdDsrK2g8YTspbz1kLGQ9KGY9ZVtpW2hdXSkubGVmdD09PWw/Zi5yaWdodDpmLmxlZnQsbyYmZCYmcjxvLmluZGV4JiZyPGQuaW5kZXgmJihjPW8sdT1kLCgocz1sKVswXS11WzBdKSooY1sxXS1zWzFdKS0oc1swXS1jWzBdKSoodVsxXS1zWzFdKTwwKSYmdC5wdXNoKFtsLmRhdGEsby5kYXRhLGQuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLGE9dGhpcyxvPWEuX2ZvdW5kfHwwLHM9YS5jZWxscy5sZW5ndGg7IShpPWEuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGM9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxsPWMqYyt1KnU7ZG97aT1hLmNlbGxzW3I9b10sbz1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWEuZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBjPXQtc1swXSx1PWUtc1sxXSxoPWMqYyt1KnU7aDxsJiYobD1oLG89cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gYS5fZm91bmQ9cixudWxsPT1ufHxsPD1uKm4/aS5zaXRlOm51bGx9fTt2YXIgZHc9ZnVuY3Rpb24oKXt2YXIgdD1PayxlPURrLG49bnVsbDtmdW5jdGlvbiByKHIpe3JldHVybiBuZXcgZncoci5tYXAoKGZ1bmN0aW9uKG4saSl7dmFyIGE9W01hdGgucm91bmQodChuLGkscikvdXcpKnV3LE1hdGgucm91bmQoZShuLGkscikvdXcpKnV3XTtyZXR1cm4gYS5pbmRleD1pLGEuZGF0YT1uLGF9KSksbil9cmV0dXJuIHIucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkucG9seWdvbnMoKX0sci5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5saW5rcygpfSxyLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS50cmlhbmdsZXMoKX0sci54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TWsoK2UpLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok1rKCt0KSxyKTplfSxyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0scik6biYmW1tuWzBdWzBdLG5bMF1bMV1dLFtuWzFdWzBdLG5bMV1bMV1dXX0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0scik6biYmW25bMV1bMF0tblswXVswXSxuWzFdWzFdLW5bMF1bMV1dfSxyfSxwdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIGd3KHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMudHJhbnNmb3JtPW59ZnVuY3Rpb24geXcodCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufXl3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6eXcsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IHl3KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgeXcodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgdnc9bmV3IHl3KDEsMCwwKTtmdW5jdGlvbiBtdyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIHZ3O3JldHVybiB0Ll9fem9vbX1mdW5jdGlvbiBidygpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfW13LnByb3RvdHlwZT15dy5wcm90b3R5cGU7dmFyIHh3PWZ1bmN0aW9uKCl7Y2UucHJldmVudERlZmF1bHQoKSxjZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX07ZnVuY3Rpb24gX3coKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBrdygpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiB3dygpe3JldHVybiB0aGlzLl9fem9vbXx8dnd9ZnVuY3Rpb24gRXcoKXtyZXR1cm4tY2UuZGVsdGFZKigxPT09Y2UuZGVsdGFNb2RlPy4wNTpjZS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBUdygpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBDdyh0LGUsbil7dmFyIHI9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0saT10LmludmVydFgoZVsxXVswXSktblsxXVswXSxhPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLG89dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKGk+cj8ocitpKS8yOk1hdGgubWluKDAscil8fE1hdGgubWF4KDAsaSksbz5hPyhhK28pLzI6TWF0aC5taW4oMCxhKXx8TWF0aC5tYXgoMCxvKSl9dmFyIFN3PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPV93LHI9a3csaT1DdyxhPUV3LG89VHcscz1bMCwxLzBdLGM9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sdT0yNTAsbD1mcCxoPWx0KCJzdGFydCIsInpvb20iLCJlbmQiKSxmPTA7ZnVuY3Rpb24gZCh0KXt0LnByb3BlcnR5KCJfX3pvb20iLHd3KS5vbigid2hlZWwuem9vbSIseCkub24oIm1vdXNlZG93bi56b29tIixfKS5vbigiZGJsY2xpY2suem9vbSIsaykuZmlsdGVyKG8pLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLHcpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsVCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4oZT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZSkpKT09PXQuaz90Om5ldyB5dyhlLHQueCx0LnkpfWZ1bmN0aW9uIGcodCxlLG4pe3ZhciByPWVbMF0tblswXSp0LmssaT1lWzFdLW5bMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IHl3KHQuayxyLGkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gdih0LGUsbil7dC5vbigic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7bSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJ6b29tIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9YXJndW1lbnRzLGE9bSh0LGkpLG89ci5hcHBseSh0LGkpLHM9bnVsbD09bj95KG8pOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxpKTpuLGM9TWF0aC5tYXgob1sxXVswXS1vWzBdWzBdLG9bMV1bMV0tb1swXVsxXSksdT10Ll9fem9vbSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxpKTplLGY9bCh1LmludmVydChzKS5jb25jYXQoYy91LmspLGguaW52ZXJ0KHMpLmNvbmNhdChjL2guaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWg7ZWxzZXt2YXIgZT1mKHQpLG49Yy9lWzJdO3Q9bmV3IHl3KG4sc1swXS1lWzBdKm4sc1sxXS1lWzFdKm4pfWEuem9vbShudWxsLHQpfX0pKX1mdW5jdGlvbiBtKHQsZSxuKXtyZXR1cm4hbiYmdC5fX3pvb21pbmd8fG5ldyBiKHQsZSl9ZnVuY3Rpb24gYih0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9ci5hcHBseSh0LGUpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIHgoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9bSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxyPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlLmsqTWF0aC5wb3coMixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxvPU5uKHRoaXMpO2lmKHQud2hlZWwpdC5tb3VzZVswXVswXT09PW9bMF0mJnQubW91c2VbMF1bMV09PT1vWzFdfHwodC5tb3VzZVsxXT1lLmludmVydCh0Lm1vdXNlWzBdPW8pKSxjbGVhclRpbWVvdXQodC53aGVlbCk7ZWxzZXtpZihlLms9PT1yKXJldHVybjt0Lm1vdXNlPVtvLGUuaW52ZXJ0KG8pXSxvcih0aGlzKSx0LnN0YXJ0KCl9eHcoKSx0LndoZWVsPXNldFRpbWVvdXQodSwxNTApLHQuem9vbSgibW91c2UiLGkoZyhwKGUsciksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gdSgpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfX1mdW5jdGlvbiBfKCl7aWYoIWUmJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1tKHRoaXMsYXJndW1lbnRzLCEwKSxyPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsdSwhMCkub24oIm1vdXNldXAuem9vbSIsbCwhMCksYT1Obih0aGlzKSxvPWNlLmNsaWVudFgscz1jZS5jbGllbnRZO1RlKGNlLnZpZXcpLGJ3KCksdC5tb3VzZT1bYSx0aGlzLl9fem9vbS5pbnZlcnQoYSldLG9yKHRoaXMpLHQuc3RhcnQoKX1mdW5jdGlvbiB1KCl7aWYoeHcoKSwhdC5tb3ZlZCl7dmFyIGU9Y2UuY2xpZW50WC1vLG49Y2UuY2xpZW50WS1zO3QubW92ZWQ9ZSplK24qbj5mfXQuem9vbSgibW91c2UiLGkoZyh0LnRoYXQuX196b29tLHQubW91c2VbMF09Tm4odC50aGF0KSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gbCgpe3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksQ2UoY2Uudmlldyx0Lm1vdmVkKSx4dygpLHQuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dGhpcy5fX3pvb20sZT1Obih0aGlzKSxhPXQuaW52ZXJ0KGUpLG89dC5rKihjZS5zaGlmdEtleT8uNToyKSxzPWkoZyhwKHQsbyksZSxhKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKTt4dygpLHU+MD9rZSh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odSkuY2FsbCh2LHMsZSk6a2UodGhpcykuY2FsbChkLnRyYW5zZm9ybSxzKX19ZnVuY3Rpb24gdygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxyLGksYSxvPWNlLnRvdWNoZXMscz1vLmxlbmd0aCxjPW0odGhpcyxhcmd1bWVudHMsY2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09cyk7Zm9yKGJ3KCkscj0wO3I8czsrK3IpaT1vW3JdLGE9W2E9RG4odGhpcyxvLGkuaWRlbnRpZmllciksdGhpcy5fX3pvb20uaW52ZXJ0KGEpLGkuaWRlbnRpZmllcl0sYy50b3VjaDA/Yy50b3VjaDF8fGMudG91Y2gwWzJdPT09YVsyXXx8KGMudG91Y2gxPWEsYy50YXBzPTApOihjLnRvdWNoMD1hLGU9ITAsYy50YXBzPTErISF0KTt0JiYodD1jbGVhclRpbWVvdXQodCkpLGUmJihjLnRhcHM8MiYmKHQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0PW51bGx9KSw1MDApKSxvcih0aGlzKSxjLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4scixhLG89bSh0aGlzLGFyZ3VtZW50cykscz1jZS5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2Zvcih4dygpLHQmJih0PWNsZWFyVGltZW91dCh0KSksby50YXBzPTAsZT0wO2U8dTsrK2Upbj1zW2VdLHI9RG4odGhpcyxzLG4uaWRlbnRpZmllciksby50b3VjaDAmJm8udG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP28udG91Y2gwWzBdPXI6by50b3VjaDEmJm8udG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoby50b3VjaDFbMF09cik7aWYobj1vLnRoYXQuX196b29tLG8udG91Y2gxKXt2YXIgbD1vLnRvdWNoMFswXSxoPW8udG91Y2gwWzFdLGY9by50b3VjaDFbMF0sZD1vLnRvdWNoMVsxXSx5PSh5PWZbMF0tbFswXSkqeSsoeT1mWzFdLWxbMV0pKnksdj0odj1kWzBdLWhbMF0pKnYrKHY9ZFsxXS1oWzFdKSp2O249cChuLE1hdGguc3FydCh5L3YpKSxyPVsobFswXStmWzBdKS8yLChsWzFdK2ZbMV0pLzJdLGE9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl19ZWxzZXtpZighby50b3VjaDApcmV0dXJuO3I9by50b3VjaDBbMF0sYT1vLnRvdWNoMFsxXX1vLnpvb20oInRvdWNoIixpKGcobixyLGEpLG8uZXh0ZW50LGMpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLHI9bSh0aGlzLGFyZ3VtZW50cyksaT1jZS5jaGFuZ2VkVG91Y2hlcyxhPWkubGVuZ3RoO2ZvcihidygpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksNTAwKSx0PTA7dDxhOysrdCluPWlbdF0sci50b3VjaDAmJnIudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2RlbGV0ZSByLnRvdWNoMDpyLnRvdWNoMSYmci50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJmRlbGV0ZSByLnRvdWNoMTtpZihyLnRvdWNoMSYmIXIudG91Y2gwJiYoci50b3VjaDA9ci50b3VjaDEsZGVsZXRlIHIudG91Y2gxKSxyLnRvdWNoMClyLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoci50b3VjaDBbMF0pO2Vsc2UgaWYoci5lbmQoKSwyPT09ci50YXBzKXt2YXIgbz1rZSh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO28mJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIGQudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ci5wcm9wZXJ0eSgiX196b29tIix3dyksdCE9PXI/dih0LGUsbik6ci5pbnRlcnJ1cHQoKS5lYWNoKChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLmVuZCgpfSkpfSxkLnNjYWxlQnk9ZnVuY3Rpb24odCxlLG4pe2Quc2NhbGVUbyh0LChmdW5jdGlvbigpe3ZhciB0PXRoaXMuX196b29tLmssbj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiB0Km59KSxuKX0sZC5zY2FsZVRvPWZ1bmN0aW9uKHQsZSxuKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9dGhpcy5fX3pvb20sbz1udWxsPT1uP3kodCk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixzPWEuaW52ZXJ0KG8pLHU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gaShnKHAoYSx1KSxvLHMpLHQsYyl9KSxuKX0sZC50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUsbil7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKX0pKX0sZC50cmFuc2xhdGVUbz1mdW5jdGlvbih0LGUsbixhKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89dGhpcy5fX3pvb20scz1udWxsPT1hP3kodCk6ImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YTtyZXR1cm4gaSh2dy50cmFuc2xhdGUoc1swXSxzWzFdKS5zY2FsZShvLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT8tZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LWUsImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uKSx0LGMpfSksYSl9LGIucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09ZS5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09ZS5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPWUsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe3BlKG5ldyBndyhkLHQsdGhpcy50aGF0Ll9fem9vbSksaC5hcHBseSxoLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGQud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCt0KSxkKTphfSxkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCEhdCksZCk6bn0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdyghIXQpLGQpOm99LGQuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHcoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGQpOnJ9LGQuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHNbMF09K3RbMF0sc1sxXT0rdFsxXSxkKTpbc1swXSxzWzFdXX0sZC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF1bMF09K3RbMF1bMF0sY1sxXVswXT0rdFsxXVswXSxjWzBdWzFdPSt0WzBdWzFdLGNbMV1bMV09K3RbMV1bMV0sZCk6W1tjWzBdWzBdLGNbMF1bMV1dLFtjWzFdWzBdLGNbMV1bMV1dXX0sZC5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxkKTppfSxkLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGQpOnV9LGQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxkKTpsfSxkLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9aC5vbi5hcHBseShoLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1oP2Q6dH0sZC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSh0PSt0KSp0LGQpOk1hdGguc3FydChmKX0sZH07bi5kKGUsInZlcnNpb24iLChmdW5jdGlvbigpe3JldHVybiI1LjE1LjAifSkpLG4uZChlLCJiaXNlY3QiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZChlLCJiaXNlY3RSaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKGUsImJpc2VjdExlZnQiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZChlLCJhc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiByfSkpLG4uZChlLCJiaXNlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKGUsImNyb3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaH0pKSxuLmQoZSwiZGVzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKGUsImRldmlhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSksbi5kKGUsImV4dGVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKGUsImhpc3RvZ3JhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksbi5kKGUsInRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXMiLChmdW5jdGlvbigpe3JldHVybiBOfSkpLG4uZChlLCJ0aHJlc2hvbGRTY290dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSksbi5kKGUsInRocmVzaG9sZFN0dXJnZXMiLChmdW5jdGlvbigpe3JldHVybiBNfSkpLG4uZChlLCJtYXgiLChmdW5jdGlvbigpe3JldHVybiBMfSkpLG4uZChlLCJtZWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gUH0pKSxuLmQoZSwibWVkaWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gRn0pKSxuLmQoZSwibWVyZ2UiLChmdW5jdGlvbigpe3JldHVybiBJfSkpLG4uZChlLCJtaW4iLChmdW5jdGlvbigpe3JldHVybiBqfSkpLG4uZChlLCJwYWlycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKGUsInBlcm11dGUiLChmdW5jdGlvbigpe3JldHVybiBSfSkpLG4uZChlLCJxdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIER9KSksbi5kKGUsInJhbmdlIiwoZnVuY3Rpb24oKXtyZXR1cm4ga30pKSxuLmQoZSwic2NhbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSksbi5kKGUsInNodWZmbGUiLChmdW5jdGlvbigpe3JldHVybiB6fSkpLG4uZChlLCJzdW0iLChmdW5jdGlvbigpe3JldHVybiBVfSkpLG4uZChlLCJ0aWNrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSksbi5kKGUsInRpY2tJbmNyZW1lbnQiLChmdW5jdGlvbigpe3JldHVybiBTfSkpLG4uZChlLCJ0aWNrU3RlcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksbi5kKGUsInRyYW5zcG9zZSIsKGZ1bmN0aW9uKCl7cmV0dXJuICR9KSksbi5kKGUsInZhcmlhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQoZSwiemlwIiwoZnVuY3Rpb24oKXtyZXR1cm4gVn0pKSxuLmQoZSwiYXhpc1RvcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSkpLG4uZChlLCJheGlzUmlnaHQiLChmdW5jdGlvbigpe3JldHVybiBldH0pKSxuLmQoZSwiYXhpc0JvdHRvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG50fSkpLG4uZChlLCJheGlzTGVmdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ0fSkpLG4uZChlLCJicnVzaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSkpLG4uZChlLCJicnVzaFgiLChmdW5jdGlvbigpe3JldHVybiB3aX0pKSxuLmQoZSwiYnJ1c2hZIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWl9KSksbi5kKGUsImJydXNoU2VsZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSksbi5kKGUsImNob3JkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGl9KSksbi5kKGUsInJpYmJvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFpfSkpLG4uZChlLCJuZXN0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUWl9KSksbi5kKGUsInNldCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9hfSkpLG4uZChlLCJtYXAiLChmdW5jdGlvbigpe3JldHVybiBKaX0pKSxuLmQoZSwia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNhfSkpLG4uZChlLCJ2YWx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBjYX0pKSxuLmQoZSwiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVhfSkpLG4uZChlLCJjb2xvciIsKGZ1bmN0aW9uKCl7cmV0dXJuICRlfSkpLG4uZChlLCJyZ2IiLChmdW5jdGlvbigpe3JldHVybiBHZX0pKSxuLmQoZSwiaHNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gdG59KSksbi5kKGUsImxhYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBhfSkpLG4uZChlLCJoY2wiLChmdW5jdGlvbigpe3JldHVybiBrYX0pKSxuLmQoZSwibGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gX2F9KSksbi5kKGUsImdyYXkiLChmdW5jdGlvbigpe3JldHVybiBkYX0pKSxuLmQoZSwiY3ViZWhlbGl4IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2F9KSksbi5kKGUsImNvbnRvdXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWF9KSksbi5kKGUsImNvbnRvdXJEZW5zaXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSGF9KSksbi5kKGUsImRpc3BhdGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSksbi5kKGUsImRyYWciLChmdW5jdGlvbigpe3JldHVybiBLYX0pKSxuLmQoZSwiZHJhZ0Rpc2FibGUiLChmdW5jdGlvbigpe3JldHVybiBUZX0pKSxuLmQoZSwiZHJhZ0VuYWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENlfSkpLG4uZChlLCJkc3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBvb30pKSxuLmQoZSwiY3N2UGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBjb30pKSxuLmQoZSwiY3N2UGFyc2VSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gdW99KSksbi5kKGUsImNzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxvfSkpLG4uZChlLCJjc3ZGb3JtYXRCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gaG99KSksbi5kKGUsImNzdkZvcm1hdFJvd3MiLChmdW5jdGlvbigpe3JldHVybiBmb30pKSxuLmQoZSwiY3N2Rm9ybWF0Um93IiwoZnVuY3Rpb24oKXtyZXR1cm4gcG99KSksbi5kKGUsImNzdkZvcm1hdFZhbHVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ299KSksbi5kKGUsInRzdlBhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdm99KSksbi5kKGUsInRzdlBhcnNlUm93cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1vfSkpLG4uZChlLCJ0c3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBib30pKSxuLmQoZSwidHN2Rm9ybWF0Qm9keSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhvfSkpLG4uZChlLCJ0c3ZGb3JtYXRSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX299KSksbi5kKGUsInRzdkZvcm1hdFJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtvfSkpLG4uZChlLCJ0c3ZGb3JtYXRWYWx1ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdvfSkpLG4uZChlLCJhdXRvVHlwZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVvfSkpLG4uZChlLCJlYXNlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ299KSksbi5kKGUsImVhc2VRdWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTW99KSksbi5kKGUsImVhc2VRdWFkSW4iLChmdW5jdGlvbigpe3JldHVybiBTb30pKSxuLmQoZSwiZWFzZVF1YWRPdXQiLChmdW5jdGlvbigpe3JldHVybiBBb30pKSxuLmQoZSwiZWFzZVF1YWRJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1vfSkpLG4uZChlLCJlYXNlQ3ViaWMiLChmdW5jdGlvbigpe3JldHVybiBIcn0pKSxuLmQoZSwiZWFzZUN1YmljSW4iLChmdW5jdGlvbigpe3JldHVybiBXcn0pKSxuLmQoZSwiZWFzZUN1YmljT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KSksbi5kKGUsImVhc2VDdWJpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gSHJ9KSksbi5kKGUsImVhc2VQb2x5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTm99KSksbi5kKGUsImVhc2VQb2x5SW4iLChmdW5jdGlvbigpe3JldHVybiBPb30pKSxuLmQoZSwiZWFzZVBvbHlPdXQiLChmdW5jdGlvbigpe3JldHVybiBEb30pKSxuLmQoZSwiZWFzZVBvbHlJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5vfSkpLG4uZChlLCJlYXNlU2luIiwoZnVuY3Rpb24oKXtyZXR1cm4gSW99KSksbi5kKGUsImVhc2VTaW5JbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBvfSkpLG4uZChlLCJlYXNlU2luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRm99KSksbi5kKGUsImVhc2VTaW5Jbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElvfSkpLG4uZChlLCJlYXNlRXhwIiwoZnVuY3Rpb24oKXtyZXR1cm4gWW99KSksbi5kKGUsImVhc2VFeHBJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpvfSkpLG4uZChlLCJlYXNlRXhwT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUm99KSksbi5kKGUsImVhc2VFeHBJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlvfSkpLG4uZChlLCJlYXNlQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gJG99KSksbi5kKGUsImVhc2VDaXJjbGVJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpvfSkpLG4uZChlLCJlYXNlQ2lyY2xlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW99KSksbi5kKGUsImVhc2VDaXJjbGVJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuICRvfSkpLG4uZChlLCJlYXNlQm91bmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gVm99KSksbi5kKGUsImVhc2VCb3VuY2VJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdvfSkpLG4uZChlLCJlYXNlQm91bmNlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVm99KSksbi5kKGUsImVhc2VCb3VuY2VJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhvfSkpLG4uZChlLCJlYXNlQmFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhvfSkpLG4uZChlLCJlYXNlQmFja0luIiwoZnVuY3Rpb24oKXtyZXR1cm4gR299KSksbi5kKGUsImVhc2VCYWNrT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gcW99KSksbi5kKGUsImVhc2VCYWNrSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBYb30pKSxuLmQoZSwiZWFzZUVsYXN0aWMiLChmdW5jdGlvbigpe3JldHVybiBRb30pKSxuLmQoZSwiZWFzZUVsYXN0aWNJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEpvfSkpLG4uZChlLCJlYXNlRWxhc3RpY091dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFvfSkpLG4uZChlLCJlYXNlRWxhc3RpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gS299KSksbi5kKGUsImJsb2IiLChmdW5jdGlvbigpe3JldHVybiBlc30pKSxuLmQoZSwiYnVmZmVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gcnN9KSksbi5kKGUsImRzdiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNzfSkpLG4uZChlLCJjc3YiLChmdW5jdGlvbigpe3JldHVybiBjc30pKSxuLmQoZSwidHN2IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXN9KSksbi5kKGUsImltYWdlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHN9KSksbi5kKGUsImpzb24iLChmdW5jdGlvbigpe3JldHVybiBmc30pKSxuLmQoZSwidGV4dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFzfSkpLG4uZChlLCJ4bWwiLChmdW5jdGlvbigpe3JldHVybiBwc30pKSxuLmQoZSwiaHRtbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdzfSkpLG4uZChlLCJzdmciLChmdW5jdGlvbigpe3JldHVybiB5c30pKSxuLmQoZSwiZm9yY2VDZW50ZXIiLChmdW5jdGlvbigpe3JldHVybiB2c30pKSxuLmQoZSwiZm9yY2VDb2xsaWRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3N9KSksbi5kKGUsImZvcmNlTGluayIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJzfSkpLG4uZChlLCJmb3JjZU1hbnlCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4ganN9KSksbi5kKGUsImZvcmNlUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gUnN9KSksbi5kKGUsImZvcmNlU2ltdWxhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIElzfSkpLG4uZChlLCJmb3JjZVgiLChmdW5jdGlvbigpe3JldHVybiBZc30pKSxuLmQoZSwiZm9yY2VZIiwoZnVuY3Rpb24oKXtyZXR1cm4genN9KSksbi5kKGUsImZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiByY30pKSxuLmQoZSwiZm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gWHN9KSksbi5kKGUsImZvcm1hdFByZWZpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpzfSkpLG4uZChlLCJmb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBuY30pKSxuLmQoZSwiZm9ybWF0U3BlY2lmaWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnN9KSksbi5kKGUsIkZvcm1hdFNwZWNpZmllciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhzfSkpLG4uZChlLCJwcmVjaXNpb25GaXhlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGljfSkpLG4uZChlLCJwcmVjaXNpb25QcmVmaXgiLChmdW5jdGlvbigpe3JldHVybiBhY30pKSxuLmQoZSwicHJlY2lzaW9uUm91bmQiLChmdW5jdGlvbigpe3JldHVybiBvY30pKSxuLmQoZSwiZ2VvQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEpjfSkpLG4uZChlLCJnZW9Cb3VuZHMiLChmdW5jdGlvbigpe3JldHVybiAkdX0pKSxuLmQoZSwiZ2VvQ2VudHJvaWQiLChmdW5jdGlvbigpe3JldHVybiBlbH0pKSxuLmQoZSwiZ2VvQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZmx9KSksbi5kKGUsImdlb0NsaXBBbnRpbWVyaWRpYW4iLChmdW5jdGlvbigpe3JldHVybiBFbH0pKSxuLmQoZSwiZ2VvQ2xpcENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRsfSkpLG4uZChlLCJnZW9DbGlwRXh0ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2x9KSksbi5kKGUsImdlb0NsaXBSZWN0YW5nbGUiLChmdW5jdGlvbigpe3JldHVybiBDbH0pKSxuLmQoZSwiZ2VvQ29udGFpbnMiLChmdW5jdGlvbigpe3JldHVybiBxbH0pKSxuLmQoZSwiZ2VvRGlzdGFuY2UiLChmdW5jdGlvbigpe3JldHVybiBSbH0pKSxuLmQoZSwiZ2VvR3JhdGljdWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmx9KSksbi5kKGUsImdlb0dyYXRpY3VsZTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWx9KSksbi5kKGUsImdlb0ludGVycG9sYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmh9KSksbi5kKGUsImdlb0xlbmd0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZsfSkpLG4uZChlLCJnZW9QYXRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWZ9KSksbi5kKGUsImdlb0FsYmVycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9mfSkpLG4uZChlLCJnZW9BbGJlcnNVc2EiLChmdW5jdGlvbigpe3JldHVybiBrZn0pKSxuLmQoZSwiZ2VvQXppbXV0aGFsRXF1YWxBcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJmfSkpLG4uZChlLCJnZW9Db25pY0VxdWlkaXN0YW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gamZ9KSksbi5kKGUsImdlb0NvbmljRXF1aWRpc3RhbnRSYXciLChmdW5jdGlvbigpe3JldHVybiBJZn0pKSxuLmQoZSwiZ2VvRXF1YWxFYXJ0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZmfSkpLG4uZChlLCJnZW9FcXVhbEVhcnRoUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gV2Z9KSksbi5kKGUsImdlb0VxdWlyZWN0YW5ndWxhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZmfSkpLG4uZChlLCJnZW9FcXVpcmVjdGFuZ3VsYXJSYXciLChmdW5jdGlvbigpe3JldHVybiBQZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWMiLChmdW5jdGlvbigpe3JldHVybiBHZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWNSYXciLChmdW5jdGlvbigpe3JldHVybiBIZn0pKSxuLmQoZSwiZ2VvSWRlbnRpdHkiLChmdW5jdGlvbigpe3JldHVybiBYZn0pKSxuLmQoZSwiZ2VvUHJvamVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlmfSkpLG4uZChlLCJnZW9Qcm9qZWN0aW9uTXV0YXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZmfSkpLG4uZChlLCJnZW9NZXJjYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9mfSkpLG4uZChlLCJnZW9NZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1mfSkpLG4uZChlLCJnZW9OYXR1cmFsRWFydGgxIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmZ9KSksbi5kKGUsImdlb05hdHVyYWxFYXJ0aDFSYXciLChmdW5jdGlvbigpe3JldHVybiBaZn0pKSxuLmQoZSwiZ2VvT3J0aG9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gS2Z9KSksbi5kKGUsImdlb09ydGhvZ3JhcGhpY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFmfSkpLG4uZChlLCJnZW9TdGVyZW9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWR9KSksbi5kKGUsImdlb1N0ZXJlb2dyYXBoaWNSYXciLChmdW5jdGlvbigpe3JldHVybiB0ZH0pKSxuLmQoZSwiZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmR9KSksbi5kKGUsImdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5kfSkpLG4uZChlLCJnZW9Sb3RhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVsfSkpLG4uZChlLCJnZW9TdHJlYW0iLChmdW5jdGlvbigpe3JldHVybiAkY30pKSxuLmQoZSwiZ2VvVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbmZ9KSksbi5kKGUsImNsdXN0ZXIiLChmdW5jdGlvbigpe3JldHVybiBzZH0pKSxuLmQoZSwiaGllcmFyY2h5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdWR9KSksbi5kKGUsInBhY2siLChmdW5jdGlvbigpe3JldHVybiBMZH0pKSxuLmQoZSwicGFja1NpYmxpbmdzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQWR9KSksbi5kKGUsInBhY2tFbmNsb3NlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2R9KSksbi5kKGUsInBhcnRpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlkfSkpLG4uZChlLCJzdHJhdGlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZkfSkpLG4uZChlLCJ0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWR9KSksbi5kKGUsInRyZWVtYXAiLChmdW5jdGlvbigpe3JldHVybiBycH0pKSxuLmQoZSwidHJlZW1hcEJpbmFyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlwfSkpLG4uZChlLCJ0cmVlbWFwRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJkfSkpLG4uZChlLCJ0cmVlbWFwU2xpY2UiLChmdW5jdGlvbigpe3JldHVybiBLZH0pKSxuLmQoZSwidHJlZW1hcFNsaWNlRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFwfSkpLG4uZChlLCJ0cmVlbWFwU3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBucH0pKSxuLmQoZSwidHJlZW1hcFJlc3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBvcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGUiLChmdW5jdGlvbigpe3JldHVybiBBbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gYW59KSksbi5kKGUsImludGVycG9sYXRlQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBvbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVEYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4geG59KSksbi5kKGUsImludGVycG9sYXRlRGlzY3JldGUiLChmdW5jdGlvbigpe3JldHVybiBzcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIdWUiLChmdW5jdGlvbigpe3JldHVybiBjcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXIiLChmdW5jdGlvbigpe3JldHVybiBfbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXJBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlufSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9iamVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJvdW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdXB9KSksbi5kKGUsImludGVycG9sYXRlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gU259KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtQ3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHJ9KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtU3ZnIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnJ9KSksbi5kKGUsImludGVycG9sYXRlWm9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYkJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcG59KSksbi5kKGUsImludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBnbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2wiLChmdW5jdGlvbigpe3JldHVybiBwcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2xMb25nIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3B9KSksbi5kKGUsImludGVycG9sYXRlTGFiIiwoZnVuY3Rpb24oKXtyZXR1cm4geXB9KSksbi5kKGUsImludGVycG9sYXRlSGNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXB9KSksbi5kKGUsImludGVycG9sYXRlSGNsTG9uZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9wfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLChmdW5jdGlvbigpe3JldHVybiBrcH0pKSxuLmQoZSwicGllY2V3aXNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gd3B9KSksbi5kKGUsInF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXB9KSksbi5kKGUsInBhdGgiLChmdW5jdGlvbigpe3JldHVybiBVaX0pKSxuLmQoZSwicG9seWdvbkFyZWEiLChmdW5jdGlvbigpe3JldHVybiBUcH0pKSxuLmQoZSwicG9seWdvbkNlbnRyb2lkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ3B9KSksbi5kKGUsInBvbHlnb25IdWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXB9KSksbi5kKGUsInBvbHlnb25Db250YWlucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9wfSkpLG4uZChlLCJwb2x5Z29uTGVuZ3RoIiwoZnVuY3Rpb24oKXtyZXR1cm4gRHB9KSksbi5kKGUsInF1YWR0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXN9KSksbi5kKGUsInJhbmRvbVVuaWZvcm0iLChmdW5jdGlvbigpe3JldHVybiBCcH0pKSxuLmQoZSwicmFuZG9tTm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHB9KSksbi5kKGUsInJhbmRvbUxvZ05vcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBwfSkpLG4uZChlLCJyYW5kb21CYXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIElwfSkpLG4uZChlLCJyYW5kb21JcndpbkhhbGwiLChmdW5jdGlvbigpe3JldHVybiBGcH0pKSxuLmQoZSwicmFuZG9tRXhwb25lbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiBqcH0pKSxuLmQoZSwic2NhbGVCYW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gSHB9KSksbi5kKGUsInNjYWxlUG9pbnQiLChmdW5jdGlvbigpe3JldHVybiBxcH0pKSxuLmQoZSwic2NhbGVJZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNnfSkpLG4uZChlLCJzY2FsZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNnfSkpLG4uZChlLCJzY2FsZUxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZnfSkpLG4uZChlLCJzY2FsZVN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9nfSkpLG4uZChlLCJzY2FsZU9yZGluYWwiLChmdW5jdGlvbigpe3JldHVybiBWcH0pKSxuLmQoZSwic2NhbGVJbXBsaWNpdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdwfSkpLG4uZChlLCJzY2FsZVBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIENnfSkpLG4uZChlLCJzY2FsZVNxcnQiLChmdW5jdGlvbigpe3JldHVybiBTZ30pKSxuLmQoZSwic2NhbGVRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFnfSkpLG4uZChlLCJzY2FsZVF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gTWd9KSksbi5kKGUsInNjYWxlVGhyZXNob2xkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2d9KSksbi5kKGUsInNjYWxlVGltZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNtfSkpLG4uZChlLCJzY2FsZVV0YyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiB4bX0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gX219KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxTcXJ0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRW19KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGttfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ0xvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1BvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9tfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1NxcnQiLChmdW5jdGlvbigpe3JldHVybiBEbX0pKSxuLmQoZSwic2NhbGVEaXZlcmdpbmdTeW1sb2ciLChmdW5jdGlvbigpe3JldHVybiBNbX0pKSxuLmQoZSwidGlja0Zvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFnfSkpLG4uZChlLCJzY2hlbWVDYXRlZ29yeTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gQm19KSksbi5kKGUsInNjaGVtZUFjY2VudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExtfSkpLG4uZChlLCJzY2hlbWVEYXJrMiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBtfSkpLG4uZChlLCJzY2hlbWVQYWlyZWQiLChmdW5jdGlvbigpe3JldHVybiBGbX0pKSxuLmQoZSwic2NoZW1lUGFzdGVsMSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEltfSkpLG4uZChlLCJzY2hlbWVQYXN0ZWwyIiwoZnVuY3Rpb24oKXtyZXR1cm4gam19KSksbi5kKGUsInNjaGVtZVNldDEiLChmdW5jdGlvbigpe3JldHVybiBSbX0pKSxuLmQoZSwic2NoZW1lU2V0MiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFltfSkpLG4uZChlLCJzY2hlbWVTZXQzIiwoZnVuY3Rpb24oKXtyZXR1cm4gem19KSksbi5kKGUsInNjaGVtZVRhYmxlYXUxMCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJyQkciLChmdW5jdGlvbigpe3JldHVybiBWbX0pKSxuLmQoZSwic2NoZW1lQnJCRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBSR24iLChmdW5jdGlvbigpe3JldHVybiBHbX0pKSxuLmQoZSwic2NoZW1lUFJHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBpWUciLChmdW5jdGlvbigpe3JldHVybiBYbX0pKSxuLmQoZSwic2NoZW1lUGlZRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1T3IiLChmdW5jdGlvbigpe3JldHVybiBKbX0pKSxuLmQoZSwic2NoZW1lUHVPciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFptfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkQnUiLChmdW5jdGlvbigpe3JldHVybiBLbX0pKSxuLmQoZSwic2NoZW1lUmRCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkR3kiLChmdW5jdGlvbigpe3JldHVybiBlYn0pKSxuLmQoZSwic2NoZW1lUmRHeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkWWxCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJifSkpLG4uZChlLCJzY2hlbWVSZFlsQnUiLChmdW5jdGlvbigpe3JldHVybiBuYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZFlsR24iLChmdW5jdGlvbigpe3JldHVybiBhYn0pKSxuLmQoZSwic2NoZW1lUmRZbEduIiwoZnVuY3Rpb24oKXtyZXR1cm4gaWJ9KSksbi5kKGUsImludGVycG9sYXRlU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBzYn0pKSxuLmQoZSwic2NoZW1lU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBvYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWJ9KSksbi5kKGUsInNjaGVtZUJ1R24iLChmdW5jdGlvbigpe3JldHVybiBjYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdVB1IiwoZnVuY3Rpb24oKXtyZXR1cm4gaGJ9KSksbi5kKGUsInNjaGVtZUJ1UHUiLChmdW5jdGlvbigpe3JldHVybiBsYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gZGJ9KSksbi5kKGUsInNjaGVtZUduQnUiLChmdW5jdGlvbigpe3JldHVybiBmYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2J9KSksbi5kKGUsInNjaGVtZU9yUmQiLChmdW5jdGlvbigpe3JldHVybiBwYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdUJ1R24iLChmdW5jdGlvbigpe3JldHVybiB2Yn0pKSxuLmQoZSwic2NoZW1lUHVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4geWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJifSkpLG4uZChlLCJzY2hlbWVQdUJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gbWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSkpLG4uZChlLCJzY2hlbWVQdVJkIiwoZnVuY3Rpb24oKXtyZXR1cm4geGJ9KSksbi5kKGUsImludGVycG9sYXRlUmRQdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdifSkpLG4uZChlLCJzY2hlbWVSZFB1IiwoZnVuY3Rpb24oKXtyZXR1cm4ga2J9KSksbi5kKGUsImludGVycG9sYXRlWWxHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gVGJ9KSksbi5kKGUsInNjaGVtZVlsR25CdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsR24iLChmdW5jdGlvbigpe3JldHVybiBTYn0pKSxuLmQoZSwic2NoZW1lWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIENifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsT3JCciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1ifSkpLG4uZChlLCJzY2hlbWVZbE9yQnIiLChmdW5jdGlvbigpe3JldHVybiBBYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVZbE9yUmQiLChmdW5jdGlvbigpe3JldHVybiBEYn0pKSxuLmQoZSwic2NoZW1lWWxPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2J9KSksbi5kKGUsImludGVycG9sYXRlQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBCYn0pKSxuLmQoZSwic2NoZW1lQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBOYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHcmVlbnMiLChmdW5jdGlvbigpe3JldHVybiBQYn0pKSxuLmQoZSwic2NoZW1lR3JlZW5zIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGJ9KSksbi5kKGUsImludGVycG9sYXRlR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBJYn0pKSxuLmQoZSwic2NoZW1lR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBGYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdXJwbGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmJ9KSksbi5kKGUsInNjaGVtZVB1cnBsZXMiLChmdW5jdGlvbigpe3JldHVybiBqYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZWRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gemJ9KSksbi5kKGUsInNjaGVtZVJlZHMiLChmdW5jdGlvbigpe3JldHVybiBZYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPcmFuZ2VzIiwoZnVuY3Rpb24oKXtyZXR1cm4gJGJ9KSksbi5kKGUsInNjaGVtZU9yYW5nZXMiLChmdW5jdGlvbigpe3JldHVybiBVYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDaXZpZGlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gV2J9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJhaW5ib3ciLChmdW5jdGlvbigpe3JldHVybiBYYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVXYXJtIiwoZnVuY3Rpb24oKXtyZXR1cm4gSGJ9KSksbi5kKGUsImludGVycG9sYXRlQ29vbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVNpbmVib3ciLChmdW5jdGlvbigpe3JldHVybiBLYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUdXJibyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVZpcmlkaXMiLChmdW5jdGlvbigpe3JldHVybiBueH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVNYWdtYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZUluZmVybm8iLChmdW5jdGlvbigpe3JldHVybiBpeH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQbGFzbWEiLChmdW5jdGlvbigpe3JldHVybiBheH0pKSxuLmQoZSwiY3JlYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gb3h9KSksbi5kKGUsImNyZWF0b3IiLChmdW5jdGlvbigpe3JldHVybiBuZX0pKSxuLmQoZSwibG9jYWwiLChmdW5jdGlvbigpe3JldHVybiBjeH0pKSxuLmQoZSwibWF0Y2hlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSkpLG4uZChlLCJtb3VzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5ufSkpLG4uZChlLCJuYW1lc3BhY2UiLChmdW5jdGlvbigpe3JldHVybiB3dH0pKSxuLmQoZSwibmFtZXNwYWNlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSkpLG4uZChlLCJjbGllbnRQb2ludCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9ufSkpLG4uZChlLCJzZWxlY3QiLChmdW5jdGlvbigpe3JldHVybiBrZX0pKSxuLmQoZSwic2VsZWN0QWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHh9KSksbi5kKGUsInNlbGVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9lfSkpLG4uZChlLCJzZWxlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ0fSkpLG4uZChlLCJzZWxlY3RvckFsbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB0fSkpLG4uZChlLCJzdHlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx0fSkpLG4uZChlLCJ0b3VjaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIERufSkpLG4uZChlLCJ0b3VjaGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHh9KSksbi5kKGUsIndpbmRvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90fSkpLG4uZChlLCJldmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSkpLG4uZChlLCJjdXN0b21FdmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSkpLG4uZChlLCJhcmMiLChmdW5jdGlvbigpe3JldHVybiBOeH0pKSxuLmQoZSwiYXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp4fSkpLG4uZChlLCJsaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXh9KSksbi5kKGUsInBpZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp4fSkpLG4uZChlLCJhcmVhUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3h9KSksbi5kKGUsInJhZGlhbEFyZWEiLChmdW5jdGlvbigpe3JldHVybiBHeH0pKSxuLmQoZSwibGluZVJhZGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEh4fSkpLG4uZChlLCJyYWRpYWxMaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gSHh9KSksbi5kKGUsInBvaW50UmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gcXh9KSksbi5kKGUsImxpbmtIb3Jpem9udGFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbl99KSksbi5kKGUsImxpbmtWZXJ0aWNhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJffSkpLG4uZChlLCJsaW5rUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gaV99KSksbi5kKGUsInN5bWJvbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtffSkpLG4uZChlLCJzeW1ib2xzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX199KSksbi5kKGUsInN5bWJvbENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFffSkpLG4uZChlLCJzeW1ib2xDcm9zcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9ffSkpLG4uZChlLCJzeW1ib2xEaWFtb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdV99KSksbi5kKGUsInN5bWJvbFNxdWFyZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBffSkpLG4uZChlLCJzeW1ib2xTdGFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gZF99KSksbi5kKGUsInN5bWJvbFRyaWFuZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4geV99KSksbi5kKGUsInN5bWJvbFd5ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhffSkpLG4uZChlLCJjdXJ2ZUJhc2lzQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQV99KSksbi5kKGUsImN1cnZlQmFzaXNPcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gT199KSksbi5kKGUsImN1cnZlQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiBDX30pKSxuLmQoZSwiY3VydmVCdW5kbGUiLChmdW5jdGlvbigpe3JldHVybiBOX30pKSxuLmQoZSwiY3VydmVDYXJkaW5hbENsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsT3BlbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gUF99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbUNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdffSkpLG4uZChlLCJjdXJ2ZUNhdG11bGxSb21PcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gSF99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVffSkpLG4uZChlLCJjdXJ2ZUxpbmVhckNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFffSkpLG4uZChlLCJjdXJ2ZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx4fSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5rfSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJrfSkpLG4uZChlLCJjdXJ2ZU5hdHVyYWwiLChmdW5jdGlvbigpe3JldHVybiBva30pKSxuLmQoZSwiY3VydmVTdGVwIiwoZnVuY3Rpb24oKXtyZXR1cm4gY2t9KSksbi5kKGUsImN1cnZlU3RlcEFmdGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGt9KSksbi5kKGUsImN1cnZlU3RlcEJlZm9yZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVrfSkpLG4uZChlLCJzdGFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBrfSkpLG4uZChlLCJzdGFja09mZnNldEV4cGFuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdrfSkpLG4uZChlLCJzdGFja09mZnNldERpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlrfSkpLG4uZChlLCJzdGFja09mZnNldE5vbmUiLChmdW5jdGlvbigpe3JldHVybiBoa30pKSxuLmQoZSwic3RhY2tPZmZzZXRTaWxob3VldHRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmt9KSksbi5kKGUsInN0YWNrT2Zmc2V0V2lnZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbWt9KSksbi5kKGUsInN0YWNrT3JkZXJBcHBlYXJhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmt9KSksbi5kKGUsInN0YWNrT3JkZXJBc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiBfa30pKSxuLmQoZSwic3RhY2tPcmRlckRlc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiB3a30pKSxuLmQoZSwic3RhY2tPcmRlckluc2lkZU91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVrfSkpLG4uZChlLCJzdGFja09yZGVyTm9uZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZrfSkpLG4uZChlLCJzdGFja09yZGVyUmV2ZXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRrfSkpLG4uZChlLCJ0aW1lSW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBCZ30pKSxuLmQoZSwidGltZU1pbGxpc2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gcHl9KSksbi5kKGUsInRpbWVNaWxsaXNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBneX0pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBweX0pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3l9KSksbi5kKGUsInRpbWVTZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBoeX0pKSxuLmQoZSwidGltZVNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmeX0pKSxuLmQoZSwidXRjU2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHl9KSksbi5kKGUsInV0Y1NlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmeX0pKSxuLmQoZSwidGltZU1pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN5fSkpLG4uZChlLCJ0aW1lTWludXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV5fSkpLG4uZChlLCJ0aW1lSG91ciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF5fSkpLG4uZChlLCJ0aW1lSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBveX0pKSxuLmQoZSwidGltZURheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG55fSkpLG4uZChlLCJ0aW1lRGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ5fSkpLG4uZChlLCJ0aW1lV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpnfSkpLG4uZChlLCJ0aW1lV2Vla3MiLChmdW5jdGlvbigpe3JldHVybiBxZ30pKSxuLmQoZSwidGltZVN1bmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpnfSkpLG4uZChlLCJ0aW1lU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFnfSkpLG4uZChlLCJ0aW1lTW9uZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVWd9KSksbi5kKGUsInRpbWVNb25kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWGd9KSksbi5kKGUsInRpbWVUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gJGd9KSksbi5kKGUsInRpbWVUdWVzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpnfSkpLG4uZChlLCJ0aW1lV2VkbmVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gV2d9KSksbi5kKGUsInRpbWVXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmd9KSksbi5kKGUsInRpbWVUaHVyc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZnfSkpLG4uZChlLCJ0aW1lVGh1cnNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWd9KSksbi5kKGUsInRpbWVGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBIZ30pKSxuLmQoZSwidGltZUZyaWRheXMiLChmdW5jdGlvbigpe3JldHVybiBLZ30pKSxuLmQoZSwidGltZVNhdHVyZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gR2d9KSksbi5kKGUsInRpbWVTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiB0eX0pKSxuLmQoZSwidGltZU1vbnRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gamd9KSksbi5kKGUsInRpbWVNb250aHMiLChmdW5jdGlvbigpe3JldHVybiBSZ30pKSxuLmQoZSwidGltZVllYXIiLChmdW5jdGlvbigpe3JldHVybiBQZ30pKSxuLmQoZSwidGltZVllYXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gRmd9KSksbi5kKGUsInV0Y01pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdtfSkpLG4uZChlLCJ1dGNNaW51dGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4geW19KSksbi5kKGUsInV0Y0hvdXIiLChmdW5jdGlvbigpe3JldHVybiBmbX0pKSxuLmQoZSwidXRjSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBkbX0pKSxuLmQoZSwidXRjRGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTnl9KSksbi5kKGUsInV0Y0RheXMiLChmdW5jdGlvbigpe3JldHVybiBCeX0pKSxuLmQoZSwidXRjV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ5fSkpLG4uZChlLCJ1dGNXZWVrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEV5fSkpLG4uZChlLCJ1dGNTdW5kYXkiLChmdW5jdGlvbigpe3JldHVybiB2eX0pKSxuLmQoZSwidXRjU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEV5fSkpLG4uZChlLCJ1dGNNb25kYXkiLChmdW5jdGlvbigpe3JldHVybiBteX0pKSxuLmQoZSwidXRjTW9uZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFR5fSkpLG4uZChlLCJ1dGNUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYnl9KSksbi5kKGUsInV0Y1R1ZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ3l9KSksbi5kKGUsInV0Y1dlZG5lc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh5fSkpLG4uZChlLCJ1dGNXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gU3l9KSksbi5kKGUsInV0Y1RodXJzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX3l9KSksbi5kKGUsInV0Y1RodXJzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF5fSkpLG4uZChlLCJ1dGNGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBreX0pKSxuLmQoZSwidXRjRnJpZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE15fSkpLG4uZChlLCJ1dGNTYXR1cmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHd5fSkpLG4uZChlLCJ1dGNTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiBPeX0pKSxuLmQoZSwidXRjTW9udGgiLChmdW5jdGlvbigpe3JldHVybiB1bX0pKSxuLmQoZSwidXRjTW9udGhzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbG19KSksbi5kKGUsInV0Y1llYXIiLChmdW5jdGlvbigpe3JldHVybiBQeX0pKSxuLmQoZSwidXRjWWVhcnMiLChmdW5jdGlvbigpe3JldHVybiBGeX0pKSxuLmQoZSwidGltZUZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBybX0pKSxuLmQoZSwidGltZUZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFV5fSkpLG4uZChlLCJ0aW1lUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiAkeX0pKSxuLmQoZSwidXRjRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV3l9KSksbi5kKGUsInV0Y1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnl9KSksbi5kKGUsInRpbWVGb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBZeX0pKSxuLmQoZSwiaXNvRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2t9KSksbi5kKGUsImlzb1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2t9KSksbi5kKGUsIm5vdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpufSkpLG4uZChlLCJ0aW1lciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdufSkpLG4uZChlLCJ0aW1lckZsdXNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gVm59KSksbi5kKGUsInRpbWVvdXQiLChmdW5jdGlvbigpe3JldHVybiBYbn0pKSxuLmQoZSwiaW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBBa30pKSxuLmQoZSwidHJhbnNpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpyfSkpLG4uZChlLCJhY3RpdmUiLChmdW5jdGlvbigpe3JldHVybiBacn0pKSxuLmQoZSwiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtyZXR1cm4gb3J9KSksbi5kKGUsInZvcm9ub2kiLChmdW5jdGlvbigpe3JldHVybiBkd30pKSxuLmQoZSwiem9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFN3fSkpLG4uZChlLCJ6b29tVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXd9KSksbi5kKGUsInpvb21JZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ3fSkpfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxNzIpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMThdLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLGc9WzEsMjddLHk9WzEsMjhdLHY9WzEsMjldLG09WzEsMzJdLGI9WzEsMzNdLHg9WzEsMzZdLF89WzEsNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM3LDQ4LDU2XSxrPVsxLDQ0XSx3PVs0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjgsMjksMzAsMzEsMzMsMzcsNDgsNTZdLEU9WzQsNSwxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNiwzNyw0OCw1Nl0sVD1bNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM3LDQ4LDU2XSxDPVs0Niw0Nyw0OF0sUz1bMSw0LDUsNywxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNSwzNiwzNyw0OCw1Nl0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsb3BlbkRpcmVjdGl2ZToxMSx0eXBlRGlyZWN0aXZlOjEyLGNsb3NlRGlyZWN0aXZlOjEzLCI6IjoxNCxhcmdEaXJlY3RpdmU6MTUscGFydGljaXBhbnQ6MTYsYWN0b3I6MTcsQVM6MTgscmVzdE9mTGluZToxOSxzaWduYWw6MjAsYXV0b251bWJlcjoyMSxhY3RpdmF0ZToyMixkZWFjdGl2YXRlOjIzLG5vdGVfc3RhdGVtZW50OjI0LHRpdGxlOjI1LHRleHQyOjI2LGxvb3A6MjcsZW5kOjI4LHJlY3Q6Mjksb3B0OjMwLGFsdDozMSxlbHNlX3NlY3Rpb25zOjMyLHBhcjozMyxwYXJfc2VjdGlvbnM6MzQsYW5kOjM1LGVsc2U6MzYsbm90ZTozNyxwbGFjZW1lbnQ6Mzgsb3ZlcjozOSxhY3Rvcl9wYWlyOjQwLHNwYWNlTGlzdDo0MSwiLCI6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxzaWduYWx0eXBlOjQ1LCIrIjo0NiwiLSI6NDcsQUNUT1I6NDgsU09MSURfT1BFTl9BUlJPVzo0OSxET1RURURfT1BFTl9BUlJPVzo1MCxTT0xJRF9BUlJPVzo1MSxET1RURURfQVJST1c6NTIsU09MSURfQ1JPU1M6NTMsRE9UVEVEX0NST1NTOjU0LFRYVDo1NSxvcGVuX2RpcmVjdGl2ZTo1Nix0eXBlX2RpcmVjdGl2ZTo1NyxhcmdfZGlyZWN0aXZlOjU4LGNsb3NlX2RpcmVjdGl2ZTo1OSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5FV0xJTkUiLDc6IlNEIiwxNDoiOiIsMTY6InBhcnRpY2lwYW50IiwxODoiQVMiLDE5OiJyZXN0T2ZMaW5lIiwyMToiYXV0b251bWJlciIsMjI6ImFjdGl2YXRlIiwyMzoiZGVhY3RpdmF0ZSIsMjU6InRpdGxlIiwyNzoibG9vcCIsMjg6ImVuZCIsMjk6InJlY3QiLDMwOiJvcHQiLDMxOiJhbHQiLDMzOiJwYXIiLDM1OiJhbmQiLDM2OiJlbHNlIiwzNzoibm90ZSIsMzk6Im92ZXIiLDQyOiIsIiw0MzoibGVmdF9vZiIsNDQ6InJpZ2h0X29mIiw0NjoiKyIsNDc6Ii0iLDQ4OiJBQ1RPUiIsNDk6IlNPTElEX09QRU5fQVJST1ciLDUwOiJET1RURURfT1BFTl9BUlJPVyIsNTE6IlNPTElEX0FSUk9XIiw1MjoiRE9UVEVEX0FSUk9XIiw1MzoiU09MSURfQ1JPU1MiLDU0OiJET1RURURfQ1JPU1MiLDU1OiJUWFQiLDU2OiJvcGVuX2RpcmVjdGl2ZSIsNTc6InR5cGVfZGlyZWN0aXZlIiw1ODoiYXJnX2RpcmVjdGl2ZSIsNTk6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbNiw0XSxbNiw2XSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFszNCwxXSxbMzQsNF0sWzMyLDFdLFszMiw0XSxbMjQsNF0sWzI0LDRdLFs0MSwyXSxbNDEsMV0sWzQwLDNdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFsyMCw1XSxbMjAsNV0sWzIwLDRdLFsxNywxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbMjYsMV0sWzExLDFdLFsxMiwxXSxbMTUsMV0sWzEzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4gci5hcHBseShhW3NdKSxhW3NdO2Nhc2UgNTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA2OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTI6YVtzLTNdLmRlc2NyaXB0aW9uPXIucGFyc2VNZXNzYWdlKGFbcy0xXSksdGhpcy4kPWFbcy0zXTticmVhaztjYXNlIDEzOnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNTpyLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9W3t0eXBlOiJzZXRUaXRsZSIsdGV4dDphW3MtMV19XTticmVhaztjYXNlIDIwOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6YVtzLTJdLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyMTphW3MtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5SRUNUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDIyOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5PUFRfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjM6YVtzLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJhbHRFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI0OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfQU5EfSxhW3NdXSk7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX0VMU0V9LGFbc11dKTticmVhaztjYXNlIDMwOnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6YVtzLTJdLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDMxOmFbcy0yXT1bXS5jb25jYXQoYVtzLTFdLGFbcy0xXSkuc2xpY2UoMCwyKSxhW3MtMl1bMF09YVtzLTJdWzBdLmFjdG9yLGFbcy0yXVsxXT1hW3MtMl1bMV0uYWN0b3IsdGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpyLlBMQUNFTUVOVC5PVkVSLGFjdG9yOmFbcy0yXS5zbGljZSgwLDIpLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVthW3MtMl0sYVtzXV07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDM2OnRoaXMuJD1yLlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9ci5QTEFDRU1FTlQuUklHSFRPRjticmVhaztjYXNlIDM4OnRoaXMuJD1bYVtzLTRdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtNF0uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTNdLG1zZzphW3NdfSx7dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6YVtzLTFdfV07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9W2Fbcy00XSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTRdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0zXSxtc2c6YVtzXX0se3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6YVtzLTRdfV07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9W2Fbcy0zXSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTNdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0yXSxtc2c6YVtzXX1dO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXt0eXBlOiJhZGRBY3RvciIsYWN0b3I6YVtzXX07YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9PUEVOO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDQ1OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRDticmVhaztjYXNlIDQ2OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIucGFyc2VNZXNzYWdlKGFbc10udHJpbSgpLnN1YnN0cmluZygxKSk7YnJlYWs7Y2FzZSA0OTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNTA6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNTE6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDUyOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInNlcXVlbmNlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw1NjppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDExOjYsNTY6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw1NjppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMTE6Niw1NjppfSx0KFsxLDQsNSwxNiwyMSwyMiwyMywyNSwyNywyOSwzMCwzMSwzMywzNyw0OCw1Nl0sYSx7ODoxMX0pLHsxMjoxMiw1NzpbMSwxM119LHs1NzpbMiw0OV19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjk6cCwzMDpnLDMxOnksMzM6diwzNzptLDQ4OmIsNTY6aX0sezEzOjM0LDE0OlsxLDM1XSw1OTp4fSx0KFsxNCw1OV0sWzIsNTBdKSx0KF8sWzIsNl0pLHs2OjMwLDEwOjM3LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjk6cCwzMDpnLDMxOnksMzM6diwzNzptLDQ4OmIsNTY6aX0sdChfLFsyLDhdKSx0KF8sWzIsOV0pLHsxNzozOCw0ODpifSx7NTpbMSwzOV19LHQoXyxbMiwxNV0pLHsxNzo0MCw0ODpifSx7MTc6NDEsNDg6Yn0sezU6WzEsNDJdfSx7MjY6NDMsNTU6a30sezE5OlsxLDQ1XX0sezE5OlsxLDQ2XX0sezE5OlsxLDQ3XX0sezE5OlsxLDQ4XX0sezE5OlsxLDQ5XX0sdChfLFsyLDI1XSksezQ1OjUwLDQ5OlsxLDUxXSw1MDpbMSw1Ml0sNTE6WzEsNTNdLDUyOlsxLDU0XSw1MzpbMSw1NV0sNTQ6WzEsNTZdfSx7Mzg6NTcsMzk6WzEsNThdLDQzOlsxLDU5XSw0NDpbMSw2MF19LHQoWzUsMTgsNDIsNDksNTAsNTEsNTIsNTMsNTQsNTVdLFsyLDQxXSksezU6WzEsNjFdfSx7MTU6NjIsNTg6WzEsNjNdfSx7NTpbMiw1Ml19LHQoXyxbMiw3XSksezU6WzEsNjVdLDE4OlsxLDY0XX0sdChfLFsyLDE0XSksezU6WzEsNjZdfSx7NTpbMSw2N119LHQoXyxbMiwxOF0pLHs1OlsxLDY4XX0sezU6WzIsNDhdfSx0KHcsYSx7ODo2OX0pLHQodyxhLHs4OjcwfSksdCh3LGEsezg6NzF9KSx0KEUsYSx7MzI6NzIsODo3M30pLHQoVCxhLHszNDo3NCw4Ojc1fSksezE3Ojc4LDQ2OlsxLDc2XSw0NzpbMSw3N10sNDg6Yn0sdChDLFsyLDQyXSksdChDLFsyLDQzXSksdChDLFsyLDQ0XSksdChDLFsyLDQ1XSksdChDLFsyLDQ2XSksdChDLFsyLDQ3XSksezE3Ojc5LDQ4OmJ9LHsxNzo4MSw0MDo4MCw0ODpifSx7NDg6WzIsMzZdfSx7NDg6WzIsMzddfSx0KFMsWzIsMTBdKSx7MTM6ODIsNTk6eH0sezU5OlsyLDUxXX0sezE5OlsxLDgzXX0sdChfLFsyLDEzXSksdChfLFsyLDE2XSksdChfLFsyLDE3XSksdChfLFsyLDE5XSksezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzEsODRdLDI5OnAsMzA6ZywzMTp5LDMzOnYsMzc6bSw0ODpiLDU2Oml9LHs0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI4OlsxLDg1XSwyOTpwLDMwOmcsMzE6eSwzMzp2LDM3Om0sNDg6Yiw1NjppfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMSw4Nl0sMjk6cCwzMDpnLDMxOnksMzM6diwzNzptLDQ4OmIsNTY6aX0sezI4OlsxLDg3XX0sezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzIsMjhdLDI5OnAsMzA6ZywzMTp5LDMzOnYsMzY6WzEsODhdLDM3Om0sNDg6Yiw1NjppfSx7Mjg6WzEsODldfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMiwyNl0sMjk6cCwzMDpnLDMxOnksMzM6diwzNTpbMSw5MF0sMzc6bSw0ODpiLDU2Oml9LHsxNzo5MSw0ODpifSx7MTc6OTIsNDg6Yn0sezI2OjkzLDU1Omt9LHsyNjo5NCw1NTprfSx7MjY6OTUsNTU6a30sezQyOlsxLDk2XSw1NTpbMiwzNV19LHs1OlsxLDk3XX0sezU6WzEsOThdfSx0KF8sWzIsMjBdKSx0KF8sWzIsMjFdKSx0KF8sWzIsMjJdKSx0KF8sWzIsMjNdKSx7MTk6WzEsOTldfSx0KF8sWzIsMjRdKSx7MTk6WzEsMTAwXX0sezI2OjEwMSw1NTprfSx7MjY6MTAyLDU1Omt9LHs1OlsyLDQwXX0sezU6WzIsMzBdfSx7NTpbMiwzMV19LHsxNzoxMDMsNDg6Yn0sdChTLFsyLDExXSksdChfLFsyLDEyXSksdChFLGEsezg6NzMsMzI6MTA0fSksdChULGEsezg6NzUsMzQ6MTA1fSksezU6WzIsMzhdfSx7NTpbMiwzOV19LHs1NTpbMiwzNF19LHsyODpbMiwyOV19LHsyODpbMiwyN119XSxkZWZhdWx0QWN0aW9uczp7NzpbMiw0OV0sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDM2OlsyLDUyXSw0NDpbMiw0OF0sNTk6WzIsMzZdLDYwOlsyLDM3XSw2MzpbMiw1MV0sOTM6WzIsNDBdLDk0OlsyLDMwXSw5NTpbMiwzMV0sMTAxOlsyLDM4XSwxMDI6WzIsMzldLDEwMzpbMiwzNF0sMTA0OlsyLDI5XSwxMDU6WzIsMjddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDU2O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw1NztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU5O2Nhc2UgNDpyZXR1cm4gNTg7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMTY7Y2FzZSAxMjpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLHRoaXMuYmVnaW4oIkFMSUFTIiksNDg7Y2FzZSAxMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJMSU5FIiksMTg7Y2FzZSAxNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1O2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwyNztjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMjk7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMwO2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzMTtjYXNlIDE5OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzY7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMzO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNTtjYXNlIDIyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTk7Y2FzZSAyMzpyZXR1cm4gMjg7Y2FzZSAyNDpyZXR1cm4gNDM7Y2FzZSAyNTpyZXR1cm4gNDQ7Y2FzZSAyNjpyZXR1cm4gMzk7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMjtjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzA6cmV0dXJuIDI1O2Nhc2UgMzE6cmV0dXJuIDc7Y2FzZSAzMjpyZXR1cm4gMjE7Y2FzZSAzMzpyZXR1cm4gNDI7Y2FzZSAzNDpyZXR1cm4gNTtjYXNlIDM1OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksNDg7Y2FzZSAzNjpyZXR1cm4gNTE7Y2FzZSAzNzpyZXR1cm4gNTI7Y2FzZSAzODpyZXR1cm4gNDk7Y2FzZSAzOTpyZXR1cm4gNTA7Y2FzZSA0MDpyZXR1cm4gNTM7Y2FzZSA0MTpyZXR1cm4gNTQ7Y2FzZSA0MjpyZXR1cm4gNTU7Y2FzZSA0MzpyZXR1cm4gNDY7Y2FzZSA0NDpyZXR1cm4gNDc7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86W15cLT46XG4sO10rPyg/PSgoPyFcbilccykrYXMoPyFcbilcc3xbI1xuO118JCkpL2ksL14oPzphc1xiKS9pLC9eKD86KD86KSkvaSwvXig/Omxvb3BcYikvaSwvXig/OnJlY3RcYikvaSwvXig/Om9wdFxiKS9pLC9eKD86YWx0XGIpL2ksL14oPzplbHNlXGIpL2ksL14oPzpwYXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcbjtdKikvaSwvXig/OmVuZFxiKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/Om92ZXJcYikvaSwvXig/Om5vdGVcYikvaSwvXig/OmFjdGl2YXRlXGIpL2ksL14oPzpkZWFjdGl2YXRlXGIpL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86c2VxdWVuY2VEaWFncmFtXGIpL2ksL14oPzphdXRvbnVtYmVyXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXgpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/OjooPzooPzpubyk/d3JhcCk/W14jXG47XSspL2ksL14oPzpcKykvaSwvXig/Oi0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxLDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDMsOF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0LDhdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls3LDgsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOls3LDgsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzcsOCwyMl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsOCw5LDEwLDExLDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gTygpe3RoaXMueXk9e319cmV0dXJuIEEubGV4ZXI9TSxPLnByb3RvdHlwZT1BLEEuUGFyc2VyPU8sbmV3IE99KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTk4KTt0LmV4cG9ydHM9e0dyYXBoOnIuR3JhcGgsanNvbjpuKDMwMSksYWxnOm4oMzAyKSx2ZXJzaW9uOnIudmVyc2lvbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjt0cnl7cj17Y2xvbmVEZWVwOm4oMzEzKSxjb25zdGFudDpuKDg2KSxkZWZhdWx0czpuKDE1NCksZWFjaDpuKDg3KSxmaWx0ZXI6bigxMjgpLGZpbmQ6bigzMTQpLGZsYXR0ZW46bigxNTYpLGZvckVhY2g6bigxMjYpLGZvckluOm4oMzE5KSxoYXM6big5MyksaXNVbmRlZmluZWQ6bigxMzkpLGxhc3Q6bigzMjApLG1hcDpuKDE0MCksbWFwVmFsdWVzOm4oMzIxKSxtYXg6bigzMjIpLG1lcmdlOm4oMzI0KSxtaW46bigzMjkpLG1pbkJ5Om4oMzMwKSxub3c6bigzMzEpLHBpY2s6bigxNjEpLHJhbmdlOm4oMTYyKSxyZWR1Y2U6bigxNDIpLHNvcnRCeTpuKDMzOCksdW5pcXVlSWQ6bigxNjMpLHZhbHVlczpuKDE0NyksemlwT2JqZWN0Om4oMzQzKX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt2YXIgbj1BcnJheS5pc0FycmF5O3QuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUsbil7Ci8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBDaHJpcyBQZXR0aXR0CiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KdC5leHBvcnRzPXtncmFwaGxpYjpuKDMxMSksZGFncmU6bigxNTMpLGludGVyc2VjdDpuKDM2OCkscmVuZGVyOm4oMzcwKSx1dGlsOm4oMTIpLHZlcnNpb246bigzODIpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDE3KS5HcmFwaDtmdW5jdGlvbiBhKHQsZSxuLGkpe3ZhciBhO2Rve2E9ci51bmlxdWVJZChpKX13aGlsZSh0Lmhhc05vZGUoYSkpO3JldHVybiBuLmR1bW15PWUsdC5zZXROb2RlKGEsbiksYX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1heChyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKS5yYW5rO2lmKCFyLmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX10LmV4cG9ydHM9e2FkZER1bW15Tm9kZTphLHNpbXBsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgaSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDpyLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgoci5taW5sZW4saS5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXtlLnNldEVkZ2Uobix0LmVkZ2UobikpfSkpLGV9LHN1Y2Nlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS52XT0obltlLnZdfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtpZighbyYmIXMpdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9YypzL28pO3JldHVybnt4Omkrbix5OmErcn19LGJ1aWxkTGF5ZXJNYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAoci5yYW5nZShvKHQpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobiksYT1pLnJhbms7ci5pc1VuZGVmaW5lZChhKXx8KGVbYV1baS5vcmRlcl09bil9KSksZX0sbm9ybWFsaXplUmFua3M6ZnVuY3Rpb24odCl7dmFyIGU9ci5taW4oci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKTtyLmhhcyhpLCJyYW5rIikmJihpLnJhbmstPWUpfSkpfSxyZW1vdmVFbXB0eVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxuPVtdO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKS5yYW5rLWU7bltpXXx8KG5baV09W10pLG5baV0ucHVzaChyKX0pKTt2YXIgaT0wLGE9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO3IuZm9yRWFjaChuLChmdW5jdGlvbihlLG4pe3IuaXNVbmRlZmluZWQoZSkmJm4lYSE9MD8tLWk6aSYmci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS5yYW5rKz1pfSkpfSkpfSxhZGRCb3JkZXJOb2RlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXt3aWR0aDowLGhlaWdodDowfTthcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPW4saS5vcmRlcj1yKTtyZXR1cm4gYSh0LCJib3JkZXIiLGksZSl9LG1heFJhbms6byxwYXJ0aXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj17bGhzOltdLHJoczpbXX07cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0KXtlKHQpP24ubGhzLnB1c2godCk6bi5yaHMucHVzaCh0KX0pKSxufSx0aW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49ci5ub3coKTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e2NvbnNvbGUubG9nKHQrIiB0aW1lOiAiKyhyLm5vdygpLW4pKyJtcyIpfX0sbm90aW1lOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUoKX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE3MyksaT1uKDE3NCksYT1uKDE3NSksbz17Y2hhbm5lbDpyLmRlZmF1bHQsbGFuZzppLmRlZmF1bHQsdW5pdDphLmRlZmF1bHR9O2UuZGVmYXVsdD1vfSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lOm4oMTk5KSxjb25zdGFudDpuKDg2KSxlYWNoOm4oODcpLGZpbHRlcjpuKDEyOCksaGFzOm4oOTMpLGlzQXJyYXk6big1KSxpc0VtcHR5Om4oMjc2KSxpc0Z1bmN0aW9uOm4oMzcpLGlzVW5kZWZpbmVkOm4oMTM5KSxrZXlzOm4oMzApLG1hcDpuKDE0MCkscmVkdWNlOm4oMTQyKSxzaXplOm4oMjc5KSx0cmFuc2Zvcm06bigyODUpLHVuaW9uOm4oMjg2KSx2YWx1ZXM6bigxNDcpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzKTt0LmV4cG9ydHM9e2lzU3ViZ3JhcGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuY2hpbGRyZW4oZSkubGVuZ3RofSxlZGdlVG9JZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnYpKyI6IithKHQudykrIjoiK2EodC5uYW1lKX0sYXBwbHlTdHlsZTpmdW5jdGlvbih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfSxhcHBseUNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtlJiZ0LmF0dHIoImNsYXNzIixlKS5hdHRyKCJjbGFzcyIsbisiICIrdC5hdHRyKCJjbGFzcyIpKX0sYXBwbHlUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ncmFwaCgpO2lmKHIuaXNQbGFpbk9iamVjdChuKSl7dmFyIGk9bi50cmFuc2l0aW9uO2lmKHIuaXNGdW5jdGlvbihpKSlyZXR1cm4gaSh0KX1yZXR1cm4gdH19O3ZhciBpPS86L2c7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD9TdHJpbmcodCkucmVwbGFjZShpLCJcXDoiKToiIn19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsN10sbj1bMSw2XSxyPVsxLDE0XSxpPVsxLDI1XSxhPVsxLDI4XSxvPVsxLDI2XSxzPVsxLDI3XSxjPVsxLDI5XSx1PVsxLDMwXSxsPVsxLDMxXSxoPVsxLDMzXSxmPVsxLDM0XSxkPVsxLDM1XSxwPVsxMCwxOV0sZz1bMSw0N10seT1bMSw0OF0sdj1bMSw0OV0sbT1bMSw1MF0sYj1bMSw1MV0seD1bMSw1Ml0sXz1bMTAsMTksMjUsMzIsMzMsNDEsNDQsNDUsNDYsNDcsNDgsNDldLGs9WzEwLDE5LDIzLDI1LDMyLDMzLDM3LDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDY2LDY3LDY4XSx3PVsxMCwxMywxNywxOV0sRT1bNDEsNjYsNjcsNjhdLFQ9WzQxLDQ4LDQ5LDY2LDY3LDY4XSxDPVs0MSw0NCw0NSw0Niw0Nyw2Niw2Nyw2OF0sUz1bMTAsMTksMjVdLEE9WzEsODFdLE09e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxncmFwaENvbmZpZzo2LG9wZW5EaXJlY3RpdmU6Nyx0eXBlRGlyZWN0aXZlOjgsY2xvc2VEaXJlY3RpdmU6OSxORVdMSU5FOjEwLCI6IjoxMSxhcmdEaXJlY3RpdmU6MTIsb3Blbl9kaXJlY3RpdmU6MTMsdHlwZV9kaXJlY3RpdmU6MTQsYXJnX2RpcmVjdGl2ZToxNSxjbG9zZV9kaXJlY3RpdmU6MTYsQ0xBU1NfRElBR1JBTToxNyxzdGF0ZW1lbnRzOjE4LEVPRjoxOSxzdGF0ZW1lbnQ6MjAsY2xhc3NOYW1lOjIxLGFscGhhTnVtVG9rZW46MjIsR0VORVJJQ1RZUEU6MjMscmVsYXRpb25TdGF0ZW1lbnQ6MjQsTEFCRUw6MjUsY2xhc3NTdGF0ZW1lbnQ6MjYsbWV0aG9kU3RhdGVtZW50OjI3LGFubm90YXRpb25TdGF0ZW1lbnQ6MjgsY2xpY2tTdGF0ZW1lbnQ6MjksY3NzQ2xhc3NTdGF0ZW1lbnQ6MzAsQ0xBU1M6MzEsU1RZTEVfU0VQQVJBVE9SOjMyLFNUUlVDVF9TVEFSVDozMyxtZW1iZXJzOjM0LFNUUlVDVF9TVE9QOjM1LEFOTk9UQVRJT05fU1RBUlQ6MzYsQU5OT1RBVElPTl9FTkQ6MzcsTUVNQkVSOjM4LFNFUEFSQVRPUjozOSxyZWxhdGlvbjo0MCxTVFI6NDEscmVsYXRpb25UeXBlOjQyLGxpbmVUeXBlOjQzLEFHR1JFR0FUSU9OOjQ0LEVYVEVOU0lPTjo0NSxDT01QT1NJVElPTjo0NixERVBFTkRFTkNZOjQ3LExJTkU6NDgsRE9UVEVEX0xJTkU6NDksQ0FMTEJBQ0s6NTAsTElOSzo1MSxDU1NDTEFTUzo1Mixjb21tZW50VG9rZW46NTMsdGV4dFRva2VuOjU0LGdyYXBoQ29kZVRva2Vuczo1NSx0ZXh0Tm9UYWdzVG9rZW46NTYsVEFHU1RBUlQ6NTcsVEFHRU5EOjU4LCI9PSI6NTksIi0tIjo2MCxQQ1Q6NjEsREVGQVVMVDo2MixTUEFDRTo2MyxNSU5VUzo2NCxrZXl3b3Jkczo2NSxVTklDT0RFX1RFWFQ6NjYsTlVNOjY3LEFMUEhBOjY4LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiwxMDoiTkVXTElORSIsMTE6IjoiLDEzOiJvcGVuX2RpcmVjdGl2ZSIsMTQ6InR5cGVfZGlyZWN0aXZlIiwxNToiYXJnX2RpcmVjdGl2ZSIsMTY6ImNsb3NlX2RpcmVjdGl2ZSIsMTc6IkNMQVNTX0RJQUdSQU0iLDE5OiJFT0YiLDIzOiJHRU5FUklDVFlQRSIsMjU6IkxBQkVMIiwzMToiQ0xBU1MiLDMyOiJTVFlMRV9TRVBBUkFUT1IiLDMzOiJTVFJVQ1RfU1RBUlQiLDM1OiJTVFJVQ1RfU1RPUCIsMzY6IkFOTk9UQVRJT05fU1RBUlQiLDM3OiJBTk5PVEFUSU9OX0VORCIsMzg6Ik1FTUJFUiIsMzk6IlNFUEFSQVRPUiIsNDE6IlNUUiIsNDQ6IkFHR1JFR0FUSU9OIiw0NToiRVhURU5TSU9OIiw0NjoiQ09NUE9TSVRJT04iLDQ3OiJERVBFTkRFTkNZIiw0ODoiTElORSIsNDk6IkRPVFRFRF9MSU5FIiw1MDoiQ0FMTEJBQ0siLDUxOiJMSU5LIiw1MjoiQ1NTQ0xBU1MiLDU1OiJncmFwaENvZGVUb2tlbnMiLDU3OiJUQUdTVEFSVCIsNTg6IlRBR0VORCIsNTk6Ij09Iiw2MDoiLS0iLDYxOiJQQ1QiLDYyOiJERUZBVUxUIiw2MzoiU1BBQ0UiLDY0OiJNSU5VUyIsNjU6ImtleXdvcmRzIiw2NjoiVU5JQ09ERV9URVhUIiw2NzoiTlVNIiw2ODoiQUxQSEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzQsMV0sWzUsNF0sWzUsNl0sWzcsMV0sWzgsMV0sWzEyLDFdLFs5LDFdLFs2LDRdLFsxOCwxXSxbMTgsMl0sWzE4LDNdLFsyMSwxXSxbMjEsMl0sWzIxLDNdLFsyMSwyXSxbMjAsMV0sWzIwLDJdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyNiwyXSxbMjYsNF0sWzI2LDVdLFsyNiw3XSxbMjgsNF0sWzM0LDFdLFszNCwyXSxbMjcsMV0sWzI3LDJdLFsyNywxXSxbMjcsMV0sWzI0LDNdLFsyNCw0XSxbMjQsNF0sWzI0LDVdLFs0MCwzXSxbNDAsMl0sWzQwLDJdLFs0MCwxXSxbNDIsMV0sWzQyLDFdLFs0MiwxXSxbNDIsMV0sWzQzLDFdLFs0MywxXSxbMjksM10sWzI5LDRdLFsyOSwzXSxbMjksNF0sWzMwLDNdLFs1MywxXSxbNTMsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbMjIsMV0sWzIyLDFdLFsyMiwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgOTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJjbGFzcyIpO2JyZWFrO2Nhc2UgMTQ6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxNTp0aGlzLiQ9YVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9YVtzLTJdKyJ+IithW3MtMV0rYVtzXTticmVhaztjYXNlIDE3OnRoaXMuJD1hW3MtMV0rIn4iK2Fbc107YnJlYWs7Y2FzZSAxODpyLmFkZFJlbGF0aW9uKGFbc10pO2JyZWFrO2Nhc2UgMTk6YVtzLTFdLnRpdGxlPXIuY2xlYW51cExhYmVsKGFbc10pLHIuYWRkUmVsYXRpb24oYVtzLTFdKTticmVhaztjYXNlIDI2OnIuYWRkQ2xhc3MoYVtzXSk7YnJlYWs7Y2FzZSAyNzpyLmFkZENsYXNzKGFbcy0yXSksci5zZXRDc3NDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAyODpyLmFkZENsYXNzKGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMjk6ci5hZGRDbGFzcyhhW3MtNV0pLHIuc2V0Q3NzQ2xhc3MoYVtzLTVdLGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy01XSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzA6ci5hZGRBbm5vdGF0aW9uKGFbc10sYVtzLTJdKTticmVhaztjYXNlIDMxOnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAzMjphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDMzOmJyZWFrO2Nhc2UgMzQ6ci5hZGRNZW1iZXIoYVtzLTFdLHIuY2xlYW51cExhYmVsKGFbc10pKTticmVhaztjYXNlIDM1OmNhc2UgMzY6YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9e2lkMTphW3MtMl0saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0xXSxyZWxhdGlvblRpdGxlMTphW3MtMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDM5OnRoaXMuJD17aWQxOmFbcy0zXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9e2lkMTphW3MtNF0saWQyOmFbc10scmVsYXRpb246YVtzLTJdLHJlbGF0aW9uVGl0bGUxOmFbcy0zXSxyZWxhdGlvblRpdGxlMjphW3MtMV19O2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXt0eXBlMTphW3MtMl0sdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXt0eXBlMTphW3MtMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDQ3OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDQ4OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIubGluZVR5cGUuTElORTticmVhaztjYXNlIDUwOnRoaXMuJD1yLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTFdLGFbc10sdm9pZCAwKTticmVhaztjYXNlIDUyOnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9YVtzLTJdLHIuc2V0TGluayhhW3MtMV0sYVtzXSx2b2lkIDApO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDU1OnIuc2V0Q3NzQ2xhc3MoYVtzLTFdLGFbc10pfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzo1LDEzOmUsMTc6bn0sezE6WzNdfSx7MTpbMiwxXX0sezM6OCw0OjIsNTozLDY6NCw3OjUsMTM6ZSwxNzpufSx7MTpbMiwzXX0sezg6OSwxNDpbMSwxMF19LHsxMDpbMSwxMV19LHsxNDpbMiw2XX0sezE6WzIsMl19LHs5OjEyLDExOlsxLDEzXSwxNjpyfSx0KFsxMSwxNl0sWzIsN10pLHs1OjIzLDc6NSwxMzplLDE4OjE1LDIwOjE2LDIxOjI0LDIyOjMyLDI0OjE3LDI2OjE4LDI3OjE5LDI4OjIwLDI5OjIxLDMwOjIyLDMxOmksMzY6YSwzODpvLDM5OnMsNTA6Yyw1MTp1LDUyOmwsNjY6aCw2NzpmLDY4OmR9LHsxMDpbMSwzNl19LHsxMjozNywxNTpbMSwzOF19LHsxMDpbMiw5XX0sezE5OlsxLDM5XX0sezEwOlsxLDQwXSwxOTpbMiwxMV19LHQocCxbMiwxOF0sezI1OlsxLDQxXX0pLHQocCxbMiwyMF0pLHQocCxbMiwyMV0pLHQocCxbMiwyMl0pLHQocCxbMiwyM10pLHQocCxbMiwyNF0pLHQocCxbMiwyNV0pLHQocCxbMiwzM10sezQwOjQyLDQyOjQ1LDQzOjQ2LDI1OlsxLDQ0XSw0MTpbMSw0M10sNDQ6Zyw0NTp5LDQ2OnYsNDc6bSw0ODpiLDQ5Onh9KSx7MjE6NTMsMjI6MzIsNjY6aCw2NzpmLDY4OmR9LHQocCxbMiwzNV0pLHQocCxbMiwzNl0pLHsyMjo1NCw2NjpoLDY3OmYsNjg6ZH0sezIxOjU1LDIyOjMyLDY2OmgsNjc6Ziw2ODpkfSx7MjE6NTYsMjI6MzIsNjY6aCw2NzpmLDY4OmR9LHs0MTpbMSw1N119LHQoXyxbMiwxNF0sezIyOjMyLDIxOjU4LDIzOlsxLDU5XSw2NjpoLDY3OmYsNjg6ZH0pLHQoayxbMiw2OV0pLHQoayxbMiw3MF0pLHQoayxbMiw3MV0pLHQodyxbMiw0XSksezk6NjAsMTY6cn0sezE2OlsyLDhdfSx7MTpbMiwxMF19LHs1OjIzLDc6NSwxMzplLDE4OjYxLDE5OlsyLDEyXSwyMDoxNiwyMToyNCwyMjozMiwyNDoxNywyNjoxOCwyNzoxOSwyODoyMCwyOToyMSwzMDoyMiwzMTppLDM2OmEsMzg6bywzOTpzLDUwOmMsNTE6dSw1MjpsLDY2OmgsNjc6Ziw2ODpkfSx0KHAsWzIsMTldKSx7MjE6NjIsMjI6MzIsNDE6WzEsNjNdLDY2OmgsNjc6Ziw2ODpkfSx7NDA6NjQsNDI6NDUsNDM6NDYsNDQ6Zyw0NTp5LDQ2OnYsNDc6bSw0ODpiLDQ5Onh9LHQocCxbMiwzNF0pLHs0Mzo2NSw0ODpiLDQ5Onh9LHQoRSxbMiw0NF0sezQyOjY2LDQ0OmcsNDU6eSw0Njp2LDQ3Om19KSx0KFQsWzIsNDVdKSx0KFQsWzIsNDZdKSx0KFQsWzIsNDddKSx0KFQsWzIsNDhdKSx0KEMsWzIsNDldKSx0KEMsWzIsNTBdKSx0KHAsWzIsMjZdLHszMjpbMSw2N10sMzM6WzEsNjhdfSksezM3OlsxLDY5XX0sezQxOlsxLDcwXX0sezQxOlsxLDcxXX0sezIyOjcyLDY2OmgsNjc6Ziw2ODpkfSx0KF8sWzIsMTVdKSx0KF8sWzIsMTddLHsyMjozMiwyMTo3Myw2NjpoLDY3OmYsNjg6ZH0pLHsxMDpbMSw3NF19LHsxOTpbMiwxM119LHQoUyxbMiwzN10pLHsyMTo3NSwyMjozMiw2NjpoLDY3OmYsNjg6ZH0sezIxOjc2LDIyOjMyLDQxOlsxLDc3XSw2NjpoLDY3OmYsNjg6ZH0sdChFLFsyLDQzXSx7NDI6NzgsNDQ6Zyw0NTp5LDQ2OnYsNDc6bX0pLHQoRSxbMiw0Ml0pLHsyMjo3OSw2NjpoLDY3OmYsNjg6ZH0sezM0OjgwLDM4OkF9LHsyMTo4MiwyMjozMiw2NjpoLDY3OmYsNjg6ZH0sdChwLFsyLDUxXSx7NDE6WzEsODNdfSksdChwLFsyLDUzXSx7NDE6WzEsODRdfSksdChwLFsyLDU1XSksdChfLFsyLDE2XSksdCh3LFsyLDVdKSx0KFMsWzIsMzldKSx0KFMsWzIsMzhdKSx7MjE6ODUsMjI6MzIsNjY6aCw2NzpmLDY4OmR9LHQoRSxbMiw0MV0pLHQocCxbMiwyN10sezMzOlsxLDg2XX0pLHszNTpbMSw4N119LHszNDo4OCwzNTpbMiwzMV0sMzg6QX0sdChwLFsyLDMwXSksdChwLFsyLDUyXSksdChwLFsyLDU0XSksdChTLFsyLDQwXSksezM0Ojg5LDM4OkF9LHQocCxbMiwyOF0pLHszNTpbMiwzMl19LHszNTpbMSw5MF19LHQocCxbMiwyOV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw0OlsyLDNdLDc6WzIsNl0sODpbMiwyXSwxNDpbMiw5XSwzODpbMiw4XSwzOTpbMiwxMF0sNjE6WzIsMTNdLDg4OlsyLDMyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE89e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxMztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMTQ7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDExO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwxNjtjYXNlIDQ6cmV0dXJuIDE1O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OmNhc2UgMTA6cmV0dXJuIDE3O2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oInN0cnVjdCIpLDMzO2Nhc2UgMTI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMTM6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzU7Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiJNRU1CRVIiO2Nhc2UgMTc6cmV0dXJuIDMxO2Nhc2UgMTg6cmV0dXJuIDUyO2Nhc2UgMTk6cmV0dXJuIDUwO2Nhc2UgMjA6cmV0dXJuIDUxO2Nhc2UgMjE6cmV0dXJuIDM2O2Nhc2UgMjI6cmV0dXJuIDM3O2Nhc2UgMjM6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDI2OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIlNUUiI7Y2FzZSAyOTpjYXNlIDMwOnJldHVybiA0NTtjYXNlIDMxOmNhc2UgMzI6cmV0dXJuIDQ3O2Nhc2UgMzM6cmV0dXJuIDQ2O2Nhc2UgMzQ6cmV0dXJuIDQ0O2Nhc2UgMzU6cmV0dXJuIDQ4O2Nhc2UgMzY6cmV0dXJuIDQ5O2Nhc2UgMzc6cmV0dXJuIDI1O2Nhc2UgMzg6cmV0dXJuIDMyO2Nhc2UgMzk6cmV0dXJuIDY0O2Nhc2UgNDA6cmV0dXJuIkRPVCI7Y2FzZSA0MTpyZXR1cm4iUExVUyI7Y2FzZSA0MjpyZXR1cm4gNjE7Y2FzZSA0MzpjYXNlIDQ0OnJldHVybiJFUVVBTFMiO2Nhc2UgNDU6cmV0dXJuIDY4O2Nhc2UgNDY6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDQ3OnJldHVybiA2NztjYXNlIDQ4OnJldHVybiA2NjtjYXNlIDQ5OnJldHVybiA2MztjYXNlIDUwOnJldHVybiAxOX19LHJ1bGVzOlsvXig/OiUlXHspLywvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS8sL14oPzo6KS8sL14oPzpcfSUlKS8sL14oPzooKD86KD8hXH0lJSkufFxuKSopKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/Oihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86W3tdKS8sL14oPzokKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNsYXNzXGIpLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpbfl0pLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXC9dKS8sL14oPzpbMC05XSspLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7c3RyaW5nOntydWxlczpbMjcsMjhdLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEyLDEzLDE0LDE1LDE2XSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxNywxOCwxOSwyMCwyMSwyMiwyMywyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIEQoKXt0aGlzLnl5PXt9fXJldHVybiBNLmxleGVyPU8sRC5wcm90b3R5cGU9TSxNLlBhcnNlcj1ELG5ldyBEfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuZXhwb3J0cz17fTtmdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcyh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09YXx8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6YX1jYXRjaCh0KXtuPWF9dHJ5e3I9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6b31jYXRjaCh0KXtyPW99fSgpO3ZhciBjLHU9W10sbD0hMSxoPS0xO2Z1bmN0aW9uIGYoKXtsJiZjJiYobD0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFsKXt2YXIgdD1zKGYpO2w9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxsPSExLGZ1bmN0aW9uKHQpe2lmKHI9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigocj09PW98fCFyKSYmY2xlYXJUaW1lb3V0KXJldHVybiByPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e3IodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiByLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gci5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIHAodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBnKCl7fWkubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTt1LnB1c2gobmV3IHAodCxlKSksMSE9PXUubGVuZ3RofHxsfHxzKGQpfSxwLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxpLnRpdGxlPSJicm93c2VyIixpLmJyb3dzZXI9ITAsaS5lbnY9e30saS5hcmd2PVtdLGkudmVyc2lvbj0iIixpLnZlcnNpb25zPXt9LGkub249ZyxpLmFkZExpc3RlbmVyPWcsaS5vbmNlPWcsaS5vZmY9ZyxpLnJlbW92ZUxpc3RlbmVyPWcsaS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZyxpLmVtaXQ9ZyxpLnByZXBlbmRMaXN0ZW5lcj1nLGkucHJlcGVuZE9uY2VMaXN0ZW5lcj1nLGkubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxpLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxpLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0saS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxpLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDc1KSxpPW4oOTkpLGE9bigxNzkpLG89bigxODApLHM9bigxODEpLGM9e2Zvcm1hdDp7a2V5d29yZDphLmRlZmF1bHQsaGV4OmkuZGVmYXVsdCxyZ2I6by5kZWZhdWx0LHJnYmE6by5kZWZhdWx0LGhzbDpzLmRlZmF1bHQsaHNsYTpzLmRlZmF1bHR9LHBhcnNlOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT1pLmRlZmF1bHQucGFyc2UodCl8fG8uZGVmYXVsdC5wYXJzZSh0KXx8cy5kZWZhdWx0LnBhcnNlKHQpfHxhLmRlZmF1bHQucGFyc2UodCk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIicrdCsnIicpfSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7cmV0dXJuIXQuY2hhbmdlZCYmdC5jb2xvcj90LmNvbG9yOnQudHlwZS5pcyhyLlRZUEUuSFNMKXx8dm9pZCAwPT09dC5kYXRhLnI/cy5kZWZhdWx0LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9vLmRlZmF1bHQuc3RyaW5naWZ5KHQpOmkuZGVmYXVsdC5zdHJpbmdpZnkodCl9fTtlLmRlZmF1bHQ9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA5KSxpPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsYT1yfHxpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9bigzKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmdyYXBobGliKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Z3JhcGhsaWI6bigxNyksbGF5b3V0Om4oMzEyKSxkZWJ1ZzpuKDM2NiksdXRpbDp7dGltZTpuKDgpLnRpbWUsbm90aW1lOm4oOCkubm90aW1lfSx2ZXJzaW9uOm4oMzY3KX19LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPXRbcl07Ii4iPT09aT90LnNwbGljZShyLDEpOiIuLiI9PT1pPyh0LnNwbGljZShyLDEpLG4rKyk6biYmKHQuc3BsaWNlKHIsMSksbi0tKX1pZihlKWZvcig7bi0tO24pdC51bnNoaWZ0KCIuLiIpO3JldHVybiB0fWZ1bmN0aW9uIHIodCxlKXtpZih0LmZpbHRlcilyZXR1cm4gdC5maWx0ZXIoZSk7Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyllKHRbcl0scix0KSYmbi5wdXNoKHRbcl0pO3JldHVybiBufWUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0iIixpPSExLGE9YXJndW1lbnRzLmxlbmd0aC0xO2E+PS0xJiYhaTthLS0pe3ZhciBvPWE+PTA/YXJndW1lbnRzW2FdOnQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7byYmKGU9bysiLyIrZSxpPSIvIj09PW8uY2hhckF0KDApKX1yZXR1cm4oaT8iLyI6IiIpKyhlPW4ocihlLnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhaSkuam9pbigiLyIpKXx8Ii4ifSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXt2YXIgYT1lLmlzQWJzb2x1dGUodCksbz0iLyI9PT1pKHQsLTEpO3JldHVybih0PW4ocih0LnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhYSkuam9pbigiLyIpKXx8YXx8KHQ9Ii4iKSx0JiZvJiYodCs9Ii8iKSwoYT8iLyI6IiIpK3R9LGUuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKX0sZS5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBlLm5vcm1hbGl6ZShyKHQsKGZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7cmV0dXJuIHR9KSkuam9pbigiLyIpKX0sZS5yZWxhdGl2ZT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aCYmIiI9PT10W2VdO2UrKyk7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmIiI9PT10W25dO24tLSk7cmV0dXJuIGU+bj9bXTp0LnNsaWNlKGUsbi1lKzEpfXQ9ZS5yZXNvbHZlKHQpLnN1YnN0cigxKSxuPWUucmVzb2x2ZShuKS5zdWJzdHIoMSk7Zm9yKHZhciBpPXIodC5zcGxpdCgiLyIpKSxhPXIobi5zcGxpdCgiLyIpKSxvPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoKSxzPW8sYz0wO2M8bztjKyspaWYoaVtjXSE9PWFbY10pe3M9YzticmVha312YXIgdT1bXTtmb3IoYz1zO2M8aS5sZW5ndGg7YysrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChhLnNsaWNlKHMpKSkuam9pbigiLyIpfSxlLnNlcD0iLyIsZS5kZWxpbWl0ZXI9IjoiLGUuZGlybmFtZT1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIiksMD09PXQubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGU9dC5jaGFyQ29kZUF0KDApLG49NDc9PT1lLHI9LTEsaT0hMCxhPXQubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0oZT10LmNoYXJDb2RlQXQoYSkpKXtpZighaSl7cj1hO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuLTE9PT1yP24/Ii8iOiIuIjpuJiYxPT09cj8iLyI6dC5zbGljZSgwLHIpfSxlLmJhc2VuYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO3ZhciBlLG49MCxyPS0xLGk9ITA7Zm9yKGU9dC5sZW5ndGgtMTtlPj0wOy0tZSlpZig0Nz09PXQuY2hhckNvZGVBdChlKSl7aWYoIWkpe249ZSsxO2JyZWFrfX1lbHNlLTE9PT1yJiYoaT0hMSxyPWUrMSk7cmV0dXJuLTE9PT1yPyIiOnQuc2xpY2UobixyKX0odCk7cmV0dXJuIGUmJm4uc3Vic3RyKC0xKmUubGVuZ3RoKT09PWUmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtZS5sZW5ndGgpKSxufSxlLmV4dG5hbWU9ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO2Zvcih2YXIgZT0tMSxuPTAscj0tMSxpPSEwLGE9MCxvPXQubGVuZ3RoLTE7bz49MDstLW8pe3ZhciBzPXQuY2hhckNvZGVBdChvKTtpZig0NyE9PXMpLTE9PT1yJiYoaT0hMSxyPW8rMSksNDY9PT1zPy0xPT09ZT9lPW86MSE9PWEmJihhPTEpOi0xIT09ZSYmKGE9LTEpO2Vsc2UgaWYoIWkpe249bysxO2JyZWFrfX1yZXR1cm4tMT09PWV8fC0xPT09cnx8MD09PWF8fDE9PT1hJiZlPT09ci0xJiZlPT09bisxPyIiOnQuc2xpY2UoZSxyKX07dmFyIGk9ImIiPT09ImFiIi5zdWJzdHIoLTEpP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5zdWJzdHIoZSxuKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPDAmJihlPXQubGVuZ3RoK2UpLHQuc3Vic3RyKGUsbil9fSkuY2FsbCh0aGlzLG4oMTQpKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSwzXSxyPVsxLDVdLGk9WzEsN10sYT1bMiw1XSxvPVsxLDE1XSxzPVsxLDE3XSxjPVsxLDE5XSx1PVsxLDIwXSxsPVsxLDIxXSxoPVsxLDIyXSxmPVsxLDI4XSxkPVsxLDIzXSxwPVsxLDI0XSxnPVsxLDI1XSx5PVsxLDI2XSx2PVsxLDI5XSxtPVsxLDMyXSxiPVsxLDQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwzNiwzOV0seD1bMSw0LDUsMTIsMTMsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMzYsMzldLF89WzEsNCw1LDcsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMzYsMzldLGs9WzQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwzNiwzOV0sdz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LGRpcmVjdGl2ZTo2LFNEOjcsZG9jdW1lbnQ6OCxsaW5lOjksc3RhdGVtZW50OjEwLGlkU3RhdGVtZW50OjExLERFU0NSOjEyLCItLVx4M2UiOjEzLEhJREVfRU1QVFk6MTQsc2NhbGU6MTUsV0lEVEg6MTYsQ09NUE9TSVRfU1RBVEU6MTcsU1RSVUNUX1NUQVJUOjE4LFNUUlVDVF9TVE9QOjE5LFNUQVRFX0RFU0NSOjIwLEFTOjIxLElEOjIyLEZPUks6MjMsSk9JTjoyNCxDT05DVVJSRU5UOjI1LG5vdGU6MjYsbm90ZVBvc2l0aW9uOjI3LE5PVEVfVEVYVDoyOCxvcGVuRGlyZWN0aXZlOjI5LHR5cGVEaXJlY3RpdmU6MzAsY2xvc2VEaXJlY3RpdmU6MzEsIjoiOjMyLGFyZ0RpcmVjdGl2ZTozMyxlb2w6MzQsIjsiOjM1LEVER0VfU1RBVEU6MzYsbGVmdF9vZjozNyxyaWdodF9vZjozOCxvcGVuX2RpcmVjdGl2ZTozOSx0eXBlX2RpcmVjdGl2ZTo0MCxhcmdfZGlyZWN0aXZlOjQxLGNsb3NlX2RpcmVjdGl2ZTo0MiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw3OiJTRCIsMTI6IkRFU0NSIiwxMzoiLS1ceDNlIiwxNDoiSElERV9FTVBUWSIsMTU6InNjYWxlIiwxNjoiV0lEVEgiLDE3OiJDT01QT1NJVF9TVEFURSIsMTg6IlNUUlVDVF9TVEFSVCIsMTk6IlNUUlVDVF9TVE9QIiwyMDoiU1RBVEVfREVTQ1IiLDIxOiJBUyIsMjI6IklEIiwyMzoiRk9SSyIsMjQ6IkpPSU4iLDI1OiJDT05DVVJSRU5UIiwyNjoibm90ZSIsMjg6Ik5PVEVfVEVYVCIsMzI6IjoiLDM1OiI7IiwzNjoiRURHRV9TVEFURSIsMzc6ImxlZnRfb2YiLDM4OiJyaWdodF9vZiIsMzk6Im9wZW5fZGlyZWN0aXZlIiw0MDoidHlwZV9kaXJlY3RpdmUiLDQxOiJhcmdfZGlyZWN0aXZlIiw0MjoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFszLDJdLFs4LDBdLFs4LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFsxMCwxXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsNF0sWzEwLDNdLFsxMCw2XSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbNiwzXSxbNiw1XSxbMzQsMV0sWzM0LDFdLFsxMSwxXSxbMTEsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzMwLDFdLFszMywxXSxbMzEsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLnNldFJvb3REb2MoYVtzXSksYVtzXTtjYXNlIDU6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNjoibmwiIT1hW3NdJiYoYVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXSk7YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDExOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpyLnRyaW1Db2xvbihhW3NdKX07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtMl0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9fTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTp7c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sc3RhdGUyOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxkZXNjcmlwdGlvbjphW3NdLnN1YnN0cigxKS50cmltKCl9O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMTg6dmFyIGM9YVtzXSx1PWFbcy0yXS50cmltKCk7aWYoYVtzXS5tYXRjaCgiOiIpKXt2YXIgbD1hW3NdLnNwbGl0KCI6Iik7Yz1sWzBdLHU9W3UsbFsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Yyx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjp1fTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjphW3MtNV0sZG9jOmFbcy0xXX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6ci5nZXREaXZpZGVySWQoKSx0eXBlOiJkaXZpZGVyIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtMV0udHJpbSgpLG5vdGU6e3Bvc2l0aW9uOmFbcy0yXS50cmltKCksdGV4dDphW3NdLnRyaW0oKX19O2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDM0OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNTpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNjphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzc6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwic3RhdGUiKX19LHRhYmxlOlt7MzoxLDQ6ZSw1Om4sNjo0LDc6ciwyOTo2LDM5Oml9LHsxOlszXX0sezM6OCw0OmUsNTpuLDY6NCw3OnIsMjk6NiwzOTppfSx7Mzo5LDQ6ZSw1Om4sNjo0LDc6ciwyOTo2LDM5Oml9LHszOjEwLDQ6ZSw1Om4sNjo0LDc6ciwyOTo2LDM5Oml9LHQoWzEsNCw1LDE0LDE1LDE3LDIwLDIyLDIzLDI0LDI1LDI2LDM2LDM5XSxhLHs4OjExfSksezMwOjEyLDQwOlsxLDEzXX0sezQwOlsyLDM0XX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0sezE6WzIsNF0sNDpvLDU6cyw2OjI3LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTpnLDI2OnksMjk6NiwzNjp2LDM5Oml9LHszMTozMCwzMjpbMSwzMV0sNDI6bX0sdChbMzIsNDJdLFsyLDM1XSksdChiLFsyLDZdKSx7NjoyNywxMDozMywxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OmcsMjY6eSwyOTo2LDM2OnYsMzk6aX0sdChiLFsyLDhdKSx0KGIsWzIsOV0pLHQoYixbMiwxMF0sezEyOlsxLDM0XSwxMzpbMSwzNV19KSx0KGIsWzIsMTRdKSx7MTY6WzEsMzZdfSx0KGIsWzIsMTZdLHsxODpbMSwzN119KSx7MjE6WzEsMzhdfSx0KGIsWzIsMjBdKSx0KGIsWzIsMjFdKSx0KGIsWzIsMjJdKSx7Mjc6MzksMjg6WzEsNDBdLDM3OlsxLDQxXSwzODpbMSw0Ml19LHQoYixbMiwyNV0pLHQoeCxbMiwzMF0pLHQoeCxbMiwzMV0pLHQoXyxbMiwyNl0pLHszMzo0Myw0MTpbMSw0NF19LHQoXyxbMiwzN10pLHQoYixbMiw3XSksdChiLFsyLDExXSksezExOjQ1LDIyOmYsMzY6dn0sdChiLFsyLDE1XSksdChrLGEsezg6NDZ9KSx7MjI6WzEsNDddfSx7MjI6WzEsNDhdfSx7MjE6WzEsNDldfSx7MjI6WzIsMzJdfSx7MjI6WzIsMzNdfSx7MzE6NTAsNDI6bX0sezQyOlsyLDM2XX0sdChiLFsyLDEyXSx7MTI6WzEsNTFdfSksezQ6byw1OnMsNjoyNyw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDE5OlsxLDUyXSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OmcsMjY6eSwyOTo2LDM2OnYsMzk6aX0sdChiLFsyLDE4XSx7MTg6WzEsNTNdfSksezI4OlsxLDU0XX0sezIyOlsxLDU1XX0sdChfLFsyLDI3XSksdChiLFsyLDEzXSksdChiLFsyLDE3XSksdChrLGEsezg6NTZ9KSx0KGIsWzIsMjNdKSx0KGIsWzIsMjRdKSx7NDpvLDU6cyw2OjI3LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMTk6WzEsNTddLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6ZywyNjp5LDI5OjYsMzY6diwzOTppfSx0KGIsWzIsMTldKV0sZGVmYXVsdEFjdGlvbnM6ezc6WzIsMzRdLDg6WzIsMV0sOTpbMiwyXSwxMDpbMiwzXSw0MTpbMiwzMl0sNDI6WzIsMzNdLDQ0OlsyLDM2XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwzOTtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNDA7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDMyO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0MjtjYXNlIDQ6cmV0dXJuIDQxO2Nhc2UgNTpicmVhaztjYXNlIDY6Y29uc29sZS5sb2coIkNyYXAgYWZ0ZXIgY2xvc2UiKTticmVhaztjYXNlIDc6cmV0dXJuIDU7Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTU7Y2FzZSAxMzpyZXR1cm4gMTY7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDE2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDIzO2Nhc2UgMTc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAxODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyMztjYXNlIDE5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjA6dGhpcy5iZWdpbigiU1RBVEVfU1RSSU5HIik7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVEFURV9JRCIpLCJBUyI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgMjU6cmV0dXJuIDE3O2Nhc2UgMjY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMTg7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE5O2Nhc2UgMjk6YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI2O2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDM3O2Nhc2UgMzI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDM4O2Nhc2UgMzM6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDM1OmJyZWFrO2Nhc2UgMzY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMjtjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwyODtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI4O2Nhc2UgNDE6Y2FzZSA0MjpyZXR1cm4gNztjYXNlIDQzOnJldHVybiAxNDtjYXNlIDQ0OnJldHVybiAzNjtjYXNlIDQ1OnJldHVybiAyMjtjYXNlIDQ2OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksMTI7Y2FzZSA0NzpyZXR1cm4gMTM7Y2FzZSA0ODpyZXR1cm4gMjU7Y2FzZSA0OTpyZXR1cm4gNTtjYXNlIDUwOnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86c2NhbGVccyspL2ksL14oPzpcZCspL2ksL14oPzpccyt3aWR0aFxiKS9pLC9eKD86c3RhdGVccyspL2ksL14oPzouKjw8Zm9yaz4+KS9pLC9eKD86Lio8PGpvaW4+PikvaSwvXig/Oi4qXFtcW2ZvcmtcXVxdKS9pLC9eKD86LipcW1xbam9pblxdXF0pL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDQsOSwxMF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsMyw5LDEwXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMSw5LDEwXSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzksMTAsMTUsMjgsMjksMzAsNDQsNDUsNDYsNDcsNDhdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URV9JRDp7cnVsZXM6WzM3XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEU6e3J1bGVzOlszNCwzNSwzNl0saW5jbHVzaXZlOiExfSxOT1RFX1RFWFQ6e3J1bGVzOlszOSw0MF0saW5jbHVzaXZlOiExfSxOT1RFX0lEOntydWxlczpbMzhdLGluY2x1c2l2ZTohMX0sTk9URTp7cnVsZXM6WzMxLDMyLDMzXSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOlsyMl0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbOSwxMCwxNiwxNywxOCwxOSwyMCwyMSwyNSwyNiwyN10saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCwxMCwxMSwxMiwxNSwyNywzMCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OSw1MF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIFQoKXt0aGlzLnl5PXt9fXJldHVybiB3LmxleGVyPUUsVC5wcm90b3R5cGU9dyx3LlBhcnNlcj1ULG5ldyBUfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlLHI7ZnVuY3Rpb24gaSgpe3JldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgQXJyYXl8fCJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbCE9dCYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBjKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8IltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGV8fCJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBsKHQsZSl7dmFyIG4scj1bXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXIucHVzaChlKHRbbl0sbikpO3JldHVybiByfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgbiBpbiBlKWgoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIGgoZSwidG9TdHJpbmciKSYmKHQudG9TdHJpbmc9ZS50b1N0cmluZyksaChlLCJ2YWx1ZU9mIikmJih0LnZhbHVlT2Y9ZS52YWx1ZU9mKSx0fWZ1bmN0aW9uIGQodCxlLG4scil7cmV0dXJuIGJlKHQsZSxuLHIsITApLnV0YygpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG51bGw9PXQuX3BmJiYodC5fcGY9e2VtcHR5OiExLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OiExLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ITEsdXNlckludmFsaWRhdGVkOiExLGlzbzohMSxwYXJzZWREYXRlUGFydHM6W10sbWVyaWRpZW06bnVsbCxyZmMyODIyOiExLHdlZWtkYXlNaXNtYXRjaDohMX0pLHQuX3BmfWZ1bmN0aW9uIGcodCl7aWYobnVsbD09dC5faXNWYWxpZCl7dmFyIGU9cCh0KSxuPXIuY2FsbChlLnBhcnNlZERhdGVQYXJ0cywoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9KSksaT0haXNOYU4odC5fZC5nZXRUaW1lKCkpJiZlLm92ZXJmbG93PDAmJiFlLmVtcHR5JiYhZS5pbnZhbGlkTW9udGgmJiFlLmludmFsaWRXZWVrZGF5JiYhZS53ZWVrZGF5TWlzbWF0Y2gmJiFlLm51bGxJbnB1dCYmIWUuaW52YWxpZEZvcm1hdCYmIWUudXNlckludmFsaWRhdGVkJiYoIWUubWVyaWRpZW18fGUubWVyaWRpZW0mJm4pO2lmKHQuX3N0cmljdCYmKGk9aSYmMD09PWUuY2hhcnNMZWZ0T3ZlciYmMD09PWUudW51c2VkVG9rZW5zLmxlbmd0aCYmdm9pZCAwPT09ZS5iaWdIb3VyKSxudWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbih0KSlyZXR1cm4gaTt0Ll9pc1ZhbGlkPWl9cmV0dXJuIHQuX2lzVmFsaWR9ZnVuY3Rpb24geSh0KXt2YXIgZT1kKE5hTik7cmV0dXJuIG51bGwhPXQ/ZihwKGUpLHQpOnAoZSkudXNlckludmFsaWRhdGVkPSEwLGV9cj1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0KHRoaXMpLG49ZS5sZW5ndGg+Pj4wLHI9MDtyPG47cisrKWlmKHIgaW4gZSYmdC5jYWxsKHRoaXMsZVtyXSxyLGUpKXJldHVybiEwO3JldHVybiExfTt2YXIgdj1pLm1vbWVudFByb3BlcnRpZXM9W107ZnVuY3Rpb24gbSh0LGUpe3ZhciBuLHIsaTtpZihzKGUuX2lzQU1vbWVudE9iamVjdCl8fCh0Ll9pc0FNb21lbnRPYmplY3Q9ZS5faXNBTW9tZW50T2JqZWN0KSxzKGUuX2kpfHwodC5faT1lLl9pKSxzKGUuX2YpfHwodC5fZj1lLl9mKSxzKGUuX2wpfHwodC5fbD1lLl9sKSxzKGUuX3N0cmljdCl8fCh0Ll9zdHJpY3Q9ZS5fc3RyaWN0KSxzKGUuX3R6bSl8fCh0Ll90em09ZS5fdHptKSxzKGUuX2lzVVRDKXx8KHQuX2lzVVRDPWUuX2lzVVRDKSxzKGUuX29mZnNldCl8fCh0Ll9vZmZzZXQ9ZS5fb2Zmc2V0KSxzKGUuX3BmKXx8KHQuX3BmPXAoZSkpLHMoZS5fbG9jYWxlKXx8KHQuX2xvY2FsZT1lLl9sb2NhbGUpLDA8di5sZW5ndGgpZm9yKG49MDtuPHYubGVuZ3RoO24rKylzKGk9ZVtyPXZbbl1dKXx8KHRbcl09aSk7cmV0dXJuIHR9dmFyIGI9ITE7ZnVuY3Rpb24geCh0KXttKHRoaXMsdCksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT10Ll9kP3QuX2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRlKE5hTikpLCExPT09YiYmKGI9ITAsaS51cGRhdGVPZmZzZXQodGhpcyksYj0hMSl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHh8fG51bGwhPXQmJm51bGwhPXQuX2lzQU1vbWVudE9iamVjdH1mdW5jdGlvbiBrKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9ZnVuY3Rpb24gdyh0KXt2YXIgZT0rdCxuPTA7cmV0dXJuIDAhPT1lJiZpc0Zpbml0ZShlKSYmKG49ayhlKSksbn1mdW5jdGlvbiBFKHQsZSxuKXt2YXIgcixpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxhPU1hdGguYWJzKHQubGVuZ3RoLWUubGVuZ3RoKSxvPTA7Zm9yKHI9MDtyPGk7cisrKShuJiZ0W3JdIT09ZVtyXXx8IW4mJncodFtyXSkhPT13KGVbcl0pKSYmbysrO3JldHVybiBvK2F9ZnVuY3Rpb24gVCh0KXshMT09PWkuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiYidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiAiK3QpfWZ1bmN0aW9uIEModCxlKXt2YXIgbj0hMDtyZXR1cm4gZigoZnVuY3Rpb24oKXtpZihudWxsIT1pLmRlcHJlY2F0aW9uSGFuZGxlciYmaS5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCx0KSxuKXtmb3IodmFyIHIsYT1bXSxvPTA7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7aWYocj0iIiwib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1tvXSl7Zm9yKHZhciBzIGluIHIrPSJcblsiK28rIl0gIixhcmd1bWVudHNbMF0pcis9cysiOiAiK2FyZ3VtZW50c1swXVtzXSsiLCAiO3I9ci5zbGljZSgwLC0yKX1lbHNlIHI9YXJndW1lbnRzW29dO2EucHVzaChyKX1UKHQrIlxuQXJndW1lbnRzOiAiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEpLmpvaW4oIiIpKyJcbiIrKG5ldyBFcnJvcikuc3RhY2spLG49ITF9cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZSl9dmFyIFMsQT17fTtmdW5jdGlvbiBNKHQsZSl7bnVsbCE9aS5kZXByZWNhdGlvbkhhbmRsZXImJmkuZGVwcmVjYXRpb25IYW5kbGVyKHQsZSksQVt0XXx8KFQoZSksQVt0XT0hMCl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEQodCxlKXt2YXIgbixyPWYoe30sdCk7Zm9yKG4gaW4gZSloKGUsbikmJihvKHRbbl0pJiZvKGVbbl0pPyhyW25dPXt9LGYocltuXSx0W25dKSxmKHJbbl0sZVtuXSkpOm51bGwhPWVbbl0/cltuXT1lW25dOmRlbGV0ZSByW25dKTtmb3IobiBpbiB0KWgodCxuKSYmIWgoZSxuKSYmbyh0W25dKSYmKHJbbl09Zih7fSxyW25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTih0KXtudWxsIT10JiZ0aGlzLnNldCh0KX1pLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSxpLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsLFM9T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24odCl7dmFyIGUsbj1bXTtmb3IoZSBpbiB0KWgodCxlKSYmbi5wdXNoKGUpO3JldHVybiBufTt2YXIgQj17fTtmdW5jdGlvbiBMKHQsZSl7dmFyIG49dC50b0xvd2VyQ2FzZSgpO0Jbbl09QltuKyJzIl09QltlXT10fWZ1bmN0aW9uIFAodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P0JbdF18fEJbdC50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gRih0KXt2YXIgZSxuLHI9e307Zm9yKG4gaW4gdCloKHQsbikmJihlPVAobikpJiYocltlXT10W25dKTtyZXR1cm4gcn12YXIgST17fTtmdW5jdGlvbiBqKHQsZSl7SVt0XT1lfWZ1bmN0aW9uIFIodCxlLG4pe3ZhciByPSIiK01hdGguYWJzKHQpLGk9ZS1yLmxlbmd0aDtyZXR1cm4oMDw9dD9uPyIrIjoiIjoiLSIpK01hdGgucG93KDEwLE1hdGgubWF4KDAsaSkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpK3J9dmFyIFk9LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98WVlZWVlZfFlZWVlZfFlZWVl8WVl8Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csej0vKFxbW15cW10qXF0pfChcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxVPXt9LCQ9e307ZnVuY3Rpb24gVyh0LGUsbixyKXt2YXIgaT1yOyJzdHJpbmciPT10eXBlb2YgciYmKGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tyXSgpfSksdCYmKCRbdF09aSksZSYmKCRbZVswXV09ZnVuY3Rpb24oKXtyZXR1cm4gUihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlWzFdLGVbMl0pfSksbiYmKCRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0KX0pfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gdC5pc1ZhbGlkKCk/KGU9SChlLHQubG9jYWxlRGF0YSgpKSxVW2VdPVVbZV18fGZ1bmN0aW9uKHQpe3ZhciBlLG4scixpPXQubWF0Y2goWSk7Zm9yKGU9MCxuPWkubGVuZ3RoO2U8bjtlKyspJFtpW2VdXT9pW2VdPSRbaVtlXV06aVtlXT0ocj1pW2VdKS5tYXRjaCgvXFtbXHNcU10vKT9yLnJlcGxhY2UoL15cW3xcXSQvZywiIik6ci5yZXBsYWNlKC9cXC9nLCIiKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsYT0iIjtmb3Iocj0wO3I8bjtyKyspYSs9TyhpW3JdKT9pW3JdLmNhbGwoZSx0KTppW3JdO3JldHVybiBhfX0oZSksVVtlXSh0KSk6dC5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBIKHQsZSl7dmFyIG49NTtmdW5jdGlvbiByKHQpe3JldHVybiBlLmxvbmdEYXRlRm9ybWF0KHQpfHx0fWZvcih6Lmxhc3RJbmRleD0wOzA8PW4mJnoudGVzdCh0KTspdD10LnJlcGxhY2UoeixyKSx6Lmxhc3RJbmRleD0wLG4tPTE7cmV0dXJuIHR9dmFyIEc9L1xkLyxxPS9cZFxkLyxYPS9cZHszfS8sWj0vXGR7NH0vLEo9L1srLV0/XGR7Nn0vLFE9L1xkXGQ/LyxLPS9cZFxkXGRcZD8vLHR0PS9cZFxkXGRcZFxkXGQ/LyxldD0vXGR7MSwzfS8sbnQ9L1xkezEsNH0vLHJ0PS9bKy1dP1xkezEsNn0vLGl0PS9cZCsvLGF0PS9bKy1dP1xkKy8sb3Q9L1p8WystXVxkXGQ6P1xkXGQvZ2ksc3Q9L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxjdD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZGXC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2RkZdezEsMjU2fSl7MSwyfS9pLHV0PXt9O2Z1bmN0aW9uIGx0KHQsZSxuKXt1dFt0XT1PKGUpP2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gdCYmbj9uOmV9fWZ1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIGgodXQsdCk/dXRbdF0oZS5fc3RyaWN0LGUuX2xvY2FsZSk6bmV3IFJlZ0V4cChmdCh0LnJlcGxhY2UoIlxcIiwiIikucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCguKS9nLChmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBlfHxufHxyfHxpfSkpKSl9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIHQucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX12YXIgZHQ9e307ZnVuY3Rpb24gcHQodCxlKXt2YXIgbixyPWU7Zm9yKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W3RdKSxjKGUpJiYocj1mdW5jdGlvbih0LG4pe25bZV09dyh0KX0pLG49MDtuPHQubGVuZ3RoO24rKylkdFt0W25dXT1yfWZ1bmN0aW9uIGd0KHQsZSl7cHQodCwoZnVuY3Rpb24odCxuLHIsaSl7ci5fdz1yLl93fHx7fSxlKHQsci5fdyxyLGkpfSkpfWZ1bmN0aW9uIHl0KHQpe3JldHVybiB2dCh0KT8zNjY6MzY1fWZ1bmN0aW9uIHZ0KHQpe3JldHVybiB0JTQ9PTAmJnQlMTAwIT0wfHx0JTQwMD09MH1XKCJZIiwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55ZWFyKCk7cmV0dXJuIHQ8PTk5OTk/IiIrdDoiKyIrdH0pKSxXKDAsWyJZWSIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSkpLFcoMCxbIllZWVkiLDRdLDAsInllYXIiKSxXKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLFcoMCxbIllZWVlZWSIsNiwhMF0sMCwieWVhciIpLEwoInllYXIiLCJ5IiksaigieWVhciIsMSksbHQoIlkiLGF0KSxsdCgiWVkiLFEscSksbHQoIllZWVkiLG50LFopLGx0KCJZWVlZWSIscnQsSiksbHQoIllZWVlZWSIscnQsSikscHQoWyJZWVlZWSIsIllZWVlZWSJdLDApLHB0KCJZWVlZIiwoZnVuY3Rpb24odCxlKXtlWzBdPTI9PT10Lmxlbmd0aD9pLnBhcnNlVHdvRGlnaXRZZWFyKHQpOncodCl9KSkscHQoIllZIiwoZnVuY3Rpb24odCxlKXtlWzBdPWkucGFyc2VUd29EaWdpdFllYXIodCl9KSkscHQoIlkiLChmdW5jdGlvbih0LGUpe2VbMF09cGFyc2VJbnQodCwxMCl9KSksaS5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdyh0KSsoNjg8dyh0KT8xOTAwOjJlMyl9O3ZhciBtdCxidD14dCgiRnVsbFllYXIiLCEwKTtmdW5jdGlvbiB4dCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9bj8oa3QodGhpcyx0LG4pLGkudXBkYXRlT2Zmc2V0KHRoaXMsZSksdGhpcyk6X3QodGhpcyx0KX19ZnVuY3Rpb24gX3QodCxlKXtyZXR1cm4gdC5pc1ZhbGlkKCk/dC5fZFsiZ2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKCk6TmFOfWZ1bmN0aW9uIGt0KHQsZSxuKXt0LmlzVmFsaWQoKSYmIWlzTmFOKG4pJiYoIkZ1bGxZZWFyIj09PWUmJnZ0KHQueWVhcigpKSYmMT09PXQubW9udGgoKSYmMjk9PT10LmRhdGUoKT90Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0obix0Lm1vbnRoKCksd3Qobix0Lm1vbnRoKCkpKTp0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0obikpfWZ1bmN0aW9uIHd0KHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47dmFyIG49KGUlMTIrMTIpJTEyO3JldHVybiB0Kz0oZS1uKS8xMiwxPT09bj92dCh0KT8yOToyODozMS1uJTclMn1tdD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbih0KXt2YXIgZTtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7KytlKWlmKHRoaXNbZV09PT10KXJldHVybiBlO3JldHVybi0xfSxXKCJNIixbIk1NIiwyXSwiTW8iLChmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0pKSxXKCJNTU0iLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsdCl9KSksVygiTU1NTSIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsdCl9KSksTCgibW9udGgiLCJNIiksaigibW9udGgiLDgpLGx0KCJNIixRKSxsdCgiTU0iLFEscSksbHQoIk1NTSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubW9udGhzU2hvcnRSZWdleCh0KX0pKSxsdCgiTU1NTSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubW9udGhzUmVnZXgodCl9KSkscHQoWyJNIiwiTU0iXSwoZnVuY3Rpb24odCxlKXtlWzFdPXcodCktMX0pKSxwdChbIk1NTSIsIk1NTU0iXSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi5fbG9jYWxlLm1vbnRoc1BhcnNlKHQscixuLl9zdHJpY3QpO251bGwhPWk/ZVsxXT1pOnAobikuaW52YWxpZE1vbnRoPXR9KSk7dmFyIEV0PS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sVHQ9IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksQ3Q9Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIFN0KHQsZSl7dmFyIG47aWYoIXQuaXNWYWxpZCgpKXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgZSlpZigvXlxkKyQvLnRlc3QoZSkpZT13KGUpO2Vsc2UgaWYoIWMoZT10LmxvY2FsZURhdGEoKS5tb250aHNQYXJzZShlKSkpcmV0dXJuIHQ7cmV0dXJuIG49TWF0aC5taW4odC5kYXRlKCksd3QodC55ZWFyKCksZSkpLHQuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKSsiTW9udGgiXShlLG4pLHR9ZnVuY3Rpb24gQXQodCl7cmV0dXJuIG51bGwhPXQ/KFN0KHRoaXMsdCksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcyk6X3QodGhpcywiTW9udGgiKX12YXIgTXQ9Y3QsT3Q9Y3Q7ZnVuY3Rpb24gRHQoKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIGUubGVuZ3RoLXQubGVuZ3RofXZhciBlLG4scj1bXSxpPVtdLGE9W107Zm9yKGU9MDtlPDEyO2UrKyluPWQoWzJlMyxlXSksci5wdXNoKHRoaXMubW9udGhzU2hvcnQobiwiIikpLGkucHVzaCh0aGlzLm1vbnRocyhuLCIiKSksYS5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxhLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSk7Zm9yKHIuc29ydCh0KSxpLnNvcnQodCksYS5zb3J0KHQpLGU9MDtlPDEyO2UrKylyW2VdPWZ0KHJbZV0pLGlbZV09ZnQoaVtlXSk7Zm9yKGU9MDtlPDI0O2UrKylhW2VdPWZ0KGFbZV0pO3RoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIithLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitpLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIityLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBOdCh0KXt2YXIgZTtpZih0PDEwMCYmMDw9dCl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtuWzBdPXQrNDAwLGU9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxuKSksaXNGaW5pdGUoZS5nZXRVVENGdWxsWWVhcigpKSYmZS5zZXRVVENGdWxsWWVhcih0KX1lbHNlIGU9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxhcmd1bWVudHMpKTtyZXR1cm4gZX1mdW5jdGlvbiBCdCh0LGUsbil7dmFyIHI9NytlLW47cmV0dXJuLSg3K050KHQsMCxyKS5nZXRVVENEYXkoKS1lKSU3K3ItMX1mdW5jdGlvbiBMdCh0LGUsbixyLGkpe3ZhciBhLG8scz0xKzcqKGUtMSkrKDcrbi1yKSU3K0J0KHQscixpKTtyZXR1cm4gbz1zPD0wP3l0KGE9dC0xKStzOnM+eXQodCk/KGE9dCsxLHMteXQodCkpOihhPXQscykse3llYXI6YSxkYXlPZlllYXI6b319ZnVuY3Rpb24gUHQodCxlLG4pe3ZhciByLGksYT1CdCh0LnllYXIoKSxlLG4pLG89TWF0aC5mbG9vcigodC5kYXlPZlllYXIoKS1hLTEpLzcpKzE7cmV0dXJuIG88MT9yPW8rRnQoaT10LnllYXIoKS0xLGUsbik6bz5GdCh0LnllYXIoKSxlLG4pPyhyPW8tRnQodC55ZWFyKCksZSxuKSxpPXQueWVhcigpKzEpOihpPXQueWVhcigpLHI9bykse3dlZWs6cix5ZWFyOml9fWZ1bmN0aW9uIEZ0KHQsZSxuKXt2YXIgcj1CdCh0LGUsbiksaT1CdCh0KzEsZSxuKTtyZXR1cm4oeXQodCktcitpKS83fWZ1bmN0aW9uIEl0KHQsZSl7cmV0dXJuIHQuc2xpY2UoZSw3KS5jb25jYXQodC5zbGljZSgwLGUpKX1XKCJ3IixbInd3IiwyXSwid28iLCJ3ZWVrIiksVygiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLEwoIndlZWsiLCJ3IiksTCgiaXNvV2VlayIsIlciKSxqKCJ3ZWVrIiw1KSxqKCJpc29XZWVrIiw1KSxsdCgidyIsUSksbHQoInd3IixRLHEpLGx0KCJXIixRKSxsdCgiV1ciLFEscSksZ3QoWyJ3Iiwid3ciLCJXIiwiV1ciXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyLnN1YnN0cigwLDEpXT13KHQpfSkpLFcoImQiLDAsImRvIiwiZGF5IiksVygiZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsdCl9KSksVygiZGRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsdCl9KSksVygiZGRkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyx0KX0pKSxXKCJlIiwwLDAsIndlZWtkYXkiKSxXKCJFIiwwLDAsImlzb1dlZWtkYXkiKSxMKCJkYXkiLCJkIiksTCgid2Vla2RheSIsImUiKSxMKCJpc29XZWVrZGF5IiwiRSIpLGooImRheSIsMTEpLGooIndlZWtkYXkiLDExKSxqKCJpc29XZWVrZGF5IiwxMSksbHQoImQiLFEpLGx0KCJlIixRKSxsdCgiRSIsUSksbHQoImRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c01pblJlZ2V4KHQpfSkpLGx0KCJkZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzU2hvcnRSZWdleCh0KX0pKSxsdCgiZGRkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNSZWdleCh0KX0pKSxndChbImRkIiwiZGRkIiwiZGRkZCJdLChmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLl9sb2NhbGUud2Vla2RheXNQYXJzZSh0LHIsbi5fc3RyaWN0KTtudWxsIT1pP2UuZD1pOnAobikuaW52YWxpZFdlZWtkYXk9dH0pKSxndChbImQiLCJlIiwiRSJdLChmdW5jdGlvbih0LGUsbixyKXtlW3JdPXcodCl9KSk7dmFyIGp0PSJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxSdD0iU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLFl0PSJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSx6dD1jdCxVdD1jdCwkdD1jdDtmdW5jdGlvbiBXdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsbixyLGksYSxvPVtdLHM9W10sYz1bXSx1PVtdO2ZvcihlPTA7ZTw3O2UrKyluPWQoWzJlMywxXSkuZGF5KGUpLHI9dGhpcy53ZWVrZGF5c01pbihuLCIiKSxpPXRoaXMud2Vla2RheXNTaG9ydChuLCIiKSxhPXRoaXMud2Vla2RheXMobiwiIiksby5wdXNoKHIpLHMucHVzaChpKSxjLnB1c2goYSksdS5wdXNoKHIpLHUucHVzaChpKSx1LnB1c2goYSk7Zm9yKG8uc29ydCh0KSxzLnNvcnQodCksYy5zb3J0KHQpLHUuc29ydCh0KSxlPTA7ZTw3O2UrKylzW2VdPWZ0KHNbZV0pLGNbZV09ZnQoY1tlXSksdVtlXT1mdCh1W2VdKTt0aGlzLl93ZWVrZGF5c1JlZ2V4PW5ldyBSZWdFeHAoIl4oIit1LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrYy5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitzLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitvLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBWdCgpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8fDEyfWZ1bmN0aW9uIEh0KHQsZSl7Vyh0LDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLGUpfSkpfWZ1bmN0aW9uIEd0KHQsZSl7cmV0dXJuIGUuX21lcmlkaWVtUGFyc2V9VygiSCIsWyJISCIsMl0sMCwiaG91ciIpLFcoImgiLFsiaGgiLDJdLDAsVnQpLFcoImsiLFsia2siLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG91cnMoKXx8MjR9KSksVygiaG1tIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrVnQuYXBwbHkodGhpcykrUih0aGlzLm1pbnV0ZXMoKSwyKX0pKSxXKCJobW1zcyIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK1Z0LmFwcGx5KHRoaXMpK1IodGhpcy5taW51dGVzKCksMikrUih0aGlzLnNlY29uZHMoKSwyKX0pKSxXKCJIbW0iLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrUih0aGlzLm1pbnV0ZXMoKSwyKX0pKSxXKCJIbW1zcyIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStSKHRoaXMubWludXRlcygpLDIpK1IodGhpcy5zZWNvbmRzKCksMil9KSksSHQoImEiLCEwKSxIdCgiQSIsITEpLEwoImhvdXIiLCJoIiksaigiaG91ciIsMTMpLGx0KCJhIixHdCksbHQoIkEiLEd0KSxsdCgiSCIsUSksbHQoImgiLFEpLGx0KCJrIixRKSxsdCgiSEgiLFEscSksbHQoImhoIixRLHEpLGx0KCJrayIsUSxxKSxsdCgiaG1tIixLKSxsdCgiaG1tc3MiLHR0KSxsdCgiSG1tIixLKSxsdCgiSG1tc3MiLHR0KSxwdChbIkgiLCJISCJdLDMpLHB0KFsiayIsImtrIl0sKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj13KHQpO2VbM109MjQ9PT1yPzA6cn0pKSxwdChbImEiLCJBIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9pc1BtPW4uX2xvY2FsZS5pc1BNKHQpLG4uX21lcmlkaWVtPXR9KSkscHQoWyJoIiwiaGgiXSwoZnVuY3Rpb24odCxlLG4pe2VbM109dyh0KSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoImhtbSIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIocikpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiaG1tc3MiLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtNCxpPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyLDIpKSxlWzVdPXcodC5zdWJzdHIoaSkpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiSG1tIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyKSl9KSkscHQoIkhtbXNzIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTQsaT10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIociwyKSksZVs1XT13KHQuc3Vic3RyKGkpKX0pKTt2YXIgcXQsWHQ9eHQoIkhvdXJzIiwhMCksWnQ9e2NhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxpbnZhbGlkRGF0ZToiSW52YWxpZCBkYXRlIixvcmRpbmFsOiIlZCIsZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LG1vbnRoczpUdCxtb250aHNTaG9ydDpDdCx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6anQsd2Vla2RheXNNaW46WXQsd2Vla2RheXNTaG9ydDpSdCxtZXJpZGllbVBhcnNlOi9bYXBdXC4/bT9cLj8vaX0sSnQ9e30sUXQ9e307ZnVuY3Rpb24gS3QodCl7cmV0dXJuIHQ/dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIik6dH1mdW5jdGlvbiB0ZShlKXt2YXIgcj1udWxsO2lmKCFKdFtlXSYmdm9pZCAwIT09dCYmdCYmdC5leHBvcnRzKXRyeXtyPXF0Ll9hYmJyLG4oMTcxKSgiLi8iK2UpLGVlKHIpfWNhdGNoKGUpe31yZXR1cm4gSnRbZV19ZnVuY3Rpb24gZWUodCxlKXt2YXIgbjtyZXR1cm4gdCYmKChuPXMoZSk/cmUodCk6bmUodCxlKSk/cXQ9bjoidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIit0KyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxxdC5fYWJicn1mdW5jdGlvbiBuZSh0LGUpe2lmKG51bGw9PT1lKXJldHVybiBkZWxldGUgSnRbdF0sbnVsbDt2YXIgbixyPVp0O2lmKGUuYWJicj10LG51bGwhPUp0W3RdKU0oImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIikscj1KdFt0XS5fY29uZmlnO2Vsc2UgaWYobnVsbCE9ZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9SnRbZS5wYXJlbnRMb2NhbGVdKXI9SnRbZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0obj10ZShlLnBhcmVudExvY2FsZSkpKXJldHVybiBRdFtlLnBhcmVudExvY2FsZV18fChRdFtlLnBhcmVudExvY2FsZV09W10pLFF0W2UucGFyZW50TG9jYWxlXS5wdXNoKHtuYW1lOnQsY29uZmlnOmV9KSxudWxsO3I9bi5fY29uZmlnfXJldHVybiBKdFt0XT1uZXcgTihEKHIsZSkpLFF0W3RdJiZRdFt0XS5mb3JFYWNoKChmdW5jdGlvbih0KXtuZSh0Lm5hbWUsdC5jb25maWcpfSkpLGVlKHQpLEp0W3RdfWZ1bmN0aW9uIHJlKHQpe3ZhciBlO2lmKHQmJnQuX2xvY2FsZSYmdC5fbG9jYWxlLl9hYmJyJiYodD10Ll9sb2NhbGUuX2FiYnIpLCF0KXJldHVybiBxdDtpZighYSh0KSl7aWYoZT10ZSh0KSlyZXR1cm4gZTt0PVt0XX1yZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpLGE9MDthPHQubGVuZ3RoOyl7Zm9yKGU9KGk9S3QodFthXSkuc3BsaXQoIi0iKSkubGVuZ3RoLG49KG49S3QodFthKzFdKSk/bi5zcGxpdCgiLSIpOm51bGw7MDxlOyl7aWYocj10ZShpLnNsaWNlKDAsZSkuam9pbigiLSIpKSlyZXR1cm4gcjtpZihuJiZuLmxlbmd0aD49ZSYmRShpLG4sITApPj1lLTEpYnJlYWs7ZS0tfWErK31yZXR1cm4gcXR9KHQpfWZ1bmN0aW9uIGllKHQpe3ZhciBlLG49dC5fYTtyZXR1cm4gbiYmLTI9PT1wKHQpLm92ZXJmbG93JiYoZT1uWzFdPDB8fDExPG5bMV0/MTpuWzJdPDF8fG5bMl0+d3QoblswXSxuWzFdKT8yOm5bM108MHx8MjQ8blszXXx8MjQ9PT1uWzNdJiYoMCE9PW5bNF18fDAhPT1uWzVdfHwwIT09bls2XSk/MzpuWzRdPDB8fDU5PG5bNF0/NDpuWzVdPDB8fDU5PG5bNV0/NTpuWzZdPDB8fDk5OTxuWzZdPzY6LTEscCh0KS5fb3ZlcmZsb3dEYXlPZlllYXImJihlPDB8fDI8ZSkmJihlPTIpLHAodCkuX292ZXJmbG93V2Vla3MmJi0xPT09ZSYmKGU9NykscCh0KS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PWUmJihlPTgpLHAodCkub3ZlcmZsb3c9ZSksdH1mdW5jdGlvbiBhZSh0LGUsbil7cmV0dXJuIG51bGwhPXQ/dDpudWxsIT1lP2U6bn1mdW5jdGlvbiBvZSh0KXt2YXIgZSxuLHIsYSxvLHM9W107aWYoIXQuX2Qpe3ZhciBjLHU7Zm9yKGM9dCx1PW5ldyBEYXRlKGkubm93KCkpLHI9Yy5fdXNlVVRDP1t1LmdldFVUQ0Z1bGxZZWFyKCksdS5nZXRVVENNb250aCgpLHUuZ2V0VVRDRGF0ZSgpXTpbdS5nZXRGdWxsWWVhcigpLHUuZ2V0TW9udGgoKSx1LmdldERhdGUoKV0sdC5fdyYmbnVsbD09dC5fYVsyXSYmbnVsbD09dC5fYVsxXSYmZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYSxvLHMsYztpZihudWxsIT0oZT10Ll93KS5HR3x8bnVsbCE9ZS5XfHxudWxsIT1lLkUpYT0xLG89NCxuPWFlKGUuR0csdC5fYVswXSxQdCh4ZSgpLDEsNCkueWVhcikscj1hZShlLlcsMSksKChpPWFlKGUuRSwxKSk8MXx8NzxpKSYmKGM9ITApO2Vsc2V7YT10Ll9sb2NhbGUuX3dlZWsuZG93LG89dC5fbG9jYWxlLl93ZWVrLmRveTt2YXIgdT1QdCh4ZSgpLGEsbyk7bj1hZShlLmdnLHQuX2FbMF0sdS55ZWFyKSxyPWFlKGUudyx1LndlZWspLG51bGwhPWUuZD8oKGk9ZS5kKTwwfHw2PGkpJiYoYz0hMCk6bnVsbCE9ZS5lPyhpPWUuZSthLChlLmU8MHx8NjxlLmUpJiYoYz0hMCkpOmk9YX1yPDF8fHI+RnQobixhLG8pP3AodCkuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9Yz9wKHQpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KHM9THQobixyLGksYSxvKSx0Ll9hWzBdPXMueWVhcix0Ll9kYXlPZlllYXI9cy5kYXlPZlllYXIpfSh0KSxudWxsIT10Ll9kYXlPZlllYXImJihvPWFlKHQuX2FbMF0sclswXSksKHQuX2RheU9mWWVhcj55dChvKXx8MD09PXQuX2RheU9mWWVhcikmJihwKHQpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCksbj1OdChvLDAsdC5fZGF5T2ZZZWFyKSx0Ll9hWzFdPW4uZ2V0VVRDTW9udGgoKSx0Ll9hWzJdPW4uZ2V0VVRDRGF0ZSgpKSxlPTA7ZTwzJiZudWxsPT10Ll9hW2VdOysrZSl0Ll9hW2VdPXNbZV09cltlXTtmb3IoO2U8NztlKyspdC5fYVtlXT1zW2VdPW51bGw9PXQuX2FbZV0/Mj09PWU/MTowOnQuX2FbZV07MjQ9PT10Ll9hWzNdJiYwPT09dC5fYVs0XSYmMD09PXQuX2FbNV0mJjA9PT10Ll9hWzZdJiYodC5fbmV4dERheT0hMCx0Ll9hWzNdPTApLHQuX2Q9KHQuX3VzZVVUQz9OdDpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcztyZXR1cm4gdDwxMDAmJjA8PXQ/KHM9bmV3IERhdGUodCs0MDAsZSxuLHIsaSxhLG8pLGlzRmluaXRlKHMuZ2V0RnVsbFllYXIoKSkmJnMuc2V0RnVsbFllYXIodCkpOnM9bmV3IERhdGUodCxlLG4scixpLGEsbyksc30pLmFwcGx5KG51bGwscyksYT10Ll91c2VVVEM/dC5fZC5nZXRVVENEYXkoKTp0Ll9kLmdldERheSgpLG51bGwhPXQuX3R6bSYmdC5fZC5zZXRVVENNaW51dGVzKHQuX2QuZ2V0VVRDTWludXRlcygpLXQuX3R6bSksdC5fbmV4dERheSYmKHQuX2FbM109MjQpLHQuX3cmJnZvaWQgMCE9PXQuX3cuZCYmdC5fdy5kIT09YSYmKHAodCkud2Vla2RheU1pc21hdGNoPSEwKX19dmFyIHNlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSktKD86XGRcZC1cZFxkfFdcZFxkLVxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86OlxkXGQoPzo6XGRcZCg/OlsuLF1cZCspPyk/KT8pKFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLGNlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyx1ZT0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/LyxsZT1bWyJZWVlZWVktTU0tREQiLC9bKy1dXGR7Nn0tXGRcZC1cZFxkL10sWyJZWVlZLU1NLUREIiwvXGR7NH0tXGRcZC1cZFxkL10sWyJHR0dHLVtXXVdXLUUiLC9cZHs0fS1XXGRcZC1cZC9dLFsiR0dHRy1bV11XVyIsL1xkezR9LVdcZFxkLywhMV0sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L10sWyJZWVlZLU1NIiwvXGR7NH0tXGRcZC8sITFdLFsiWVlZWVlZTU1ERCIsL1srLV1cZHsxMH0vXSxbIllZWVlNTUREIiwvXGR7OH0vXSxbIkdHR0dbV11XV0UiLC9cZHs0fVdcZHszfS9dLFsiR0dHR1tXXVdXIiwvXGR7NH1XXGR7Mn0vLCExXSxbIllZWVlEREQiLC9cZHs3fS9dXSxoZT1bWyJISDptbTpzcy5TU1NTIiwvXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MsU1NTUyIsL1xkXGQ6XGRcZDpcZFxkLFxkKy9dLFsiSEg6bW06c3MiLC9cZFxkOlxkXGQ6XGRcZC9dLFsiSEg6bW0iLC9cZFxkOlxkXGQvXSxbIkhIbW1zcy5TU1NTIiwvXGRcZFxkXGRcZFxkXC5cZCsvXSxbIkhIbW1zcyxTU1NTIiwvXGRcZFxkXGRcZFxkLFxkKy9dLFsiSEhtbXNzIiwvXGRcZFxkXGRcZFxkL10sWyJISG1tIiwvXGRcZFxkXGQvXSxbIkhIIiwvXGRcZC9dXSxmZT0vXlwvP0RhdGVcKChcLT9cZCspL2k7ZnVuY3Rpb24gZGUodCl7dmFyIGUsbixyLGksYSxvLHM9dC5faSxjPXNlLmV4ZWMocyl8fGNlLmV4ZWMocyk7aWYoYyl7Zm9yKHAodCkuaXNvPSEwLGU9MCxuPWxlLmxlbmd0aDtlPG47ZSsrKWlmKGxlW2VdWzFdLmV4ZWMoY1sxXSkpe2k9bGVbZV1bMF0scj0hMSE9PWxlW2VdWzJdO2JyZWFrfWlmKG51bGw9PWkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoY1szXSl7Zm9yKGU9MCxuPWhlLmxlbmd0aDtlPG47ZSsrKWlmKGhlW2VdWzFdLmV4ZWMoY1szXSkpe2E9KGNbMl18fCIgIikraGVbZV1bMF07YnJlYWt9aWYobnVsbD09YSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKX1pZighciYmbnVsbCE9YSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtpZihjWzRdKXtpZighdWUuZXhlYyhjWzRdKSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtvPSJaIn10Ll9mPWkrKGF8fCIiKSsob3x8IiIpLHZlKHQpfWVsc2UgdC5faXNWYWxpZD0hMX12YXIgcGU9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC8sZ2U9e1VUOjAsR01UOjAsRURUOi0yNDAsRVNUOi0zMDAsQ0RUOi0zMDAsQ1NUOi0zNjAsTURUOi0zNjAsTVNUOi00MjAsUERUOi00MjAsUFNUOi00ODB9O2Z1bmN0aW9uIHllKHQpe3ZhciBlLG4scixpPXBlLmV4ZWModC5faS5yZXBsYWNlKC9cKFteKV0qXCl8W1xuXHRdL2csIiAiKS5yZXBsYWNlKC8oXHNccyspL2csIiAiKS5yZXBsYWNlKC9eXHNccyovLCIiKS5yZXBsYWNlKC9cc1xzKiQvLCIiKSk7aWYoaSl7dmFyIGE9ZnVuY3Rpb24odCxlLG4scixpLGEpe3ZhciBvPVtmdW5jdGlvbih0KXt2YXIgZT1wYXJzZUludCh0LDEwKTtyZXR1cm4gZTw9NDk/MmUzK2U6ZTw9OTk5PzE5MDArZTplfSh0KSxDdC5pbmRleE9mKGUpLHBhcnNlSW50KG4sMTApLHBhcnNlSW50KHIsMTApLHBhcnNlSW50KGksMTApXTtyZXR1cm4gYSYmby5wdXNoKHBhcnNlSW50KGEsMTApKSxvfShpWzRdLGlbM10saVsyXSxpWzVdLGlbNl0saVs3XSk7aWYobj1hLHI9dCwoZT1pWzFdKSYmUnQuaW5kZXhPZihlKSE9PW5ldyBEYXRlKG5bMF0sblsxXSxuWzJdKS5nZXREYXkoKSYmKHAocikud2Vla2RheU1pc21hdGNoPSEwLCEoci5faXNWYWxpZD0hMSkpKXJldHVybjt0Ll9hPWEsdC5fdHptPWZ1bmN0aW9uKHQsZSxuKXtpZih0KXJldHVybiBnZVt0XTtpZihlKXJldHVybiAwO3ZhciByPXBhcnNlSW50KG4sMTApLGk9ciUxMDA7cmV0dXJuKHItaSkvMTAwKjYwK2l9KGlbOF0saVs5XSxpWzEwXSksdC5fZD1OdC5hcHBseShudWxsLHQuX2EpLHQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLHAodCkucmZjMjgyMj0hMH1lbHNlIHQuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gdmUodCl7aWYodC5fZiE9PWkuSVNPXzg2MDEpaWYodC5fZiE9PWkuUkZDXzI4MjIpe3QuX2E9W10scCh0KS5lbXB0eT0hMDt2YXIgZSxuLHIsYSxvLHMsYyx1LGw9IiIrdC5faSxmPWwubGVuZ3RoLGQ9MDtmb3Iocj1IKHQuX2YsdC5fbG9jYWxlKS5tYXRjaChZKXx8W10sZT0wO2U8ci5sZW5ndGg7ZSsrKWE9cltlXSwobj0obC5tYXRjaChodChhLHQpKXx8W10pWzBdKSYmKDA8KG89bC5zdWJzdHIoMCxsLmluZGV4T2YobikpKS5sZW5ndGgmJnAodCkudW51c2VkSW5wdXQucHVzaChvKSxsPWwuc2xpY2UobC5pbmRleE9mKG4pK24ubGVuZ3RoKSxkKz1uLmxlbmd0aCksJFthXT8obj9wKHQpLmVtcHR5PSExOnAodCkudW51c2VkVG9rZW5zLnB1c2goYSkscz1hLHU9dCxudWxsIT0oYz1uKSYmaChkdCxzKSYmZHRbc10oYyx1Ll9hLHUscykpOnQuX3N0cmljdCYmIW4mJnAodCkudW51c2VkVG9rZW5zLnB1c2goYSk7cCh0KS5jaGFyc0xlZnRPdmVyPWYtZCwwPGwubGVuZ3RoJiZwKHQpLnVudXNlZElucHV0LnB1c2gobCksdC5fYVszXTw9MTImJiEwPT09cCh0KS5iaWdIb3VyJiYwPHQuX2FbM10mJihwKHQpLmJpZ0hvdXI9dm9pZCAwKSxwKHQpLnBhcnNlZERhdGVQYXJ0cz10Ll9hLnNsaWNlKDApLHAodCkubWVyaWRpZW09dC5fbWVyaWRpZW0sdC5fYVszXT1mdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIG51bGw9PW4/ZTpudWxsIT10Lm1lcmlkaWVtSG91cj90Lm1lcmlkaWVtSG91cihlLG4pOihudWxsIT10LmlzUE0mJigocj10LmlzUE0obikpJiZlPDEyJiYoZSs9MTIpLHJ8fDEyIT09ZXx8KGU9MCkpLGUpfSh0Ll9sb2NhbGUsdC5fYVszXSx0Ll9tZXJpZGllbSksb2UodCksaWUodCl9ZWxzZSB5ZSh0KTtlbHNlIGRlKHQpfWZ1bmN0aW9uIG1lKHQpe3ZhciBlLG4scixoLGQ9dC5faSx2PXQuX2Y7cmV0dXJuIHQuX2xvY2FsZT10Ll9sb2NhbGV8fHJlKHQuX2wpLG51bGw9PT1kfHx2b2lkIDA9PT12JiYiIj09PWQ/eSh7bnVsbElucHV0OiEwfSk6KCJzdHJpbmciPT10eXBlb2YgZCYmKHQuX2k9ZD10Ll9sb2NhbGUucHJlcGFyc2UoZCkpLF8oZCk/bmV3IHgoaWUoZCkpOih1KGQpP3QuX2Q9ZDphKHYpP2Z1bmN0aW9uKHQpe3ZhciBlLG4scixpLGE7aWYoMD09PXQuX2YubGVuZ3RoKXJldHVybiBwKHQpLmludmFsaWRGb3JtYXQ9ITAsdC5fZD1uZXcgRGF0ZShOYU4pO2ZvcihpPTA7aTx0Ll9mLmxlbmd0aDtpKyspYT0wLGU9bSh7fSx0KSxudWxsIT10Ll91c2VVVEMmJihlLl91c2VVVEM9dC5fdXNlVVRDKSxlLl9mPXQuX2ZbaV0sdmUoZSksZyhlKSYmKGErPXAoZSkuY2hhcnNMZWZ0T3ZlcixhKz0xMCpwKGUpLnVudXNlZFRva2Vucy5sZW5ndGgscChlKS5zY29yZT1hLChudWxsPT1yfHxhPHIpJiYocj1hLG49ZSkpO2YodCxufHxlKX0odCk6dj92ZSh0KTpzKG49KGU9dCkuX2kpP2UuX2Q9bmV3IERhdGUoaS5ub3coKSk6dShuKT9lLl9kPW5ldyBEYXRlKG4udmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mIG4/KHI9ZSxudWxsPT09KGg9ZmUuZXhlYyhyLl9pKSk/KGRlKHIpLCExPT09ci5faXNWYWxpZCYmKGRlbGV0ZSByLl9pc1ZhbGlkLHllKHIpLCExPT09ci5faXNWYWxpZCYmKGRlbGV0ZSByLl9pc1ZhbGlkLGkuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2socikpKSk6ci5fZD1uZXcgRGF0ZSgraFsxXSkpOmEobik/KGUuX2E9bChuLnNsaWNlKDApLChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VJbnQodCwxMCl9KSksb2UoZSkpOm8obik/ZnVuY3Rpb24odCl7aWYoIXQuX2Qpe3ZhciBlPUYodC5faSk7dC5fYT1sKFtlLnllYXIsZS5tb250aCxlLmRheXx8ZS5kYXRlLGUuaG91cixlLm1pbnV0ZSxlLnNlY29uZCxlLm1pbGxpc2Vjb25kXSwoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnBhcnNlSW50KHQsMTApfSkpLG9lKHQpfX0oZSk6YyhuKT9lLl9kPW5ldyBEYXRlKG4pOmkuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soZSksZyh0KXx8KHQuX2Q9bnVsbCksdCkpfWZ1bmN0aW9uIGJlKHQsZSxuLHIsaSl7dmFyIHMsYz17fTtyZXR1cm4hMCE9PW4mJiExIT09bnx8KHI9bixuPXZvaWQgMCksKG8odCkmJmZ1bmN0aW9uKHQpe2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVybiAwPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubGVuZ3RoO3ZhciBlO2ZvcihlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4hMTtyZXR1cm4hMH0odCl8fGEodCkmJjA9PT10Lmxlbmd0aCkmJih0PXZvaWQgMCksYy5faXNBTW9tZW50T2JqZWN0PSEwLGMuX3VzZVVUQz1jLl9pc1VUQz1pLGMuX2w9bixjLl9pPXQsYy5fZj1lLGMuX3N0cmljdD1yLChzPW5ldyB4KGllKG1lKGMpKSkpLl9uZXh0RGF5JiYocy5hZGQoMSwiZCIpLHMuX25leHREYXk9dm9pZCAwKSxzfWZ1bmN0aW9uIHhlKHQsZSxuLHIpe3JldHVybiBiZSh0LGUsbixyLCExKX1pLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPUMoInZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCB3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlIGRpc2NvdXJhZ2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYW4gdXBjb21pbmcgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4iLChmdW5jdGlvbih0KXt0Ll9kPW5ldyBEYXRlKHQuX2krKHQuX3VzZVVUQz8iIFVUQyI6IiIpKX0pKSxpLklTT184NjAxPWZ1bmN0aW9uKCl7fSxpLlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgX2U9QygibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLChmdW5jdGlvbigpe3ZhciB0PXhlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpP3Q8dGhpcz90aGlzOnQ6eSgpfSkpLGtlPUMoIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIiwoZnVuY3Rpb24oKXt2YXIgdD14ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90aGlzPHQ/dGhpczp0OnkoKX0pKTtmdW5jdGlvbiB3ZSh0LGUpe3ZhciBuLHI7aWYoMT09PWUubGVuZ3RoJiZhKGVbMF0pJiYoZT1lWzBdKSwhZS5sZW5ndGgpcmV0dXJuIHhlKCk7Zm9yKG49ZVswXSxyPTE7cjxlLmxlbmd0aDsrK3IpZVtyXS5pc1ZhbGlkKCkmJiFlW3JdW3RdKG4pfHwobj1lW3JdKTtyZXR1cm4gbn12YXIgRWU9WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCJdO2Z1bmN0aW9uIFRlKHQpe3ZhciBlPUYodCksbj1lLnllYXJ8fDAscj1lLnF1YXJ0ZXJ8fDAsaT1lLm1vbnRofHwwLGE9ZS53ZWVrfHxlLmlzb1dlZWt8fDAsbz1lLmRheXx8MCxzPWUuaG91cnx8MCxjPWUubWludXRlfHwwLHU9ZS5zZWNvbmR8fDAsbD1lLm1pbGxpc2Vjb25kfHwwO3RoaXMuX2lzVmFsaWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpaWYoLTE9PT1tdC5jYWxsKEVlLGUpfHxudWxsIT10W2VdJiZpc05hTih0W2VdKSlyZXR1cm4hMTtmb3IodmFyIG49ITEscj0wO3I8RWUubGVuZ3RoOysrcilpZih0W0VlW3JdXSl7aWYobilyZXR1cm4hMTtwYXJzZUZsb2F0KHRbRWVbcl1dKSE9PXcodFtFZVtyXV0pJiYobj0hMCl9cmV0dXJuITB9KGUpLHRoaXMuX21pbGxpc2Vjb25kcz0rbCsxZTMqdSs2ZTQqYysxZTMqcyo2MCo2MCx0aGlzLl9kYXlzPStvKzcqYSx0aGlzLl9tb250aHM9K2krMypyKzEyKm4sdGhpcy5fZGF0YT17fSx0aGlzLl9sb2NhbGU9cmUoKSx0aGlzLl9idWJibGUoKX1mdW5jdGlvbiBDZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFRlfWZ1bmN0aW9uIFNlKHQpe3JldHVybiB0PDA/LTEqTWF0aC5yb3VuZCgtMSp0KTpNYXRoLnJvdW5kKHQpfWZ1bmN0aW9uIEFlKHQsZSl7Vyh0LDAsMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnV0Y09mZnNldCgpLG49IisiO3JldHVybiB0PDAmJih0PS10LG49Ii0iKSxuK1Iofn4odC82MCksMikrZStSKH5+dCU2MCwyKX0pKX1BZSgiWiIsIjoiKSxBZSgiWloiLCIiKSxsdCgiWiIsc3QpLGx0KCJaWiIsc3QpLHB0KFsiWiIsIlpaIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl91c2VVVEM9ITAsbi5fdHptPU9lKHN0LHQpfSkpO3ZhciBNZT0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBPZSh0LGUpe3ZhciBuPShlfHwiIikubWF0Y2godCk7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7dmFyIHI9KChuW24ubGVuZ3RoLTFdfHxbXSkrIiIpLm1hdGNoKE1lKXx8WyItIiwwLDBdLGk9NjAqclsxXSt3KHJbMl0pO3JldHVybiAwPT09aT8wOiIrIj09PXJbMF0/aTotaX1mdW5jdGlvbiBEZSh0LGUpe3ZhciBuLHI7cmV0dXJuIGUuX2lzVVRDPyhuPWUuY2xvbmUoKSxyPShfKHQpfHx1KHQpP3QudmFsdWVPZigpOnhlKHQpLnZhbHVlT2YoKSktbi52YWx1ZU9mKCksbi5fZC5zZXRUaW1lKG4uX2QudmFsdWVPZigpK3IpLGkudXBkYXRlT2Zmc2V0KG4sITEpLG4pOnhlKHQpLmxvY2FsKCl9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHQuX2QuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9ZnVuY3Rpb24gQmUoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQyYmMD09PXRoaXMuX29mZnNldH1pLnVwZGF0ZU9mZnNldD1mdW5jdGlvbigpe307dmFyIExlPS9eKFwtfFwrKT8oPzooXGQqKVsuIF0pPyhcZCspXDooXGQrKSg/Olw6KFxkKykoXC5cZCopPyk/JC8sUGU9L14oLXxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO2Z1bmN0aW9uIEZlKHQsZSl7dmFyIG4scixpLGE9dCxvPW51bGw7cmV0dXJuIENlKHQpP2E9e21zOnQuX21pbGxpc2Vjb25kcyxkOnQuX2RheXMsTTp0Ll9tb250aHN9OmModCk/KGE9e30sZT9hW2VdPXQ6YS5taWxsaXNlY29uZHM9dCk6KG89TGUuZXhlYyh0KSk/KG49Ii0iPT09b1sxXT8tMToxLGE9e3k6MCxkOncob1syXSkqbixoOncob1szXSkqbixtOncob1s0XSkqbixzOncob1s1XSkqbixtczp3KFNlKDFlMypvWzZdKSkqbn0pOihvPVBlLmV4ZWModCkpPyhuPSItIj09PW9bMV0/LTE6MSxhPXt5OkllKG9bMl0sbiksTTpJZShvWzNdLG4pLHc6SWUob1s0XSxuKSxkOkllKG9bNV0sbiksaDpJZShvWzZdLG4pLG06SWUob1s3XSxuKSxzOkllKG9bOF0sbil9KTpudWxsPT1hP2E9e306Im9iamVjdCI9PXR5cGVvZiBhJiYoImZyb20iaW4gYXx8InRvImluIGEpJiYoaT1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiB0LmlzVmFsaWQoKSYmZS5pc1ZhbGlkKCk/KGU9RGUoZSx0KSx0LmlzQmVmb3JlKGUpP249amUodCxlKTooKG49amUoZSx0KSkubWlsbGlzZWNvbmRzPS1uLm1pbGxpc2Vjb25kcyxuLm1vbnRocz0tbi5tb250aHMpLG4pOnttaWxsaXNlY29uZHM6MCxtb250aHM6MH19KHhlKGEuZnJvbSkseGUoYS50bykpLChhPXt9KS5tcz1pLm1pbGxpc2Vjb25kcyxhLk09aS5tb250aHMpLHI9bmV3IFRlKGEpLENlKHQpJiZoKHQsIl9sb2NhbGUiKSYmKHIuX2xvY2FsZT10Ll9sb2NhbGUpLHJ9ZnVuY3Rpb24gSWUodCxlKXt2YXIgbj10JiZwYXJzZUZsb2F0KHQucmVwbGFjZSgiLCIsIi4iKSk7cmV0dXJuKGlzTmFOKG4pPzA6bikqZX1mdW5jdGlvbiBqZSh0LGUpe3ZhciBuPXt9O3JldHVybiBuLm1vbnRocz1lLm1vbnRoKCktdC5tb250aCgpKzEyKihlLnllYXIoKS10LnllYXIoKSksdC5jbG9uZSgpLmFkZChuLm1vbnRocywiTSIpLmlzQWZ0ZXIoZSkmJi0tbi5tb250aHMsbi5taWxsaXNlY29uZHM9K2UtK3QuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKSxufWZ1bmN0aW9uIFJlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGk7cmV0dXJuIG51bGw9PT1yfHxpc05hTigrcil8fChNKGUsIm1vbWVudCgpLiIrZSsiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLiIrZSsiKG51bWJlciwgcGVyaW9kKS4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLiIpLGk9bixuPXIscj1pKSxZZSh0aGlzLEZlKG49InN0cmluZyI9PXR5cGVvZiBuPytuOm4sciksdCksdGhpc319ZnVuY3Rpb24gWWUodCxlLG4scil7dmFyIGE9ZS5fbWlsbGlzZWNvbmRzLG89U2UoZS5fZGF5cykscz1TZShlLl9tb250aHMpO3QuaXNWYWxpZCgpJiYocj1udWxsPT1yfHxyLHMmJlN0KHQsX3QodCwiTW9udGgiKStzKm4pLG8mJmt0KHQsIkRhdGUiLF90KHQsIkRhdGUiKStvKm4pLGEmJnQuX2Quc2V0VGltZSh0Ll9kLnZhbHVlT2YoKSthKm4pLHImJmkudXBkYXRlT2Zmc2V0KHQsb3x8cykpfUZlLmZuPVRlLnByb3RvdHlwZSxGZS5pbnZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIEZlKE5hTil9O3ZhciB6ZT1SZSgxLCJhZGQiKSxVZT1SZSgtMSwic3VidHJhY3QiKTtmdW5jdGlvbiAkZSh0LGUpe3ZhciBuPTEyKihlLnllYXIoKS10LnllYXIoKSkrKGUubW9udGgoKS10Lm1vbnRoKCkpLHI9dC5jbG9uZSgpLmFkZChuLCJtb250aHMiKTtyZXR1cm4tKG4rKGUtcjwwPyhlLXIpLyhyLXQuY2xvbmUoKS5hZGQobi0xLCJtb250aHMiKSk6KGUtcikvKHQuY2xvbmUoKS5hZGQobisxLCJtb250aHMiKS1yKSkpfHwwfWZ1bmN0aW9uIFdlKHQpe3ZhciBlO3JldHVybiB2b2lkIDA9PT10P3RoaXMuX2xvY2FsZS5fYWJicjoobnVsbCE9KGU9cmUodCkpJiYodGhpcy5fbG9jYWxlPWUpLHRoaXMpfWkuZGVmYXVsdEZvcm1hdD0iWVlZWS1NTS1ERFRISDptbTpzc1oiLGkuZGVmYXVsdEZvcm1hdFV0Yz0iWVlZWS1NTS1ERFRISDptbTpzc1taXSI7dmFyIFZlPUMoIm1vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuIiwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUodCl9KSk7ZnVuY3Rpb24gSGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlfXZhciBHZT0xMjYyMjc4MDhlNTtmdW5jdGlvbiBxZSh0LGUpe3JldHVybih0JWUrZSklZX1mdW5jdGlvbiBYZSh0LGUsbil7cmV0dXJuIHQ8MTAwJiYwPD10P25ldyBEYXRlKHQrNDAwLGUsbiktR2U6bmV3IERhdGUodCxlLG4pLnZhbHVlT2YoKX1mdW5jdGlvbiBaZSh0LGUsbil7cmV0dXJuIHQ8MTAwJiYwPD10P0RhdGUuVVRDKHQrNDAwLGUsbiktR2U6RGF0ZS5VVEModCxlLG4pfWZ1bmN0aW9uIEplKHQsZSl7VygwLFt0LHQubGVuZ3RoXSwwLGUpfWZ1bmN0aW9uIFFlKHQsZSxuLHIsaSl7dmFyIGE7cmV0dXJuIG51bGw9PXQ/UHQodGhpcyxyLGkpLnllYXI6KChhPUZ0KHQscixpKSk8ZSYmKGU9YSksZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYT1MdCh0LGUsbixyLGkpLG89TnQoYS55ZWFyLDAsYS5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoby5nZXRVVENGdWxsWWVhcigpKSx0aGlzLm1vbnRoKG8uZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKG8uZ2V0VVRDRGF0ZSgpKSx0aGlzfS5jYWxsKHRoaXMsdCxlLG4scixpKSl9VygwLFsiZ2ciLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSksVygwLFsiR0ciLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSksSmUoImdnZ2ciLCJ3ZWVrWWVhciIpLEplKCJnZ2dnZyIsIndlZWtZZWFyIiksSmUoIkdHR0ciLCJpc29XZWVrWWVhciIpLEplKCJHR0dHRyIsImlzb1dlZWtZZWFyIiksTCgid2Vla1llYXIiLCJnZyIpLEwoImlzb1dlZWtZZWFyIiwiR0ciKSxqKCJ3ZWVrWWVhciIsMSksaigiaXNvV2Vla1llYXIiLDEpLGx0KCJHIixhdCksbHQoImciLGF0KSxsdCgiR0ciLFEscSksbHQoImdnIixRLHEpLGx0KCJHR0dHIixudCxaKSxsdCgiZ2dnZyIsbnQsWiksbHQoIkdHR0dHIixydCxKKSxsdCgiZ2dnZ2ciLHJ0LEopLGd0KFsiZ2dnZyIsImdnZ2dnIiwiR0dHRyIsIkdHR0dHIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbci5zdWJzdHIoMCwyKV09dyh0KX0pKSxndChbImdnIiwiR0ciXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyXT1pLnBhcnNlVHdvRGlnaXRZZWFyKHQpfSkpLFcoIlEiLDAsIlFvIiwicXVhcnRlciIpLEwoInF1YXJ0ZXIiLCJRIiksaigicXVhcnRlciIsNyksbHQoIlEiLEcpLHB0KCJRIiwoZnVuY3Rpb24odCxlKXtlWzFdPTMqKHcodCktMSl9KSksVygiRCIsWyJERCIsMl0sIkRvIiwiZGF0ZSIpLEwoImRhdGUiLCJEIiksaigiZGF0ZSIsOSksbHQoIkQiLFEpLGx0KCJERCIsUSxxKSxsdCgiRG8iLChmdW5jdGlvbih0LGUpe3JldHVybiB0P2UuX2RheU9mTW9udGhPcmRpbmFsUGFyc2V8fGUuX29yZGluYWxQYXJzZTplLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudH0pKSxwdChbIkQiLCJERCJdLDIpLHB0KCJEbyIsKGZ1bmN0aW9uKHQsZSl7ZVsyXT13KHQubWF0Y2goUSlbMF0pfSkpO3ZhciBLZT14dCgiRGF0ZSIsITApO1coIkRERCIsWyJEREREIiwzXSwiREREbyIsImRheU9mWWVhciIpLEwoImRheU9mWWVhciIsIkRERCIpLGooImRheU9mWWVhciIsNCksbHQoIkRERCIsZXQpLGx0KCJEREREIixYKSxwdChbIkRERCIsIkREREQiXSwoZnVuY3Rpb24odCxlLG4pe24uX2RheU9mWWVhcj13KHQpfSkpLFcoIm0iLFsibW0iLDJdLDAsIm1pbnV0ZSIpLEwoIm1pbnV0ZSIsIm0iKSxqKCJtaW51dGUiLDE0KSxsdCgibSIsUSksbHQoIm1tIixRLHEpLHB0KFsibSIsIm1tIl0sNCk7dmFyIHRuPXh0KCJNaW51dGVzIiwhMSk7VygicyIsWyJzcyIsMl0sMCwic2Vjb25kIiksTCgic2Vjb25kIiwicyIpLGooInNlY29uZCIsMTUpLGx0KCJzIixRKSxsdCgic3MiLFEscSkscHQoWyJzIiwic3MiXSw1KTt2YXIgZW4sbm49eHQoIlNlY29uZHMiLCExKTtmb3IoVygiUyIsMCwwLChmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMDApfSkpLFcoMCxbIlNTIiwyXSwwLChmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSksVygwLFsiU1NTIiwzXSwwLCJtaWxsaXNlY29uZCIpLFcoMCxbIlNTU1MiLDRdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQoKX0pKSxXKDAsWyJTU1NTUyIsNV0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRoaXMubWlsbGlzZWNvbmQoKX0pKSxXKDAsWyJTU1NTU1MiLDZdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlzLm1pbGxpc2Vjb25kKCl9KSksVygwLFsiU1NTU1NTUyIsN10sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pKSxXKDAsWyJTU1NTU1NTUyIsOF0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pKSxXKDAsWyJTU1NTU1NTU1MiLDldLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSksTCgibWlsbGlzZWNvbmQiLCJtcyIpLGooIm1pbGxpc2Vjb25kIiwxNiksbHQoIlMiLGV0LEcpLGx0KCJTUyIsZXQscSksbHQoIlNTUyIsZXQsWCksZW49IlNTU1MiO2VuLmxlbmd0aDw9OTtlbis9IlMiKWx0KGVuLGl0KTtmdW5jdGlvbiBybih0LGUpe2VbNl09dygxZTMqKCIwLiIrdCkpfWZvcihlbj0iUyI7ZW4ubGVuZ3RoPD05O2VuKz0iUyIpcHQoZW4scm4pO3ZhciBhbj14dCgiTWlsbGlzZWNvbmRzIiwhMSk7VygieiIsMCwwLCJ6b25lQWJiciIpLFcoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIG9uPXgucHJvdG90eXBlO2Z1bmN0aW9uIHNuKHQpe3JldHVybiB0fW9uLmFkZD16ZSxvbi5jYWxlbmRhcj1mdW5jdGlvbih0LGUpe3ZhciBuPXR8fHhlKCkscj1EZShuLHRoaXMpLnN0YXJ0T2YoImRheSIpLGE9aS5jYWxlbmRhckZvcm1hdCh0aGlzLHIpfHwic2FtZUVsc2UiLG89ZSYmKE8oZVthXSk/ZVthXS5jYWxsKHRoaXMsbik6ZVthXSk7cmV0dXJuIHRoaXMuZm9ybWF0KG98fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGEsdGhpcyx4ZShuKSkpfSxvbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzKX0sb24uZGlmZj1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO2lmKCEocj1EZSh0LHRoaXMpKS5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtzd2l0Y2goaT02ZTQqKHIudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSksZT1QKGUpKXtjYXNlInllYXIiOmE9JGUodGhpcyxyKS8xMjticmVhaztjYXNlIm1vbnRoIjphPSRlKHRoaXMscik7YnJlYWs7Y2FzZSJxdWFydGVyIjphPSRlKHRoaXMscikvMzticmVhaztjYXNlInNlY29uZCI6YT0odGhpcy1yKS8xZTM7YnJlYWs7Y2FzZSJtaW51dGUiOmE9KHRoaXMtcikvNmU0O2JyZWFrO2Nhc2UiaG91ciI6YT0odGhpcy1yKS8zNmU1O2JyZWFrO2Nhc2UiZGF5IjphPSh0aGlzLXItaSkvODY0ZTU7YnJlYWs7Y2FzZSJ3ZWVrIjphPSh0aGlzLXItaSkvNjA0OGU1O2JyZWFrO2RlZmF1bHQ6YT10aGlzLXJ9cmV0dXJuIG4/YTprKGEpfSxvbi5lbmRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1QKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9pc1VUQz9aZTpYZTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPW4odGhpcy55ZWFyKCkrMSwwLDEpLTE7YnJlYWs7Y2FzZSJxdWFydGVyIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzKzMsMSktMTticmVhaztjYXNlIm1vbnRoIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpKzEsMSktMTticmVhaztjYXNlIndlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkrNyktMTticmVhaztjYXNlImlzb1dlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKzcpLTE7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSsxKS0xO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz0zNmU1LXFlKGUrKHRoaXMuX2lzVVRDPzA6NmU0KnRoaXMudXRjT2Zmc2V0KCkpLDM2ZTUpLTE7YnJlYWs7Y2FzZSJtaW51dGUiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9NmU0LXFlKGUsNmU0KS0xO2JyZWFrO2Nhc2Uic2Vjb25kIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTFlMy1xZShlLDFlMyktMX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKGUpLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LG9uLmZvcm1hdD1mdW5jdGlvbih0KXt0fHwodD10aGlzLmlzVXRjKCk/aS5kZWZhdWx0Rm9ybWF0VXRjOmkuZGVmYXVsdEZvcm1hdCk7dmFyIGU9Vih0aGlzLHQpO3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KGUpfSxvbi5mcm9tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoXyh0KSYmdC5pc1ZhbGlkKCl8fHhlKHQpLmlzVmFsaWQoKSk/RmUoe3RvOnRoaXMsZnJvbTp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxvbi5mcm9tTm93PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyb20oeGUoKSx0KX0sb24udG89ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfKHQpJiZ0LmlzVmFsaWQoKXx8eGUodCkuaXNWYWxpZCgpKT9GZSh7ZnJvbTp0aGlzLHRvOnR9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIWUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LG9uLnRvTm93PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRvKHhlKCksdCl9LG9uLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gTyh0aGlzW3Q9UCh0KV0pP3RoaXNbdF0oKTp0aGlzfSxvbi5pbnZhbGlkQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzKS5vdmVyZmxvd30sb24uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuPV8odCk/dDp4ZSh0KTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW4uaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oZT1QKGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT5uLnZhbHVlT2YoKTpuLnZhbHVlT2YoKTx0aGlzLmNsb25lKCkuc3RhcnRPZihlKS52YWx1ZU9mKCkpfSxvbi5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3ZhciBuPV8odCk/dDp4ZSh0KTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW4uaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oZT1QKGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKTxuLnZhbHVlT2YoKTp0aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpPG4udmFsdWVPZigpKX0sb24uaXNCZXR3ZWVuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPV8odCk/dDp4ZSh0KSxhPV8oZSk/ZTp4ZShlKTtyZXR1cm4hISh0aGlzLmlzVmFsaWQoKSYmaS5pc1ZhbGlkKCkmJmEuaXNWYWxpZCgpKSYmKCIoIj09PShyPXJ8fCIoKSIpWzBdP3RoaXMuaXNBZnRlcihpLG4pOiF0aGlzLmlzQmVmb3JlKGksbikpJiYoIikiPT09clsxXT90aGlzLmlzQmVmb3JlKGEsbik6IXRoaXMuaXNBZnRlcihhLG4pKX0sb24uaXNTYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1fKHQpP3Q6eGUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFyLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9UChlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk9PT1yLnZhbHVlT2YoKToobj1yLnZhbHVlT2YoKSx0aGlzLmNsb25lKCkuc3RhcnRPZihlKS52YWx1ZU9mKCk8PW4mJm48PXRoaXMuY2xvbmUoKS5lbmRPZihlKS52YWx1ZU9mKCkpKX0sb24uaXNTYW1lT3JBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzU2FtZSh0LGUpfHx0aGlzLmlzQWZ0ZXIodCxlKX0sb24uaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0JlZm9yZSh0LGUpfSxvbi5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcyl9LG9uLmxhbmc9VmUsb24ubG9jYWxlPVdlLG9uLmxvY2FsZURhdGE9SGUsb24ubWF4PWtlLG9uLm1pbj1fZSxvbi5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZih7fSxwKHRoaXMpKX0sb24uc2V0PWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWZvcih2YXIgbj1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2goe3VuaXQ6bixwcmlvcml0eTpJW25dfSk7cmV0dXJuIGUuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wcmlvcml0eS1lLnByaW9yaXR5fSkpLGV9KHQ9Rih0KSkscj0wO3I8bi5sZW5ndGg7cisrKXRoaXNbbltyXS51bml0XSh0W25bcl0udW5pdF0pO2Vsc2UgaWYoTyh0aGlzW3Q9UCh0KV0pKXJldHVybiB0aGlzW3RdKGUpO3JldHVybiB0aGlzfSxvbi5zdGFydE9mPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHZvaWQgMD09PSh0PVAodCkpfHwibWlsbGlzZWNvbmQiPT09dHx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX2lzVVRDP1plOlhlO3N3aXRjaCh0KXtjYXNlInllYXIiOmU9bih0aGlzLnllYXIoKSwwLDEpO2JyZWFrO2Nhc2UicXVhcnRlciI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMywxKTticmVhaztjYXNlIm1vbnRoIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLDEpO2JyZWFrO2Nhc2Uid2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSk7YnJlYWs7Y2FzZSJpc29XZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSk7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSk7YnJlYWs7Y2FzZSJob3VyIjplPXRoaXMuX2QudmFsdWVPZigpLGUtPXFlKGUrKHRoaXMuX2lzVVRDPzA6NmU0KnRoaXMudXRjT2Zmc2V0KCkpLDM2ZTUpO2JyZWFrO2Nhc2UibWludXRlIjplPXRoaXMuX2QudmFsdWVPZigpLGUtPXFlKGUsNmU0KTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1xZShlLDFlMyl9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShlKSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxvbi5zdWJ0cmFjdD1VZSxvbi50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm5bdC55ZWFyKCksdC5tb250aCgpLHQuZGF0ZSgpLHQuaG91cigpLHQubWludXRlKCksdC5zZWNvbmQoKSx0Lm1pbGxpc2Vjb25kKCldfSxvbi50b09iamVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue3llYXJzOnQueWVhcigpLG1vbnRoczp0Lm1vbnRoKCksZGF0ZTp0LmRhdGUoKSxob3Vyczp0LmhvdXJzKCksbWludXRlczp0Lm1pbnV0ZXMoKSxzZWNvbmRzOnQuc2Vjb25kcygpLG1pbGxpc2Vjb25kczp0Lm1pbGxpc2Vjb25kcygpfX0sb24udG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sb24udG9JU09TdHJpbmc9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsO3ZhciBlPSEwIT09dCxuPWU/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7cmV0dXJuIG4ueWVhcigpPDB8fDk5OTk8bi55ZWFyKCk/VihuLGU/IllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKTpPKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKT9lP3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTpuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSs2MCp0aGlzLnV0Y09mZnNldCgpKjFlMykudG9JU09TdHJpbmcoKS5yZXBsYWNlKCJaIixWKG4sIloiKSk6VihuLGU/IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpfSxvbi5pbnNwZWN0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiJtb21lbnQuaW52YWxpZCgvKiAiK3RoaXMuX2krIiAqLykiO3ZhciB0PSJtb21lbnQiLGU9IiI7dGhpcy5pc0xvY2FsKCl8fCh0PTA9PT10aGlzLnV0Y09mZnNldCgpPyJtb21lbnQudXRjIjoibW9tZW50LnBhcnNlWm9uZSIsZT0iWiIpO3ZhciBuPSJbIit0KycoIl0nLHI9MDw9dGhpcy55ZWFyKCkmJnRoaXMueWVhcigpPD05OTk5PyJZWVlZIjoiWVlZWVlZIixpPWUrJ1siKV0nO3JldHVybiB0aGlzLmZvcm1hdChuK3IrIi1NTS1ERFtUXUhIOm1tOnNzLlNTUyIraSl9LG9uLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sb24udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgiZW4iKS5mb3JtYXQoImRkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaIil9LG9uLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxvbi52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QudmFsdWVPZigpLTZlNCoodGhpcy5fb2Zmc2V0fHwwKX0sb24uY3JlYXRpb25EYXRhPWZ1bmN0aW9uKCl7cmV0dXJue2lucHV0OnRoaXMuX2ksZm9ybWF0OnRoaXMuX2YsbG9jYWxlOnRoaXMuX2xvY2FsZSxpc1VUQzp0aGlzLl9pc1VUQyxzdHJpY3Q6dGhpcy5fc3RyaWN0fX0sb24ueWVhcj1idCxvbi5pc0xlYXBZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHZ0KHRoaXMueWVhcigpKX0sb24ud2Vla1llYXI9ZnVuY3Rpb24odCl7cmV0dXJuIFFlLmNhbGwodGhpcyx0LHRoaXMud2VlaygpLHRoaXMud2Vla2RheSgpLHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpfSxvbi5pc29XZWVrWWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gUWUuY2FsbCh0aGlzLHQsdGhpcy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5KCksMSw0KX0sb24ucXVhcnRlcj1vbi5xdWFydGVycz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9NYXRoLmNlaWwoKHRoaXMubW9udGgoKSsxKS8zKTp0aGlzLm1vbnRoKDMqKHQtMSkrdGhpcy5tb250aCgpJTMpfSxvbi5tb250aD1BdCxvbi5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB3dCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSxvbi53ZWVrPW9uLndlZWtzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCg3Kih0LWUpLCJkIil9LG9uLmlzb1dlZWs9b24uaXNvV2Vla3M9ZnVuY3Rpb24odCl7dmFyIGU9UHQodGhpcywxLDQpLndlZWs7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCg3Kih0LWUpLCJkIil9LG9uLndlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIEZ0KHRoaXMueWVhcigpLHQuZG93LHQuZG95KX0sb24uaXNvV2Vla3NJblllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gRnQodGhpcy55ZWFyKCksMSw0KX0sb24uZGF0ZT1LZSxvbi5kYXk9b24uZGF5cz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47dmFyIGUsbixyPXRoaXMuX2lzVVRDP3RoaXMuX2QuZ2V0VVRDRGF5KCk6dGhpcy5fZC5nZXREYXkoKTtyZXR1cm4gbnVsbCE9dD8oZT10LG49dGhpcy5sb2NhbGVEYXRhKCksdD0ic3RyaW5nIiE9dHlwZW9mIGU/ZTppc05hTihlKT8ibnVtYmVyIj09dHlwZW9mKGU9bi53ZWVrZGF5c1BhcnNlKGUpKT9lOm51bGw6cGFyc2VJbnQoZSwxMCksdGhpcy5hZGQodC1yLCJkIikpOnJ9LG9uLndlZWtkYXk9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO3ZhciBlPSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQodC1lLCJkIil9LG9uLmlzb1dlZWtkYXk9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuZGF5KCl8fDc7dmFyIGUsbixyPShlPXQsbj10aGlzLmxvY2FsZURhdGEoKSwic3RyaW5nIj09dHlwZW9mIGU/bi53ZWVrZGF5c1BhcnNlKGUpJTd8fDc6aXNOYU4oZSk/bnVsbDplKTtyZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSU3P3I6ci03KX0sb24uZGF5T2ZZZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS10aGlzLmNsb25lKCkuc3RhcnRPZigieWVhciIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxvbi5ob3VyPW9uLmhvdXJzPVh0LG9uLm1pbnV0ZT1vbi5taW51dGVzPXRuLG9uLnNlY29uZD1vbi5zZWNvbmRzPW5uLG9uLm1pbGxpc2Vjb25kPW9uLm1pbGxpc2Vjb25kcz1hbixvbi51dGNPZmZzZXQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGE9dGhpcy5fb2Zmc2V0fHwwO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsPT10KXJldHVybiB0aGlzLl9pc1VUQz9hOk5lKHRoaXMpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PSh0PU9lKHN0LHQpKSlyZXR1cm4gdGhpc31lbHNlIE1hdGguYWJzKHQpPDE2JiYhbiYmKHQqPTYwKTtyZXR1cm4hdGhpcy5faXNVVEMmJmUmJihyPU5lKHRoaXMpKSx0aGlzLl9vZmZzZXQ9dCx0aGlzLl9pc1VUQz0hMCxudWxsIT1yJiZ0aGlzLmFkZChyLCJtIiksYSE9PXQmJighZXx8dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz9ZZSh0aGlzLEZlKHQtYSwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9bnVsbCkpLHRoaXN9LG9uLnV0Yz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCx0KX0sb24ubG9jYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzVVRDJiYodGhpcy51dGNPZmZzZXQoMCx0KSx0aGlzLl9pc1VUQz0hMSx0JiZ0aGlzLnN1YnRyYWN0KE5lKHRoaXMpLCJtIikpLHRoaXN9LG9uLnBhcnNlWm9uZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9pKXt2YXIgdD1PZShvdCx0aGlzLl9pKTtudWxsIT10P3RoaXMudXRjT2Zmc2V0KHQpOnRoaXMudXRjT2Zmc2V0KDAsITApfXJldHVybiB0aGlzfSxvbi5oYXNBbGlnbmVkSG91ck9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYodD10P3hlKHQpLnV0Y09mZnNldCgpOjAsKHRoaXMudXRjT2Zmc2V0KCktdCklNjA9PTApfSxvbi5pc0RTVD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9LG9uLmlzTG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9LG9uLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LG9uLmlzVXRjPUJlLG9uLmlzVVRDPUJlLG9uLnpvbmVBYmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJVVEMiOiIifSxvbi56b25lTmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifSxvbi5kYXRlcz1DKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsS2UpLG9uLm1vbnRocz1DKCJtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQiLEF0KSxvbi55ZWFycz1DKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkIixidCksb24uem9uZT1DKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQ/KCJzdHJpbmciIT10eXBlb2YgdCYmKHQ9LXQpLHRoaXMudXRjT2Zmc2V0KHQsZSksdGhpcyk6LXRoaXMudXRjT2Zmc2V0KCl9KSksb24uaXNEU1RTaGlmdGVkPUMoImlzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24iLChmdW5jdGlvbigpe2lmKCFzKHRoaXMuX2lzRFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDt2YXIgdD17fTtpZihtKHQsdGhpcyksKHQ9bWUodCkpLl9hKXt2YXIgZT10Ll9pc1VUQz9kKHQuX2EpOnhlKHQuX2EpO3RoaXMuX2lzRFNUU2hpZnRlZD10aGlzLmlzVmFsaWQoKSYmMDxFKHQuX2EsZS50b0FycmF5KCkpfWVsc2UgdGhpcy5faXNEU1RTaGlmdGVkPSExO3JldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWR9KSk7dmFyIGNuPU4ucHJvdG90eXBlO2Z1bmN0aW9uIHVuKHQsZSxuLHIpe3ZhciBpPXJlKCksYT1kKCkuc2V0KHIsZSk7cmV0dXJuIGlbbl0oYSx0KX1mdW5jdGlvbiBsbih0LGUsbil7aWYoYyh0KSYmKGU9dCx0PXZvaWQgMCksdD10fHwiIixudWxsIT1lKXJldHVybiB1bih0LGUsbiwibW9udGgiKTt2YXIgcixpPVtdO2ZvcihyPTA7cjwxMjtyKyspaVtyXT11bih0LHIsbiwibW9udGgiKTtyZXR1cm4gaX1mdW5jdGlvbiBobih0LGUsbixyKXsiYm9vbGVhbiI9PXR5cGVvZiB0P2MoZSkmJihuPWUsZT12b2lkIDApOihlPXQsdD0hMSxjKG49ZSkmJihuPWUsZT12b2lkIDApKSxlPWV8fCIiO3ZhciBpLGE9cmUoKSxvPXQ/YS5fd2Vlay5kb3c6MDtpZihudWxsIT1uKXJldHVybiB1bihlLChuK28pJTcsciwiZGF5Iik7dmFyIHM9W107Zm9yKGk9MDtpPDc7aSsrKXNbaV09dW4oZSwoaStvKSU3LHIsImRheSIpO3JldHVybiBzfWNuLmNhbGVuZGFyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9jYWxlbmRhclt0XXx8dGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7cmV0dXJuIE8ocik/ci5jYWxsKGUsbik6cn0sY24ubG9uZ0RhdGVGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0sbj10aGlzLl9sb25nRGF0ZUZvcm1hdFt0LnRvVXBwZXJDYXNlKCldO3JldHVybiBlfHwhbj9lOih0aGlzLl9sb25nRGF0ZUZvcm1hdFt0XT1uLnJlcGxhY2UoL01NTU18TU18RER8ZGRkZC9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgxKX0pKSx0aGlzLl9sb25nRGF0ZUZvcm1hdFt0XSl9LGNuLmludmFsaWREYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ludmFsaWREYXRlfSxjbi5vcmRpbmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoIiVkIix0KX0sY24ucHJlcGFyc2U9c24sY24ucG9zdGZvcm1hdD1zbixjbi5yZWxhdGl2ZVRpbWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5fcmVsYXRpdmVUaW1lW25dO3JldHVybiBPKGkpP2kodCxlLG4scik6aS5yZXBsYWNlKC8lZC9pLHQpfSxjbi5wYXN0RnV0dXJlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fcmVsYXRpdmVUaW1lWzA8dD8iZnV0dXJlIjoicGFzdCJdO3JldHVybiBPKG4pP24oZSk6bi5yZXBsYWNlKC8lcy9pLGUpfSxjbi5zZXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjtmb3IobiBpbiB0KU8oZT10W25dKT90aGlzW25dPWU6dGhpc1siXyIrbl09ZTt0aGlzLl9jb25maWc9dCx0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudD1uZXcgUmVnRXhwKCh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZXx8dGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfSxjbi5tb250aHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzW3QubW9udGgoKV06dGhpcy5fbW9udGhzWyh0aGlzLl9tb250aHMuaXNGb3JtYXR8fEV0KS50ZXN0KGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bdC5tb250aCgpXTphKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21vbnRocy5zdGFuZGFsb25lfSxjbi5tb250aHNTaG9ydD1mdW5jdGlvbih0LGUpe3JldHVybiB0P2EodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0W3QubW9udGgoKV06dGhpcy5fbW9udGhzU2hvcnRbRXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnQ6dGhpcy5fbW9udGhzU2hvcnQuc3RhbmRhbG9uZX0sY24ubW9udGhzUGFyc2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZih0aGlzLl9tb250aHNQYXJzZUV4YWN0KXJldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG89dC50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10scj0wO3I8MTI7KytyKWE9ZChbMmUzLHJdKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW3JdPXRoaXMubW9udGhzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl09dGhpcy5tb250aHMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iTU1NIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPW10LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKT9pOm51bGw6Ik1NTSI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPW10LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGx9LmNhbGwodGhpcyx0LGUsbik7Zm9yKHRoaXMuX21vbnRoc1BhcnNlfHwodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10pLHI9MDtyPDEyO3IrKyl7aWYoaT1kKFsyZTMscl0pLG4mJiF0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0mJih0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHMoaSwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHNTaG9ydChpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIikpLG58fHRoaXMuX21vbnRoc1BhcnNlW3JdfHwoYT0iXiIrdGhpcy5tb250aHMoaSwiIikrInxeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLHRoaXMuX21vbnRoc1BhcnNlW3JdPW5ldyBSZWdFeHAoYS5yZXBsYWNlKCIuIiwiIiksImkiKSksbiYmIk1NTU0iPT09ZSYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmIk1NTSI9PT1lJiZ0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYoIW4mJnRoaXMuX21vbnRoc1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHJ9fSxjbi5tb250aHNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8RHQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KTooaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8KHRoaXMuX21vbnRoc1JlZ2V4PU90KSx0aGlzLl9tb250aHNTdHJpY3RSZWdleCYmdD90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9LGNuLm1vbnRoc1Nob3J0UmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KGgodGhpcywiX21vbnRoc1JlZ2V4Iil8fER0LmNhbGwodGhpcyksdD90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpOihoKHRoaXMsIl9tb250aHNTaG9ydFJlZ2V4Iil8fCh0aGlzLl9tb250aHNTaG9ydFJlZ2V4PU10KSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCl9LGNuLndlZWs9ZnVuY3Rpb24odCl7cmV0dXJuIFB0KHQsdGhpcy5fd2Vlay5kb3csdGhpcy5fd2Vlay5kb3kpLndlZWt9LGNuLmZpcnN0RGF5T2ZZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG95fSxjbi5maXJzdERheU9mV2Vlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93ZWVrLmRvd30sY24ud2Vla2RheXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5c1t0JiYhMCE9PXQmJnRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXTtyZXR1cm4hMD09PXQ/SXQobix0aGlzLl93ZWVrLmRvdyk6dD9uW3QuZGF5KCldOm59LGNuLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9JdCh0aGlzLl93ZWVrZGF5c01pbix0aGlzLl93ZWVrLmRvdyk6dD90aGlzLl93ZWVrZGF5c01pblt0LmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn0sY24ud2Vla2RheXNTaG9ydD1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXQ/SXQodGhpcy5fd2Vla2RheXNTaG9ydCx0aGlzLl93ZWVrLmRvdyk6dD90aGlzLl93ZWVrZGF5c1Nob3J0W3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LGNuLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZih0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz10LnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2UpZm9yKHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10scj0wO3I8NzsrK3IpYT1kKFsyZTMsMV0pLmRheShyKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXNNaW4oYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fd2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/ImRkZGQiPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGQiPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkZCI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fd2Vla2RheXNQYXJzZXx8KHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2U9W10pLHI9MDtyPDc7cisrKXtpZihpPWQoWzJlMywxXSkuZGF5KHIpLG4mJiF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXSYmKHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXMoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIikpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl18fChhPSJeIit0aGlzLndlZWtkYXlzKGksIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c1Nob3J0KGksIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c01pbihpLCIiKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoYS5yZXBsYWNlKCIuIiwiIiksImkiKSksbiYmImRkZGQiPT09ZSYmdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiZGRkIj09PWUmJnRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZCI9PT1lJiZ0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYoIW4mJnRoaXMuX3dlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLndlZWtkYXlzUmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHwodGhpcy5fd2Vla2RheXNSZWdleD16dCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpfSxjbi53ZWVrZGF5c1Nob3J0UmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KGgodGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIpfHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PVV0KSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCl9LGNuLndlZWtkYXlzTWluUmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vla2RheXNNaW5SZWdleD0kdCksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpfSxjbi5pc1BNPWZ1bmN0aW9uKHQpe3JldHVybiJwIj09PSh0KyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX0sY24ubWVyaWRpZW09ZnVuY3Rpb24odCxlLG4pe3JldHVybiAxMTx0P24/InBtIjoiUE0iOm4/ImFtIjoiQU0ifSxlZSgiZW4iLHtkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbih0KXt2YXIgZT10JTEwO3JldHVybiB0KygxPT09dyh0JTEwMC8xMCk/InRoIjoxPT09ZT8ic3QiOjI9PT1lPyJuZCI6Mz09PWU/InJkIjoidGgiKX19KSxpLmxhbmc9QygibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4iLGVlKSxpLmxhbmdEYXRhPUMoIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLHJlKTt2YXIgZm49TWF0aC5hYnM7ZnVuY3Rpb24gZG4odCxlLG4scil7dmFyIGk9RmUoZSxuKTtyZXR1cm4gdC5fbWlsbGlzZWNvbmRzKz1yKmkuX21pbGxpc2Vjb25kcyx0Ll9kYXlzKz1yKmkuX2RheXMsdC5fbW9udGhzKz1yKmkuX21vbnRocyx0Ll9idWJibGUoKX1mdW5jdGlvbiBwbih0KXtyZXR1cm4gdDwwP01hdGguZmxvb3IodCk6TWF0aC5jZWlsKHQpfWZ1bmN0aW9uIGduKHQpe3JldHVybiA0ODAwKnQvMTQ2MDk3fWZ1bmN0aW9uIHluKHQpe3JldHVybiAxNDYwOTcqdC80ODAwfWZ1bmN0aW9uIHZuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKHQpfX12YXIgbW49dm4oIm1zIiksYm49dm4oInMiKSx4bj12bigibSIpLF9uPXZuKCJoIiksa249dm4oImQiKSx3bj12bigidyIpLEVuPXZuKCJNIiksVG49dm4oIlEiKSxDbj12bigieSIpO2Z1bmN0aW9uIFNuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9kYXRhW3RdOk5hTn19dmFyIEFuPVNuKCJtaWxsaXNlY29uZHMiKSxNbj1Tbigic2Vjb25kcyIpLE9uPVNuKCJtaW51dGVzIiksRG49U24oImhvdXJzIiksTm49U24oImRheXMiKSxCbj1TbigibW9udGhzIiksTG49U24oInllYXJzIiksUG49TWF0aC5yb3VuZCxGbj17c3M6NDQsczo0NSxtOjQ1LGg6MjIsZDoyNixNOjExfSxJbj1NYXRoLmFicztmdW5jdGlvbiBqbih0KXtyZXR1cm4oMDx0KS0odDwwKXx8K3R9ZnVuY3Rpb24gUm4oKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIHQsZSxuPUluKHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLHI9SW4odGhpcy5fZGF5cyksaT1Jbih0aGlzLl9tb250aHMpO2U9aygodD1rKG4vNjApKS82MCksbiU9NjAsdCU9NjA7dmFyIGE9ayhpLzEyKSxvPWklPTEyLHM9cixjPWUsdT10LGw9bj9uLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIsaD10aGlzLmFzU2Vjb25kcygpO2lmKCFoKXJldHVybiJQMEQiO3ZhciBmPWg8MD8iLSI6IiIsZD1qbih0aGlzLl9tb250aHMpIT09am4oaCk/Ii0iOiIiLHA9am4odGhpcy5fZGF5cykhPT1qbihoKT8iLSI6IiIsZz1qbih0aGlzLl9taWxsaXNlY29uZHMpIT09am4oaCk/Ii0iOiIiO3JldHVybiBmKyJQIisoYT9kK2ErIlkiOiIiKSsobz9kK28rIk0iOiIiKSsocz9wK3MrIkQiOiIiKSsoY3x8dXx8bD8iVCI6IiIpKyhjP2crYysiSCI6IiIpKyh1P2crdSsiTSI6IiIpKyhsP2crbCsiUyI6IiIpfXZhciBZbj1UZS5wcm90b3R5cGU7cmV0dXJuIFluLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWYWxpZH0sWW4uYWJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZGF0YTtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzPWZuKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5cz1mbih0aGlzLl9kYXlzKSx0aGlzLl9tb250aHM9Zm4odGhpcy5fbW9udGhzKSx0Lm1pbGxpc2Vjb25kcz1mbih0Lm1pbGxpc2Vjb25kcyksdC5zZWNvbmRzPWZuKHQuc2Vjb25kcyksdC5taW51dGVzPWZuKHQubWludXRlcyksdC5ob3Vycz1mbih0LmhvdXJzKSx0Lm1vbnRocz1mbih0Lm1vbnRocyksdC55ZWFycz1mbih0LnllYXJzKSx0aGlzfSxZbi5hZGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsMSl9LFluLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRuKHRoaXMsdCxlLC0xKX0sWW4uYXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIGUsbixyPXRoaXMuX21pbGxpc2Vjb25kcztpZigibW9udGgiPT09KHQ9UCh0KSl8fCJxdWFydGVyIj09PXR8fCJ5ZWFyIj09PXQpc3dpdGNoKGU9dGhpcy5fZGF5cytyLzg2NGU1LG49dGhpcy5fbW9udGhzK2duKGUpLHQpe2Nhc2UibW9udGgiOnJldHVybiBuO2Nhc2UicXVhcnRlciI6cmV0dXJuIG4vMztjYXNlInllYXIiOnJldHVybiBuLzEyfWVsc2Ugc3dpdGNoKGU9dGhpcy5fZGF5cytNYXRoLnJvdW5kKHluKHRoaXMuX21vbnRocykpLHQpe2Nhc2Uid2VlayI6cmV0dXJuIGUvNytyLzYwNDhlNTtjYXNlImRheSI6cmV0dXJuIGUrci84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCplK3IvMzZlNTtjYXNlIm1pbnV0ZSI6cmV0dXJuIDE0NDAqZStyLzZlNDtjYXNlInNlY29uZCI6cmV0dXJuIDg2NDAwKmUrci8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGguZmxvb3IoODY0ZTUqZSkrcjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrdCl9fSxZbi5hc01pbGxpc2Vjb25kcz1tbixZbi5hc1NlY29uZHM9Ym4sWW4uYXNNaW51dGVzPXhuLFluLmFzSG91cnM9X24sWW4uYXNEYXlzPWtuLFluLmFzV2Vla3M9d24sWW4uYXNNb250aHM9RW4sWW4uYXNRdWFydGVycz1UbixZbi5hc1llYXJzPUNuLFluLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fbWlsbGlzZWNvbmRzKzg2NGU1KnRoaXMuX2RheXMrdGhpcy5fbW9udGhzJTEyKjI1OTJlNiszMTUzNmU2KncodGhpcy5fbW9udGhzLzEyKTpOYU59LFluLl9idWJibGU9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpLGE9dGhpcy5fbWlsbGlzZWNvbmRzLG89dGhpcy5fZGF5cyxzPXRoaXMuX21vbnRocyxjPXRoaXMuX2RhdGE7cmV0dXJuIDA8PWEmJjA8PW8mJjA8PXN8fGE8PTAmJm88PTAmJnM8PTB8fChhKz04NjRlNSpwbih5bihzKStvKSxzPW89MCksYy5taWxsaXNlY29uZHM9YSUxZTMsdD1rKGEvMWUzKSxjLnNlY29uZHM9dCU2MCxlPWsodC82MCksYy5taW51dGVzPWUlNjAsbj1rKGUvNjApLGMuaG91cnM9biUyNCxzKz1pPWsoZ24obys9ayhuLzI0KSkpLG8tPXBuKHluKGkpKSxyPWsocy8xMikscyU9MTIsYy5kYXlzPW8sYy5tb250aHM9cyxjLnllYXJzPXIsdGhpc30sWW4uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gRmUodGhpcyl9LFluLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdD1QKHQpLHRoaXMuaXNWYWxpZCgpP3RoaXNbdCsicyJdKCk6TmFOfSxZbi5taWxsaXNlY29uZHM9QW4sWW4uc2Vjb25kcz1NbixZbi5taW51dGVzPU9uLFluLmhvdXJzPURuLFluLmRheXM9Tm4sWW4ud2Vla3M9ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLmRheXMoKS83KX0sWW4ubW9udGhzPUJuLFluLnllYXJzPUxuLFluLmh1bWFuaXplPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoPXRoaXMubG9jYWxlRGF0YSgpLGY9KGU9IXQsbj1oLHI9RmUodGhpcykuYWJzKCksaT1QbihyLmFzKCJzIikpLGE9UG4oci5hcygibSIpKSxvPVBuKHIuYXMoImgiKSkscz1QbihyLmFzKCJkIikpLGM9UG4oci5hcygiTSIpKSx1PVBuKHIuYXMoInkiKSksKGw9aTw9Rm4uc3MmJlsicyIsaV18fGk8Rm4ucyYmWyJzcyIsaV18fGE8PTEmJlsibSJdfHxhPEZuLm0mJlsibW0iLGFdfHxvPD0xJiZbImgiXXx8bzxGbi5oJiZbImhoIixvXXx8czw9MSYmWyJkIl18fHM8Rm4uZCYmWyJkZCIsc118fGM8PTEmJlsiTSJdfHxjPEZuLk0mJlsiTU0iLGNdfHx1PD0xJiZbInkiXXx8WyJ5eSIsdV0pWzJdPWUsbFszXT0wPCt0aGlzLGxbNF09bixmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBpLnJlbGF0aXZlVGltZShlfHwxLCEhbix0LHIpfS5hcHBseShudWxsLGwpKTtyZXR1cm4gdCYmKGY9aC5wYXN0RnV0dXJlKCt0aGlzLGYpKSxoLnBvc3Rmb3JtYXQoZil9LFluLnRvSVNPU3RyaW5nPVJuLFluLnRvU3RyaW5nPVJuLFluLnRvSlNPTj1SbixZbi5sb2NhbGU9V2UsWW4ubG9jYWxlRGF0YT1IZSxZbi50b0lzb1N0cmluZz1DKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsUm4pLFluLmxhbmc9VmUsVygiWCIsMCwwLCJ1bml4IiksVygieCIsMCwwLCJ2YWx1ZU9mIiksbHQoIngiLGF0KSxsdCgiWCIsL1srLV0/XGQrKFwuXGR7MSwzfSk/LykscHQoIlgiLChmdW5jdGlvbih0LGUsbil7bi5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdCh0LDEwKSl9KSkscHQoIngiLChmdW5jdGlvbih0LGUsbil7bi5fZD1uZXcgRGF0ZSh3KHQpKX0pKSxpLnZlcnNpb249IjIuMjQuMCIsZT14ZSxpLmZuPW9uLGkubWluPWZ1bmN0aW9uKCl7cmV0dXJuIHdlKCJpc0JlZm9yZSIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxpLm1heD1mdW5jdGlvbigpe3JldHVybiB3ZSgiaXNBZnRlciIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxpLm5vdz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdz9EYXRlLm5vdygpOituZXcgRGF0ZX0saS51dGM9ZCxpLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIHhlKDFlMyp0KX0saS5tb250aHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHMiKX0saS5pc0RhdGU9dSxpLmxvY2FsZT1lZSxpLmludmFsaWQ9eSxpLmR1cmF0aW9uPUZlLGkuaXNNb21lbnQ9XyxpLndlZWtkYXlzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzIil9LGkucGFyc2Vab25lPWZ1bmN0aW9uKCl7cmV0dXJuIHhlLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0saS5sb2NhbGVEYXRhPXJlLGkuaXNEdXJhdGlvbj1DZSxpLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxuKHQsZSwibW9udGhzU2hvcnQiKX0saS53ZWVrZGF5c01pbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGhuKHQsZSxuLCJ3ZWVrZGF5c01pbiIpfSxpLmRlZmluZUxvY2FsZT1uZSxpLnVwZGF0ZUxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKG51bGwhPWUpe3ZhciBuLHIsaT1adDtudWxsIT0ocj10ZSh0KSkmJihpPXIuX2NvbmZpZyksKG49bmV3IE4oZT1EKGksZSkpKS5wYXJlbnRMb2NhbGU9SnRbdF0sSnRbdF09bixlZSh0KX1lbHNlIG51bGwhPUp0W3RdJiYobnVsbCE9SnRbdF0ucGFyZW50TG9jYWxlP0p0W3RdPUp0W3RdLnBhcmVudExvY2FsZTpudWxsIT1KdFt0XSYmZGVsZXRlIEp0W3RdKTtyZXR1cm4gSnRbdF19LGkubG9jYWxlcz1mdW5jdGlvbigpe3JldHVybiBTKEp0KX0saS53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzU2hvcnQiKX0saS5ub3JtYWxpemVVbml0cz1QLGkucmVsYXRpdmVUaW1lUm91bmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/UG46ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihQbj10LCEwKX0saS5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwIT09Rm5bdF0mJih2b2lkIDA9PT1lP0ZuW3RdOihGblt0XT1lLCJzIj09PXQmJihGbi5zcz1lLTEpLCEwKSl9LGkuY2FsZW5kYXJGb3JtYXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmRpZmYoZSwiZGF5cyIsITApO3JldHVybiBuPC02PyJzYW1lRWxzZSI6bjwtMT8ibGFzdFdlZWsiOm48MD8ibGFzdERheSI6bjwxPyJzYW1lRGF5IjpuPDI/Im5leHREYXkiOm48Nz8ibmV4dFdlZWsiOiJzYW1lRWxzZSJ9LGkucHJvdG90eXBlPW9uLGkuSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDoiWVlZWS1NTS1ERFRISDptbSIsREFURVRJTUVfTE9DQUxfU0VDT05EUzoiWVlZWS1NTS1ERFRISDptbTpzcyIsREFURVRJTUVfTE9DQUxfTVM6IllZWVktTU0tRERUSEg6bW06c3MuU1NTIixEQVRFOiJZWVlZLU1NLUREIixUSU1FOiJISDptbSIsVElNRV9TRUNPTkRTOiJISDptbTpzcyIsVElNRV9NUzoiSEg6bW06c3MuU1NTIixXRUVLOiJHR0dHLVtXXVdXIixNT05USDoiWVlZWS1NTSJ9LGl9KCl9KS5jYWxsKHRoaXMsbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM3KSxpPW4oODApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmaSh0Lmxlbmd0aCkmJiFyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjU2KSxpPW4oMjY2KSxhPW4oMzUpLG89big1KSxzPW4oMjczKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsPT10P2E6Im9iamVjdCI9PXR5cGVvZiB0P28odCk/aSh0WzBdLHRbMV0pOnIodCk6cyh0KX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsOV0sbj1bMSw3XSxyPVsxLDZdLGk9WzEsOF0sYT1bMSwyMCwyMSwyMiwyMywzOCw0Niw3NSw3Niw3Nyw3OCw3OSw4MCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLG89WzIsMTBdLHM9WzEsMjBdLGM9WzEsMjFdLHU9WzEsMjJdLGw9WzEsMjNdLGg9WzEsMzBdLGY9WzEsNTRdLGQ9WzEsMzJdLHA9WzEsMzNdLGc9WzEsMzRdLHk9WzEsMzVdLHY9WzEsMzZdLG09WzEsNDhdLGI9WzEsNDNdLHg9WzEsNDVdLF89WzEsNDBdLGs9WzEsNDRdLHc9WzEsNDddLEU9WzEsNTFdLFQ9WzEsNTJdLEM9WzEsNTNdLFM9WzEsNDJdLEE9WzEsNDZdLE09WzEsNDldLE89WzEsNTBdLEQ9WzEsNDFdLE49WzEsNTddLEI9WzEsNjJdLEw9WzEsMjAsMjEsMjIsMjMsMzgsNDIsNDYsNzUsNzYsNzcsNzgsNzksODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxQPVsxLDY2XSxGPVsxLDY1XSxJPVsxLDY3XSxqPVsyMCwyMSwyMyw2OSw3MF0sUj1bMjAsMjEsMjIsMjMsNjksNzBdLFk9WzIwLDIxLDIyLDIzLDQ3LDY5LDcwXSx6PVsyMCwyMSwyMiwyMyw0MCw0Niw0Nyw0OSw1MSw1Myw1NSw1Nyw1OSw2MSw2Miw2NCw2OSw3MCw4MCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLFU9WzIwLDIxLDIzXSwkPVsyMCwyMSwyMyw0Niw2OSw3MCw4MCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLFc9WzEsMTIsMjAsMjEsMjIsMjMsMjQsMzgsNDIsNDYsNzUsNzYsNzcsNzgsNzksODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxWPVs0Niw4MCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLEg9WzEsMTE1XSxHPVsxLDEzNl0scT1bMSwxMzddLFg9WzEsMTM4XSxaPVsxLDEzOV0sSj1bMSwxMTldLFE9WzEsMTEwXSxLPVsxLDExMV0sdHQ9WzEsMTA3XSxldD1bMSwxMzFdLG50PVsxLDEzMl0scnQ9WzEsMTMzXSxpdD1bMSwxMzRdLGF0PVsxLDEzNV0sb3Q9WzEsMTQwXSxzdD1bMSwxNDFdLGN0PVsxLDExM10sdXQ9WzEsMTIxXSxsdD1bMSwxMjRdLGh0PVsxLDEyMl0sZnQ9WzEsMTIzXSxkdD1bMSwxMTZdLHB0PVsxLDEyOV0sZ3Q9WzEsMTI4XSx5dD1bMSwxMTJdLHZ0PVsxLDEwOV0sbXQ9WzEsMTE4XSxidD1bMSwxMjBdLHh0PVsxLDEyNV0sX3Q9WzEsMTI2XSxrdD1bMSwxMjddLHd0PVsxLDEzMF0sRXQ9WzIwLDIxLDIyLDIzLDM4LDQyLDQ2LDc1LDc2LDc3LDc4LDc5LDgwLDkxLDkyLDk1LDk2LDk3LDk5LDEwMCwxMDYsMTA3LDEwOCwxMDksMTEwLDExMV0sVHQ9WzEsMTQ0XSxDdD1bMSwxNDhdLFN0PVsxLDE1MF0sQXQ9WzEsMTUxXSxNdD1bMTIsMjEsMjIsMjRdLE90PVsyMCwyMSwyMiwyMywyNCwyNiwzOCw0MCw0MSw0Miw0Niw1MCw1Miw1NCw1Niw1OCw2MCw2MSw2Myw2NSw2OSw3MCw3MSw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4NCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTAxLDEwMiwxMDYsMTA3LDEwOCwxMDksMTEwLDExMV0sRHQ9WzIwLDIxLDIyLDIzLDI2LDQ2LDgwLDkxLDkyLDk1LDk2LDk3LDk5LDEwMCwxMDYsMTA3LDEwOCwxMDksMTEwLDExMV0sTnQ9WzIyLDkyXSxCdD1bMSwyMjBdLEx0PVsxLDIyNF0sUHQ9WzEsMjIxXSxGdD1bMSwyMThdLEl0PVsxLDIxNV0sanQ9WzEsMjE2XSxSdD1bMSwyMTddLFl0PVsxLDIxOV0senQ9WzEsMjIyXSxVdD1bMSwyMjNdLCR0PVsxLDIyNV0sV3Q9WzEsMjQxXSxWdD1bMjAsMjEsMjMsOTJdLEh0PVsyMCwyMSwyMiwyMyw3NSw4OCw5MSw5Miw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxXSxHdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LGRpcmVjdGl2ZTo1LG9wZW5EaXJlY3RpdmU6Nix0eXBlRGlyZWN0aXZlOjcsY2xvc2VEaXJlY3RpdmU6OCxzZXBhcmF0b3I6OSwiOiI6MTAsYXJnRGlyZWN0aXZlOjExLG9wZW5fZGlyZWN0aXZlOjEyLHR5cGVfZGlyZWN0aXZlOjEzLGFyZ19kaXJlY3RpdmU6MTQsY2xvc2VfZGlyZWN0aXZlOjE1LGdyYXBoQ29uZmlnOjE2LGRvY3VtZW50OjE3LGxpbmU6MTgsc3RhdGVtZW50OjE5LFNFTUk6MjAsTkVXTElORToyMSxTUEFDRToyMixFT0Y6MjMsR1JBUEg6MjQsTk9ESVI6MjUsRElSOjI2LEZpcnN0U3RtdFNlcGVyYXRvcjoyNyxlbmRpbmc6MjgsZW5kVG9rZW46Mjksc3BhY2VMaXN0OjMwLHNwYWNlTGlzdE5ld2xpbmU6MzEsdmVydGljZVN0YXRlbWVudDozMixzdHlsZVN0YXRlbWVudDozMyxsaW5rU3R5bGVTdGF0ZW1lbnQ6MzQsY2xhc3NEZWZTdGF0ZW1lbnQ6MzUsY2xhc3NTdGF0ZW1lbnQ6MzYsY2xpY2tTdGF0ZW1lbnQ6Mzcsc3ViZ3JhcGg6MzgsdGV4dDozOSxTUVM6NDAsU1FFOjQxLGVuZDo0MixsaW5rOjQzLG5vZGU6NDQsdmVydGV4OjQ1LEFNUDo0NixTVFlMRV9TRVBBUkFUT1I6NDcsaWRTdHJpbmc6NDgsUFM6NDksUEU6NTAsIigtIjo1MSwiLSkiOjUyLFNUQURJVU1TVEFSVDo1MyxTVEFESVVNRU5EOjU0LFNVQlJPVVRJTkVTVEFSVDo1NSxTVUJST1VUSU5FRU5EOjU2LENZTElOREVSU1RBUlQ6NTcsQ1lMSU5ERVJFTkQ6NTgsRElBTU9ORF9TVEFSVDo1OSxESUFNT05EX1NUT1A6NjAsVEFHRU5EOjYxLFRSQVBTVEFSVDo2MixUUkFQRU5EOjYzLElOVlRSQVBTVEFSVDo2NCxJTlZUUkFQRU5EOjY1LGxpbmtTdGF0ZW1lbnQ6NjYsYXJyb3dUZXh0OjY3LFRFU1RTVFI6NjgsU1RBUlRfTElOSzo2OSxMSU5LOjcwLFBJUEU6NzEsdGV4dFRva2VuOjcyLFNUUjo3MyxrZXl3b3Jkczo3NCxTVFlMRTo3NSxMSU5LU1RZTEU6NzYsQ0xBU1NERUY6NzcsQ0xBU1M6NzgsQ0xJQ0s6NzksRE9XTjo4MCxVUDo4MSx0ZXh0Tm9UYWdzOjgyLHRleHROb1RhZ3NUb2tlbjo4MyxERUZBVUxUOjg0LHN0eWxlc09wdDo4NSxhbHBoYU51bTo4NixMSU5LX1RBUkdFVDo4NyxIRVg6ODgsbnVtTGlzdDo4OSxJTlRFUlBPTEFURTo5MCxOVU06OTEsQ09NTUE6OTIsc3R5bGU6OTMsc3R5bGVDb21wb25lbnQ6OTQsQUxQSEE6OTUsQ09MT046OTYsTUlOVVM6OTcsVU5JVDo5OCxCUktUOjk5LERPVDoxMDAsUENUOjEwMSxUQUdTVEFSVDoxMDIsYWxwaGFOdW1Ub2tlbjoxMDMsaWRTdHJpbmdUb2tlbjoxMDQsYWxwaGFOdW1TdGF0ZW1lbnQ6MTA1LFBVTkNUVUFUSU9OOjEwNixVTklDT0RFX1RFWFQ6MTA3LFBMVVM6MTA4LEVRVUFMUzoxMDksTVVMVDoxMTAsVU5ERVJTQ09SRToxMTEsZ3JhcGhDb2RlVG9rZW5zOjExMixBUlJPV19DUk9TUzoxMTMsQVJST1dfUE9JTlQ6MTE0LEFSUk9XX0NJUkNMRToxMTUsQVJST1dfT1BFTjoxMTYsUVVPVEU6MTE3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiwxMDoiOiIsMTI6Im9wZW5fZGlyZWN0aXZlIiwxMzoidHlwZV9kaXJlY3RpdmUiLDE0OiJhcmdfZGlyZWN0aXZlIiwxNToiY2xvc2VfZGlyZWN0aXZlIiwyMDoiU0VNSSIsMjE6Ik5FV0xJTkUiLDIyOiJTUEFDRSIsMjM6IkVPRiIsMjQ6IkdSQVBIIiwyNToiTk9ESVIiLDI2OiJESVIiLDM4OiJzdWJncmFwaCIsNDA6IlNRUyIsNDE6IlNRRSIsNDI6ImVuZCIsNDY6IkFNUCIsNDc6IlNUWUxFX1NFUEFSQVRPUiIsNDk6IlBTIiw1MDoiUEUiLDUxOiIoLSIsNTI6Ii0pIiw1MzoiU1RBRElVTVNUQVJUIiw1NDoiU1RBRElVTUVORCIsNTU6IlNVQlJPVVRJTkVTVEFSVCIsNTY6IlNVQlJPVVRJTkVFTkQiLDU3OiJDWUxJTkRFUlNUQVJUIiw1ODoiQ1lMSU5ERVJFTkQiLDU5OiJESUFNT05EX1NUQVJUIiw2MDoiRElBTU9ORF9TVE9QIiw2MToiVEFHRU5EIiw2MjoiVFJBUFNUQVJUIiw2MzoiVFJBUEVORCIsNjQ6IklOVlRSQVBTVEFSVCIsNjU6IklOVlRSQVBFTkQiLDY4OiJURVNUU1RSIiw2OToiU1RBUlRfTElOSyIsNzA6IkxJTksiLDcxOiJQSVBFIiw3MzoiU1RSIiw3NToiU1RZTEUiLDc2OiJMSU5LU1RZTEUiLDc3OiJDTEFTU0RFRiIsNzg6IkNMQVNTIiw3OToiQ0xJQ0siLDgwOiJET1dOIiw4MToiVVAiLDg0OiJERUZBVUxUIiw4NzoiTElOS19UQVJHRVQiLDg4OiJIRVgiLDkwOiJJTlRFUlBPTEFURSIsOTE6Ik5VTSIsOTI6IkNPTU1BIiw5NToiQUxQSEEiLDk2OiJDT0xPTiIsOTc6Ik1JTlVTIiw5ODoiVU5JVCIsOTk6IkJSS1QiLDEwMDoiRE9UIiwxMDE6IlBDVCIsMTAyOiJUQUdTVEFSVCIsMTA2OiJQVU5DVFVBVElPTiIsMTA3OiJVTklDT0RFX1RFWFQiLDEwODoiUExVUyIsMTA5OiJFUVVBTFMiLDExMDoiTVVMVCIsMTExOiJVTkRFUlNDT1JFIiwxMTM6IkFSUk9XX0NST1NTIiwxMTQ6IkFSUk9XX1BPSU5UIiwxMTU6IkFSUk9XX0NJUkNMRSIsMTE2OiJBUlJPV19PUEVOIiwxMTc6IlFVT1RFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDRdLFs1LDZdLFs2LDFdLFs3LDFdLFsxMSwxXSxbOCwxXSxbNCwyXSxbMTcsMF0sWzE3LDJdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE2LDJdLFsxNiwyXSxbMTYsMl0sWzE2LDNdLFsyOCwyXSxbMjgsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI3LDFdLFsyNywxXSxbMjcsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMCwyXSxbMzAsMV0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDldLFsxOSw2XSxbMTksNF0sWzksMV0sWzksMV0sWzksMV0sWzMyLDNdLFszMiw0XSxbMzIsMl0sWzMyLDFdLFs0NCwxXSxbNDQsNV0sWzQ0LDNdLFs0NSw0XSxbNDUsNl0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDZdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDFdLFs0MywyXSxbNDMsM10sWzQzLDNdLFs0MywxXSxbNDMsM10sWzY2LDFdLFs2NywzXSxbMzksMV0sWzM5LDJdLFszOSwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs4MiwxXSxbODIsMl0sWzM1LDVdLFszNSw1XSxbMzYsNV0sWzM3LDVdLFszNyw3XSxbMzcsNV0sWzM3LDddLFszNyw3XSxbMzcsOV0sWzMzLDVdLFszMyw1XSxbMzQsNV0sWzM0LDVdLFszNCw5XSxbMzQsOV0sWzM0LDddLFszNCw3XSxbODksMV0sWzg5LDNdLFs4NSwxXSxbODUsM10sWzkzLDFdLFs5MywyXSxbOTQsMV0sWzk0LDFdLFs5NCwxXSxbOTQsMV0sWzk0LDFdLFs5NCwxXSxbOTQsMV0sWzk0LDFdLFs5NCwxXSxbOTQsMV0sWzk0LDFdLFs3MiwxXSxbNzIsMV0sWzcyLDFdLFs3MiwxXSxbNzIsMV0sWzcyLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbNDgsMV0sWzQ4LDJdLFs4NiwxXSxbODYsMl0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA2OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZmxvd2NoYXJ0Iik7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMTphW3NdIT09W10mJmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxMjpjYXNlIDc2OmNhc2UgNzg6Y2FzZSA5MDpjYXNlIDEzODpjYXNlIDE0MDpjYXNlIDE0MTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMjA6ci5zZXREaXJlY3Rpb24oYVtzLTFdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPWFbcy0xXS5ub2RlczticmVhaztjYXNlIDM2OmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXIuYWRkU3ViR3JhcGgoYVtzLTZdLGFbcy0xXSxhW3MtNF0pO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXIuYWRkU3ViR3JhcGgoYVtzLTNdLGFbcy0xXSxhW3MtM10pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXIuYWRkU3ViR3JhcGgodm9pZCAwLGFbcy0xXSx2b2lkIDApO2JyZWFrO2Nhc2UgNDc6ci5hZGRMaW5rKGFbcy0yXS5zdG10LGFbc10sYVtzLTFdKSx0aGlzLiQ9e3N0bXQ6YVtzXSxub2RlczphW3NdLmNvbmNhdChhW3MtMl0ubm9kZXMpfTticmVhaztjYXNlIDQ4OnIuYWRkTGluayhhW3MtM10uc3RtdCxhW3MtMV0sYVtzLTJdKSx0aGlzLiQ9e3N0bXQ6YVtzLTFdLG5vZGVzOmFbcy0xXS5jb25jYXQoYVtzLTNdLm5vZGVzKX07YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9e3N0bXQ6YVtzLTFdLG5vZGVzOmFbcy0xXX07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e3N0bXQ6YVtzXSxub2RlczphW3NdfTticmVhaztjYXNlIDUxOnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9YVtzLTRdLmNvbmNhdChhW3NdKTticmVhaztjYXNlIDUzOnRoaXMuJD1bYVtzLTJdXSxyLnNldENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDU0OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwic3F1YXJlIik7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9YVtzLTVdLHIuYWRkVmVydGV4KGFbcy01XSxhW3MtMl0sImNpcmNsZSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJlbGxpcHNlIik7YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDU4OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwic3Vicm91dGluZSIpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJjeWxpbmRlciIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJkaWFtb25kIik7YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9YVtzLTVdLHIuYWRkVmVydGV4KGFbcy01XSxhW3MtMl0sImhleGFnb24iKTticmVhaztjYXNlIDYzOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwib2RkIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInRyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJpbnZfdHJhcGV6b2lkIik7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDY3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwibGVhbl9sZWZ0Iik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9YVtzXSxyLmFkZFZlcnRleChhW3NdKTticmVhaztjYXNlIDY5OmFbcy0xXS50ZXh0PWFbc10sdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDcwOmNhc2UgNzE6YVtzLTJdLnRleHQ9YVtzLTFdLHRoaXMuJD1hW3MtMl07YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDczOnZhciBjPXIuZGVzdHJ1Y3RMaW5rKGFbc10sYVtzLTJdKTt0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGgsdGV4dDphW3MtMV19O2JyZWFrO2Nhc2UgNzQ6Yz1yLmRlc3RydWN0TGluayhhW3NdKTt0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGh9O2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc3OmNhc2UgOTE6Y2FzZSAxMzk6dGhpcy4kPWFbcy0xXSsiIithW3NdO2JyZWFrO2Nhc2UgOTI6Y2FzZSA5Mzp0aGlzLiQ9YVtzLTRdLHIuYWRkQ2xhc3MoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgOTQ6dGhpcy4kPWFbcy00XSxyLnNldENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk1OnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3NdLHZvaWQgMCk7YnJlYWs7Y2FzZSA5Njp0aGlzLiQ9YVtzLTZdLHIuc2V0Q2xpY2tFdmVudChhW3MtNF0sYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgOTc6dGhpcy4kPWFbcy00XSxyLnNldExpbmsoYVtzLTJdLGFbc10sdm9pZCAwLHZvaWQgMCk7YnJlYWs7Y2FzZSA5ODp0aGlzLiQ9YVtzLTZdLHIuc2V0TGluayhhW3MtNF0sYVtzLTJdLGFbc10sdm9pZCAwKTticmVhaztjYXNlIDk5OnRoaXMuJD1hW3MtNl0sci5zZXRMaW5rKGFbcy00XSxhW3MtMl0sdm9pZCAwLGFbc10pO2JyZWFrO2Nhc2UgMTAwOnRoaXMuJD1hW3MtOF0sci5zZXRMaW5rKGFbcy02XSxhW3MtNF0sYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgMTAxOnRoaXMuJD1hW3MtNF0sci5hZGRWZXJ0ZXgoYVtzLTJdLHZvaWQgMCx2b2lkIDAsYVtzXSk7YnJlYWs7Y2FzZSAxMDI6Y2FzZSAxMDQ6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgMTAzOnRoaXMuJD1hW3MtNF0sci51cGRhdGVMaW5rKFthW3MtMl1dLGFbc10pO2JyZWFrO2Nhc2UgMTA1OnRoaXMuJD1hW3MtOF0sci51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW2Fbcy02XV0sYVtzLTJdKSxyLnVwZGF0ZUxpbmsoW2Fbcy02XV0sYVtzXSk7YnJlYWs7Y2FzZSAxMDY6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShhW3MtNl0sYVtzLTJdKSxyLnVwZGF0ZUxpbmsoYVtzLTZdLGFbc10pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1hW3MtNl0sci51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW2Fbcy00XV0sYVtzXSk7YnJlYWs7Y2FzZSAxMDg6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShhW3MtNF0sYVtzXSk7YnJlYWs7Y2FzZSAxMDk6Y2FzZSAxMTE6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDExMDpjYXNlIDExMjphW3MtMl0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgMTE0OnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDEzNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDEzNzp0aGlzLiQ9YVtzLTFdKyIiK2Fbc107YnJlYWs7Y2FzZSAxNDI6dGhpcy4kPSJ2IjticmVhaztjYXNlIDE0Mzp0aGlzLiQ9Ii0ifX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDQ6MzEsNDU6MzcsNDY6Ziw0ODozOCw3NTpkLDc2OnAsNzc6Zyw3ODp5LDc5OnYsODA6bSw5MTpiLDkyOngsOTU6Xyw5NjprLDk3OncsOTk6RSwxMDA6VCwxMDQ6MzksMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9LHs4OjU1LDEwOlsxLDU2XSwxNTpOfSx0KFsxMCwxNV0sWzIsNl0pLHQoYSxbMiwxN10pLHQoYSxbMiwxOF0pLHQoYSxbMiwxOV0pLHsyMDpbMSw1OV0sMjE6WzEsNjBdLDIyOkIsMjc6NTgsMzA6NjF9LHQoTCxbMiwxMV0pLHQoTCxbMiwxMl0pLHQoTCxbMiwxM10pLHQoTCxbMiwxNF0pLHQoTCxbMiwxNV0pLHQoTCxbMiwxNl0pLHs5OjYzLDIwOlAsMjE6RiwyMzpJLDQzOjY0LDY2OjY4LDY5OlsxLDY5XSw3MDpbMSw3MF19LHs5OjcxLDIwOlAsMjE6RiwyMzpJfSx7OTo3MiwyMDpQLDIxOkYsMjM6SX0sezk6NzMsMjA6UCwyMTpGLDIzOkl9LHs5Ojc0LDIwOlAsMjE6RiwyMzpJfSx7OTo3NSwyMDpQLDIxOkYsMjM6SX0sezk6NzcsMjA6UCwyMTpGLDIyOlsxLDc2XSwyMzpJfSx0KGosWzIsNTBdLHszMDo3OCwyMjpCfSksezIyOlsxLDc5XX0sezIyOlsxLDgwXX0sezIyOlsxLDgxXX0sezIyOlsxLDgyXX0sezIyOlsxLDgzXX0sdChSLFsyLDUxXSx7NDc6WzEsODRdfSksdChZLFsyLDY4XSx7MTA0Ojk1LDQwOlsxLDg1XSw0NjpmLDQ5OlsxLDg2XSw1MTpbMSw4N10sNTM6WzEsODhdLDU1OlsxLDg5XSw1NzpbMSw5MF0sNTk6WzEsOTFdLDYxOlsxLDkyXSw2MjpbMSw5M10sNjQ6WzEsOTRdLDgwOm0sOTE6Yiw5Mjp4LDk1Ol8sOTY6ayw5Nzp3LDk5OkUsMTAwOlQsMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9KSx0KHosWzIsMTM2XSksdCh6LFsyLDE1N10pLHQoeixbMiwxNThdKSx0KHosWzIsMTU5XSksdCh6LFsyLDE2MF0pLHQoeixbMiwxNjFdKSx0KHosWzIsMTYyXSksdCh6LFsyLDE2M10pLHQoeixbMiwxNjRdKSx0KHosWzIsMTY1XSksdCh6LFsyLDE2Nl0pLHQoeixbMiwxNjddKSx0KHosWzIsMTY4XSksdCh6LFsyLDE2OV0pLHQoeixbMiwxNzBdKSx0KHosWzIsMTcxXSksezk6OTYsMjA6UCwyMTpGLDIzOkl9LHsxMTo5NywxNDpbMSw5OF19LHQoVSxbMiw4XSksdChhLFsyLDIwXSksdChhLFsyLDI2XSksdChhLFsyLDI3XSksezIxOlsxLDk5XX0sdCgkLFsyLDM0XSx7MzA6MTAwLDIyOkJ9KSx0KEwsWzIsMzVdKSx7NDQ6MTAxLDQ1OjM3LDQ2OmYsNDg6MzgsODA6bSw5MTpiLDkyOngsOTU6Xyw5NjprLDk3OncsOTk6RSwxMDA6VCwxMDQ6MzksMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9LHQoVyxbMiw0NF0pLHQoVyxbMiw0NV0pLHQoVyxbMiw0Nl0pLHQoVixbMiw3Ml0sezY3OjEwMiw2ODpbMSwxMDNdLDcxOlsxLDEwNF19KSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxMDUsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx0KFs0Niw2OCw3MSw4MCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLFsyLDc0XSksdChMLFsyLDM2XSksdChMLFsyLDM3XSksdChMLFsyLDM4XSksdChMLFsyLDM5XSksdChMLFsyLDQwXSksezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTQyLDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sdChFdCxvLHsxNzoxNDN9KSx0KGosWzIsNDldLHs0NjpUdH0pLHsyNjpDdCw0NjpKLDgwOlN0LDg2OjE0NSw4ODpbMSwxNDZdLDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxNDcsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHs4NDpbMSwxNTJdLDg5OjE1Myw5MTpbMSwxNTRdfSx7MjY6Q3QsNDY6Siw4MDpTdCw4NDpbMSwxNTVdLDg2OjE1Niw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTQ3LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjY6Q3QsNDY6Siw4MDpTdCw4NjoxNTcsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6QXQsOTk6cHQsMTAwOmd0LDEwMzoxNDksMTA1OjE0NywxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezI2OkN0LDQ2OkosODA6U3QsODY6MTU4LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxNDcsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHs0NjpmLDQ4OjE1OSw4MDptLDkxOmIsOTI6eCw5NTpfLDk2OmssOTc6dyw5OTpFLDEwMDpULDEwNDozOSwxMDY6QywxMDc6UywxMDg6QSwxMDk6TSwxMTA6TywxMTE6RH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTYwLDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTYyLDQyOlosNDY6Siw0OTpbMSwxNjFdLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNjMsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNjQsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNjUsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNjYsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNjcsNDI6Wiw0NjpKLDU5OlsxLDE2OF0sNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE2OSw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE3MCw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE3MSw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoeixbMiwxMzddKSx0KE10LFsyLDNdKSx7ODoxNzIsMTU6Tn0sezE1OlsyLDddfSx0KGEsWzIsMjhdKSx0KCQsWzIsMzNdKSx0KGosWzIsNDddLHszMDoxNzMsMjI6Qn0pLHQoVixbMiw2OV0sezIyOlsxLDE3NF19KSx7MjI6WzEsMTc1XX0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTc2LDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MDpbMSwxNzddLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoT3QsWzIsNzZdKSx0KE90LFsyLDc4XSksdChPdCxbMiwxMjZdKSx0KE90LFsyLDEyN10pLHQoT3QsWzIsMTI4XSksdChPdCxbMiwxMjldKSx0KE90LFsyLDEzMF0pLHQoT3QsWzIsMTMxXSksdChPdCxbMiwxMzJdKSx0KE90LFsyLDEzM10pLHQoT3QsWzIsMTM0XSksdChPdCxbMiwxMzVdKSx0KE90LFsyLDE0NF0pLHQoT3QsWzIsMTQ1XSksdChPdCxbMiwxNDZdKSx0KE90LFsyLDE0N10pLHQoT3QsWzIsMTQ4XSksdChPdCxbMiwxNDldKSx0KE90LFsyLDE1MF0pLHQoT3QsWzIsMTUxXSksdChPdCxbMiwxNTJdKSx0KE90LFsyLDE1M10pLHQoT3QsWzIsMTU0XSksdChPdCxbMiwxNTVdKSx0KE90LFsyLDE1Nl0pLHQoT3QsWzIsNzldKSx0KE90LFsyLDgwXSksdChPdCxbMiw4MV0pLHQoT3QsWzIsODJdKSx0KE90LFsyLDgzXSksdChPdCxbMiw4NF0pLHQoT3QsWzIsODVdKSx0KE90LFsyLDg2XSksdChPdCxbMiw4N10pLHQoT3QsWzIsODhdKSx0KE90LFsyLDg5XSksezk6MTgwLDIwOlAsMjE6RiwyMjpILDIzOkksMjQ6RywyNjpxLDM4OlgsNDA6WzEsMTc5XSw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDI6WzEsMTgxXSw0NDozMSw0NTozNyw0NjpmLDQ4OjM4LDc1OmQsNzY6cCw3NzpnLDc4OnksNzk6diw4MDptLDkxOmIsOTI6eCw5NTpfLDk2OmssOTc6dyw5OTpFLDEwMDpULDEwNDozOSwxMDY6QywxMDc6UywxMDg6QSwxMDk6TSwxMTA6TywxMTE6RH0sezIyOkIsMzA6MTgyfSx7MjI6WzEsMTgzXSwyNjpDdCw0NjpKLDgwOlN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxODQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpbMSwxODVdfSx0KER0LFsyLDEzOF0pLHQoRHQsWzIsMTQwXSksdChEdCxbMiwxNDFdKSx0KER0LFsyLDE0Ml0pLHQoRHQsWzIsMTQzXSksezIyOlsxLDE4Nl19LHsyMjpbMSwxODddLDkyOlsxLDE4OF19LHQoTnQsWzIsMTA5XSksezIyOlsxLDE4OV19LHsyMjpbMSwxOTBdLDI2OkN0LDQ2OkosODA6U3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6QXQsOTk6cHQsMTAwOmd0LDEwMzoxNDksMTA1OjE4NCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOlsxLDE5MV0sMjY6Q3QsNDY6Siw4MDpTdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTg0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6WzEsMTkyXSwyNjpDdCw0NjpKLDgwOlN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxODQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoUixbMiw1M10sezEwNDo5NSw0NjpmLDgwOm0sOTE6Yiw5Mjp4LDk1Ol8sOTY6ayw5Nzp3LDk5OkUsMTAwOlQsMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9KSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MTpbMSwxOTNdLDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTk0LDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsNDI6Wiw0NjpKLDUwOlsxLDE5NV0sNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw1MjpbMSwxOTZdLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNTQ6WzEsMTk3XSw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsNDI6Wiw0NjpKLDU2OlsxLDE5OF0sNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw1ODpbMSwxOTldLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNjA6WzEsMjAwXSw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MjAxLDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsNDE6WzEsMjAyXSw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw2MTpRLDYzOlsxLDIwM10sNjU6WzEsMjA0XSw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw2MTpRLDYzOlsxLDIwNl0sNjU6WzEsMjA1XSw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHs5OjIwNywyMDpQLDIxOkYsMjM6SX0sdChqLFsyLDQ4XSx7NDY6VHR9KSx0KFYsWzIsNzFdKSx0KFYsWzIsNzBdKSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNjE6USw2OTpLLDcxOlsxLDIwOF0sNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sdChWLFsyLDczXSksdChPdCxbMiw3N10pLHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjIwOSw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoRXQsbyx7MTc6MjEwfSksdChMLFsyLDQzXSksezQ1OjIxMSw0NjpmLDQ4OjM4LDgwOm0sOTE6Yiw5Mjp4LDk1Ol8sOTY6ayw5Nzp3LDk5OkUsMTAwOlQsMTA0OjM5LDEwNjpDLDEwNzpTLDEwODpBLDEwOTpNLDExMDpPLDExMTpEfSx7MjI6QnQsNzU6THQsODU6MjEyLDg4OlB0LDkxOkZ0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sdChEdCxbMiwxMzldKSx7MjI6QnQsNzU6THQsODU6MjI2LDg4OlB0LDkxOkZ0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sezIyOkJ0LDc1Okx0LDg1OjIyNyw4ODpQdCw5MDpbMSwyMjhdLDkxOkZ0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sezIyOkJ0LDc1Okx0LDg1OjIyOSw4ODpQdCw5MDpbMSwyMzBdLDkxOkZ0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sezkxOlsxLDIzMV19LHsyMjpCdCw3NTpMdCw4NToyMzIsODg6UHQsOTE6RnQsOTM6MjEzLDk0OjIxNCw5NTpJdCw5NjpqdCw5NzpSdCw5ODpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0fSx7MjI6QnQsNzU6THQsODU6MjMzLDg4OlB0LDkxOkZ0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sezI2OkN0LDQ2OkosODA6U3QsODY6MjM0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxNDcsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyNjpDdCw0NjpKLDczOlsxLDIzNl0sODA6U3QsODY6MjM1LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxNDcsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoWSxbMiw1NF0pLHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw1MDpbMSwyMzddLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx0KFksWzIsNjBdKSx0KFksWzIsNTZdKSx0KFksWzIsNTddKSx0KFksWzIsNThdKSx0KFksWzIsNTldKSx0KFksWzIsNjFdKSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNjA6WzEsMjM4XSw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sdChZLFsyLDYzXSksdChZLFsyLDY0XSksdChZLFsyLDY2XSksdChZLFsyLDY1XSksdChZLFsyLDY3XSksdChNdCxbMiw0XSksdChbMjIsNDYsODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxbMiw3NV0pLHsyMjpILDI0OkcsMjY6cSwzODpYLDQxOlsxLDIzOV0sNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDI0MF0sNDQ6MzEsNDU6MzcsNDY6Ziw0ODozOCw3NTpkLDc2OnAsNzc6Zyw3ODp5LDc5OnYsODA6bSw5MTpiLDkyOngsOTU6Xyw5NjprLDk3OncsOTk6RSwxMDA6VCwxMDQ6MzksMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9LHQoUixbMiw1Ml0pLHQoVSxbMiwxMDFdLHs5MjpXdH0pLHQoVnQsWzIsMTExXSx7OTQ6MjQyLDIyOkJ0LDc1Okx0LDg4OlB0LDkxOkZ0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9KSx0KEh0LFsyLDExM10pLHQoSHQsWzIsMTE1XSksdChIdCxbMiwxMTZdKSx0KEh0LFsyLDExN10pLHQoSHQsWzIsMTE4XSksdChIdCxbMiwxMTldKSx0KEh0LFsyLDEyMF0pLHQoSHQsWzIsMTIxXSksdChIdCxbMiwxMjJdKSx0KEh0LFsyLDEyM10pLHQoSHQsWzIsMTI0XSksdChIdCxbMiwxMjVdKSx0KFUsWzIsMTAyXSx7OTI6V3R9KSx0KFUsWzIsMTAzXSx7OTI6V3R9KSx7MjI6WzEsMjQzXX0sdChVLFsyLDEwNF0sezkyOld0fSksezIyOlsxLDI0NF19LHQoTnQsWzIsMTEwXSksdChVLFsyLDkyXSx7OTI6V3R9KSx0KFUsWzIsOTNdLHs5MjpXdH0pLHQoVSxbMiw5NF0sezEwMzoxNDksMTA1OjE4NCwyNjpDdCw0NjpKLDgwOlN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0pLHQoVSxbMiw5NV0sezEwMzoxNDksMTA1OjE4NCwyMjpbMSwyNDVdLDI2OkN0LDQ2OkosODA6U3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6QXQsOTk6cHQsMTAwOmd0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSksdChVLFsyLDk3XSx7MjI6WzEsMjQ2XX0pLHs1MDpbMSwyNDddfSx7NjA6WzEsMjQ4XX0sezk6MjQ5LDIwOlAsMjE6RiwyMzpJfSx0KEwsWzIsNDJdKSx7MjI6QnQsNzU6THQsODg6UHQsOTE6RnQsOTM6MjUwLDk0OjIxNCw5NTpJdCw5NjpqdCw5NzpSdCw5ODpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0fSx0KEh0LFsyLDExNF0pLHsyNjpDdCw0NjpKLDgwOlN0LDg2OjI1MSw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTQ3LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjY6Q3QsNDY6Siw4MDpTdCw4NjoyNTIsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6QXQsOTk6cHQsMTAwOmd0LDEwMzoxNDksMTA1OjE0NywxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezczOlsxLDI1M119LHs3MzpbMSwyNTRdLDg3OlsxLDI1NV19LHQoWSxbMiw1NV0pLHQoWSxbMiw2Ml0pLHQoRXQsbyx7MTc6MjU2fSksdChWdCxbMiwxMTJdLHs5NDoyNDIsMjI6QnQsNzU6THQsODg6UHQsOTE6RnQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0pLHQoVSxbMiwxMDddLHsxMDM6MTQ5LDEwNToxODQsMjI6WzEsMjU3XSwyNjpDdCw0NjpKLDgwOlN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0pLHQoVSxbMiwxMDhdLHsxMDM6MTQ5LDEwNToxODQsMjI6WzEsMjU4XSwyNjpDdCw0NjpKLDgwOlN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0pLHQoVSxbMiw5Nl0pLHQoVSxbMiw5OF0sezIyOlsxLDI1OV19KSx0KFUsWzIsOTldKSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDI2MF0sNDQ6MzEsNDU6MzcsNDY6Ziw0ODozOCw3NTpkLDc2OnAsNzc6Zyw3ODp5LDc5OnYsODA6bSw5MTpiLDkyOngsOTU6Xyw5NjprLDk3OncsOTk6RSwxMDA6VCwxMDQ6MzksMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9LHsyMjpCdCw3NTpMdCw4NToyNjEsODg6UHQsOTE6RnQsOTM6MjEzLDk0OjIxNCw5NTpJdCw5NjpqdCw5NzpSdCw5ODpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0fSx7MjI6QnQsNzU6THQsODU6MjYyLDg4OlB0LDkxOkZ0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sezg3OlsxLDI2M119LHQoTCxbMiw0MV0pLHQoVSxbMiwxMDVdLHs5MjpXdH0pLHQoVSxbMiwxMDZdLHs5MjpXdH0pLHQoVSxbMiwxMDBdKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sOTpbMiw1XSwxMDpbMiwyXSw5ODpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHF0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDEzO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSA0OnJldHVybiAxNDtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4iU1RSIjtjYXNlIDEwOnJldHVybiA3NTtjYXNlIDExOnJldHVybiA4NDtjYXNlIDEyOnJldHVybiA3NjtjYXNlIDEzOnJldHVybiA5MDtjYXNlIDE0OnJldHVybiA3NztjYXNlIDE1OnJldHVybiA3ODtjYXNlIDE2OnJldHVybiA3OTtjYXNlIDE3OmNhc2UgMTg6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAxOTpyZXR1cm4gMzg7Y2FzZSAyMDpyZXR1cm4gNDI7Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gODc7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDI4OmNhc2UgMjk6Y2FzZSAzMDpjYXNlIDMxOmNhc2UgMzI6Y2FzZSAzMzpjYXNlIDM0OmNhc2UgMzU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDM2OnJldHVybiA5MTtjYXNlIDM3OnJldHVybiA5OTtjYXNlIDM4OnJldHVybiA0NztjYXNlIDM5OnJldHVybiA5NjtjYXNlIDQwOnJldHVybiA0NjtjYXNlIDQxOnJldHVybiAyMDtjYXNlIDQyOnJldHVybiA5MjtjYXNlIDQzOnJldHVybiAxMTA7Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIDcwO2Nhc2UgNDc6Y2FzZSA0ODpjYXNlIDQ5OnJldHVybiA2OTtjYXNlIDUwOnJldHVybiA1MTtjYXNlIDUxOnJldHVybiA1MjtjYXNlIDUyOnJldHVybiA1MztjYXNlIDUzOnJldHVybiA1NDtjYXNlIDU0OnJldHVybiA1NTtjYXNlIDU1OnJldHVybiA1NjtjYXNlIDU2OnJldHVybiA1NztjYXNlIDU3OnJldHVybiA1ODtjYXNlIDU4OnJldHVybiA5NztjYXNlIDU5OnJldHVybiAxMDA7Y2FzZSA2MDpyZXR1cm4gMTExO2Nhc2UgNjE6cmV0dXJuIDEwODtjYXNlIDYyOnJldHVybiAxMDE7Y2FzZSA2MzpjYXNlIDY0OnJldHVybiAxMDk7Y2FzZSA2NTpyZXR1cm4gMTAyO2Nhc2UgNjY6cmV0dXJuIDYxO2Nhc2UgNjc6cmV0dXJuIDgxO2Nhc2UgNjg6cmV0dXJuIlNFUCI7Y2FzZSA2OTpyZXR1cm4gODA7Y2FzZSA3MDpyZXR1cm4gOTU7Y2FzZSA3MTpyZXR1cm4gNjM7Y2FzZSA3MjpyZXR1cm4gNjI7Y2FzZSA3MzpyZXR1cm4gNjU7Y2FzZSA3NDpyZXR1cm4gNjQ7Y2FzZSA3NTpyZXR1cm4gMTA2O2Nhc2UgNzY6cmV0dXJuIDEwNztjYXNlIDc3OnJldHVybiA3MTtjYXNlIDc4OnJldHVybiA0OTtjYXNlIDc5OnJldHVybiA1MDtjYXNlIDgwOnJldHVybiA0MDtjYXNlIDgxOnJldHVybiA0MTtjYXNlIDgyOnJldHVybiA1OTtjYXNlIDgzOnJldHVybiA2MDtjYXNlIDg0OnJldHVybiAxMTc7Y2FzZSA4NTpyZXR1cm4gMjE7Y2FzZSA4NjpyZXR1cm4gMjI7Y2FzZSA4NzpyZXR1cm4gMjN9fSxydWxlczpbL14oPzolJVx7KS8sL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvLC9eKD86OikvLC9eKD86XH0lJSkvLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvLC9eKD86JSUoPyFceylbXlxuXSopLywvXig/OlteXH1dJSVbXlxuXSopLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlwoLSkvLC9eKD86LVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVwpKS8sL14oPzpcW1xbKS8sL14oPzpcXVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVxdKS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86W1xfXSkvLC9eKD86XCspLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/OjwpLywvXig/Oj4pLywvXig/OlxeKS8sL14oPzpcXFx8KS8sL14oPzp2XGIpLywvXig/OltBLVphLXpdKykvLC9eKD86XFxcXSkvLC9eKD86XFtcLykvLC9eKD86XC9cXSkvLC9eKD86XFtcXCkvLC9eKD86WyEiIyQlJicqKywtLmA/XFxfL10pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/OlwoKS8sL14oPzpcKSkvLC9eKD86XFspLywvXig/OlxdKS8sL14oPzpceykvLC9eKD86XH0pLywvXig/OiIpLywvXig/Oihccj9cbikrKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdmVydGV4OntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGRpcjp7cnVsZXM6WzI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNywxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIFh0KCl7dGhpcy55eT17fX1yZXR1cm4gR3QubGV4ZXI9cXQsWHQucHJvdG90eXBlPUd0LEd0LlBhcnNlcj1YdCxuZXcgWHR9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwzXSxuPVsxLDVdLHI9WzcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyNywzMl0saT1bMSwxNV0sYT1bMSwxNl0sbz1bMSwxN10scz1bMSwxOF0sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyM10sZj1bMSwyNV0sZD1bMSwyOF0scD1bNSw3LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAsMjcsMzJdLGc9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LGdhbnR0OjUsZG9jdW1lbnQ6NixFT0Y6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkw6MTEsZGF0ZUZvcm1hdDoxMixpbmNsdXNpdmVFbmREYXRlczoxMyxheGlzRm9ybWF0OjE0LGV4Y2x1ZGVzOjE1LHRvZGF5TWFya2VyOjE2LHRpdGxlOjE3LHNlY3Rpb246MTgsY2xpY2tTdGF0ZW1lbnQ6MTksdGFza1R4dDoyMCx0YXNrRGF0YToyMSxvcGVuRGlyZWN0aXZlOjIyLHR5cGVEaXJlY3RpdmU6MjMsY2xvc2VEaXJlY3RpdmU6MjQsIjoiOjI1LGFyZ0RpcmVjdGl2ZToyNixjbGljazoyNyxjYWxsYmFja25hbWU6MjgsY2FsbGJhY2thcmdzOjI5LGhyZWY6MzAsY2xpY2tTdGF0ZW1lbnREZWJ1ZzozMSxvcGVuX2RpcmVjdGl2ZTozMix0eXBlX2RpcmVjdGl2ZTozMyxhcmdfZGlyZWN0aXZlOjM0LGNsb3NlX2RpcmVjdGl2ZTozNSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiZ2FudHQiLDc6IkVPRiIsOToiU1BBQ0UiLDExOiJOTCIsMTI6ImRhdGVGb3JtYXQiLDEzOiJpbmNsdXNpdmVFbmREYXRlcyIsMTQ6ImF4aXNGb3JtYXQiLDE1OiJleGNsdWRlcyIsMTY6InRvZGF5TWFya2VyIiwxNzoidGl0bGUiLDE4OiJzZWN0aW9uIiwyMDoidGFza1R4dCIsMjE6InRhc2tEYXRhIiwyNToiOiIsMjc6ImNsaWNrIiwyODoiY2FsbGJhY2tuYW1lIiwyOToiY2FsbGJhY2thcmdzIiwzMDoiaHJlZiIsMzI6Im9wZW5fZGlyZWN0aXZlIiwzMzoidHlwZV9kaXJlY3RpdmUiLDM0OiJhcmdfZGlyZWN0aXZlIiwzNToiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbNCw0XSxbNCw2XSxbMTksMl0sWzE5LDNdLFsxOSwzXSxbMTksNF0sWzE5LDNdLFsxOSw0XSxbMTksMl0sWzMxLDJdLFszMSwzXSxbMzEsM10sWzMxLDRdLFszMSwzXSxbMzEsNF0sWzMxLDJdLFsyMiwxXSxbMjMsMV0sWzI2LDFdLFsyNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDI6cmV0dXJuIGFbcy0xXTtjYXNlIDM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSA5OnIuc2V0RGF0ZUZvcm1hdChhW3NdLnN1YnN0cigxMSkpLHRoaXMuJD1hW3NdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxMDpyLmVuYWJsZUluY2x1c2l2ZUVuZERhdGVzKCksdGhpcy4kPWFbc10uc3Vic3RyKDE4KTticmVhaztjYXNlIDExOnIuc2V0QXhpc0Zvcm1hdChhW3NdLnN1YnN0cigxMSkpLHRoaXMuJD1hW3NdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxMjpyLnNldEV4Y2x1ZGVzKGFbc10uc3Vic3RyKDkpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAxMzpyLnNldFRvZGF5TWFya2VyKGFbc10uc3Vic3RyKDEyKSksdGhpcy4kPWFbc10uc3Vic3RyKDEyKTticmVhaztjYXNlIDE0OnIuc2V0VGl0bGUoYVtzXS5zdWJzdHIoNikpLHRoaXMuJD1hW3NdLnN1YnN0cig2KTticmVhaztjYXNlIDE1OnIuYWRkU2VjdGlvbihhW3NdLnN1YnN0cig4KSksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTc6ci5hZGRUYXNrKGFbcy0xXSxhW3NdKSx0aGlzLiQ9InRhc2siO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPWFbcy0xXSxyLnNldENsaWNrRXZlbnQoYVtzLTFdLGFbc10sbnVsbCk7YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxudWxsKSxyLnNldExpbmsoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSxhW3MtMV0pLHIuc2V0TGluayhhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzXSxudWxsKSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSk7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTFdLGFbc10pLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDI4OmNhc2UgMzQ6dGhpcy4kPWFbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDI5OmNhc2UgMzA6Y2FzZSAzMjp0aGlzLiQ9YVtzLTJdKyIgIithW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzMTpjYXNlIDMzOnRoaXMuJD1hW3MtM10rIiAiK2Fbcy0yXSsiICIrYVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzU6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDM2OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDM3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzODpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJnYW50dCIpfX0sdGFibGU6W3szOjEsNDoyLDU6ZSwyMjo0LDMyOm59LHsxOlszXX0sezM6Niw0OjIsNTplLDIyOjQsMzI6bn0sdChyLFsyLDNdLHs2Ojd9KSx7MjM6OCwzMzpbMSw5XX0sezMzOlsyLDM1XX0sezE6WzIsMV19LHs0OjI0LDc6WzEsMTBdLDg6MTEsOTpbMSwxMl0sMTA6MTMsMTE6WzEsMTRdLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6MjIsMjA6aCwyMjo0LDI3OmYsMzI6bn0sezI0OjI2LDI1OlsxLDI3XSwzNTpkfSx0KFsyNSwzNV0sWzIsMzZdKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI0LDEwOjI5LDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6MjIsMjA6aCwyMjo0LDI3OmYsMzI6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiw5XSksdChyLFsyLDEwXSksdChyLFsyLDExXSksdChyLFsyLDEyXSksdChyLFsyLDEzXSksdChyLFsyLDE0XSksdChyLFsyLDE1XSksdChyLFsyLDE2XSksezIxOlsxLDMwXX0sdChyLFsyLDE4XSksezI4OlsxLDMxXSwzMDpbMSwzMl19LHsxMTpbMSwzM119LHsyNjozNCwzNDpbMSwzNV19LHsxMTpbMiwzOF19LHQocixbMiw1XSksdChyLFsyLDE3XSksdChyLFsyLDIxXSx7Mjk6WzEsMzZdLDMwOlsxLDM3XX0pLHQocixbMiwyN10sezI4OlsxLDM4XX0pLHQocCxbMiwxOV0pLHsyNDozOSwzNTpkfSx7MzU6WzIsMzddfSx0KHIsWzIsMjJdLHszMDpbMSw0MF19KSx0KHIsWzIsMjNdKSx0KHIsWzIsMjVdLHsyOTpbMSw0MV19KSx7MTE6WzEsNDJdfSx0KHIsWzIsMjRdKSx0KHIsWzIsMjZdKSx0KHAsWzIsMjBdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMzVdLDY6WzIsMV0sMjg6WzIsMzhdLDM1OlsyLDM3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHk9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwzMjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMzM7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDI1O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzNTtjYXNlIDQ6cmV0dXJuIDM0O2Nhc2UgNTpjYXNlIDY6Y2FzZSA3OmJyZWFrO2Nhc2UgODpyZXR1cm4gMTE7Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpicmVhaztjYXNlIDEyOnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDEzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE0OnJldHVybiAzMDtjYXNlIDE1OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIDI4O2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIDI5O2Nhc2UgMjE6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDIyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIzOnJldHVybiAyNztjYXNlIDI0OnJldHVybiA1O2Nhc2UgMjU6cmV0dXJuIDEyO2Nhc2UgMjY6cmV0dXJuIDEzO2Nhc2UgMjc6cmV0dXJuIDE0O2Nhc2UgMjg6cmV0dXJuIDE1O2Nhc2UgMjk6cmV0dXJuIDE2O2Nhc2UgMzA6cmV0dXJuImRhdGUiO2Nhc2UgMzE6cmV0dXJuIDE3O2Nhc2UgMzI6cmV0dXJuIDE4O2Nhc2UgMzM6cmV0dXJuIDIwO2Nhc2UgMzQ6cmV0dXJuIDIxO2Nhc2UgMzU6cmV0dXJuIDI1O2Nhc2UgMzY6cmV0dXJuIDc7Y2FzZSAzNzpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KSpbXlxuXSopL2ksL14oPzpbXlx9XSUlKlteXG5dKikvaSwvXig/OiUlKlteXG5dKltcbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzpleGNsdWRlc1xzW14jXG47XSspL2ksL14oPzp0b2RheU1hcmtlclxzW15cbjtdKykvaSwvXig/OlxkXGRcZFxkLVxkXGQtXGRcZFxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMTksMjBdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTYsMTcsMThdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDExLDEyLDE1LDIxLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdigpe3RoaXMueXk9e319cmV0dXJuIGcubGV4ZXI9eSx2LnByb3RvdHlwZT1nLGcuUGFyc2VyPXYsbmV3IHZ9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDVdLHI9WzYsOSwxMSwxNywxOCwxOSwyMV0saT1bMSwxNV0sYT1bMSwxNl0sbz1bMSwxN10scz1bMSwyMV0sYz1bNCw2LDksMTEsMTcsMTgsMTksMjFdLHU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGpvdXJuZXk6NCxkb2N1bWVudDo1LEVPRjo2LGRpcmVjdGl2ZTo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxORVdMSU5FOjExLG9wZW5EaXJlY3RpdmU6MTIsdHlwZURpcmVjdGl2ZToxMyxjbG9zZURpcmVjdGl2ZToxNCwiOiI6MTUsYXJnRGlyZWN0aXZlOjE2LHRpdGxlOjE3LHNlY3Rpb246MTgsdGFza05hbWU6MTksdGFza0RhdGE6MjAsb3Blbl9kaXJlY3RpdmU6MjEsdHlwZV9kaXJlY3RpdmU6MjIsYXJnX2RpcmVjdGl2ZToyMyxjbG9zZV9kaXJlY3RpdmU6MjQsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsOToiU1BBQ0UiLDExOiJORVdMSU5FIiwxNToiOiIsMTc6InRpdGxlIiwxODoic2VjdGlvbiIsMTk6InRhc2tOYW1lIiwyMDoidGFza0RhdGEiLDIxOiJvcGVuX2RpcmVjdGl2ZSIsMjI6InR5cGVfZGlyZWN0aXZlIiwyMzoiYXJnX2RpcmVjdGl2ZSIsMjQ6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbNSwwXSxbNSwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbNyw0XSxbNyw2XSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpyZXR1cm4gYVtzLTFdO2Nhc2UgMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1bXTticmVhaztjYXNlIDExOnIuc2V0VGl0bGUoYVtzXS5zdWJzdHIoNikpLHRoaXMuJD1hW3NdLnN1YnN0cig2KTticmVhaztjYXNlIDEyOnIuYWRkU2VjdGlvbihhW3NdLnN1YnN0cig4KSksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTM6ci5hZGRUYXNrKGFbcy0xXSxhW3NdKSx0aGlzLiQ9InRhc2siO2JyZWFrO2Nhc2UgMTU6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE2OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxODpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJqb3VybmV5Iil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsMjE6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDIxOm59LHsxMzo4LDIyOlsxLDldfSx7MjI6WzIsMTVdfSx7NjpbMSwxMF0sNzoxOCw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OmksMTg6YSwxOTpvLDIxOm59LHsxOlsyLDJdfSx7MTQ6MTksMTU6WzEsMjBdLDI0OnN9LHQoWzE1LDI0XSxbMiwxNl0pLHQocixbMiw4XSx7MTpbMiwxXX0pLHQocixbMiw0XSksezc6MTgsMTA6MjIsMTI6NCwxNzppLDE4OmEsMTk6bywyMTpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDExXSksdChyLFsyLDEyXSksezIwOlsxLDIzXX0sdChyLFsyLDE0XSksezExOlsxLDI0XX0sezE2OjI1LDIzOlsxLDI2XX0sezExOlsyLDE4XX0sdChyLFsyLDVdKSx0KHIsWzIsMTNdKSx0KGMsWzIsOV0pLHsxNDoyNywyNDpzfSx7MjQ6WzIsMTddfSx7MTE6WzEsMjhdfSx0KGMsWzIsMTBdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMTVdLDc6WzIsMl0sMjE6WzIsMThdLDI2OlsyLDE3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGw9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwyMTtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMjI7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE1O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyNDtjYXNlIDQ6cmV0dXJuIDIzO2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMTtjYXNlIDg6Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6cmV0dXJuIDQ7Y2FzZSAxMTpyZXR1cm4gMTc7Y2FzZSAxMjpyZXR1cm4gMTg7Y2FzZSAxMzpyZXR1cm4gMTk7Y2FzZSAxNDpyZXR1cm4gMjA7Y2FzZSAxNTpyZXR1cm4gMTU7Y2FzZSAxNjpyZXR1cm4gNjtjYXNlIDE3OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86am91cm5leVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTddLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBoKCl7dGhpcy55eT17fX1yZXR1cm4gdS5sZXhlcj1sLGgucHJvdG90eXBlPXUsdS5QYXJzZXI9aCxuZXcgaH0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE5KS5yZWFkRmlsZVN5bmMobigyMCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTQpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9bigxNSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKGkuZGVmYXVsdC5wYXJzZSh0KVtlXSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTIpLGk9big4MiksYT1uKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0KTppKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO2lmKCFyKXRyeXtyPW4oMCl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kMyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT1uKDE1KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWkuZGVmYXVsdC5wYXJzZSh0KSxvPWFbZV0scz1yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcFtlXShvK24pO3JldHVybiBvIT09cyYmKGFbZV09cyksaS5kZWZhdWx0LnN0cmluZ2lmeShhKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIxMCksaT1uKDIxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49aSh0LGUpO3JldHVybiByKG4pP246dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpLGk9bigyMTIpLGE9bigyMTMpLG89cj9yLnRvU3RyaW5nVGFnOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6byYmbyBpbiBPYmplY3QodCk/aSh0KTphKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighaSh0KSlyZXR1cm4hMTt2YXIgZT1yKHQpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgUHJveHldIj09ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE2KS5TeW1ib2w7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCl7dmFyIHI9bigxNiksaT1uKDIzMiksYT1lJiYhZS5ub2RlVHlwZSYmZSxvPWEmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQscz1vJiZvLmV4cG9ydHM9PT1hP3IuQnVmZmVyOnZvaWQgMCxjPShzP3MuaXNCdWZmZXI6dm9pZCAwKXx8aTt0LmV4cG9ydHM9Y30pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEyKSxpPW4oMjM2KSxhPW4oMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKHQsITApOmkodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDEpLGk9big3NyksYT1uKDI0Miksbz1uKDEyMSkscz1uKDI0MyksYz1uKDM0KSx1PW4oMTEwKSxsPXUociksaD11KGkpLGY9dShhKSxkPXUobykscD11KHMpLGc9YzsociYmIltvYmplY3QgRGF0YVZpZXddIiE9ZyhuZXcgcihuZXcgQXJyYXlCdWZmZXIoMSkpKXx8aSYmIltvYmplY3QgTWFwXSIhPWcobmV3IGkpfHxhJiYiW29iamVjdCBQcm9taXNlXSIhPWcoYS5yZXNvbHZlKCkpfHxvJiYiW29iamVjdCBTZXRdIiE9ZyhuZXcgbyl8fHMmJiJbb2JqZWN0IFdlYWtNYXBdIiE9ZyhuZXcgcykpJiYoZz1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLG49IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP3Uobik6IiI7aWYocilzd2l0Y2gocil7Y2FzZSBsOnJldHVybiJbb2JqZWN0IERhdGFWaWV3XSI7Y2FzZSBoOnJldHVybiJbb2JqZWN0IE1hcF0iO2Nhc2UgZjpyZXR1cm4iW29iamVjdCBQcm9taXNlXSI7Y2FzZSBkOnJldHVybiJbb2JqZWN0IFNldF0iO2Nhc2UgcDpyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9cmV0dXJuIGV9KSx0LmV4cG9ydHM9Z30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8aSh0KSYmIltvYmplY3QgU3ltYm9sXSI9PXIodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2RlZmF1bHRzOm4oMTU0KSxlYWNoOm4oODcpLGlzRnVuY3Rpb246bigzNyksaXNQbGFpbk9iamVjdDpuKDE1OCkscGljazpuKDE2MSksaGFzOm4oOTMpLHJhbmdlOm4oMTYyKSx1bmlxdWVJZDpuKDE2Myl9fWNhdGNoKHQpe31yfHwocj13aW5kb3cuXyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im5hbWUiOiJtZXJtYWlkIiwidmVyc2lvbiI6IjguOC40IiwiZGVzY3JpcHRpb24iOiJNYXJrZG93bmlzaCBzeW50YXggZm9yIGdlbmVyYXRpbmcgZmxvd2NoYXJ0cywgc2VxdWVuY2UgZGlhZ3JhbXMsIGNsYXNzIGRpYWdyYW1zLCBnYW50dCBjaGFydHMgYW5kIGdpdCBncmFwaHMuIiwibWFpbiI6ImRpc3QvbWVybWFpZC5jb3JlLmpzIiwia2V5d29yZHMiOlsiZGlhZ3JhbSIsIm1hcmtkb3duIiwiZmxvd2NoYXJ0Iiwic2VxdWVuY2UgZGlhZ3JhbSIsImdhbnR0IiwiY2xhc3MgZGlhZ3JhbSIsImdpdCBncmFwaCJdLCJzY3JpcHRzIjp7ImJ1aWxkOmRldmVsb3BtZW50Ijoid2VicGFjayAtLXByb2dyZXNzIC0tY29sb3JzIiwiYnVpbGQ6cHJvZHVjdGlvbiI6Inlhcm4gYnVpbGQ6ZGV2ZWxvcG1lbnQgLXAgLS1jb25maWcgd2VicGFjay5jb25maWcucHJvZC5iYWJlbC5qcyIsImJ1aWxkIjoieWFybiBidWlsZDpkZXZlbG9wbWVudCAmJiB5YXJuIGJ1aWxkOnByb2R1Y3Rpb24iLCJwb3N0YnVpbGQiOiJkb2N1bWVudGF0aW9uIGJ1aWxkIHNyYy9tZXJtYWlkQVBJLmpzIHNyYy9jb25maWcuanMgLS1zaGFsbG93IC1mIG1kIC0tbWFya2Rvd24tdG9jIGZhbHNlID4gZG9jcy9TZXR1cC5tZCIsImJ1aWxkOndhdGNoIjoieWFybiBidWlsZCAtLXdhdGNoIiwibWluaWZ5IjoibWluaWZ5IC4vZGlzdC9tZXJtYWlkLmpzID4gLi9kaXN0L21lcm1haWQubWluLmpzIiwicmVsZWFzZSI6Inlhcm4gYnVpbGQiLCJsaW50IjoiZXNsaW50IHNyYyIsImUyZTpkZXByIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImN5cHJlc3MiOiJwZXJjeSBleGVjIC0tIGN5cHJlc3MgcnVuIiwiZTJlIjoic3RhcnQtc2VydmVyLWFuZC10ZXN0IGRldiBodHRwOi8vbG9jYWxob3N0OjkwMDAvIGN5cHJlc3MiLCJlMmUtdXBkIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC11IC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImRldiI6IndlYnBhY2stZGV2LXNlcnZlciAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5lMmUuanMiLCJ0ZXN0IjoieWFybiBsaW50ICYmIGplc3Qgc3JjLy4qIiwidGVzdDp3YXRjaCI6Implc3QgLS13YXRjaCBzcmMiLCJwcmVwdWJsaXNoT25seSI6Inlhcm4gYnVpbGQgJiYgeWFybiB0ZXN0IiwicHJlcGFyZSI6Inlhcm4gYnVpbGQifSwicmVwb3NpdG9yeSI6eyJ0eXBlIjoiZ2l0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2tuc3YvbWVybWFpZCJ9LCJhdXRob3IiOiJLbnV0IFN2ZWlkcXZpc3QiLCJsaWNlbnNlIjoiTUlUIiwic3RhbmRhcmQiOnsiaWdub3JlIjpbIioqL3BhcnNlci8qLmpzIiwiZGlzdC8qKi8qLmpzIiwiY3lwcmVzcy8qKi8qLmpzIl0sImdsb2JhbHMiOlsicGFnZSJdfSwiZGVwZW5kZW5jaWVzIjp7IkBicmFpbnRyZWUvc2FuaXRpemUtdXJsIjoiXjMuMS4wIiwiZDMiOiJeNS43LjAiLCJkYWdyZSI6Il4wLjguNCIsImRhZ3JlLWQzIjoiXjAuNi40IiwiZW50aXR5LWRlY29kZSI6Il4yLjAuMiIsImdyYXBobGliIjoiXjIuMS43IiwiaGUiOiJeMS4yLjAiLCJraHJvbWEiOiJeMS4xLjAiLCJtaW5pZnkiOiJeNC4xLjEiLCJtb21lbnQtbWluaSI6Il4yLjIyLjEiLCJzdHlsaXMiOiJeMy41LjIifSwiZGV2RGVwZW5kZW5jaWVzIjp7IkBiYWJlbC9jb3JlIjoiXjcuMi4yIiwiQGJhYmVsL3ByZXNldC1lbnYiOiJeNy44LjQiLCJAYmFiZWwvcmVnaXN0ZXIiOiJeNy4wLjAiLCJAcGVyY3kvY3lwcmVzcyI6IioiLCJiYWJlbC1jb3JlIjoiNy4wLjAtYnJpZGdlLjAiLCJiYWJlbC1lc2xpbnQiOiJeMTAuMS4wIiwiYmFiZWwtamVzdCI6Il4yNC45LjAiLCJiYWJlbC1sb2FkZXIiOiJeOC4wLjQiLCJjb3ZlcmFsbHMiOiJeMy4wLjIiLCJjc3MtbG9hZGVyIjoiXjIuMC4xIiwiY3NzLXRvLXN0cmluZy1sb2FkZXIiOiJeMC4xLjMiLCJjeXByZXNzIjoiNC4wLjEiLCJkb2N1bWVudGF0aW9uIjoiXjEyLjAuMSIsImVzbGludCI6Il42LjMuMCIsImVzbGludC1jb25maWctcHJldHRpZXIiOiJeNi4zLjAiLCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyIjoiXjMuMS4wIiwiaHVza3kiOiJeMS4yLjEiLCJpZGVudGl0eS1vYmotcHJveHkiOiJeMy4wLjAiLCJqZXN0IjoiXjI0LjkuMCIsImppc29uIjoiXjAuNC4xOCIsIm1vbWVudCI6Il4yLjIzLjAiLCJub2RlLXNhc3MiOiJeNC4xMi4wIiwicHJldHRpZXIiOiJeMS4xOC4yIiwicHVwcGV0ZWVyIjoiXjEuMTcuMCIsInNhc3MtbG9hZGVyIjoiXjcuMS4wIiwic3RhcnQtc2VydmVyLWFuZC10ZXN0IjoiXjEuMTAuNiIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il4yLjIuMiIsIndlYnBhY2siOiJeNC40MS4yIiwid2VicGFjay1idW5kbGUtYW5hbHl6ZXIiOiJeMy43LjAiLCJ3ZWJwYWNrLWNsaSI6Il4zLjEuMiIsIndlYnBhY2stZGV2LXNlcnZlciI6Il4zLjQuMSIsIndlYnBhY2stbm9kZS1leHRlcm5hbHMiOiJeMS43LjIiLCJ5YXJuLXVwZ3JhZGUtYWxsIjoiXjAuNS4wIn0sImZpbGVzIjpbImRpc3QiXSwieWFybi11cGdyYWRlLWFsbCI6eyJpZ25vcmUiOlsiYmFiZWwtY29yZSJdfSwic2lkZUVmZmVjdHMiOlsiKiovKi5jc3MiLCIqKi8qLnNjc3MiXSwiaHVza3kiOnsiaG9va3MiOnsicHJlLXB1c2giOiJ5YXJuIHRlc3QifX19Jyl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW5ldyhuKDE3NikuZGVmYXVsdCkoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50Iik7ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU4KSxpPW4oNTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz0hbjtufHwobj17fSk7Zm9yKHZhciBzPS0xLGM9ZS5sZW5ndGg7KytzPGM7KXt2YXIgdT1lW3NdLGw9YT9hKG5bdV0sdFt1XSx1LG4sdCk6dm9pZCAwO3ZvaWQgMD09PWwmJihsPXRbdV0pLG8/aShuLHUsbCk6cihuLHUsbCl9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzEpLGk9bigyMSksYT1PYmplY3QucHJvdG90eXBlLG89YS5oYXNPd25Qcm9wZXJ0eSxzPWEucHJvcGVydHlJc0VudW1lcmFibGUsYz1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/cjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmby5jYWxsKHQsImNhbGxlZSIpJiYhcy5jYWxsKHQsImNhbGxlZSIpfTt0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjMzKSxpPW4oNjEpLGE9big4MSksbz1hJiZhLmlzVHlwZWRBcnJheSxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8cih0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiMTAwMDAwIiksaT1uLmFwcGVuZCgieGh0bWw6ZGl2Iik7aS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgYT1lLmxhYmVsO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSJmdW5jdGlvbiI6aS5pbnNlcnQoYSk7YnJlYWs7Y2FzZSJvYmplY3QiOmkuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBhfSkpO2JyZWFrO2RlZmF1bHQ6aS5odG1sKGEpfXIuYXBwbHlTdHlsZShpLGUubGFiZWxTdHlsZSksaS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLGkuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIik7dmFyIG89aS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uYXR0cigid2lkdGgiLG8ud2lkdGgpLmF0dHIoImhlaWdodCIsby5oZWlnaHQpLG59fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9big0NSksYT1uKDE1KSxvPW4oNTIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixzKXtpZih2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1zJiYocz0xKSwibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIG8uZGVmYXVsdCh0LHthOmV9KTt2YXIgYz1pLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIodCksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKGUpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEocyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShjKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT1uKDE1KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQucGFyc2UodCk7Zm9yKHZhciBhIGluIGUpblthXT1yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcFthXShlW2FdKTtyZXR1cm4gaS5kZWZhdWx0LnN0cmluZ2lmeShuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU0KSxpPW4oMjA1KSxhPW4oMjA2KSxvPW4oMjA3KSxzPW4oMjA4KSxjPW4oMjA5KTtmdW5jdGlvbiB1KHQpe3ZhciBlPXRoaXMuX19kYXRhX189bmV3IHIodCk7dGhpcy5zaXplPWUuc2l6ZX11LnByb3RvdHlwZS5jbGVhcj1pLHUucHJvdG90eXBlLmRlbGV0ZT1hLHUucHJvdG90eXBlLmdldD1vLHUucHJvdG90eXBlLmhhcz1zLHUucHJvdG90eXBlLnNldD1jLHQuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMDApLGk9bigyMDEpLGE9bigyMDIpLG89bigyMDMpLHM9bigyMDQpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KWlmKHIodFtuXVswXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShPYmplY3QsImNyZWF0ZSIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuX19kYXRhX187cmV0dXJuIHIoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oMzYpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPXRbZV07YS5jYWxsKHQsZSkmJmkobyxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4peyJfX3Byb3RvX18iPT1lJiZyP3IodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6dFtlXT1ufX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXig/OjB8WzEtOV1cZCopJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoZT1udWxsPT1lPzkwMDcxOTkyNTQ3NDA5OTE6ZSkmJigibnVtYmVyIj09cnx8InN5bWJvbCIhPXImJm4udGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5wcm90b3R5cGV8fG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEzKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODgpLGk9bigyNTQpKHIpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1KSxpPW4oOTIpLGE9bigyNjgpLG89bigxMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQpP3Q6aSh0LGUpP1t0XTphKG8odCkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGgsaT1BcnJheShyKTsrK248cjspaVtuXT1lKHRbbl0sbix0KTtyZXR1cm4gaX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM1KSxpPW4oMTQzKSxhPW4oMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShpKHQsZSxyKSx0KyIiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM2KSxpPW4oMjQpLGE9big2MCksbz1uKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKCFvKG4pKXJldHVybiExO3ZhciBzPXR5cGVvZiBlO3JldHVybiEhKCJudW1iZXIiPT1zP2kobikmJmEoZSxuLmxlbmd0aCk6InN0cmluZyI9PXMmJmUgaW4gbikmJnIobltlXSx0KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9e2xvbmdlc3RQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3IuZm9yRWFjaCh0LnNvdXJjZXMoKSwoZnVuY3Rpb24gbihpKXt2YXIgYT10Lm5vZGUoaSk7aWYoci5oYXMoZSxpKSlyZXR1cm4gYS5yYW5rO2VbaV09ITA7dmFyIG89ci5taW4oci5tYXAodC5vdXRFZGdlcyhpKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS53KS10LmVkZ2UoZSkubWlubGVufSkpKTtyZXR1cm4gbyE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbnVsbCE9b3x8KG89MCksYS5yYW5rPW99KSl9LHNsYWNrOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9kZShlLncpLnJhbmstdC5ub2RlKGUudikucmFuay10LmVkZ2UoZSkubWlubGVufX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9L14oJTIwfFxzKSooamF2YXNjcmlwdHxkYXRhKS9pbSxpPS9bXlx4MjAtXHg3RV0vZ2ltLGE9L14oW146XSspOi9nbSxvPVsiLiIsIi8iXTt0LmV4cG9ydHM9e3Nhbml0aXplVXJsOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJhYm91dDpibGFuayI7dmFyIGUsbixzPXQucmVwbGFjZShpLCIiKS50cmltKCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvLmluZGV4T2YodFswXSk+LTF9KHMpP3M6KG49cy5tYXRjaChhKSk/KGU9blswXSxyLnRlc3QoZSk/ImFib3V0OmJsYW5rIjpzKToiYWJvdXQ6YmxhbmsifX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzIsM10sbj1bMSw3XSxyPVs3LDEyLDE1LDE3LDE5LDIwLDIxXSxpPVs3LDExLDEyLDE1LDE3LDE5LDIwLDIxXSxhPVsyLDIwXSxvPVsxLDMyXSxzPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxHRzo0LCI6Ijo1LGRvY3VtZW50OjYsRU9GOjcsRElSOjgsb3B0aW9uczo5LGJvZHk6MTAsT1BUOjExLE5MOjEyLGxpbmU6MTMsc3RhdGVtZW50OjE0LENPTU1JVDoxNSxjb21taXRfYXJnOjE2LEJSQU5DSDoxNyxJRDoxOCxDSEVDS09VVDoxOSxNRVJHRToyMCxSRVNFVDoyMSxyZXNldF9hcmc6MjIsU1RSOjIzLEhFQUQ6MjQscmVzZXRfcGFyZW50czoyNSxDQVJFVDoyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiR0ciLDU6IjoiLDc6IkVPRiIsODoiRElSIiwxMToiT1BUIiwxMjoiTkwiLDE1OiJDT01NSVQiLDE3OiJCUkFOQ0giLDE4OiJJRCIsMTk6IkNIRUNLT1VUIiwyMDoiTUVSR0UiLDIxOiJSRVNFVCIsMjM6IlNUUiIsMjQ6IkhFQUQiLDI2OiJDQVJFVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbOSwyXSxbOSwxXSxbMTAsMF0sWzEwLDJdLFsxMywyXSxbMTMsMV0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTYsMF0sWzE2LDFdLFsyMiwyXSxbMjIsMl0sWzI1LDBdLFsyNSwyXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIGFbcy0xXTtjYXNlIDI6cmV0dXJuIHIuc2V0RGlyZWN0aW9uKGFbcy0zXSksYVtzLTFdO2Nhc2UgNDpyLnNldE9wdGlvbnMoYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU6YVtzLTFdKz1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDExOnIuY29tbWl0KGFbc10pO2JyZWFrO2Nhc2UgMTI6ci5icmFuY2goYVtzXSk7YnJlYWs7Y2FzZSAxMzpyLmNoZWNrb3V0KGFbc10pO2JyZWFrO2Nhc2UgMTQ6ci5tZXJnZShhW3NdKTticmVhaztjYXNlIDE1OnIucmVzZXQoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9IiI7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE4OnRoaXMuJD1hW3MtMV0rIjoiK2Fbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9YVtzLTFdKyI6IityLmNvdW50LHIuY291bnQ9MDticmVhaztjYXNlIDIwOnIuY291bnQ9MDticmVhaztjYXNlIDIxOnIuY291bnQrPTF9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdLDg6WzEsNF19LHs2OjUsNzplLDk6NiwxMjpufSx7NTpbMSw4XX0sezc6WzEsOV19LHQocixbMiw3XSx7MTA6MTAsMTE6WzEsMTFdfSksdChpLFsyLDZdKSx7NjoxMiw3OmUsOTo2LDEyOm59LHsxOlsyLDFdfSx7NzpbMiw0XSwxMjpbMSwxNV0sMTM6MTMsMTQ6MTQsMTU6WzEsMTZdLDE3OlsxLDE3XSwxOTpbMSwxOF0sMjA6WzEsMTldLDIxOlsxLDIwXX0sdChpLFsyLDVdKSx7NzpbMSwyMV19LHQocixbMiw4XSksezEyOlsxLDIyXX0sdChyLFsyLDEwXSksezEyOlsyLDE2XSwxNjoyMywyMzpbMSwyNF19LHsxODpbMSwyNV19LHsxODpbMSwyNl19LHsxODpbMSwyN119LHsxODpbMSwzMF0sMjI6MjgsMjQ6WzEsMjldfSx7MTpbMiwyXX0sdChyLFsyLDldKSx7MTI6WzIsMTFdfSx7MTI6WzIsMTddfSx7MTI6WzIsMTJdfSx7MTI6WzIsMTNdfSx7MTI6WzIsMTRdfSx7MTI6WzIsMTVdfSx7MTI6YSwyNTozMSwyNjpvfSx7MTI6YSwyNTozMywyNjpvfSx7MTI6WzIsMThdfSx7MTI6YSwyNTozNCwyNjpvfSx7MTI6WzIsMTldfSx7MTI6WzIsMjFdfV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMV0sMjE6WzIsMl0sMjM6WzIsMTFdLDI0OlsyLDE3XSwyNTpbMiwxMl0sMjY6WzIsMTNdLDI3OlsyLDE0XSwyODpbMiwxNV0sMzE6WzIsMThdLDMzOlsyLDE5XSwzNDpbMiwyMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxjPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIDEyO2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDU6cmV0dXJuIDE1O2Nhc2UgNjpyZXR1cm4gMTc7Y2FzZSA3OnJldHVybiAyMDtjYXNlIDg6cmV0dXJuIDIxO2Nhc2UgOTpyZXR1cm4gMTk7Y2FzZSAxMDpjYXNlIDExOnJldHVybiA4O2Nhc2UgMTI6cmV0dXJuIDU7Y2FzZSAxMzpyZXR1cm4gMjY7Y2FzZSAxNDp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAxNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gMTE7Y2FzZSAxNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE5OnJldHVybiAyMztjYXNlIDIwOnJldHVybiAxODtjYXNlIDIxOnJldHVybiA3fX0scnVsZXM6Wy9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmdpdEdyYXBoXGIpL2ksL14oPzpjb21taXRcYikvaSwvXig/OmJyYW5jaFxiKS9pLC9eKD86bWVyZ2VcYikvaSwvXig/OnJlc2V0XGIpL2ksL14oPzpjaGVja291dFxiKS9pLC9eKD86TFJcYikvaSwvXig/OkJUXGIpL2ksL14oPzo6KS9pLC9eKD86XF4pL2ksL14oPzpvcHRpb25zXHI/XG4pL2ksL14oPzplbmRccj9cbikvaSwvXig/OlteXG5dK1xyP1xuKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbYS16QS1aXVstX1wuYS16QS1aMC05XSpbLV9hLXpBLVowLTldKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3B0aW9uczp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzE4LDE5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIwLDIxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdSgpe3RoaXMueXk9e319cmV0dXJuIHMubGV4ZXI9Yyx1LnByb3RvdHlwZT1zLHMuUGFyc2VyPXUsbmV3IHV9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bNiw5LDEwXSxuPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe2EubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIHI7Y2FzZSA0OmJyZWFrO2Nhc2UgNjpyLnNldEluZm8oITApfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx0KGUsWzIsMl0sezU6M30pLHs2OlsxLDRdLDc6NSw4OjYsOTpbMSw3XSwxMDpbMSw4XX0sezE6WzIsMV19LHQoZSxbMiwzXSksdChlLFsyLDRdKSx0KGUsWzIsNV0pLHQoZSxbMiw2XSldLGRlZmF1bHRBY3Rpb25zOns0OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0scj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaSgpe3RoaXMueXk9e319cmV0dXJuIG4ubGV4ZXI9cixpLnByb3RvdHlwZT1uLG4uUGFyc2VyPWksbmV3IGl9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw0XSxuPVsxLDVdLHI9WzEsNl0saT1bMSw3XSxhPVsxLDldLG89WzEsMTAsMTIsMTksMjAsMjEsMjJdLHM9WzEsNiwxMCwxMiwxOSwyMCwyMSwyMl0sYz1bMTksMjAsMjFdLHU9WzEsMjJdLGw9WzYsMTksMjAsMjEsMjJdLGg9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LGRpcmVjdGl2ZTo1LFBJRTo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LHR4dDoxMCx2YWx1ZToxMSx0aXRsZToxMix0aXRsZV92YWx1ZToxMyxvcGVuRGlyZWN0aXZlOjE0LHR5cGVEaXJlY3RpdmU6MTUsY2xvc2VEaXJlY3RpdmU6MTYsIjoiOjE3LGFyZ0RpcmVjdGl2ZToxOCxORVdMSU5FOjE5LCI7IjoyMCxFT0Y6MjEsb3Blbl9kaXJlY3RpdmU6MjIsdHlwZV9kaXJlY3RpdmU6MjMsYXJnX2RpcmVjdGl2ZToyNCxjbG9zZV9kaXJlY3RpdmU6MjUsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlBJRSIsMTA6InR4dCIsMTE6InZhbHVlIiwxMjoidGl0bGUiLDEzOiJ0aXRsZV92YWx1ZSIsMTc6IjoiLDE5OiJORVdMSU5FIiwyMDoiOyIsMjE6IkVPRiIsMjI6Im9wZW5fZGlyZWN0aXZlIiwyMzoidHlwZV9kaXJlY3RpdmUiLDI0OiJhcmdfZGlyZWN0aXZlIiwyNToiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFs3LDBdLFs3LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDFdLFs1LDNdLFs1LDVdLFs0LDFdLFs0LDFdLFs0LDFdLFsxNCwxXSxbMTUsMV0sWzE4LDFdLFsxNiwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDg6ci5hZGRTZWN0aW9uKGFbcy0xXSxyLmNsZWFudXBWYWx1ZShhW3NdKSk7YnJlYWs7Y2FzZSA5OnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldFRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTg6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDE5OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInBpZSIpfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OmUsMTQ6OCwxOTpuLDIwOnIsMjE6aSwyMjphfSx7MTpbM119LHszOjEwLDQ6Miw1OjMsNjplLDE0OjgsMTk6biwyMDpyLDIxOmksMjI6YX0sezM6MTEsNDoyLDU6Myw2OmUsMTQ6OCwxOTpuLDIwOnIsMjE6aSwyMjphfSx0KG8sWzIsNF0sezc6MTJ9KSx0KHMsWzIsMTNdKSx0KHMsWzIsMTRdKSx0KHMsWzIsMTVdKSx7MTU6MTMsMjM6WzEsMTRdfSx7MjM6WzIsMTZdfSx7MTpbMiwxXX0sezE6WzIsMl19LHQoYyxbMiw3XSx7MTQ6OCw4OjE1LDk6MTYsNToxOSwxOlsyLDNdLDEwOlsxLDE3XSwxMjpbMSwxOF0sMjI6YX0pLHsxNjoyMCwxNzpbMSwyMV0sMjU6dX0sdChbMTcsMjVdLFsyLDE3XSksdChvLFsyLDVdKSx7NDoyMywxOTpuLDIwOnIsMjE6aX0sezExOlsxLDI0XX0sezEzOlsxLDI1XX0sdChjLFsyLDEwXSksdChsLFsyLDExXSksezE4OjI2LDI0OlsxLDI3XX0sdChsLFsyLDE5XSksdChvLFsyLDZdKSx0KGMsWzIsOF0pLHQoYyxbMiw5XSksezE2OjI4LDI1OnV9LHsyNTpbMiwxOF19LHQobCxbMiwxMl0pXSxkZWZhdWx0QWN0aW9uczp7OTpbMiwxNl0sMTA6WzIsMV0sMTE6WzIsMl0sMjc6WzIsMThdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sZj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyMztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTc7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgNDpyZXR1cm4gMjQ7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDE5O2Nhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMjtjYXNlIDExOnJldHVybiB0aGlzLnBvcFN0YXRlKCksInRpdGxlX3ZhbHVlIjtjYXNlIDEyOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuInR4dCI7Y2FzZSAxNTpyZXR1cm4gNjtjYXNlIDE2OnJldHVybiJ2YWx1ZSI7Y2FzZSAxNzpyZXR1cm4gMjF9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OnBpZVxiKS9pLC9eKD86Oltcc10qW1xkXSsoPzpcLltcZF0rKT8pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOlsxMV0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTIsMTUsMTYsMTddLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBkKCl7dGhpcy55eT17fX1yZXR1cm4gaC5sZXhlcj1mLGQucHJvdG90eXBlPWgsaC5QYXJzZXI9ZCxuZXcgZH0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE5KS5yZWFkRmlsZVN5bmMobigyMCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTQpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDIzLDM3XSxpPVsxLDE3XSxhPVsxLDIwXSxvPVsxLDI1XSxzPVsxLDI2XSxjPVsxLDI3XSx1PVsxLDI4XSxsPVsxLDM3XSxoPVsyMywzNCwzNV0sZj1bNCw2LDksMTEsMjMsMzddLGQ9WzMwLDMxLDMyLDMzXSxwPVsyMiwyN10sZz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsRVJfRElBR1JBTTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsZW50aXR5TmFtZToxNyxyZWxTcGVjOjE4LHJvbGU6MTksQkxPQ0tfU1RBUlQ6MjAsYXR0cmlidXRlczoyMSxCTE9DS19TVE9QOjIyLEFMUEhBTlVNOjIzLGF0dHJpYnV0ZToyNCxhdHRyaWJ1dGVUeXBlOjI1LGF0dHJpYnV0ZU5hbWU6MjYsQVRUUklCVVRFX1dPUkQ6MjcsY2FyZGluYWxpdHk6MjgscmVsVHlwZToyOSxaRVJPX09SX09ORTozMCxaRVJPX09SX01PUkU6MzEsT05FX09SX01PUkU6MzIsT05MWV9PTkU6MzMsTk9OX0lERU5USUZZSU5HOjM0LElERU5USUZZSU5HOjM1LFdPUkQ6MzYsb3Blbl9kaXJlY3RpdmU6MzcsdHlwZV9kaXJlY3RpdmU6MzgsYXJnX2RpcmVjdGl2ZTozOSxjbG9zZV9kaXJlY3RpdmU6NDAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsOToiU1BBQ0UiLDExOiJORVdMSU5FIiwxNToiOiIsMjA6IkJMT0NLX1NUQVJUIiwyMjoiQkxPQ0tfU1RPUCIsMjM6IkFMUEhBTlVNIiwyNzoiQVRUUklCVVRFX1dPUkQiLDMwOiJaRVJPX09SX09ORSIsMzE6IlpFUk9fT1JfTU9SRSIsMzI6Ik9ORV9PUl9NT1JFIiwzMzoiT05MWV9PTkUiLDM0OiJOT05fSURFTlRJRllJTkciLDM1OiJJREVOVElGWUlORyIsMzY6IldPUkQiLDM3OiJvcGVuX2RpcmVjdGl2ZSIsMzg6InR5cGVfZGlyZWN0aXZlIiwzOToiYXJnX2RpcmVjdGl2ZSIsNDA6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbNSwwXSxbNSwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbNyw0XSxbNyw2XSxbMTAsMV0sWzEwLDVdLFsxMCw0XSxbMTAsM10sWzEwLDFdLFsxNywxXSxbMjEsMV0sWzIxLDJdLFsyNCwyXSxbMjUsMV0sWzI2LDFdLFsxOCwzXSxbMjgsMV0sWzI4LDFdLFsyOCwxXSxbMjgsMV0sWzI5LDFdLFsyOSwxXSxbMTksMV0sWzE5LDFdLFsxMiwxXSxbMTMsMV0sWzE2LDFdLFsxNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6YnJlYWs7Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTI6ci5hZGRFbnRpdHkoYVtzLTRdKSxyLmFkZEVudGl0eShhW3MtMl0pLHIuYWRkUmVsYXRpb25zaGlwKGFbcy00XSxhW3NdLGFbcy0yXSxhW3MtM10pO2JyZWFrO2Nhc2UgMTM6ci5hZGRFbnRpdHkoYVtzLTNdKSxyLmFkZEF0dHJpYnV0ZXMoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSAxNDpyLmFkZEVudGl0eShhW3MtMl0pO2JyZWFrO2Nhc2UgMTU6ci5hZGRFbnRpdHkoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE3OnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAxODphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMV0sYXR0cmlidXRlTmFtZTphW3NdfTticmVhaztjYXNlIDIwOmNhc2UgMjE6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e2NhcmRBOmFbc10scmVsVHlwZTphW3MtMV0sY2FyZEI6YVtzLTJdfTticmVhaztjYXNlIDIzOnRoaXMuJD1yLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkxZX09ORTticmVhaztjYXNlIDI3OnRoaXMuJD1yLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDI4OnRoaXMuJD1yLklkZW50aWZpY2F0aW9uLklERU5USUZZSU5HO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPWFbc10ucmVwbGFjZSgvIi9nLCIiKTticmVhaztjYXNlIDMwOnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDMyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDMzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJlciIpfX0sdGFibGU6W3szOjEsNDplLDc6MywxMjo0LDM3Om59LHsxOlszXX0sdChyLFsyLDNdLHs1OjZ9KSx7Mzo3LDQ6ZSw3OjMsMTI6NCwzNzpufSx7MTM6OCwzODpbMSw5XX0sezM4OlsyLDMxXX0sezY6WzEsMTBdLDc6MTUsODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6NCwxNzoxNiwyMzppLDM3Om59LHsxOlsyLDJdfSx7MTQ6MTgsMTU6WzEsMTldLDQwOmF9LHQoWzE1LDQwXSxbMiwzMl0pLHQocixbMiw4XSx7MTpbMiwxXX0pLHQocixbMiw0XSksezc6MTUsMTA6MjEsMTI6NCwxNzoxNiwyMzppLDM3Om59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTVdLHsxODoyMiwyODoyNCwyMDpbMSwyM10sMzA6bywzMTpzLDMyOmMsMzM6dX0pLHQoWzYsOSwxMSwxNSwyMCwyMywzMCwzMSwzMiwzMywzN10sWzIsMTZdKSx7MTE6WzEsMjldfSx7MTY6MzAsMzk6WzEsMzFdfSx7MTE6WzIsMzRdfSx0KHIsWzIsNV0pLHsxNzozMiwyMzppfSx7MjE6MzMsMjI6WzEsMzRdLDI0OjM1LDI1OjM2LDI3Omx9LHsyOTozOCwzNDpbMSwzOV0sMzU6WzEsNDBdfSx0KGgsWzIsMjNdKSx0KGgsWzIsMjRdKSx0KGgsWzIsMjVdKSx0KGgsWzIsMjZdKSx0KGYsWzIsOV0pLHsxNDo0MSw0MDphfSx7NDA6WzIsMzNdfSx7MTU6WzEsNDJdfSx7MjI6WzEsNDNdfSx0KHIsWzIsMTRdKSx7MjE6NDQsMjI6WzIsMTddLDI0OjM1LDI1OjM2LDI3Omx9LHsyNjo0NSwyNzpbMSw0Nl19LHsyNzpbMiwyMF19LHsyODo0NywzMDpvLDMxOnMsMzI6YywzMzp1fSx0KGQsWzIsMjddKSx0KGQsWzIsMjhdKSx7MTE6WzEsNDhdfSx7MTk6NDksMjM6WzEsNTFdLDM2OlsxLDUwXX0sdChyLFsyLDEzXSksezIyOlsyLDE4XX0sdChwLFsyLDE5XSksdChwLFsyLDIxXSksezIzOlsyLDIyXX0sdChmLFsyLDEwXSksdChyLFsyLDEyXSksdChyLFsyLDI5XSksdChyLFsyLDMwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDMxXSw3OlsyLDJdLDIwOlsyLDM0XSwzMTpbMiwzM10sMzc6WzIsMjBdLDQ0OlsyLDE4XSw0NzpbMiwyMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx5PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMzc7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDM4O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDA7Y2FzZSA0OnJldHVybiAzOTtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMTE7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gOTtjYXNlIDEwOnJldHVybiAzNjtjYXNlIDExOnJldHVybiA0O2Nhc2UgMTI6cmV0dXJuIHRoaXMuYmVnaW4oImJsb2NrIiksMjA7Y2FzZSAxMzpicmVhaztjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyMjtjYXNlIDE3OnJldHVybiBlLnl5dGV4dFswXTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnJldHVybiAzMjtjYXNlIDIxOnJldHVybiAzMztjYXNlIDIyOnJldHVybiAzMDtjYXNlIDIzOnJldHVybiAzMTtjYXNlIDI0OnJldHVybiAzMjtjYXNlIDI1OnJldHVybiAzNDtjYXNlIDI2OnJldHVybiAzNTtjYXNlIDI3OmNhc2UgMjg6cmV0dXJuIDM0O2Nhc2UgMjk6cmV0dXJuIDIzO2Nhc2UgMzA6cmV0dXJuIGUueXl0ZXh0WzBdO2Nhc2UgMzE6cmV0dXJuIDZ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OlxzKykvaSwvXig/OltBLVphLXpdW0EtWmEtejAtOVwtX10qKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpcfG9cYikvaSwvXig/Olx9b1xiKS9pLC9eKD86XH1cfCkvaSwvXig/Olx8XHwpL2ksL14oPzpvXHwpL2ksL14oPzpvXHspL2ksL14oPzpcfFx7KS9pLC9eKD86XC5cLikvaSwvXig/Oi0tKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzouKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sYmxvY2s6e3J1bGVzOlsxMywxNCwxNSwxNiwxN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzFdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiB2KCl7dGhpcy55eT17fX1yZXR1cm4gZy5sZXhlcj15LHYucHJvdG90eXBlPWcsZy5QYXJzZXI9dixuZXcgdn0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE5KS5yZWFkRmlsZVN5bmMobigyMCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTQpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXt0W3QuQUxMPTBdPSJBTEwiLHRbdC5SR0I9MV09IlJHQiIsdFt0LkhTTD0yXT0iSFNMIn0ocnx8KHI9e30pKSxlLlRZUEU9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEwKTt0LmV4cG9ydHM9aTtmdW5jdGlvbiBpKHQpe3RoaXMuX2lzRGlyZWN0ZWQ9IXIuaGFzKHQsImRpcmVjdGVkIil8fHQuZGlyZWN0ZWQsdGhpcy5faXNNdWx0aWdyYXBoPSEhci5oYXModCwibXVsdGlncmFwaCIpJiZ0Lm11bHRpZ3JhcGgsdGhpcy5faXNDb21wb3VuZD0hIXIuaGFzKHQsImNvbXBvdW5kIikmJnQuY29tcG91bmQsdGhpcy5fbGFiZWw9dm9pZCAwLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1yLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXIuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdPXt9KSx0aGlzLl9pbj17fSx0aGlzLl9wcmVkcz17fSx0aGlzLl9vdXQ9e30sdGhpcy5fc3Vjcz17fSx0aGlzLl9lZGdlT2Jqcz17fSx0aGlzLl9lZGdlTGFiZWxzPXt9fWZ1bmN0aW9uIGEodCxlKXt0W2VdP3RbZV0rKzp0W2VdPTF9ZnVuY3Rpb24gbyh0LGUpey0tdFtlXXx8ZGVsZXRlIHRbZV19ZnVuY3Rpb24gcyh0LGUsbixpKXt2YXIgYT0iIitlLG89IiIrbjtpZighdCYmYT5vKXt2YXIgcz1hO2E9byxvPXN9cmV0dXJuIGErIgEiK28rIgEiKyhyLmlzVW5kZWZpbmVkKGkpPyJcMCI6aSl9ZnVuY3Rpb24gYyh0LGUsbixyKXt2YXIgaT0iIitlLGE9IiIrbjtpZighdCYmaT5hKXt2YXIgbz1pO2k9YSxhPW99dmFyIHM9e3Y6aSx3OmF9O3JldHVybiByJiYocy5uYW1lPXIpLHN9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBzKHQsZS52LGUudyxlLm5hbWUpfWkucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxpLnByb3RvdHlwZS5fZWRnZUNvdW50PTAsaS5wcm90b3R5cGUuaXNEaXJlY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfSxpLnByb3RvdHlwZS5pc011bHRpZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNdWx0aWdyYXBofSxpLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9LGkucHJvdG90eXBlLnNldEdyYXBoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYWJlbD10LHRoaXN9LGkucHJvdG90eXBlLmdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhYmVsfSxpLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiByLmlzRnVuY3Rpb24odCl8fCh0PXIuY29uc3RhbnQodCkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj10LHRoaXN9LGkucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9LGkucHJvdG90eXBlLm5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIua2V5cyh0aGlzLl9ub2Rlcyl9LGkucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiByLmZpbHRlcih0aGlzLm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiByLmlzRW1wdHkodC5faW5bZV0pfSkpfSxpLnByb3RvdHlwZS5zaW5rcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHIuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNFbXB0eSh0Ll9vdXRbZV0pfSkpfSxpLnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIHIuZWFjaCh0LChmdW5jdGlvbih0KXtuLmxlbmd0aD4xP2kuc2V0Tm9kZSh0LGUpOmkuc2V0Tm9kZSh0KX0pKSx0aGlzfSxpLnByb3RvdHlwZS5zZXROb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuaGFzKHRoaXMuX25vZGVzLHQpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1t0XT1lKSx0aGlzKToodGhpcy5fbm9kZXNbdF09YXJndW1lbnRzLmxlbmd0aD4xP2U6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHQpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbdF09IlwwIix0aGlzLl9jaGlsZHJlblt0XT17fSx0aGlzLl9jaGlsZHJlblsiXDAiXVt0XT0hMCksdGhpcy5faW5bdF09e30sdGhpcy5fcHJlZHNbdF09e30sdGhpcy5fb3V0W3RdPXt9LHRoaXMuX3N1Y3NbdF09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9LGkucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25vZGVzW3RdfSxpLnByb3RvdHlwZS5oYXNOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0aGlzLl9ub2Rlcyx0KX0saS5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHIuaGFzKHRoaXMuX25vZGVzLHQpKXt2YXIgbj1mdW5jdGlvbih0KXtlLnJlbW92ZUVkZ2UoZS5fZWRnZU9ianNbdF0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdF0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbdF0sci5lYWNoKHRoaXMuY2hpbGRyZW4odCksKGZ1bmN0aW9uKHQpe2Uuc2V0UGFyZW50KHQpfSkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlblt0XSksci5lYWNoKHIua2V5cyh0aGlzLl9pblt0XSksbiksZGVsZXRlIHRoaXMuX2luW3RdLGRlbGV0ZSB0aGlzLl9wcmVkc1t0XSxyLmVhY2goci5rZXlzKHRoaXMuX291dFt0XSksbiksZGVsZXRlIHRoaXMuX291dFt0XSxkZWxldGUgdGhpcy5fc3Vjc1t0XSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc30saS5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKHIuaXNVbmRlZmluZWQoZSkpZT0iXDAiO2Vsc2V7Zm9yKHZhciBuPWUrPSIiOyFyLmlzVW5kZWZpbmVkKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PXQpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrZSsiIGFzIHBhcmVudCBvZiAiK3QrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShlKX1yZXR1cm4gdGhpcy5zZXROb2RlKHQpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLHRoaXMuX3BhcmVudFt0XT1lLHRoaXMuX2NoaWxkcmVuW2VdW3RdPSEwLHRoaXN9LGkucHJvdG90eXBlLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdD1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W3RdXVt0XX0saS5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX3BhcmVudFt0XTtpZigiXDAiIT09ZSlyZXR1cm4gZX19LGkucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHIuaXNVbmRlZmluZWQodCkmJih0PSJcMCIpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX2NoaWxkcmVuW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX1lbHNle2lmKCJcMCI9PT10KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKHQpKXJldHVybltdfX0saS5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByZWRzW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX0saS5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdWNzW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX0saS5wcm90b3R5cGUubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJlZGVjZXNzb3JzKHQpO2lmKGUpcmV0dXJuIHIudW5pb24oZSx0aGlzLnN1Y2Nlc3NvcnModCkpfSxpLnByb3RvdHlwZS5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT0odGhpcy5pc0RpcmVjdGVkKCk/dGhpcy5zdWNjZXNzb3JzKHQpOnRoaXMubmVpZ2hib3JzKHQpKS5sZW5ndGh9LGkucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTtlLnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIG49dGhpcztyLmVhY2godGhpcy5fbm9kZXMsKGZ1bmN0aW9uKG4scil7dChyKSYmZS5zZXROb2RlKHIsbil9KSksci5lYWNoKHRoaXMuX2VkZ2VPYmpzLChmdW5jdGlvbih0KXtlLmhhc05vZGUodC52KSYmZS5oYXNOb2RlKHQudykmJmUuc2V0RWRnZSh0LG4uZWRnZSh0KSl9KSk7dmFyIGk9e307cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJnIuZWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2Uuc2V0UGFyZW50KHQsZnVuY3Rpb24gdChyKXt2YXIgYT1uLnBhcmVudChyKTtyZXR1cm4gdm9pZCAwPT09YXx8ZS5oYXNOb2RlKGEpPyhpW3JdPWEsYSk6YSBpbiBpP2lbYV06dChhKX0odCkpfSkpLGV9LGkucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30saS5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH0saS5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxpLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWFyZ3VtZW50cztyZXR1cm4gci5yZWR1Y2UodCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UodCxyLGUpOm4uc2V0RWRnZSh0LHIpLHJ9KSksdGhpc30saS5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLG89ITEsdT1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiB1JiZudWxsIT09dSYmInYiaW4gdT8odD11LnYsZT11Lncsbj11Lm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxvPSEwKSk6KHQ9dSxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxvPSEwKSksdD0iIit0LGU9IiIrZSxyLmlzVW5kZWZpbmVkKG4pfHwobj0iIituKTt2YXIgbD1zKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO2lmKHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbCkpcmV0dXJuIG8mJih0aGlzLl9lZGdlTGFiZWxzW2xdPWkpLHRoaXM7aWYoIXIuaXNVbmRlZmluZWQobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHQpLHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9lZGdlTGFiZWxzW2xdPW8/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odCxlLG4pO3ZhciBoPWModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHQ9aC52LGU9aC53LE9iamVjdC5mcmVlemUoaCksdGhpcy5fZWRnZU9ianNbbF09aCxhKHRoaXMuX3ByZWRzW2VdLHQpLGEodGhpcy5fc3Vjc1t0XSxlKSx0aGlzLl9pbltlXVtsXT1oLHRoaXMuX291dFt0XVtsXT1oLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9LGkucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbcl19LGkucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsaSl9LGkucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbiksaT10aGlzLl9lZGdlT2Jqc1tyXTtyZXR1cm4gaSYmKHQ9aS52LGU9aS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3JdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tyXSxvKHRoaXMuX3ByZWRzW2VdLHQpLG8odGhpcy5fc3Vjc1t0XSxlKSxkZWxldGUgdGhpcy5faW5bZV1bcl0sZGVsZXRlIHRoaXMuX291dFt0XVtyXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc30saS5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2luW3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY9PT1lfSkpOml9fSxpLnByb3RvdHlwZS5vdXRFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX291dFt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC53PT09ZX0pKTppfX0saS5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5pbkVkZ2VzKHQsZSk7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyh0LGUpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE2KSwiTWFwIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIxNyksaT1uKDIyNCksYT1uKDIyNiksbz1uKDIyNykscz1uKDIyOCk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248ciYmITEhPT1lKHRbbl0sbix0KTspO3JldHVybiB0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PTkwMDcxOTkyNTQ3NDA5OTF9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3ZhciByPW4oMTA5KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWkmJnIucHJvY2VzcyxzPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWEmJmEucmVxdWlyZSYmYS5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fG8mJm8uYmluZGluZyYmby5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTt0LmV4cG9ydHM9c30pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjIpLGk9bigyMzQpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpcmV0dXJuIGkodCk7dmFyIGU9W107Zm9yKHZhciBuIGluIE9iamVjdCh0KSlhLmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE2KSxpPW4oMTE3KSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHM9bz9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCkscihvKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKHQsZSl9KSkpfTppO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLGk9dC5sZW5ndGg7KytuPHI7KXRbaStuXT1lW25dO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHIoZSkuc2V0KG5ldyByKHQpKSxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKDEyNil9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5KSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKHQsZSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1MykoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT10fSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NSksaT1uKDQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxhPShlPXIoZSx0KSkubGVuZ3RoO251bGwhPXQmJm48YTspdD10W2koZVtuKytdKV07cmV0dXJuIG4mJm49PWE/dDp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1KSxpPW4oNDIpLGE9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sbz0vXlx3KiQvO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIodCkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9dCYmIWkodCkpfHwoby50ZXN0KHQpfHwhYS50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzUpLGk9bigxMzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZpKHQsZSxyKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg0KSxpPW4oMjg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3ZhciBjPS0xLHU9ZS5sZW5ndGg7Zm9yKGF8fChhPWkpLHN8fChzPVtdKTsrK2M8dTspe3ZhciBsPWVbY107bj4wJiZhKGwpP24+MT90KGwsbi0xLGEsbyxzKTpyKHMsbCk6b3x8KHNbcy5sZW5ndGhdPWwpfXJldHVybiBzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXt2YXIgbz10W2ldLHM9ZShvKTtpZihudWxsIT1zJiYodm9pZCAwPT09Yz9zPT1zJiYhcihzKTpuKHMsYykpKXZhciBjPXMsdT1vfXJldHVybiB1fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC54LGE9dC55LG89aS1yLngscz1hLXIueSxjPU1hdGguc3FydChlKmUqcypzK24qbipvKm8pLHU9TWF0aC5hYnMoZSpuKm8vYyk7ci54PGkmJih1PS11KTt2YXIgbD1NYXRoLmFicyhlKm4qcy9jKTtyLnk8YSYmKGw9LWwpO3JldHVybnt4OmkrdSx5OmErbH19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzIpLGk9big1MCksYT1uKDM3Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz1lLmxhYmVsLHM9dC5hcHBlbmQoImciKTsic3ZnIj09PWUubGFiZWxUeXBlP2EocyxlKToic3RyaW5nIiE9dHlwZW9mIG98fCJodG1sIj09PWUubGFiZWxUeXBlP2kocyxlKTpyKHMsZSk7dmFyIGMsdT1zLm5vZGUoKS5nZXRCQm94KCk7c3dpdGNoKG4pe2Nhc2UidG9wIjpjPS1lLmhlaWdodC8yO2JyZWFrO2Nhc2UiYm90dG9tIjpjPWUuaGVpZ2h0LzItdS5oZWlnaHQ7YnJlYWs7ZGVmYXVsdDpjPS11LmhlaWdodC8yfXJldHVybiBzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwiK2MrIikiKSxzfX0sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT1uKDQ1KSxhPW4oMTc4KSxvPXtyZTovXiMoKD86W2EtZjAtOV17Mn0pezIsNH18W2EtZjAtOV17M30pJC9pLHBhcnNlOmZ1bmN0aW9uKHQpe2lmKDM1PT09dC5jaGFyQ29kZUF0KDApKXt2YXIgZT10Lm1hdGNoKG8ucmUpO2lmKGUpe3ZhciBuPWVbMV0scj1wYXJzZUludChuLDE2KSxhPW4ubGVuZ3RoLHM9YSU0PT0wLGM9YT40LHU9Yz8xOjE3LGw9Yz84OjQsaD1zPzA6LTEsZj1jPzI1NToxNTtyZXR1cm4gaS5kZWZhdWx0LnNldCh7cjoocj4+bCooaCszKSZmKSp1LGc6KHI+PmwqKGgrMikmZikqdSxiOihyPj5sKihoKzEpJmYpKnUsYTpzPyhyJmYpKnUvMjU1OjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4gdC5hPDE/IiMiK2EuREVDMkhFWFtNYXRoLnJvdW5kKHQucildK2EuREVDMkhFWFtNYXRoLnJvdW5kKHQuZyldK2EuREVDMkhFWFtNYXRoLnJvdW5kKHQuYildK3IuZGVmYXVsdC51bml0LmZyYWMyaGV4KHQuYSk6IiMiK2EuREVDMkhFWFtNYXRoLnJvdW5kKHQucildK2EuREVDMkhFWFtNYXRoLnJvdW5kKHQuZyldK2EuREVDMkhFWFtNYXRoLnJvdW5kKHQuYildfX07ZS5kZWZhdWx0PW99LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT1uKDQ1KSxhPW4oMTUpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixvKXt2b2lkIDA9PT1vJiYobz0xKTt2YXIgcz1pLmRlZmF1bHQuc2V0KHtoOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgodCksczpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5zKGUpLGw6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAubChuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEobyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShzKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImEiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT1uKDE1KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9aS5kZWZhdWx0LnBhcnNlKHQpLG49ZS5yLGE9ZS5nLG89ZS5iLHM9LjIxMjYqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobikrLjcxNTIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIoYSkrLjA3MjIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobyk7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDIpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQpPj0uNX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImEiLC1lKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTUpLGk9big1Mik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5kZWZhdWx0LnBhcnNlKHQpLGE9e307Zm9yKHZhciBvIGluIGUpZVtvXSYmKGFbb109bltvXStlW29dKTtyZXR1cm4gaS5kZWZhdWx0KHQsYSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE1KSxpPW4oNTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49NTApO3ZhciBhPXIuZGVmYXVsdC5wYXJzZSh0KSxvPWEucixzPWEuZyxjPWEuYix1PWEuYSxsPXIuZGVmYXVsdC5wYXJzZShlKSxoPWwucixmPWwuZyxkPWwuYixwPWwuYSxnPW4vMTAwLHk9MipnLTEsdj11LXAsbT0oKHkqdj09LTE/eTooeSt2KS8oMSt5KnYpKSsxKS8yLGI9MS1tLHg9byptK2gqYixfPXMqbStmKmIsaz1jKm0rZCpiLHc9dSpnK3AqKDEtZyk7cmV0dXJuIGkuZGVmYXVsdCh4LF8sayx3KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUzKSxpPW4oNzkpLGE9big1OCksbz1uKDIyOSkscz1uKDIzNSksYz1uKDExNCksdT1uKDExNSksbD1uKDIzOCksaD1uKDIzOSksZj1uKDExOSksZD1uKDI0MCkscD1uKDQxKSxnPW4oMjQ0KSx5PW4oMjQ1KSx2PW4oMTI0KSxtPW4oNSksYj1uKDM5KSx4PW4oMjQ5KSxfPW4oMTEpLGs9bigyNTEpLHc9bigzMCksRT17fTtFWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1FWyJbb2JqZWN0IEFycmF5XSJdPUVbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09RVsiW29iamVjdCBEYXRhVmlld10iXT1FWyJbb2JqZWN0IEJvb2xlYW5dIl09RVsiW29iamVjdCBEYXRlXSJdPUVbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUVbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPUVbIltvYmplY3QgSW50OEFycmF5XSJdPUVbIltvYmplY3QgSW50MTZBcnJheV0iXT1FWyJbb2JqZWN0IEludDMyQXJyYXldIl09RVsiW29iamVjdCBNYXBdIl09RVsiW29iamVjdCBOdW1iZXJdIl09RVsiW29iamVjdCBPYmplY3RdIl09RVsiW29iamVjdCBSZWdFeHBdIl09RVsiW29iamVjdCBTZXRdIl09RVsiW29iamVjdCBTdHJpbmddIl09RVsiW29iamVjdCBTeW1ib2xdIl09RVsiW29iamVjdCBVaW50OEFycmF5XSJdPUVbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09RVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1FWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLEVbIltvYmplY3QgRXJyb3JdIl09RVsiW29iamVjdCBGdW5jdGlvbl0iXT1FWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLFQsQyxTLEEpe3ZhciBNLE89MSZuLEQ9MiZuLE49NCZuO2lmKFQmJihNPVM/VChlLEMsUyxBKTpUKGUpKSx2b2lkIDAhPT1NKXJldHVybiBNO2lmKCFfKGUpKXJldHVybiBlO3ZhciBCPW0oZSk7aWYoQil7aWYoTT1nKGUpLCFPKXJldHVybiB1KGUsTSl9ZWxzZXt2YXIgTD1wKGUpLFA9IltvYmplY3QgRnVuY3Rpb25dIj09THx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09TDtpZihiKGUpKXJldHVybiBjKGUsTyk7aWYoIltvYmplY3QgT2JqZWN0XSI9PUx8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT1MfHxQJiYhUyl7aWYoTT1EfHxQP3t9OnYoZSksIU8pcmV0dXJuIEQ/aChlLHMoTSxlKSk6bChlLG8oTSxlKSl9ZWxzZXtpZighRVtMXSlyZXR1cm4gUz9lOnt9O009eShlLEwsTyl9fUF8fChBPW5ldyByKTt2YXIgRj1BLmdldChlKTtpZihGKXJldHVybiBGO0Euc2V0KGUsTSksayhlKT9lLmZvckVhY2goKGZ1bmN0aW9uKHIpe00uYWRkKHQocixuLFQscixlLEEpKX0pKTp4KGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7TS5zZXQoaSx0KHIsbixULGksZSxBKSl9KSk7dmFyIEk9Tj9EP2Q6ZjpEP2tleXNJbjp3LGo9Qj92b2lkIDA6SShlKTtyZXR1cm4gaShqfHxlLChmdW5jdGlvbihyLGkpe2omJihyPWVbaT1yXSksYShNLGksdChyLG4sVCxpLGUsQSkpfSkpLE19fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKGUpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmU7dC5leHBvcnRzPW59KS5jYWxsKHRoaXMsbigyMTEpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gbi5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKSxpPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXIoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KCk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzMCksaT1uKDQ3KSxhPW4oNSksbz1uKDM5KSxzPW4oNjApLGM9big0OCksdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodCksbD0hbiYmaSh0KSxoPSFuJiYhbCYmbyh0KSxmPSFuJiYhbCYmIWgmJmModCksZD1ufHxsfHxofHxmLHA9ZD9yKHQubGVuZ3RoLFN0cmluZyk6W10sZz1wLmxlbmd0aDtmb3IodmFyIHkgaW4gdCkhZSYmIXUuY2FsbCh0LHkpfHxkJiYoImxlbmd0aCI9PXl8fGgmJigib2Zmc2V0Ij09eXx8InBhcmVudCI9PXkpfHxmJiYoImJ1ZmZlciI9PXl8fCJieXRlTGVuZ3RoIj09eXx8ImJ5dGVPZmZzZXQiPT15KXx8cyh5LGcpKXx8cC5wdXNoKHkpO3JldHVybiBwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXt2YXIgcj1uKDE2KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWk/ci5CdWZmZXI6dm9pZCAwLHM9bz9vLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIG49dC5sZW5ndGgscj1zP3Mobik6bmV3IHQuY29uc3RydWN0b3Iobik7cmV0dXJuIHQuY29weShyKSxyfX0pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj0tMSxyPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShyKSk7KytuPHI7KWVbbl09dFtuXTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoLGk9MCxhPVtdOysrbjxyOyl7dmFyIG89dFtuXTtlKG8sbix0KSYmKGFbaSsrXT1vKX1yZXR1cm4gYX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuW119fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NCksaT1uKDYzKSxhPW4oODMpLG89bigxMTcpLHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspcihlLGEodCkpLHQ9aSh0KTtyZXR1cm4gZX06bzt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIwKSxpPW4oODMpLGE9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg0KSxpPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1lKHQpO3JldHVybiBpKHQpP2E6cihhLG4odCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTYpLCJTZXQiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTYpLlVpbnQ4QXJyYXk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjUpLGk9big2MyksYT1uKDYyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fGEodCk/e306cihpKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExKSxpPU9iamVjdC5jcmVhdGUsYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybnt9O2lmKGkpcmV0dXJuIGkoZSk7dC5wcm90b3R5cGU9ZTt2YXIgbj1uZXcgdDtyZXR1cm4gdC5wcm90b3R5cGU9dm9pZCAwLG59fSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big3OSksaT1uKDY0KSxhPW4oMTI3KSxvPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG8odCk/cjppKSh0LGEoZSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTYpLGk9bigyNTUpLGE9bigyNSksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6aSkodCxhKGUsMykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjU4KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixhLG8scyl7cmV0dXJuIGU9PT1ufHwobnVsbD09ZXx8bnVsbD09bnx8IWkoZSkmJiFpKG4pP2UhPWUmJm4hPW46cihlLG4sYSxvLHQscykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMxKSxpPW4oMjYxKSxhPW4oMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbyxzLGMpe3ZhciB1PTEmbixsPXQubGVuZ3RoLGg9ZS5sZW5ndGg7aWYobCE9aCYmISh1JiZoPmwpKXJldHVybiExO3ZhciBmPWMuZ2V0KHQpO2lmKGYmJmMuZ2V0KGUpKXJldHVybiBmPT1lO3ZhciBkPS0xLHA9ITAsZz0yJm4/bmV3IHI6dm9pZCAwO2ZvcihjLnNldCh0LGUpLGMuc2V0KGUsdCk7KytkPGw7KXt2YXIgeT10W2RdLHY9ZVtkXTtpZihvKXZhciBtPXU/byh2LHksZCxlLHQsYyk6byh5LHYsZCx0LGUsYyk7aWYodm9pZCAwIT09bSl7aWYobSljb250aW51ZTtwPSExO2JyZWFrfWlmKGcpe2lmKCFpKGUsKGZ1bmN0aW9uKHQsZSl7aWYoIWEoZyxlKSYmKHk9PT10fHxzKHksdCxuLG8sYykpKXJldHVybiBnLnB1c2goZSl9KSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoeSE9PXYmJiFzKHksdixuLG8sYykpe3A9ITE7YnJlYWt9fXJldHVybiBjLmRlbGV0ZSh0KSxjLmRlbGV0ZShlKSxwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzgpLGk9bigyNTkpLGE9bigyNjApO2Z1bmN0aW9uIG8odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IHI7KytlPG47KXRoaXMuYWRkKHRbZV0pfW8ucHJvdG90eXBlLmFkZD1vLnByb3RvdHlwZS5wdXNoPWksby5wcm90b3R5cGUuaGFzPWEsdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaGFzKGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD09dCYmIXIodCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmKG5bdF09PT1lJiYodm9pZCAwIT09ZXx8dCBpbiBPYmplY3QobikpKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD8iIjpyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjcyKSxpPW4oMTM3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmaSh0LGUscil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NSksaT1uKDQ3KSxhPW4oNSksbz1uKDYwKSxzPW4oODApLGM9big0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHU9LTEsbD0oZT1yKGUsdCkpLmxlbmd0aCxoPSExOysrdTxsOyl7dmFyIGY9YyhlW3VdKTtpZighKGg9bnVsbCE9dCYmbih0LGYpKSlicmVhazt0PXRbZl19cmV0dXJuIGh8fCsrdSE9bD9oOiEhKGw9bnVsbD09dD8wOnQubGVuZ3RoKSYmcyhsKSYmbyhmLGwpJiYoYSh0KXx8aSh0KSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NiksaT1uKDI1KSxhPW4oMTQxKSxvPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG8odCk/cjphKSh0LGkoZSwzKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NCksaT1uKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj0tMSxhPWkodCk/QXJyYXkodC5sZW5ndGgpOltdO3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixpKXthWysrbl09ZSh0LHIsaSl9KSksYX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3NyksaT1uKDY0KSxhPW4oMjUpLG89bigyNzgpLHM9big1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXModCk/cjpvLHU9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiBjKHQsYShlLDQpLG4sdSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI4OCksaT1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPWkodm9pZCAwPT09ZT90Lmxlbmd0aC0xOmUsMCksZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLG89LTEscz1pKGEubGVuZ3RoLWUsMCksYz1BcnJheShzKTsrK288czspY1tvXT1hW2Urb107bz0tMTtmb3IodmFyIHU9QXJyYXkoZSsxKTsrK288ZTspdVtvXT1hW29dO3JldHVybiB1W2VdPW4oYykscih0LHRoaXMsdSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjg5KSxpPW4oMjkwKShyKTt0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9bisocj8xOi0xKTtyP2EtLTorK2E8aTspaWYoZSh0W2FdLGEsdCkpcmV0dXJuIGE7cmV0dXJuLTF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNCksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJnIodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyOTkpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOnIodCxpKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwKSxpPW4oMTQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBhLG8scz17fSxjPW5ldyBpLHU9ZnVuY3Rpb24odCl7dmFyIGU9dC52IT09YT90LnY6dC53LHI9c1tlXSxpPW4odCksdT1vLmRpc3RhbmNlK2k7aWYoaTwwKXRocm93IG5ldyBFcnJvcigiZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiBCYWQgZWRnZTogIit0KyIgV2VpZ2h0OiAiK2kpO3U8ci5kaXN0YW5jZSYmKHIuZGlzdGFuY2U9dSxyLnByZWRlY2Vzc29yPWEsYy5kZWNyZWFzZShlLHUpKX07dC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ9PT1lPzA6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3NbdF09e2Rpc3RhbmNlOm59LGMuYWRkKHQsbil9KSk7Zm9yKDtjLnNpemUoKT4wJiYoYT1jLnJlbW92ZU1pbigpLChvPXNbYV0pLmRpc3RhbmNlIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTspcihhKS5mb3JFYWNoKHUpO3JldHVybiBzfSh0LFN0cmluZyhlKSxufHxhLHJ8fGZ1bmN0aW9uKGUpe3JldHVybiB0Lm91dEVkZ2VzKGUpfSl9O3ZhciBhPXIuY29uc3RhbnQoMSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwKTtmdW5jdGlvbiBpKCl7dGhpcy5fYXJyPVtdLHRoaXMuX2tleUluZGljZXM9e319dC5leHBvcnRzPWksaS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofSxpLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0saS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0aGlzLl9rZXlJbmRpY2VzLHQpfSxpLnByb3RvdHlwZS5wcmlvcml0eT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9rZXlJbmRpY2VzW3RdO2lmKHZvaWQgMCE9PWUpcmV0dXJuIHRoaXMuX2FycltlXS5wcmlvcml0eX0saS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXM7aWYodD1TdHJpbmcodCksIXIuaGFzKG4sdCkpe3ZhciBpPXRoaXMuX2FycixhPWkubGVuZ3RoO3JldHVybiBuW3RdPWEsaS5wdXNoKHtrZXk6dCxwcmlvcml0eTplfSksdGhpcy5fZGVjcmVhc2UoYSksITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnJlbW92ZU1pbj1mdW5jdGlvbigpe3RoaXMuX3N3YXAoMCx0aGlzLl9hcnIubGVuZ3RoLTEpO3ZhciB0PXRoaXMuX2Fyci5wb3AoKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2tleUluZGljZXNbdC5rZXldLHRoaXMuX2hlYXBpZnkoMCksdC5rZXl9LGkucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlc1t0XTtpZihlPnRoaXMuX2FycltuXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK3QrIiBPbGQ6ICIrdGhpcy5fYXJyW25dLnByaW9yaXR5KyIgTmV3OiAiK2UpO3RoaXMuX2FycltuXS5wcmlvcml0eT1lLHRoaXMuX2RlY3JlYXNlKG4pfSxpLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hcnIsbj0yKnQscj1uKzEsaT10O248ZS5sZW5ndGgmJihpPWVbbl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9uOmkscjxlLmxlbmd0aCYmKGk9ZVtyXS5wcmlvcml0eTxlW2ldLnByaW9yaXR5P3I6aSksaSE9PXQmJih0aGlzLl9zd2FwKHQsaSksdGhpcy5faGVhcGlmeShpKSkpfSxpLnByb3RvdHlwZS5fZGVjcmVhc2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dGhpcy5fYXJyLHI9blt0XS5wcmlvcml0eTswIT09dCYmIShuW2U9dD4+MV0ucHJpb3JpdHk8cik7KXRoaXMuX3N3YXAodCxlKSx0PWV9LGkucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYXJyLHI9dGhpcy5fa2V5SW5kaWNlcyxpPW5bdF0sYT1uW2VdO25bdF09YSxuW2VdPWksclthLmtleV09dCxyW2kua2V5XT1lfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wLG49W10saT17fSxhPVtdO3JldHVybiB0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obyl7ci5oYXMoaSxvKXx8ZnVuY3Rpb24gbyhzKXt2YXIgYz1pW3NdPXtvblN0YWNrOiEwLGxvd2xpbms6ZSxpbmRleDplKyt9O2lmKG4ucHVzaChzKSx0LnN1Y2Nlc3NvcnMocykuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5oYXMoaSx0KT9pW3RdLm9uU3RhY2smJihjLmxvd2xpbms9TWF0aC5taW4oYy5sb3dsaW5rLGlbdF0uaW5kZXgpKToobyh0KSxjLmxvd2xpbms9TWF0aC5taW4oYy5sb3dsaW5rLGlbdF0ubG93bGluaykpfSkpLGMubG93bGluaz09PWMuaW5kZXgpe3ZhciB1LGw9W107ZG97dT1uLnBvcCgpLGlbdV0ub25TdGFjaz0hMSxsLnB1c2godSl9d2hpbGUocyE9PXUpO2EucHVzaChsKX19KG8pfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMCk7ZnVuY3Rpb24gaSh0KXt2YXIgZT17fSxuPXt9LGk9W107aWYoci5lYWNoKHQuc2lua3MoKSwoZnVuY3Rpb24gbyhzKXtpZihyLmhhcyhuLHMpKXRocm93IG5ldyBhO3IuaGFzKGUscyl8fChuW3NdPSEwLGVbc109ITAsci5lYWNoKHQucHJlZGVjZXNzb3JzKHMpLG8pLGRlbGV0ZSBuW3NdLGkucHVzaChzKSl9KSksci5zaXplKGUpIT09dC5ub2RlQ291bnQoKSl0aHJvdyBuZXcgYTtyZXR1cm4gaX1mdW5jdGlvbiBhKCl7fXQuZXhwb3J0cz1pLGkuQ3ljbGVFeGNlcHRpb249YSxhLnByb3RvdHlwZT1uZXcgRXJyb3J9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3IuaXNBcnJheShlKXx8KGU9W2VdKTt2YXIgaT0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLGE9W10sbz17fTtyZXR1cm4gci5lYWNoKGUsKGZ1bmN0aW9uKGUpe2lmKCF0Lmhhc05vZGUoZSkpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrZSk7IWZ1bmN0aW9uIHQoZSxuLGksYSxvLHMpe3IuaGFzKGEsbil8fChhW25dPSEwLGl8fHMucHVzaChuKSxyLmVhY2gobyhuKSwoZnVuY3Rpb24obil7dChlLG4saSxhLG8scyl9KSksaSYmcy5wdXNoKG4pKX0odCxlLCJwb3N0Ij09PW4sbyxpLGEpfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9bigxOCl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kYWdyZSksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY3KSxpPW4oMzYpLGE9big2OCksbz1uKDQwKSxzPU9iamVjdC5wcm90b3R5cGUsYz1zLmhhc093blByb3BlcnR5LHU9cigoZnVuY3Rpb24odCxlKXt0PU9iamVjdCh0KTt2YXIgbj0tMSxyPWUubGVuZ3RoLHU9cj4yP2VbMl06dm9pZCAwO2Zvcih1JiZhKGVbMF0sZVsxXSx1KSYmKHI9MSk7KytuPHI7KWZvcih2YXIgbD1lW25dLGg9byhsKSxmPS0xLGQ9aC5sZW5ndGg7KytmPGQ7KXt2YXIgcD1oW2ZdLGc9dFtwXTsodm9pZCAwPT09Z3x8aShnLHNbcF0pJiYhYy5jYWxsKHQscCkpJiYodFtwXT1sW3BdKX1yZXR1cm4gdH0pKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHQ9cih0KSk9PT0xLzB8fHQ9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MioodDwwPy0xOjEpOnQ9PXQ/dDowOjA9PT10P3Q6MH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuKG51bGw9PXQ/MDp0Lmxlbmd0aCk/cih0LDEpOltdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9bigzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXsodm9pZCAwPT09bnx8aSh0W2VdLG4pKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9big2MyksYT1uKDIxKSxvPUZ1bmN0aW9uLnByb3RvdHlwZSxzPU9iamVjdC5wcm90b3R5cGUsYz1vLnRvU3RyaW5nLHU9cy5oYXNPd25Qcm9wZXJ0eSxsPWMuY2FsbChPYmplY3QpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighYSh0KXx8IltvYmplY3QgT2JqZWN0XSIhPXIodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj11LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmMuY2FsbChuKT09bH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoKCJjb25zdHJ1Y3RvciIhPT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdFtlXSkmJiJfX3Byb3RvX18iIT1lKXJldHVybiB0W2VdfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMyKSxpPW4oMzM1KSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTpyKHQsZSl9KSk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzNikoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM1KSxpPTA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSsraTtyZXR1cm4gcih0KStlfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigxNykuR3JhcGgsYT1uKDY5KS5zbGFjaztmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIG4oaSl7ci5mb3JFYWNoKGUubm9kZUVkZ2VzKGkpLChmdW5jdGlvbihyKXt2YXIgbz1yLnYscz1pPT09bz9yLnc6bzt0Lmhhc05vZGUocyl8fGEoZSxyKXx8KHQuc2V0Tm9kZShzLHt9KSx0LnNldEVkZ2UoaSxzLHt9KSxuKHMpKX0pKX0pKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gci5taW5CeShlLmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2lmKHQuaGFzTm9kZShuLnYpIT09dC5oYXNOb2RlKG4udykpcmV0dXJuIGEoZSxuKX0pKX1mdW5jdGlvbiBjKHQsZSxuKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtlLm5vZGUodCkucmFuays9bn0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPW5ldyBpKHtkaXJlY3RlZDohMX0pLHU9dC5ub2RlcygpWzBdLGw9dC5ub2RlQ291bnQoKTtyLnNldE5vZGUodSx7fSk7Zm9yKDtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIodCxlLGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9aWYoIW8ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLHQpLHQ7by5sZW5ndGg+MSYmby5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIG9bMF19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKTtyZXR1cm57eDppK24seTphK3J9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0vXlwwKy9nLHI9L1tcMFxyXGZdL2csaT0vOiAqL2csYT0vem9vfGdyYS8sbz0vKFssOiBdKSh0cmFuc2Zvcm0pL2cscz0vLCtccyooPyFbXihdKlspXSkvZyxjPS8gK1xzKig/IVteKF0qWyldKS9nLHU9LyAqW1wwXSAqL2csbD0vLFxyKz8vZyxoPS8oW1x0XHJcbiBdKSpcZj8mL2csZj0vOmdsb2JhbFwoKCg/OlteXChcKVxbXF1dKnxcWy4qXF18XChbXlwoXCldKlwpKSopXCkvZyxkPS9cVysvZyxwPS9AKGtcdyspXHMqKFxTKilccyovLGc9Lzo6KHBsYWNlKS9nLHk9LzoocmVhZC1vbmx5KS9nLHY9L1xzKyg/PVt7XF07PTo+XSkvZyxtPS8oW1t9PTo+XSlccysvZyxiPS8oXHtbXntdKz8pOyg/PVx9KS9nLHg9L1xzezIsfS9nLF89LyhbXlwoXSkoOispICovZyxrPS9bc3ZoXVx3Ky1bdGJscl17Mn0vLHc9L1woXHMqKC4qKVxzKlwpL2csRT0vKFtcc1xTXSo/KTsvZyxUPS8tc2VsZnxmbGV4LS9nLEM9L1teXSo/KDpbcnBdW2VsXWFbXHctXSspW15dKi8sUz0vc3RyZXRjaHw6XHMqXHcrXC0oPzpjb250ZXxhdmFpbCkvLEE9LyhbXi1dKShpbWFnZS1zZXRcKCkvLE09Ii13ZWJraXQtIixPPSItbW96LSIsRD0iLW1zLSIsTj0xLEI9MSxMPTAsUD0xLEY9MSxJPTEsaj0wLFI9MCxZPTAsej1bXSxVPVtdLCQ9MCxXPW51bGwsVj0wLEg9MSxHPSIiLHE9IiIsWD0iIjtmdW5jdGlvbiBaKHQsZSxpLGEsbyl7Zm9yKHZhciBzLGMsbD0wLGg9MCxmPTAsZD0wLHY9MCxtPTAsYj0wLHg9MCxrPTAsRT0wLFQ9MCxDPTAsUz0wLEE9MCxPPTAsRD0wLGo9MCxVPTAsVz0wLFE9aS5sZW5ndGgsaXQ9US0xLGF0PSIiLG90PSIiLHN0PSIiLGN0PSIiLHV0PSIiLGx0PSIiO088UTspe2lmKGI9aS5jaGFyQ29kZUF0KE8pLE89PT1pdCYmaCtkK2YrbCE9PTAmJigwIT09aCYmKGI9NDc9PT1oPzEwOjQ3KSxkPWY9bD0wLFErKyxpdCsrKSxoK2QrZitsPT09MCl7aWYoTz09PWl0JiYoRD4wJiYob3Q9b3QucmVwbGFjZShyLCIiKSksb3QudHJpbSgpLmxlbmd0aD4wKSl7c3dpdGNoKGIpe2Nhc2UgMzI6Y2FzZSA5OmNhc2UgNTk6Y2FzZSAxMzpjYXNlIDEwOmJyZWFrO2RlZmF1bHQ6b3QrPWkuY2hhckF0KE8pfWI9NTl9aWYoMT09PWopc3dpdGNoKGIpe2Nhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNTk6Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQ0Omo9MDtjYXNlIDk6Y2FzZSAxMzpjYXNlIDEwOmNhc2UgMzI6YnJlYWs7ZGVmYXVsdDpmb3Ioaj0wLFc9Tyx2PWIsTy0tLGI9NTk7VzxROylzd2l0Y2goaS5jaGFyQ29kZUF0KFcrKykpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDU5OisrTyxiPXYsVz1RO2JyZWFrO2Nhc2UgNTg6RD4wJiYoKytPLGI9dik7Y2FzZSAxMjM6Vz1RfX1zd2l0Y2goYil7Y2FzZSAxMjM6Zm9yKHY9KG90PW90LnRyaW0oKSkuY2hhckNvZGVBdCgwKSxUPTEsVz0rK087TzxROyl7c3dpdGNoKGI9aS5jaGFyQ29kZUF0KE8pKXtjYXNlIDEyMzpUKys7YnJlYWs7Y2FzZSAxMjU6VC0tO2JyZWFrO2Nhc2UgNDc6c3dpdGNoKG09aS5jaGFyQ29kZUF0KE8rMSkpe2Nhc2UgNDI6Y2FzZSA0NzpPPXJ0KG0sTyxpdCxpKX1icmVhaztjYXNlIDkxOmIrKztjYXNlIDQwOmIrKztjYXNlIDM0OmNhc2UgMzk6Zm9yKDtPKys8aXQmJmkuY2hhckNvZGVBdChPKSE9PWI7KTt9aWYoMD09PVQpYnJlYWs7TysrfXN3aXRjaChzdD1pLnN1YnN0cmluZyhXLE8pLDA9PT12JiYodj0ob3Q9b3QucmVwbGFjZShuLCIiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLHYpe2Nhc2UgNjQ6c3dpdGNoKEQ+MCYmKG90PW90LnJlcGxhY2UociwiIikpLG09b3QuY2hhckNvZGVBdCgxKSl7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSAxMTU6Y2FzZSA0NTpzPWU7YnJlYWs7ZGVmYXVsdDpzPXp9aWYoVz0oc3Q9WihlLHMsc3QsbSxvKzEpKS5sZW5ndGgsWT4wJiYwPT09VyYmKFc9b3QubGVuZ3RoKSwkPjAmJihjPW50KDMsc3Qscz1KKHosb3QsVSksZSxCLE4sVyxtLG8sYSksb3Q9cy5qb2luKCIiKSx2b2lkIDAhPT1jJiYwPT09KFc9KHN0PWMudHJpbSgpKS5sZW5ndGgpJiYobT0wLHN0PSIiKSksVz4wKXN3aXRjaChtKXtjYXNlIDExNTpvdD1vdC5yZXBsYWNlKHcsZXQpO2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgNDU6c3Q9b3QrInsiK3N0KyJ9IjticmVhaztjYXNlIDEwNzpzdD0ob3Q9b3QucmVwbGFjZShwLCIkMSAkMiIrKEg+MD9HOiIiKSkpKyJ7IitzdCsifSIsc3Q9MT09PUZ8fDI9PT1GJiZ0dCgiQCIrc3QsMyk/IkAiK00rc3QrIkAiK3N0OiJAIitzdDticmVhaztkZWZhdWx0OnN0PW90K3N0LDExMj09PWEmJihjdCs9c3Qsc3Q9IiIpfWVsc2Ugc3Q9IiI7YnJlYWs7ZGVmYXVsdDpzdD1aKGUsSihlLG90LFUpLHN0LGEsbysxKX11dCs9c3QsQz0wLGo9MCxBPTAsRD0wLFU9MCxTPTAsb3Q9IiIsc3Q9IiIsYj1pLmNoYXJDb2RlQXQoKytPKTticmVhaztjYXNlIDEyNTpjYXNlIDU5OmlmKChXPShvdD0oRD4wP290LnJlcGxhY2UociwiIik6b3QpLnRyaW0oKSkubGVuZ3RoKT4xKXN3aXRjaCgwPT09QSYmKDQ1PT09KHY9b3QuY2hhckNvZGVBdCgwKSl8fHY+OTYmJnY8MTIzKSYmKFc9KG90PW90LnJlcGxhY2UoIiAiLCI6IikpLmxlbmd0aCksJD4wJiZ2b2lkIDAhPT0oYz1udCgxLG90LGUsdCxCLE4sY3QubGVuZ3RoLGEsbyxhKSkmJjA9PT0oVz0ob3Q9Yy50cmltKCkpLmxlbmd0aCkmJihvdD0iXDBcMCIpLHY9b3QuY2hhckNvZGVBdCgwKSxtPW90LmNoYXJDb2RlQXQoMSksdil7Y2FzZSAwOmJyZWFrO2Nhc2UgNjQ6aWYoMTA1PT09bXx8OTk9PT1tKXtsdCs9b3QraS5jaGFyQXQoTyk7YnJlYWt9ZGVmYXVsdDppZig1OD09PW90LmNoYXJDb2RlQXQoVy0xKSlicmVhaztjdCs9SyhvdCx2LG0sb3QuY2hhckNvZGVBdCgyKSl9Qz0wLGo9MCxBPTAsRD0wLFU9MCxvdD0iIixiPWkuY2hhckNvZGVBdCgrK08pfX1zd2l0Y2goYil7Y2FzZSAxMzpjYXNlIDEwOmlmKGgrZCtmK2wrUj09PTApc3dpdGNoKEUpe2Nhc2UgNDE6Y2FzZSAzOTpjYXNlIDM0OmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NzpjYXNlIDQ1OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OmJyZWFrO2RlZmF1bHQ6QT4wJiYoaj0xKX00Nz09PWg/aD0wOlArQz09PTAmJjEwNyE9PWEmJm90Lmxlbmd0aD4wJiYoRD0xLG90Kz0iXDAiKSwkKlY+MCYmbnQoMCxvdCxlLHQsQixOLGN0Lmxlbmd0aCxhLG8sYSksTj0xLEIrKzticmVhaztjYXNlIDU5OmNhc2UgMTI1OmlmKGgrZCtmK2w9PT0wKXtOKys7YnJlYWt9ZGVmYXVsdDpzd2l0Y2goTisrLGF0PWkuY2hhckF0KE8pLGIpe2Nhc2UgOTpjYXNlIDMyOmlmKGQrbCtoPT09MClzd2l0Y2goeCl7Y2FzZSA0NDpjYXNlIDU4OmNhc2UgOTpjYXNlIDMyOmF0PSIiO2JyZWFrO2RlZmF1bHQ6MzIhPT1iJiYoYXQ9IiAiKX1icmVhaztjYXNlIDA6YXQ9IlxcMCI7YnJlYWs7Y2FzZSAxMjphdD0iXFxmIjticmVhaztjYXNlIDExOmF0PSJcXHYiO2JyZWFrO2Nhc2UgMzg6ZCtoK2w9PT0wJiZQPjAmJihVPTEsRD0xLGF0PSJcZiIrYXQpO2JyZWFrO2Nhc2UgMTA4OmlmKGQraCtsK0w9PT0wJiZBPjApc3dpdGNoKE8tQSl7Y2FzZSAyOjExMj09PXgmJjU4PT09aS5jaGFyQ29kZUF0KE8tMykmJihMPXgpO2Nhc2UgODoxMTE9PT1rJiYoTD1rKX1icmVhaztjYXNlIDU4OmQraCtsPT09MCYmKEE9Tyk7YnJlYWs7Y2FzZSA0NDpoK2YrZCtsPT09MCYmKEQ9MSxhdCs9IlxyIik7YnJlYWs7Y2FzZSAzNDpjYXNlIDM5OjA9PT1oJiYoZD1kPT09Yj8wOjA9PT1kP2I6ZCk7YnJlYWs7Y2FzZSA5MTpkK2grZj09PTAmJmwrKzticmVhaztjYXNlIDkzOmQraCtmPT09MCYmbC0tO2JyZWFrO2Nhc2UgNDE6ZCtoK2w9PT0wJiZmLS07YnJlYWs7Y2FzZSA0MDppZihkK2grbD09PTApe2lmKDA9PT1DKXN3aXRjaCgyKngrMyprKXtjYXNlIDUzMzpicmVhaztkZWZhdWx0OlQ9MCxDPTF9ZisrfWJyZWFrO2Nhc2UgNjQ6aCtmK2QrbCtBK1M9PT0wJiYoUz0xKTticmVhaztjYXNlIDQyOmNhc2UgNDc6aWYoZCtsK2Y+MClicmVhaztzd2l0Y2goaCl7Y2FzZSAwOnN3aXRjaCgyKmIrMyppLmNoYXJDb2RlQXQoTysxKSl7Y2FzZSAyMzU6aD00NzticmVhaztjYXNlIDIyMDpXPU8saD00Mn1icmVhaztjYXNlIDQyOjQ3PT09YiYmNDI9PT14JiZXKzIhPT1PJiYoMzM9PT1pLmNoYXJDb2RlQXQoVysyKSYmKGN0Kz1pLnN1YnN0cmluZyhXLE8rMSkpLGF0PSIiLGg9MCl9fWlmKDA9PT1oKXtpZihQK2QrbCtTPT09MCYmMTA3IT09YSYmNTkhPT1iKXN3aXRjaChiKXtjYXNlIDQ0OmNhc2UgMTI2OmNhc2UgNjI6Y2FzZSA0MzpjYXNlIDQxOmNhc2UgNDA6aWYoMD09PUMpe3N3aXRjaCh4KXtjYXNlIDk6Y2FzZSAzMjpjYXNlIDEwOmNhc2UgMTM6YXQrPSJcMCI7YnJlYWs7ZGVmYXVsdDphdD0iXDAiK2F0Kyg0ND09PWI/IiI6IlwwIil9RD0xfWVsc2Ugc3dpdGNoKGIpe2Nhc2UgNDA6QSs3PT09TyYmMTA4PT09eCYmKEE9MCksQz0rK1Q7YnJlYWs7Y2FzZSA0MTowPT0oQz0tLVQpJiYoRD0xLGF0Kz0iXDAiKX1icmVhaztjYXNlIDk6Y2FzZSAzMjpzd2l0Y2goeCl7Y2FzZSAwOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNTk6Y2FzZSA0NDpjYXNlIDEyOmNhc2UgOTpjYXNlIDMyOmNhc2UgMTA6Y2FzZSAxMzpicmVhaztkZWZhdWx0OjA9PT1DJiYoRD0xLGF0Kz0iXDAiKX19b3QrPWF0LDMyIT09YiYmOSE9PWImJihFPWIpfX1rPXgseD1iLE8rK31pZihXPWN0Lmxlbmd0aCxZPjAmJjA9PT1XJiYwPT09dXQubGVuZ3RoJiYwPT09ZVswXS5sZW5ndGg9PTAmJigxMDkhPT1hfHwxPT09ZS5sZW5ndGgmJihQPjA/cTpYKT09PWVbMF0pJiYoVz1lLmpvaW4oIiwiKS5sZW5ndGgrMiksVz4wKXtpZihzPTA9PT1QJiYxMDchPT1hP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9MCxhPXQubGVuZ3RoLG89QXJyYXkoYSk7aTxhOysraSl7Zm9yKHZhciBzPXRbaV0uc3BsaXQodSksYz0iIixsPTAsaD0wLGY9MCxkPTAscD1zLmxlbmd0aDtsPHA7KytsKWlmKCEoMD09PShoPShuPXNbbF0pLmxlbmd0aCkmJnA+MSkpe2lmKGY9Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTEpLGQ9bi5jaGFyQ29kZUF0KDApLGU9IiIsMCE9PWwpc3dpdGNoKGYpe2Nhc2UgNDI6Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQzOmNhc2UgMzI6Y2FzZSA0MDpicmVhaztkZWZhdWx0OmU9IiAifXN3aXRjaChkKXtjYXNlIDM4Om49ZStxO2Nhc2UgMTI2OmNhc2UgNjI6Y2FzZSA0MzpjYXNlIDMyOmNhc2UgNDE6Y2FzZSA0MDpicmVhaztjYXNlIDkxOm49ZStuK3E7YnJlYWs7Y2FzZSA1ODpzd2l0Y2goMipuLmNoYXJDb2RlQXQoMSkrMypuLmNoYXJDb2RlQXQoMikpe2Nhc2UgNTMwOmlmKEk+MCl7bj1lK24uc3Vic3RyaW5nKDgsaC0xKTticmVha31kZWZhdWx0OihsPDF8fHNbbC0xXS5sZW5ndGg8MSkmJihuPWUrcStuKX1icmVhaztjYXNlIDQ0OmU9IiI7ZGVmYXVsdDpuPWg+MSYmbi5pbmRleE9mKCI6Iik+MD9lK24ucmVwbGFjZShfLCIkMSIrcSsiJDIiKTplK24rcX1jKz1ufW9baV09Yy5yZXBsYWNlKHIsIiIpLnRyaW0oKX1yZXR1cm4gb30oZSk6ZSwkPjAmJnZvaWQgMCE9PShjPW50KDIsY3Qscyx0LEIsTixXLGEsbyxhKSkmJjA9PT0oY3Q9YykubGVuZ3RoKXJldHVybiBsdCtjdCt1dDtpZihjdD1zLmpvaW4oIiwiKSsieyIrY3QrIn0iLEYqTCE9MCl7c3dpdGNoKDIhPT1GfHx0dChjdCwyKXx8KEw9MCksTCl7Y2FzZSAxMTE6Y3Q9Y3QucmVwbGFjZSh5LCI6LW1vei0kMSIpK2N0O2JyZWFrO2Nhc2UgMTEyOmN0PWN0LnJlcGxhY2UoZywiOjotd2Via2l0LWlucHV0LSQxIikrY3QucmVwbGFjZShnLCI6Oi1tb3otJDEiKStjdC5yZXBsYWNlKGcsIjotbXMtaW5wdXQtJDEiKStjdH1MPTB9fXJldHVybiBsdCtjdCt1dH1mdW5jdGlvbiBKKHQsZSxuKXt2YXIgcj1lLnRyaW0oKS5zcGxpdChsKSxpPXIsYT1yLmxlbmd0aCxvPXQubGVuZ3RoO3N3aXRjaChvKXtjYXNlIDA6Y2FzZSAxOmZvcih2YXIgcz0wLGM9MD09PW8/IiI6dFswXSsiICI7czxhOysrcylpW3NdPVEoYyxpW3NdLG4sbykudHJpbSgpO2JyZWFrO2RlZmF1bHQ6cz0wO3ZhciB1PTA7Zm9yKGk9W107czxhOysrcylmb3IodmFyIGg9MDtoPG87KytoKWlbdSsrXT1RKHRbaF0rIiAiLHJbc10sbixvKS50cmltKCl9cmV0dXJuIGl9ZnVuY3Rpb24gUSh0LGUsbixyKXt2YXIgaT1lLGE9aS5jaGFyQ29kZUF0KDApO3N3aXRjaChhPDMzJiYoYT0oaT1pLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksYSl7Y2FzZSAzODpzd2l0Y2goUCtyKXtjYXNlIDA6Y2FzZSAxOmlmKDA9PT10LnRyaW0oKS5sZW5ndGgpYnJlYWs7ZGVmYXVsdDpyZXR1cm4gaS5yZXBsYWNlKGgsIiQxIit0LnRyaW0oKSl9YnJlYWs7Y2FzZSA1ODpzd2l0Y2goaS5jaGFyQ29kZUF0KDEpKXtjYXNlIDEwMzppZihJPjAmJlA+MClyZXR1cm4gaS5yZXBsYWNlKGYsIiQxIikucmVwbGFjZShoLCIkMSIrWCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdC50cmltKCkraS5yZXBsYWNlKGgsIiQxIit0LnRyaW0oKSl9ZGVmYXVsdDppZihuKlA+MCYmaS5pbmRleE9mKCJcZiIpPjApcmV0dXJuIGkucmVwbGFjZShoLCg1OD09PXQuY2hhckNvZGVBdCgwKT8iIjoiJDEiKSt0LnRyaW0oKSl9cmV0dXJuIHQraX1mdW5jdGlvbiBLKHQsZSxuLHIpe3ZhciB1LGw9MCxoPXQrIjsiLGY9MiplKzMqbis0KnI7aWYoOTQ0PT09ZilyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LmluZGV4T2YoIjoiLDkpKzEscj10LnN1YnN0cmluZygwLG4pLnRyaW0oKSxpPXQuc3Vic3RyaW5nKG4sZS0xKS50cmltKCk7c3dpdGNoKHQuY2hhckNvZGVBdCg5KSpIKXtjYXNlIDA6YnJlYWs7Y2FzZSA0NTppZigxMTAhPT10LmNoYXJDb2RlQXQoMTApKWJyZWFrO2RlZmF1bHQ6dmFyIGE9aS5zcGxpdCgoaT0iIixzKSksbz0wO2ZvcihuPTAsZT1hLmxlbmd0aDtvPGU7bj0wLCsrbyl7Zm9yKHZhciB1PWFbb10sbD11LnNwbGl0KGMpO3U9bFtuXTspe3ZhciBoPXUuY2hhckNvZGVBdCgwKTtpZigxPT09SCYmKGg+NjQmJmg8OTB8fGg+OTYmJmg8MTIzfHw5NT09PWh8fDQ1PT09aCYmNDUhPT11LmNoYXJDb2RlQXQoMSkpKXN3aXRjaChpc05hTihwYXJzZUZsb2F0KHUpKSsoLTEhPT11LmluZGV4T2YoIigiKSkpe2Nhc2UgMTpzd2l0Y2godSl7Y2FzZSJpbmZpbml0ZSI6Y2FzZSJhbHRlcm5hdGUiOmNhc2UiYmFja3dhcmRzIjpjYXNlInJ1bm5pbmciOmNhc2Uibm9ybWFsIjpjYXNlImZvcndhcmRzIjpjYXNlImJvdGgiOmNhc2Uibm9uZSI6Y2FzZSJsaW5lYXIiOmNhc2UiZWFzZSI6Y2FzZSJlYXNlLWluIjpjYXNlImVhc2Utb3V0IjpjYXNlImVhc2UtaW4tb3V0IjpjYXNlInBhdXNlZCI6Y2FzZSJyZXZlcnNlIjpjYXNlImFsdGVybmF0ZS1yZXZlcnNlIjpjYXNlImluaGVyaXQiOmNhc2UiaW5pdGlhbCI6Y2FzZSJ1bnNldCI6Y2FzZSJzdGVwLXN0YXJ0IjpjYXNlInN0ZXAtZW5kIjpicmVhaztkZWZhdWx0OnUrPUd9fWxbbisrXT11fWkrPSgwPT09bz8iIjoiLCIpK2wuam9pbigiICIpfX1yZXR1cm4gaT1yK2krIjsiLDE9PT1GfHwyPT09RiYmdHQoaSwxKT9NK2kraTppfShoKTtpZigwPT09Rnx8Mj09PUYmJiF0dChoLDEpKXJldHVybiBoO3N3aXRjaChmKXtjYXNlIDEwMTU6cmV0dXJuIDk3PT09aC5jaGFyQ29kZUF0KDEwKT9NK2graDpoO2Nhc2UgOTUxOnJldHVybiAxMTY9PT1oLmNoYXJDb2RlQXQoMyk/TStoK2g6aDtjYXNlIDk2MzpyZXR1cm4gMTEwPT09aC5jaGFyQ29kZUF0KDUpP00raCtoOmg7Y2FzZSAxMDA5OmlmKDEwMCE9PWguY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDk2OTpjYXNlIDk0MjpyZXR1cm4gTStoK2g7Y2FzZSA5Nzg6cmV0dXJuIE0raCtPK2graDtjYXNlIDEwMTk6Y2FzZSA5ODM6cmV0dXJuIE0raCtPK2grRCtoK2g7Y2FzZSA4ODM6cmV0dXJuIDQ1PT09aC5jaGFyQ29kZUF0KDgpP00raCtoOmguaW5kZXhPZigiaW1hZ2Utc2V0KCIsMTEpPjA/aC5yZXBsYWNlKEEsIiQxLXdlYmtpdC0kMiIpK2g6aDtjYXNlIDkzMjppZig0NT09PWguY2hhckNvZGVBdCg0KSlzd2l0Y2goaC5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gTSsiYm94LSIraC5yZXBsYWNlKCItZ3JvdyIsIiIpK00raCtEK2gucmVwbGFjZSgiZ3JvdyIsInBvc2l0aXZlIikraDtjYXNlIDExNTpyZXR1cm4gTStoK0QraC5yZXBsYWNlKCJzaHJpbmsiLCJuZWdhdGl2ZSIpK2g7Y2FzZSA5ODpyZXR1cm4gTStoK0QraC5yZXBsYWNlKCJiYXNpcyIsInByZWZlcnJlZC1zaXplIikraH1yZXR1cm4gTStoK0QraCtoO2Nhc2UgOTY0OnJldHVybiBNK2grRCsiZmxleC0iK2graDtjYXNlIDEwMjM6aWYoOTkhPT1oLmNoYXJDb2RlQXQoOCkpYnJlYWs7cmV0dXJuIHU9aC5zdWJzdHJpbmcoaC5pbmRleE9mKCI6IiwxNSkpLnJlcGxhY2UoImZsZXgtIiwiIikucmVwbGFjZSgic3BhY2UtYmV0d2VlbiIsImp1c3RpZnkiKSxNKyJib3gtcGFjayIrdStNK2grRCsiZmxleC1wYWNrIit1K2g7Y2FzZSAxMDA1OnJldHVybiBhLnRlc3QoaCk/aC5yZXBsYWNlKGksIjoiK00pK2gucmVwbGFjZShpLCI6IitPKStoOmg7Y2FzZSAxZTM6c3dpdGNoKGw9KHU9aC5zdWJzdHJpbmcoMTMpLnRyaW0oKSkuaW5kZXhPZigiLSIpKzEsdS5jaGFyQ29kZUF0KDApK3UuY2hhckNvZGVBdChsKSl7Y2FzZSAyMjY6dT1oLnJlcGxhY2UoaywidGIiKTticmVhaztjYXNlIDIzMjp1PWgucmVwbGFjZShrLCJ0Yi1ybCIpO2JyZWFrO2Nhc2UgMjIwOnU9aC5yZXBsYWNlKGssImxyIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaH1yZXR1cm4gTStoK0QrdStoO2Nhc2UgMTAxNzppZigtMT09PWguaW5kZXhPZigic3RpY2t5Iiw5KSlyZXR1cm4gaDtjYXNlIDk3NTpzd2l0Y2gobD0oaD10KS5sZW5ndGgtMTAsZj0odT0oMzM9PT1oLmNoYXJDb2RlQXQobCk/aC5zdWJzdHJpbmcoMCxsKTpoKS5zdWJzdHJpbmcodC5pbmRleE9mKCI6Iiw3KSsxKS50cmltKCkpLmNoYXJDb2RlQXQoMCkrKDB8dS5jaGFyQ29kZUF0KDcpKSl7Y2FzZSAyMDM6aWYodS5jaGFyQ29kZUF0KDgpPDExMSlicmVhaztjYXNlIDExNTpoPWgucmVwbGFjZSh1LE0rdSkrIjsiK2g7YnJlYWs7Y2FzZSAyMDc6Y2FzZSAxMDI6aD1oLnJlcGxhY2UodSxNKyhmPjEwMj8iaW5saW5lLSI6IiIpKyJib3giKSsiOyIraC5yZXBsYWNlKHUsTSt1KSsiOyIraC5yZXBsYWNlKHUsRCt1KyJib3giKSsiOyIraH1yZXR1cm4gaCsiOyI7Y2FzZSA5Mzg6aWYoNDU9PT1oLmNoYXJDb2RlQXQoNSkpc3dpdGNoKGguY2hhckNvZGVBdCg2KSl7Y2FzZSAxMDU6cmV0dXJuIHU9aC5yZXBsYWNlKCItaXRlbXMiLCIiKSxNK2grTSsiYm94LSIrdStEKyJmbGV4LSIrdStoO2Nhc2UgMTE1OnJldHVybiBNK2grRCsiZmxleC1pdGVtLSIraC5yZXBsYWNlKFQsIiIpK2g7ZGVmYXVsdDpyZXR1cm4gTStoK0QrImZsZXgtbGluZS1wYWNrIitoLnJlcGxhY2UoImFsaWduLWNvbnRlbnQiLCIiKS5yZXBsYWNlKFQsIiIpK2h9YnJlYWs7Y2FzZSA5NzM6Y2FzZSA5ODk6aWYoNDUhPT1oLmNoYXJDb2RlQXQoMyl8fDEyMj09PWguY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDkzMTpjYXNlIDk1MzppZighMD09PVMudGVzdCh0KSlyZXR1cm4gMTE1PT09KHU9dC5zdWJzdHJpbmcodC5pbmRleE9mKCI6IikrMSkpLmNoYXJDb2RlQXQoMCk/Syh0LnJlcGxhY2UoInN0cmV0Y2giLCJmaWxsLWF2YWlsYWJsZSIpLGUsbixyKS5yZXBsYWNlKCI6ZmlsbC1hdmFpbGFibGUiLCI6c3RyZXRjaCIpOmgucmVwbGFjZSh1LE0rdSkraC5yZXBsYWNlKHUsTyt1LnJlcGxhY2UoImZpbGwtIiwiIikpK2g7YnJlYWs7Y2FzZSA5NjI6aWYoaD1NK2grKDEwMj09PWguY2hhckNvZGVBdCg1KT9EK2g6IiIpK2gsbityPT09MjExJiYxMDU9PT1oLmNoYXJDb2RlQXQoMTMpJiZoLmluZGV4T2YoInRyYW5zZm9ybSIsMTApPjApcmV0dXJuIGguc3Vic3RyaW5nKDAsaC5pbmRleE9mKCI7IiwyNykrMSkucmVwbGFjZShvLCIkMS13ZWJraXQtJDIiKStofXJldHVybiBofWZ1bmN0aW9uIHR0KHQsZSl7dmFyIG49dC5pbmRleE9mKDE9PT1lPyI6IjoieyIpLHI9dC5zdWJzdHJpbmcoMCwzIT09ZT9uOjEwKSxpPXQuc3Vic3RyaW5nKG4rMSx0Lmxlbmd0aC0xKTtyZXR1cm4gVygyIT09ZT9yOnIucmVwbGFjZShDLCIkMSIpLGksZSl9ZnVuY3Rpb24gZXQodCxlKXt2YXIgbj1LKGUsZS5jaGFyQ29kZUF0KDApLGUuY2hhckNvZGVBdCgxKSxlLmNoYXJDb2RlQXQoMikpO3JldHVybiBuIT09ZSsiOyI/bi5yZXBsYWNlKEUsIiBvciAoJDEpIikuc3Vic3RyaW5nKDQpOiIoIitlKyIpIn1mdW5jdGlvbiBudCh0LGUsbixyLGksYSxvLHMsYyx1KXtmb3IodmFyIGwsaD0wLGY9ZTtoPCQ7KytoKXN3aXRjaChsPVVbaF0uY2FsbChhdCx0LGYsbixyLGksYSxvLHMsYyx1KSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpmPWx9aWYoZiE9PWUpcmV0dXJuIGZ9ZnVuY3Rpb24gcnQodCxlLG4scil7Zm9yKHZhciBpPWUrMTtpPG47KytpKXN3aXRjaChyLmNoYXJDb2RlQXQoaSkpe2Nhc2UgNDc6aWYoNDI9PT10JiY0Mj09PXIuY2hhckNvZGVBdChpLTEpJiZlKzIhPT1pKXJldHVybiBpKzE7YnJlYWs7Y2FzZSAxMDppZig0Nz09PXQpcmV0dXJuIGkrMX1yZXR1cm4gaX1mdW5jdGlvbiBpdCh0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJrZXlmcmFtZSI6SD0wfG47YnJlYWs7Y2FzZSJnbG9iYWwiOkk9MHxuO2JyZWFrO2Nhc2UiY2FzY2FkZSI6UD0wfG47YnJlYWs7Y2FzZSJjb21wcmVzcyI6aj0wfG47YnJlYWs7Y2FzZSJzZW1pY29sb24iOlI9MHxuO2JyZWFrO2Nhc2UicHJlc2VydmUiOlk9MHxuO2JyZWFrO2Nhc2UicHJlZml4IjpXPW51bGwsbj8iZnVuY3Rpb24iIT10eXBlb2Ygbj9GPTE6KEY9MixXPW4pOkY9MH19cmV0dXJuIGl0fWZ1bmN0aW9uIGF0KGUsbil7aWYodm9pZCAwIT09dGhpcyYmdGhpcy5jb25zdHJ1Y3Rvcj09PWF0KXJldHVybiB0KGUpO3ZhciBpPWUsYT1pLmNoYXJDb2RlQXQoMCk7YTwzMyYmKGE9KGk9aS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLEg+MCYmKEc9aS5yZXBsYWNlKGQsOTE9PT1hPyIiOiItIikpLGE9MSwxPT09UD9YPWk6cT1pO3ZhciBvLHM9W1hdOyQ+MCYmdm9pZCAwIT09KG89bnQoLTEsbixzLHMsQixOLDAsMCwwLDApKSYmInN0cmluZyI9PXR5cGVvZiBvJiYobj1vKTt2YXIgYz1aKHoscyxuLDAsMCk7cmV0dXJuICQ+MCYmdm9pZCAwIT09KG89bnQoLTIsYyxzLHMsQixOLGMubGVuZ3RoLDAsMCwwKSkmJiJzdHJpbmciIT10eXBlb2YoYz1vKSYmKGE9MCksRz0iIixYPSIiLHE9IiIsTD0wLEI9MSxOPTEsaiphPT0wP2M6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShyLCIiKS5yZXBsYWNlKHYsIiIpLnJlcGxhY2UobSwiJDEiKS5yZXBsYWNlKGIsIiQxIikucmVwbGFjZSh4LCIgIil9KGMpfXJldHVybiBhdC51c2U9ZnVuY3Rpb24gdChlKXtzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6Y2FzZSBudWxsOiQ9VS5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKVVbJCsrXT1lO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyOysrbil0KGVbbl0pO2Vsc2UgVj0wfCEhZX1yZXR1cm4gdH0sYXQuc2V0PWl0LHZvaWQgMCE9PWUmJml0KGUpLGF0fShudWxsKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9eyIuL2xvY2FsZSI6OTgsIi4vbG9jYWxlLmpzIjo5OH07ZnVuY3Rpb24gaSh0KXt2YXIgZT1hKHQpO3JldHVybiBuKGUpfWZ1bmN0aW9uIGEodCl7aWYoIW4ubyhyLHQpKXt2YXIgZT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIit0KyInIik7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfXJldHVybiByW3RdfWkua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhyKX0saS5yZXNvbHZlPWEsdC5leHBvcnRzPWksaS5pZD0xNzF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNTEpO2UuaGV4PXIuZGVmYXVsdDt2YXIgaT1uKDUxKTtlLnJnYj1pLmRlZmF1bHQ7dmFyIGE9big1MSk7ZS5yZ2JhPWEuZGVmYXVsdDt2YXIgbz1uKDEwMCk7ZS5oc2w9by5kZWZhdWx0O3ZhciBzPW4oMTAwKTtlLmhzbGE9cy5kZWZhdWx0O3ZhciBjPW4oMjkpO2UuY2hhbm5lbD1jLmRlZmF1bHQ7dmFyIHU9bigxODIpO2UucmVkPXUuZGVmYXVsdDt2YXIgbD1uKDE4Myk7ZS5ncmVlbj1sLmRlZmF1bHQ7dmFyIGg9bigxODQpO2UuYmx1ZT1oLmRlZmF1bHQ7dmFyIGY9bigxODUpO2UuaHVlPWYuZGVmYXVsdDt2YXIgZD1uKDE4Nik7ZS5zYXR1cmF0aW9uPWQuZGVmYXVsdDt2YXIgcD1uKDE4Nyk7ZS5saWdodG5lc3M9cC5kZWZhdWx0O3ZhciBnPW4oMTAxKTtlLmFscGhhPWcuZGVmYXVsdDt2YXIgeT1uKDEwMSk7ZS5vcGFjaXR5PXkuZGVmYXVsdDt2YXIgdj1uKDEwMik7ZS5sdW1pbmFuY2U9di5kZWZhdWx0O3ZhciBtPW4oMTg4KTtlLmlzRGFyaz1tLmRlZmF1bHQ7dmFyIGI9bigxMDMpO2UuaXNMaWdodD1iLmRlZmF1bHQ7dmFyIHg9bigxODkpO2UuaXNWYWxpZD14LmRlZmF1bHQ7dmFyIF89bigxOTApO2Uuc2F0dXJhdGU9Xy5kZWZhdWx0O3ZhciBrPW4oMTkxKTtlLmRlc2F0dXJhdGU9ay5kZWZhdWx0O3ZhciB3PW4oMTkyKTtlLmxpZ2h0ZW49dy5kZWZhdWx0O3ZhciBFPW4oMTkzKTtlLmRhcmtlbj1FLmRlZmF1bHQ7dmFyIFQ9bigxMDQpO2Uub3BhY2lmeT1ULmRlZmF1bHQ7dmFyIEM9bigxMDQpO2UuZmFkZUluPUMuZGVmYXVsdDt2YXIgUz1uKDEwNSk7ZS50cmFuc3BhcmVudGl6ZT1TLmRlZmF1bHQ7dmFyIEE9bigxMDUpO2UuZmFkZU91dD1BLmRlZmF1bHQ7dmFyIE09bigxOTQpO2UuY29tcGxlbWVudD1NLmRlZmF1bHQ7dmFyIE89bigxOTUpO2UuZ3JheXNjYWxlPU8uZGVmYXVsdDt2YXIgRD1uKDEwNik7ZS5hZGp1c3Q9RC5kZWZhdWx0O3ZhciBOPW4oNTIpO2UuY2hhbmdlPU4uZGVmYXVsdDt2YXIgQj1uKDE5Nik7ZS5pbnZlcnQ9Qi5kZWZhdWx0O3ZhciBMPW4oMTA3KTtlLm1peD1MLmRlZmF1bHQ7dmFyIFA9bigxOTcpO2Uuc2NhbGU9UC5kZWZhdWx0fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGc6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxoOmZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MH0sczpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxsOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMDA/MTAwOnQ8MD8wOnR9LGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE/MTp0PDA/MDp0fX0sdG9MaW5lYXI6ZnVuY3Rpb24odCl7dmFyIGU9dC8yNTU7cmV0dXJuIHQ+LjAzOTI4P01hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCk6ZS8xMi45Mn0saHVlMnJnYjpmdW5jdGlvbih0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P3QrNiooZS10KSpuOm48LjU/ZTpuPDIvMz90KyhlLXQpKigyLzMtbikqNjp0fSxoc2wycmdiOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5oLGk9dC5zLGE9dC5sO2lmKDEwMD09PWkpcmV0dXJuIDIuNTUqYTtuLz0zNjAsaS89MTAwO3ZhciBvPShhLz0xMDApPC41P2EqKDEraSk6YStpLWEqaSxzPTIqYS1vO3N3aXRjaChlKXtjYXNlInIiOnJldHVybiAyNTUqci5odWUycmdiKHMsbyxuKzEvMyk7Y2FzZSJnIjpyZXR1cm4gMjU1KnIuaHVlMnJnYihzLG8sbik7Y2FzZSJiIjpyZXR1cm4gMjU1KnIuaHVlMnJnYihzLG8sbi0xLzMpfX0scmdiMmhzbDpmdW5jdGlvbih0LGUpe3ZhciBuPXQucixyPXQuZyxpPXQuYjtuLz0yNTUsci89MjU1LGkvPTI1NTt2YXIgYT1NYXRoLm1heChuLHIsaSksbz1NYXRoLm1pbihuLHIsaSkscz0oYStvKS8yO2lmKCJsIj09PWUpcmV0dXJuIDEwMCpzO2lmKGE9PT1vKXJldHVybiAwO3ZhciBjPWEtbztpZigicyI9PT1lKXJldHVybiAxMDAqKHM+LjU/Yy8oMi1hLW8pOmMvKGErbykpO3N3aXRjaChhKXtjYXNlIG46cmV0dXJuIDYwKigoci1pKS9jKyhyPGk/NjowKSk7Y2FzZSByOnJldHVybiA2MCooKGktbikvYysyKTtjYXNlIGk6cmV0dXJuIDYwKigobi1yKS9jKzQpO2RlZmF1bHQ6cmV0dXJuLTF9fX07ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXtyb3VuZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgxZTEwKnQpLzFlMTB9fTtlLmRlZmF1bHQ9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e2ZyYWMyaGV4OmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoMjU1KnQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gZS5sZW5ndGg+MT9lOiIwIitlfSxkZWMyaGV4OmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpO3JldHVybiBlLmxlbmd0aD4xP2U6IjAiK2V9fTtlLmRlZmF1bHQ9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oNzUpLGE9bigxNzcpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5jb2xvcj1lLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9dCx0aGlzLnR5cGU9bmV3IGEuZGVmYXVsdH1yZXR1cm4gdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29sb3I9ZSx0aGlzLmNoYW5nZWQ9ITEsdGhpcy5kYXRhPXQsdGhpcy50eXBlLnR5cGU9aS5UWVBFLkFMTCx0aGlzfSx0LnByb3RvdHlwZS5fZW5zdXJlSFNMPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5kYXRhLmgmJih0aGlzLmRhdGEuaD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwiaCIpKSx2b2lkIDA9PT10aGlzLmRhdGEucyYmKHRoaXMuZGF0YS5zPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJzIikpLHZvaWQgMD09PXRoaXMuZGF0YS5sJiYodGhpcy5kYXRhLmw9ci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsImwiKSl9LHQucHJvdG90eXBlLl9lbnN1cmVSR0I9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLmRhdGEuciYmKHRoaXMuZGF0YS5yPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJyIikpLHZvaWQgMD09PXRoaXMuZGF0YS5nJiYodGhpcy5kYXRhLmc9ci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsImciKSksdm9pZCAwPT09dGhpcy5kYXRhLmImJih0aGlzLmRhdGEuYj1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiYiIpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuSFNMKXx8dm9pZCAwPT09dGhpcy5kYXRhLnI/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJyIikpOnRoaXMuZGF0YS5yfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnI9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5IU0wpfHx2b2lkIDA9PT10aGlzLmRhdGEuZz8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsImciKSk6dGhpcy5kYXRhLmd9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLkhTTCl8fHZvaWQgMD09PXRoaXMuZGF0YS5iPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiYiIpKTp0aGlzLmRhdGEuYn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5iPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuUkdCKXx8dm9pZCAwPT09dGhpcy5kYXRhLmg/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJoIikpOnRoaXMuZGF0YS5ofSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmg9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5SR0IpfHx2b2lkIDA9PT10aGlzLmRhdGEucz8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsInMiKSk6dGhpcy5kYXRhLnN9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLlJHQil8fHZvaWQgMD09PXRoaXMuZGF0YS5sPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwibCIpKTp0aGlzLmRhdGEubH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5sPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5hPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtlLmRlZmF1bHQ9b30sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big3NSksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnR5cGU9ci5UWVBFLkFMTH1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSYmdGhpcy50eXBlIT09dCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjaGFuZ2UgYm90aCBSR0IgYW5kIEhTTCBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lIik7dGhpcy50eXBlPXR9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy50eXBlPXIuVFlQRS5BTEx9LHQucHJvdG90eXBlLmlzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR5cGU9PT10fSx0fSgpO2UuZGVmYXVsdD1pfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9e307ZS5ERUMySEVYPWk7Zm9yKHZhciBhPTA7YTw9MjU1O2ErKylpW2FdPXIuZGVmYXVsdC51bml0LmRlYzJoZXgoYSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOTkpLGk9e2NvbG9yczp7YWxpY2VibHVlOiIjZjBmOGZmIixhbnRpcXVld2hpdGU6IiNmYWViZDciLGFxdWE6IiMwMGZmZmYiLGFxdWFtYXJpbmU6IiM3ZmZmZDQiLGF6dXJlOiIjZjBmZmZmIixiZWlnZToiI2Y1ZjVkYyIsYmlzcXVlOiIjZmZlNGM0IixibGFjazoiIzAwMDAwMCIsYmxhbmNoZWRhbG1vbmQ6IiNmZmViY2QiLGJsdWU6IiMwMDAwZmYiLGJsdWV2aW9sZXQ6IiM4YTJiZTIiLGJyb3duOiIjYTUyYTJhIixidXJseXdvb2Q6IiNkZWI4ODciLGNhZGV0Ymx1ZToiIzVmOWVhMCIsY2hhcnRyZXVzZToiIzdmZmYwMCIsY2hvY29sYXRlOiIjZDI2OTFlIixjb3JhbDoiI2ZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IiM2NDk1ZWQiLGNvcm5zaWxrOiIjZmZmOGRjIixjcmltc29uOiIjZGMxNDNjIixjeWFuYXF1YToiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZWVuOiIjMDA2NDAwIixkYXJrZ3JleToiI2E5YTlhOSIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsZ3JleToiIzgwODA4MCIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRyYW5zcGFyZW50OiIjMDAwMDAwMDAiLHR1cnF1b2lzZToiIzQwZTBkMCIsdmlvbGV0OiIjZWU4MmVlIix3aGVhdDoiI2Y1ZGViMyIsd2hpdGU6IiNmZmZmZmYiLHdoaXRlc21va2U6IiNmNWY1ZjUiLHllbGxvdzoiI2ZmZmYwMCIseWVsbG93Z3JlZW46IiM5YWNkMzIifSxwYXJzZTpmdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTt2YXIgZT1pLmNvbG9yc1t0XTtpZihlKXJldHVybiByLmRlZmF1bHQucGFyc2UoZSl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHQuc3RyaW5naWZ5KHQpO2Zvcih2YXIgbiBpbiBpLmNvbG9ycylpZihpLmNvbG9yc1tuXT09PWUpcmV0dXJuIG59fTtlLmRlZmF1bHQ9aX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oNDUpLGE9e3JlOi9ecmdiYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSk/XHMqP1wpJC9pLHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKTtpZigxMTQ9PT1lfHw4Mj09PWUpe3ZhciBuPXQubWF0Y2goYS5yZSk7aWYobil7dmFyIG89blsxXSxzPW5bMl0sYz1uWzNdLHU9bls0XSxsPW5bNV0saD1uWzZdLGY9bls3XSxkPW5bOF07cmV0dXJuIGkuZGVmYXVsdC5zZXQoe3I6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucihzPzIuNTUqcGFyc2VGbG9hdChvKTpwYXJzZUZsb2F0KG8pKSxnOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmcodT8yLjU1KnBhcnNlRmxvYXQoYyk6cGFyc2VGbG9hdChjKSksYjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5iKGg/Mi41NSpwYXJzZUZsb2F0KGwpOnBhcnNlRmxvYXQobCkpLGE6Zj9yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKGQ/cGFyc2VGbG9hdChmKS8xMDA6cGFyc2VGbG9hdChmKSk6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3JldHVybiB0LmE8MT8icmdiYSgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQucikrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmcpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5iKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuYSkrIikiOiJyZ2IoIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LnIpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5nKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuYikrIikifX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT1uKDQ1KSxhPXtyZTovXmhzbGE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oJSk/KSk/XHMqP1wpJC9pLGh1ZVJlOi9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLF9odWUyZGVnOmZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goYS5odWVSZSk7aWYoZSl7dmFyIG49ZVsxXTtzd2l0Y2goZVsyXSl7Y2FzZSJncmFkIjpyZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCguOSpwYXJzZUZsb2F0KG4pKTtjYXNlInJhZCI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoMTgwKnBhcnNlRmxvYXQobikvTWF0aC5QSSk7Y2FzZSJ0dXJuIjpyZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCgzNjAqcGFyc2VGbG9hdChuKSl9fXJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodCkpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTA0PT09ZXx8NzI9PT1lKXt2YXIgbj10Lm1hdGNoKGEucmUpO2lmKG4pe3ZhciBvPW5bMV0scz1uWzJdLGM9blszXSx1PW5bNF0sbD1uWzVdO3JldHVybiBpLmRlZmF1bHQuc2V0KHtoOmEuX2h1ZTJkZWcobyksczpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5zKHBhcnNlRmxvYXQocykpLGw6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KGMpKSxhOnU/ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShsP3BhcnNlRmxvYXQodSkvMTAwOnBhcnNlRmxvYXQodSkpOjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4gdC5hPDE/ImhzbGEoIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmgpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5zKSsiJSwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmwpKyIlLCAiK3QuYSsiKSI6ImhzbCgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuaCkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LnMpKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQubCkrIiUpIn19O2UuZGVmYXVsdD1hfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI5KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJyIil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI5KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJnIil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI5KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJiIil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI5KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJoIil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI5KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJzIil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI5KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwMyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiFyLmRlZmF1bHQodCl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE1KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiByLmRlZmF1bHQucGFyc2UodCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJzIixlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwicyIsLWUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIixlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwibCIsLWUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIsMTgwKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNTIpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQse3M6MH0pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNSksaT1uKDEwNyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MTAwKTt2YXIgbj1yLmRlZmF1bHQucGFyc2UodCk7cmV0dXJuIG4ucj0yNTUtbi5yLG4uZz0yNTUtbi5nLG4uYj0yNTUtbi5iLGkuZGVmYXVsdChuLHQsZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9bigxNSksYT1uKDEwNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbyxzLGM9aS5kZWZhdWx0LnBhcnNlKHQpLHU9e307Zm9yKHZhciBsIGluIGUpdVtsXT0obj1jW2xdLG89ZVtsXSxzPXIuZGVmYXVsdC5jaGFubmVsLm1heFtsXSxvPjA/KHMtbikqby8xMDA6bipvLzEwMCk7cmV0dXJuIGEuZGVmYXVsdCh0LHUpfX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17R3JhcGg6big3NiksdmVyc2lvbjpuKDMwMCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LDQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTUpLGk9QXJyYXkucHJvdG90eXBlLnNwbGljZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXIoZSx0KTtyZXR1cm4hKG48MCkmJihuPT1lLmxlbmd0aC0xP2UucG9wKCk6aS5jYWxsKGUsbiwxKSwtLXRoaXMuc2l6ZSwhMCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj1yKGUsdCk7cmV0dXJuIG48MD92b2lkIDA6ZVtuXVsxXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5fX2RhdGFfXyx0KT4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fLGk9cihuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTQpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IHIsdGhpcy5zaXplPTB9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU0KSxpPW4oNzcpLGE9big3OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2Ygcil7dmFyIG89bi5fX2RhdGFfXztpZighaXx8by5sZW5ndGg8MTk5KXJldHVybiBvLnB1c2goW3QsZV0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgYShvKX1yZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemU9bi5zaXplLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNyksaT1uKDIxNCksYT1uKDExKSxvPW4oMTEwKSxzPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGM9RnVuY3Rpb24ucHJvdG90eXBlLHU9T2JqZWN0LnByb3RvdHlwZSxsPWMudG9TdHJpbmcsaD11Lmhhc093blByb3BlcnR5LGY9UmVnRXhwKCJeIitsLmNhbGwoaCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEoIWEodCl8fGkodCkpJiYocih0KT9mOnMpLnRlc3Qobyh0KSl9fSxmdW5jdGlvbih0LGUpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1ufHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKG49d2luZG93KX10LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpLGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHksbz1pLnRvU3RyaW5nLHM9cj9yLnRvU3RyaW5nVGFnOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YS5jYWxsKHQscyksbj10W3NdO3RyeXt0W3NdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaCh0KXt9dmFyIGk9by5jYWxsKHQpO3JldHVybiByJiYoZT90W3NdPW46ZGVsZXRlIHRbc10pLGl9fSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHIsaT1uKDIxNSksYT0ocj0vW14uXSskLy5leGVjKGkmJmkua2V5cyYmaS5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrcjoiIjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISFhJiZhIGluIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNilbIl9fY29yZS1qc19zaGFyZWRfXyJdO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjE4KSxpPW4oNTQpLGE9big3Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgcixtYXA6bmV3KGF8fGkpLHN0cmluZzpuZXcgcn19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMTkpLGk9bigyMjApLGE9bigyMjEpLG89bigyMjIpLHM9bigyMjMpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189cj9yKG51bGwpOnt9LHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NiksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKHIpe3ZhciBuPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09bj92b2lkIDA6bn1yZXR1cm4gaS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NiksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiByP3ZvaWQgMCE9PWVbdF06aS5jYWxsKGUsdCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsblt0XT1yJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT1lfHwibnVtYmVyIj09ZXx8InN5bWJvbCI9PWV8fCJib29sZWFuIj09ZT8iX19wcm90b19fIiE9PXQ6bnVsbD09PXR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCkuZ2V0KHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQpLmhhcyh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHRoaXMsdCksaT1uLnNpemU7cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplKz1uLnNpemU9PWk/MDoxLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NiksaT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPUFycmF5KHQpOysrbjx0OylyW25dPWUobik7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1yKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oODApLGE9bigyMSksbz17fTtvWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1vWyJbb2JqZWN0IEludDhBcnJheV0iXT1vWyJbb2JqZWN0IEludDE2QXJyYXldIl09b1siW29iamVjdCBJbnQzMkFycmF5XSJdPW9bIltvYmplY3QgVWludDhBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPW9bIltvYmplY3QgVWludDE2QXJyYXldIl09b1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxvWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1vWyJbb2JqZWN0IEFycmF5XSJdPW9bIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b1siW29iamVjdCBCb29sZWFuXSJdPW9bIltvYmplY3QgRGF0YVZpZXddIl09b1siW29iamVjdCBEYXRlXSJdPW9bIltvYmplY3QgRXJyb3JdIl09b1siW29iamVjdCBGdW5jdGlvbl0iXT1vWyJbb2JqZWN0IE1hcF0iXT1vWyJbb2JqZWN0IE51bWJlcl0iXT1vWyJbb2JqZWN0IE9iamVjdF0iXT1vWyJbb2JqZWN0IFJlZ0V4cF0iXT1vWyJbb2JqZWN0IFNldF0iXT1vWyJbb2JqZWN0IFN0cmluZ10iXT1vWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpJiZpKHQubGVuZ3RoKSYmISFvW3IodCldfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEzKShPYmplY3Qua2V5cyxPYmplY3QpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NiksaT1uKDQwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMSksaT1uKDYyKSxhPW4oMjM3KSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBhKHQpO3ZhciBlPWkodCksbj1bXTtmb3IodmFyIHMgaW4gdCkoImNvbnN0cnVjdG9yIiE9c3x8IWUmJm8uY2FsbCh0LHMpKSYmbi5wdXNoKHMpO3JldHVybiBufX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107aWYobnVsbCE9dClmb3IodmFyIG4gaW4gT2JqZWN0KHQpKWUucHVzaChuKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ2KSxpPW4oODMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ2KSxpPW4oMTE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGkodCksZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjApLGk9bigxMTgpLGE9big0MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE2KSwiRGF0YVZpZXciKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTYpLCJQcm9taXNlIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE2KSwiV2Vha01hcCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIGUmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmbi5jYWxsKHQsImluZGV4IikmJihyLmluZGV4PXQuaW5kZXgsci5pbnB1dD10LmlucHV0KSxyfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODUpLGk9bigyNDYpLGE9bigyNDcpLG89bigyNDgpLHM9bigxMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9dC5jb25zdHJ1Y3Rvcjtzd2l0Y2goZSl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIHIodCk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgYygrdCk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGkodCxuKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gcyh0LG4pO2Nhc2UiW29iamVjdCBNYXBdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGModCk7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBhKHQpO2Nhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBvKHQpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLG4uZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOCksaT1yP3IucHJvdG90eXBlOnZvaWQgMCxhPWk/aS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGE/T2JqZWN0KGEuY2FsbCh0KSk6e319fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTApLGk9big2MSksYT1uKDgxKSxvPWEmJmEuaXNNYXAscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDEpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBNYXBdIj09cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1MiksaT1uKDYxKSxhPW4oODEpLG89YSYmYS5pc1NldCxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MSksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IFNldF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtmb3IodmFyIGk9LTEsYT1PYmplY3QoZSksbz1yKGUpLHM9by5sZW5ndGg7cy0tOyl7dmFyIGM9b1t0P3M6KytpXTtpZighMT09PW4oYVtjXSxjLGEpKWJyZWFrfXJldHVybiBlfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFyKG4pKXJldHVybiB0KG4saSk7Zm9yKHZhciBhPW4ubGVuZ3RoLG89ZT9hOi0xLHM9T2JqZWN0KG4pOyhlP28tLTorK288YSkmJiExIT09aShzW29dLG8scyk7KTtyZXR1cm4gbn19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLGkpe2UodCxyLGkpJiZuLnB1c2godCl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1NyksaT1uKDI2NSksYT1uKDEzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP2EoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fHIobix0LGUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUzKSxpPW4oMTI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89bi5sZW5ndGgscz1vLGM9IWE7aWYobnVsbD09dClyZXR1cm4hcztmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIHU9bltvXTtpZihjJiZ1WzJdP3VbMV0hPT10W3VbMF1dOiEodVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHM7KXt2YXIgbD0odT1uW29dKVswXSxoPXRbbF0sZj11WzFdO2lmKGMmJnVbMl0pe2lmKHZvaWQgMD09PWgmJiEobCBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyByO2lmKGEpdmFyIHA9YShoLGYsbCx0LGUsZCk7aWYoISh2b2lkIDA9PT1wP2koZixoLDMsYSxkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1MyksaT1uKDEzMCksYT1uKDI2Miksbz1uKDI2NCkscz1uKDQxKSxjPW4oNSksdT1uKDM5KSxsPW4oNDgpLGg9IltvYmplY3QgT2JqZWN0XSIsZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixkLHAsZyl7dmFyIHk9Yyh0KSx2PWMoZSksbT15PyJbb2JqZWN0IEFycmF5XSI6cyh0KSxiPXY/IltvYmplY3QgQXJyYXldIjpzKGUpLHg9KG09IltvYmplY3QgQXJndW1lbnRzXSI9PW0/aDptKT09aCxfPShiPSJbb2JqZWN0IEFyZ3VtZW50c10iPT1iP2g6Yik9PWgsaz1tPT1iO2lmKGsmJnUodCkpe2lmKCF1KGUpKXJldHVybiExO3k9ITAseD0hMX1pZihrJiYheClyZXR1cm4gZ3x8KGc9bmV3IHIpLHl8fGwodCk/aSh0LGUsbixkLHAsZyk6YSh0LGUsbSxuLGQscCxnKTtpZighKDEmbikpe3ZhciB3PXgmJmYuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLEU9XyYmZi5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYod3x8RSl7dmFyIFQ9dz90LnZhbHVlKCk6dCxDPUU/ZS52YWx1ZSgpOmU7cmV0dXJuIGd8fChnPW5ldyByKSxwKFQsQyxuLGQsZyl9fXJldHVybiEhayYmKGd8fChnPW5ldyByKSxvKHQsZSxuLGQscCxnKSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248cjspaWYoZSh0W25dLG4sdCkpcmV0dXJuITA7cmV0dXJuITF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOCksaT1uKDEyMiksYT1uKDM2KSxvPW4oMTMwKSxzPW4oMjYzKSxjPW4oOTApLHU9cj9yLnByb3RvdHlwZTp2b2lkIDAsbD11P3UudmFsdWVPZjp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsdSxoLGYpe3N3aXRjaChuKXtjYXNlIltvYmplY3QgRGF0YVZpZXddIjppZih0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8dC5ieXRlT2Zmc2V0IT1lLmJ5dGVPZmZzZXQpcmV0dXJuITE7dD10LmJ1ZmZlcixlPWUuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fCFoKG5ldyBpKHQpLG5ldyBpKGUpKSk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gYSgrdCwrZSk7Y2FzZSJbb2JqZWN0IEVycm9yXSI6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiB0PT1lKyIiO2Nhc2UiW29iamVjdCBNYXBdIjp2YXIgZD1zO2Nhc2UiW29iamVjdCBTZXRdIjp2YXIgcD0xJnI7aWYoZHx8KGQ9YyksdC5zaXplIT1lLnNpemUmJiFwKXJldHVybiExO3ZhciBnPWYuZ2V0KHQpO2lmKGcpcmV0dXJuIGc9PWU7cnw9MixmLnNldCh0LGUpO3ZhciB5PW8oZCh0KSxkKGUpLHIsdSxoLGYpO3JldHVybiBmLmRlbGV0ZSh0KSx5O2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZihsKXJldHVybiBsLmNhbGwodCk9PWwuY2FsbChlKX1yZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe25bKytlXT1bcix0XX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE5KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEsbyxzKXt2YXIgYz0xJm4sdT1yKHQpLGw9dS5sZW5ndGg7aWYobCE9cihlKS5sZW5ndGgmJiFjKXJldHVybiExO2Zvcih2YXIgaD1sO2gtLTspe3ZhciBmPXVbaF07aWYoIShjP2YgaW4gZTppLmNhbGwoZSxmKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQodCk7aWYoZCYmcy5nZXQoZSkpcmV0dXJuIGQ9PWU7dmFyIHA9ITA7cy5zZXQodCxlKSxzLnNldChlLHQpO2Zvcih2YXIgZz1jOysraDxsOyl7dmFyIHk9dFtmPXVbaF1dLHY9ZVtmXTtpZihhKXZhciBtPWM/YSh2LHksZixlLHQscyk6YSh5LHYsZix0LGUscyk7aWYoISh2b2lkIDA9PT1tP3k9PT12fHxvKHksdixuLGEscyk6bSkpe3A9ITE7YnJlYWt9Z3x8KGc9ImNvbnN0cnVjdG9yIj09Zil9aWYocCYmIWcpe3ZhciBiPXQuY29uc3RydWN0b3IseD1lLmNvbnN0cnVjdG9yO2IhPXgmJiJjb25zdHJ1Y3RvciJpbiB0JiYiY29uc3RydWN0b3IiaW4gZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgYiYmYiBpbnN0YW5jZW9mIGImJiJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4IGluc3RhbmNlb2YgeCkmJihwPSExKX1yZXR1cm4gcy5kZWxldGUodCkscy5kZWxldGUoZSkscH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzMyksaT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkodCksbj1lLmxlbmd0aDtuLS07KXt2YXIgYT1lW25dLG89dFthXTtlW25dPVthLG8scihvKV19cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjkpLGk9bigyNjcpLGE9bigxMzYpLG89big5Mikscz1uKDEzMyksYz1uKDEzNCksdT1uKDQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0KSYmcyhlKT9jKHUodCksZSk6ZnVuY3Rpb24obil7dmFyIG89aShuLHQpO3JldHVybiB2b2lkIDA9PT1vJiZvPT09ZT9hKG4sdCk6cihlLG8sMyl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9bnVsbD09dD92b2lkIDA6cih0LGUpO3JldHVybiB2b2lkIDA9PT1pP246aX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI2OSksaT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxhPS9cXChcXCk/L2csbz1yKChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKGksKGZ1bmN0aW9uKHQsbixyLGkpe2UucHVzaChyP2kucmVwbGFjZShhLCIkMSIpOm58fHQpfSkpLGV9KSk7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCwoZnVuY3Rpb24odCl7cmV0dXJuIDUwMD09PW4uc2l6ZSYmbi5jbGVhcigpLHR9KSksbj1lLmNhY2hlO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzgpO2Z1bmN0aW9uIGkodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMscik6clswXSxhPW4uY2FjaGU7aWYoYS5oYXMoaSkpcmV0dXJuIGEuZ2V0KGkpO3ZhciBvPXQuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1hLnNldChpLG8pfHxhLG99O3JldHVybiBuLmNhY2hlPW5ldyhpLkNhY2hlfHxyKSxufWkuQ2FjaGU9cix0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpLGk9big2NiksYT1uKDUpLG89big0Mikscz1yP3IucHJvdG90eXBlOnZvaWQgMCxjPXM/cy50b1N0cmluZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGEoZSkpcmV0dXJuIGkoZSx0KSsiIjtpZihvKGUpKXJldHVybiBjP2MuY2FsbChlKToiIjt2YXIgbj1lKyIiO3JldHVybiIwIj09biYmMS9lPT0tMS8wPyItMCI6bn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmUgaW4gT2JqZWN0KHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM4KSxpPW4oMjc0KSxhPW4oOTIpLG89big0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3Iobyh0KSk6aSh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiByKGUsdCl9fX0sZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZuLmNhbGwodCxlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDgyKSxpPW4oNDEpLGE9big0Nyksbz1uKDUpLHM9bigyNCksYz1uKDM5KSx1PW4oNjIpLGw9big0OCksaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiEwO2lmKHModCkmJihvKHQpfHwic3RyaW5nIj09dHlwZW9mIHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNwbGljZXx8Yyh0KXx8bCh0KXx8YSh0KSkpcmV0dXJuIXQubGVuZ3RoO3ZhciBlPWkodCk7aWYoIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lKXJldHVybiF0LnNpemU7aWYodSh0KSlyZXR1cm4hcih0KS5sZW5ndGg7Zm9yKHZhciBuIGluIHQpaWYoaC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT0tMSxhPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IociYmYSYmKG49dFsrK2ldKTsrK2k8YTspbj1lKG4sdFtpXSxpLHQpO3JldHVybiBufX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gaSh0LChmdW5jdGlvbih0LGksYSl7bj1yPyhyPSExLHQpOmUobix0LGksYSl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDgyKSxpPW4oNDEpLGE9bigyNCksbz1uKDI4MCkscz1uKDI4MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoYSh0KSlyZXR1cm4gbyh0KT9zKHQpOnQubGVuZ3RoO3ZhciBlPWkodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lP3Quc2l6ZTpyKHQpLmxlbmd0aH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oNSksYT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwhaSh0KSYmYSh0KSYmIltvYmplY3QgU3RyaW5nXSI9PXIodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODIpLGk9bigyODMpLGE9bigyODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9hKHQpOnIodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzgpKCJsZW5ndGgiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt2YXIgbj1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXFx1ZmUwZVxcdWZlMGZdIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLnRlc3QodCl9fSxmdW5jdGlvbih0LGUpe3ZhciBuPSJbXFx1ZDgwMC1cXHVkZmZmXSIscj0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLGk9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsYT0iW15cXHVkODAwLVxcdWRmZmZdIixvPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixzPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixjPSIoPzoiK3IrInwiK2krIikiKyI/Iix1PSJbXFx1ZmUwZVxcdWZlMGZdPyIrYysoIig/OlxcdTIwMGQoPzoiK1thLG8sc10uam9pbigifCIpKyIpW1xcdWZlMGVcXHVmZTBmXT8iK2MrIikqIiksbD0iKD86IitbYStyKyI/IixyLG8scyxuXS5qb2luKCJ8IikrIikiLGg9UmVnRXhwKGkrIig/PSIraSsiKXwiK2wrdSwiZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9aC5sYXN0SW5kZXg9MDtoLnRlc3QodCk7KSsrZTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc5KSxpPW4oMTI1KSxhPW4oODgpLG89bigyNSkscz1uKDYzKSxjPW4oNSksdT1uKDM5KSxsPW4oMzcpLGg9bigxMSksZj1uKDQ4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBkPWModCkscD1kfHx1KHQpfHxmKHQpO2lmKGU9byhlLDQpLG51bGw9PW4pe3ZhciBnPXQmJnQuY29uc3RydWN0b3I7bj1wP2Q/bmV3IGc6W106aCh0KSYmbChnKT9pKHModCkpOnt9fXJldHVybihwP3I6YSkodCwoZnVuY3Rpb24odCxyLGkpe3JldHVybiBlKG4sdCxyLGkpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NCksaT1uKDY3KSxhPW4oMjkxKSxvPW4oMTQ2KSxzPWkoKGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCwxLG8sITApKX0pKTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpLGk9big0NyksYT1uKDUpLG89cj9yLmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpfHxpKHQpfHwhIShvJiZ0JiZ0W29dKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gdC5jYWxsKGUsblswXSk7Y2FzZSAyOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdLG5bMl0pfXJldHVybiB0LmFwcGx5KGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NiksaT1uKDExMSksYT1uKDM1KSxvPWk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnIoZSksd3JpdGFibGU6ITB9KX06YTt0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlKXt2YXIgbj1EYXRlLm5vdzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9bigpLGE9MTYtKGktcik7aWYocj1pLGE+MCl7aWYoKytlPj04MDApcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIGU9MDtyZXR1cm4gdC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzEpLGk9bigyOTIpLGE9bigyOTYpLG89bigxMzIpLHM9bigyOTcpLGM9big5MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdT0tMSxsPWksaD10Lmxlbmd0aCxmPSEwLGQ9W10scD1kO2lmKG4pZj0hMSxsPWE7ZWxzZSBpZihoPj0yMDApe3ZhciBnPWU/bnVsbDpzKHQpO2lmKGcpcmV0dXJuIGMoZyk7Zj0hMSxsPW8scD1uZXcgcn1lbHNlIHA9ZT9bXTpkO3Q6Zm9yKDsrK3U8aDspe3ZhciB5PXRbdV0sdj1lP2UoeSk6eTtpZih5PW58fDAhPT15P3k6MCxmJiZ2PT12KXtmb3IodmFyIG09cC5sZW5ndGg7bS0tOylpZihwW21dPT09diljb250aW51ZSB0O2UmJnAucHVzaCh2KSxkLnB1c2goeSl9ZWxzZSBsKHAsdixuKXx8KHAhPT1kJiZwLnB1c2godiksZC5wdXNoKHkpKX1yZXR1cm4gZH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI5Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISEobnVsbD09dD8wOnQubGVuZ3RoKSYmcih0LGUsMCk+LTF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDUpLGk9bigyOTQpLGE9bigyOTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGU9PWU/YSh0LGUsbik6cih0LGksbil9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9bi0xLGk9dC5sZW5ndGg7KytyPGk7KWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK3I8aTspaWYobihlLHRbcl0pKXJldHVybiEwO3JldHVybiExfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIxKSxpPW4oMjk4KSxhPW4oOTApLG89ciYmMS9hKG5ldyByKFssLTBdKSlbMV09PTEvMD9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHIodCl9Omk7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9IjIuMS44In0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApLGk9big3Nik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSksaT10LnBhcmVudChlKSxhPXt2OmV9O3JldHVybiByLmlzVW5kZWZpbmVkKG4pfHwoYS52YWx1ZT1uKSxyLmlzVW5kZWZpbmVkKGkpfHwoYS5wYXJlbnQ9aSksYX0pKX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1hcCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKSxpPXt2OmUudix3OmUud307cmV0dXJuIHIuaXNVbmRlZmluZWQoZS5uYW1lKXx8KGkubmFtZT1lLm5hbWUpLHIuaXNVbmRlZmluZWQobil8fChpLnZhbHVlPW4pLGl9KSl9dC5leHBvcnRzPXt3cml0ZTpmdW5jdGlvbih0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczphKHQpLGVkZ2VzOm8odCl9O3IuaXNVbmRlZmluZWQodC5ncmFwaCgpKXx8KGUudmFsdWU9ci5jbG9uZSh0LmdyYXBoKCkpKTtyZXR1cm4gZX0scmVhZDpmdW5jdGlvbih0KXt2YXIgZT1uZXcgaSh0Lm9wdGlvbnMpLnNldEdyYXBoKHQudmFsdWUpO3JldHVybiByLmVhY2godC5ub2RlcywoZnVuY3Rpb24odCl7ZS5zZXROb2RlKHQudix0LnZhbHVlKSx0LnBhcmVudCYmZS5zZXRQYXJlbnQodC52LHQucGFyZW50KX0pKSxyLmVhY2godC5lZGdlcywoZnVuY3Rpb24odCl7ZS5zZXRFZGdlKHt2OnQudix3OnQudyxuYW1lOnQubmFtZX0sdC52YWx1ZSl9KSksZX19fSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPXtjb21wb25lbnRzOm4oMzAzKSxkaWprc3RyYTpuKDE0OCksZGlqa3N0cmFBbGw6bigzMDQpLGZpbmRDeWNsZXM6bigzMDUpLGZsb3lkV2Fyc2hhbGw6bigzMDYpLGlzQWN5Y2xpYzpuKDMwNykscG9zdG9yZGVyOm4oMzA4KSxwcmVvcmRlcjpuKDMwOSkscHJpbTpuKDMxMCksdGFyamFuOm4oMTUwKSx0b3Bzb3J0Om4oMTUxKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbj17fSxpPVtdO2Z1bmN0aW9uIGEoaSl7ci5oYXMobixpKXx8KG5baV09ITAsZS5wdXNoKGkpLHIuZWFjaCh0LnN1Y2Nlc3NvcnMoaSksYSksci5lYWNoKHQucHJlZGVjZXNzb3JzKGkpLGEpKX1yZXR1cm4gci5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZT1bXSxhKHQpLGUubGVuZ3RoJiZpLnB1c2goZSl9KSksaX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0OCksaT1uKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnRyYW5zZm9ybSh0Lm5vZGVzKCksKGZ1bmN0aW9uKGksYSl7aVthXT1yKHQsYSxlLG4pfSkse30pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApLGk9bigxNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gci5maWx0ZXIoaSh0KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPjF8fDE9PT1lLmxlbmd0aCYmdC5oYXNFZGdlKGVbMF0sZVswXSl9KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9LGk9dC5ub2RlcygpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdF09e30sclt0XVt0XT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKChmdW5jdGlvbihlKXt0IT09ZSYmKHJbdF1bZV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkpLG4odCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi52PT09dD9uLnc6bi52LGE9ZShuKTtyW3RdW2ldPXtkaXN0YW5jZTphLHByZWRlY2Vzc29yOnR9fSkpfSkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9clt0XTtpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhPXJbbl07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1hW3RdLGk9ZVtuXSxvPWFbbl0scz1yLmRpc3RhbmNlK2kuZGlzdGFuY2U7czxvLmRpc3RhbmNlJiYoby5kaXN0YW5jZT1zLG8ucHJlZGVjZXNzb3I9aS5wcmVkZWNlc3Nvcil9KSl9KSl9KSkscn0odCxlfHxpLG58fGZ1bmN0aW9uKGUpe3JldHVybiB0Lm91dEVkZ2VzKGUpfSl9O3ZhciBpPXIuY29uc3RhbnQoMSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyKHQpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiByLkN5Y2xlRXhjZXB0aW9uKXJldHVybiExO3Rocm93IHR9cmV0dXJuITB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsZSwicG9zdCIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsInByZSIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApLGk9big3NiksYT1uKDE0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1uZXcgaSxzPXt9LGM9bmV3IGE7ZnVuY3Rpb24gdSh0KXt2YXIgcj10LnY9PT1uP3Qudzp0LnYsaT1jLnByaW9yaXR5KHIpO2lmKHZvaWQgMCE9PWkpe3ZhciBhPWUodCk7YTxpJiYoc1tyXT1uLGMuZGVjcmVhc2UocixhKSl9fWlmKDA9PT10Lm5vZGVDb3VudCgpKXJldHVybiBvO3IuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2MuYWRkKHQsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxvLnNldE5vZGUodCl9KSksYy5kZWNyZWFzZSh0Lm5vZGVzKClbMF0sMCk7dmFyIGw9ITE7Zm9yKDtjLnNpemUoKT4wOyl7aWYobj1jLnJlbW92ZU1pbigpLHIuaGFzKHMsbikpby5zZXRFZGdlKG4sc1tuXSk7ZWxzZXtpZihsKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIit0KTtsPSEwfXQubm9kZUVkZ2VzKG4pLmZvckVhY2godSl9cmV0dXJuIG99fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9bigzKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmdyYXBobGliKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigzNDUpLGE9bigzNDgpLG89bigzNDkpLHM9big4KS5ub3JtYWxpemVSYW5rcyxjPW4oMzUxKSx1PW4oOCkucmVtb3ZlRW1wdHlSYW5rcyxsPW4oMzUyKSxoPW4oMzUzKSxmPW4oMzU0KSxkPW4oMzU1KSxwPW4oMzY0KSxnPW4oOCkseT1uKDE3KS5HcmFwaDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lJiZlLmRlYnVnVGltaW5nP2cudGltZTpnLm5vdGltZTtuKCJsYXlvdXQiLChmdW5jdGlvbigpe3ZhciBlPW4oIiAgYnVpbGRMYXlvdXRHcmFwaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB5KHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSksbj1DKHQuZ3JhcGgoKSk7cmV0dXJuIGUuc2V0R3JhcGgoci5tZXJnZSh7fSxtLFQobix2KSxyLnBpY2sobixiKSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPUModC5ub2RlKG4pKTtlLnNldE5vZGUobixyLmRlZmF1bHRzKFQoaSx4KSxfKSksZS5zZXRQYXJlbnQobix0LnBhcmVudChuKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9Qyh0LmVkZ2UobikpO2Uuc2V0RWRnZShuLHIubWVyZ2Uoe30sdyxUKGksayksci5waWNrKGksRSkpKX0pKSxlfSh0KX0pKTtuKCIgIHJ1bkxheW91dCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7ZSgiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCk7ZS5yYW5rc2VwLz0yLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciByPXQuZWRnZShuKTtyLm1pbmxlbio9MiwiYyIhPT1yLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkmJigiVEIiPT09ZS5yYW5rZGlyfHwiQlQiPT09ZS5yYW5rZGlyP3Iud2lkdGgrPXIubGFiZWxvZmZzZXQ6ci5oZWlnaHQrPXIubGFiZWxvZmZzZXQpfSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlU2VsZkVkZ2VzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgbj10Lm5vZGUoZS52KTtuLnNlbGZFZGdlc3x8KG4uc2VsZkVkZ2VzPVtdKSxuLnNlbGZFZGdlcy5wdXNoKHtlOmUsbGFiZWw6dC5lZGdlKGUpfSksdC5yZW1vdmVFZGdlKGUpfX0pKX0odCl9KSksZSgiICAgIGFjeWNsaWMiLChmdW5jdGlvbigpe2kucnVuKHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoZnVuY3Rpb24oKXtsLnJ1bih0KX0pKSxlKCIgICAgcmFuayIsKGZ1bmN0aW9uKCl7byhnLmFzTm9uQ29tcG91bmRHcmFwaCh0KSl9KSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi53aWR0aCYmbi5oZWlnaHQpe3ZhciByPXQubm9kZShlLnYpLGk9e3Jhbms6KHQubm9kZShlLncpLnJhbmstci5yYW5rKS8yK3IucmFuayxlOmV9O2cuYWRkRHVtbXlOb2RlKHQsImVkZ2UtcHJveHkiLGksIl9lcCIpfX0pKX0odCl9KSksZSgiICAgIHJlbW92ZUVtcHR5UmFua3MiLChmdW5jdGlvbigpe3UodCl9KSksZSgiICAgIG5lc3RpbmdHcmFwaC5jbGVhbnVwIiwoZnVuY3Rpb24oKXtsLmNsZWFudXAodCl9KSksZSgiICAgIG5vcm1hbGl6ZVJhbmtzIiwoZnVuY3Rpb24oKXtzKHQpfSkpLGUoIiAgICBhc3NpZ25SYW5rTWluTWF4IiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9MDtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobik7aS5ib3JkZXJUb3AmJihpLm1pblJhbms9dC5ub2RlKGkuYm9yZGVyVG9wKS5yYW5rLGkubWF4UmFuaz10Lm5vZGUoaS5ib3JkZXJCb3R0b20pLnJhbmssZT1yLm1heChlLGkubWF4UmFuaykpfSkpLHQuZ3JhcGgoKS5tYXhSYW5rPWV9KHQpfSkpLGUoIiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpOyJlZGdlLXByb3h5Ij09PW4uZHVtbXkmJih0LmVkZ2Uobi5lKS5sYWJlbFJhbms9bi5yYW5rLHQucmVtb3ZlTm9kZShlKSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUucnVuIiwoZnVuY3Rpb24oKXthLnJ1bih0KX0pKSxlKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLChmdW5jdGlvbigpe2ModCl9KSksZSgiICAgIGFkZEJvcmRlclNlZ21lbnRzIiwoZnVuY3Rpb24oKXtoKHQpfSkpLGUoIiAgICBvcmRlciIsKGZ1bmN0aW9uKCl7ZCh0KX0pKSxlKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9Zy5idWlsZExheWVyTWF0cml4KHQpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgbj0wO3IuZm9yRWFjaChlLChmdW5jdGlvbihlLGkpe3ZhciBhPXQubm9kZShlKTthLm9yZGVyPWkrbixyLmZvckVhY2goYS5zZWxmRWRnZXMsKGZ1bmN0aW9uKGUpe2cuYWRkRHVtbXlOb2RlKHQsInNlbGZlZGdlIix7d2lkdGg6ZS5sYWJlbC53aWR0aCxoZWlnaHQ6ZS5sYWJlbC5oZWlnaHQscmFuazphLnJhbmssb3JkZXI6aSsgKytuLGU6ZS5lLGxhYmVsOmUubGFiZWx9LCJfc2UiKX0pKSxkZWxldGUgYS5zZWxmRWRnZXN9KSl9KSl9KHQpfSkpLGUoIiAgICBhZGp1c3RDb29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLmFkanVzdCh0KX0pKSxlKCIgICAgcG9zaXRpb24iLChmdW5jdGlvbigpe3AodCl9KSksZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpO2lmKCJzZWxmZWRnZSI9PT1uLmR1bW15KXt2YXIgcj10Lm5vZGUobi5lLnYpLGk9ci54K3Iud2lkdGgvMixhPXIueSxvPW4ueC1pLHM9ci5oZWlnaHQvMjt0LnNldEVkZ2Uobi5lLG4ubGFiZWwpLHQucmVtb3ZlTm9kZShlKSxuLmxhYmVsLnBvaW50cz1be3g6aSsyKm8vMyx5OmEtc30se3g6aSs1Km8vNix5OmEtc30se3g6aStvLHk6YX0se3g6aSs1Km8vNix5OmErc30se3g6aSsyKm8vMyx5OmErc31dLG4ubGFiZWwueD1uLngsbi5sYWJlbC55PW4ueX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2lmKHQuY2hpbGRyZW4oZSkubGVuZ3RoKXt2YXIgbj10Lm5vZGUoZSksaT10Lm5vZGUobi5ib3JkZXJUb3ApLGE9dC5ub2RlKG4uYm9yZGVyQm90dG9tKSxvPXQubm9kZShyLmxhc3Qobi5ib3JkZXJMZWZ0KSkscz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyUmlnaHQpKTtuLndpZHRoPU1hdGguYWJzKHMueC1vLngpLG4uaGVpZ2h0PU1hdGguYWJzKGEueS1pLnkpLG4ueD1vLngrbi53aWR0aC8yLG4ueT1pLnkrbi5oZWlnaHQvMn19KSksci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7ImJvcmRlciI9PT10Lm5vZGUoZSkuZHVtbXkmJnQucmVtb3ZlTm9kZShlKX0pKX0odCl9KSksZSgiICAgIG5vcm1hbGl6ZS51bmRvIiwoZnVuY3Rpb24oKXthLnVuZG8odCl9KSksZSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKHIuaGFzKG4sIngiKSlzd2l0Y2goImwiIT09bi5sYWJlbHBvcyYmInIiIT09bi5sYWJlbHBvc3x8KG4ud2lkdGgtPW4ubGFiZWxvZmZzZXQpLG4ubGFiZWxwb3Mpe2Nhc2UibCI6bi54LT1uLndpZHRoLzIrbi5sYWJlbG9mZnNldDticmVhaztjYXNlInIiOm4ueCs9bi53aWR0aC8yK24ubGFiZWxvZmZzZXR9fSkpfSh0KX0pKSxlKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLChmdW5jdGlvbigpe2YudW5kbyh0KX0pKSxlKCIgICAgdHJhbnNsYXRlR3JhcGgiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXt2YXIgZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj0wLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGE9MCxvPXQuZ3JhcGgoKSxzPW8ubWFyZ2lueHx8MCxjPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiB1KHQpe3ZhciByPXQueCxvPXQueSxzPXQud2lkdGgsYz10LmhlaWdodDtlPU1hdGgubWluKGUsci1zLzIpLG49TWF0aC5tYXgobixyK3MvMiksaT1NYXRoLm1pbihpLG8tYy8yKSxhPU1hdGgubWF4KGEsbytjLzIpfXIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3UodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5oYXMobiwieCIpJiZ1KG4pfSkpLGUtPXMsaS09YyxyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobik7ci54LT1lLHIueS09aX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgYT10LmVkZ2Uobik7ci5mb3JFYWNoKGEucG9pbnRzLChmdW5jdGlvbih0KXt0LngtPWUsdC55LT1pfSkpLHIuaGFzKGEsIngiKSYmKGEueC09ZSksci5oYXMoYSwieSIpJiYoYS55LT1pKX0pKSxvLndpZHRoPW4tZStzLG8uaGVpZ2h0PWEtaStjfSh0KX0pKSxlKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbixyLGk9dC5lZGdlKGUpLGE9dC5ub2RlKGUudiksbz10Lm5vZGUoZS53KTtpLnBvaW50cz8obj1pLnBvaW50c1swXSxyPWkucG9pbnRzW2kucG9pbnRzLmxlbmd0aC0xXSk6KGkucG9pbnRzPVtdLG49byxyPWEpLGkucG9pbnRzLnVuc2hpZnQoZy5pbnRlcnNlY3RSZWN0KGEsbikpLGkucG9pbnRzLnB1c2goZy5pbnRlcnNlY3RSZWN0KG8scikpfSkpfSh0KX0pKSxlKCIgICAgcmV2ZXJzZVBvaW50cyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtuLnJldmVyc2VkJiZuLnBvaW50cy5yZXZlcnNlKCl9KSl9KHQpfSkpLGUoIiAgICBhY3ljbGljLnVuZG8iLChmdW5jdGlvbigpe2kudW5kbyh0KX0pKX0oZSxuKX0pKSxuKCIgIHVwZGF0ZUlucHV0R3JhcGgiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciByPXQubm9kZShuKSxpPWUubm9kZShuKTtyJiYoci54PWkueCxyLnk9aS55LGUuY2hpbGRyZW4obikubGVuZ3RoJiYoci53aWR0aD1pLndpZHRoLHIuaGVpZ2h0PWkuaGVpZ2h0KSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5lZGdlKG4pLGE9ZS5lZGdlKG4pO2kucG9pbnRzPWEucG9pbnRzLHIuaGFzKGEsIngiKSYmKGkueD1hLngsaS55PWEueSl9KSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9KHQsZSl9KSl9KSl9O3ZhciB2PVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxtPXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LGI9WyJhY3ljbGljZXIiLCJyYW5rZXIiLCJyYW5rZGlyIiwiYWxpZ24iXSx4PVsid2lkdGgiLCJoZWlnaHQiXSxfPXt3aWR0aDowLGhlaWdodDowfSxrPVsibWlubGVuIiwid2VpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbG9mZnNldCJdLHc9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxFPVsibGFiZWxwb3MiXTtmdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHIubWFwVmFsdWVzKHIucGljayh0LGUpLE51bWJlcil9ZnVuY3Rpb24gQyh0KXt2YXIgZT17fTtyZXR1cm4gci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsbil7ZVtuLnRvTG93ZXJDYXNlKCldPXR9KSksZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsNSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMTUpKG4oMzE2KSk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1KSxpPW4oMjQpLGE9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sbyl7dmFyIHM9T2JqZWN0KGUpO2lmKCFpKGUpKXt2YXIgYz1yKG4sMyk7ZT1hKGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIGMoc1t0XSx0LHMpfX12YXIgdT10KGUsbixvKTtyZXR1cm4gdT4tMT9zW2M/ZVt1XTp1XTp2b2lkIDB9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQ1KSxpPW4oMjUpLGE9bigzMTcpLG89TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcz1udWxsPT10PzA6dC5sZW5ndGg7aWYoIXMpcmV0dXJuLTE7dmFyIGM9bnVsbD09bj8wOmEobik7cmV0dXJuIGM8MCYmKGM9byhzK2MsMCkpLHIodCxpKGUsMyksYyl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQpLG49ZSUxO3JldHVybiBlPT1lP24/ZS1uOmU6MH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExKSxpPW4oNDIpLGE9L15ccyt8XHMrJC9nLG89L15bLStdMHhbMC05YS1mXSskL2kscz0vXjBiWzAxXSskL2ksYz0vXjBvWzAtN10rJC9pLHU9cGFyc2VJbnQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihpKHQpKXJldHVybiBOYU47aWYocih0KSl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQudmFsdWVPZj90LnZhbHVlT2YoKTp0O3Q9cihlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9dC5yZXBsYWNlKGEsIiIpO3ZhciBuPXMudGVzdCh0KTtyZXR1cm4gbnx8Yy50ZXN0KHQpP3UodC5zbGljZSgyKSxuPzI6OCk6by50ZXN0KHQpP05hTjordH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5KSxpPW4oMTI3KSxhPW4oNDApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3Q6cih0LGkoZSksYSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIGU/dFtlLTFdOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oODgpLGE9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGU9YShlLDMpLGkodCwoZnVuY3Rpb24odCxpLGEpe3IobixpLGUodCxpLGEpKX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTUpLGk9bigzMjMpLGE9bigzNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsYSxpKTp2b2lkIDB9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PmV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjUpLGk9bigzMjgpKChmdW5jdGlvbih0LGUsbil7cih0LGUsbil9KSk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUzKSxpPW4oMTU3KSxhPW4oODkpLG89bigzMjYpLHM9bigxMSksYz1uKDQwKSx1PW4oMTU5KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sbCxoLGYpe2UhPT1uJiZhKG4sKGZ1bmN0aW9uKGEsYyl7aWYoZnx8KGY9bmV3IHIpLHMoYSkpbyhlLG4sYyxsLHQsaCxmKTtlbHNle3ZhciBkPWg/aCh1KGUsYyksYSxjKyIiLGUsbixmKTp2b2lkIDA7dm9pZCAwPT09ZCYmKGQ9YSksaShlLGMsZCl9fSksYyl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTcpLGk9bigxMTQpLGE9bigxMjMpLG89bigxMTUpLHM9bigxMjQpLGM9big0NyksdT1uKDUpLGw9bigxNDYpLGg9bigzOSksZj1uKDM3KSxkPW4oMTEpLHA9bigxNTgpLGc9big0OCkseT1uKDE1OSksdj1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG0sYix4LF8pe3ZhciBrPXkodCxuKSx3PXkoZSxuKSxFPV8uZ2V0KHcpO2lmKEUpcih0LG4sRSk7ZWxzZXt2YXIgVD14P3goayx3LG4rIiIsdCxlLF8pOnZvaWQgMCxDPXZvaWQgMD09PVQ7aWYoQyl7dmFyIFM9dSh3KSxBPSFTJiZoKHcpLE09IVMmJiFBJiZnKHcpO1Q9dyxTfHxBfHxNP3Uoayk/VD1rOmwoayk/VD1vKGspOkE/KEM9ITEsVD1pKHcsITApKTpNPyhDPSExLFQ9YSh3LCEwKSk6VD1bXTpwKHcpfHxjKHcpPyhUPWssYyhrKT9UPXYoayk6ZChrKSYmIWYoayl8fChUPXModykpKTpDPSExfUMmJihfLnNldCh3LFQpLGIoVCx3LG0seCxfKSxfLmRlbGV0ZSh3KSkscih0LG4sVCl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDYpLGk9big0MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsaSh0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NyksaT1uKDY4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKGUsbil7dmFyIHI9LTEsYT1uLmxlbmd0aCxvPWE+MT9uW2EtMV06dm9pZCAwLHM9YT4yP25bMl06dm9pZCAwO2ZvcihvPXQubGVuZ3RoPjMmJiJmdW5jdGlvbiI9PXR5cGVvZiBvPyhhLS0sbyk6dm9pZCAwLHMmJmkoblswXSxuWzFdLHMpJiYobz1hPDM/dm9pZCAwOm8sYT0xKSxlPU9iamVjdChlKTsrK3I8YTspe3ZhciBjPW5bcl07YyYmdChlLGMscixvKX1yZXR1cm4gZX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1KSxpPW4oMTYwKSxhPW4oMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGEsaSk6dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTUpLGk9bigyNSksYT1uKDE2MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP3IodCxpKGUsMiksYSk6dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTYpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiByLkRhdGUubm93KCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMzMpLGk9bigxMzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsZSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gaSh0LG4pfSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTEpLGk9bigzMzQpLGE9big2NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIG89LTEscz1lLmxlbmd0aCxjPXt9OysrbzxzOyl7dmFyIHU9ZVtvXSxsPXIodCx1KTtuKGwsdSkmJmkoYyxhKHUsdCksbCl9cmV0dXJuIGN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCksaT1uKDY1KSxhPW4oNjApLG89bigxMSkscz1uKDQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYyl7aWYoIW8odCkpcmV0dXJuIHQ7Zm9yKHZhciB1PS0xLGw9KGU9aShlLHQpKS5sZW5ndGgsaD1sLTEsZj10O251bGwhPWYmJisrdTxsOyl7dmFyIGQ9cyhlW3VdKSxwPW47aWYodSE9aCl7dmFyIGc9ZltkXTt2b2lkIDA9PT0ocD1jP2MoZyxkLGYpOnZvaWQgMCkmJihwPW8oZyk/ZzphKGVbdSsxXSk/W106e30pfXIoZixkLHApLGY9ZltkXX1yZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1NiksaT1uKDE0MyksYT1uKDE0NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCx2b2lkIDAsciksdCsiIil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMzcpLGk9big2OCksYT1uKDE1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sbyl7cmV0dXJuIG8mJiJudW1iZXIiIT10eXBlb2YgbyYmaShlLG4sbykmJihuPW89dm9pZCAwKSxlPWEoZSksdm9pZCAwPT09bj8obj1lLGU9MCk6bj1hKG4pLG89dm9pZCAwPT09bz9lPG4/MTotMTphKG8pLHIoZSxuLG8sdCl9fX0sZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLGksYSl7Zm9yKHZhciBvPS0xLHM9cihuKChlLXQpLyhpfHwxKSksMCksYz1BcnJheShzKTtzLS07KWNbYT9zOisrb109dCx0Kz1pO3JldHVybiBjfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTQpLGk9bigzMzkpLGE9big2Nyksbz1uKDY4KSxzPWEoKGZ1bmN0aW9uKHQsZSl7aWYobnVsbD09dClyZXR1cm5bXTt2YXIgbj1lLmxlbmd0aDtyZXR1cm4gbj4xJiZvKHQsZVswXSxlWzFdKT9lPVtdOm4+MiYmbyhlWzBdLGVbMV0sZVsyXSkmJihlPVtlWzBdXSksaSh0LHIoZSwxKSxbXSl9KSk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2KSxpPW4oMjUpLGE9bigxNDEpLG89bigzNDApLHM9big2MSksYz1uKDM0MSksdT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBsPS0xO2U9cihlLmxlbmd0aD9lOlt1XSxzKGkpKTt2YXIgaD1hKHQsKGZ1bmN0aW9uKHQsbixpKXtyZXR1cm57Y3JpdGVyaWE6cihlLChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKSxpbmRleDorK2wsdmFsdWU6dH19KSk7cmV0dXJuIG8oaCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gYyh0LGUsbil9KSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQubGVuZ3RoO2Zvcih0LnNvcnQoZSk7bi0tOyl0W25dPXRbbl0udmFsdWU7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPS0xLGE9dC5jcml0ZXJpYSxvPWUuY3JpdGVyaWEscz1hLmxlbmd0aCxjPW4ubGVuZ3RoOysraTxzOyl7dmFyIHU9cihhW2ldLG9baV0pO2lmKHUpcmV0dXJuIGk+PWM/dTp1KigiZGVzYyI9PW5baV0/LTE6MSl9cmV0dXJuIHQuaW5kZXgtZS5pbmRleH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0IT09ZSl7dmFyIG49dm9pZCAwIT09dCxpPW51bGw9PT10LGE9dD09dCxvPXIodCkscz12b2lkIDAhPT1lLGM9bnVsbD09PWUsdT1lPT1lLGw9cihlKTtpZighYyYmIWwmJiFvJiZ0PmV8fG8mJnMmJnUmJiFjJiYhbHx8aSYmcyYmdXx8IW4mJnV8fCFhKXJldHVybiAxO2lmKCFpJiYhbyYmIWwmJnQ8ZXx8bCYmbiYmYSYmIWkmJiFvfHxjJiZuJiZhfHwhcyYmYXx8IXUpcmV0dXJuLTF9cmV0dXJuIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCksaT1uKDM0NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodHx8W10sZXx8W10scil9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPS0xLGk9dC5sZW5ndGgsYT1lLmxlbmd0aCxvPXt9OysrcjxpOyl7dmFyIHM9cjxhP2Vbcl06dm9pZCAwO24obyx0W3JdLHMpfXJldHVybiBvfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigzNDYpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJncmVlZHkiPT09dC5ncmFwaCgpLmFjeWNsaWNlcj9pKHQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkud2VpZ2h0fX0odCkpOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLG49e30saT17fTtmdW5jdGlvbiBhKG8pe3IuaGFzKGksbyl8fChpW29dPSEwLG5bb109ITAsci5mb3JFYWNoKHQub3V0RWRnZXMobyksKGZ1bmN0aW9uKHQpe3IuaGFzKG4sdC53KT9lLnB1c2godCk6YSh0LncpfSkpLGRlbGV0ZSBuW29dKX1yZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSxhKSxlfSh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3QucmVtb3ZlRWRnZShlKSxuLmZvcndhcmROYW1lPWUubmFtZSxuLnJldmVyc2VkPSEwLHQuc2V0RWRnZShlLncsZS52LG4sci51bmlxdWVJZCgicmV2IikpfSkpfSx1bmRvOmZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihuLnJldmVyc2VkKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIHI9bi5mb3J3YXJkTmFtZTtkZWxldGUgbi5yZXZlcnNlZCxkZWxldGUgbi5mb3J3YXJkTmFtZSx0LnNldEVkZ2UoZS53LGUudixuLHIpfX0pKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oMTcpLkdyYXBoLGE9bigzNDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgaSxvPTAscz0wO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciByPW4uZWRnZSh0LnYsdC53KXx8MCxpPWUodCksYT1yK2k7bi5zZXRFZGdlKHQudix0LncsYSkscz1NYXRoLm1heChzLG4ubm9kZSh0LnYpLm91dCs9aSksbz1NYXRoLm1heChvLG4ubm9kZSh0LncpLmluKz1pKX0pKTt2YXIgdT1yLnJhbmdlKHMrbyszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhfSkpLGw9bysxO3JldHVybiByLmZvckVhY2gobi5ub2RlcygpLChmdW5jdGlvbih0KXtjKHUsbCxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6dSx6ZXJvSWR4Omx9fSh0LGV8fG8pLHU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9W10sYT1lW2UubGVuZ3RoLTFdLG89ZVswXTtmb3IoO3Qubm9kZUNvdW50KCk7KXtmb3IoO3I9by5kZXF1ZXVlKCk7KXModCxlLG4scik7Zm9yKDtyPWEuZGVxdWV1ZSgpOylzKHQsZSxuLHIpO2lmKHQubm9kZUNvdW50KCkpZm9yKHZhciBjPWUubGVuZ3RoLTI7Yz4wOy0tYylpZihyPWVbY10uZGVxdWV1ZSgpKXtpPWkuY29uY2F0KHModCxlLG4sciwhMCkpO2JyZWFrfX1yZXR1cm4gaX0obi5ncmFwaCxuLmJ1Y2tldHMsbi56ZXJvSWR4KTtyZXR1cm4gci5mbGF0dGVuKHIubWFwKHUsKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm91dEVkZ2VzKGUudixlLncpfSkpLCEwKX07dmFyIG89ci5jb25zdGFudCgxKTtmdW5jdGlvbiBzKHQsZSxuLGksYSl7dmFyIG89YT9bXTp2b2lkIDA7cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLHM9dC5ub2RlKHIudik7YSYmby5wdXNoKHt2OnIudix3OnIud30pLHMub3V0LT1pLGMoZSxuLHMpfSkpLHIuZm9yRWFjaCh0Lm91dEVkZ2VzKGkudiksKGZ1bmN0aW9uKHIpe3ZhciBpPXQuZWRnZShyKSxhPXIudyxvPXQubm9kZShhKTtvLmluLT1pLGMoZSxuLG8pfSkpLHQucmVtb3ZlTm9kZShpLnYpLG99ZnVuY3Rpb24gYyh0LGUsbil7bi5vdXQ/bi5pbj90W24ub3V0LW4uaW4rZV0uZW5xdWV1ZShuKTp0W3QubGVuZ3RoLTFdLmVucXVldWUobik6dFswXS5lbnF1ZXVlKG4pfX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9e307dC5fbmV4dD10Ll9wcmV2PXQsdGhpcy5fc2VudGluZWw9dH1mdW5jdGlvbiByKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gaSh0LGUpe2lmKCJfbmV4dCIhPT10JiYiX3ByZXYiIT09dClyZXR1cm4gZX10LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VudGluZWwsZT10Ll9wcmV2O2lmKGUhPT10KXJldHVybiByKGUpLGV9LG4ucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2VudGluZWw7dC5fcHJldiYmdC5fbmV4dCYmcih0KSx0Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj10LGUuX25leHQ9dCx0Ll9wcmV2PWV9LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5fc2VudGluZWwsbj1lLl9wcmV2O24hPT1lOyl0LnB1c2goSlNPTi5zdHJpbmdpZnkobixpKSksbj1uLl9wcmV2O3JldHVybiJbIit0LmpvaW4oIiwgIikrIl0ifX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9big4KTt0LmV4cG9ydHM9e3J1bjpmdW5jdGlvbih0KXt0LmdyYXBoKCkuZHVtbXlDaGFpbnM9W10sci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQsZSl7dmFyIG4scixhLG89ZS52LHM9dC5ub2RlKG8pLnJhbmssYz1lLncsdT10Lm5vZGUoYykucmFuayxsPWUubmFtZSxoPXQuZWRnZShlKSxmPWgubGFiZWxSYW5rO2lmKHU9PT1zKzEpcmV0dXJuO2Zvcih0LnJlbW92ZUVkZ2UoZSksYT0wLCsrcztzPHU7KythLCsrcyloLnBvaW50cz1bXSxyPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpoLGVkZ2VPYmo6ZSxyYW5rOnN9LG49aS5hZGREdW1teU5vZGUodCwiZWRnZSIsciwiX2QiKSxzPT09ZiYmKHIud2lkdGg9aC53aWR0aCxyLmhlaWdodD1oLmhlaWdodCxyLmR1bW15PSJlZGdlLWxhYmVsIixyLmxhYmVscG9zPWgubGFiZWxwb3MpLHQuc2V0RWRnZShvLG4se3dlaWdodDpoLndlaWdodH0sbCksMD09PWEmJnQuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKG4pLG89bjt0LnNldEVkZ2UobyxjLHt3ZWlnaHQ6aC53ZWlnaHR9LGwpfSh0LGUpfSkpfSx1bmRvOmZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKGUpe3ZhciBuLHI9dC5ub2RlKGUpLGk9ci5lZGdlTGFiZWw7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosaSk7ci5kdW1teTspbj10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLGkucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksImVkZ2UtbGFiZWwiPT09ci5kdW1teSYmKGkueD1yLngsaS55PXIueSxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpLGU9bixyPXQubm9kZShlKX0pKX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjkpLmxvbmdlc3RQYXRoLGk9bigxNjQpLGE9bigzNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtzd2l0Y2godC5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOnModCk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjohZnVuY3Rpb24odCl7cih0KSxpKHQpfSh0KTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6byh0KTticmVhaztkZWZhdWx0OnModCl9fTt2YXIgbz1yO2Z1bmN0aW9uIHModCl7YSh0KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMTY0KSxhPW4oNjkpLnNsYWNrLG89big2OSkubG9uZ2VzdFBhdGgscz1uKDE3KS5hbGcucHJlb3JkZXIsYz1uKDE3KS5hbGcucG9zdG9yZGVyLHU9big4KS5zaW1wbGlmeTtmdW5jdGlvbiBsKHQpe3Q9dSh0KSxvKHQpO3ZhciBlLG49aSh0KTtmb3IoZChuKSxoKG4sdCk7ZT1nKG4pOyl2KG4sdCxlLHkobix0LGUpKX1mdW5jdGlvbiBoKHQsZSl7dmFyIG49Yyh0LHQubm9kZXMoKSk7bj1uLnNsaWNlKDAsbi5sZW5ndGgtMSksci5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4peyFmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5ub2RlKG4pLnBhcmVudDt0LmVkZ2UobixyKS5jdXR2YWx1ZT1mKHQsZSxuKX0odCxlLG4pfSkpfWZ1bmN0aW9uIGYodCxlLG4pe3ZhciBpPXQubm9kZShuKS5wYXJlbnQsYT0hMCxvPWUuZWRnZShuLGkpLHM9MDtyZXR1cm4gb3x8KGE9ITEsbz1lLmVkZ2UoaSxuKSkscz1vLndlaWdodCxyLmZvckVhY2goZS5ub2RlRWRnZXMobiksKGZ1bmN0aW9uKHIpe3ZhciBvLGMsdT1yLnY9PT1uLGw9dT9yLnc6ci52O2lmKGwhPT1pKXt2YXIgaD11PT09YSxmPWUuZWRnZShyKS53ZWlnaHQ7aWYocys9aD9mOi1mLG89bixjPWwsdC5oYXNFZGdlKG8sYykpe3ZhciBkPXQuZWRnZShuLGwpLmN1dHZhbHVlO3MrPWg/LWQ6ZH19fSkpLHN9ZnVuY3Rpb24gZCh0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dC5ub2RlcygpWzBdKSxwKHQse30sMSxlKX1mdW5jdGlvbiBwKHQsZSxuLGksYSl7dmFyIG89bixzPXQubm9kZShpKTtyZXR1cm4gZVtpXT0hMCxyLmZvckVhY2godC5uZWlnaGJvcnMoaSksKGZ1bmN0aW9uKGEpe3IuaGFzKGUsYSl8fChuPXAodCxlLG4sYSxpKSl9KSkscy5sb3c9byxzLmxpbT1uKyssYT9zLnBhcmVudD1hOmRlbGV0ZSBzLnBhcmVudCxufWZ1bmN0aW9uIGcodCl7cmV0dXJuIHIuZmluZCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkuY3V0dmFsdWU8MH0pKX1mdW5jdGlvbiB5KHQsZSxuKXt2YXIgaT1uLnYsbz1uLnc7ZS5oYXNFZGdlKGksbyl8fChpPW4udyxvPW4udik7dmFyIHM9dC5ub2RlKGkpLGM9dC5ub2RlKG8pLHU9cyxsPSExO3MubGltPmMubGltJiYodT1jLGw9ITApO3ZhciBoPXIuZmlsdGVyKGUuZWRnZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIGw9PT1tKHQsdC5ub2RlKGUudiksdSkmJmwhPT1tKHQsdC5ub2RlKGUudyksdSl9KSk7cmV0dXJuIHIubWluQnkoaCwoZnVuY3Rpb24odCl7cmV0dXJuIGEoZSx0KX0pKX1mdW5jdGlvbiB2KHQsZSxuLGkpe3ZhciBhPW4udixvPW4udzt0LnJlbW92ZUVkZ2UoYSxvKSx0LnNldEVkZ2UoaS52LGkudyx7fSksZCh0KSxoKHQsZSksZnVuY3Rpb24odCxlKXt2YXIgbj1yLmZpbmQodC5ub2RlcygpLChmdW5jdGlvbih0KXtyZXR1cm4hZS5ub2RlKHQpLnBhcmVudH0pKSxpPXModCxuKTtpPWkuc2xpY2UoMSksci5mb3JFYWNoKGksKGZ1bmN0aW9uKG4pe3ZhciByPXQubm9kZShuKS5wYXJlbnQsaT1lLmVkZ2UobixyKSxhPSExO2l8fChpPWUuZWRnZShyLG4pLGE9ITApLGUubm9kZShuKS5yYW5rPWUubm9kZShyKS5yYW5rKyhhP2kubWlubGVuOi1pLm1pbmxlbil9KSl9KHQsZSl9ZnVuY3Rpb24gbSh0LGUsbil7cmV0dXJuIG4ubG93PD1lLmxpbSYmZS5saW08PW4ubGltfXQuZXhwb3J0cz1sLGwuaW5pdExvd0xpbVZhbHVlcz1kLGwuaW5pdEN1dFZhbHVlcz1oLGwuY2FsY0N1dFZhbHVlPWYsbC5sZWF2ZUVkZ2U9ZyxsLmVudGVyRWRnZT15LGwuZXhjaGFuZ2VFZGdlcz12fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj0wO2Z1bmN0aW9uIGkoYSl7dmFyIG89bjtyLmZvckVhY2godC5jaGlsZHJlbihhKSxpKSxlW2FdPXtsb3c6byxsaW06bisrfX1yZXR1cm4gci5mb3JFYWNoKHQuY2hpbGRyZW4oKSxpKSxlfSh0KTtyLmZvckVhY2godC5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbihuKXtmb3IodmFyIHI9dC5ub2RlKG4pLGk9ci5lZGdlT2JqLGE9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVtdLHM9W10sYz1NYXRoLm1pbihlW25dLmxvdyxlW3JdLmxvdyksdT1NYXRoLm1heChlW25dLmxpbSxlW3JdLmxpbSk7aT1uO2Rve2k9dC5wYXJlbnQoaSksby5wdXNoKGkpfXdoaWxlKGkmJihlW2ldLmxvdz5jfHx1PmVbaV0ubGltKSk7YT1pLGk9cjtmb3IoOyhpPXQucGFyZW50KGkpKSE9PWE7KXMucHVzaChpKTtyZXR1cm57cGF0aDpvLmNvbmNhdChzLnJldmVyc2UoKSksbGNhOmF9fSh0LGUsaS52LGkudyksbz1hLnBhdGgscz1hLmxjYSxjPTAsdT1vW2NdLGw9ITA7biE9PWkudzspe2lmKHI9dC5ub2RlKG4pLGwpe2Zvcig7KHU9b1tjXSkhPT1zJiZ0Lm5vZGUodSkubWF4UmFuazxyLnJhbms7KWMrKzt1PT09cyYmKGw9ITEpfWlmKCFsKXtmb3IoO2M8by5sZW5ndGgtMSYmdC5ub2RlKHU9b1tjKzFdKS5taW5SYW5rPD1yLnJhbms7KWMrKzt1PW9bY119dC5zZXRQYXJlbnQobix1KSxuPXQuc3VjY2Vzc29ycyhuKVswXX19KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oOCk7dC5leHBvcnRzPXtydW46ZnVuY3Rpb24odCl7dmFyIGU9aS5hZGREdW1teU5vZGUodCwicm9vdCIse30sIl9yb290Iiksbj1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24obil7IWZ1bmN0aW9uIG4oaSxhKXt2YXIgbz10LmNoaWxkcmVuKGkpO28mJm8ubGVuZ3RoJiZyLmZvckVhY2gobywoZnVuY3Rpb24odCl7bih0LGErMSl9KSk7ZVtpXT1hfShuLDEpfSkpLGV9KHQpLGE9ci5tYXgoci52YWx1ZXMobikpLTEsbz0yKmErMTt0LmdyYXBoKCkubmVzdGluZ1Jvb3Q9ZSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt0LmVkZ2UoZSkubWlubGVuKj1vfSkpO3ZhciBzPWZ1bmN0aW9uKHQpe3JldHVybiByLnJlZHVjZSh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUrdC5lZGdlKG4pLndlaWdodH0pLDApfSh0KSsxO3IuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKGMpeyFmdW5jdGlvbiB0KGUsbixhLG8scyxjLHUpe3ZhciBsPWUuY2hpbGRyZW4odSk7aWYoIWwubGVuZ3RoKXJldHVybiB2b2lkKHUhPT1uJiZlLnNldEVkZ2Uobix1LHt3ZWlnaHQ6MCxtaW5sZW46YX0pKTt2YXIgaD1pLmFkZEJvcmRlck5vZGUoZSwiX2J0IiksZj1pLmFkZEJvcmRlck5vZGUoZSwiX2JiIiksZD1lLm5vZGUodSk7ZS5zZXRQYXJlbnQoaCx1KSxkLmJvcmRlclRvcD1oLGUuc2V0UGFyZW50KGYsdSksZC5ib3JkZXJCb3R0b209ZixyLmZvckVhY2gobCwoZnVuY3Rpb24ocil7dChlLG4sYSxvLHMsYyxyKTt2YXIgaT1lLm5vZGUociksbD1pLmJvcmRlclRvcD9pLmJvcmRlclRvcDpyLGQ9aS5ib3JkZXJCb3R0b20/aS5ib3JkZXJCb3R0b206cixwPWkuYm9yZGVyVG9wP286MipvLGc9bCE9PWQ/MTpzLWNbdV0rMTtlLnNldEVkZ2UoaCxsLHt3ZWlnaHQ6cCxtaW5sZW46ZyxuZXN0aW5nRWRnZTohMH0pLGUuc2V0RWRnZShkLGYse3dlaWdodDpwLG1pbmxlbjpnLG5lc3RpbmdFZGdlOiEwfSl9KSksZS5wYXJlbnQodSl8fGUuc2V0RWRnZShuLGgse3dlaWdodDowLG1pbmxlbjpzK2NbdV19KX0odCxlLG8scyxhLG4sYyl9KSksdC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPW99LGNsZWFudXA6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpO3QucmVtb3ZlTm9kZShlLm5lc3RpbmdSb290KSxkZWxldGUgZS5uZXN0aW5nUm9vdCxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt0LmVkZ2UoZSkubmVzdGluZ0VkZ2UmJnQucmVtb3ZlRWRnZShlKX0pKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oOCk7ZnVuY3Rpb24gYSh0LGUsbixyLGEsbyl7dmFyIHM9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6ZX0sYz1hW2VdW28tMV0sdT1pLmFkZER1bW15Tm9kZSh0LCJib3JkZXIiLHMsbik7YVtlXVtvXT11LHQuc2V0UGFyZW50KHUsciksYyYmdC5zZXRFZGdlKGMsdSx7d2VpZ2h0OjF9KX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24gZShuKXt2YXIgaT10LmNoaWxkcmVuKG4pLG89dC5ub2RlKG4pO2lmKGkubGVuZ3RoJiZyLmZvckVhY2goaSxlKSxyLmhhcyhvLCJtaW5SYW5rIikpe28uYm9yZGVyTGVmdD1bXSxvLmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgcz1vLm1pblJhbmssYz1vLm1heFJhbmsrMTtzPGM7KytzKWEodCwiYm9yZGVyTGVmdCIsIl9ibCIsbixvLHMpLGEodCwiYm9yZGVyUmlnaHQiLCJfYnIiLG4sbyxzKX19KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7ZnVuY3Rpb24gaSh0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXthKHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7YSh0LmVkZ2UoZSkpfSkpfWZ1bmN0aW9uIGEodCl7dmFyIGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWV9ZnVuY3Rpb24gbyh0KXt0Lnk9LXQueX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQueDt0Lng9dC55LHQueT1lfXQuZXhwb3J0cz17YWRqdXN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7ImxyIiE9PWUmJiJybCIhPT1lfHxpKHQpfSx1bmRvOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7ImJ0IiE9PWUmJiJybCIhPT1lfHxmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtvKHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuZm9yRWFjaChuLnBvaW50cyxvKSxyLmhhcyhuLCJ5IikmJm8obil9KSl9KHQpOyJsciIhPT1lJiYicmwiIT09ZXx8KCFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtzKHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuZm9yRWFjaChuLnBvaW50cyxzKSxyLmhhcyhuLCJ4IikmJnMobil9KSl9KHQpLGkodCkpfX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMzU2KSxhPW4oMzU3KSxvPW4oMzU4KSxzPW4oMzYyKSxjPW4oMzYzKSx1PW4oMTcpLkdyYXBoLGw9big4KTtmdW5jdGlvbiBoKHQsZSxuKXtyZXR1cm4gci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHModCxlLG4pfSkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgbj1uZXcgdTtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIGk9dC5ncmFwaCgpLnJvb3QsYT1vKHQsaSxuLGUpO3IuZm9yRWFjaChhLnZzLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpLGModCxuLGEudnMpfSkpfWZ1bmN0aW9uIGQodCxlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSl9KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWwubWF4UmFuayh0KSxuPWgodCxyLnJhbmdlKDEsZSsxKSwiaW5FZGdlcyIpLG89aCh0LHIucmFuZ2UoZS0xLC0xLC0xKSwib3V0RWRnZXMiKSxzPWkodCk7ZCh0LHMpO2Zvcih2YXIgYyx1PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAsZz0wO2c8NDsrK3AsKytnKXtmKHAlMj9uOm8scCU0Pj0yKSxzPWwuYnVpbGRMYXllck1hdHJpeCh0KTt2YXIgeT1hKHQscyk7eTx1JiYoZz0wLGM9ci5jbG9uZURlZXAocyksdT15KX1kKHQsYyl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49ci5maWx0ZXIodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4hdC5jaGlsZHJlbihlKS5sZW5ndGh9KSksaT1yLm1heChyLm1hcChuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpLGE9ci5tYXAoci5yYW5nZShpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3ZhciBvPXIuc29ydEJ5KG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKTtyZXR1cm4gci5mb3JFYWNoKG8sKGZ1bmN0aW9uIG4oaSl7aWYoci5oYXMoZSxpKSlyZXR1cm47ZVtpXT0hMDt2YXIgbz10Lm5vZGUoaSk7YVtvLnJhbmtdLnB1c2goaSksci5mb3JFYWNoKHQuc3VjY2Vzc29ycyhpKSxuKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO2Z1bmN0aW9uIGkodCxlLG4pe2Zvcih2YXIgaT1yLnppcE9iamVjdChuLHIubWFwKG4sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSkpLGE9ci5mbGF0dGVuKHIubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybiByLnNvcnRCeShyLm1hcCh0Lm91dEVkZ2VzKGUpLChmdW5jdGlvbihlKXtyZXR1cm57cG9zOmlbZS53XSx3ZWlnaHQ6dC5lZGdlKGUpLndlaWdodH19KSksInBvcyIpfSkpLCEwKSxvPTE7bzxuLmxlbmd0aDspbzw8PTE7dmFyIHM9MipvLTE7by09MTt2YXIgYz1yLm1hcChuZXcgQXJyYXkocyksKGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSksdT0wO3JldHVybiByLmZvckVhY2goYS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnBvcytvO2NbZV0rPXQud2VpZ2h0O2Zvcih2YXIgbj0wO2U+MDspZSUyJiYobis9Y1tlKzFdKSxjW2U9ZS0xPj4xXSs9dC53ZWlnaHQ7dSs9dC53ZWlnaHQqbn0pKSksdX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPTE7cjxlLmxlbmd0aDsrK3Ipbis9aSh0LGVbci0xXSxlW3JdKTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9bigzNTkpLGE9bigzNjApLG89bigzNjEpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixzLGMpe3ZhciB1PWUuY2hpbGRyZW4obiksbD1lLm5vZGUobiksaD1sP2wuYm9yZGVyTGVmdDp2b2lkIDAsZj1sP2wuYm9yZGVyUmlnaHQ6dm9pZCAwLGQ9e307aCYmKHU9ci5maWx0ZXIodSwoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1oJiZ0IT09Zn0pKSk7dmFyIHA9aShlLHUpO3IuZm9yRWFjaChwLChmdW5jdGlvbihuKXtpZihlLmNoaWxkcmVuKG4udikubGVuZ3RoKXt2YXIgaT10KGUsbi52LHMsYyk7ZFtuLnZdPWksci5oYXMoaSwiYmFyeWNlbnRlciIpJiYoYT1uLG89aSxyLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcik/KGEuYmFyeWNlbnRlcj1vLmJhcnljZW50ZXIsYS53ZWlnaHQ9by53ZWlnaHQpOihhLmJhcnljZW50ZXI9KGEuYmFyeWNlbnRlciphLndlaWdodCtvLmJhcnljZW50ZXIqby53ZWlnaHQpLyhhLndlaWdodCtvLndlaWdodCksYS53ZWlnaHQrPW8ud2VpZ2h0KSl9dmFyIGEsb30pKTt2YXIgZz1hKHAscyk7IWZ1bmN0aW9uKHQsZSl7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3QudnM9ci5mbGF0dGVuKHQudnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT9lW3RdLnZzOnR9KSksITApfSkpfShnLGQpO3ZhciB5PW8oZyxjKTtpZihoJiYoeS52cz1yLmZsYXR0ZW4oW2gseS52cyxmXSwhMCksZS5wcmVkZWNlc3NvcnMoaCkubGVuZ3RoKSl7dmFyIHY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGgpWzBdKSxtPWUubm9kZShlLnByZWRlY2Vzc29ycyhmKVswXSk7ci5oYXMoeSwiYmFyeWNlbnRlciIpfHwoeS5iYXJ5Y2VudGVyPTAseS53ZWlnaHQ9MCkseS5iYXJ5Y2VudGVyPSh5LmJhcnljZW50ZXIqeS53ZWlnaHQrdi5vcmRlcittLm9yZGVyKS8oeS53ZWlnaHQrMikseS53ZWlnaHQrPTJ9cmV0dXJuIHl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5tYXAoZSwoZnVuY3Rpb24oZSl7dmFyIG49dC5pbkVkZ2VzKGUpO2lmKG4ubGVuZ3RoKXt2YXIgaT1yLnJlZHVjZShuLChmdW5jdGlvbihlLG4pe3ZhciByPXQuZWRnZShuKSxpPXQubm9kZShuLnYpO3JldHVybntzdW06ZS5zdW0rci53ZWlnaHQqaS5vcmRlcix3ZWlnaHQ6ZS53ZWlnaHQrci53ZWlnaHR9fSkse3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6ZSxiYXJ5Y2VudGVyOmkuc3VtL2kud2VpZ2h0LHdlaWdodDppLndlaWdodH19cmV0dXJue3Y6ZX19KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTtyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fChpLmJhcnljZW50ZXI9dC5iYXJ5Y2VudGVyLGkud2VpZ2h0PXQud2VpZ2h0KX0pKSxyLmZvckVhY2goZS5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgZT1uW3Qudl0saT1uW3Qud107ci5pc1VuZGVmaW5lZChlKXx8ci5pc1VuZGVmaW5lZChpKXx8KGkuaW5kZWdyZWUrKyxlLm91dC5wdXNoKG5bdC53XSkpfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UubWVyZ2VkfHwoci5pc1VuZGVmaW5lZChlLmJhcnljZW50ZXIpfHxyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmZnVuY3Rpb24odCxlKXt2YXIgbj0wLHI9MDt0LndlaWdodCYmKG4rPXQuYmFyeWNlbnRlcip0LndlaWdodCxyKz10LndlaWdodCk7ZS53ZWlnaHQmJihuKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQscis9ZS53ZWlnaHQpO3QudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPW4vcix0LndlaWdodD1yLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH0odCxlKX19ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24obil7bi5pbi5wdXNoKGUpLDA9PS0tbi5pbmRlZ3JlZSYmdC5wdXNoKG4pfX1mb3IoO3QubGVuZ3RoOyl7dmFyIGE9dC5wb3AoKTtlLnB1c2goYSksci5mb3JFYWNoKGEuaW4ucmV2ZXJzZSgpLG4oYSkpLHIuZm9yRWFjaChhLm91dCxpKGEpKX1yZXR1cm4gci5tYXAoci5maWx0ZXIoZSwoZnVuY3Rpb24odCl7cmV0dXJuIXQubWVyZ2VkfSkpLChmdW5jdGlvbih0KXtyZXR1cm4gci5waWNrKHQsWyJ2cyIsImkiLCJiYXJ5Y2VudGVyIiwid2VpZ2h0Il0pfSkpfShyLmZpbHRlcihuLChmdW5jdGlvbih0KXtyZXR1cm4hdC5pbmRlZ3JlZX0pKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oOCk7ZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpO2UubGVuZ3RoJiYoaT1yLmxhc3QoZSkpLmk8PW47KWUucG9wKCksdC5wdXNoKGkudnMpLG4rKztyZXR1cm4gbn10LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLnBhcnRpdGlvbih0LChmdW5jdGlvbih0KXtyZXR1cm4gci5oYXModCwiYmFyeWNlbnRlciIpfSkpLG89bi5saHMscz1yLnNvcnRCeShuLnJocywoZnVuY3Rpb24odCl7cmV0dXJuLXQuaX0pKSxjPVtdLHU9MCxsPTAsaD0wO28uc29ydCgoZj0hIWUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5iYXJ5Y2VudGVyPGUuYmFyeWNlbnRlcj8tMTp0LmJhcnljZW50ZXI+ZS5iYXJ5Y2VudGVyPzE6Zj9lLmktdC5pOnQuaS1lLml9KSksaD1hKGMscyxoKSxyLmZvckVhY2gobywoZnVuY3Rpb24odCl7aCs9dC52cy5sZW5ndGgsYy5wdXNoKHQudnMpLHUrPXQuYmFyeWNlbnRlcip0LndlaWdodCxsKz10LndlaWdodCxoPWEoYyxzLGgpfSkpO3ZhciBmO3ZhciBkPXt2czpyLmZsYXR0ZW4oYywhMCl9O2wmJihkLmJhcnljZW50ZXI9dS9sLGQud2VpZ2h0PWwpO3JldHVybiBkfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDE3KS5HcmFwaDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWZ1bmN0aW9uKHQpe3ZhciBlO2Zvcig7dC5oYXNOb2RlKGU9ci51bmlxdWVJZCgiX3Jvb3QiKSk7KTtyZXR1cm4gZX0odCksbz1uZXcgaSh7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDphfSkuc2V0RGVmYXVsdE5vZGVMYWJlbCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKX0pKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oaSl7dmFyIHM9dC5ub2RlKGkpLGM9dC5wYXJlbnQoaSk7KHMucmFuaz09PWV8fHMubWluUmFuazw9ZSYmZTw9cy5tYXhSYW5rKSYmKG8uc2V0Tm9kZShpKSxvLnNldFBhcmVudChpLGN8fGEpLHIuZm9yRWFjaCh0W25dKGkpLChmdW5jdGlvbihlKXt2YXIgbj1lLnY9PT1pP2UudzplLnYsYT1vLmVkZ2UobixpKSxzPXIuaXNVbmRlZmluZWQoYSk/MDphLndlaWdodDtvLnNldEVkZ2UobixpLHt3ZWlnaHQ6dC5lZGdlKGUpLndlaWdodCtzfSl9KSksci5oYXMocywibWluUmFuayIpJiZvLnNldE5vZGUoaSx7Ym9yZGVyTGVmdDpzLmJvcmRlckxlZnRbZV0sYm9yZGVyUmlnaHQ6cy5ib3JkZXJSaWdodFtlXX0pKX0pKSxvfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXt9O3IuZm9yRWFjaChuLChmdW5jdGlvbihuKXtmb3IodmFyIHIsbyxzPXQucGFyZW50KG4pO3M7KXtpZigocj10LnBhcmVudChzKSk/KG89YVtyXSxhW3JdPXMpOihvPWksaT1zKSxvJiZvIT09cylyZXR1cm4gdm9pZCBlLnNldEVkZ2UobyxzKTtzPXJ9fSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9big4KSxhPW4oMzY1KS5wb3NpdGlvblg7dC5leHBvcnRzPWZ1bmN0aW9uKHQpeyhmdW5jdGlvbih0KXt2YXIgZT1pLmJ1aWxkTGF5ZXJNYXRyaXgodCksbj10LmdyYXBoKCkucmFua3NlcCxhPTA7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBpPXIubWF4KHIubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkuaGVpZ2h0fSkpKTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dC5ub2RlKGUpLnk9YStpLzJ9KSksYSs9aStufSkpfSkodD1pLmFzTm9uQ29tcG91bmRHcmFwaCh0KSksci5mb3JFYWNoKGEodCksKGZ1bmN0aW9uKGUsbil7dC5ub2RlKG4pLng9ZX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMTcpLkdyYXBoLGE9big4KTtmdW5jdGlvbiBvKHQsZSl7dmFyIG49e307cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsaSl7dmFyIGE9MCxvPTAscz1lLmxlbmd0aCx1PXIubGFzdChpKTtyZXR1cm4gci5mb3JFYWNoKGksKGZ1bmN0aW9uKGUsbCl7dmFyIGg9ZnVuY3Rpb24odCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIHIuZmluZCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5kdW1teX0pKX0odCxlKSxmPWg/dC5ub2RlKGgpLm9yZGVyOnM7KGh8fGU9PT11KSYmKHIuZm9yRWFjaChpLnNsaWNlKG8sbCsxKSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUociksbz1pLm9yZGVyOyEobzxhfHxmPG8pfHxpLmR1bW15JiZ0Lm5vZGUoZSkuZHVtbXl8fGMobixyLGUpfSkpfSkpLG89bCsxLGE9Zil9KSksaX0pKSxufWZ1bmN0aW9uIHModCxlKXt2YXIgbj17fTtmdW5jdGlvbiBpKGUsaSxhLG8scyl7dmFyIHU7ci5mb3JFYWNoKHIucmFuZ2UoaSxhKSwoZnVuY3Rpb24oaSl7dT1lW2ldLHQubm9kZSh1KS5kdW1teSYmci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKHUpLChmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSk7ci5kdW1teSYmKHIub3JkZXI8b3x8ci5vcmRlcj5zKSYmYyhuLGUsdSl9KSl9KSl9cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsbil7dmFyIGEsbz0tMSxzPTA7cmV0dXJuIHIuZm9yRWFjaChuLChmdW5jdGlvbihyLGMpe2lmKCJib3JkZXIiPT09dC5ub2RlKHIpLmR1bW15KXt2YXIgdT10LnByZWRlY2Vzc29ycyhyKTt1Lmxlbmd0aCYmKGE9dC5ub2RlKHVbMF0pLm9yZGVyLGkobixzLGMsbyxhKSxzPWMsbz1hKX1pKG4scyxuLmxlbmd0aCxhLGUubGVuZ3RoKX0pKSxufSkpLG59ZnVuY3Rpb24gYyh0LGUsbil7aWYoZT5uKXt2YXIgcj1lO2U9bixuPXJ9dmFyIGk9dFtlXTtpfHwodFtlXT1pPXt9KSxpW25dPSEwfWZ1bmN0aW9uIHUodCxlLG4pe2lmKGU+bil7dmFyIGk9ZTtlPW4sbj1pfXJldHVybiByLmhhcyh0W2VdLG4pfWZ1bmN0aW9uIGwodCxlLG4saSl7dmFyIGE9e30sbz17fSxzPXt9O3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7YVt0XT10LG9bdF09dCxzW3RdPWV9KSl9KSksci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3ZhciBlPS0xO3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgYz1pKHQpO2lmKGMubGVuZ3RoKWZvcih2YXIgbD0oKGM9ci5zb3J0QnkoYywoZnVuY3Rpb24odCl7cmV0dXJuIHNbdF19KSkpLmxlbmd0aC0xKS8yLGg9TWF0aC5mbG9vcihsKSxmPU1hdGguY2VpbChsKTtoPD1mOysraCl7dmFyIGQ9Y1toXTtvW3RdPT09dCYmZTxzW2RdJiYhdShuLHQsZCkmJihvW2RdPXQsb1t0XT1hW3RdPWFbZF0sZT1zW2RdKX19KSl9KSkse3Jvb3Q6YSxhbGlnbjpvfX1mdW5jdGlvbiBoKHQsZSxuLGEsbyl7dmFyIHM9e30sYz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz1uZXcgaSxzPXQuZ3JhcGgoKSxjPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzLGM9aS5ub2RlKGEpLHU9aS5ub2RlKG8pLGw9MDtpZihsKz1jLndpZHRoLzIsci5oYXMoYywibGFiZWxwb3MiKSlzd2l0Y2goYy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOnM9LWMud2lkdGgvMjticmVhaztjYXNlInIiOnM9Yy53aWR0aC8yfWlmKHMmJihsKz1uP3M6LXMpLHM9MCxsKz0oYy5kdW1teT9lOnQpLzIsbCs9KHUuZHVtbXk/ZTp0KS8yLGwrPXUud2lkdGgvMixyLmhhcyh1LCJsYWJlbHBvcyIpKXN3aXRjaCh1LmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz11LndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpzPS11LndpZHRoLzJ9cmV0dXJuIHMmJihsKz1uP3M6LXMpLHM9MCxsfX0ocy5ub2Rlc2VwLHMuZWRnZXNlcCxhKTtyZXR1cm4gci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKG8uc2V0Tm9kZShyKSxpKXt2YXIgYT1uW2ldLHM9by5lZGdlKGEscik7by5zZXRFZGdlKGEscixNYXRoLm1heChjKHQsZSxpKSxzfHwwKSl9aT1lfSkpfSkpLG99KHQsZSxuLG8pLHU9bz8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciBuPWMubm9kZXMoKSxyPW4ucG9wKCksaT17fTtyOylpW3JdP3Qocik6KGlbcl09ITAsbi5wdXNoKHIpLG49bi5jb25jYXQoZShyKSkpLHI9bi5wb3AoKX1yZXR1cm4gbCgoZnVuY3Rpb24odCl7c1t0XT1jLmluRWRnZXModCkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LHNbZS52XStjLmVkZ2UoZSkpfSksMCl9KSxjLnByZWRlY2Vzc29ycy5iaW5kKGMpKSxsKChmdW5jdGlvbihlKXt2YXIgbj1jLm91dEVkZ2VzKGUpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4odCxzW2Uud10tYy5lZGdlKGUpKX0pLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscj10Lm5vZGUoZSk7biE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmci5ib3JkZXJUeXBlIT09dSYmKHNbZV09TWF0aC5tYXgoc1tlXSxuKSl9KSxjLnN1Y2Nlc3NvcnMuYmluZChjKSksci5mb3JFYWNoKGEsKGZ1bmN0aW9uKHQpe3NbdF09c1tuW3RdXX0pKSxzfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gci5taW5CeShyLnZhbHVlcyhlKSwoZnVuY3Rpb24oZSl7dmFyIG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiByLmZvckluKGUsKGZ1bmN0aW9uKGUscil7dmFyIGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub2RlKGUpLndpZHRofSh0LHIpLzI7bj1NYXRoLm1heChlK2EsbiksaT1NYXRoLm1pbihlLWEsaSl9KSksbi1pfSkpfWZ1bmN0aW9uIGQodCxlKXt2YXIgbj1yLnZhbHVlcyhlKSxpPXIubWluKG4pLGE9ci5tYXgobik7ci5mb3JFYWNoKFsidSIsImQiXSwoZnVuY3Rpb24obil7ci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obyl7dmFyIHMsYz1uK28sdT10W2NdO2lmKHUhPT1lKXt2YXIgbD1yLnZhbHVlcyh1KTsocz0ibCI9PT1vP2ktci5taW4obCk6YS1yLm1heChsKSkmJih0W2NdPXIubWFwVmFsdWVzKHUsKGZ1bmN0aW9uKHQpe3JldHVybiB0K3N9KSkpfX0pKX0pKX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHIubWFwVmFsdWVzKHQudWwsKGZ1bmN0aW9uKG4saSl7aWYoZSlyZXR1cm4gdFtlLnRvTG93ZXJDYXNlKCldW2ldO3ZhciBhPXIuc29ydEJ5KHIubWFwKHQsaSkpO3JldHVybihhWzFdK2FbMl0pLzJ9KSl9dC5leHBvcnRzPXtwb3NpdGlvblg6ZnVuY3Rpb24odCl7dmFyIGUsbj1hLmJ1aWxkTGF5ZXJNYXRyaXgodCksaT1yLm1lcmdlKG8odCxuKSxzKHQsbikpLGM9e307ci5mb3JFYWNoKFsidSIsImQiXSwoZnVuY3Rpb24oYSl7ZT0idSI9PT1hP246ci52YWx1ZXMobikucmV2ZXJzZSgpLHIuZm9yRWFjaChbImwiLCJyIl0sKGZ1bmN0aW9uKG4peyJyIj09PW4mJihlPXIubWFwKGUsKGZ1bmN0aW9uKHQpe3JldHVybiByLnZhbHVlcyh0KS5yZXZlcnNlKCl9KSkpO3ZhciBvPSgidSI9PT1hP3QucHJlZGVjZXNzb3JzOnQuc3VjY2Vzc29ycykuYmluZCh0KSxzPWwodCxlLGksbyksdT1oKHQsZSxzLnJvb3Qscy5hbGlnbiwiciI9PT1uKTsiciI9PT1uJiYodT1yLm1hcFZhbHVlcyh1LChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKSksY1thK25dPXV9KSl9KSk7dmFyIHU9Zih0LGMpO3JldHVybiBkKGMsdSkscChjLHQuZ3JhcGgoKS5hbGlnbil9LGZpbmRUeXBlMUNvbmZsaWN0czpvLGZpbmRUeXBlMkNvbmZsaWN0czpzLGFkZENvbmZsaWN0OmMsaGFzQ29uZmxpY3Q6dSx2ZXJ0aWNhbEFsaWdubWVudDpsLGhvcml6b250YWxDb21wYWN0aW9uOmgsYWxpZ25Db29yZGluYXRlczpkLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OmYsYmFsYW5jZTpwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDgpLGE9bigxNykuR3JhcGg7dC5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPW5ldyBhKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtuLnNldE5vZGUoZSx7bGFiZWw6ZX0pLG4uc2V0UGFyZW50KGUsImxheWVyIit0Lm5vZGUoZSkucmFuayl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7bi5zZXRFZGdlKHQudix0Lncse30sdC5uYW1lKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXt2YXIgaT0ibGF5ZXIiK2U7bi5zZXROb2RlKGkse3Jhbms6InNhbWUifSksci5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz0iMC44LjUifSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPXtub2RlOm4oMTY1KSxjaXJjbGU6bigxNjYpLGVsbGlwc2U6big5NikscG9seWdvbjpuKDE2NykscmVjdDpuKDE2OCl9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdCplPjB9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxjLHUsbCxoLGYsZCxwLGcseSx2O2lmKGE9ZS55LXQueSxzPXQueC1lLngsdT1lLngqdC55LXQueCplLnksZD1hKnIueCtzKnIueSt1LHA9YSppLngrcyppLnkrdSwwIT09ZCYmMCE9PXAmJm4oZCxwKSlyZXR1cm47aWYobz1pLnktci55LGM9ci54LWkueCxsPWkueCpyLnktci54KmkueSxoPW8qdC54K2MqdC55K2wsZj1vKmUueCtjKmUueStsLDAhPT1oJiYwIT09ZiYmbihoLGYpKXJldHVybjtpZigwPT09KGc9YSpjLW8qcykpcmV0dXJuO3JldHVybiB5PU1hdGguYWJzKGcvMikse3g6KHY9cypsLWMqdSk8MD8odi15KS9nOih2K3kpL2cseToodj1vKnUtYSpsKTwwPyh2LXkpL2c6KHYreSkvZ319fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MyksaT1uKDMxKSxhPW4oMTUzKS5sYXlvdXQ7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bigzNzEpLGU9bigzNzQpLGk9bigzNzUpLHU9bigzNzYpLGw9bigzNzcpLGg9bigzNzgpLGY9bigzNzkpLGQ9bigzODApLHA9bigzODEpLGc9ZnVuY3Rpb24obixnKXshZnVuY3Rpb24odCl7dC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtyLmhhcyhuLCJsYWJlbCIpfHx0LmNoaWxkcmVuKGUpLmxlbmd0aHx8KG4ubGFiZWw9ZSksci5oYXMobiwicGFkZGluZ1giKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nTGVmdDpuLnBhZGRpbmdYLHBhZGRpbmdSaWdodDpuLnBhZGRpbmdYfSksci5oYXMobiwicGFkZGluZ1kiKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nVG9wOm4ucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpuLnBhZGRpbmdZfSksci5oYXMobiwicGFkZGluZyIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdMZWZ0Om4ucGFkZGluZyxwYWRkaW5nUmlnaHQ6bi5wYWRkaW5nLHBhZGRpbmdUb3A6bi5wYWRkaW5nLHBhZGRpbmdCb3R0b206bi5wYWRkaW5nfSksci5kZWZhdWx0cyhuLG8pLHIuZWFjaChbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSwoZnVuY3Rpb24odCl7blt0XT1OdW1iZXIoblt0XSl9KSksci5oYXMobiwid2lkdGgiKSYmKG4uX3ByZXZXaWR0aD1uLndpZHRoKSxyLmhhcyhuLCJoZWlnaHQiKSYmKG4uX3ByZXZIZWlnaHQ9bi5oZWlnaHQpfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5oYXMobiwibGFiZWwiKXx8KG4ubGFiZWw9IiIpLHIuZGVmYXVsdHMobixzKX0pKX0oZyk7dmFyIHk9YyhuLCJvdXRwdXQiKSx2PWMoeSwiY2x1c3RlcnMiKSxtPWMoeSwiZWRnZVBhdGhzIiksYj1pKGMoeSwiZWRnZUxhYmVscyIpLGcpLHg9dChjKHksIm5vZGVzIiksZyxkKTthKGcpLGwoeCxnKSxoKGIsZyksdShtLGcscCk7dmFyIF89ZSh2LGcpO2YoXyxnKSxmdW5jdGlvbih0KXtyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ci5oYXMobiwiX3ByZXZXaWR0aCIpP24ud2lkdGg9bi5fcHJldldpZHRoOmRlbGV0ZSBuLndpZHRoLHIuaGFzKG4sIl9wcmV2SGVpZ2h0Iik/bi5oZWlnaHQ9bi5fcHJldkhlaWdodDpkZWxldGUgbi5oZWlnaHQsZGVsZXRlIG4uX3ByZXZXaWR0aCxkZWxldGUgbi5fcHJldkhlaWdodH0pKX0oZyl9O3JldHVybiBnLmNyZWF0ZU5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsZyk6dH0sZy5jcmVhdGVDbHVzdGVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGcpOmV9LGcuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGcpOml9LGcuY3JlYXRlRWRnZVBhdGhzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsZyk6dX0sZy5zaGFwZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCxnKTpkfSxnLmFycm93cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10LGcpOnB9LGd9O3ZhciBvPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LHM9e2Fycm93aGVhZDoibm9ybWFsIixjdXJ2ZTppLmN1cnZlTGluZWFyfTtmdW5jdGlvbiBjKHQsZSl7dmFyIG49dC5zZWxlY3QoImcuIitlKTtyZXR1cm4gbi5lbXB0eSgpJiYobj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSksbn19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MyksaT1uKDk3KSxhPW4oMTIpLG89bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcyxjPWUubm9kZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFhLmlzU3ViZ3JhcGgoZSx0KX0pKSx1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKS5kYXRhKGMsKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLmNsYXNzZWQoInVwZGF0ZSIsITApO3UuZXhpdCgpLnJlbW92ZSgpLHUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5zdHlsZSgib3BhY2l0eSIsMCksKHU9dC5zZWxlY3RBbGwoImcubm9kZSIpKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcz1lLm5vZGUodCksYz1vLnNlbGVjdCh0aGlzKTthLmFwcGx5Q2xhc3MoYyxzLmNsYXNzLChjLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrIm5vZGUiKSxjLnNlbGVjdCgiZy5sYWJlbCIpLnJlbW92ZSgpO3ZhciB1PWMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLGw9aSh1LHMpLGg9bltzLnNoYXBlXSxmPXIucGljayhsLm5vZGUoKS5nZXRCQm94KCksIndpZHRoIiwiaGVpZ2h0Iik7cy5lbGVtPXRoaXMscy5pZCYmYy5hdHRyKCJpZCIscy5pZCkscy5sYWJlbElkJiZ1LmF0dHIoImlkIixzLmxhYmVsSWQpLHIuaGFzKHMsIndpZHRoIikmJihmLndpZHRoPXMud2lkdGgpLHIuaGFzKHMsImhlaWdodCIpJiYoZi5oZWlnaHQ9cy5oZWlnaHQpLGYud2lkdGgrPXMucGFkZGluZ0xlZnQrcy5wYWRkaW5nUmlnaHQsZi5oZWlnaHQrPXMucGFkZGluZ1RvcCtzLnBhZGRpbmdCb3R0b20sdS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy5wYWRkaW5nTGVmdC1zLnBhZGRpbmdSaWdodCkvMisiLCIrKHMucGFkZGluZ1RvcC1zLnBhZGRpbmdCb3R0b20pLzIrIikiKTt2YXIgZD1vLnNlbGVjdCh0aGlzKTtkLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpLnJlbW92ZSgpO3ZhciBwPWgoZCxmLHMpLmNsYXNzZWQoImxhYmVsLWNvbnRhaW5lciIsITApO2EuYXBwbHlTdHlsZShwLHMuc3R5bGUpO3ZhciBnPXAubm9kZSgpLmdldEJCb3goKTtzLndpZHRoPWcud2lkdGgscy5oZWlnaHQ9Zy5oZWlnaHR9KSkscz11LmV4aXQ/dS5leGl0KCk6dS5zZWxlY3RBbGwobnVsbCk7cmV0dXJuIGEuYXBwbHlUcmFuc2l0aW9uKHMsZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuYXBwZW5kKCJ0ZXh0IiksaT1mdW5jdGlvbih0KXtmb3IodmFyIGUsbj0iIixyPSExLGk9MDtpPHQubGVuZ3RoOysraSlpZihlPXRbaV0scil7c3dpdGNoKGUpe2Nhc2UibiI6bis9IlxuIjticmVhaztkZWZhdWx0Om4rPWV9cj0hMX1lbHNlIlxcIj09PWU/cj0hMDpuKz1lO3JldHVybiBufShlLmxhYmVsKS5zcGxpdCgiXG4iKSxhPTA7YTxpLmxlbmd0aDthKyspbi5hcHBlbmQoInRzcGFuIikuYXR0cigieG1sOnNwYWNlIiwicHJlc2VydmUiKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoIngiLCIxIikudGV4dChpW2FdKTtyZXR1cm4gci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQ7cmV0dXJuIG4ubm9kZSgpLmFwcGVuZENoaWxkKGUubGFiZWwpLHIuYXBwbHlTdHlsZShuLGUubGFiZWxTdHlsZSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKSxpPW4oMzEpLGE9big5Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1lLm5vZGVzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gci5pc1N1YmdyYXBoKGUsdCl9KSkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShvLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTtzLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkuaWR9KSkuc3R5bGUoIm9wYWNpdHkiLDApLHM9dC5zZWxlY3RBbGwoImcuY2x1c3RlciIpLHIuYXBwbHlUcmFuc2l0aW9uKHMsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLHMuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5ub2RlKHQpLHI9aS5zZWxlY3QodGhpcyk7aS5zZWxlY3QodGhpcykuYXBwZW5kKCJyZWN0Iik7dmFyIG89ci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7YShvLG4sbi5jbHVzdGVyTGFiZWxQb3MpfSkpLHMuc2VsZWN0QWxsKCJyZWN0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5ub2RlKHQpLGE9aS5zZWxlY3QodGhpcyk7ci5hcHBseVN0eWxlKGEsbi5zdHlsZSl9KSksbj1zLmV4aXQ/cy5leGl0KCk6cy5zZWxlY3RBbGwobnVsbCk7cmV0dXJuIHIuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHN9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDMpLGk9big5NyksYT1uKDEyKSxvPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHM9dC5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIikuZGF0YShlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3JldHVybiBhLmVkZ2VUb0lkKHQpfSkpLmNsYXNzZWQoInVwZGF0ZSIsITApO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlZGdlTGFiZWwiLCEwKS5zdHlsZSgib3BhY2l0eSIsMCksKHM9dC5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIikpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW8uc2VsZWN0KHRoaXMpO24uc2VsZWN0KCIubGFiZWwiKS5yZW1vdmUoKTt2YXIgYT1lLmVkZ2UodCkscz1pKG4sZS5lZGdlKHQpLDAsMCkuY2xhc3NlZCgibGFiZWwiLCEwKSxjPXMubm9kZSgpLmdldEJCb3goKTthLmxhYmVsSWQmJnMuYXR0cigiaWQiLGEubGFiZWxJZCksci5oYXMoYSwid2lkdGgiKXx8KGEud2lkdGg9Yy53aWR0aCksci5oYXMoYSwiaGVpZ2h0Iil8fChhLmhlaWdodD1jLmhlaWdodCl9KSksbj1zLmV4aXQ/cy5leGl0KCk6cy5zZWxlY3RBbGwobnVsbCk7cmV0dXJuIGEuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHN9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDMpLGk9bigxNjUpLGE9bigxMiksbz1uKDMxKTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49KG8ubGluZXx8by5zdmcubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk7cmV0dXJuKG4uY3VydmV8fG4uaW50ZXJwb2xhdGUpKHQuY3VydmUpLG4oZSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz10LnNlbGVjdEFsbCgiZy5lZGdlUGF0aCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGgiKS5zdHlsZSgib3BhY2l0eSIsMCk7cmV0dXJuIG4uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJwYXRoIikuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KSxpPWUubm9kZSh0LnYpLmVsZW07cmV0dXJuIHMobixyLnJhbmdlKG4ucG9pbnRzLmxlbmd0aCkubWFwKChmdW5jdGlvbigpe3JldHVybiBlPSh0PWkpLmdldEJCb3goKSx7eDoobj10Lm93bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkubXVsdGlwbHkodC5nZXRTY3JlZW5DVE0oKSkudHJhbnNsYXRlKGUud2lkdGgvMixlLmhlaWdodC8yKSkuZSx5Om4uZn07dmFyIHQsZSxufSkpKX0pKSxuLmFwcGVuZCgiZGVmcyIpLG59KGMsZSk7IWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGl0KCk7YS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9KGMsZSk7dmFyIGw9dm9pZCAwIT09Yy5tZXJnZT9jLm1lcmdlKHUpOmM7cmV0dXJuIGEuYXBwbHlUcmFuc2l0aW9uKGwsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLGwuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcykscj1lLmVkZ2UodCk7ci5lbGVtPXRoaXMsci5pZCYmbi5hdHRyKCJpZCIsci5pZCksYS5hcHBseUNsYXNzKG4sci5jbGFzcywobi5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJlZGdlUGF0aCIpfSkpLGwuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCk7bi5hcnJvd2hlYWRJZD1yLnVuaXF1ZUlkKCJhcnJvd2hlYWQiKTt2YXIgYz1vLnNlbGVjdCh0aGlzKS5hdHRyKCJtYXJrZXItZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrKHQ9bG9jYXRpb24uaHJlZixlPW4uYXJyb3doZWFkSWQsdC5zcGxpdCgiIyIpWzBdKyIjIitlKSsiKSI7dmFyIHQsZX0pKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTthLmFwcGx5VHJhbnNpdGlvbihjLGUpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj10LmVkZ2UoZSkscj10Lm5vZGUoZS52KSxhPXQubm9kZShlLncpLG89bi5wb2ludHMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG8udW5zaGlmdChpKHIsb1swXSkpLG8ucHVzaChpKGEsb1tvLmxlbmd0aC0xXSkpLHMobixvKX0oZSx0KX0pKSxhLmFwcGx5U3R5bGUoYyxuLnN0eWxlKX0pKSxsLnNlbGVjdEFsbCgiZGVmcyAqIikucmVtb3ZlKCksbC5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7KDAsbltyLmFycm93aGVhZF0pKG8uc2VsZWN0KHRoaXMpLHIuYXJyb3doZWFkSWQsciwiYXJyb3doZWFkIil9KSksbH19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMiksaT1uKDMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPWUubm9kZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikifXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsbil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTIpLGk9bigzMSksYT1uKDQzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPWUuZWRnZSh0KTtyZXR1cm4gYS5oYXMobiwieCIpPyJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSI6IiJ9dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpLmF0dHIoInRyYW5zZm9ybSIsbiksci5hcHBseVRyYW5zaXRpb24odCxlKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixuKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMiksaT1uKDMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSk7ZnVuY3Rpb24gYSh0KXt2YXIgbj1lLm5vZGUodCk7cmV0dXJuInRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIn1uLmF0dHIoInRyYW5zZm9ybSIsYSksci5hcHBseVRyYW5zaXRpb24odCxlKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixhKSxyLmFwcGx5VHJhbnNpdGlvbihuLnNlbGVjdEFsbCgicmVjdCIpLGUpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLmhlaWdodH0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuLWUubm9kZSh0KS53aWR0aC8yfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4tZS5ub2RlKHQpLmhlaWdodC8yfSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE2OCksaT1uKDk2KSxhPW4oMTY2KSxvPW4oMTY3KTt0LmV4cG9ydHM9e3JlY3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLG4ucngpLmF0dHIoInJ5IixuLnJ5KS5hdHRyKCJ4IiwtZS53aWR0aC8yKS5hdHRyKCJ5IiwtZS5oZWlnaHQvMikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gcihuLHQpfSxpfSxlbGxpcHNlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoLzIsYT1lLmhlaWdodC8yLG89dC5pbnNlcnQoImVsbGlwc2UiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwtZS53aWR0aC8yKS5hdHRyKCJ5IiwtZS5oZWlnaHQvMikuYXR0cigicngiLHIpLmF0dHIoInJ5IixhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGkobixyLGEsdCl9LG99LGNpcmNsZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9TWF0aC5tYXgoZS53aWR0aCxlLmhlaWdodCkvMixpPXQuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwtZS53aWR0aC8yKS5hdHRyKCJ5IiwtZS5oZWlnaHQvMikuYXR0cigiciIscik7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhKG4scix0KX0saX0sZGlhbW9uZDpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS53aWR0aCpNYXRoLlNRUlQyLzIsaT1lLmhlaWdodCpNYXRoLlNRUlQyLzIsYT1be3g6MCx5Oi1pfSx7eDotcix5OjB9LHt4OjAseTppfSx7eDpyLHk6MH1dLHM9dC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLGEubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG8obixhLHQpfSxzfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKTtmdW5jdGlvbiBpKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9dC5leHBvcnRzPXtkZWZhdWx0Omksbm9ybWFsOmksdmVlOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgTCA0IDUgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9LHVuZGlyZWN0ZWQ6ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz0iMC42LjQifSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHI9cnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1lc2NhcGUodCkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7Iiksci5pbm5lckhUTUw9dCx1bmVzY2FwZShyLnRleHRDb250ZW50KX1uLnIoZSk7dmFyIGE9bigyMyksbz1uLm4oYSkscz17ZGVidWc6MSxpbmZvOjIsd2FybjozLGVycm9yOjQsZmF0YWw6NX0sYz17ZGVidWc6ZnVuY3Rpb24oKXt9LGluZm86ZnVuY3Rpb24oKXt9LHdhcm46ZnVuY3Rpb24oKXt9LGVycm9yOmZ1bmN0aW9uKCl7fSxmYXRhbDpmdW5jdGlvbigpe319LHU9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImZhdGFsIjtpc05hTih0KSYmKHQ9dC50b0xvd2VyQ2FzZSgpLHZvaWQgMCE9PXNbdF0mJih0PXNbdF0pKSxjLnRyYWNlPWZ1bmN0aW9uKCl7fSxjLmRlYnVnPWZ1bmN0aW9uKCl7fSxjLmluZm89ZnVuY3Rpb24oKXt9LGMud2Fybj1mdW5jdGlvbigpe30sYy5lcnJvcj1mdW5jdGlvbigpe30sYy5mYXRhbD1mdW5jdGlvbigpe30sdDw9cy5mYXRhbCYmKGMuZmF0YWw9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxsKCJGQVRBTCIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzM1bSIsbCgiRkFUQUwiKSkpLHQ8PXMuZXJyb3ImJihjLmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsbCgiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szMW0iLGwoIkVSUk9SIikpKSx0PD1zLndhcm4mJihjLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsbCgiV0FSTiIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMzbSIsbCgiV0FSTiIpKSksdDw9cy5pbmZvJiYoYy5pbmZvPWNvbnNvbGUuaW5mbz9jb25zb2xlLmluZm8uYmluZChjb25zb2xlLGwoIklORk8iKSwiY29sb3I6IGxpZ2h0Ymx1ZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNG0iLGwoIklORk8iKSkpLHQ8PXMuZGVidWcmJihjLmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsbCgiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzJtIixsKCJERUJVRyIpKSl9LGw9ZnVuY3Rpb24odCl7dmFyIGU9bygpKCkuZm9ybWF0KCJzcy5TU1MiKTtyZXR1cm4iJWMiLmNvbmNhdChlLCIgOiAiKS5jb25jYXQodCwiIDogIil9LGg9bigxNjkpLGY9bi5uKGgpLGQ9bigwKSxwPW4oNDQpLGc9big3MCkseT1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0wO24+PTA7KXtpZighKChuPXQuaW5kZXhPZigiPHNjcmlwdCIpKT49MCkpe2UrPXQsbj0tMTticmVha31lKz10LnN1YnN0cigwLG4pLChuPSh0PXQuc3Vic3RyKG4rMSkpLmluZGV4T2YoIjxcL3NjcmlwdD4iKSk+PTAmJihuKz05LHQ9dC5zdWJzdHIobikpfXJldHVybiBlfSx2PS88YnJccypcLz8+L2dpLG09ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSh2LCIjYnIjIil9LGI9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpfSx4PXtnZXRSb3dzOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiAxO3ZhciBlPW0odCk7cmV0dXJuKGU9ZS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpKS5zcGxpdCgiI2JyIyIpfSxzYW5pdGl6ZVRleHQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10LHI9ITA7aWYoIWUuZmxvd2NoYXJ0fHwhMSE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJiJmYWxzZSIhPT1lLmZsb3djaGFydC5odG1sTGFiZWxzfHwocj0hMSkscil7dmFyIGk9ZS5zZWN1cml0eUxldmVsOyJhbnRpc2NyaXB0Ij09PWk/bj15KG4pOiJsb29zZSIhPT1pJiYobj0obj0obj1tKG4pKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLG49YihuKSl9cmV0dXJuIG59LGhhc0JyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4vPGJyXHMqWy9dPz4vZ2kudGVzdCh0KX0sc3BsaXRCcmVha3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoLzxiclxzKlsvXT8+L2dpKX0sbGluZUJyZWFrUmVnZXg6dixyZW1vdmVTY3JpcHQ6eX07ZnVuY3Rpb24gXyh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fWZ1bmN0aW9uIGsodCl7cmV0dXJuKGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxuPW5ldyBBcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspbltlXT10W2VdO3JldHVybiBufX0odCl8fGZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciBFPXtjdXJ2ZUJhc2lzOmQuY3VydmVCYXNpcyxjdXJ2ZUJhc2lzQ2xvc2VkOmQuY3VydmVCYXNpc0Nsb3NlZCxjdXJ2ZUJhc2lzT3BlbjpkLmN1cnZlQmFzaXNPcGVuLGN1cnZlTGluZWFyOmQuY3VydmVMaW5lYXIsY3VydmVMaW5lYXJDbG9zZWQ6ZC5jdXJ2ZUxpbmVhckNsb3NlZCxjdXJ2ZU1vbm90b25lWDpkLmN1cnZlTW9ub3RvbmVYLGN1cnZlTW9ub3RvbmVZOmQuY3VydmVNb25vdG9uZVksY3VydmVOYXR1cmFsOmQuY3VydmVOYXR1cmFsLGN1cnZlU3RlcDpkLmN1cnZlU3RlcCxjdXJ2ZVN0ZXBBZnRlcjpkLmN1cnZlU3RlcEFmdGVyLGN1cnZlU3RlcEJlZm9yZTpkLmN1cnZlU3RlcEJlZm9yZX0sVD0vWyVdezJ9W3tdXHMqKD86KD86KFx3Kylccyo6fChcdyspKVxzKig/Oig/OihcdyspKXwoKD86KD8hW31dWyVdezJ9KS58XHI/XG4pKikpP1xzKikoPzpbfV1bJV17Mn0pPy9naSxDPS9ccyooPzooPzooXHcrKSg/PTopOnwoXHcrKSlccyooPzooPzooXHcrKSl8KCg/Oig/IVt9XVslXXsyfSkufFxyP1xuKSopKT9ccyopKD86W31dWyVdezJ9KT8vZ2ksUz0vXHMqJSUuKlxuL2dtLEE9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dHJ5e3ZhciBuPW5ldyBSZWdFeHAoIlslXXsyfSg/IVt7XSIuY29uY2F0KEMuc291cmNlLCIpKD89W31dWyVdezJ9KS4qXG4iKSwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UobiwiIikucmVwbGFjZSgvJy9nbSwnIicpLGMuZGVidWcoIkRldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSIuY29uY2F0KG51bGwhPT1lPyIgdHlwZToiK2U6IiIsIiBiYXNlZCBvbiB0aGUgdGV4dDoiKS5jb25jYXQodCkpO2Zvcih2YXIgcixpPVtdO251bGwhPT0ocj1ULmV4ZWModCkpOylpZihyLmluZGV4PT09VC5sYXN0SW5kZXgmJlQubGFzdEluZGV4KyssciYmIWV8fGUmJnJbMV0mJnJbMV0ubWF0Y2goZSl8fGUmJnJbMl0mJnJbMl0ubWF0Y2goZSkpe3ZhciBhPXJbMV0/clsxXTpyWzJdLG89clszXT9yWzNdLnRyaW0oKTpyWzRdP0pTT04ucGFyc2Uocls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpvfSl9cmV0dXJuIDA9PT1pLmxlbmd0aCYmaS5wdXNoKHt0eXBlOnQsYXJnczpudWxsfSksMT09PWkubGVuZ3RoP2lbMF06aX1jYXRjaChuKXtyZXR1cm4gYy5lcnJvcigiRVJST1I6ICIuY29uY2F0KG4ubWVzc2FnZSwiIC0gVW5hYmxlIHRvIHBhcnNlIGRpcmVjdGl2ZSIpLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKSx7dHlwZTpudWxsLGFyZ3M6bnVsbH19fSxNPWZ1bmN0aW9uKHQpe3JldHVybiB0PXQucmVwbGFjZShULCIiKS5yZXBsYWNlKFMsIlxuIiksYy5kZWJ1ZygiRGV0ZWN0aW5nIGRpYWdyYW0gdHlwZSBiYXNlZCBvbiB0aGUgdGV4dCAiK3QpLHQubWF0Y2goL15ccypzZXF1ZW5jZURpYWdyYW0vKT8ic2VxdWVuY2UiOnQubWF0Y2goL15ccypnYW50dC8pPyJnYW50dCI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS12Mi8pPyJjbGFzc0RpYWdyYW0iOnQubWF0Y2goL15ccypjbGFzc0RpYWdyYW0vKT8iY2xhc3MiOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0tdjIvKT8ic3RhdGVEaWFncmFtIjp0Lm1hdGNoKC9eXHMqc3RhdGVEaWFncmFtLyk/InN0YXRlIjp0Lm1hdGNoKC9eXHMqZ2l0R3JhcGgvKT8iZ2l0Ijp0Lm1hdGNoKC9eXHMqZmxvd2NoYXJ0Lyk/ImZsb3djaGFydC12MiI6dC5tYXRjaCgvXlxzKmluZm8vKT8iaW5mbyI6dC5tYXRjaCgvXlxzKnBpZS8pPyJwaWUiOnQubWF0Y2goL15ccyplckRpYWdyYW0vKT8iZXIiOnQubWF0Y2goL15ccypqb3VybmV5Lyk/ImpvdXJuZXkiOiJmbG93Y2hhcnQifSxPPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07dmFyIG89ZT9lLmFwcGx5KHZvaWQgMCxpKTppWzBdO2lmKG8gaW4gbilyZXR1cm4gbltvXTt2YXIgcz10LmFwcGx5KHZvaWQgMCxpKTtyZXR1cm4gbltvXT1zLHN9fSxEPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIGU7dmFyIG49ImN1cnZlIi5jb25jYXQodC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpKTtyZXR1cm4gRVtuXXx8ZX0sTj1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZlP01hdGguc3FydChNYXRoLnBvdyhlLngtdC54LDIpK01hdGgucG93KGUueS10LnksMikpOjB9LEI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49IiIscj0wO3I8dC5sZW5ndGg7cisrKXZvaWQgMCE9PXRbcl0mJih0W3JdLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHx0W3JdLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/bj1uK3Rbcl0rIjsiOmU9ZSt0W3JdKyI7Iik7cmV0dXJue3N0eWxlOmUsbGFiZWxTdHlsZTpufX0sTD0wLFA9ZnVuY3Rpb24oKXtyZXR1cm4gTCsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrTH07dmFyIEY9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixuPSIwMTIzNDU2Nzg5YWJjZGVmIi5sZW5ndGgscj0wO3I8dDtyKyspZSs9IjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikpO3JldHVybiBlfSh0Lmxlbmd0aCl9LEk9ZnVuY3Rpb24gdChlLG4scil7dmFyIGk9T2JqZWN0LmFzc2lnbih7ZGVwdGg6MixjbG9iYmVyOiExfSxyKSxhPWkuZGVwdGgsbz1pLmNsb2JiZXI7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiFBcnJheS5pc0FycmF5KGUpPyhuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbixyKX0pKSxlKTpBcnJheS5pc0FycmF5KG4pJiZBcnJheS5pc0FycmF5KGUpPyhuLmZvckVhY2goKGZ1bmN0aW9uKHQpey0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCl9KSksZSk6dm9pZCAwPT09ZXx8YTw9MD9udWxsIT1lJiYib2JqZWN0Ij09PWsoZSkmJiJvYmplY3QiPT09ayhuKT9PYmplY3QuYXNzaWduKGUsbik6bjoodm9pZCAwIT09biYmIm9iamVjdCI9PT1rKGUpJiYib2JqZWN0Ij09PWsobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHIpeyJvYmplY3QiIT09ayhuW3JdKXx8dm9pZCAwIT09ZVtyXSYmIm9iamVjdCIhPT1rKGVbcl0pPyhvfHwib2JqZWN0IiE9PWsoZVtyXSkmJiJvYmplY3QiIT09ayhuW3JdKSkmJihlW3JdPW5bcl0pOih2b2lkIDA9PT1lW3JdJiYoZVtyXT1BcnJheS5pc0FycmF5KG5bcl0pP1tdOnt9KSxlW3JdPXQoZVtyXSxuW3JdLHtkZXB0aDphLTEsY2xvYmJlcjpvfSkpfSkpLGUpfSxqPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS50ZXh0LnJlcGxhY2UoeC5saW5lQnJlYWtSZWdleCwiICIpLHI9dC5hcHBlbmQoInRleHQiKTtyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksci5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksci5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSxyLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLmF0dHIoImZpbGwiLGUuZmlsbCksaS50ZXh0KG4pLHJ9LFI9TygoZnVuY3Rpb24odCxlLG4pe2lmKCF0KXJldHVybiB0O2lmKG49T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLGpvaW5XaXRoOiI8YnIvPiJ9LG4pLHgubGluZUJyZWFrUmVnZXgudGVzdCh0KSlyZXR1cm4gdDt2YXIgcj10LnNwbGl0KCIgIiksaT1bXSxhPSIiO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIHM9eigiIi5jb25jYXQodCwiICIpLG4pLGM9eihhLG4pO2lmKHM+ZSl7dmFyIHU9WSh0LGUsIi0iLG4pLGw9dS5oeXBoZW5hdGVkU3RyaW5ncyxoPXUucmVtYWluaW5nV29yZDtpLnB1c2guYXBwbHkoaSxbYV0uY29uY2F0KHcobCkpKSxhPWh9ZWxzZSBjK3M+PWU/KGkucHVzaChhKSxhPXQpOmE9W2EsdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtvKzE9PT1yLmxlbmd0aCYmaS5wdXNoKGEpfSkpLGkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4iIiE9PXR9KSkuam9pbihuLmpvaW5XaXRoKX0pLChmdW5jdGlvbih0LGUsbil7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZSwiLSIpLmNvbmNhdChuLmZvbnRTaXplLCItIikuY29uY2F0KG4uZm9udFdlaWdodCwiLSIpLmNvbmNhdChuLmZvbnRGYW1pbHksIi0iKS5jb25jYXQobi5qb2luV2l0aCl9KSksWT1PKChmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiLSIscj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0scik7dmFyIGk9dC5zcGxpdCgiIiksYT1bXSxvPSIiO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQscyl7dmFyIGM9IiIuY29uY2F0KG8pLmNvbmNhdCh0KTtpZih6KGMscik+PWUpe3ZhciB1PXMrMSxsPWkubGVuZ3RoPT09dSxoPSIiLmNvbmNhdChjKS5jb25jYXQobik7YS5wdXNoKGw/YzpoKSxvPSIifWVsc2Ugbz1jfSkpLHtoeXBoZW5hdGVkU3RyaW5nczphLHJlbWFpbmluZ1dvcmQ6b319KSwoZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Ii0iLHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZSwiLSIpLmNvbmNhdChuLCItIikuY29uY2F0KHIuZm9udFNpemUsIi0iKS5jb25jYXQoci5mb250V2VpZ2h0LCItIikuY29uY2F0KHIuZm9udEZhbWlseSl9KSksej1mdW5jdGlvbih0LGUpe3JldHVybiBlPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIn0sZSksVSh0LGUpLndpZHRofSxVPU8oKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCJ9LGUpLHI9bi5mb250U2l6ZSxpPW4uZm9udEZhbWlseSxhPW4uZm9udFdlaWdodDtpZighdClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07dmFyIG89WyJzYW5zLXNlcmlmIixpXSxzPXQuc3BsaXQoeC5saW5lQnJlYWtSZWdleCksYz1bXSx1PU9iamVjdChkLnNlbGVjdCkoImJvZHkiKTtpZighdS5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IodmFyIGw9dS5hcHBlbmQoInN2ZyIpLGg9MCxmPW87aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF0sZz0wLHk9e3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfSx2PSEwLG09ITEsYj12b2lkIDA7dHJ5e2Zvcih2YXIgXyxrPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodj0oXz1rLm5leHQoKSkuZG9uZSk7dj0hMCl7dmFyIHc9Xy52YWx1ZSxFPXt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjoic3RhcnQiLHN0eWxlOiIjNjY2Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHZhbGlnbjp2b2lkIDB9O0UudGV4dD13O3ZhciBUPWoobCxFKS5zdHlsZSgiZm9udC1zaXplIixyKS5zdHlsZSgiZm9udC13ZWlnaHQiLGEpLnN0eWxlKCJmb250LWZhbWlseSIscCksQz0oVC5fZ3JvdXBzfHxUKVswXVswXS5nZXRCQm94KCk7eS53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KHkud2lkdGgsQy53aWR0aCkpLGc9TWF0aC5yb3VuZChDLmhlaWdodCkseS5oZWlnaHQrPWcseS5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoeS5saW5lSGVpZ2h0LGcpKX19Y2F0Y2godCl7bT0hMCxiPXR9ZmluYWxseXt0cnl7dnx8bnVsbD09ay5yZXR1cm58fGsucmV0dXJuKCl9ZmluYWxseXtpZihtKXRocm93IGJ9fWMucHVzaCh5KX1yZXR1cm4gbC5yZW1vdmUoKSxjW2lzTmFOKGNbMV0uaGVpZ2h0KXx8aXNOYU4oY1sxXS53aWR0aCl8fGlzTmFOKGNbMV0ubGluZUhlaWdodCl8fGNbMF0uaGVpZ2h0PmNbMV0uaGVpZ2h0JiZjWzBdLndpZHRoPmNbMV0ud2lkdGgmJmNbMF0ubGluZUhlaWdodD5jWzFdLmxpbmVIZWlnaHQ/MDoxXX0pLChmdW5jdGlvbih0LGUpe3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUuZm9udFNpemUsIi0iKS5jb25jYXQoZS5mb250V2VpZ2h0LCItIikuY29uY2F0KGUuZm9udEZhbWlseSl9KSksJD1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1hcDtyZXR1cm4gci5zZXQoImhlaWdodCIsdCksbj8oci5zZXQoIndpZHRoIiwiMTAwJSIpLHIuc2V0KCJzdHlsZSIsIm1heC13aWR0aDogIi5jb25jYXQoZSwicHg7IikpKTpyLnNldCgid2lkdGgiLGUpLHJ9LFc9ZnVuY3Rpb24odCxlLG4scil7IWZ1bmN0aW9uKHQsZSl7dmFyIG49ITAscj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBhLG89ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPW8ubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgcz1hLnZhbHVlO3QuYXR0cihzWzBdLHNbMV0pfX1jYXRjaCh0KXtyPSEwLGk9dH1maW5hbGx5e3RyeXtufHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKHIpdGhyb3cgaX19fSh0LCQoZSxuLHIpKX0sVj17YXNzaWduV2l0aERlcHRoOkksd3JhcExhYmVsOlIsY2FsY3VsYXRlVGV4dEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiBlPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MTV9LGUpLFUodCxlKS5oZWlnaHR9LGNhbGN1bGF0ZVRleHRXaWR0aDp6LGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOlUsY2FsY3VsYXRlU3ZnU2l6ZUF0dHJzOiQsY29uZmlndXJlU3ZnU2l6ZTpXLGRldGVjdEluaXQ6ZnVuY3Rpb24odCl7dmFyIGU9QSh0LC8oPzppbml0XGIpfCg/OmluaXRpYWxpemVcYikvKSxuPXt9O2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciByPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hcmdzfSkpO249SShuLHcocikpfWVsc2Ugbj1lLmFyZ3M7aWYobil7dmFyIGk9TSh0KTtbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PW5bdF0mJigiZmxvd2NoYXJ0LXYyIj09PWkmJihpPSJmbG93Y2hhcnQiKSxuW2ldPW5bdF0sZGVsZXRlIG5bdF0pfSkpfXJldHVybiBufSxkZXRlY3REaXJlY3RpdmU6QSxkZXRlY3RUeXBlOk0saXNTdWJzdHJpbmdJbkFycmF5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZVtuXS5tYXRjaCh0KSlyZXR1cm4gbjtyZXR1cm4tMX0saW50ZXJwb2xhdGVUb0N1cnZlOkQsY2FsY0xhYmVsUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24rPU4odCxlKSxlPXR9KSk7dmFyIHI9bi8yLGk9dm9pZCAwO3JldHVybiBlPXZvaWQgMCx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKGUmJiFpKXt2YXIgbj1OKHQsZSk7aWYobjxyKXItPW47ZWxzZXt2YXIgYT1yL247YTw9MCYmKGk9ZSksYT49MSYmKGk9e3g6dC54LHk6dC55fSksYT4wJiZhPDEmJihpPXt4OigxLWEpKmUueCthKnQueCx5OigxLWEpKmUueSthKnQueX0pfX1lPXR9KSksaX0odCl9LGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtjLmluZm8oIm91ciBwb2ludHMiLGUpLGVbMF0hPT1uJiYoZT1lLnJldmVyc2UoKSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtOKHQscikscj10fSkpO3ZhciBpLGE9MjU7cj12b2lkIDAsZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihyJiYhaSl7dmFyIGU9Tih0LHIpO2lmKGU8YSlhLT1lO2Vsc2V7dmFyIG49YS9lO248PTAmJihpPXIpLG4+PTEmJihpPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoaT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBvPXQ/MTA6NSxzPU1hdGguYXRhbjIoZVswXS55LWkueSxlWzBdLngtaS54KSx1PXt4OjAseTowfTtyZXR1cm4gdS54PU1hdGguc2luKHMpKm8rKGVbMF0ueCtpLngpLzIsdS55PS1NYXRoLmNvcyhzKSpvKyhlWzBdLnkraS55KS8yLHV9LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuKSk7Yy5pbmZvKCJvdXIgcG9pbnRzIixpKSwic3RhcnRfbGVmdCIhPT1lJiYic3RhcnRfcmlnaHQiIT09ZSYmKGk9aS5yZXZlcnNlKCkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Tih0LHIpLHI9dH0pKTt2YXIgYSxvPTI1O3I9dm9pZCAwLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYociYmIWEpe3ZhciBlPU4odCxyKTtpZihlPG8pby09ZTtlbHNle3ZhciBuPW8vZTtuPD0wJiYoYT1yKSxuPj0xJiYoYT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGE9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgcz0xMCx1PU1hdGguYXRhbjIoaVswXS55LWEueSxpWzBdLngtYS54KSxsPXt4OjAseTowfTtyZXR1cm4gbC54PU1hdGguc2luKHUpKnMrKGlbMF0ueCthLngpLzIsbC55PS1NYXRoLmNvcyh1KSpzKyhpWzBdLnkrYS55KS8yLCJzdGFydF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odStNYXRoLlBJKSpzKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModStNYXRoLlBJKSpzKyhpWzBdLnkrYS55KS8yKSwiZW5kX3JpZ2h0Ij09PWUmJihsLng9TWF0aC5zaW4odS1NYXRoLlBJKSpzKyhpWzBdLngrYS54KS8yLTUsbC55PS1NYXRoLmNvcyh1LU1hdGguUEkpKnMrKGlbMF0ueSthLnkpLzItNSksImVuZF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odSkqcysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModSkqcysoaVswXS55K2EueSkvMi01KSxsfSxmb3JtYXRVcmw6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnRyaW0oKTtpZihuKXJldHVybiJsb29zZSIhPT1lLnNlY3VyaXR5TGV2ZWw/T2JqZWN0KGcuc2FuaXRpemVVcmwpKG4pOm59LGdldFN0eWxlc0Zyb21BcnJheTpCLGdlbmVyYXRlSWQ6UCxyYW5kb206RixtZW1vaXplOk8scnVuRnVuYzpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj10LnNwbGl0KCIuIikscj1uLmxlbmd0aC0xLGk9bltyXSxhPXdpbmRvdyxvPTA7bzxyO28rKylpZighKGE9YVtuW29dXSkpcmV0dXJuO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KHM+MT9zLTE6MCksdT0xO3U8czt1KyspY1t1LTFdPWFyZ3VtZW50c1t1XTsoZT1hKVtpXS5hcHBseShlLGMpfSxpbml0SWRHZW5lcmF0aW9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuY291bnQ9ZT9lLmxlbmd0aDowfXZhciBuLHIsaTtyZXR1cm4gbj10LChyPVt7a2V5OiJuZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvdW50Kyt9fV0pJiZfKG4ucHJvdG90eXBlLHIpLGkmJl8obixpKSx0fSgpKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfX19fSxIPW4oMyksRz1uLm4oSCkscT1uKDEpLFg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9PYmplY3QocS5hZGp1c3QpKHQse3M6LTQwLGw6MTB9KTpPYmplY3QocS5hZGp1c3QpKHQse3M6LTQwLGw6LTEwfSl9O2Z1bmN0aW9uIFoodCl7cmV0dXJuKFo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBKKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLmRhcmtNb2RlPSExLHRoaXMucHJpbWFyeUNvbG9yPSIjZmZmNGRkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSIjMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByaW1hcnlUZXh0Q29sb3I9dGhpcy5wcmltYXJ5VGV4dENvbG9yfHwodGhpcy5kYXJrTW9kZT8iI2RkZCI6IiMzMzMiKSx0aGlzLnNlY29uZGFyeUNvbG9yPXRoaXMuc2Vjb25kYXJ5Q29sb3J8fE9iamVjdChxLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTEyMH0pLHRoaXMudGVydGlhcnlDb2xvcj10aGlzLnRlcnRpYXJ5Q29sb3J8fE9iamVjdChxLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxYKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcnx8WCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fFgodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxYKHRoaXMubm90ZUJrZ0NvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yfHxPYmplY3QocS5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9dGhpcy50ZXJ0aWFyeVRleHRDb2xvcnx8T2JqZWN0KHEuaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxPYmplY3QocS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T2JqZWN0KHEuZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLm5vZGVUZXh0Q29sb3I9dGhpcy5ub2RlVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckJvcmRlcj10aGlzLmFjdG9yQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFjdG9yQmtnPXRoaXMuYWN0b3JCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JMaW5lQ29sb3J8fCJncmV5Iix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fE9iamVjdChxLmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8T2JqZWN0KHEuaW52ZXJ0KSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8T2JqZWN0KHEubGlnaHRlbikodGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5sYWJlbENvbG9yPXRoaXMubGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE9iamVjdChxLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fE9iamVjdChxLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE9iamVjdChxLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09Wih0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZKKGUucHJvdG90eXBlLG4pLHImJkooZSxyKSx0fSgpO2Z1bmN0aW9uIEsodCl7cmV0dXJuKEs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiB0dCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPU9iamVjdChxLmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9WCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVgodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9WCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QocS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9T2JqZWN0KHEuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiMxZjIwMjAiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLm1haW5Db250cmFzdENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZGFya1RleHRDb2xvcj1PYmplY3QocS5saWdodGVuKShPYmplY3QocS5pbnZlcnQpKCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiM4MUIxREIiLHRoaXMuYm9yZGVyMj1PYmplY3QocS5yZ2JhKSgyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiNGOUZGRkUiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0iYmxhY2siLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPU9iamVjdChxLmRhcmtlbikoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLnRhc2tCb3JkZXJDb2xvcj1PYmplY3QocS5yZ2JhKSgyNTUsMjU1LDI1NSw3MCksdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9T2JqZWN0KHEucmdiYSkoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9T2JqZWN0KHEubGlnaHRlbikodGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1PYmplY3QocS5saWdodGVuKSh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1PYmplY3QocS5saWdodGVuKSh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy5sYWJlbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD1PYmplY3QocS5saWdodGVuKSh0aGlzLmJhY2tncm91bmQsMjApLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU9iamVjdChxLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU9iamVjdChxLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU9iamVjdChxLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PUsodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmdHQoZS5wcm90b3R5cGUsbiksciYmdHQoZSxyKSx0fSgpO2Z1bmN0aW9uIG50KHQpe3JldHVybihudD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIHJ0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIGl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9WCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVgodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9WCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QocS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9T2JqZWN0KHEuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPU9iamVjdChxLnJnYmEpKDEwMiwxMDIsMjU1LC40OSksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNmZmY0MDAiLHRoaXMudGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLnRhc2tCa2dDb2xvcj0iIzhhOTBkZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iI2JmYzdmZiIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KHEubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QocS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QocS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QocS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1udCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZydChlLnByb3RvdHlwZSxuKSxyJiZydChlLHIpLHR9KCk7ZnVuY3Rpb24gYXQodCl7cmV0dXJuKGF0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gb3QodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHEubGlnaHRlbikoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1YKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9WCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1YKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KHEuaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KHEuaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1PYmplY3QocS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSIjNDg3ZTNhIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFjdG9yQm9yZGVyPU9iamVjdChxLmRhcmtlbikodGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QocS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QocS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QocS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1hdCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZvdChlLnByb3RvdHlwZSxuKSxyJiZvdChlLHIpLHR9KCk7ZnVuY3Rpb24gY3QodCl7cmV0dXJuKGN0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgbHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiMyNmEiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KHEubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9WCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVgodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9WCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QocS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9T2JqZWN0KHEuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChxLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmFsdEJhY2tncm91bmQ9T2JqZWN0KHEubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9T2JqZWN0KHEubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KHEubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPU9iamVjdChxLmRhcmtlbikodGhpcy5ub3RlLDYwKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGUsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T2JqZWN0KHEubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPU9iamVjdChxLmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPU9iamVjdChxLmRhcmtlbikodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1PYmplY3QocS5saWdodGVuKSh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9T2JqZWN0KHEuZGFya2VuKSh0aGlzLmNyaXRCa2dDb2xvciwxMCksdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLmNyaXRCa2dDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QocS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QocS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KHEuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QocS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1jdCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZ1dChlLnByb3RvdHlwZSxuKSxyJiZ1dChlLHIpLHR9KCksaHQ9e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBRO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGV0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGVmYXVsdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGl0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgc3Q7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgbHQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fX0sZnQ9e3RoZW1lOiJkZWZhdWx0Iix0aGVtZVZhcmlhYmxlczpodC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksdGhlbWVDU1M6dm9pZCAwLG1heFRleHRTaXplOjVlNCxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZmxvd2NoYXJ0OntkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImxpbmVhciIscGFkZGluZzoxNSx1c2VNYXhXaWR0aDohMH0sc2VxdWVuY2U6e2FjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsYm90dG9tTWFyZ2luQWRqOjEsdXNlTWF4V2lkdGg6ITAscmlnaHRBbmdsZXM6ITEsc2hvd1NlcXVlbmNlTnVtYmVyczohMSxhY3RvckZvbnRTaXplOjE0LGFjdG9yRm9udEZhbWlseTonIk9wZW4tU2FucyIsICJzYW5zLXNlcmlmIicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMCxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX0sbm90ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LGFjdG9yRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYWN0b3JGb250V2VpZ2h0fX19LGdhbnR0Ont0aXRsZVRvcE1hcmdpbjoyNSxiYXJIZWlnaHQ6MjAsYmFyR2FwOjQsdG9wUGFkZGluZzo1MCxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxmb250RmFtaWx5OiciT3Blbi1TYW5zIiwgInNhbnMtc2VyaWYiJyxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHVzZU1heFdpZHRoOiEwLHVzZVdpZHRoOnZvaWQgMH0sam91cm5leTp7ZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYWN0b3JNYXJnaW46NTAsd2lkdGg6MTUwLGhlaWdodDo2NSxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEsdXNlTWF4V2lkdGg6ITAscmlnaHRBbmdsZXM6ITF9LGNsYXNzOnthcnJvd01hcmtlckFic29sdXRlOiExLHVzZU1heFdpZHRoOiEwfSxnaXQ6e2Fycm93TWFya2VyQWJzb2x1dGU6ITEsdXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxzdGF0ZTp7ZGl2aWRlck1hcmdpbjoxMCxzaXplVW5pdDo1LHBhZGRpbmc6OCx0ZXh0SGVpZ2h0OjEwLHRpdGxlU2hpZnQ6LTE1LG5vdGVNYXJnaW46MTAsZm9ya1dpZHRoOjcwLGZvcmtIZWlnaHQ6NyxtaW5pUGFkZGluZzoyLGZvbnRTaXplRmFjdG9yOjUuMDIsZm9udFNpemU6MjQsbGFiZWxIZWlnaHQ6MTYsZWRnZUxlbmd0aEZhY3RvcjoiMjAiLGNvbXBvc2l0VGl0bGVTaXplOjM1LHJhZGl1czo1LHVzZU1heFdpZHRoOiEwfSxlcjp7ZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LHN0cm9rZToiZ3JheSIsZmlsbDoiaG9uZXlkZXciLGZvbnRTaXplOjEyLHVzZU1heFdpZHRoOiEwfSxwaWU6e3VzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMH19O2Z0LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9ZnQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxmdC5naXQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1mdC5hcnJvd01hcmtlckFic29sdXRlO3ZhciBkdCxwdD1mdCxndD1PYmplY3QuZnJlZXplKHB0KSx5dD1JKHt9LGd0KSx2dD1bXSxtdD1JKHt9LGd0KSxidD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1JKHt9LHQpLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2t0KGEpLHI9SShyLGEpfWlmKG49SShuLHIpLHIudGhlbWUpe3ZhciBvPUkoZHQudGhlbWVWYXJpYWJsZXN8fHt9LHIudGhlbWVWYXJpYWJsZXMpO24udGhlbWVWYXJpYWJsZXM9aHRbbi50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMobyl9cmV0dXJuIG10PW4sbn0seHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh7fSx5dCl9LF90PWZ1bmN0aW9uKCl7cmV0dXJuIEkoe30sbXQpfSxrdD1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh5dC5zZWN1cmUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PXRbeXQuc2VjdXJlW2VdXSYmKGMuZGVidWcoIkRlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgIi5jb25jYXQoeXQuc2VjdXJlW2VdKSx0W3l0LnNlY3VyZVtlXV0pLGRlbGV0ZSB0W3l0LnNlY3VyZVtlXV0pfSkpfSx3dD1mdW5jdGlvbih0KXt0LmZvbnRGYW1pbHkmJih0LnRoZW1lVmFyaWFibGVzJiZ0LnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHl8fCh0LnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OnQuZm9udEZhbWlseX0pKSx2dC5wdXNoKHQpLGJ0KHl0LHZ0KX0sRXQ9ZnVuY3Rpb24oKXtidCh5dCx2dD1bXSl9O2Z1bmN0aW9uIFR0KHQpe3JldHVybihUdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBDdCxTdCxBdD0wLE10PV90KCksT3Q9e30sRHQ9W10sTnQ9W10sQnQ9W10sTHQ9e30sUHQ9e30sRnQ9MCxJdD0hMCxqdD1bXSxSdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXMoT3QpLG49MDtuPGUubGVuZ3RoO24rKylpZihPdFtlW25dXS5pZD09PXQpcmV0dXJuIE90W2Vbbl1dLmRvbUlkO3JldHVybiB0fSxZdD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT17c3RhcnQ6dCxlbmQ6ZSx0eXBlOnZvaWQgMCx0ZXh0OiIifTt2b2lkIDAhPT0ocj1uLnRleHQpJiYoaS50ZXh0PXguc2FuaXRpemVUZXh0KHIudHJpbSgpLE10KSwnIic9PT1pLnRleHRbMF0mJiciJz09PWkudGV4dFtpLnRleHQubGVuZ3RoLTFdJiYoaS50ZXh0PWkudGV4dC5zdWJzdHJpbmcoMSxpLnRleHQubGVuZ3RoLTEpKSksdm9pZCAwIT09biYmKGkudHlwZT1uLnR5cGUsaS5zdHJva2U9bi5zdHJva2UsaS5sZW5ndGg9bi5sZW5ndGgpLER0LnB1c2goaSl9LHp0PWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dm9pZCAwIT09T3Rbbl0mJk90W25dLmNsYXNzZXMucHVzaChlKSx2b2lkIDAhPT1MdFtuXSYmTHRbbl0uY2xhc3Nlcy5wdXNoKGUpfSkpfSxVdD1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoUHRbImdlbi0xIj09PVN0P1J0KHQpOnRdPXguc2FuaXRpemVUZXh0KGUsTXQpKX0pKX0sJHQ9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGQuc2VsZWN0KSgiLm1lcm1haWRUb29sdGlwIik7bnVsbD09PShlLl9ncm91cHN8fGUpWzBdWzBdJiYoZT1PYmplY3QoZC5zZWxlY3QpKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxPYmplY3QoZC5zZWxlY3QpKHQpLnNlbGVjdCgic3ZnIikuc2VsZWN0QWxsKCJnLm5vZGUiKS5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QoZC5zZWxlY3QpKHRoaXMpO2lmKG51bGwhPT10LmF0dHIoInRpdGxlIikpe3ZhciBuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS5odG1sKHQuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK24ubGVmdCsobi5yaWdodC1uLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrbi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLE9iamVjdChkLnNlbGVjdCkodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pKX07anQucHVzaCgkdCk7dmFyIFd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8QnQubGVuZ3RoO2UrKylpZihCdFtlXS5pZD09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LFZ0PS0xLEh0PVtdLEd0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ITE7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ub2Rlcy5pbmRleE9mKGUpPj0wJiYobj0hMCl9KSksbn0scXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyZXR1cm4gdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihyLGkpe0d0KGUscil8fG4ucHVzaCh0Lm5vZGVzW2ldKX0pKSx7bm9kZXM6bn19LFh0PXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7SG8ucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGRlZmF1bHRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gZ3QuZmxvd2NoYXJ0fSxhZGRWZXJ0ZXg6ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYSxvPXQ7dm9pZCAwIT09byYmMCE9PW8udHJpbSgpLmxlbmd0aCYmKHZvaWQgMD09PU90W29dJiYoT3Rbb109e2lkOm8sZG9tSWQ6ImZsb3djaGFydC0iK28rIi0iK0F0LHN0eWxlczpbXSxjbGFzc2VzOltdfSksQXQrKyx2b2lkIDAhPT1lPyhNdD1fdCgpLCciJz09PShhPXguc2FuaXRpemVUZXh0KGUudHJpbSgpLE10KSlbMF0mJiciJz09PWFbYS5sZW5ndGgtMV0mJihhPWEuc3Vic3RyaW5nKDEsYS5sZW5ndGgtMSkpLE90W29dLnRleHQ9YSk6dm9pZCAwPT09T3Rbb10udGV4dCYmKE90W29dLnRleHQ9dCksdm9pZCAwIT09biYmKE90W29dLnR5cGU9biksbnVsbCE9ciYmci5mb3JFYWNoKChmdW5jdGlvbih0KXtPdFtvXS5zdHlsZXMucHVzaCh0KX0pKSxudWxsIT1pJiZpLmZvckVhY2goKGZ1bmN0aW9uKHQpe090W29dLmNsYXNzZXMucHVzaCh0KX0pKSl9LGxvb2tVcERvbUlkOlJ0LGFkZExpbms6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxlLmxlbmd0aDthKyspWXQodFtpXSxlW2FdLG4scil9LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImRlZmF1bHQiPT09dD9EdC5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpEdFt0XS5pbnRlcnBvbGF0ZT1lfSkpfSx1cGRhdGVMaW5rOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P0R0LmRlZmF1bHRTdHlsZT1lOigtMT09PVYuaXNTdWJzdHJpbmdJbkFycmF5KCJmaWxsIixlKSYmZS5wdXNoKCJmaWxsOm5vbmUiKSxEdFt0XS5zdHlsZT1lKX0pKX0sYWRkQ2xhc3M6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1OdFt0XSYmKE50W3RdPXtpZDp0LHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSksbnVsbCE9ZSYmZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLm1hdGNoKCJjb2xvciIpKXt2YXIgbj1lLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKTtOdFt0XS50ZXh0U3R5bGVzLnB1c2gobil9TnRbdF0uc3R5bGVzLnB1c2goZSl9KSl9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXsoQ3Q9dCkubWF0Y2goLy4qPC8pJiYoQ3Q9IlJMIiksQ3QubWF0Y2goLy4qXF4vKSYmKEN0PSJCVCIpLEN0Lm1hdGNoKC8uKj4vKSYmKEN0PSJMUiIpLEN0Lm1hdGNoKC8uKnYvKSYmKEN0PSJUQiIpfSxzZXRDbGFzczp6dCxnZXRUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiBQdFt0XX0sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe3ZhciBuPVJ0KHQpOyJsb29zZSI9PT1fdCgpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUmJnZvaWQgMCE9PU90W3RdJiYoT3RbdF0uaGF2ZUNhbGxiYWNrPSEwLGp0LnB1c2goKGZ1bmN0aW9uKCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChuLCciXScpKTtudWxsIT09ciYmci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7Vi5ydW5GdW5jKGUsdCl9KSwhMSl9KSkpfSh0LGUpfSkpLFV0KHQsbiksenQodCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlLG4scil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PU90W3RdJiYoT3RbdF0ubGluaz1WLmZvcm1hdFVybChlLE10KSxPdFt0XS5saW5rVGFyZ2V0PXIpfSkpLFV0KHQsbiksenQodCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7anQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIEN0LnRyaW0oKX0sZ2V0VmVydGljZXM6ZnVuY3Rpb24oKXtyZXR1cm4gT3R9LGdldEVkZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIER0fSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIE50fSxjbGVhcjpmdW5jdGlvbih0KXtPdD17fSxOdD17fSxEdD1bXSwoanQ9W10pLnB1c2goJHQpLEJ0PVtdLEx0PXt9LEZ0PTAsUHQ9W10sSXQ9ITAsU3Q9dHx8Imdlbi0xIn0sc2V0R2VuOmZ1bmN0aW9uKHQpe1N0PXR8fCJnZW4tMSJ9LGRlZmF1bHRTdHlsZTpmdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LGFkZFN1YkdyYXBoOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnRyaW0oKSxpPW47dD09PW4mJm4ubWF0Y2goL1xzLykmJihyPXZvaWQgMCk7dmFyIGEsbyxzLHU9W107aWYoYT11LmNvbmNhdC5hcHBseSh1LGUpLG89e2Jvb2xlYW46e30sbnVtYmVyOnt9LHN0cmluZzp7fX0scz1bXSx1PWEuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgZT1UdCh0KTtyZXR1cm4iIiE9PXQudHJpbSgpJiYoZSBpbiBvPyFvW2VdLmhhc093blByb3BlcnR5KHQpJiYob1tlXVt0XT0hMCk6IShzLmluZGV4T2YodCk+PTApJiZzLnB1c2godCkpfSkpLCJnZW4tMSI9PT1TdCl7Yy53YXJuKCJMT09LSU5HIFVQIik7Zm9yKHZhciBsPTA7bDx1Lmxlbmd0aDtsKyspdVtsXT1SdCh1W2xdKX1yPXJ8fCJzdWJHcmFwaCIrRnQsaT1pfHwiIixpPXguc2FuaXRpemVUZXh0KGksTXQpLEZ0Kz0xO3ZhciBoPXtpZDpyLG5vZGVzOnUsdGl0bGU6aS50cmltKCksY2xhc3NlczpbXX07cmV0dXJuIGMuaW5mbygiQWRkaW5nIixoLmlkLGgubm9kZXMpLGgubm9kZXM9cXQoaCxCdCkubm9kZXMsQnQucHVzaChoKSxMdFtyXT1oLHJ9LGdldERlcHRoRmlyc3RQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIEh0W3RdfSxpbmRleE5vZGVzOmZ1bmN0aW9uKCl7VnQ9LTEsQnQubGVuZ3RoPjAmJmZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1CdFtuXS5ub2RlcztpZighKChWdCs9MSk+MmUzKSl7aWYoSHRbVnRdPW4sQnRbbl0uaWQ9PT1lKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07Zm9yKHZhciBpPTAsYT0xO2k8ci5sZW5ndGg7KXt2YXIgbz1XdChyW2ldKTtpZihvPj0wKXt2YXIgcz10KGUsbyk7aWYocy5yZXN1bHQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDphK3MuY291bnR9O2ErPXMuY291bnR9aSs9MX1yZXR1cm57cmVzdWx0OiExLGNvdW50OmF9fX0oIm5vbmUiLEJ0Lmxlbmd0aC0xKX0sZ2V0U3ViR3JhcGhzOmZ1bmN0aW9uKCl7cmV0dXJuIEJ0fSxkZXN0cnVjdExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbixyPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49ZS5zbGljZSgwLC0xKSxyPSJhcnJvd19vcGVuIjtzd2l0Y2goZS5zbGljZSgtMSkpe2Nhc2UieCI6cj0iYXJyb3dfY3Jvc3MiLCJ4Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSI+IjpyPSJhcnJvd19wb2ludCIsIjwiPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKTticmVhaztjYXNlIm8iOnI9ImFycm93X2NpcmNsZSIsIm8iPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKX12YXIgaT0ibm9ybWFsIixhPW4ubGVuZ3RoLTE7Ij0iPT09blswXSYmKGk9InRoaWNrIik7dmFyIG89ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgscj0wLGk9MDtpPG47KytpKWVbaV09PT10JiYrK3I7cmV0dXJuIHJ9KCIuIixuKTtyZXR1cm4gbyYmKGk9ImRvdHRlZCIsYT1vKSx7dHlwZTpyLHN0cm9rZTppLGxlbmd0aDphfX0odCk7aWYoZSl7aWYoKG49ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj0iYXJyb3dfb3BlbiI7c3dpdGNoKGVbMF0pe2Nhc2UiPCI6bj0iYXJyb3dfcG9pbnQiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIngiOm49ImFycm93X2Nyb3NzIixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLGU9ZS5zbGljZSgxKX12YXIgcj0ibm9ybWFsIjtyZXR1cm4tMSE9PWUuaW5kZXhPZigiPSIpJiYocj0idGhpY2siKSwtMSE9PWUuaW5kZXhPZigiLiIpJiYocj0iZG90dGVkIikse3R5cGU6bixzdHJva2U6cn19KGUpKS5zdHJva2UhPT1yLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYoImFycm93X29wZW4iPT09bi50eXBlKW4udHlwZT1yLnR5cGU7ZWxzZXtpZihuLnR5cGUhPT1yLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O24udHlwZT0iZG91YmxlXyIrbi50eXBlfXJldHVybiJkb3VibGVfYXJyb3ciPT09bi50eXBlJiYobi50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxuLmxlbmd0aD1yLmxlbmd0aCxufXJldHVybiByfSxsZXg6e2ZpcnN0R3JhcGg6ZnVuY3Rpb24oKXtyZXR1cm4hIUl0JiYoSXQ9ITEsITApfX0sZXhpc3RzOkd0LG1ha2VVbmlxOnF0fSxadD1uKDI2KSxKdD1uLm4oWnQpLFF0PW4oNiksS3Q9bi5uKFF0KSx0ZT1uKDUwKSxlZT1uLm4odGUpO2Z1bmN0aW9uIG5lKHQsZSxuKXt2YXIgcj0uOSooZS53aWR0aCtlLmhlaWdodCksaT1be3g6ci8yLHk6MH0se3g6cix5Oi1yLzJ9LHt4OnIvMix5Oi1yfSx7eDowLHk6LXIvMn1dLGE9ZGUodCxyLHIsaSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBLdC5hLmludGVyc2VjdC5wb2x5Z29uKG4saSx0KX0sYX1mdW5jdGlvbiByZSh0LGUsbil7dmFyIHI9ZS5oZWlnaHQsaT1yLzQsYT1lLndpZHRoKzIqaSxvPVt7eDppLHk6MH0se3g6YS1pLHk6MH0se3g6YSx5Oi1yLzJ9LHt4OmEtaSx5Oi1yfSx7eDppLHk6LXJ9LHt4OjAseTotci8yfV0scz1kZSh0LGEscixvKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEt0LmEuaW50ZXJzZWN0LnBvbHlnb24obixvLHQpfSxzfWZ1bmN0aW9uIGllKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6LWkvMix5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4Oi1pLzIseTotaX0se3g6MCx5Oi1pLzJ9XSxvPWRlKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gS3QuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gYWUodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotMippLzYseTowfSx7eDpyLWkvNix5OjB9LHt4OnIrMippLzYseTotaX0se3g6aS82LHk6LWl9XSxvPWRlKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gS3QuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gb2UodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDoyKmkvNix5OjB9LHt4OnIraS82LHk6MH0se3g6ci0yKmkvNix5Oi1pfSx7eDotaS82LHk6LWl9XSxvPWRlKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gS3QuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gc2UodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotMippLzYseTowfSx7eDpyKzIqaS82LHk6MH0se3g6ci1pLzYseTotaX0se3g6aS82LHk6LWl9XSxvPWRlKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gS3QuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gY2UodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDppLzYseTowfSx7eDpyLWkvNix5OjB9LHt4OnIrMippLzYseTotaX0se3g6LTIqaS82LHk6LWl9XSxvPWRlKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gS3QuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gdWUodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDowLHk6MH0se3g6citpLzIseTowfSx7eDpyLHk6LWkvMn0se3g6citpLzIseTotaX0se3g6MCx5Oi1pfV0sbz1kZSh0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEt0LmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIGxlKHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPWUud2lkdGgrci80LGE9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsci8yKS5hdHRyKCJyeSIsci8yKS5hdHRyKCJ4IiwtaS8yKS5hdHRyKCJ5Iiwtci8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEt0LmEuaW50ZXJzZWN0LnJlY3Qobix0KX0sYX1mdW5jdGlvbiBoZSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyLHk6MH0se3g6cix5Oi1pfSx7eDowLHk6LWl9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OnIrOCx5OjB9LHt4OnIrOCx5Oi1pfSx7eDotOCx5Oi1pfSx7eDotOCx5OjB9XSxvPWRlKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gS3QuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gZmUodCxlLG4pe3ZhciByPWUud2lkdGgsaT1yLzIsYT1pLygyLjUrci81MCksbz1lLmhlaWdodCthLHM9Ik0gMCwiK2ErIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgYSAiK2krIiwiK2ErIiAwLDAsMCAiKy1yKyIgMCBsIDAsIitvKyIgYSAiK2krIiwiK2ErIiAwLDAsMCAiK3IrIiAwIGwgMCwiKy1vLGM9dC5hdHRyKCJsYWJlbC1vZmZzZXQteSIsYSkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIscykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXIvMisiLCIrLShvLzIrYSkrIikiKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7dmFyIGU9S3QuYS5pbnRlcnNlY3QucmVjdChuLHQpLHI9ZS54LW4ueDtpZigwIT1pJiYoTWF0aC5hYnMocik8bi53aWR0aC8yfHxNYXRoLmFicyhyKT09bi53aWR0aC8yJiZNYXRoLmFicyhlLnktbi55KT5uLmhlaWdodC8yLWEpKXt2YXIgbz1hKmEqKDEtcipyLyhpKmkpKTswIT1vJiYobz1NYXRoLnNxcnQobykpLG89YS1vLHQueS1uLnk+MCYmKG89LW8pLGUueSs9b31yZXR1cm4gZX0sY31mdW5jdGlvbiBkZSh0LGUsbixyKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIituLzIrIikiKX12YXIgcGU9e2FkZFRvUmVuZGVyOmZ1bmN0aW9uKHQpe3Quc2hhcGVzKCkucXVlc3Rpb249bmUsdC5zaGFwZXMoKS5oZXhhZ29uPXJlLHQuc2hhcGVzKCkuc3RhZGl1bT1sZSx0LnNoYXBlcygpLnN1YnJvdXRpbmU9aGUsdC5zaGFwZXMoKS5jeWxpbmRlcj1mZSx0LnNoYXBlcygpLnJlY3RfbGVmdF9pbnZfYXJyb3c9aWUsdC5zaGFwZXMoKS5sZWFuX3JpZ2h0PWFlLHQuc2hhcGVzKCkubGVhbl9sZWZ0PW9lLHQuc2hhcGVzKCkudHJhcGV6b2lkPXNlLHQuc2hhcGVzKCkuaW52X3RyYXBlem9pZD1jZSx0LnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PXVlfSxhZGRUb1JlbmRlclYyOmZ1bmN0aW9uKHQpe3Qoe3F1ZXN0aW9uOm5lfSksdCh7aGV4YWdvbjpyZX0pLHQoe3N0YWRpdW06bGV9KSx0KHtzdWJyb3V0aW5lOmhlfSksdCh7Y3lsaW5kZXI6ZmV9KSx0KHtyZWN0X2xlZnRfaW52X2Fycm93OmllfSksdCh7bGVhbl9yaWdodDphZX0pLHQoe2xlYW5fbGVmdDpvZX0pLHQoe3RyYXBlem9pZDpzZX0pLHQoe2ludl90cmFwZXpvaWQ6Y2V9KSx0KHtyZWN0X3JpZ2h0X2ludl9hcnJvdzp1ZX0pfX0sZ2U9e30seWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPU9iamVjdChkLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQobiwnIl0nKSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXSxhPSJkZWZhdWx0IjtpLmNsYXNzZXMubGVuZ3RoPjAmJihhPWkuY2xhc3Nlcy5qb2luKCIgIikpO3ZhciBvLHM9QihpLnN0eWxlcyksdT12b2lkIDAhPT1pLnRleHQ/aS50ZXh0OmkuaWQ7aWYoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscyl7dmFyIGw9e2xhYmVsOnUucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhvPWVlKCkocixsKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyl9ZWxzZXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2guc2V0QXR0cmlidXRlKCJzdHlsZSIscy5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgZj11LnNwbGl0KHgubGluZUJyZWFrUmVnZXgpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7cC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxwLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxwLnNldEF0dHJpYnV0ZSgieCIsIjEiKSxwLnRleHRDb250ZW50PWZbZF0saC5hcHBlbmRDaGlsZChwKX1vPWh9dmFyIGc9MCx5PSIiO3N3aXRjaChpLnR5cGUpe2Nhc2Uicm91bmQiOmc9NSx5PSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6eT0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjp5PSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjp5PSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6eT0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0Ijp5PSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6eT0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6eT0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOnk9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0Ijp5PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6eT0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOnk9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6eT0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjp5PSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjp5PSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6eT0icmVjdCI7YnJlYWs7ZGVmYXVsdDp5PSJyZWN0In1jLndhcm4oIkFkZGluZyBub2RlIixpLmlkLGkuZG9tSWQpLGUuc2V0Tm9kZShYdC5sb29rVXBEb21JZChpLmlkKSx7bGFiZWxUeXBlOiJzdmciLGxhYmVsU3R5bGU6cy5sYWJlbFN0eWxlLHNoYXBlOnksbGFiZWw6byxyeDpnLHJ5OmcsY2xhc3M6YSxzdHlsZTpzLnN0eWxlLGlkOlh0Lmxvb2tVcERvbUlkKGkuaWQpfSl9KSl9LHZlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPTA7aWYodm9pZCAwIT09dC5kZWZhdWx0U3R5bGUpe3ZhciBhPUIodC5kZWZhdWx0U3R5bGUpO249YS5zdHlsZSxyPWEubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKGEpe2krKzt2YXIgbz0iTC0iK2Euc3RhcnQrIi0iK2EuZW5kLHM9IkxTLSIrYS5zdGFydCxjPSJMRS0iK2EuZW5kLHU9e307ImFycm93X29wZW4iPT09YS50eXBlP3UuYXJyb3doZWFkPSJub25lIjp1LmFycm93aGVhZD0ibm9ybWFsIjt2YXIgbD0iIixoPSIiO2lmKHZvaWQgMCE9PWEuc3R5bGUpe3ZhciBmPUIoYS5zdHlsZSk7bD1mLnN0eWxlLGg9Zi5sYWJlbFN0eWxlfWVsc2Ugc3dpdGNoKGEuc3Ryb2tlKXtjYXNlIm5vcm1hbCI6bD0iZmlsbDpub25lIix2b2lkIDAhPT1uJiYobD1uKSx2b2lkIDAhPT1yJiYoaD1yKTticmVhaztjYXNlImRvdHRlZCI6bD0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6bD0iIHN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lIn11LnN0eWxlPWwsdS5sYWJlbFN0eWxlPWgsdm9pZCAwIT09YS5pbnRlcnBvbGF0ZT91LmN1cnZlPUQoYS5pbnRlcnBvbGF0ZSxkLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT91LmN1cnZlPUQodC5kZWZhdWx0SW50ZXJwb2xhdGUsZC5jdXJ2ZUxpbmVhcik6dS5jdXJ2ZT1EKGdlLmN1cnZlLGQuY3VydmVMaW5lYXIpLHZvaWQgMD09PWEudGV4dD92b2lkIDAhPT1hLnN0eWxlJiYodS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOih1LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIix1LmxhYmVscG9zPSJjIixfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzPyh1LmxhYmVsVHlwZT0iaHRtbCIsdS5sYWJlbD0nPHNwYW4gaWQ9IkwtJy5jb25jYXQobywnIiBjbGFzcz0iZWRnZUxhYmVsIEwtJykuY29uY2F0KHMsIicgTC0iKS5jb25jYXQoYywnIj4nKS5jb25jYXQoYS50ZXh0LnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpLCI8L3NwYW4+IikpOih1LmxhYmVsVHlwZT0idGV4dCIsdS5sYWJlbD1hLnRleHQucmVwbGFjZSh4LmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PWEuc3R5bGUmJih1LnN0eWxlPXUuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksdS5sYWJlbFN0eWxlPXUubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksdS5pZD1vLHUuY2xhc3M9cysiICIrYyx1Lm1pbmxlbj1hLmxlbmd0aHx8MSxlLnNldEVkZ2UoWHQubG9va1VwRG9tSWQoYS5zdGFydCksWHQubG9va1VwRG9tSWQoYS5lbmQpLHUsaSl9KSl9LG1lPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspZ2VbZVtuXV09dFtlW25dXX0sYmU9ZnVuY3Rpb24odCl7Yy5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxYdC5jbGVhcigpO3RyeXt2YXIgZT1KdC5hLnBhcnNlcjtyZXR1cm4gZS55eT1YdCxlLnBhcnNlKHQpLFh0LmdldENsYXNzZXMoKX1jYXRjaCh0KXtyZXR1cm59fSx4ZT1mdW5jdGlvbih0LGUpe2MuaW5mbygiRHJhd2luZyBmbG93Y2hhcnQiKSxYdC5jbGVhcigpLFh0LnNldEdlbigiZ2VuLTEiKTt2YXIgbj1KdC5hLnBhcnNlcjtuLnl5PVh0LG4ucGFyc2UodCk7dmFyIHI9WHQuZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09ciYmKHI9IlREIik7Zm9yKHZhciBpLGE9X3QoKS5mbG93Y2hhcnQsbz1hLm5vZGVTcGFjaW5nfHw1MCxzPWEucmFua1NwYWNpbmd8fDUwLHU9bmV3IEcuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnIsbm9kZXNlcDpvLHJhbmtzZXA6cyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxsPVh0LmdldFN1YkdyYXBocygpLGg9bC5sZW5ndGgtMTtoPj0wO2gtLSlpPWxbaF0sWHQuYWRkVmVydGV4KGkuaWQsaS50aXRsZSwiZ3JvdXAiLHZvaWQgMCxpLmNsYXNzZXMpO3ZhciBmPVh0LmdldFZlcnRpY2VzKCk7Yy53YXJuKCJHZXQgdmVydGljZXMiLGYpO3ZhciBwPVh0LmdldEVkZ2VzKCksZz0wO2ZvcihnPWwubGVuZ3RoLTE7Zz49MDtnLS0pe2k9bFtnXSxPYmplY3QoZC5zZWxlY3RBbGwpKCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKHZhciB5PTA7eTxpLm5vZGVzLmxlbmd0aDt5KyspYy53YXJuKCJTZXR0aW5nIHN1YmdyYXBoIixpLm5vZGVzW3ldLFh0Lmxvb2tVcERvbUlkKGkubm9kZXNbeV0pLFh0Lmxvb2tVcERvbUlkKGkuaWQpKSx1LnNldFBhcmVudChYdC5sb29rVXBEb21JZChpLm5vZGVzW3ldKSxYdC5sb29rVXBEb21JZChpLmlkKSl9eWUoZix1LGUpLHZlKHAsdSk7dmFyIHY9bmV3KDAsS3QuYS5yZW5kZXIpO3BlLmFkZFRvUmVuZGVyKHYpLHYuYXJyb3dzKCkubm9uZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDAgMCBMIDAgMCB6Iik7S3QuYS51dGlsLmFwcGx5U3R5bGUoaSxuW3IrIlN0eWxlIl0pfSx2LmFycm93cygpLm5vcm1hbD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O3ZhciBtPU9iamVjdChkLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7bS5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSxjLndhcm4odSk7dmFyIGI9T2JqZWN0KGQuc2VsZWN0KSgiIyIrZSsiIGciKTt2KGIsdSksYi5zZWxlY3RBbGwoImcubm9kZSIpLmF0dHIoInRpdGxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gWHQuZ2V0VG9vbHRpcCh0aGlzLmlkKX0pKTt2YXIgeD1hLmRpYWdyYW1QYWRkaW5nLF89bS5ub2RlKCkuZ2V0QkJveCgpLGs9Xy53aWR0aCsyKngsdz1fLmhlaWdodCsyKng7VyhtLHcsayxhLnVzZU1heFdpZHRoKTt2YXIgRT0iIi5jb25jYXQoXy54LXgsIiAiKS5jb25jYXQoXy55LXgsIiAiKS5jb25jYXQoaywiICIpLmNvbmNhdCh3KTtmb3IoYy5kZWJ1Zygidmlld0JveCAiLmNvbmNhdChFKSksbS5hdHRyKCJ2aWV3Qm94IixFKSxYdC5pbmRleE5vZGVzKCJzdWJHcmFwaCIrZyksZz0wO2c8bC5sZW5ndGg7ZysrKWlmKCJ1bmRlZmluZWQiIT09KGk9bFtnXSkudGl0bGUpe3ZhciBUPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2UrJyBbaWQ9IicrWHQubG9va1VwRG9tSWQoaS5pZCkrJyJdIHJlY3QnKSxDPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2UrJyBbaWQ9IicrWHQubG9va1VwRG9tSWQoaS5pZCkrJyJdJyksUz1UWzBdLnguYmFzZVZhbC52YWx1ZSxBPVRbMF0ueS5iYXNlVmFsLnZhbHVlLE09VFswXS53aWR0aC5iYXNlVmFsLnZhbHVlLE89T2JqZWN0KGQuc2VsZWN0KShDWzBdKS5zZWxlY3QoIi5sYWJlbCIpO08uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIuY29uY2F0KFMrTS8yLCIsICIpLmNvbmNhdChBKzE0LCIpIikpLE8uYXR0cigiaWQiLGUrIlRleHQiKTtmb3IodmFyIEQ9MDtEPGkuY2xhc3Nlcy5sZW5ndGg7RCsrKUNbMF0uY2xhc3NMaXN0LmFkZChpLmNsYXNzZXNbRF0pfWEuaHRtbExhYmVscztmb3IodmFyIE49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksQj0wO0I8Ti5sZW5ndGg7QisrKXt2YXIgTD1OW0JdLFA9TC5nZXRCQm94KCksRj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO0Yuc2V0QXR0cmlidXRlKCJyeCIsMCksRi5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxGLnNldEF0dHJpYnV0ZSgid2lkdGgiLFAud2lkdGgpLEYuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFAuaGVpZ2h0KSxMLmluc2VydEJlZm9yZShGLEwuZmlyc3RDaGlsZCl9T2JqZWN0LmtleXMoZikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49Zlt0XTtpZihuLmxpbmspe3ZhciByPU9iamVjdChkLnNlbGVjdCkoIiMiK2UrJyBbaWQ9IicrWHQubG9va1VwRG9tSWQodCkrJyJdJyk7aWYocil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKTtpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuLmNsYXNzZXMuam9pbigiICIpKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLG4ubGluayksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLG4ubGlua1RhcmdldCYmaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG4ubGlua1RhcmdldCk7dmFyIGE9ci5pbnNlcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSwiOmZpcnN0LWNoaWxkIiksbz1yLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO28mJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBvLm5vZGUoKX0pKTt2YXIgcz1yLnNlbGVjdCgiLmxhYmVsIik7cyYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIHMubm9kZSgpfSkpfX19KSl9LF9lPW4oMTgpLGtlPW4ubihfZSksd2U9e2V4dGVuc2lvbjpmdW5jdGlvbih0LGUsbil7Yy50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsbiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSxjb21wb3NpdGlvbjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxhZ2dyZWdhdGlvbjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxkZXBlbmRlbmN5OmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZGVwZW5kZW5jeUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1wb2ludEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLXBvaW50U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNpcmNsZTpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY3Jvc3M6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jcm9zc0VuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLDEyKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jcm9zc1N0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxiYXJiOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX19LEVlPWZ1bmN0aW9uKHQsZSxuLHIpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7d2VbZV0odCxuLHIpfSkpfTt2YXIgVGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dHx8IiI7aWYoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscylyZXR1cm4gaT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxjLmluZm8oInZlcnRleFRleHQiK2kpLGZ1bmN0aW9uKHQpe3ZhciBlLG4scj1PYmplY3QoZC5zZWxlY3QpKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLGk9ci5hcHBlbmQoInhodG1sOmRpdiIpLGE9dC5sYWJlbCxvPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiBpLmh0bWwoJzxzcGFuIGNsYXNzPSInK28rJyI+JythKyI8L3NwYW4+IiksZT1pLChuPXQubGFiZWxTdHlsZSkmJmUuYXR0cigic3R5bGUiLG4pLGkuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLGkuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksci5ub2RlKCl9KHtpc05vZGU6cixsYWJlbDppLnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpLGxhYmVsU3R5bGU6ZS5yZXBsYWNlKCJmaWxsOiIsImNvbG9yOiIpfSk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTthLnNldEF0dHJpYnV0ZSgic3R5bGUiLGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7dmFyIG89W107bz0ic3RyaW5nIj09dHlwZW9mIGk/aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/aTpbXTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7dS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSx1LnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSx1LnNldEF0dHJpYnV0ZSgieCIsIjAiKSxuP3Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOnUuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHUudGV4dENvbnRlbnQ9b1tzXS50cmltKCksYS5hcHBlbmRDaGlsZCh1KX1yZXR1cm4gYX0sQ2U9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aT1ufHwibm9kZSBkZWZhdWx0Ijt2YXIgYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsZS5sYWJlbFN0eWxlKSxzPW8ubm9kZSgpLmFwcGVuZENoaWxkKFRlKGUubGFiZWxUZXh0LGUubGFiZWxTdHlsZSwhMSxyKSksYz1zLmdldEJCb3goKTtpZihfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgdT1zLmNoaWxkcmVuWzBdLGw9T2JqZWN0KGQuc2VsZWN0KShzKTtjPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbC5hdHRyKCJ3aWR0aCIsYy53aWR0aCksbC5hdHRyKCJoZWlnaHQiLGMuaGVpZ2h0KX12YXIgaD1lLnBhZGRpbmcvMjtyZXR1cm4gby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYy53aWR0aC8yKyIsICIrLWMuaGVpZ2h0LzIrIikiKSx7c2hhcGVTdmc6YSxiYm94OmMsaGFsZlBhZGRpbmc6aCxsYWJlbDpvfX0sU2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLm5vZGUoKS5nZXRCQm94KCk7dC53aWR0aD1uLndpZHRoLHQuaGVpZ2h0PW4uaGVpZ2h0fTtmdW5jdGlvbiBBZSh0LGUsbixyKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK24vMisiKSIpfXZhciBNZT17fSxPZT17fSxEZT17fSxOZT1mdW5jdGlvbih0LGUpe3JldHVybiBjLmRlYnVnKCJJbiBpc0RlY2VuZGFudCIsZSwiICIsdCwiID0gIixPZVtlXS5pbmRleE9mKHQpPj0wKSxPZVtlXS5pbmRleE9mKHQpPj0wfSxCZT1mdW5jdGlvbiB0KGUsbixyLGkpe2Mud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGUsInJvb3QiLGksImRhdGEiLG4ubm9kZShlKSxpKTt2YXIgYT1uLmNoaWxkcmVuKGUpfHxbXTtlIT09aSYmYS5wdXNoKGUpLGMud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsZSwibm9kZXMiLGEpLGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7aWYobi5jaGlsZHJlbihhKS5sZW5ndGg+MCl0KGEsbixyLGkpO2Vsc2V7dmFyIG89bi5ub2RlKGEpO2MuaW5mbygiY3AgIixhLCIgdG8gIixpLCIgd2l0aCBwYXJlbnQgIixlKSxyLnNldE5vZGUoYSxvKSxpIT09bi5wYXJlbnQoYSkmJihjLndhcm4oIlNldHRpbmcgcGFyZW50IixhLG4ucGFyZW50KGEpKSxyLnNldFBhcmVudChhLG4ucGFyZW50KGEpKSksZSE9PWkmJmEhPT1lPyhjLmRlYnVnKCJTZXR0aW5nIHBhcmVudCIsYSxlKSxyLnNldFBhcmVudChhLGUpKTooYy5pbmZvKCJJbiBjb3B5ICIsZSwicm9vdCIsaSwiZGF0YSIsbi5ub2RlKGUpLGkpLGMuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLGEsImNsdXN0ZXIhPT1yb290SWQiLGUhPT1pLCJub2RlIT09Y2x1c3RlcklkIixhIT09ZSkpO3ZhciBzPW4uZWRnZXMoYSk7Yy5kZWJ1ZygiQ29weWluZyBFZGdlcyIscykscy5mb3JFYWNoKChmdW5jdGlvbih0KXtjLmluZm8oIkVkZ2UiLHQpO3ZhciBhPW4uZWRnZSh0LnYsdC53LHQubmFtZSk7Yy5pbmZvKCJFZGdlIGRhdGEiLGEsaSk7dHJ5eyFmdW5jdGlvbih0LGUpe3JldHVybiBjLmluZm8oIkRlY2VuZGFudHMgb2YgIixlLCIgaXMgIixPZVtlXSksYy5pbmZvKCJFZGdlIGlzICIsdCksdC52IT09ZSYmKHQudyE9PWUmJihPZVtlXT8oYy5pbmZvKCJIZXJlICIpLE9lW2VdLmluZGV4T2YodC52KT49MHx8KCEhTmUodC52LGUpfHwoISFOZSh0LncsZSl8fE9lW2VdLmluZGV4T2YodC53KT49MCkpKTooYy5kZWJ1ZygiVGlsdCwgIixlLCIsbm90IGluIGRlY2VuZGFudHMiKSwhMSkpKX0odCxpKT9jLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLHQudiwiLS1ceDNlIix0LncsIiByb290SWQ6ICIsaSwiIGNsdXN0ZXJJZDoiLGUpOihjLmluZm8oIkNvcHlpbmcgYXMgIix0LnYsdC53LGEsdC5uYW1lKSxyLnNldEVkZ2UodC52LHQudyxhLHQubmFtZSksYy5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLHIuZWRnZXMoKSxyLmVkZ2Uoci5lZGdlcygpWzBdKSkpfWNhdGNoKHQpe2MuZXJyb3IodCl9fSkpfWMuZGVidWcoIlJlbW92aW5nIG5vZGUiLGEpLG4ucmVtb3ZlTm9kZShhKX0pKX0sTGU9ZnVuY3Rpb24gdChlLG4pe2MudHJhY2UoIlNlYXJjaGluZyIsZSk7dmFyIHI9bi5jaGlsZHJlbihlKTtpZihjLnRyYWNlKCJTZWFyY2hpbmcgY2hpbGRyZW4gb2YgaWQgIixlLHIpLHIubGVuZ3RoPDEpcmV0dXJuIGMudHJhY2UoIlRoaXMgaXMgYSB2YWxpZCBub2RlIixlKSxlO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT10KHJbaV0sbik7aWYoYSlyZXR1cm4gYy50cmFjZSgiRm91bmQgcmVwbGFjZW1lbnQgZm9yIixlLCIgPT4gIixhKSxhfX0sUGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1lW3RdJiZNZVt0XS5leHRlcm5hbENvbm5lY3Rpb25zJiZNZVt0XT9NZVt0XS5pZDp0fSxGZT1mdW5jdGlvbih0LGUpeyF0fHxlPjEwP2MuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpOihjLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpLHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNoaWxkcmVuKGUpLmxlbmd0aD4wJiYoYy53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIixMZShlLHQpKSxPZVtlXT1mdW5jdGlvbiB0KGUsbil7Zm9yKHZhciByPW4uY2hpbGRyZW4oZSksaT1bXS5jb25jYXQociksYT0wO2E8ci5sZW5ndGg7YSsrKURlW3JbYV1dPWUsaT1pLmNvbmNhdCh0KHJbYV0sbikpO3JldHVybiBpfShlLHQpLE1lW2VdPXtpZDpMZShlLHQpLGNsdXN0ZXJEYXRhOnQubm9kZShlKX0pfSkpLHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmNoaWxkcmVuKGUpLHI9dC5lZGdlcygpO24ubGVuZ3RoPjA/KGMuZGVidWcoIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSxPZSksci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnYhPT1lJiZ0LnchPT1lJiYoTmUodC52LGUpXk5lKHQudyxlKSYmKGMud2FybigiRWRnZTogIix0LCIgbGVhdmVzIGNsdXN0ZXIgIixlKSxjLndhcm4oIkRlY2VuZGFudHMgb2YgWFhYICIsZSwiOiAiLE9lW2VdKSxNZVtlXS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKSl9KSkpOmMuZGVidWcoIk5vdCBhIGNsdXN0ZXIgIixlLE9lKX0pKSx0LmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2Mud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSkpLGMud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKGUpKSk7dmFyIHI9ZS52LGk9ZS53O2Mud2FybigiRml4IFhYWCIsTWUsImlkczoiLGUudixlLncsIlRyYW5zbGF0ZWluZzogIixNZVtlLnZdLCIgLS0tICIsTWVbZS53XSksKE1lW2Uudl18fE1lW2Uud10pJiYoYy53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLGUudixlLncsZS5uYW1lKSxyPVBlKGUudiksaT1QZShlLncpLHQucmVtb3ZlRWRnZShlLnYsZS53LGUubmFtZSksciE9PWUudiYmKG4uZnJvbUNsdXN0ZXI9ZS52KSxpIT09ZS53JiYobi50b0NsdXN0ZXI9ZS53KSxjLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHIsaSxlLm5hbWUpLHQuc2V0RWRnZShyLGksbixlLm5hbWUpKX0pKSxjLndhcm4oIkFkanVzdGVkIEdyYXBoIixHLmEuanNvbi53cml0ZSh0KSksSWUodCwwKSxjLnRyYWNlKE1lKSl9LEllPWZ1bmN0aW9uIHQoZSxuKXtpZihjLndhcm4oImV4dHJhY3RvciAtICIsbixHLmEuanNvbi53cml0ZShlKSxlLmNoaWxkcmVuKCJEIikpLG4+MTApYy5lcnJvcigiQmFpbGluZyBvdXQiKTtlbHNle2Zvcih2YXIgcj1lLm5vZGVzKCksaT0hMSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1lLmNoaWxkcmVuKG8pO2k9aXx8cy5sZW5ndGg+MH1pZihpKXtjLmRlYnVnKCJOb2RlcyA9ICIscixuKTtmb3IodmFyIHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGw9clt1XTtpZihjLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLGwsTWUsTWVbbF0mJiFNZVtsXS5leHRlcm5hbENvbm5lY3Rpb25zLCFlLnBhcmVudChsKSxlLm5vZGUobCksZS5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixuKSxNZVtsXSlpZighTWVbbF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCl7Yy53YXJuKCJDbHVzdGVyIHdpdGhvdXQgZXh0ZXJuYWwgY29ubmVjdGlvbnMsIHdpdGhvdXQgYSBwYXJlbnQgYW5kIHdpdGggY2hpbGRyZW4iLGwsbik7dmFyIGg9ZS5ncmFwaCgpLGY9bmV3IEcuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOiJUQiI9PT1oLnJhbmtkaXI/IkxSIjoiVEIiLG5vZGVzZXA6NTAscmFua3NlcDo1MCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtjLndhcm4oIk9sZCBncmFwaCBiZWZvcmUgY29weSIsRy5hLmpzb24ud3JpdGUoZSkpLEJlKGwsZSxmLGwpLGUuc2V0Tm9kZShsLHtjbHVzdGVyTm9kZTohMCxpZDpsLGNsdXN0ZXJEYXRhOk1lW2xdLmNsdXN0ZXJEYXRhLGxhYmVsVGV4dDpNZVtsXS5sYWJlbFRleHQsZ3JhcGg6Zn0pLGMud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsbCwiKSIsRy5hLmpzb24ud3JpdGUoZikpLGMuZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5IixHLmEuanNvbi53cml0ZShlKSl9ZWxzZSBjLndhcm4oIkNsdXN0ZXIgKiogIixsLCIgKipub3QgbWVldGluZyB0aGUgY3JpdGVyaWEgIWV4dGVybmFsQ29ubmVjdGlvbnM6IiwhTWVbbF0uZXh0ZXJuYWxDb25uZWN0aW9ucywiIG5vIHBhcmVudDogIiwhZS5wYXJlbnQobCksIiBjaGlsZHJlbiAiLGUuY2hpbGRyZW4obCkmJmUuY2hpbGRyZW4obCkubGVuZ3RoPjAsZS5jaGlsZHJlbigiRCIpLG4pLGMuZGVidWcoTWUpO2Vsc2UgYy5kZWJ1ZygiTm90IGEgY2x1c3RlciIsbCxuKX1yPWUubm9kZXMoKSxjLndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixyKTtmb3IodmFyIGQ9MDtkPHIubGVuZ3RoO2QrKyl7dmFyIHA9cltkXSxnPWUubm9kZShwKTtjLndhcm4oIiBOb3cgbmV4dCBsZXZlbCIscCxnKSxnLmNsdXN0ZXJOb2RlJiZ0KGcuZ3JhcGgsbisxKX19ZWxzZSBjLmRlYnVnKCJEb25lLCBubyBub2RlIGhhcyBjaGlsZHJlbiIsZS5ub2RlcygpKX19LGplPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUsbil7aWYoMD09PW4ubGVuZ3RoKXJldHVybltdO3ZhciByPU9iamVjdC5hc3NpZ24obik7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9ZS5jaGlsZHJlbihuKSxhPXQoZSxpKTtyPXIuY29uY2F0KGEpfSkpLHJ9KHQsdC5jaGlsZHJlbigpKX0sUmU9bigxNzApO3ZhciBZZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LngsYT10Lnksbz1pLXIueCxzPWEtci55LGM9TWF0aC5zcXJ0KGUqZSpzKnMrbipuKm8qbyksdT1NYXRoLmFicyhlKm4qby9jKTtyLng8aSYmKHU9LXUpO3ZhciBsPU1hdGguYWJzKGUqbipzL2MpO3JldHVybiByLnk8YSYmKGw9LWwpLHt4OmkrdSx5OmErbH19O3ZhciB6ZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIFllKHQsZSxlLG4pfTtmdW5jdGlvbiBVZSh0LGUpe3JldHVybiB0KmU+MH12YXIgJGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCxnLHk7aWYoaT1lLnktdC55LG89dC54LWUueCxjPWUueCp0LnktdC54KmUueSxmPWkqbi54K28qbi55K2MsZD1pKnIueCtvKnIueStjLCEoMCE9PWYmJjAhPT1kJiZVZShmLGQpfHwoYT1yLnktbi55LHM9bi54LXIueCx1PXIueCpuLnktbi54KnIueSxsPWEqdC54K3MqdC55K3UsaD1hKmUueCtzKmUueSt1LDAhPT1sJiYwIT09aCYmVWUobCxoKXx8MD09KHA9aSpzLWEqbykpKSlyZXR1cm4gZz1NYXRoLmFicyhwLzIpLHt4Oih5PW8qdS1zKmMpPDA/KHktZykvcDooeStnKS9wLHk6KHk9YSpjLWkqdSk8MD8oeS1nKS9wOih5K2cpL3B9fSxXZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9W10sbz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9yRWFjaD9lLmZvckVhY2goKGZ1bmN0aW9uKHQpe289TWF0aC5taW4obyx0LngpLHM9TWF0aC5taW4ocyx0LnkpfSkpOihvPU1hdGgubWluKG8sZS54KSxzPU1hdGgubWluKHMsZS55KSk7Zm9yKHZhciBjPXItdC53aWR0aC8yLW8sdT1pLXQuaGVpZ2h0LzItcyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBoPWVbbF0sZj1lW2w8ZS5sZW5ndGgtMT9sKzE6MF0sZD0kZSh0LG4se3g6YytoLngseTp1K2gueX0se3g6YytmLngseTp1K2YueX0pO2QmJmEucHVzaChkKX1pZighYS5sZW5ndGgpcmV0dXJuIHQ7YS5sZW5ndGg+MSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIGFbMF19O3ZhciBWZT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX0sSGU9e25vZGU6bi5uKFJlKS5hLGNpcmNsZTp6ZSxlbGxpcHNlOlllLHBvbHlnb246V2UscmVjdDpWZX0sR2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1DZSh0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmc7Yy5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBvPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG8uYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLFNlKGUsbyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEhlLnJlY3QoZSx0KX0scn0scWU9W10sWGU9e30sWmU9MCxKZT1bXSxRZT1mdW5jdGlvbih0KXt2YXIgZT0iIixuPXQ7aWYodC5pbmRleE9mKCJ+Iik+MCl7dmFyIHI9dC5zcGxpdCgifiIpO249clswXSxlPXJbMV19cmV0dXJue2NsYXNzTmFtZTpuLHR5cGU6ZX19LEtlPWZ1bmN0aW9uKHQpe3ZhciBlPVFlKHQpO3ZvaWQgMD09PVhlW2UuY2xhc3NOYW1lXSYmKFhlW2UuY2xhc3NOYW1lXT17aWQ6ZS5jbGFzc05hbWUsdHlwZTplLnR5cGUsY3NzQ2xhc3NlczpbXSxtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sZG9tSWQ6ImNsYXNzaWQtIitlLmNsYXNzTmFtZSsiLSIrWmV9LFplKyspfSx0bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXMoWGUpLG49MDtuPGUubGVuZ3RoO24rKylpZihYZVtlW25dXS5pZD09PXQpcmV0dXJuIFhlW2Vbbl1dLmRvbUlkfSxlbj1mdW5jdGlvbih0LGUpe3ZhciBuPVFlKHQpLmNsYXNzTmFtZSxyPVhlW25dO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIGk9ZS50cmltKCk7aS5zdGFydHNXaXRoKCI8PCIpJiZpLmVuZHNXaXRoKCI+PiIpP3IuYW5ub3RhdGlvbnMucHVzaChpLnN1YnN0cmluZygyLGkubGVuZ3RoLTIpKTppLmluZGV4T2YoIikiKT4wP3IubWV0aG9kcy5wdXNoKGkpOmkmJnIubWVtYmVycy5wdXNoKGkpfX0sbm49ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dDt0WzBdLm1hdGNoKC9cZC8pJiYobj0iY2xhc3NpZC0iK24pLHZvaWQgMCE9PVhlW25dJiZYZVtuXS5jc3NDbGFzc2VzLnB1c2goZSl9KSl9LHJuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1fdCgpLGk9dCxhPXRuKGkpOyJsb29zZSI9PT1yLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUmJnZvaWQgMCE9PVhlW2ldJiYobiYmKFhlW2ldLnRvb2x0aXA9eC5zYW5pdGl6ZVRleHQobixyKSksSmUucHVzaCgoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KGEsJyJdJykpO251bGwhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtWLnJ1bkZ1bmMoZSxhKX0pLCExKX0pKSl9LGFuPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxvbj1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoZC5zZWxlY3QpKCIubWVybWFpZFRvb2x0aXAiKTtudWxsPT09KGUuX2dyb3Vwc3x8ZSlbMF1bMF0mJihlPU9iamVjdChkLnNlbGVjdCkoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibWVybWFpZFRvb2x0aXAiKS5zdHlsZSgib3BhY2l0eSIsMCkpLE9iamVjdChkLnNlbGVjdCkodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PU9iamVjdChkLnNlbGVjdCkodGhpcyk7aWYobnVsbCE9PXQuYXR0cigidGl0bGUiKSl7dmFyIG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxlLmh0bWwodC5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrbi5sZWZ0KyhuLnJpZ2h0LW4ubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStuLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSx0LmNsYXNzZWQoImhvdmVyIiwhMCl9fSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksT2JqZWN0KGQuc2VsZWN0KSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSkpfTtKZS5wdXNoKG9uKTt2YXIgc249e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXtIby5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkuY2xhc3N9LGFkZENsYXNzOktlLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7SmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sY2xlYXI6ZnVuY3Rpb24oKXtxZT1bXSxYZT17fSwoSmU9W10pLnB1c2gob24pfSxnZXRDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gWGVbdF19LGdldENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gWGV9LGFkZEFubm90YXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1RZSh0KS5jbGFzc05hbWU7WGVbbl0uYW5ub3RhdGlvbnMucHVzaChlKX0sZ2V0UmVsYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHFlfSxhZGRSZWxhdGlvbjpmdW5jdGlvbih0KXtjLmRlYnVnKCJBZGRpbmcgcmVsYXRpb246ICIrSlNPTi5zdHJpbmdpZnkodCkpLEtlKHQuaWQxKSxLZSh0LmlkMiksdC5pZDE9UWUodC5pZDEpLmNsYXNzTmFtZSx0LmlkMj1RZSh0LmlkMikuY2xhc3NOYW1lLHFlLnB1c2godCl9LGFkZE1lbWJlcjplbixhZGRNZW1iZXJzOmZ1bmN0aW9uKHQsZSl7QXJyYXkuaXNBcnJheShlKSYmKGUucmV2ZXJzZSgpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVuKHQsZSl9KSkpfSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigxKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOmFuLHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtybih0LGUsbiksWGVbdF0uaGF2ZUNhbGxiYWNrPSEwfSkpLG5uKHQsImNsaWNrYWJsZSIpfSxzZXRDc3NDbGFzczpubixzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1fdCgpO3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10O3RbMF0ubWF0Y2goL1xkLykmJihpPSJjbGFzc2lkLSIraSksdm9pZCAwIT09WGVbaV0mJihYZVtpXS5saW5rPVYuZm9ybWF0VXJsKGUsciksbiYmKFhlW2ldLnRvb2x0aXA9eC5zYW5pdGl6ZVRleHQobixyKSkpfSkpLG5uKHQsImNsaWNrYWJsZSIpfSxsb29rVXBEb21JZDp0bn0sY249MCx1bj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8oXCt8LXx+fCMpPyhcdyspKH5cdyt+fFxbXF0pP1xzKyhcdyspLyksbj10Lm1hdGNoKC9eKFsrfFwtfH58I10pPyhcdyspICpcKCAqKC4qKVwpICooXCp8XCQpPyAqKFx3Klt+fFtcXV0qXHMqXHcqfj8pJC8pO3JldHVybiBlJiYhbj9sbihlKTpuP2huKG4pOmZuKHQpfSxsbj1mdW5jdGlvbih0KXt2YXIgZT0iIjt0cnl7ZT0odFsxXT90WzFdLnRyaW0oKToiIikrKHRbMl0/dFsyXS50cmltKCk6IiIpKyh0WzNdP3BuKHRbM10udHJpbSgpKToiIikrIiAiKyh0WzRdP3RbNF0udHJpbSgpOiIiKX1jYXRjaChuKXtlPXR9cmV0dXJue2Rpc3BsYXlUZXh0OmUsY3NzU3R5bGU6IiJ9fSxobj1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiO3RyeXt2YXIgcj10WzFdP3RbMV0udHJpbSgpOiIiLGk9dFsyXT90WzJdLnRyaW0oKToiIixhPXRbM10/cG4odFszXS50cmltKCkpOiIiLG89dFs0XT90WzRdLnRyaW0oKToiIjtuPXIraSsiKCIrYSsiKSIrKHRbNV0/IiA6ICIrcG4odFs1XSkudHJpbSgpOiIiKSxlPWduKG8pfWNhdGNoKGUpe249dH1yZXR1cm57ZGlzcGxheVRleHQ6bixjc3NTdHlsZTplfX0sZm49ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj0iIixyPSIiLGk9dC5pbmRleE9mKCIoIiksYT10LmluZGV4T2YoIikiKTtpZihpPjEmJmE+aSYmYTw9dC5sZW5ndGgpe3ZhciBvPSIiLHM9IiIsYz10LnN1YnN0cmluZygwLDEpO2MubWF0Y2goL1x3Lyk/cz10LnN1YnN0cmluZygwLGkpLnRyaW0oKTooYy5tYXRjaCgvXCt8LXx+fCMvKSYmKG89Yykscz10LnN1YnN0cmluZygxLGkpLnRyaW0oKSk7dmFyIHU9dC5zdWJzdHJpbmcoaSsxLGEpLGw9dC5zdWJzdHJpbmcoYSsxLDEpO249Z24obCksZT1vK3MrIigiK3BuKHUudHJpbSgpKSsiKSIsYTwiIi5sZW5ndGgmJiIiIT09KHI9dC5zdWJzdHJpbmcoYSsyKS50cmltKCkpJiYocj0iIDogIitwbihyKSl9ZWxzZSBlPXBuKHQpO3JldHVybntkaXNwbGF5VGV4dDplLGNzc1N0eWxlOm59fSxkbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT11bihlKSxhPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHIucGFkZGluZykudGV4dChpLmRpc3BsYXlUZXh0KTsiIiE9PWkuY3NzU3R5bGUmJmEuYXR0cigic3R5bGUiLGkuY3NzU3R5bGUpLG58fGEuYXR0cigiZHkiLHIudGV4dEhlaWdodCl9LHBuPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZTtyZXR1cm4tMSE9ZS5pbmRleE9mKCJ+Iik/dChuPShuPW4ucmVwbGFjZSgifiIsIjwiKSkucmVwbGFjZSgifiIsIj4iKSk6bn0sZ249ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fSx5bj1mdW5jdGlvbih0LGUsbil7Yy5pbmZvKCJSZW5kZXJpbmcgY2xhc3MgIitlKTt2YXIgcixpPWUuaWQsYT17aWQ6aSxsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LG89dC5hcHBlbmQoImciKS5hdHRyKCJpZCIsdG4oaSkpLmF0dHIoImNsYXNzIiwiY2xhc3NHcm91cCIpO3I9ZS5saW5rP28uYXBwZW5kKCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IiwiX2JsYW5rIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsbi50ZXh0SGVpZ2h0K24ucGFkZGluZykuYXR0cigieCIsMCk6by5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTt2YXIgcz0hMDtlLmFubm90YXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwZW5kKCJ0c3BhbiIpLnRleHQoIsKrIit0KyLCuyIpO3N8fGUuYXR0cigiZHkiLG4udGV4dEhlaWdodCkscz0hMX0pKTt2YXIgdT1lLmlkO3ZvaWQgMCE9PWUudHlwZSYmIiIhPT1lLnR5cGUmJih1Kz0iPCIrZS50eXBlKyI+Iik7dmFyIGw9ci5hcHBlbmQoInRzcGFuIikudGV4dCh1KS5hdHRyKCJjbGFzcyIsInRpdGxlIik7c3x8bC5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KTt2YXIgaD1yLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LGY9by5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luLzIpLGQ9by5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGgrbi5kaXZpZGVyTWFyZ2luK24udGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtzPSEwLGUubWVtYmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtkbihkLHQscyxuKSxzPSExfSkpO3ZhciBwPWQubm9kZSgpLmdldEJCb3goKSxnPW8uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQpLmF0dHIoInkyIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQpLHk9by5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGgrMipuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQrbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO3M9ITAsZS5tZXRob2RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2RuKHksdCxzLG4pLHM9ITF9KSk7dmFyIHY9by5ub2RlKCkuZ2V0QkJveCgpLG09IiAiO2UuY3NzQ2xhc3Nlcy5sZW5ndGg+MCYmKG0rPWUuY3NzQ2xhc3Nlcy5qb2luKCIgIikpO3ZhciBiPW8uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHYud2lkdGgrMipuLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdi5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbikuYXR0cigiY2xhc3MiLG0pLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIHIubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zZXRBdHRyaWJ1dGUoIngiLChiLXQuZ2V0QkJveCgpLndpZHRoKS8yKX0pKSxlLnRvb2x0aXAmJnIuaW5zZXJ0KCJ0aXRsZSIpLnRleHQoZS50b29sdGlwKSxmLmF0dHIoIngyIixiKSxnLmF0dHIoIngyIixiKSxhLndpZHRoPWIsYS5oZWlnaHQ9di5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbixhfSx2bj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBhbi5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgYW4uRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgYW4uQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIGFuLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX07ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hTnVtYmVyLmlzTmFOKHQueSl9KSk7dmFyIGEsbyxzPWUucG9pbnRzLHU9T2JqZWN0KGQubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoZC5jdXJ2ZUJhc2lzKSxsPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdShzKSkuYXR0cigiaWQiLCJlZGdlIitjbikuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpLGg9IiI7ci5hcnJvd01hcmtlckFic29sdXRlJiYoaD0oaD0oaD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSwxPT1uLnJlbGF0aW9uLmxpbmVUeXBlJiZsLmF0dHIoImNsYXNzIiwicmVsYXRpb24gZGFzaGVkLWxpbmUiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUxJiZsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2grIiMiK2kobi5yZWxhdGlvbi50eXBlMSkrIlN0YXJ0KSIpLCJub25lIiE9PW4ucmVsYXRpb24udHlwZTImJmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2grIiMiK2kobi5yZWxhdGlvbi50eXBlMikrIkVuZCkiKTt2YXIgZixwLGcseSx2PWUucG9pbnRzLmxlbmd0aCxtPVYuY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpO2lmKGE9bS54LG89bS55LHYlMiE9MCYmdj4xKXt2YXIgYj1WLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLHg9Vi5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbigibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyLGUucG9pbnRzLGUucG9pbnRzW3YtMV0pO2MuZGVidWcoImNhcmRpbmFsaXR5XzFfcG9pbnQgIitKU09OLnN0cmluZ2lmeShiKSksYy5kZWJ1ZygiY2FyZGluYWxpdHlfMl9wb2ludCAiK0pTT04uc3RyaW5naWZ5KHgpKSxmPWIueCxwPWIueSxnPXgueCx5PXgueX1pZih2b2lkIDAhPT1uLnRpdGxlKXt2YXIgXz10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2xhc3NMYWJlbCIpLGs9Xy5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigieCIsYSkuYXR0cigieSIsbykuYXR0cigiZmlsbCIsInJlZCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChuLnRpdGxlKTt3aW5kb3cubGFiZWw9azt2YXIgdz1rLm5vZGUoKS5nZXRCQm94KCk7Xy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLHcueC1yLnBhZGRpbmcvMikuYXR0cigieSIsdy55LXIucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsdy53aWR0aCtyLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdy5oZWlnaHQrci5wYWRkaW5nKX0oYy5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShuKSksdm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMSYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMSkmJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTEiKS5hdHRyKCJ4IixmKS5hdHRyKCJ5IixwKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUxKTt2b2lkIDAhPT1uLnJlbGF0aW9uVGl0bGUyJiYibm9uZSIhPT1uLnJlbGF0aW9uVGl0bGUyJiZ0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUyIikuYXR0cigieCIsZykuYXR0cigieSIseSkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQobi5yZWxhdGlvblRpdGxlMik7Y24rK30sbW49ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT03MCxhPTEwOyJMUiI9PT1uJiYoaT0xMCxhPTcwKTt2YXIgbz1yLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ4IiwtMSppLzIpLmF0dHIoInkiLC0xKmEvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gU2UoZSxvKSxlLmhlaWdodD1lLmhlaWdodCtlLnBhZGRpbmcvMixlLndpZHRoPWUud2lkdGgrZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEhlLnJlY3QoZSx0KX0scn0sYm49e3F1ZXN0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49Q2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcrKGkuaGVpZ2h0K2UucGFkZGluZyksbz1be3g6YS8yLHk6MH0se3g6YSx5Oi1hLzJ9LHt4OmEvMix5Oi1hfSx7eDowLHk6LWEvMn1dO2MuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO3ZhciBzPUFlKHIsYSxhLG8pO3JldHVybiBTZShlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjLndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSxIZS5wb2x5Z29uKGUsbyx0KX0scn0scmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuPUNlKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZztjLnRyYWNlKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBvPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG8uYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLFNlKGUsbyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEhlLnJlY3QoZSx0KX0scn0scmVjdFdpdGhUaXRsZTpmdW5jdGlvbih0LGUpe3ZhciBuO249ZS5jbGFzc2VzPyJub2RlICIrZS5jbGFzc2VzOiJub2RlIGRlZmF1bHQiO3ZhciByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYT1yLmluc2VydCgibGluZSIpLG89ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikscz1lLmxhYmVsVGV4dC5mbGF0KCk7Yy5pbmZvKCJMYWJlbCB0ZXh0IixzWzBdKTt2YXIgdSxsPW8ubm9kZSgpLmFwcGVuZENoaWxkKFRlKHNbMF0sZS5sYWJlbFN0eWxlLCEwLCEwKSk7aWYoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscyl7dmFyIGg9bC5jaGlsZHJlblswXSxmPU9iamVjdChkLnNlbGVjdCkobCk7dT1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGYuYXR0cigid2lkdGgiLHUud2lkdGgpLGYuYXR0cigiaGVpZ2h0Iix1LmhlaWdodCl9Yy5pbmZvKCJUZXh0IDIiLHMpO3ZhciBwPXMuc2xpY2UoMSxzLmxlbmd0aCksZz1sLmdldEJCb3goKSx5PW8ubm9kZSgpLmFwcGVuZENoaWxkKFRlKHAuam9pbigiPGJyLz4iKSxlLmxhYmVsU3R5bGUsITAsITApKTtpZihfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgdj15LmNoaWxkcmVuWzBdLG09T2JqZWN0KGQuc2VsZWN0KSh5KTt1PXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbS5hdHRyKCJ3aWR0aCIsdS53aWR0aCksbS5hdHRyKCJoZWlnaHQiLHUuaGVpZ2h0KX12YXIgYj1lLnBhZGRpbmcvMjtyZXR1cm4gT2JqZWN0KGQuc2VsZWN0KSh5KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKHUud2lkdGg+Zy53aWR0aD8wOihnLndpZHRoLXUud2lkdGgpLzIpKyIsICIrKGcuaGVpZ2h0K2IrNSkrIikiKSxPYmplY3QoZC5zZWxlY3QpKGwpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisodS53aWR0aDxnLndpZHRoPzA6LShnLndpZHRoLXUud2lkdGgpLzIpKyIsIDApIiksdT1vLm5vZGUoKS5nZXRCQm94KCksby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdS53aWR0aC8yKyIsICIrKC11LmhlaWdodC8yLWIrMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtdS53aWR0aC8yLWIpLmF0dHIoInkiLC11LmhlaWdodC8yLWIpLmF0dHIoIndpZHRoIix1LndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0Iix1LmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC11LndpZHRoLzItYikuYXR0cigieDIiLHUud2lkdGgvMitiKS5hdHRyKCJ5MSIsLXUuaGVpZ2h0LzItYitnLmhlaWdodCtiKS5hdHRyKCJ5MiIsLXUuaGVpZ2h0LzItYitnLmhlaWdodCtiKSxTZShlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBIZS5yZWN0KGUsdCl9LHJ9LGNpcmNsZTpmdW5jdGlvbih0LGUpe3ZhciBuPUNlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmcsbz1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG8uYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJyIixpLndpZHRoLzIrYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksYy5pbmZvKCJDaXJjbGUgbWFpbiIpLFNlKGUsbyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGMuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxpLndpZHRoLzIrYSx0KSxIZS5jaXJjbGUoZSxpLndpZHRoLzIrYSx0KX0scn0sc3RhZGl1bTpmdW5jdGlvbih0LGUpe3ZhciBuPUNlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkuaGVpZ2h0K2UucGFkZGluZyxvPWkud2lkdGgrYS80K2UucGFkZGluZyxzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLGEvMikuYXR0cigicnkiLGEvMikuYXR0cigieCIsLW8vMikuYXR0cigieSIsLWEvMikuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIsYSk7cmV0dXJuIFNlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEhlLnJlY3QoZSx0KX0scn0saGV4YWdvbjpmdW5jdGlvbih0LGUpe3ZhciBuPUNlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkuaGVpZ2h0K2UucGFkZGluZyxvPWEvNCxzPWkud2lkdGgrMipvK2UucGFkZGluZyxjPUFlKHIscyxhLFt7eDpvLHk6MH0se3g6cy1vLHk6MH0se3g6cyx5Oi1hLzJ9LHt4OnMtbyx5Oi1hfSx7eDpvLHk6LWF9LHt4OjAseTotYS8yfV0pO3JldHVybiBTZShlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBIZS5wb2x5Z29uKGUsdCl9LHJ9LHJlY3RfbGVmdF9pbnZfYXJyb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj1DZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPUFlKHIsYSxvLFt7eDotby8yLHk6MH0se3g6YSx5OjB9LHt4OmEseTotb30se3g6LW8vMix5Oi1vfSx7eDowLHk6LW8vMn1dKTtyZXR1cm4gU2UoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSGUucG9seWdvbihlLHQpfSxyfSxsZWFuX3JpZ2h0OmZ1bmN0aW9uKHQsZSl7dmFyIG49Q2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1BZShyLGEsbyxbe3g6LTIqby82LHk6MH0se3g6YS1vLzYseTowfSx7eDphKzIqby82LHk6LW99LHt4Om8vNix5Oi1vfV0pO3JldHVybiBTZShlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBIZS5wb2x5Z29uKGUsdCl9LHJ9LGxlYW5fbGVmdDpmdW5jdGlvbih0LGUpe3ZhciBuPUNlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9QWUocixhLG8sW3t4OjIqby82LHk6MH0se3g6YStvLzYseTowfSx7eDphLTIqby82LHk6LW99LHt4Oi1vLzYseTotb31dKTtyZXR1cm4gU2UoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSGUucG9seWdvbihlLHQpfSxyfSx0cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1DZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPUFlKHIsYSxvLFt7eDotMipvLzYseTowfSx7eDphKzIqby82LHk6MH0se3g6YS1vLzYseTotb30se3g6by82LHk6LW99XSk7cmV0dXJuIFNlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEhlLnBvbHlnb24oZSx0KX0scn0saW52X3RyYXBlem9pZDpmdW5jdGlvbih0LGUpe3ZhciBuPUNlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9QWUocixhLG8sW3t4Om8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDotMipvLzYseTotb31dKTtyZXR1cm4gU2UoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSGUucG9seWdvbihlLHQpfSxyfSxyZWN0X3JpZ2h0X2ludl9hcnJvdzpmdW5jdGlvbih0LGUpe3ZhciBuPUNlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9QWUocixhLG8sW3t4OjAseTowfSx7eDphK28vMix5OjB9LHt4OmEseTotby8yfSx7eDphK28vMix5Oi1vfSx7eDowLHk6LW99XSk7cmV0dXJuIFNlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEhlLnBvbHlnb24oZSx0KX0scn0sY3lsaW5kZXI6ZnVuY3Rpb24odCxlKXt2YXIgbj1DZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWEvMixzPW8vKDIuNSthLzUwKSxjPWkuaGVpZ2h0K3MrZS5wYWRkaW5nLHU9Ik0gMCwiK3MrIiBhICIrbysiLCIrcysiIDAsMCwwICIrYSsiIDAgYSAiK28rIiwiK3MrIiAwLDAsMCAiKy1hKyIgMCBsIDAsIitjKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGwgMCwiKy1jLGw9ci5hdHRyKCJsYWJlbC1vZmZzZXQteSIscykuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIsdSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWEvMisiLCIrLShjLzIrcykrIikiKTtyZXR1cm4gU2UoZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXt2YXIgbj1IZS5yZWN0KGUsdCkscj1uLngtZS54O2lmKDAhPW8mJihNYXRoLmFicyhyKTxlLndpZHRoLzJ8fE1hdGguYWJzKHIpPT1lLndpZHRoLzImJk1hdGguYWJzKG4ueS1lLnkpPmUuaGVpZ2h0LzItcykpe3ZhciBpPXMqcyooMS1yKnIvKG8qbykpOzAhPWkmJihpPU1hdGguc3FydChpKSksaT1zLWksdC55LWUueT4wJiYoaT0taSksbi55Kz1pfXJldHVybiBufSxyfSxzdGFydDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1uLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHIuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksU2UoZSxyKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSGUuY2lyY2xlKGUsNyx0KX0sbn0sZW5kOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxpPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxyLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSxTZShlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBIZS5jaXJjbGUoZSw3LHQpfSxufSxub3RlOkdlLHN1YnJvdXRpbmU6ZnVuY3Rpb24odCxlKXt2YXIgbj1DZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPUFlKHIsYSxvLFt7eDowLHk6MH0se3g6YSx5OjB9LHt4OmEseTotb30se3g6MCx5Oi1vfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDphKzgseTowfSx7eDphKzgseTotb30se3g6LTgseTotb30se3g6LTgseTowfV0pO3JldHVybiBTZShlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBIZS5wb2x5Z29uKGUsdCl9LHJ9LGZvcms6bW4sam9pbjptbixjbGFzc19ib3g6ZnVuY3Rpb24odCxlKXt2YXIgbixyPWUucGFkZGluZy8yO249ZS5jbGFzc2VzPyJub2RlICIrZS5jbGFzc2VzOiJub2RlIGRlZmF1bHQiO3ZhciBpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxhPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksbz1pLmluc2VydCgibGluZSIpLHM9aS5pbnNlcnQoImxpbmUiKSxjPTAsdT00LGw9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksaD0wLGY9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnMmJmUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdLHA9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0/IsKrIitlLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSsiwrsiOiIiLGc9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoVGUocCxlLmxhYmVsU3R5bGUsITAsITApKSx5PWcuZ2V0QkJveCgpO2lmKF90KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciB2PWcuY2hpbGRyZW5bMF0sbT1PYmplY3QoZC5zZWxlY3QpKGcpO3k9di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtLmF0dHIoIndpZHRoIix5LndpZHRoKSxtLmF0dHIoImhlaWdodCIseS5oZWlnaHQpfWUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdJiYodSs9eS5oZWlnaHQrNCxjKz15LndpZHRoKTt2YXIgYj1lLmNsYXNzRGF0YS5pZDt2b2lkIDAhPT1lLmNsYXNzRGF0YS50eXBlJiYiIiE9PWUuY2xhc3NEYXRhLnR5cGUmJihiKz0iPCIrZS5jbGFzc0RhdGEudHlwZSsiPiIpO3ZhciB4PWwubm9kZSgpLmFwcGVuZENoaWxkKFRlKGIsZS5sYWJlbFN0eWxlLCEwLCEwKSk7T2JqZWN0KGQuc2VsZWN0KSh4KS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTt2YXIgXz14LmdldEJCb3goKTtpZihfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgaz14LmNoaWxkcmVuWzBdLHc9T2JqZWN0KGQuc2VsZWN0KSh4KTtfPWsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdy5hdHRyKCJ3aWR0aCIsXy53aWR0aCksdy5hdHRyKCJoZWlnaHQiLF8uaGVpZ2h0KX11Kz1fLmhlaWdodCs0LF8ud2lkdGg+YyYmKGM9Xy53aWR0aCk7dmFyIEU9W107ZS5jbGFzc0RhdGEubWVtYmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj11bih0KS5kaXNwbGF5VGV4dCxyPWwubm9kZSgpLmFwcGVuZENoaWxkKFRlKG4sZS5sYWJlbFN0eWxlLCEwLCEwKSksaT1yLmdldEJCb3goKTtpZihfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgYT1yLmNoaWxkcmVuWzBdLG89T2JqZWN0KGQuc2VsZWN0KShyKTtpPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksby5hdHRyKCJ3aWR0aCIsaS53aWR0aCksby5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0KX1pLndpZHRoPmMmJihjPWkud2lkdGgpLHUrPWkuaGVpZ2h0KzQsRS5wdXNoKHIpfSkpLHUrPTg7dmFyIFQ9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj11bih0KS5kaXNwbGF5VGV4dCxyPWwubm9kZSgpLmFwcGVuZENoaWxkKFRlKG4sZS5sYWJlbFN0eWxlLCEwLCEwKSksaT1yLmdldEJCb3goKTtpZihfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgYT1yLmNoaWxkcmVuWzBdLG89T2JqZWN0KGQuc2VsZWN0KShyKTtpPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksby5hdHRyKCJ3aWR0aCIsaS53aWR0aCksby5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0KX1pLndpZHRoPmMmJihjPWkud2lkdGgpLHUrPWkuaGVpZ2h0KzQsVC5wdXNoKHIpfSkpLHUrPTgsZil7dmFyIEM9KGMteS53aWR0aCkvMjtPYmplY3QoZC5zZWxlY3QpKGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK0MpKyIsICIrLTEqdS8yKyIpIiksaD15LmhlaWdodCs0fXZhciBTPShjLV8ud2lkdGgpLzI7cmV0dXJuIE9iamVjdChkLnNlbGVjdCkoeCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpjLzIrUykrIiwgIisoLTEqdS8yK2gpKyIpIiksaCs9Xy5oZWlnaHQrNCxvLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtYy8yLXIpLmF0dHIoIngyIixjLzIrcikuYXR0cigieTEiLC11LzItcis4K2gpLmF0dHIoInkyIiwtdS8yLXIrOCtoKSxoKz04LEUuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0KGQuc2VsZWN0KSh0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWMvMisiLCAiKygtMSp1LzIraCs0KSsiKSIpLGgrPV8uaGVpZ2h0KzR9KSksaCs9OCxzLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtYy8yLXIpLmF0dHIoIngyIixjLzIrcikuYXR0cigieTEiLC11LzItcis4K2gpLmF0dHIoInkyIiwtdS8yLXIrOCtoKSxoKz04LFQuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0KGQuc2VsZWN0KSh0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWMvMisiLCAiKygtMSp1LzIraCkrIikiKSxoKz1fLmhlaWdodCs0fSkpLGEuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1jLzItcikuYXR0cigieSIsLXUvMi1yKS5hdHRyKCJ3aWR0aCIsYytlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdStlLnBhZGRpbmcpLFNlKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEhlLnJlY3QoZSx0KX0saX19LHhuPXt9LF9uPWZ1bmN0aW9uKHQpe3ZhciBlPXhuW3QuaWRdO2MudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiKyh0LnktdC5oZWlnaHQvMi01KSsiKSIpO3QuY2x1c3Rlck5vZGU/ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi04KSsiLCAiKyh0LnktdC5oZWlnaHQvMi04KSsiKSIpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIil9LGtuPXtyZWN0OmZ1bmN0aW9uKHQsZSl7Yy50cmFjZSgiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIisoZS5jbGFzcz8iICIrZS5jbGFzczoiIikpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGE9aS5ub2RlKCkuYXBwZW5kQ2hpbGQoVGUoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLG89YS5nZXRCQm94KCk7aWYoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscyl7dmFyIHM9YS5jaGlsZHJlblswXSx1PU9iamVjdChkLnNlbGVjdCkoYSk7bz1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHUuYXR0cigid2lkdGgiLG8ud2lkdGgpLHUuYXR0cigiaGVpZ2h0IixvLmhlaWdodCl9dmFyIGw9MCplLnBhZGRpbmcsaD1sLzI7Yy50cmFjZSgiRGF0YSAiLGUsSlNPTi5zdHJpbmdpZnkoZSkpLHIuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsZS54LWUud2lkdGgvMi1oKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1oKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtsKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2wpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1vLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yK2UucGFkZGluZy8zKSsiKSIpO3ZhciBmPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1mLndpZHRoLGUuaGVpZ2h0PWYuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBWZShlLHQpfSxufSxyb3VuZGVkV2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPW4uYXBwZW5kKCJyZWN0Iiksbz1pLm5vZGUoKS5hcHBlbmRDaGlsZChUZShlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSkscz1vLmdldEJCb3goKTtpZihfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgYz1vLmNoaWxkcmVuWzBdLHU9T2JqZWN0KGQuc2VsZWN0KShvKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1zPW8uZ2V0QkJveCgpO3ZhciBsPTAqZS5wYWRkaW5nLGg9bC8yO3IuYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLGUueC1lLndpZHRoLzItaCkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItaCkuYXR0cigid2lkdGgiLGUud2lkdGgrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsKSxhLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWgpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWgrcy5oZWlnaHQtMSkuYXR0cigid2lkdGgiLGUud2lkdGgrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsLXMuaGVpZ2h0LTMpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yLWUucGFkZGluZy8zKyhfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzPzU6MykpKyIpIik7dmFyIGY9ci5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLndpZHRoPWYud2lkdGgsZS5oZWlnaHQ9Zi5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFZlKGUsdCl9LG59LG5vdGVHcm91cDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBWZShlLHQpfSxufSxkaXZpZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBWZShlLHQpfSxufX0sd249e30sRW49e30sVG49e30sQ249ZnVuY3Rpb24odCxlKXt2YXIgbj10Lngscj10LnksaT1NYXRoLmFicyhlLngtbiksYT1NYXRoLmFicyhlLnktciksbz10LndpZHRoLzIscz10LmhlaWdodC8yO3JldHVybiBpPj1vfHxhPj1zfSxTbj1mdW5jdGlvbih0LGUsbil7Yy53YXJuKCJpbnRlcnNlY3Rpb24gY2FsYyBvOiIsZSwiIGk6IixuLHQpO3ZhciByPXQueCxpPXQueSxhPU1hdGguYWJzKHItbi54KSxvPXQud2lkdGgvMixzPW4ueDxlLng/by1hOm8rYSx1PXQuaGVpZ2h0LzIsbD1yLW8saD1yK28sZj1pLXUsZD1pK3U7aWYoZS54PT09bHx8ZS54PT09aHx8ZS55PT09Znx8ZS55PT09ZClyZXR1cm4gYy53YXJuKCJjYWxjIGVxdWFscyBvbiBlZGdlIiksZTt2YXIgcD1NYXRoLmFicyhlLnktbi55KSxnPU1hdGguYWJzKGUueC1uLngpO2lmKE1hdGguYWJzKGktZS55KSpvPk1hdGguYWJzKHItZS54KSp1KXt2YXIgeT1uLnk8ZS55P2UueS11LWk6aS11LWUueTtzPWcqeS9wO3ZhciB2PXt4Om4ueDxlLng/bi54K2ctczpuLngtcyx5Om4ueTxlLnk/bi55K3AteTpuLnkteX07cmV0dXJuIGMud2FybigidG9wcC9ib3R0IGNhbGMsIFEgIi5jb25jYXQocCwiLCBxICIpLmNvbmNhdCh5LCIsIFIgIikuY29uY2F0KGcsIiwgciAiKS5jb25jYXQocyksdiksdn12YXIgbT1tPXAqKHM9bi54PGUueD9lLngtby1yOnItby1lLngpL2c7cmV0dXJuIGMud2Fybigic2lkZXMgY2FsYywgUSAiLmNvbmNhdChwLCIsIHEgIikuY29uY2F0KG0sIiwgUiAiKS5jb25jYXQoZywiLCByICIpLmNvbmNhdChzKSx7eDpuLng8ZS54P24ueCtnLXM6bi54K2Etbyx5Om4ueTxlLnk/bi55K206bi55LW19KSx7eDpuLng8ZS54P24ueCtnLXM6bi54K2Etbyx5Om4ueTxlLnk/bi55K206bi55LW19fSxBbj1mdW5jdGlvbiB0KGUsbixyLGkpe2MuaW5mbygiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjogWFhYIixHLmEuanNvbi53cml0ZShuKSxpKTt2YXIgYT1uLmdyYXBoKCkucmFua2RpcjtjLndhcm4oIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYSk7dmFyIG89ZS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTtuLm5vZGVzKCk/Yy5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIsbi5ub2RlcygpKTpjLmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsbiksbi5lZGdlcygpLmxlbmd0aD4wJiZjLmluZm8oIlJlY3Vyc2l2ZSBlZGdlcyIsbi5lZGdlKG4uZWRnZXMoKVswXSkpO3ZhciBzPW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVycyIpLHU9by5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRocyIpLGw9by5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKSxoPW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpO3JldHVybiBuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG89bi5ub2RlKGUpO2lmKHZvaWQgMCE9PWkpe3ZhciBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaS5jbHVzdGVyRGF0YSkpO2MuaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixlLCIpICIscyxpKSxuLnNldE5vZGUoaS5pZCxzKSxuLnBhcmVudChlKXx8KGMud2FybigiU2V0dGluZyBwYXJlbnQiLGUsaS5pZCksbi5zZXRQYXJlbnQoZSxpLmlkLHMpKX1pZihjLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitlKyI6ICIrSlNPTi5zdHJpbmdpZnkobi5ub2RlKGUpKSksbyYmby5jbHVzdGVyTm9kZSl7Yy5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUsbyxuLm5vZGUoZSkpO3ZhciB1PXQoaCxvLmdyYXBoLHIsbi5ub2RlKGUpKTtTZShvLHUpLGZ1bmN0aW9uKHQsZSl7eG5bZS5pZF09dH0odSxvKSxjLndhcm4oIlJlY3Vyc2l2ZSByZW5kZXIgY29tcGxldGUiLHUsbyl9ZWxzZSBuLmNoaWxkcmVuKGUpLmxlbmd0aD4wPyhjLmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsZSxvLmlkLG8sbiksYy5pbmZvKExlKG8uaWQsbikpLE1lW28uaWRdPXtpZDpMZShvLmlkLG4pLG5vZGU6b30pOihjLmluZm8oIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIixlLG8uaWQsbyksZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7ZS5saW5rPyhyPXQuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixlLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxpPWJuW2Uuc2hhcGVdKHIsZSxuKSk6cj1pPWJuW2Uuc2hhcGVdKHQsZSxuKSxlLnRvb2x0aXAmJmkuYXR0cigidGl0bGUiLGUudG9vbHRpcCksZS5jbGFzcyYmaS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2UuY2xhc3MpLHhuW2UuaWRdPXIsZS5oYXZlQ2FsbGJhY2smJnhuW2UuaWRdLmF0dHIoImNsYXNzIix4bltlLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIil9KGgsbi5ub2RlKGUpLGEpKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQudix0LncsdC5uYW1lKTtjLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxjLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiLHQsIiAiLEpTT04uc3RyaW5naWZ5KG4uZWRnZSh0KSkpLGMuaW5mbygiRml4IixNZSwiaWRzOiIsdC52LHQudywiVHJhbnNsYXRlaW5nOiAiLE1lW3Qudl0sTWVbdC53XSksZnVuY3Rpb24odCxlKXt2YXIgbj1UZShlLmxhYmVsLGUubGFiZWxTdHlsZSkscj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksaT1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTtpLm5vZGUoKS5hcHBlbmRDaGlsZChuKTt2YXIgYT1uLmdldEJCb3goKTtpZihfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgbz1uLmNoaWxkcmVuWzBdLHM9T2JqZWN0KGQuc2VsZWN0KShuKTthPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscy5hdHRyKCJ3aWR0aCIsYS53aWR0aCkscy5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KX1pZihpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLndpZHRoLzIrIiwgIistYS5oZWlnaHQvMisiKSIpLEVuW2UuaWRdPXIsZS53aWR0aD1hLndpZHRoLGUuaGVpZ2h0PWEuaGVpZ2h0LGUuc3RhcnRMYWJlbExlZnQpe3ZhciBjPVRlKGUuc3RhcnRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSx1PXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksbD11Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsLm5vZGUoKS5hcHBlbmRDaGlsZChjKTt2YXIgaD1jLmdldEJCb3goKTtsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1oLndpZHRoLzIrIiwgIistaC5oZWlnaHQvMisiKSIpLFRuW2UuaWRdfHwoVG5bZS5pZF09e30pLFRuW2UuaWRdLnN0YXJ0TGVmdD11fWlmKGUuc3RhcnRMYWJlbFJpZ2h0KXt2YXIgZj1UZShlLnN0YXJ0TGFiZWxSaWdodCxlLmxhYmVsU3R5bGUpLHA9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxnPXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3Aubm9kZSgpLmFwcGVuZENoaWxkKGYpLGcubm9kZSgpLmFwcGVuZENoaWxkKGYpO3ZhciB5PWYuZ2V0QkJveCgpO2cuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXkud2lkdGgvMisiLCAiKy15LmhlaWdodC8yKyIpIiksVG5bZS5pZF18fChUbltlLmlkXT17fSksVG5bZS5pZF0uc3RhcnRSaWdodD1wfWlmKGUuZW5kTGFiZWxMZWZ0KXt2YXIgdj1UZShlLmVuZExhYmVsTGVmdCxlLmxhYmVsU3R5bGUpLG09dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxiPW0uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2Iubm9kZSgpLmFwcGVuZENoaWxkKHYpO3ZhciB4PXYuZ2V0QkJveCgpO2IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXgud2lkdGgvMisiLCAiKy14LmhlaWdodC8yKyIpIiksbS5ub2RlKCkuYXBwZW5kQ2hpbGQodiksVG5bZS5pZF18fChUbltlLmlkXT17fSksVG5bZS5pZF0uZW5kTGVmdD1tfWlmKGUuZW5kTGFiZWxSaWdodCl7dmFyIF89VGUoZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksaz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLHc9ay5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dy5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7dmFyIEU9Xy5nZXRCQm94KCk7dy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistRS53aWR0aC8yKyIsICIrLUUuaGVpZ2h0LzIrIikiKSxrLm5vZGUoKS5hcHBlbmRDaGlsZChfKSxUbltlLmlkXXx8KFRuW2UuaWRdPXt9KSxUbltlLmlkXS5lbmRSaWdodD1rfX0obCxlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yy5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSl9KSksYy5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxjLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyIpLGMuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksYy5pbmZvKG4pLGtlLmEubGF5b3V0KG4pLGMuaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsRy5hLmpzb24ud3JpdGUobikpLGplKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4ubm9kZSh0KTtjLmluZm8oIlBvc2l0aW9uICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KG4ubm9kZSh0KSkpLGMuaW5mbygiUG9zaXRpb24gIit0KyI6ICgiK2UueCwiLCIrZS55LCIpIHdpZHRoOiAiLGUud2lkdGgsIiBoZWlnaHQ6ICIsZS5oZWlnaHQpLGUmJmUuY2x1c3Rlck5vZGU/X24oZSk6bi5jaGlsZHJlbih0KS5sZW5ndGg+MD8oIWZ1bmN0aW9uKHQsZSl7Yy50cmFjZSgiSW5zZXJ0aW5nIGNsdXN0ZXIiKTt2YXIgbj1lLnNoYXBlfHwicmVjdCI7d25bZS5pZF09a25bbl0odCxlKX0ocyxlKSxNZVtlLmlkXS5ub2RlPWUpOl9uKGUpfSkpLG4uZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLmVkZ2UodCk7Yy5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeShlKSxlKTt2YXIgaT1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89bi5wb2ludHMscz0hMSx1PWEubm9kZShlLnYpLGw9YS5ub2RlKGUudyk7aWYobC5pbnRlcnNlY3QmJnUuaW50ZXJzZWN0JiYoKG89by5zbGljZSgxLG4ucG9pbnRzLmxlbmd0aC0xKSkudW5zaGlmdCh1LmludGVyc2VjdChvWzBdKSksYy5pbmZvKCJMYXN0IHBvaW50IixvW28ubGVuZ3RoLTFdLGwsbC5pbnRlcnNlY3Qob1tvLmxlbmd0aC0xXSkpLG8ucHVzaChsLmludGVyc2VjdChvW28ubGVuZ3RoLTFdKSkpLG4udG9DbHVzdGVyKXt2YXIgaDtjLnRyYWNlKCJlZGdlIixuKSxjLnRyYWNlKCJ0byBjbHVzdGVyIixyW24udG9DbHVzdGVyXSksbz1bXTt2YXIgZj0hMTtuLnBvaW50cy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW24udG9DbHVzdGVyXS5ub2RlO2lmKENuKGUsdCl8fGYpZnx8by5wdXNoKHQpO2Vsc2V7Yy50cmFjZSgiaW5zaWRlIixuLnRvQ2x1c3Rlcix0LGgpO3ZhciBpPVNuKGUsaCx0KSxhPSExO28uZm9yRWFjaCgoZnVuY3Rpb24odCl7YT1hfHx0Lng9PT1pLngmJnQueT09PWkueX0pKSxvLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng9PT1pLngmJnQueT09PWkueX0pKT9jLndhcm4oIm5vIGludGVyc2VjdCIsaSxvKTpvLnB1c2goaSksZj0hMH1oPXR9KSkscz0hMH1pZihuLmZyb21DbHVzdGVyKXtjLnRyYWNlKCJlZGdlIixuKSxjLndhcm4oImZyb20gY2x1c3RlciIscltuLmZyb21DbHVzdGVyXSk7Zm9yKHZhciBwLGc9W10seT0hMSx2PW8ubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBtPW9bdl0sYj1yW24uZnJvbUNsdXN0ZXJdLm5vZGU7aWYoQ24oYixtKXx8eSljLnRyYWNlKCJPdXRzaWRlIHBvaW50IixtKSx5fHxnLnVuc2hpZnQobSk7ZWxzZXtjLndhcm4oImluc2lkZSIsbi5mcm9tQ2x1c3RlcixtLGIpO3ZhciB4PVNuKGIscCxtKTtnLnVuc2hpZnQoeCkseT0hMH1wPW19bz1nLHM9ITB9dmFyIF8saz1vLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpLHc9T2JqZWN0KGQubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoZC5jdXJ2ZUJhc2lzKTtzd2l0Y2gobi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpfPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwiO2JyZWFrO2Nhc2UidGhpY2siOl89ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0Ol89IiJ9c3dpdGNoKG4ucGF0dGVybil7Y2FzZSJzb2xpZCI6Xys9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpfKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjpfKz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQifXZhciBFPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdyhrKSkuYXR0cigiaWQiLG4uaWQpLmF0dHIoImNsYXNzIiwiICIrXysobi5jbGFzc2VzPyIgIituLmNsYXNzZXM6IiIpKS5hdHRyKCJzdHlsZSIsbi5zdHlsZSksVD0iIjtzd2l0Y2goX3QoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYoVD0oVD0oVD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxjLmluZm8oImFycm93VHlwZVN0YXJ0IixuLmFycm93VHlwZVN0YXJ0KSxjLmluZm8oImFycm93VHlwZUVuZCIsbi5hcnJvd1R5cGVFbmQpLG4uYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIraSsiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIraSsiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIraSsiLWRlcGVuZGVuY3lTdGFydCkiKX1zd2l0Y2gobi5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK2krIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitpKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitpKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVCsiIyIraSsiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitpKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK2krIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVCsiIyIraSsiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVCsiIyIraSsiLWRlcGVuZGVuY3lFbmQpIil9dmFyIEM9e307cmV0dXJuIHMmJihDLnVwZGF0ZWRQYXRoPW8pLEMub3JpZ2luYWxQYXRoPW4ucG9pbnRzLEN9KHUsdCxlLE1lLHIsbik7IWZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJNb3ZpbmcgbGFiZWwiLHQuaWQsdC5sYWJlbCxFblt0LmlkXSk7dmFyIG49ZS51cGRhdGVkUGF0aD9lLnVwZGF0ZWRQYXRoOmUub3JpZ2luYWxQYXRoO2lmKHQubGFiZWwpe3ZhciByPUVuW3QuaWRdLGk9dC54LGE9dC55O2lmKG4pe3ZhciBvPVYuY2FsY0xhYmVsUG9zaXRpb24obik7Yy5pbmZvKCJNb3ZpbmcgbGFiZWwgZnJvbSAoIixpLCIsIixhLCIpIHRvICgiLG8ueCwiLCIsby55LCIpIil9ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsICIrYSsiKSIpfWlmKHQuc3RhcnRMYWJlbExlZnQpe3ZhciBzPVRuW3QuaWRdLnN0YXJ0TGVmdCx1PXQueCxsPXQueTtpZihuKXt2YXIgaD1WLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oMCwic3RhcnRfbGVmdCIsbik7dT1oLngsbD1oLnl9cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIsICIrbCsiKSIpfWlmKHQuc3RhcnRMYWJlbFJpZ2h0KXt2YXIgZj1Ublt0LmlkXS5zdGFydFJpZ2h0LGQ9dC54LHA9dC55O2lmKG4pe3ZhciBnPVYuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbigwLCJzdGFydF9yaWdodCIsbik7ZD1nLngscD1nLnl9Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsICIrcCsiKSIpfWlmKHQuZW5kTGFiZWxMZWZ0KXt2YXIgeT1Ublt0LmlkXS5lbmRMZWZ0LHY9dC54LG09dC55O2lmKG4pe3ZhciBiPVYuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbigwLCJlbmRfbGVmdCIsbik7dj1iLngsbT1iLnl9eS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsICIrbSsiKSIpfWlmKHQuZW5kTGFiZWxSaWdodCl7dmFyIHg9VG5bdC5pZF0uZW5kUmlnaHQsXz10Lngsaz10Lnk7aWYobil7dmFyIHc9Vi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKDAsImVuZF9yaWdodCIsbik7Xz13Lngsaz13Lnl9eC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitfKyIsICIraysiKSIpfX0oZSxpKX0pKSxvfSxNbj1mdW5jdGlvbih0LGUsbixyLGkpe0VlKHQsbixyLGkpLHhuPXt9LEVuPXt9LFRuPXt9LHduPXt9LE9lPXt9LERlPXt9LE1lPXt9LGMud2FybigiR3JhcGggYXQgZmlyc3Q6IixHLmEuanNvbi53cml0ZShlKSksRmUoZSksYy53YXJuKCJHcmFwaCBhZnRlcjoiLEcuYS5qc29uLndyaXRlKGUpKSxBbih0LGUscil9LE9uPXt9LERuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1PYmplY3QoZC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgbyxzPUIoaS5zdHlsZXMpLHU9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2lmKF90KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciBsPXtsYWJlbDp1LnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsobz1lZSgpKHIsbCkubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWVsc2V7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtoLnNldEF0dHJpYnV0ZSgic3R5bGUiLHMubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtmb3IodmFyIGY9dS5zcGxpdCh4LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1mW2RdLGguYXBwZW5kQ2hpbGQocCl9bz1ofXZhciBnPTAseT0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjpnPTUseT0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOnk9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6eT0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6eT0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOnk9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6eT0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOnk9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnk9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjp5PSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6eT0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOnk9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjp5PSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOnk9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6eT0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6eT0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOnk9InJlY3QiO2JyZWFrO2RlZmF1bHQ6eT0icmVjdCJ9ZS5zZXROb2RlKGkuaWQse2xhYmVsU3R5bGU6cy5sYWJlbFN0eWxlLHNoYXBlOnksbGFiZWxUZXh0OnUscng6ZyxyeTpnLGNsYXNzOmEsc3R5bGU6cy5zdHlsZSxpZDppLmlkLGxpbms6aS5saW5rLGxpbmtUYXJnZXQ6aS5saW5rVGFyZ2V0LHRvb2x0aXA6WHQuZ2V0VG9vbHRpcChpLmlkKXx8IiIsZG9tSWQ6WHQubG9va1VwRG9tSWQoaS5pZCksaGF2ZUNhbGxiYWNrOmkuaGF2ZUNhbGxiYWNrLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCx0eXBlOmkudHlwZSxwYWRkaW5nOl90KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxjLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOnMubGFiZWxTdHlsZSxzaGFwZTp5LGxhYmVsVGV4dDp1LHJ4Omcscnk6ZyxjbGFzczphLHN0eWxlOnMuc3R5bGUsaWQ6aS5pZCxkb21JZDpYdC5sb29rVXBEb21JZChpLmlkKSx3aWR0aDoiZ3JvdXAiPT09aS50eXBlPzUwMDp2b2lkIDAsdHlwZTppLnR5cGUscGFkZGluZzpfdCgpLmZsb3djaGFydC5wYWRkaW5nfSl9KSl9LE5uPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPTA7aWYodm9pZCAwIT09dC5kZWZhdWx0U3R5bGUpe3ZhciBhPUIodC5kZWZhdWx0U3R5bGUpO249YS5zdHlsZSxyPWEubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKGEpe2krKzt2YXIgbz0iTC0iK2Euc3RhcnQrIi0iK2EuZW5kLHM9IkxTLSIrYS5zdGFydCxjPSJMRS0iK2EuZW5kLHU9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaCh1Lm1pbmxlbj1hLmxlbmd0aHx8MSwiYXJyb3dfb3BlbiI9PT1hLnR5cGU/dS5hcnJvd2hlYWQ9Im5vbmUiOnUuYXJyb3doZWFkPSJub3JtYWwiLHUuYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLHUuYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIixhLnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjp1LmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6dS5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6dS5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOnUuYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjp1LmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjp1LmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIn12YXIgbD0iIixoPSIiO3N3aXRjaChhLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmw9ImZpbGw6bm9uZTsiLHZvaWQgMCE9PW4mJihsPW4pLHZvaWQgMCE9PXImJihoPXIpLHUudGhpY2tuZXNzPSJub3JtYWwiLHUucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjp1LnRoaWNrbmVzcz0ibm9ybWFsIix1LnBhdHRlcm49ImRvdHRlZCIsdS5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6dS50aGlja25lc3M9InRoaWNrIix1LnBhdHRlcm49InNvbGlkIix1LnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsifWlmKHZvaWQgMCE9PWEuc3R5bGUpe3ZhciBmPUIoYS5zdHlsZSk7bD1mLnN0eWxlLGg9Zi5sYWJlbFN0eWxlfXUuc3R5bGU9dS5zdHlsZSs9bCx1LmxhYmVsU3R5bGU9dS5sYWJlbFN0eWxlKz1oLHZvaWQgMCE9PWEuaW50ZXJwb2xhdGU/dS5jdXJ2ZT1EKGEuaW50ZXJwb2xhdGUsZC5jdXJ2ZUxpbmVhcik6dm9pZCAwIT09dC5kZWZhdWx0SW50ZXJwb2xhdGU/dS5jdXJ2ZT1EKHQuZGVmYXVsdEludGVycG9sYXRlLGQuY3VydmVMaW5lYXIpOnUuY3VydmU9RChPbi5jdXJ2ZSxkLmN1cnZlTGluZWFyKSx2b2lkIDA9PT1hLnRleHQ/dm9pZCAwIT09YS5zdHlsZSYmKHUuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToodS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsdS5sYWJlbHBvcz0iYyIpLHUubGFiZWxUeXBlPSJ0ZXh0Iix1LmxhYmVsPWEudGV4dC5yZXBsYWNlKHgubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09YS5zdHlsZSYmKHUuc3R5bGU9dS5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IiksdS5sYWJlbFN0eWxlPXUubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLHUuaWQ9byx1LmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIrcysiICIrYyxlLnNldEVkZ2UoYS5zdGFydCxhLmVuZCx1LGkpfSkpfSxCbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKU9uW2Vbbl1dPXRbZVtuXV19LExuPWZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpLFh0LmNsZWFyKCksWHQuc2V0R2VuKCJnZW4tMiIpO3ZhciBuPUp0LmEucGFyc2VyO24ueXk9WHQsbi5wYXJzZSh0KTt2YXIgcj1YdC5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iVEQiKTt2YXIgaSxhPV90KCkuZmxvd2NoYXJ0LG89YS5ub2RlU3BhY2luZ3x8NTAscz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyBHLmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpyLG5vZGVzZXA6byxyYW5rc2VwOnMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksbD1YdC5nZXRTdWJHcmFwaHMoKTtjLmluZm8oIlN1YmdyYXBocyAtICIsbCk7Zm9yKHZhciBoPWwubGVuZ3RoLTE7aD49MDtoLS0paT1sW2hdLGMuaW5mbygiU3ViZ3JhcGggLSAiLGkpLFh0LmFkZFZlcnRleChpLmlkLGkudGl0bGUsImdyb3VwIix2b2lkIDAsaS5jbGFzc2VzKTt2YXIgZj1YdC5nZXRWZXJ0aWNlcygpLHA9WHQuZ2V0RWRnZXMoKTtjLmluZm8ocCk7dmFyIGc9MDtmb3IoZz1sLmxlbmd0aC0xO2c+PTA7Zy0tKXtpPWxbZ10sT2JqZWN0KGQuc2VsZWN0QWxsKSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgeT0wO3k8aS5ub2Rlcy5sZW5ndGg7eSsrKWMuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLGkubm9kZXNbeV0saS5pZCksdS5zZXRQYXJlbnQoaS5ub2Rlc1t5XSxpLmlkKX1EbihmLHUsZSksTm4ocCx1KTt2YXIgdj1PYmplY3QoZC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO3YuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIik7dmFyIG09T2JqZWN0KGQuc2VsZWN0KSgiIyIrZSsiIGciKTtNbihtLHUsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sImZsb3djaGFydCIsZSk7dmFyIGI9YS5kaWFncmFtUGFkZGluZyx4PXYubm9kZSgpLmdldEJCb3goKSxfPXgud2lkdGgrMipiLGs9eC5oZWlnaHQrMipiO2lmKGMuZGVidWcoIm5ldyBWaWV3Qm94IDAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KGspLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXUuX2xhYmVsLm1hcmdpbnksIikiKSksVyh2LGssXyxhLnVzZU1heFdpZHRoKSx2LmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdChrKSksdi5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXgueSwiKSIpKSxYdC5pbmRleE5vZGVzKCJzdWJHcmFwaCIrZyksIWEuaHRtbExhYmVscylmb3IodmFyIHc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksRT0wO0U8dy5sZW5ndGg7RSsrKXt2YXIgVD13W0VdLEM9VC5nZXRCQm94KCksUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1Muc2V0QXR0cmlidXRlKCJyeCIsMCksUy5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxTLnNldEF0dHJpYnV0ZSgid2lkdGgiLEMud2lkdGgpLFMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEMuaGVpZ2h0KSxULmluc2VydEJlZm9yZShTLFQuZmlyc3RDaGlsZCl9T2JqZWN0LmtleXMoZikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49Zlt0XTtpZihuLmxpbmspe3ZhciByPU9iamVjdChkLnNlbGVjdCkoIiMiK2UrJyBbaWQ9IicrdCsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX0sUG49ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sRm49ZnVuY3Rpb24odCxlKXt2YXIgbj0wLHI9MCxpPWUud3JhcD9lLnRleHQuc3BsaXQoeC5saW5lQnJlYWtSZWdleCk6W2UudGV4dC5yZXBsYWNlKHgubGluZUJyZWFrUmVnZXgsIiAiKV0sYT1bXSxvPTAscz1mdW5jdGlvbigpe3JldHVybiBlLnl9O2lmKHZvaWQgMCE9PWUudmFsaWduJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJmUudGV4dE1hcmdpbj4wKXN3aXRjaChlLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrZS50ZXh0TWFyZ2luKX07YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55KyhuK3IrZS50ZXh0TWFyZ2luKS8yKX07YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55KyhuK3IrMiplLnRleHRNYXJnaW4pLWUudGV4dE1hcmdpbil9fWlmKHZvaWQgMCE9PWUuYW5jaG9yJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJnZvaWQgMCE9PWUud2lkdGgpc3dpdGNoKGUuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmUueD1NYXRoLnJvdW5kKGUueCtlLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJzdGFydCIsZS5kb21pbmFudEJhc2VsaW5lPSJ0ZXh0LWFmdGVyLWVkZ2UiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC8yKSxlLmFuY2hvcj0ibWlkZGxlIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgtZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0iZW5kIixlLmRvbWluYW50QmFzZWxpbmU9InRleHQtYmVmb3JlLWVkZ2UiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSJ9Zm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PWlbY107dm9pZCAwIT09ZS50ZXh0TWFyZ2luJiYwPT09ZS50ZXh0TWFyZ2luJiZ2b2lkIDAhPT1lLmZvbnRTaXplJiYobz1jKmUuZm9udFNpemUpO3ZhciBsPXQuYXBwZW5kKCJ0ZXh0Iik7aWYobC5hdHRyKCJ4IixlLngpLGwuYXR0cigieSIscygpKSx2b2lkIDAhPT1lLmFuY2hvciYmbC5hdHRyKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixlLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsZS5hbGlnbm1lbnRCYXNlbGluZSksdm9pZCAwIT09ZS5mb250RmFtaWx5JiZsLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSx2b2lkIDAhPT1lLmZvbnRTaXplJiZsLnN0eWxlKCJmb250LXNpemUiLGUuZm9udFNpemUpLHZvaWQgMCE9PWUuZm9udFdlaWdodCYmbC5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksdm9pZCAwIT09ZS5maWxsJiZsLmF0dHIoImZpbGwiLGUuZmlsbCksdm9pZCAwIT09ZS5jbGFzcyYmbC5hdHRyKCJjbGFzcyIsZS5jbGFzcyksdm9pZCAwIT09ZS5keT9sLmF0dHIoImR5IixlLmR5KTowIT09byYmbC5hdHRyKCJkeSIsbyksZS50c3Bhbil7dmFyIGg9bC5hcHBlbmQoInRzcGFuIik7aC5hdHRyKCJ4IixlLngpLHZvaWQgMCE9PWUuZmlsbCYmaC5hdHRyKCJmaWxsIixlLmZpbGwpLGgudGV4dCh1KX1lbHNlIGwudGV4dCh1KTt2b2lkIDAhPT1lLnZhbGlnbiYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZlLnRleHRNYXJnaW4+MCYmKHIrPShsLl9ncm91cHN8fGwpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQsbj1yKSxhLnB1c2gobCl9cmV0dXJuIGF9LEluPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGEsbyxzPXQuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIHMuYXR0cigicG9pbnRzIiwobj1lLngscj1lLnksaT1lLndpZHRoLGE9ZS5oZWlnaHQsbisiLCIrcisiICIrKG4raSkrIiwiK3IrIiAiKyhuK2kpKyIsIisocithLShvPTcpKSsiICIrKG4raS0xLjIqbykrIiwiKyhyK2EpKyIgIituKyIsIisocithKSkpLHMuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5oZWlnaHQvMixGbih0LGUpLHN9LGpuPS0xLFJuPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sWW49ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LHpuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLGEsbyxzKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodCkscyl9ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyxzLGMpe2Zvcih2YXIgdT1jLmFjdG9yRm9udFNpemUsbD1jLmFjdG9yRm9udEZhbWlseSxoPWMuYWN0b3JGb250V2VpZ2h0LGY9dC5zcGxpdCh4LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLGc9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsdSkuc3R5bGUoImZvbnQtd2VpZ2h0IixoKS5zdHlsZSgiZm9udC1mYW1pbHkiLGwpO2cuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSxnLmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscihnLHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSxVbj17ZHJhd1JlY3Q6UG4sZHJhd1RleHQ6Rm4sZHJhd0xhYmVsOkluLGRyYXdBY3RvcjpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7MD09PWUueSYmKGpuKyssaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitqbikuYXR0cigieDEiLHIpLmF0dHIoInkxIiw1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikpO3ZhciBhPVluKCk7YS54PWUueCxhLnk9ZS55LGEuZmlsbD0iI2VhZWFlYSIsYS53aWR0aD1lLndpZHRoLGEuaGVpZ2h0PWUuaGVpZ2h0LGEuY2xhc3M9ImFjdG9yIixhLnJ4PTMsYS5yeT0zLFBuKGksYSksem4obikoZS5kZXNjcmlwdGlvbixpLGEueCxhLnksYS53aWR0aCxhLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sbil9LGFuY2hvckVsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwZW5kKCJnIil9LGRyYXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9WW4oKSxvPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PW4tZS5zdGFydHksUG4obyxhKX0sZHJhd0xvb3A6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ci5ib3hNYXJnaW4sYT1yLmJveFRleHRNYXJnaW4sbz1yLmxhYmVsQm94SGVpZ2h0LHM9ci5sYWJlbEJveFdpZHRoLGM9ci5tZXNzYWdlRm9udEZhbWlseSx1PXIubWVzc2FnZUZvbnRTaXplLGw9ci5tZXNzYWdlRm9udFdlaWdodCxoPXQuYXBwZW5kKCJnIiksZj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gaC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdCkuYXR0cigieTEiLGUpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIscikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfTtmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdGFydHkpLGYoZS5zdG9weCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdG9weSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdGFydHksZS5zdGFydHgsZS5zdG9weSksdm9pZCAwIT09ZS5zZWN0aW9ucyYmZS5zZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXtmKGUuc3RhcnR4LHQueSxlLnN0b3B4LHQueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KSk7dmFyIGQ9Um4oKTtkLnRleHQ9bixkLng9ZS5zdGFydHgsZC55PWUuc3RhcnR5LGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQud2lkdGg9c3x8NTAsZC5oZWlnaHQ9b3x8MjAsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibGFiZWxUZXh0IixJbihoLGQpLChkPVJuKCkpLnRleHQ9ZS50aXRsZSxkLng9ZS5zdGFydHgrcy8yKyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnN0YXJ0eStpK2EsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibG9vcFRleHQiLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ITA7dmFyIHA9Rm4oaCxkKTtyZXR1cm4gdm9pZCAwIT09ZS5zZWN0aW9uVGl0bGVzJiZlLnNlY3Rpb25UaXRsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtpZih0Lm1lc3NhZ2Upe2QudGV4dD10Lm1lc3NhZ2UsZC54PWUuc3RhcnR4KyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnNlY3Rpb25zW25dLnkraSthLGQuY2xhc3M9Imxvb3BUZXh0IixkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ZS53cmFwLHA9Rm4oaCxkKTt2YXIgcj1NYXRoLnJvdW5kKHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC5fZ3JvdXBzfHx0KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0fSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKTtlLnNlY3Rpb25zW25dLmhlaWdodCs9ci0oaSthKX19KSksZS5oZWlnaHQ9TWF0aC5yb3VuZChlLnN0b3B5LWUuc3RhcnR5KSxofSxkcmF3QmFja2dyb3VuZFJlY3Q6ZnVuY3Rpb24odCxlKXtQbih0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxpbnNlcnRBcnJvd0hlYWQ6ZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9LGluc2VydFNlcXVlbmNlTnVtYmVyOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0saW5zZXJ0QXJyb3dDcm9zc0hlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sZ2V0VGV4dE9iajpSbixnZXROb3RlUmVjdDpZbn0sJG49bigyKSxXbj1uLm4oJG4pLFZuPXZvaWQgMCxIbj17fSxHbj1bXSxxbj1bXSxYbj0iIixabj0hMSxKbj0hMSxRbj0hMSxLbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9SG5bdF07ciYmZT09PXIubmFtZSYmbnVsbD09bnx8KG51bGwhPW4mJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGx9KSxIblt0XT17bmFtZTplLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmbnIoKXx8ISFuLndyYXAscHJldkFjdG9yOlZufSxWbiYmSG5bVm5dJiYoSG5bVm5dLm5leHRBY3Rvcj10KSxWbj10KX0sdHI9ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxHbi5sZW5ndGg7ZSsrKUduW2VdLnR5cGU9PT1yci5BQ1RJVkVfU1RBUlQmJkduW2VdLmZyb20uYWN0b3I9PT10JiZuKyssR25bZV0udHlwZT09PXJyLkFDVElWRV9FTkQmJkduW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09cnIuQUNUSVZFX0VORCl7dmFyIGk9dHIodC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiBHbi5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmbnIoKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LG5yPWZ1bmN0aW9uKCl7cmV0dXJuIFFufSxycj17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyM30saXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXthY3Rvcjp0LHBsYWNlbWVudDplLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZucigpfHwhIW4ud3JhcH0saT1bXS5jb25jYXQodCx0KTtxbi5wdXNoKHIpLEduLnB1c2goe2Zyb206aVswXSx0bzppWzFdLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZucigpfHwhIW4ud3JhcCx0eXBlOnJyLk5PVEUscGxhY2VtZW50OmV9KX0sYXI9ZnVuY3Rpb24odCl7WG49dC50ZXh0LFpuPXZvaWQgMD09PXQud3JhcCYmbnIoKXx8ISF0LndyYXB9LG9yPXthZGRBY3RvcjpLbixhZGRNZXNzYWdlOmZ1bmN0aW9uKHQsZSxuLHIpe0duLnB1c2goe2Zyb206dCx0bzplLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZucigpfHwhIW4ud3JhcCxhbnN3ZXI6cn0pfSxhZGRTaWduYWw6ZXIsYXV0b1dyYXA6bnIsc2V0V3JhcDpmdW5jdGlvbih0KXtRbj10fSxlbmFibGVTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtKbj0hMH0sc2hvd1NlcXVlbmNlTnVtYmVyczpmdW5jdGlvbigpe3JldHVybiBKbn0sZ2V0TWVzc2FnZXM6ZnVuY3Rpb24oKXtyZXR1cm4gR259LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBIbn0sZ2V0QWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIEhuW3RdfSxnZXRBY3RvcktleXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoSG4pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBYbn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe0hvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5zZXF1ZW5jZX0sZ2V0VGl0bGVXcmFwcGVkOmZ1bmN0aW9uKCl7cmV0dXJuIFpufSxjbGVhcjpmdW5jdGlvbigpe0huPXt9LEduPVtdfSxwYXJzZU1lc3NhZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj17dGV4dDplLnJlcGxhY2UoL15bOl0/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6bnVsbD09PWUubWF0Y2goL15bOl0/KD86bm8pP3dyYXA6Lyk/eC5oYXNCcmVha3MoZSl8fHZvaWQgMDpudWxsIT09ZS5tYXRjaCgvXls6XT93cmFwOi8pfHxudWxsPT09ZS5tYXRjaCgvXls6XT9ub3dyYXA6LykmJnZvaWQgMH07cmV0dXJuIGMuZGVidWcoInBhcnNlTWVzc2FnZToiLG4pLG59LExJTkVUWVBFOnJyLEFSUk9XVFlQRTp7RklMTEVEOjAsT1BFTjoxfSxQTEFDRU1FTlQ6e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LGFkZE5vdGU6aXIsc2V0VGl0bGU6YXIsYXBwbHk6ZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgQXJyYXkpZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0KGUpfSkpO2Vsc2Ugc3dpdGNoKGUudHlwZSl7Y2FzZSJhZGRBY3RvciI6S24oZS5hY3RvcixlLmFjdG9yLGUuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOmNhc2UiYWN0aXZlRW5kIjplcihlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOmlyKGUuYWN0b3IsZS5wbGFjZW1lbnQsZS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmVyKGUuZnJvbSxlLnRvLGUubXNnLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wU3RhcnQiOmVyKHZvaWQgMCx2b2lkIDAsZS5sb29wVGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcEVuZCI6ZXIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6ZXIodm9pZCAwLHZvaWQgMCxlLmNvbG9yLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0RW5kIjplcih2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0U3RhcnQiOmVyKHZvaWQgMCx2b2lkIDAsZS5vcHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRFbmQiOmVyKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRTdGFydCI6Y2FzZSJlbHNlIjplcih2b2lkIDAsdm9pZCAwLGUuYWx0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0RW5kIjplcih2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uic2V0VGl0bGUiOmFyKGUudGV4dCk7YnJlYWs7Y2FzZSJwYXJTdGFydCI6Y2FzZSJhbmQiOmVyKHZvaWQgMCx2b2lkIDAsZS5wYXJUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOmVyKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSl9fX07JG4ucGFyc2VyLnl5PW9yO3ZhciBzcj17fSxjcj17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxhY3RpdmF0aW9uczpbXSxtb2RlbHM6e2dldEhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLDA9PT10aGlzLmFjdG9ycy5sZW5ndGg/WzBdOnRoaXMuYWN0b3JzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpKSsoMD09PXRoaXMubG9vcHMubGVuZ3RoPzA6dGhpcy5sb29wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm1lc3NhZ2VzLmxlbmd0aD8wOnRoaXMubWVzc2FnZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpKygwPT09dGhpcy5ub3Rlcy5sZW5ndGg/MDp0aGlzLm5vdGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQWN0b3I6ZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sYWRkTG9vcDpmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSxhZGROb3RlOmZ1bmN0aW9uKHQpe3RoaXMubm90ZXMucHVzaCh0KX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsZHIoJG4ucGFyc2VyLnl5LmdldENvbmZpZygpKX0sdXBkYXRlVmFsOmZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PXRbZV0/dFtlXT1uOnRbZV09cihuLHRbZV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxhPTA7ZnVuY3Rpb24gbyhvKXtyZXR1cm4gZnVuY3Rpb24ocyl7YSsrO3ZhciBjPWkuc2VxdWVuY2VJdGVtcy5sZW5ndGgtYSsxO2kudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKnNyLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocywic3RvcHkiLHIrYypzci5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKGNyLmRhdGEsInN0YXJ0eCIsdC1jKnNyLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoY3IuZGF0YSwic3RvcHgiLG4rYypzci5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PW8mJihpLnVwZGF0ZVZhbChzLCJzdGFydHgiLHQtYypzci5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHMsInN0b3B4IixuK2Mqc3IuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChjci5kYXRhLCJzdGFydHkiLGUtYypzci5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKGNyLmRhdGEsInN0b3B5IixyK2Mqc3IuYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKG8oKSksdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKG8oImFjdGl2YXRpb24iKSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKGNyLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoY3IuZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChjci5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoY3IuZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxuZXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uW3QuZnJvbS5hY3Rvcl0saT1wcih0LmZyb20uYWN0b3IpLmxlbmd0aHx8MCxhPXIueCtyLndpZHRoLzIrKGktMSkqc3IuYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6YSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OmErc3IuYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3Rvcjp0LmZyb20uYWN0b3IsYW5jaG9yZWQ6VW4uYW5jaG9yRWxlbWVudChlKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LG5ld0xvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0LGUpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5OmNyLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKHQpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyt0LHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sdXI9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9fSxscj1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH19LGhyPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fX0sZnI9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9ZVtuW29dXTtzLndpZHRoPXMud2lkdGh8fHNyLndpZHRoLHMuaGVpZ2h0PU1hdGgubWF4KHMuaGVpZ2h0fHxzci5oZWlnaHQsc3IuaGVpZ2h0KSxzLm1hcmdpbj1zLm1hcmdpbnx8c3IuYWN0b3JNYXJnaW4scy54PWkrYSxzLnk9cixVbi5kcmF3QWN0b3IodCxzLHNyKSxjci5pbnNlcnQocy54LHIscy54K3Mud2lkdGgscy5oZWlnaHQpLGkrPXMud2lkdGgsYSs9cy5tYXJnaW4sY3IubW9kZWxzLmFkZEFjdG9yKHMpfWNyLmJ1bXBWZXJ0aWNhbFBvcyhzci5oZWlnaHQpfSxkcj1mdW5jdGlvbih0KXtJKHNyLHQpLHQuZm9udEZhbWlseSYmKHNyLmFjdG9yRm9udEZhbWlseT1zci5ub3RlRm9udEZhbWlseT1zci5tZXNzYWdlRm9udEZhbWlseT10LmZvbnRGYW1pbHkpLHQuZm9udFNpemUmJihzci5hY3RvckZvbnRTaXplPXNyLm5vdGVGb250U2l6ZT1zci5tZXNzYWdlRm9udFNpemU9dC5mb250U2l6ZSksdC5mb250V2VpZ2h0JiYoc3IuYWN0b3JGb250V2VpZ2h0PXNyLm5vdGVGb250V2VpZ2h0PXNyLm1lc3NhZ2VGb250V2VpZ2h0PXQuZm9udFdlaWdodCl9LHByPWZ1bmN0aW9uKHQpe3JldHVybiBjci5hY3RpdmF0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdG9yPT09dH0pKX0sZ3I9ZnVuY3Rpb24odCxlKXt2YXIgbj1lW3RdLHI9cHIodCk7cmV0dXJuW3IucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LGUuc3RhcnR4KX0pLG4ueCtuLndpZHRoLzIpLHIucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUuc3RvcHgpfSksbi54K24ud2lkdGgvMildfTtmdW5jdGlvbiB5cih0LGUsbixyLGkpe2NyLmJ1bXBWZXJ0aWNhbFBvcyhuKTt2YXIgYT1yO2lmKGUuaWQmJmUubWVzc2FnZSYmdFtlLmlkXSl7dmFyIG89dFtlLmlkXS53aWR0aCxzPXVyKHNyKTtlLm1lc3NhZ2U9Vi53cmFwTGFiZWwoIlsiLmNvbmNhdChlLm1lc3NhZ2UsIl0iKSxvLTIqc3Iud3JhcFBhZGRpbmcscyksZS53aWR0aD1vLGUud3JhcD0hMDt2YXIgdT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGUubWVzc2FnZSxzKSxsPU1hdGgubWF4KHUuaGVpZ2h0LHNyLmxhYmVsQm94SGVpZ2h0KTthPXIrbCxjLmRlYnVnKCIiLmNvbmNhdChsLCIgLSAiKS5jb25jYXQoZS5tZXNzYWdlKSl9aShlKSxjci5idW1wVmVydGljYWxQb3MoYSl9dmFyIHZyPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYodFtlLnRvXSYmdFtlLmZyb21dKXt2YXIgcj10W2UudG9dO2lmKGUucGxhY2VtZW50PT09JG4ucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0YmJiFyLnByZXZBY3RvcilyZXR1cm47aWYoZS5wbGFjZW1lbnQ9PT0kbi5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0YmJiFyLm5leHRBY3RvcilyZXR1cm47dmFyIGk9dm9pZCAwIT09ZS5wbGFjZW1lbnQsYT0haSxvPWk/bHIoc3IpOnVyKHNyKSxzPWUud3JhcD9WLndyYXBMYWJlbChlLm1lc3NhZ2Usc3Iud2lkdGgtMipzci53cmFwUGFkZGluZyxvKTplLm1lc3NhZ2UsYz1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHMsbykud2lkdGgrMipzci53cmFwUGFkZGluZzthJiZlLmZyb209PT1yLm5leHRBY3Rvcj9uW2UudG9dPU1hdGgubWF4KG5bZS50b118fDAsYyk6YSYmZS5mcm9tPT09ci5wcmV2QWN0b3I/bltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjKTphJiZlLmZyb209PT1lLnRvPyhuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMiksbltlLnRvXT1NYXRoLm1heChuW2UudG9dfHwwLGMvMikpOmUucGxhY2VtZW50PT09JG4ucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GP25bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYyk6ZS5wbGFjZW1lbnQ9PT0kbi5wYXJzZXIueXkuUExBQ0VNRU5ULkxFRlRPRj9uW3IucHJldkFjdG9yXT1NYXRoLm1heChuW3IucHJldkFjdG9yXXx8MCxjKTplLnBsYWNlbWVudD09PSRuLnBhcnNlci55eS5QTEFDRU1FTlQuT1ZFUiYmKHIucHJldkFjdG9yJiYobltyLnByZXZBY3Rvcl09TWF0aC5tYXgobltyLnByZXZBY3Rvcl18fDAsYy8yKSksci5uZXh0QWN0b3ImJihuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMikpKX19KSksYy5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixuKSxufSxtcj1mdW5jdGlvbih0LGUpe3ZhciBuPTA7Zm9yKHZhciByIGluIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXRbZV07ci53cmFwJiYoci5kZXNjcmlwdGlvbj1WLndyYXBMYWJlbChyLmRlc2NyaXB0aW9uLHNyLndpZHRoLTIqc3Iud3JhcFBhZGRpbmcsaHIoc3IpKSk7dmFyIGk9Vi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhyLmRlc2NyaXB0aW9uLGhyKHNyKSk7ci53aWR0aD1yLndyYXA/c3Iud2lkdGg6TWF0aC5tYXgoc3Iud2lkdGgsaS53aWR0aCsyKnNyLndyYXBQYWRkaW5nKSxyLmhlaWdodD1yLndyYXA/TWF0aC5tYXgoaS5oZWlnaHQsc3IuaGVpZ2h0KTpzci5oZWlnaHQsbj1NYXRoLm1heChuLHIuaGVpZ2h0KX0pKSxlKXt2YXIgaT10W3JdO2lmKGkpe3ZhciBhPXRbaS5uZXh0QWN0b3JdO2lmKGEpe3ZhciBvPWVbcl0rc3IuYWN0b3JNYXJnaW4taS53aWR0aC8yLWEud2lkdGgvMjtpLm1hcmdpbj1NYXRoLm1heChvLHNyLmFjdG9yTWFyZ2luKX19fXJldHVybiBNYXRoLm1heChuLHNyLmhlaWdodCl9LGJyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9e30sbz1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtzd2l0Y2godC5pZD1WLnJhbmRvbSh7bGVuZ3RoOjEwfSksdC50eXBlKXtjYXNlICRuLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlICRuLnBhcnNlci55eS5MSU5FVFlQRS5PUFRfU1RBUlQ6Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuUEFSX1NUQVJUOm8ucHVzaCh7aWQ6dC5pZCxtc2c6dC5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTFNFOmNhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9BTkQ6dC5tZXNzYWdlJiYobj1vLnBvcCgpLGFbbi5pZF09bixhW3QuaWRdPW4sby5wdXNoKG4pKTticmVhaztjYXNlICRuLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX0VORDpjYXNlICRuLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfRU5EOmNhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuUEFSX0VORDpuPW8ucG9wKCksYVtuLmlkXT1uO2JyZWFrO2Nhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9TVEFSVDp2YXIgcz1lW3QuZnJvbT90LmZyb20uYWN0b3I6dC50by5hY3Rvcl0sdT1wcih0LmZyb20/dC5mcm9tLmFjdG9yOnQudG8uYWN0b3IpLmxlbmd0aCxsPXMueCtzLndpZHRoLzIrKHUtMSkqc3IuYWN0aXZhdGlvbldpZHRoLzIsaD17c3RhcnR4Omwsc3RvcHg6bCtzci5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6dC5mcm9tLmFjdG9yLGVuYWJsZWQ6ITB9O2NyLmFjdGl2YXRpb25zLnB1c2goaCk7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX0VORDp2YXIgZj1jci5hY3RpdmF0aW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFjdG9yfSkpLmxhc3RJbmRleE9mKHQuZnJvbS5hY3Rvcik7ZGVsZXRlIGNyLmFjdGl2YXRpb25zLnNwbGljZShmLDEpWzBdfXZvaWQgMCE9PXQucGxhY2VtZW50PyhyPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVt0LmZyb21dLngscj1lW3QudG9dLngsaT10LndyYXAmJnQubWVzc2FnZSxhPVYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9WLndyYXBMYWJlbCh0Lm1lc3NhZ2Usc3Iud2lkdGgsbHIoc3IpKTp0Lm1lc3NhZ2UsbHIoc3IpKSxvPXt3aWR0aDppP3NyLndpZHRoOk1hdGgubWF4KHNyLndpZHRoLGEud2lkdGgrMipzci5ub3RlTWFyZ2luKSxoZWlnaHQ6MCxzdGFydHg6ZVt0LmZyb21dLngsc3RvcHg6MCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlfTtyZXR1cm4gdC5wbGFjZW1lbnQ9PT0kbi5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0Y/KG8ud2lkdGg9aT9NYXRoLm1heChzci53aWR0aCxhLndpZHRoKTpNYXRoLm1heChlW3QuZnJvbV0ud2lkdGgvMitlW3QudG9dLndpZHRoLzIsYS53aWR0aCsyKnNyLm5vdGVNYXJnaW4pLG8uc3RhcnR4PW4rKGVbdC5mcm9tXS53aWR0aCtzci5hY3Rvck1hcmdpbikvMik6dC5wbGFjZW1lbnQ9PT0kbi5wYXJzZXIueXkuUExBQ0VNRU5ULkxFRlRPRj8oby53aWR0aD1pP01hdGgubWF4KHNyLndpZHRoLGEud2lkdGgrMipzci5ub3RlTWFyZ2luKTpNYXRoLm1heChlW3QuZnJvbV0ud2lkdGgvMitlW3QudG9dLndpZHRoLzIsYS53aWR0aCsyKnNyLm5vdGVNYXJnaW4pLG8uc3RhcnR4PW4tby53aWR0aCsoZVt0LmZyb21dLndpZHRoLXNyLmFjdG9yTWFyZ2luKS8yKTp0LnRvPT09dC5mcm9tPyhhPVYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9WLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoc3Iud2lkdGgsZVt0LmZyb21dLndpZHRoKSxscihzcikpOnQubWVzc2FnZSxscihzcikpLG8ud2lkdGg9aT9NYXRoLm1heChzci53aWR0aCxlW3QuZnJvbV0ud2lkdGgpOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aCxzci53aWR0aCxhLndpZHRoKzIqc3Iubm90ZU1hcmdpbiksby5zdGFydHg9bisoZVt0LmZyb21dLndpZHRoLW8ud2lkdGgpLzIpOihvLndpZHRoPU1hdGguYWJzKG4rZVt0LmZyb21dLndpZHRoLzItKHIrZVt0LnRvXS53aWR0aC8yKSkrc3IuYWN0b3JNYXJnaW4sby5zdGFydHg9bjxyP24rZVt0LmZyb21dLndpZHRoLzItc3IuYWN0b3JNYXJnaW4vMjpyK2VbdC50b10ud2lkdGgvMi1zci5hY3Rvck1hcmdpbi8yKSxpJiYoby5tZXNzYWdlPVYud3JhcExhYmVsKHQubWVzc2FnZSxvLndpZHRoLTIqc3Iud3JhcFBhZGRpbmcsbHIoc3IpKSksYy5kZWJ1ZygiTk06WyIuY29uY2F0KG8uc3RhcnR4LCIsIikuY29uY2F0KG8uc3RvcHgsIiwiKS5jb25jYXQoby5zdGFydHksIiwiKS5jb25jYXQoby5zdG9weSwiOiIpLmNvbmNhdChvLndpZHRoLCIsIikuY29uY2F0KG8uaGVpZ2h0LCI9IikuY29uY2F0KHQubWVzc2FnZSwiXSIpKSxvfSh0LGUpLHQubm90ZU1vZGVsPXIsby5mb3JFYWNoKChmdW5jdGlvbih0KXsobj10KS5mcm9tPU1hdGgubWluKG4uZnJvbSxyLnN0YXJ0eCksbi50bz1NYXRoLm1heChuLnRvLHIuc3RhcnR4K3Iud2lkdGgpLG4ud2lkdGg9TWF0aC5tYXgobi53aWR0aCxNYXRoLmFicyhuLmZyb20tbi50bykpLXNyLmxhYmVsQm94V2lkdGh9KSkpOihpPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITE7aWYoWyRuLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9PUEVOLCRuLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTiwkbi5wYXJzZXIueXkuTElORVRZUEUuU09MSUQsJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRCwkbi5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MsJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU10uaW5jbHVkZXModC50eXBlKSYmKG49ITApLCFuKXJldHVybnt9O3ZhciByPWdyKHQuZnJvbSxlKSxpPWdyKHQudG8sZSksYT1yWzBdPD1pWzBdPzE6MCxvPXJbMF08aVswXT8wOjEscz1yLmNvbmNhdChpKSxjPU1hdGguYWJzKGlbb10tclthXSksdT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHQubWVzc2FnZSx1cihzcikpO3JldHVybiB0LndyYXAmJnQubWVzc2FnZSYmKHQubWVzc2FnZT1WLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoYysyKnNyLndyYXBQYWRkaW5nLHNyLndpZHRoKSx1cihzcikpKSx7d2lkdGg6TWF0aC5tYXgodC53cmFwPzA6dS53aWR0aCsyKnNyLndyYXBQYWRkaW5nLGMrMipzci53cmFwUGFkZGluZyxzci53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnJbYV0sc3RvcHg6aVtvXSxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxzKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHMpfX0odCxlKSx0Lm1zZ01vZGVsPWksaS5zdGFydHgmJmkuc3RvcHgmJm8ubGVuZ3RoPjAmJm8uZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYobj1yLGkuc3RhcnR4PT09aS5zdG9weCl7dmFyIGE9ZVt0LmZyb21dLG89ZVt0LnRvXTtuLmZyb209TWF0aC5taW4oYS54LWkud2lkdGgvMixhLngtYS53aWR0aC8yLG4uZnJvbSksbi50bz1NYXRoLm1heChvLngraS53aWR0aC8yLG8ueCthLndpZHRoLzIsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLE1hdGguYWJzKG4udG8tbi5mcm9tKSktc3IubGFiZWxCb3hXaWR0aH1lbHNlIG4uZnJvbT1NYXRoLm1pbihpLnN0YXJ0eCxuLmZyb20pLG4udG89TWF0aC5tYXgoaS5zdG9weCxuLnRvKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsaS53aWR0aCktc3IubGFiZWxCb3hXaWR0aH0pKSl9KSksY3IuYWN0aXZhdGlvbnM9W10sYy5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGEpLGF9LHhyPXtib3VuZHM6Y3IsZHJhd0FjdG9yczpmcixzZXRDb25mOmRyLGRyYXc6ZnVuY3Rpb24odCxlKXtzcj1fdCgpLnNlcXVlbmNlLCRuLnBhcnNlci55eS5jbGVhcigpLCRuLnBhcnNlci55eS5zZXRXcmFwKHNyLndyYXApLCRuLnBhcnNlci5wYXJzZSh0KyJcbiIpLGNyLmluaXQoKSxjLmRlYnVnKCJDOiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHNyLG51bGwsMikpKTt2YXIgbj1PYmplY3QoZC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLHI9JG4ucGFyc2VyLnl5LmdldEFjdG9ycygpLGk9JG4ucGFyc2VyLnl5LmdldEFjdG9yS2V5cygpLGE9JG4ucGFyc2VyLnl5LmdldE1lc3NhZ2VzKCksbz0kbi5wYXJzZXIueXkuZ2V0VGl0bGUoKSxzPXZyKHIsYSk7c3IuaGVpZ2h0PW1yKHIscyksZnIobixyLGksMCk7dmFyIHU9YnIoYSxyLHMpO1VuLmluc2VydEFycm93SGVhZChuKSxVbi5pbnNlcnRBcnJvd0Nyb3NzSGVhZChuKSxVbi5pbnNlcnRTZXF1ZW5jZU51bWJlcihuKTt2YXIgbD0xO2EuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUsaSxhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLk5PVEU6aT10Lm5vdGVNb2RlbCxmdW5jdGlvbih0LGUpe2NyLmJ1bXBWZXJ0aWNhbFBvcyhzci5ib3hNYXJnaW4pLGUuaGVpZ2h0PXNyLmJveE1hcmdpbixlLnN0YXJ0eT1jci5nZXRWZXJ0aWNhbFBvcygpO3ZhciBuPVVuLmdldE5vdGVSZWN0KCk7bi54PWUuc3RhcnR4LG4ueT1lLnN0YXJ0eSxuLndpZHRoPWUud2lkdGh8fHNyLndpZHRoLG4uY2xhc3M9Im5vdGUiO3ZhciByPXQuYXBwZW5kKCJnIiksaT1Vbi5kcmF3UmVjdChyLG4pLGE9VW4uZ2V0VGV4dE9iaigpO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS53aWR0aD1uLndpZHRoLGEuZHk9IjFlbSIsYS50ZXh0PWUubWVzc2FnZSxhLmNsYXNzPSJub3RlVGV4dCIsYS5mb250RmFtaWx5PXNyLm5vdGVGb250RmFtaWx5LGEuZm9udFNpemU9c3Iubm90ZUZvbnRTaXplLGEuZm9udFdlaWdodD1zci5ub3RlRm9udFdlaWdodCxhLmFuY2hvcj1zci5ub3RlQWxpZ24sYS50ZXh0TWFyZ2luPXNyLm5vdGVNYXJnaW4sYS52YWxpZ249c3Iubm90ZUFsaWduLGEud3JhcD0hMDt2YXIgbz1GbihyLGEpLHM9TWF0aC5yb3VuZChvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7aS5hdHRyKCJoZWlnaHQiLHMrMipzci5ub3RlTWFyZ2luKSxlLmhlaWdodCs9cysyKnNyLm5vdGVNYXJnaW4sY3IuYnVtcFZlcnRpY2FsUG9zKHMrMipzci5ub3RlTWFyZ2luKSxlLnN0b3B5PWUuc3RhcnR5K3MrMipzci5ub3RlTWFyZ2luLGUuc3RvcHg9ZS5zdGFydHgrbi53aWR0aCxjci5pbnNlcnQoZS5zdGFydHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxjci5tb2RlbHMuYWRkTm90ZShlKX0obixpKTticmVhaztjYXNlICRuLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6Y3IubmV3QWN0aXZhdGlvbih0LG4scik7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX0VORDohZnVuY3Rpb24odCxlKXt2YXIgcj1jci5lbmRBY3RpdmF0aW9uKHQpO3Iuc3RhcnR5KzE4PmUmJihyLnN0YXJ0eT1lLTYsZSs9MTIpLFVuLmRyYXdBY3RpdmF0aW9uKG4scixlLHNyLHByKHQuZnJvbS5hY3RvcikubGVuZ3RoKSxjci5pbnNlcnQoci5zdGFydHgsZS0xMCxyLnN0b3B4LGUpfSh0LGNyLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6eXIodSx0LHNyLmJveE1hcmdpbixzci5ib3hNYXJnaW4rc3IuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGNyLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9FTkQ6ZT1jci5lbmRMb29wKCksVW4uZHJhd0xvb3AobixlLCJsb29wIixzciksY3IuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktY3IuZ2V0VmVydGljYWxQb3MoKSksY3IubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9TVEFSVDp5cih1LHQsc3IuYm94TWFyZ2luLHNyLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGNyLm5ld0xvb3Aodm9pZCAwLHQubWVzc2FnZSl9KSk7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9FTkQ6ZT1jci5lbmRMb29wKCksVW4uZHJhd0JhY2tncm91bmRSZWN0KG4sZSksY3IubW9kZWxzLmFkZExvb3AoZSksY3IuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktY3IuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOnlyKHUsdCxzci5ib3hNYXJnaW4sc3IuYm94TWFyZ2luK3NyLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBjci5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6ZT1jci5lbmRMb29wKCksVW4uZHJhd0xvb3AobixlLCJvcHQiLHNyKSxjci5idW1wVmVydGljYWxQb3MoZS5zdG9weS1jci5nZXRWZXJ0aWNhbFBvcygpKSxjci5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlICRuLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6eXIodSx0LHNyLmJveE1hcmdpbixzci5ib3hNYXJnaW4rc3IuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGNyLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6eXIodSx0LHNyLmJveE1hcmdpbitzci5ib3hUZXh0TWFyZ2luLHNyLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGNyLmFkZFNlY3Rpb25Ub0xvb3AodCl9KSk7YnJlYWs7Y2FzZSAkbi5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDplPWNyLmVuZExvb3AoKSxVbi5kcmF3TG9vcChuLGUsImFsdCIsc3IpLGNyLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LWNyLmdldFZlcnRpY2FsUG9zKCkpLGNyLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDp5cih1LHQsc3IuYm94TWFyZ2luLHNyLmJveE1hcmdpbitzci5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gY3IubmV3TG9vcCh0KX0pKTticmVhaztjYXNlICRuLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOnlyKHUsdCxzci5ib3hNYXJnaW4rc3IuYm94VGV4dE1hcmdpbixzci5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBjci5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgJG4ucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6ZT1jci5lbmRMb29wKCksVW4uZHJhd0xvb3AobixlLCJwYXIiLHNyKSxjci5idW1wVmVydGljYWxQb3MoZS5zdG9weS1jci5nZXRWZXJ0aWNhbFBvcygpKSxjci5tb2RlbHMuYWRkTG9vcChlKTticmVhaztkZWZhdWx0OnRyeXsoYT10Lm1zZ01vZGVsKS5zdGFydHk9Y3IuZ2V0VmVydGljYWxQb3MoKSxhLnNlcXVlbmNlSW5kZXg9bCxmdW5jdGlvbih0LGUpe2NyLmJ1bXBWZXJ0aWNhbFBvcygxMCk7dmFyIG49ZS5zdGFydHgscj1lLnN0b3B4LGk9ZS5zdGFydHksYT1lLm1lc3NhZ2Usbz1lLnR5cGUscz1lLnNlcXVlbmNlSW5kZXgsYz1lLndyYXAsdT14LnNwbGl0QnJlYWtzKGEpLmxlbmd0aCxsPVYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoYSx1cihzcikpLGg9bC5oZWlnaHQvdTtlLmhlaWdodCs9aCxjci5idW1wVmVydGljYWxQb3MoaCk7dmFyIGY9VW4uZ2V0VGV4dE9iaigpO2YueD1uLGYueT1pKzEwLGYud2lkdGg9ci1uLGYuY2xhc3M9Im1lc3NhZ2VUZXh0IixmLmR5PSIxZW0iLGYudGV4dD1hLGYuZm9udEZhbWlseT1zci5tZXNzYWdlRm9udEZhbWlseSxmLmZvbnRTaXplPXNyLm1lc3NhZ2VGb250U2l6ZSxmLmZvbnRXZWlnaHQ9c3IubWVzc2FnZUZvbnRXZWlnaHQsZi5hbmNob3I9c3IubWVzc2FnZUFsaWduLGYudmFsaWduPXNyLm1lc3NhZ2VBbGlnbixmLnRleHRNYXJnaW49c3Iud3JhcFBhZGRpbmcsZi50c3Bhbj0hMSxmLndyYXA9YyxGbih0LGYpO3ZhciBkLHAsZz1sLmhlaWdodC0xMCx5PWwud2lkdGg7aWYobj09PXIpe3A9Y3IuZ2V0VmVydGljYWxQb3MoKStnLHNyLnJpZ2h0QW5nbGVzP2Q9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAgIi5jb25jYXQobiwiLCIpLmNvbmNhdChwLCIgSCAiKS5jb25jYXQobitNYXRoLm1heChzci53aWR0aC8yLHkvMiksIiBWICIpLmNvbmNhdChwKzI1LCIgSCAiKS5jb25jYXQobikpOihnKz1zci5ib3hNYXJnaW4scD1jci5nZXRWZXJ0aWNhbFBvcygpK2csZD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIrbisiLCIrcCsiIEMgIisobis2MCkrIiwiKyhwLTEwKSsiICIrKG4rNjApKyIsIisocCszMCkrIiAiK24rIiwiKyhwKzIwKSkpLGcrPTMwO3ZhciB2PU1hdGgubWF4KHkvMixzci53aWR0aC8yKTtjci5pbnNlcnQobi12LGNyLmdldFZlcnRpY2FsUG9zKCktMTArZyxyK3YsY3IuZ2V0VmVydGljYWxQb3MoKSszMCtnKX1lbHNlIGcrPXNyLmJveE1hcmdpbixwPWNyLmdldFZlcnRpY2FsUG9zKCkrZywoZD10LmFwcGVuZCgibGluZSIpKS5hdHRyKCJ4MSIsbiksZC5hdHRyKCJ5MSIscCksZC5hdHRyKCJ4MiIsciksZC5hdHRyKCJ5MiIscCksY3IuaW5zZXJ0KG4scC0xMCxyLHApO289PT0kbi5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEfHxvPT09JG4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8bz09PSRuLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTj8oZC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxkLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmQuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTt2YXIgbT0iIjtzci5hcnJvd01hcmtlckFic29sdXRlJiYobT0obT0obT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxkLmF0dHIoInN0cm9rZS13aWR0aCIsMiksZC5hdHRyKCJzdHJva2UiLCJub25lIiksZC5zdHlsZSgiZmlsbCIsIm5vbmUiKSxvIT09JG4ucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEJiZvIT09JG4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRHx8ZC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Fycm93aGVhZCkiKSxvIT09JG4ucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTJiZvIT09JG4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8ZC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Nyb3NzaGVhZCkiKSwob3Iuc2hvd1NlcXVlbmNlTnVtYmVycygpfHxzci5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGQuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiI3NlcXVlbmNlbnVtYmVyKSIpLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbikuYXR0cigieSIscCs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0TGVuZ3RoIiwiMTZweCIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KHMpKSxjci5idW1wVmVydGljYWxQb3MoZyksZS5oZWlnaHQrPWcsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxjci5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSl9KG4sYSksY3IubW9kZWxzLmFkZE1lc3NhZ2UoYSl9Y2F0Y2godCl7Yy5lcnJvcigiZXJyb3Igd2hpbGUgZHJhd2luZyBtZXNzYWdlIix0KX19WyRuLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9PUEVOLCRuLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTiwkbi5wYXJzZXIueXkuTElORVRZUEUuU09MSUQsJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRCwkbi5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MsJG4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU10uaW5jbHVkZXModC50eXBlKSYmbCsrfSkpLHNyLm1pcnJvckFjdG9ycyYmKGNyLmJ1bXBWZXJ0aWNhbFBvcygyKnNyLmJveE1hcmdpbiksZnIobixyLGksY3IuZ2V0VmVydGljYWxQb3MoKSkpO3ZhciBoPWNyLmdldEJvdW5kcygpLmJvdW5kcztjLmRlYnVnKCJGb3IgbGluZSBoZWlnaHQgZml4IFF1ZXJ5aW5nOiAjIitlKyIgLmFjdG9yLWxpbmUiKSxPYmplY3QoZC5zZWxlY3RBbGwpKCIjIitlKyIgLmFjdG9yLWxpbmUiKS5hdHRyKCJ5MiIsaC5zdG9weSk7dmFyIGY9aC5zdG9weS1oLnN0YXJ0eSsyKnNyLmRpYWdyYW1NYXJnaW5ZO3NyLm1pcnJvckFjdG9ycyYmKGY9Zi1zci5ib3hNYXJnaW4rc3IuYm90dG9tTWFyZ2luQWRqKTt2YXIgcD1oLnN0b3B4LWguc3RhcnR4KzIqc3IuZGlhZ3JhbU1hcmdpblg7byYmbi5hcHBlbmQoInRleHQiKS50ZXh0KG8pLmF0dHIoIngiLChoLnN0b3B4LWguc3RhcnR4KS8yLTIqc3IuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLC0yNSksVyhuLGYscCxzci51c2VNYXhXaWR0aCk7dmFyIGc9bz80MDowO24uYXR0cigidmlld0JveCIsaC5zdGFydHgtc3IuZGlhZ3JhbU1hcmdpblgrIiAtIisoc3IuZGlhZ3JhbU1hcmdpblkrZykrIiAiK3ArIiAiKyhmK2cpKSxjLmRlYnVnKCJtb2RlbHM6Iixjci5tb2RlbHMpfX0sX3I9bigyNyksa3I9bi5uKF9yKTtmdW5jdGlvbiB3cih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19KHQpfHxmdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgRXIsVHIsQ3I9IiIsU3I9IiIsQXI9IiIsTXI9W10sT3I9IiIsRHI9W10sTnI9W10sQnI9IiIsTHI9WyJhY3RpdmUiLCJkb25lIiwiY3JpdCIsIm1pbGVzdG9uZSJdLFByPVtdLEZyPSExLElyPTAsanI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lmlzb1dlZWtkYXkoKT49NiYmbi5pbmRleE9mKCJ3ZWVrZW5kcyIpPj0wfHwobi5pbmRleE9mKHQuZm9ybWF0KCJkZGRkIikudG9Mb3dlckNhc2UoKSk+PTB8fG4uaW5kZXhPZih0LmZvcm1hdChlLnRyaW0oKSkpPj0wKX0sUnI9ZnVuY3Rpb24odCxlLG4pe2lmKG4ubGVuZ3RoJiYhdC5tYW51YWxFbmRUaW1lKXt2YXIgcj1vKCkodC5zdGFydFRpbWUsZSwhMCk7ci5hZGQoMSwiZCIpO3ZhciBpPW8oKSh0LmVuZFRpbWUsZSwhMCksYT1ZcihyLGksZSxuKTt0LmVuZFRpbWU9aS50b0RhdGUoKSx0LnJlbmRlckVuZFRpbWU9YX19LFlyPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT0hMSxhPW51bGw7dDw9ZTspaXx8KGE9ZS50b0RhdGUoKSksKGk9anIodCxuLHIpKSYmZS5hZGQoMSwiZCIpLHQuYWRkKDEsImQiKTtyZXR1cm4gYX0senI9ZnVuY3Rpb24odCxlLG4pe249bi50cmltKCk7dmFyIHI9L15hZnRlclxzKyhbXGRcdy0gXSspLy5leGVjKG4udHJpbSgpKTtpZihudWxsIT09cil7dmFyIGk9bnVsbDtpZihyWzFdLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9cXIodCk7dm9pZCAwIT09ZSYmKGk/ZS5lbmRUaW1lPmkuZW5kVGltZSYmKGk9ZSk6aT1lKX0pKSxpKXJldHVybiBpLmVuZFRpbWU7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGEuc2V0SG91cnMoMCwwLDAsMCksYX12YXIgcz1vKCkobixlLnRyaW0oKSwhMCk7cmV0dXJuIHMuaXNWYWxpZCgpP3MudG9EYXRlKCk6KGMuZGVidWcoIkludmFsaWQgZGF0ZToiK24pLGMuZGVidWcoIldpdGggZGF0ZSBmb3JtYXQ6IitlLnRyaW0oKSksbmV3IERhdGUpfSxVcj1mdW5jdGlvbih0LGUpe2lmKG51bGwhPT10KXN3aXRjaCh0WzJdKXtjYXNlInMiOmUuYWRkKHRbMV0sInNlY29uZHMiKTticmVhaztjYXNlIm0iOmUuYWRkKHRbMV0sIm1pbnV0ZXMiKTticmVhaztjYXNlImgiOmUuYWRkKHRbMV0sImhvdXJzIik7YnJlYWs7Y2FzZSJkIjplLmFkZCh0WzFdLCJkYXlzIik7YnJlYWs7Y2FzZSJ3IjplLmFkZCh0WzFdLCJ3ZWVrcyIpfXJldHVybiBlLnRvRGF0ZSgpfSwkcj1mdW5jdGlvbih0LGUsbixyKXtyPXJ8fCExLG49bi50cmltKCk7dmFyIGk9bygpKG4sZS50cmltKCksITApO3JldHVybiBpLmlzVmFsaWQoKT8ociYmaS5hZGQoMSwiZCIpLGkudG9EYXRlKCkpOlVyKC9eKFtcZF0rKShbd2RobXNdKS8uZXhlYyhuLnRyaW0oKSksbygpKHQpKX0sV3I9MCxWcj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD8idGFzayIrKFdyKz0xKTp0fSxIcj1bXSxHcj17fSxxcj1mdW5jdGlvbih0KXt2YXIgZT1Hclt0XTtyZXR1cm4gSHJbZV19LFhyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciBlPUhyW3RdLG49IiI7c3dpdGNoKEhyW3RdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6dmFyIHI9cXIoZS5wcmV2VGFza0lkKTtlLnN0YXJ0VGltZT1yLmVuZFRpbWU7YnJlYWs7Y2FzZSJnZXRTdGFydERhdGUiOihuPXpyKDAsQ3IsSHJbdF0ucmF3LnN0YXJ0VGltZS5zdGFydERhdGEpKSYmKEhyW3RdLnN0YXJ0VGltZT1uKX1yZXR1cm4gSHJbdF0uc3RhcnRUaW1lJiYoSHJbdF0uZW5kVGltZT0kcihIclt0XS5zdGFydFRpbWUsQ3IsSHJbdF0ucmF3LmVuZFRpbWUuZGF0YSxGciksSHJbdF0uZW5kVGltZSYmKEhyW3RdLnByb2Nlc3NlZD0hMCxIclt0XS5tYW51YWxFbmRUaW1lPW8oKShIclt0XS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFJyKEhyW3RdLENyLE1yKSkpLEhyW3RdLnByb2Nlc3NlZH0sZT0hMCxuPTA7bjxIci5sZW5ndGg7bisrKXQobiksZT1lJiZIcltuXS5wcm9jZXNzZWQ7cmV0dXJuIGV9LFpyPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXFyKHQpO3ZvaWQgMCE9PW4mJm4uY2xhc3Nlcy5wdXNoKGUpfSkpfSxKcj1mdW5jdGlvbih0LGUpe1ByLnB1c2goKGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdCh0LCciXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpLFByLnB1c2goKGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdCh0LCctdGV4dCJdJykpO251bGwhPT1uJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtlKCl9KSl9KSl9LFFyPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7SG8ucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBfdCgpLmdhbnR0fSxjbGVhcjpmdW5jdGlvbigpe0RyPVtdLE5yPVtdLEJyPSIiLFByPVtdLE9yPSIiLFdyPTAsRXI9dm9pZCAwLFRyPXZvaWQgMCxIcj1bXSxDcj0iIixTcj0iIixBcj0iIixNcj1bXSxGcj0hMSxJcj0wfSxzZXREYXRlRm9ybWF0OmZ1bmN0aW9uKHQpe0NyPXR9LGdldERhdGVGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ3J9LGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOmZ1bmN0aW9uKCl7RnI9ITB9LGVuZERhdGVzQXJlSW5jbHVzaXZlOmZ1bmN0aW9uKCl7cmV0dXJuIEZyfSxzZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKHQpe1NyPXR9LGdldEF4aXNGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gU3J9LHNldFRvZGF5TWFya2VyOmZ1bmN0aW9uKHQpe0FyPXR9LGdldFRvZGF5TWFya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtPcj10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBPcn0sYWRkU2VjdGlvbjpmdW5jdGlvbih0KXtCcj10LERyLnB1c2godCl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIERyfSxnZXRUYXNrczpmdW5jdGlvbigpe2Zvcih2YXIgdD1YcigpLGU9MDshdCYmZTwxMDspdD1YcigpLGUrKztyZXR1cm4gTnI9SHJ9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpCcix0eXBlOkJyLHByb2Nlc3NlZDohMSxtYW51YWxFbmRUaW1lOiExLHJlbmRlckVuZFRpbWU6bnVsbCxyYXc6e2RhdGE6ZX0sdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307S3IobixyLExyKTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV0udHJpbSgpO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9VnIoKSxyLnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOnR9LHIuZW5kVGltZT17ZGF0YTpuWzBdfTticmVhaztjYXNlIDI6ci5pZD1WcigpLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzBdfSxyLmVuZFRpbWU9e2RhdGE6blsxXX07YnJlYWs7Y2FzZSAzOnIuaWQ9VnIoblswXSksci5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMV19LHIuZW5kVGltZT17ZGF0YTpuWzJdfX1yZXR1cm4gcn0oVHIsZSk7bi5yYXcuc3RhcnRUaW1lPXIuc3RhcnRUaW1lLG4ucmF3LmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLnByZXZUYXNrSWQ9VHIsbi5hY3RpdmU9ci5hY3RpdmUsbi5kb25lPXIuZG9uZSxuLmNyaXQ9ci5jcml0LG4ubWlsZXN0b25lPXIubWlsZXN0b25lLG4ub3JkZXI9SXIsSXIrKzt2YXIgaT1Ici5wdXNoKG4pO1RyPW4uaWQsR3Jbbi5pZF09aS0xfSxmaW5kVGFza0J5SWQ6cXIsYWRkVGFza09yZzpmdW5jdGlvbih0LGUpe3ZhciBuPXtzZWN0aW9uOkJyLHR5cGU6QnIsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX0scj1mdW5jdGlvbih0LGUpe3ZhciBuPSgiOiI9PT1lLnN1YnN0cigwLDEpP2Uuc3Vic3RyKDEsZS5sZW5ndGgpOmUpLnNwbGl0KCIsIikscj17fTtLcihuLHIsTHIpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXS50cmltKCk7dmFyIGE9IiI7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6ci5pZD1WcigpLHIuc3RhcnRUaW1lPXQuZW5kVGltZSxhPW5bMF07YnJlYWs7Y2FzZSAyOnIuaWQ9VnIoKSxyLnN0YXJ0VGltZT16cigwLENyLG5bMF0pLGE9blsxXTticmVhaztjYXNlIDM6ci5pZD1WcihuWzBdKSxyLnN0YXJ0VGltZT16cigwLENyLG5bMV0pLGE9blsyXX1yZXR1cm4gYSYmKHIuZW5kVGltZT0kcihyLnN0YXJ0VGltZSxDcixhLEZyKSxyLm1hbnVhbEVuZFRpbWU9bygpKGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksUnIocixDcixNcikpLHJ9KEVyLGUpO24uc3RhcnRUaW1lPXIuc3RhcnRUaW1lLG4uZW5kVGltZT1yLmVuZFRpbWUsbi5pZD1yLmlkLG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxFcj1uLE5yLnB1c2gobil9LHNldEV4Y2x1ZGVzOmZ1bmN0aW9uKHQpe01yPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzLF0rLyl9LGdldEV4Y2x1ZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIE1yfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXtpZigibG9vc2UiPT09X3QoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgcj1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe3I9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXS50cmltKCk7JyInPT09YS5jaGFyQXQoMCkmJiciJz09PWEuY2hhckF0KGEubGVuZ3RoLTEpJiYoYT1hLnN1YnN0cigxLGEubGVuZ3RoLTIpKSxyW2ldPWF9fTA9PT1yLmxlbmd0aCYmci5wdXNoKHQpLHZvaWQgMCE9PXFyKHQpJiZKcih0LChmdW5jdGlvbigpe1YucnVuRnVuYy5hcHBseShWLFtlXS5jb25jYXQod3IocikpKX0pKX19KHQsZSxuKX0pKSxacih0LCJjbGlja2FibGUiKX0sc2V0TGluazpmdW5jdGlvbih0LGUpe3ZhciBuPWU7Imxvb3NlIiE9PV90KCkuc2VjdXJpdHlMZXZlbCYmKG49T2JqZWN0KGcuc2FuaXRpemVVcmwpKGUpKSx0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09cXIodCkmJkpyKHQsKGZ1bmN0aW9uKCl7d2luZG93Lm9wZW4obiwiX3NlbGYiKX0pKX0pKSxacih0LCJjbGlja2FibGUiKX0sYmluZEZ1bmN0aW9uczpmdW5jdGlvbih0KXtQci5mb3JFYWNoKChmdW5jdGlvbihlKXtlKHQpfSkpfSxkdXJhdGlvblRvRGF0ZTpVcn07ZnVuY3Rpb24gS3IodCxlLG4pe2Zvcih2YXIgcj0hMDtyOylyPSExLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bmV3IFJlZ0V4cCgiXlxccyoiK24rIlxccyokIik7dFswXS5tYXRjaChpKSYmKGVbbl09ITAsdC5zaGlmdCgxKSxyPSEwKX0pKX1fci5wYXJzZXIueXk9UXI7dmFyIHRpLGVpPXt0aXRsZVRvcE1hcmdpbjoyNSxiYXJIZWlnaHQ6MjAsYmFyR2FwOjQsdG9wUGFkZGluZzo1MCxyaWdodFBhZGRpbmc6NzUsbGVmdFBhZGRpbmc6NzUsZ3JpZExpbmVTdGFydFBhZGRpbmc6MzUsZm9udFNpemU6MTEsZm9udEZhbWlseTonIk9wZW4tU2FucyIsICJzYW5zLXNlcmlmIid9LG5pPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2VpW2VdPXRbZV19KSl9LHJpPWZ1bmN0aW9uKHQsZSl7X3IucGFyc2VyLnl5LmNsZWFyKCksX3IucGFyc2VyLnBhcnNlKHQpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PSh0aT1uLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYodGk9MTIwMCksdm9pZCAwIT09ZWkudXNlV2lkdGgmJih0aT1laS51c2VXaWR0aCk7dmFyIHI9X3IucGFyc2VyLnl5LmdldFRhc2tzKCksaT1yLmxlbmd0aCooZWkuYmFySGVpZ2h0K2VpLmJhckdhcCkrMiplaS50b3BQYWRkaW5nO24uc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrdGkrIiAiK2kpO2Zvcih2YXIgYT1PYmplY3QoZC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLG89T2JqZWN0KGQuc2NhbGVUaW1lKSgpLmRvbWFpbihbT2JqZWN0KGQubWluKShyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGFydFRpbWV9KSksT2JqZWN0KGQubWF4KShyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5lbmRUaW1lfSkpXSkucmFuZ2VSb3VuZChbMCx0aS1laS5sZWZ0UGFkZGluZy1laS5yaWdodFBhZGRpbmddKSxzPVtdLGM9MDtjPHIubGVuZ3RoO2MrKylzLnB1c2gocltjXS50eXBlKTt2YXIgdT1zO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcillLmhhc093blByb3BlcnR5KHRbcl0pfHwoZVt0W3JdXT0hMCxuLnB1c2godFtyXSkpO3JldHVybiBufShzKSxyLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zdGFydFRpbWUscj1lLnN0YXJ0VGltZSxpPTA7cmV0dXJuIG4+cj9pPTE6bjxyJiYoaT0tMSksaX0pKSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ZWkuYmFySGVpZ2h0LGk9citlaS5iYXJHYXAsYz1laS50b3BQYWRkaW5nLGg9ZWkubGVmdFBhZGRpbmc7T2JqZWN0KGQuc2NhbGVMaW5lYXIpKCkuZG9tYWluKFswLHMubGVuZ3RoXSkucmFuZ2UoWyIjMDBCOUZBIiwiI0Y5NTAwMiJdKS5pbnRlcnBvbGF0ZShkLmludGVycG9sYXRlSGNsKTsoZnVuY3Rpb24odCxlLG4scil7dmFyIGk9T2JqZWN0KGQuYXhpc0JvdHRvbSkobykudGlja1NpemUoLXIrZStlaS5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChPYmplY3QoZC50aW1lRm9ybWF0KShfci5wYXJzZXIueXkuZ2V0QXhpc0Zvcm1hdCgpfHxlaS5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7YS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKHItNTApKyIpIikuY2FsbChpKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpfSkoaCxjLDAsbiksZnVuY3Rpb24odCxlLG4scixpLGMsdSl7YS5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHQpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQub3JkZXIqZStuLTJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbigpe3JldHVybiB1LWVpLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1zW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2UlZWkubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvbiBzZWN0aW9uMCJ9KSk7dmFyIGw9YS5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHQpLmVudGVyKCk7bC5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMykuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9vKHQuc3RhcnRUaW1lKStyKy41KihvKHQuZW5kVGltZSktbyh0LnN0YXJ0VGltZSkpLS41Kmk6byh0LnN0YXJ0VGltZSkrcn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5vcmRlciplK259KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5taWxlc3RvbmU/aTpvKHQucmVuZGVyRW5kVGltZXx8dC5lbmRUaW1lKS1vKHQuc3RhcnRUaW1lKX0pKS5hdHRyKCJoZWlnaHQiLGkpLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLChmdW5jdGlvbih0LGEpe3JldHVybihvKHQuc3RhcnRUaW1lKStyKy41KihvKHQuZW5kVGltZSktbyh0LnN0YXJ0VGltZSkpKS50b1N0cmluZygpKyJweCAiKyhhKmUrbisuNSppKS50b1N0cmluZygpKyJweCJ9KSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXt2YXIgZT0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihlPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgbj0wLHI9MDtyPHMubGVuZ3RoO3IrKyl0LnR5cGU9PT1zW3JdJiYobj1yJWVpLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBpPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/aSs9IiBhY3RpdmVDcml0IjppPSIgYWN0aXZlIjp0LmRvbmU/aT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihpKz0iIGNyaXQiKSwwPT09aS5sZW5ndGgmJihpPSIgdGFzayIpLHQubWlsZXN0b25lJiYoaT0iIG1pbGVzdG9uZSAiK2kpLGkrPW4sInRhc2siKyhpKz0iICIrZSl9KSksbC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLGVpLmZvbnRTaXplKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7dmFyIGU9byh0LnN0YXJ0VGltZSksbj1vKHQucmVuZGVyRW5kVGltZXx8dC5lbmRUaW1lKTt0Lm1pbGVzdG9uZSYmKGUrPS41KihvKHQuZW5kVGltZSktbyh0LnN0YXJ0VGltZSkpLS41KmkpLHQubWlsZXN0b25lJiYobj1lK2kpO3ZhciBhPXRoaXMuZ2V0QkJveCgpLndpZHRoO3JldHVybiBhPm4tZT9uK2ErMS41KmVpLmxlZnRQYWRkaW5nPnU/ZStyLTU6bityKzU6KG4tZSkvMitlK3J9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQub3JkZXIqZStlaS5iYXJIZWlnaHQvMisoZWkuZm9udFNpemUvMi0yKStufSkpLmF0dHIoInRleHQtaGVpZ2h0IixpKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3ZhciBlPW8odC5zdGFydFRpbWUpLG49byh0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYobj1lK2kpO3ZhciByPXRoaXMuZ2V0QkJveCgpLndpZHRoLGE9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoYT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIGM9MCxsPTA7bDxzLmxlbmd0aDtsKyspdC50eXBlPT09c1tsXSYmKGM9bCVlaS5udW1iZXJTZWN0aW9uU3R5bGVzKTt2YXIgaD0iIjtyZXR1cm4gdC5hY3RpdmUmJihoPXQuY3JpdD8iYWN0aXZlQ3JpdFRleHQiK2M6ImFjdGl2ZVRleHQiK2MpLHQuZG9uZT9oPXQuY3JpdD9oKyIgZG9uZUNyaXRUZXh0IitjOmgrIiBkb25lVGV4dCIrYzp0LmNyaXQmJihoPWgrIiBjcml0VGV4dCIrYyksdC5taWxlc3RvbmUmJihoKz0iIG1pbGVzdG9uZVRleHQiKSxyPm4tZT9uK3IrMS41KmVpLmxlZnRQYWRkaW5nPnU/YSsiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIitjKyIgIitoOmErIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK2MrIiAiK2grIiB3aWR0aC0iK3I6YSsiIHRhc2tUZXh0IHRhc2tUZXh0IitjKyIgIitoKyIgd2lkdGgtIityfSkpfSh0LGksYyxoLHIsMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxyPTAsaT0wO2k8cy5sZW5ndGg7aSsrKW5baV09W3NbaV0sKG89c1tpXSxjPXUsbChjKVtvXXx8MCldO3ZhciBvLGM7YS5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKG4pLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KHgubGluZUJyZWFrUmVnZXgpLG49LShlLmxlbmd0aC0xKS8yLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtyLnNldEF0dHJpYnV0ZSgiZHkiLG4rImVtIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2Euc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksYS5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLGk+MCYmYS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYS50ZXh0Q29udGVudD1lW2ldLHIuYXBwZW5kQ2hpbGQoYSl9cmV0dXJuIHJ9KSkuYXR0cigieCIsMTApLmF0dHIoInkiLChmdW5jdGlvbihpLGEpe2lmKCEoYT4wKSlyZXR1cm4gaVsxXSp0LzIrZTtmb3IodmFyIG89MDtvPGE7bysrKXJldHVybiByKz1uW2EtMV1bMV0saVsxXSp0LzIrcip0K2V9KSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoO2UrKylpZih0WzBdPT09c1tlXSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrZSVlaS5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSkpfShpLGMpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVFyLmdldFRvZGF5TWFya2VyKCk7aWYoIm9mZiI9PT1pKXJldHVybjt2YXIgcz1hLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSxjPW5ldyBEYXRlLHU9cy5hcHBlbmQoImxpbmUiKTt1LmF0dHIoIngxIixvKGMpK3QpLmF0dHIoIngyIixvKGMpK3QpLmF0dHIoInkxIixlaS50aXRsZVRvcE1hcmdpbikuYXR0cigieTIiLHItZWkudGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidG9kYXkiKSwiIiE9PWkmJnUuYXR0cigic3R5bGUiLGkucmVwbGFjZSgvLC9nLCI7IikpfShoLDAsMCxuKX0ocix0aSxpKSxXKGEsaSx0aSxlaS51c2VNYXhXaWR0aCksYS5hcHBlbmQoInRleHQiKS50ZXh0KF9yLnBhcnNlci55eS5nZXRUaXRsZSgpKS5hdHRyKCJ4Iix0aS8yKS5hdHRyKCJ5IixlaS50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKX0saWk9bigxMyksYWk9bi5uKGlpKTtpaS5wYXJzZXIueXk9c247dmFyIG9pPXt9LHNpPXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwfSxjaT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXMob2kpLG49MDtuPGUubGVuZ3RoO24rKylpZihvaVtlW25dXS5sYWJlbD09PXQpcmV0dXJuIGVbbl19LHVpPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3NpW2VdPXRbZV19KSl9LGxpPWZ1bmN0aW9uKHQsZSl7b2k9e30saWkucGFyc2VyLnl5LmNsZWFyKCksaWkucGFyc2VyLnBhcnNlKHQpLGMuaW5mbygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTt2YXIgbixyPU9iamVjdChkLnNlbGVjdCkoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7ci5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSwobj1yKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpO3ZhciBpPW5ldyBHLmEuR3JhcGgoe211bHRpZ3JhcGg6ITB9KTtpLnNldEdyYXBoKHtpc011bHRpR3JhcGg6ITB9KSxpLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7Zm9yKHZhciBhPXNuLmdldENsYXNzZXMoKSxvPU9iamVjdC5rZXlzKGEpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIHU9YVtvW3NdXSxsPXluKHIsdSxzaSk7b2lbbC5pZF09bCxpLnNldE5vZGUobC5pZCxsKSxjLmluZm8oIk9yZyBoZWlnaHQ6ICIrbC5oZWlnaHQpfXNuLmdldFJlbGF0aW9ucygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MuaW5mbygidGpvaG8iK2NpKHQuaWQxKStjaSh0LmlkMikrSlNPTi5zdHJpbmdpZnkodCkpLGkuc2V0RWRnZShjaSh0LmlkMSksY2kodC5pZDIpLHtyZWxhdGlvbjp0fSx0LnRpdGxlfHwiREVGQVVMVCIpfSkpLGtlLmEubGF5b3V0KGkpLGkubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1pLm5vZGUodCkmJihjLmRlYnVnKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KGkubm9kZSh0KSkpLE9iamVjdChkLnNlbGVjdCkoIiMiK3RuKHQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS5ub2RlKHQpLngtaS5ub2RlKHQpLndpZHRoLzIpKyIsIisoaS5ub2RlKHQpLnktaS5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSl9KSksaS5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkuZWRnZSh0KSYmKGMuZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh0KSkpLHZuKHIsaS5lZGdlKHQpLGkuZWRnZSh0KS5yZWxhdGlvbixzaSkpfSkpO3ZhciBoPXIubm9kZSgpLmdldEJCb3goKSxmPWgud2lkdGgrNDAscD1oLmhlaWdodCs0MDtXKHIscCxmLHNpLnVzZU1heFdpZHRoKTt2YXIgZz0iIi5jb25jYXQoaC54LTIwLCIgIikuY29uY2F0KGgueS0yMCwiICIpLmNvbmNhdChmLCIgIikuY29uY2F0KHApO2MuZGVidWcoInZpZXdCb3ggIi5jb25jYXQoZykpLHIuYXR0cigidmlld0JveCIsZyl9O2lpLnBhcnNlci55eT1zbjt2YXIgaGk9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LGZpPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2hpW2VdPXRbZV19KSl9LGRpPWZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJEcmF3aW5nIGNsYXNzIiksc24uY2xlYXIoKSxpaS5wYXJzZXIucGFyc2UodCk7dmFyIG49X3QoKS5mbG93Y2hhcnQ7Yy5pbmZvKCJjb25maWc6IixuKTt2YXIgcj1uLm5vZGVTcGFjaW5nfHw1MCxpPW4ucmFua1NwYWNpbmd8fDUwLGE9bmV3IEcuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOiJURCIsbm9kZXNlcDpyLHJhbmtzZXA6aSxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxvPXNuLmdldENsYXNzZXMoKSxzPXNuLmdldFJlbGF0aW9ucygpO2MuaW5mbyhzKSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2MuaW5mbygia2V5czoiLG4pLGMuaW5mbyh0KSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl0saT0iIjtyLmNzc0NsYXNzZXMubGVuZ3RoPjAmJihpPWkrIiAiK3IuY3NzQ2xhc3Nlcy5qb2luKCIgIikpO3ZhciBhPXtsYWJlbFN0eWxlOiIifSxvPXZvaWQgMCE9PXIudGV4dD9yLnRleHQ6ci5pZCxzPSIiO3N3aXRjaChyLnR5cGUpe2Nhc2UiY2xhc3MiOnM9ImNsYXNzX2JveCI7YnJlYWs7ZGVmYXVsdDpzPSJjbGFzc19ib3gifWUuc2V0Tm9kZShyLmlkLHtsYWJlbFN0eWxlOmEubGFiZWxTdHlsZSxzaGFwZTpzLGxhYmVsVGV4dDpvLGNsYXNzRGF0YTpyLHJ4OjAscnk6MCxjbGFzczppLHN0eWxlOmEuc3R5bGUsaWQ6ci5pZCxkb21JZDpyLmRvbUlkLGhhdmVDYWxsYmFjazpyLmhhdmVDYWxsYmFjayxsaW5rOnIubGluayx3aWR0aDoiZ3JvdXAiPT09ci50eXBlPzUwMDp2b2lkIDAsdHlwZTpyLnR5cGUscGFkZGluZzpfdCgpLmZsb3djaGFydC5wYWRkaW5nfSksYy5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTphLmxhYmVsU3R5bGUsc2hhcGU6cyxsYWJlbFRleHQ6byxyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTphLnN0eWxlLGlkOnIuaWQsd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6X3QoKS5mbG93Y2hhcnQucGFkZGluZ30pfSkpfShvLGEpLGZ1bmN0aW9uKHQsZSl7dmFyIG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHIpe24rKzt2YXIgaT17Y2xhc3NlczoicmVsYXRpb24ifTtpLnBhdHRlcm49MT09ci5yZWxhdGlvbi5saW5lVHlwZT8iZGFzaGVkIjoic29saWQiLGkuaWQ9ImlkIituLCJhcnJvd19vcGVuIj09PXIudHlwZT9pLmFycm93aGVhZD0ibm9uZSI6aS5hcnJvd2hlYWQ9Im5vcm1hbCIsYy5pbmZvKGksciksaS5zdGFydExhYmVsUmlnaHQ9Im5vbmUiPT09ci5yZWxhdGlvblRpdGxlMT8iIjpyLnJlbGF0aW9uVGl0bGUxLGkuZW5kTGFiZWxMZWZ0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTI/IiI6ci5yZWxhdGlvblRpdGxlMixpLmFycm93VHlwZVN0YXJ0PXBpKHIucmVsYXRpb24udHlwZTEpLGkuYXJyb3dUeXBlRW5kPXBpKHIucmVsYXRpb24udHlwZTIpO3ZhciBhPSIiLG89IiI7aWYodm9pZCAwIT09ci5zdHlsZSl7dmFyIHM9QihyLnN0eWxlKTthPXMuc3R5bGUsbz1zLmxhYmVsU3R5bGV9ZWxzZSBhPSJmaWxsOm5vbmUiO2kuc3R5bGU9YSxpLmxhYmVsU3R5bGU9byx2b2lkIDAhPT1yLmludGVycG9sYXRlP2kuY3VydmU9RChyLmludGVycG9sYXRlLGQuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2kuY3VydmU9RCh0LmRlZmF1bHRJbnRlcnBvbGF0ZSxkLmN1cnZlTGluZWFyKTppLmN1cnZlPUQoaGkuY3VydmUsZC5jdXJ2ZUxpbmVhciksci50ZXh0PXIudGl0bGUsdm9pZCAwPT09ci50ZXh0P3ZvaWQgMCE9PXIuc3R5bGUmJihpLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KGkuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLGkubGFiZWxwb3M9ImMiLF90KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMsaS5sYWJlbFR5cGU9InRleHQiLGkubGFiZWw9ci50ZXh0LnJlcGxhY2UoeC5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1yLnN0eWxlJiYoaS5zdHlsZT1pLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLGkubGFiZWxTdHlsZT1pLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSksZS5zZXRFZGdlKHIuaWQxLHIuaWQyLGksbil9KSl9KHMsYSk7dmFyIHU9T2JqZWN0KGQuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTt1LmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpO3ZhciBsPU9iamVjdChkLnNlbGVjdCkoIiMiK2UrIiBnIik7TW4obCxhLFsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiXSwiY2xhc3NEaWFncmFtIixlKTt2YXIgaD11Lm5vZGUoKS5nZXRCQm94KCksZj1oLndpZHRoKzE2LHA9aC5oZWlnaHQrMTY7aWYoYy5kZWJ1ZygibmV3IFZpZXdCb3ggMCAwICIuY29uY2F0KGYsIiAiKS5jb25jYXQocCksInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtYS5fbGFiZWwubWFyZ2lueSwiKSIpKSxXKHUscCxmLG4udXNlTWF4V2lkdGgpLHUuYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChmLCIgIikuY29uY2F0KHApKSx1LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtaC55LCIpIikpLCFuLmh0bWxMYWJlbHMpZm9yKHZhciBnPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHY9Z1t5XSxtPXYuZ2V0QkJveCgpLGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtiLnNldEF0dHJpYnV0ZSgicngiLDApLGIuc2V0QXR0cmlidXRlKCJyeSIsMCksYi5zZXRBdHRyaWJ1dGUoIndpZHRoIixtLndpZHRoKSxiLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixtLmhlaWdodCksYi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmlsbDojZThlOGU4OyIpLHYuaW5zZXJ0QmVmb3JlKGIsdi5maXJzdENoaWxkKX19O2Z1bmN0aW9uIHBpKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlIDA6ZT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTplPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjplPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmU9ImRlcGVuZGVuY3kiO2JyZWFrO2RlZmF1bHQ6ZT0ibm9uZSJ9cmV0dXJuIGV9ZnVuY3Rpb24gZ2kodCl7cmV0dXJuKGdpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIHlpLHZpPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sbWk9W10sYmk9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0seGk9Ymkucm9vdCxfaT0wLGtpPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dm9pZCAwPT09eGkuc3RhdGVzW3RdP3hpLnN0YXRlc1t0XT17aWQ6dCxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpuLG5vdGU6aX06KHhpLnN0YXRlc1t0XS5kb2N8fCh4aS5zdGF0ZXNbdF0uZG9jPW4pLHhpLnN0YXRlc1t0XS50eXBlfHwoeGkuc3RhdGVzW3RdLnR5cGU9ZSkpLHImJihjLmluZm8oIkFkZGluZyBzdGF0ZSAiLHQsciksInN0cmluZyI9PXR5cGVvZiByJiZUaSh0LHIudHJpbSgpKSwib2JqZWN0Ij09PWdpKHIpJiZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBUaSh0LGUudHJpbSgpKX0pKSksaSYmKHhpLnN0YXRlc1t0XS5ub3RlPWkpfSx3aT1mdW5jdGlvbigpe3hpPShiaT17cm9vdDp7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319fSkucm9vdCx4aT1iaS5yb290LF9pPTAsMCxTaT1bXX0sRWk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQsaT1lLGE9ImRlZmF1bHQiLG89ImRlZmF1bHQiOyJbKl0iPT09dCYmKHI9InN0YXJ0IisgKytfaSxhPSJzdGFydCIpLCJbKl0iPT09ZSYmKGk9ImVuZCIrX2ksbz0iZW5kIiksa2kocixhKSxraShpLG8pLHhpLnJlbGF0aW9ucy5wdXNoKHtpZDE6cixpZDI6aSx0aXRsZTpufSl9LFRpPWZ1bmN0aW9uKHQsZSl7dmFyIG49eGkuc3RhdGVzW3RdLHI9ZTsiOiI9PT1yWzBdJiYocj1yLnN1YnN0cigxKS50cmltKCkpLG4uZGVzY3JpcHRpb25zLnB1c2gocil9LENpPTAsU2k9W10sQWk9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXtIby5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkuc3RhdGV9LGFkZFN0YXRlOmtpLGNsZWFyOndpLGdldFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB4aS5zdGF0ZXNbdF19LGdldFN0YXRlczpmdW5jdGlvbigpe3JldHVybiB4aS5zdGF0ZXN9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiB4aS5yZWxhdGlvbnN9LGdldENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gU2l9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiJUQiJ9LGFkZFJlbGF0aW9uOkVpLGdldERpdmlkZXJJZDpmdW5jdGlvbigpe3JldHVybiJkaXZpZGVyLWlkLSIrICsrQ2l9LGNsZWFudXBMYWJlbDpmdW5jdGlvbih0KXtyZXR1cm4iOiI9PT10LnN1YnN0cmluZygwLDEpP3Quc3Vic3RyKDIpLnRyaW0oKTp0LnRyaW0oKX0sbGluZVR5cGU6e0xJTkU6MCxET1RURURfTElORToxfSxyZWxhdGlvblR5cGU6e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjN9LGxvZ0RvY3VtZW50czpmdW5jdGlvbigpe2MuaW5mbygiRG9jdW1lbnRzID0gIixiaSl9LGdldFJvb3REb2M6ZnVuY3Rpb24oKXtyZXR1cm4gbWl9LHNldFJvb3REb2M6ZnVuY3Rpb24odCl7Yy5pbmZvKCJTZXR0aW5nIHJvb3QgZG9jIix0KSxtaT10fSxnZXRSb290RG9jVjI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLG4scil7aWYoInJlbGF0aW9uIj09PW4uc3RtdCl0KGUsbi5zdGF0ZTEsITApLHQoZSxuLnN0YXRlMiwhMSk7ZWxzZSBpZigic3RhdGUiPT09bi5zdG10JiYiWypdIj09PW4uaWQmJihuLmlkPXI/ZS5pZCsiX3N0YXJ0IjplLmlkKyJfZW5kIixuLnN0YXJ0PXIpLG4uZG9jKXt2YXIgaT1bXSxhPTAsbz1bXTtmb3IoYT0wO2E8bi5kb2MubGVuZ3RoO2ErKylpZigiZGl2aWRlciI9PT1uLmRvY1thXS50eXBlKXt2YXIgcz12aShuLmRvY1thXSk7cy5kb2M9dmkobyksaS5wdXNoKHMpLG89W119ZWxzZSBvLnB1c2gobi5kb2NbYV0pO2lmKGkubGVuZ3RoPjAmJm8ubGVuZ3RoPjApe3ZhciBjPXtzdG10OiJzdGF0ZSIsaWQ6UCgpLHR5cGU6ImRpdmlkZXIiLGRvYzp2aShvKX07aS5wdXNoKHZpKGMpKSxuLmRvYz1pfW4uZG9jLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSwhMCl9KSl9fSh7aWQ6InJvb3QifSx7aWQ6InJvb3QiLGRvYzptaX0sITApLHtpZDoicm9vdCIsZG9jOm1pfX0sZXh0cmFjdDpmdW5jdGlvbih0KXt2YXIgZTtlPXQuZG9jP3QuZG9jOnQsYy5pbmZvKGUpLHdpKCksYy5pbmZvKCJFeHRyYWN0IixlKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpeyJzdGF0ZSI9PT10LnN0bXQmJmtpKHQuaWQsdC50eXBlLHQuZG9jLHQuZGVzY3JpcHRpb24sdC5ub3RlKSwicmVsYXRpb24iPT09dC5zdG10JiZFaSh0LnN0YXRlMS5pZCx0LnN0YXRlMi5pZCx0LmRlc2NyaXB0aW9uKX0pKX0sdHJpbUNvbG9uOmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiOiI9PT10WzBdP3Quc3Vic3RyKDEpLnRyaW0oKTp0LnRyaW0oKX19LE1pPW4oMjIpLE9pPW4ubihNaSksRGk9e30sTmk9ZnVuY3Rpb24odCxlKXtEaVt0XT1lfSxCaT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLF90KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLF90KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLF90KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCpfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK190KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoIWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwyKl90KCkuc3RhdGUucGFkZGluZykudGV4dChlKTtufHxyLmF0dHIoImR5IixfdCgpLnN0YXRlLnRleHRIZWlnaHQpfShpLHQsbyksbz0hMSksYT0hMX0pKTt2YXIgcz10LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixfdCgpLnN0YXRlLnBhZGRpbmcrcitfdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLF90KCkuc3RhdGUucGFkZGluZytyK190KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxjPWkubm9kZSgpLmdldEJCb3goKSx1PU1hdGgubWF4KGMud2lkdGgsbi53aWR0aCk7cmV0dXJuIHMuYXR0cigieDIiLHUrMypfdCgpLnN0YXRlLnBhZGRpbmcpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIix1KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGMuaGVpZ2h0K3IrMipfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixfdCgpLnN0YXRlLnJhZGl1cyksdH0sTGk9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9X3QoKS5zdGF0ZS5wYWRkaW5nLGE9MipfdCgpLnN0YXRlLnBhZGRpbmcsbz10Lm5vZGUoKS5nZXRCQm94KCkscz1vLndpZHRoLGM9by54LHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIsX3QoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksbD11Lm5vZGUoKS5nZXRCQm94KCkud2lkdGgrYSxoPU1hdGgubWF4KGwscyk7aD09PXMmJihoKz1hKTt2YXIgZj10Lm5vZGUoKS5nZXRCQm94KCk7ZS5kb2Mscj1jLWksbD5zJiYocj0ocy1oKS8yK2kpLE1hdGguYWJzKGMtZi54KTxpJiZsPnMmJihyPWMtKGwtcykvMik7dmFyIGQ9MS1fdCgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsZCkuYXR0cigiY2xhc3MiLG4/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0K190KCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSx1LmF0dHIoIngiLHIraSksbDw9cyYmdS5hdHRyKCJ4IixjKyhoLWEpLzItbC8yK2kpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsX3QoKS5zdGF0ZS50aXRsZVNoaWZ0LV90KCkuc3RhdGUudGV4dEhlaWdodC1fdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLDMqX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsX3QoKS5zdGF0ZS5yYWRpdXMpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsX3QoKS5zdGF0ZS50aXRsZVNoaWZ0LV90KCkuc3RhdGUudGV4dEhlaWdodC1fdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KzMrMipfdCgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixfdCgpLnN0YXRlLnJhZGl1cyksdH0sUGk9ZnVuY3Rpb24odCxlKXtlLmF0dHIoImNsYXNzIiwic3RhdGUtbm90ZSIpO3ZhciBuPWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsX3QoKS5zdGF0ZS5wYWRkaW5nKSxyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPTAsYT1yLmFwcGVuZCgidGV4dCIpO2Euc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxhLmF0dHIoImNsYXNzIiwibm90ZVRleHQiKTt2YXIgbz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxzPShvPW8ucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQoeC5saW5lQnJlYWtSZWdleCksYz0xLjI1Kl90KCkuc3RhdGUubm90ZU1hcmdpbix1PSEwLGw9ITEsaD12b2lkIDA7dHJ5e2Zvcih2YXIgZixkPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0oZj1kLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIHA9Zi52YWx1ZS50cmltKCk7aWYocC5sZW5ndGg+MCl7dmFyIGc9YS5hcHBlbmQoInRzcGFuIik7aWYoZy50ZXh0KHApLDA9PT1jKWMrPWcubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7aSs9YyxnLmF0dHIoIngiLGUrX3QoKS5zdGF0ZS5ub3RlTWFyZ2luKSxnLmF0dHIoInkiLG4raSsxLjI1Kl90KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXtsPSEwLGg9dH1maW5hbGx5e3RyeXt1fHxudWxsPT1kLnJldHVybnx8ZC5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgaH19cmV0dXJue3RleHRXaWR0aDphLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDppfX0odCwwLDAsZS5hcHBlbmQoImciKSksaT1yLnRleHRXaWR0aCxhPXIudGV4dEhlaWdodDtyZXR1cm4gbi5hdHRyKCJoZWlnaHQiLGErMipfdCgpLnN0YXRlLm5vdGVNYXJnaW4pLG4uYXR0cigid2lkdGgiLGkrMipfdCgpLnN0YXRlLm5vdGVNYXJnaW4pLG59LEZpPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5pZCxyPXtpZDpuLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0saT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixuKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTsic3RhcnQiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJzdGFydC1zdGF0ZSIpLmF0dHIoInIiLF90KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3kiLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0KX0oaSksImVuZCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1vdXRlciIpLmF0dHIoInIiLF90KCkuc3RhdGUuc2l6ZVVuaXQrX3QoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3giLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0K190KCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN5IixfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5zaXplVW5pdCtfdCgpLnN0YXRlLm1pbmlQYWRkaW5nKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtaW5uZXIiKS5hdHRyKCJyIixfdCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsX3QoKS5zdGF0ZS5wYWRkaW5nK190KCkuc3RhdGUuc2l6ZVVuaXQrMikuYXR0cigiY3kiLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0KzIpfShpKSwiZm9yayIhPT1lLnR5cGUmJiJqb2luIiE9PWUudHlwZXx8ZnVuY3Rpb24odCxlKXt2YXIgbj1fdCgpLnN0YXRlLmZvcmtXaWR0aCxyPV90KCkuc3RhdGUuZm9ya0hlaWdodDtpZihlLnBhcmVudElkKXt2YXIgaT1uO249cixyPWl9dC5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLG4pLmF0dHIoImhlaWdodCIscikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpfShpLGUpLCJub3RlIj09PWUudHlwZSYmUGkoZS5ub3RlLnRleHQsaSksImRpdmlkZXIiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLF90KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLDIqX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApfShpKSwiZGVmYXVsdCI9PT1lLnR5cGUmJjA9PT1lLmRlc2NyaXB0aW9ucy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKl90KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLF90KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLHI9bi5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixyLndpZHRoKzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsX3QoKS5zdGF0ZS5yYWRpdXMpfShpLGUpLCJkZWZhdWx0Ij09PWUudHlwZSYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJkJpKGksZSk7dmFyIGE9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPWEud2lkdGgrMipfdCgpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9YS5oZWlnaHQrMipfdCgpLnN0YXRlLnBhZGRpbmcsTmkobixyKSxyfSxJaT0wO01pLnBhcnNlci55eT1BaTt2YXIgamk9e30sUmk9ZnVuY3Rpb24gdChlLG4scixpKXt2YXIgYSxvPW5ldyBHLmEuR3JhcGgoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KSxzPSEwO2ZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoInJlbGF0aW9uIj09PWVbYV0uc3RtdCl7cz0hMTticmVha31yP28uc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpzPzE6eWkuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOnM/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpvLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOnM/MTp5aS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6cz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksby5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLEFpLmV4dHJhY3QoZSk7Zm9yKHZhciB1PUFpLmdldFN0YXRlcygpLGw9QWkuZ2V0UmVsYXRpb25zKCksaD1PYmplY3Qua2V5cyh1KSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBwPXVbaFtmXV07ciYmKHAucGFyZW50SWQ9cik7dmFyIGc9dm9pZCAwO2lmKHAuZG9jKXt2YXIgeT1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtnPXQocC5kb2MseSxwLmlkLCFpKTt2YXIgdj0oeT1MaSh5LHAsaSkpLm5vZGUoKS5nZXRCQm94KCk7Zy53aWR0aD12LndpZHRoLGcuaGVpZ2h0PXYuaGVpZ2h0K3lpLnBhZGRpbmcvMixqaVtwLmlkXT17eTp5aS5jb21wb3NpdFRpdGxlU2l6ZX19ZWxzZSBnPUZpKG4scCk7aWYocC5ub3RlKXt2YXIgbT17ZGVzY3JpcHRpb25zOltdLGlkOnAuaWQrIi1ub3RlIixub3RlOnAubm90ZSx0eXBlOiJub3RlIn0sYj1GaShuLG0pOyJsZWZ0IG9mIj09PXAubm90ZS5wb3NpdGlvbj8oby5zZXROb2RlKGcuaWQrIi1ub3RlIixiKSxvLnNldE5vZGUoZy5pZCxnKSk6KG8uc2V0Tm9kZShnLmlkLGcpLG8uc2V0Tm9kZShnLmlkKyItbm90ZSIsYikpLG8uc2V0UGFyZW50KGcuaWQsZy5pZCsiLWdyb3VwIiksby5zZXRQYXJlbnQoZy5pZCsiLW5vdGUiLGcuaWQrIi1ncm91cCIpfWVsc2Ugby5zZXROb2RlKGcuaWQsZyl9Yy5kZWJ1ZygiQ291bnQ9IixvLm5vZGVDb3VudCgpLG8pO3ZhciBfPTA7bC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZTtfKyssYy5kZWJ1ZygiU2V0dGluZyBlZGdlIix0KSxvLnNldEVkZ2UodC5pZDEsdC5pZDIse3JlbGF0aW9uOnQsd2lkdGg6KGU9dC50aXRsZSxlP2UubGVuZ3RoKnlpLmZvbnRTaXplRmFjdG9yOjEpLGhlaWdodDp5aS5sYWJlbEhlaWdodCp4LmdldFJvd3ModC50aXRsZSkubGVuZ3RoLGxhYmVscG9zOiJjIn0sImlkIitfKX0pKSxrZS5hLmxheW91dChvKSxjLmRlYnVnKCJHcmFwaCBhZnRlciBsYXlvdXQiLG8ubm9kZXMoKSk7dmFyIGs9bi5ub2RlKCk7by5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PW8ubm9kZSh0KT8oYy53YXJuKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KG8ubm9kZSh0KSkpLE9iamVjdChkLnNlbGVjdCkoIiMiK2suaWQrIiAjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoby5ub2RlKHQpLngtby5ub2RlKHQpLndpZHRoLzIpKyIsIisoby5ub2RlKHQpLnkrKGppW3RdP2ppW3RdLnk6MCktby5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSxPYmplY3QoZC5zZWxlY3QpKCIjIitrLmlkKyIgIyIrdCkuYXR0cigiZGF0YS14LXNoaWZ0IixvLm5vZGUodCkueC1vLm5vZGUodCkud2lkdGgvMiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIray5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6Yy5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShvLm5vZGUodCkpKX0pKTt2YXIgdz1rLmdldEJCb3goKTtvLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09by5lZGdlKHQpJiYoYy5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoby5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9T2JqZWN0KGQubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoZC5jdXJ2ZUJhc2lzKSxhPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaShyKSkuYXR0cigiaWQiLCJlZGdlIitJaSkuYXR0cigiY2xhc3MiLCJ0cmFuc2l0aW9uIiksbz0iIjtpZihfdCgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihvPShvPShvPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGEuYXR0cigibWFya2VyLWVuZCIsInVybCgiK28rIiMiK2Z1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIEFpLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgQWkucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpyZXR1cm4iZXh0ZW5zaW9uIjtjYXNlIEFpLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgQWkucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX0oQWkucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksdm9pZCAwIT09bi50aXRsZSl7Zm9yKHZhciBzPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIiksdT1WLmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxsPXUueCxoPXUueSxmPXguZ2V0Um93cyhuLnRpdGxlKSxwPTAsZz1bXSx5PTAsdj0wLG09MDttPD1mLmxlbmd0aDttKyspe3ZhciBiPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGZbbV0pLmF0dHIoIngiLGwpLmF0dHIoInkiLGgrcCksXz1iLm5vZGUoKS5nZXRCQm94KCk7aWYoeT1NYXRoLm1heCh5LF8ud2lkdGgpLHY9TWF0aC5taW4odixfLngpLGMuaW5mbyhfLngsbCxoK3ApLDA9PT1wKXt2YXIgaz1iLm5vZGUoKS5nZXRCQm94KCk7cD1rLmhlaWdodCxjLmluZm8oIlRpdGxlIGhlaWdodCIscCxoKX1nLnB1c2goYil9dmFyIHc9cCpmLmxlbmd0aDtpZihmLmxlbmd0aD4xKXt2YXIgRT0oZi5sZW5ndGgtMSkqcCouNTtnLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXR0cigieSIsaCtlKnAtRSl9KSksdz1wKmYubGVuZ3RofXZhciBUPXMubm9kZSgpLmdldEJCb3goKTtzLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsbC15LzItX3QoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLGgtdy8yLV90KCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLHkrX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHcrX3QoKS5zdGF0ZS5wYWRkaW5nKSxjLmluZm8oVCl9SWkrK30obixvLmVkZ2UodCksby5lZGdlKHQpLnJlbGF0aW9uKSl9KSksdz1rLmdldEJCb3goKTt2YXIgRT17aWQ6cnx8InJvb3QiLGxhYmVsOnJ8fCJyb290Iix3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gRS53aWR0aD13LndpZHRoKzIqeWkucGFkZGluZyxFLmhlaWdodD13LmhlaWdodCsyKnlpLnBhZGRpbmcsYy5kZWJ1ZygiRG9jIHJlbmRlcmVkIixFLG8pLEV9LFlpPWZ1bmN0aW9uKCl7fSx6aT1mdW5jdGlvbih0LGUpe3lpPV90KCkuc3RhdGUsTWkucGFyc2VyLnl5LmNsZWFyKCksTWkucGFyc2VyLnBhcnNlKHQpLGMuZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIG49T2JqZWN0KGQuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5RW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIiksbmV3IEcuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciByPUFpLmdldFJvb3REb2MoKTtSaShyLG4sdm9pZCAwLCExKTt2YXIgaT15aS5wYWRkaW5nLGE9bi5ub2RlKCkuZ2V0QkJveCgpLG89YS53aWR0aCsyKmkscz1hLmhlaWdodCsyKmk7VyhuLHMsMS43NSpvLHlpLnVzZU1heFdpZHRoKSxuLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChhLngteWkucGFkZGluZywiICAiKS5jb25jYXQoYS55LXlpLnBhZGRpbmcsIiAiKStvKyIgIitzKX0sVWk9e30sJGk9e30sV2k9ZnVuY3Rpb24odCxlLG4scil7aWYoInJvb3QiIT09bi5pZCl7dmFyIGk9InJlY3QiOyEwPT09bi5zdGFydCYmKGk9InN0YXJ0IiksITE9PT1uLnN0YXJ0JiYoaT0iZW5kIiksImRlZmF1bHQiIT09bi50eXBlJiYoaT1uLnR5cGUpLCRpW24uaWRdfHwoJGlbbi5pZF09e2lkOm4uaWQsc2hhcGU6aSxkZXNjcmlwdGlvbjpuLmlkLGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1zdGF0ZSJ9KSxuLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheSgkaVtuLmlkXS5kZXNjcmlwdGlvbik/KCRpW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIiwkaVtuLmlkXS5kZXNjcmlwdGlvbi5wdXNoKG4uZGVzY3JpcHRpb24pKTokaVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oJGlbbi5pZF0uc2hhcGU9InJlY3RXaXRoVGl0bGUiLCRpW24uaWRdLmRlc2NyaXB0aW9uPT09bi5pZD8kaVtuLmlkXS5kZXNjcmlwdGlvbj1bbi5kZXNjcmlwdGlvbl06JGlbbi5pZF0uZGVzY3JpcHRpb249WyRpW24uaWRdLmRlc2NyaXB0aW9uLG4uZGVzY3JpcHRpb25dKTooJGlbbi5pZF0uc2hhcGU9InJlY3QiLCRpW24uaWRdLmRlc2NyaXB0aW9uPW4uZGVzY3JpcHRpb24pKSwhJGlbbi5pZF0udHlwZSYmbi5kb2MmJihjLmluZm8oIlNldHRpbmcgY2x1c2VyIGZvciAiLG4uaWQpLCRpW24uaWRdLnR5cGU9Imdyb3VwIiwkaVtuLmlkXS5zaGFwZT0iZGl2aWRlciI9PT1uLnR5cGU/ImRpdmlkZXIiOiJyb3VuZGVkV2l0aFRpdGxlIiwkaVtuLmlkXS5jbGFzc2VzPSRpW24uaWRdLmNsYXNzZXMrIiAiKyhyPyJzdGF0ZWRpYWdyYW0tY2x1c3RlciBzdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQiOiJzdGF0ZWRpYWdyYW0tY2x1c3RlciIpKTt2YXIgYT17bGFiZWxTdHlsZToiIixzaGFwZTokaVtuLmlkXS5zaGFwZSxsYWJlbFRleHQ6JGlbbi5pZF0uZGVzY3JpcHRpb24sY2xhc3NlczokaVtuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLSIrVmksdHlwZTokaVtuLmlkXS50eXBlLHBhZGRpbmc6MTV9O2lmKG4ubm90ZSl7dmFyIG89e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGUiLGxhYmVsVGV4dDpuLm5vdGUudGV4dCxjbGFzc2VzOiJzdGF0ZWRpYWdyYW0tbm90ZSIsc3R5bGU6IiIsaWQ6bi5pZCsiLS0tLW5vdGUiLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1ub3RlLSIrVmksdHlwZTokaVtuLmlkXS50eXBlLHBhZGRpbmc6MTV9LHM9e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGVHcm91cCIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6JGlbbi5pZF0uY2xhc3NlcyxzdHlsZToiIixpZDpuLmlkKyItLS0tcGFyZW50Iixkb21JZDoic3RhdGUtIituLmlkKyItLS0tcGFyZW50LSIrVmksdHlwZToiZ3JvdXAiLHBhZGRpbmc6MH07VmkrKyx0LnNldE5vZGUobi5pZCsiLS0tLXBhcmVudCIscyksdC5zZXROb2RlKG8uaWQsbyksdC5zZXROb2RlKG4uaWQsYSksdC5zZXRQYXJlbnQobi5pZCxuLmlkKyItLS0tcGFyZW50IiksdC5zZXRQYXJlbnQoby5pZCxuLmlkKyItLS0tcGFyZW50Iik7dmFyIHU9bi5pZCxsPW8uaWQ7ImxlZnQgb2YiPT09bi5ub3RlLnBvc2l0aW9uJiYodT1vLmlkLGw9bi5pZCksdC5zZXRFZGdlKHUsbCx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixjbGFzc2VzOiJ0cmFuc2l0aW9uIG5vdGUtZWRnZSIsYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIn0pfWVsc2UgdC5zZXROb2RlKG4uaWQsYSl9ZSYmInJvb3QiIT09ZS5pZCYmKGMuaW5mbygiU2V0dGluZyBub2RlICIsbi5pZCwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixlLmlkKSx0LnNldFBhcmVudChuLmlkLGUuaWQpKSxuLmRvYyYmKGMuaW5mbygiQWRkaW5nIG5vZGVzIGNoaWxkcmVuICIpLEhpKHQsbixuLmRvYywhcikpfSxWaT0wLEhpPWZ1bmN0aW9uKHQsZSxuLHIpe1ZpPTAsYy50cmFjZSgiaXRlbXMiLG4pLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoInN0YXRlIj09PW4uc3RtdHx8ImRlZmF1bHQiPT09bi5zdG10KVdpKHQsZSxuLHIpO2Vsc2UgaWYoInJlbGF0aW9uIj09PW4uc3RtdCl7V2kodCxlLG4uc3RhdGUxLHIpLFdpKHQsZSxuLnN0YXRlMixyKTt2YXIgaT17aWQ6ImVkZ2UiK1ZpLGFycm93aGVhZDoibm9ybWFsIixhcnJvd1R5cGVFbmQ6ImFycm93X2JhcmIiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsbGFiZWw6bi5kZXNjcmlwdGlvbixhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InRyYW5zaXRpb24ifSxhPW4uc3RhdGUxLmlkLG89bi5zdGF0ZTIuaWQ7dC5zZXRFZGdlKGEsbyxpLFZpKSxWaSsrfX0pKX0sR2k9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylVaVtlW25dXT10W2Vbbl1dfSxxaT1mdW5jdGlvbih0LGUpe2MuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpLEFpLmNsZWFyKCksJGk9e307dmFyIG49T2kuYS5wYXJzZXI7bi55eT1BaSxuLnBhcnNlKHQpO3ZhciByPUFpLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJMUiIpO3ZhciBpPV90KCkuc3RhdGUsYT1pLm5vZGVTcGFjaW5nfHw1MCxvPWkucmFua1NwYWNpbmd8fDUwLHM9bmV3IEcuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDphLHJhbmtzZXA6byxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtjLmluZm8oQWkuZ2V0Um9vdERvY1YyKCkpLEFpLmV4dHJhY3QoQWkuZ2V0Um9vdERvY1YyKCkpLGMuaW5mbyhBaS5nZXRSb290RG9jVjIoKSksV2kocyx2b2lkIDAsQWkuZ2V0Um9vdERvY1YyKCksITApO3ZhciB1PU9iamVjdChkLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksbD1PYmplY3QoZC5zZWxlY3QpKCIjIitlKyIgZyIpO01uKGwscyxbImJhcmIiXSwic3RhdGVkaWFncmFtIixlKTt2YXIgaD11Lm5vZGUoKS5nZXRCQm94KCksZj1oLndpZHRoKzE2LHA9aC5oZWlnaHQrMTY7dS5hdHRyKCJjbGFzcyIsInN0YXRlZGlhZ3JhbSIpO3ZhciBnPXUubm9kZSgpLmdldEJCb3goKTtXKHUscCwxLjc1KmYsaS51c2VNYXhXaWR0aCk7dmFyIHk9IiIuY29uY2F0KGcueC04LCIgIikuY29uY2F0KGcueS04LCIgIikuY29uY2F0KGYsIiAiKS5jb25jYXQocCk7aWYoYy5kZWJ1Zygidmlld0JveCAiLmNvbmNhdCh5KSksdS5hdHRyKCJ2aWV3Qm94Iix5KSwhaS5odG1sTGFiZWxzKWZvcih2YXIgdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxtPTA7bTx2Lmxlbmd0aDttKyspe3ZhciBiPXZbbV0seD1iLmdldEJCb3goKSxfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Xy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxfLnNldEF0dHJpYnV0ZSgicnkiLDApLF8uc2V0QXR0cmlidXRlKCJ3aWR0aCIseC53aWR0aCksXy5zZXRBdHRyaWJ1dGUoImhlaWdodCIseC5oZWlnaHQpLGIuaW5zZXJ0QmVmb3JlKF8sYi5maXJzdENoaWxkKX19LFhpPXt9LFppPW51bGwsSmk9e21hc3RlcjpaaX0sUWk9Im1hc3RlciIsS2k9IkxSIix0YT0wO2Z1bmN0aW9uIGVhKCl7cmV0dXJuIEYoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gbmEodCxlKXtmb3IoYy5kZWJ1ZygiRW50ZXJpbmcgaXNmYXN0Zm9yd2FyZGFibGU6Iix0LmlkLGUuaWQpO3Quc2VxPD1lLnNlcSYmdCE9PWUmJm51bGwhPWUucGFyZW50Oyl7aWYoQXJyYXkuaXNBcnJheShlLnBhcmVudCkpcmV0dXJuIGMuZGVidWcoIkluIG1lcmdlIGNvbW1pdDoiLGUucGFyZW50KSxuYSh0LFhpW2UucGFyZW50WzBdXSl8fG5hKHQsWGlbZS5wYXJlbnRbMV1dKTtlPVhpW2UucGFyZW50XX1yZXR1cm4gYy5kZWJ1Zyh0LmlkLGUuaWQpLHQuaWQ9PT1lLmlkfXZhciByYT17fTtmdW5jdGlvbiBpYSh0LGUsbil7dmFyIHI9dC5pbmRleE9mKGUpOy0xPT09cj90LnB1c2gobik6dC5zcGxpY2UociwxLG4pfWZ1bmN0aW9uIGFhKHQpe3ZhciBlPXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcT90OmV9KSx0WzBdKSxuPSIiO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9dD09PWU/Ilx0KiI6Ilx0fCJ9KSk7dmFyIHIsaSxhLG89W24sZS5pZCxlLnNlcV07Zm9yKHZhciBzIGluIEppKUppW3NdPT09ZS5pZCYmby5wdXNoKHMpO2lmKGMuZGVidWcoby5qb2luKCIgIikpLEFycmF5LmlzQXJyYXkoZS5wYXJlbnQpKXt2YXIgdT1YaVtlLnBhcmVudFswXV07aWEodCxlLHUpLHQucHVzaChYaVtlLnBhcmVudFsxXV0pfWVsc2V7aWYobnVsbD09ZS5wYXJlbnQpcmV0dXJuO3ZhciBsPVhpW2UucGFyZW50XTtpYSh0LGUsbCl9cj10LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9LGE9T2JqZWN0LmNyZWF0ZShudWxsKSxhYSh0PXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWkoZSk7cmV0dXJuIGFbbl18fChhW25dPSEwLHQucHVzaChlKSksdH0pLFtdKSl9dmFyIG9hLHNhPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXMoWGkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFhpW3RdfSkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2MuZGVidWcodC5pZCl9KSksdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnNlcS10LnNlcX0pKSx0fSxjYT17c2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpe0tpPXR9LHNldE9wdGlvbnM6ZnVuY3Rpb24odCl7Yy5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9KHQ9dCYmdC50cmltKCkpfHwie30iO3RyeXtyYT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe2MuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsdC5tZXNzYWdlKX19LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gcmF9LGNvbW1pdDpmdW5jdGlvbih0KXt2YXIgZT17aWQ6ZWEoKSxtZXNzYWdlOnQsc2VxOnRhKysscGFyZW50Om51bGw9PVppP251bGw6WmkuaWR9O1ppPWUsWGlbZS5pZF09ZSxKaVtRaV09ZS5pZCxjLmRlYnVnKCJpbiBwdXNoQ29tbWl0ICIrZS5pZCl9LGJyYW5jaDpmdW5jdGlvbih0KXtKaVt0XT1udWxsIT1aaT9aaS5pZDpudWxsLGMuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSxtZXJnZTpmdW5jdGlvbih0KXt2YXIgZT1YaVtKaVtRaV1dLG49WGlbSmlbdF1dO2lmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxJiZuYShlLHQpfShlLG4pKWMuZGVidWcoIkFscmVhZHkgbWVyZ2VkIik7ZWxzZXtpZihuYShlLG4pKUppW1FpXT1KaVt0XSxaaT1YaVtKaVtRaV1dO2Vsc2V7dmFyIHI9e2lkOmVhKCksbWVzc2FnZToibWVyZ2VkIGJyYW5jaCAiK3QrIiBpbnRvICIrUWksc2VxOnRhKysscGFyZW50OltudWxsPT1aaT9udWxsOlppLmlkLEppW3RdXX07Wmk9cixYaVtyLmlkXT1yLEppW1FpXT1yLmlkfWMuZGVidWcoSmkpLGMuZGVidWcoImluIG1lcmdlQnJhbmNoIil9fSxjaGVja291dDpmdW5jdGlvbih0KXtjLmRlYnVnKCJpbiBjaGVja291dCIpO3ZhciBlPUppW1FpPXRdO1ppPVhpW2VdfSxyZXNldDpmdW5jdGlvbih0KXtjLmRlYnVnKCJpbiByZXNldCIsdCk7dmFyIGU9dC5zcGxpdCgiOiIpWzBdLG49cGFyc2VJbnQodC5zcGxpdCgiOiIpWzFdKSxyPSJIRUFEIj09PWU/Wmk6WGlbSmlbZV1dO2ZvcihjLmRlYnVnKHIsbik7bj4wOylpZihuLS0sIShyPVhpW3IucGFyZW50XSkpe3ZhciBpPSJDcml0aWNhbCBlcnJvciAtIHVuaXF1ZSBwYXJlbnQgY29tbWl0IG5vdCBmb3VuZCBkdXJpbmcgcmVzZXQiO3Rocm93IGMuZXJyb3IoaSksaX1aaT1yLEppW1FpXT1yLmlkfSxwcmV0dHlQcmludDpmdW5jdGlvbigpe2MuZGVidWcoWGkpLGFhKFtzYSgpWzBdXSl9LGNsZWFyOmZ1bmN0aW9uKCl7WGk9e30sSmk9e21hc3RlcjpaaT1udWxsfSxRaT0ibWFzdGVyIix0YT0wfSxnZXRCcmFuY2hlc0FzT2JqQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gSmkpdC5wdXNoKHtuYW1lOmUsY29tbWl0OlhpW0ppW2VdXX0pO3JldHVybiB0fSxnZXRCcmFuY2hlczpmdW5jdGlvbigpe3JldHVybiBKaX0sZ2V0Q29tbWl0czpmdW5jdGlvbigpe3JldHVybiBYaX0sZ2V0Q29tbWl0c0FycmF5OnNhLGdldEN1cnJlbnRCcmFuY2g6ZnVuY3Rpb24oKXtyZXR1cm4gUWl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBLaX0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiBaaX19LHVhPW4oNzEpLGxhPW4ubih1YSksaGE9e30sZmE9e25vZGVTcGFjaW5nOjE1MCxub2RlRmlsbENvbG9yOiJ5ZWxsb3ciLG5vZGVTdHJva2VXaWR0aDoyLG5vZGVTdHJva2VDb2xvcjoiZ3JleSIsbGluZVN0cm9rZVdpZHRoOjQsYnJhbmNoT2Zmc2V0OjUwLGxpbmVDb2xvcjoiZ3JleSIsbGVmdE1hcmdpbjo1MCxicmFuY2hDb2xvcnM6WyIjNDQyZjc0IiwiIzk4MzM1MSIsIiM2MDk3MzIiLCIjQUE5QTM5Il0sbm9kZVJhZGl1czoxMCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfX0sZGE9e307ZnVuY3Rpb24gcGEodCxlLG4scil7dmFyIGk9RChyLGQuY3VydmVCYXNpcyksYT1mYS5icmFuY2hDb2xvcnNbbiVmYS5icmFuY2hDb2xvcnMubGVuZ3RoXSxvPU9iamVjdChkLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC54KX0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LnkpfSkpLmN1cnZlKGkpO3QuYXBwZW5kKCJzdmc6cGF0aCIpLmF0dHIoImQiLG8oZSkpLnN0eWxlKCJzdHJva2UiLGEpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZhLmxpbmVTdHJva2VXaWR0aCkuc3R5bGUoImZpbGwiLCJub25lIil9ZnVuY3Rpb24gZ2EodCxlKXtlPWV8fHQubm9kZSgpLmdldEJCb3goKTt2YXIgbj10Lm5vZGUoKS5nZXRDVE0oKTtyZXR1cm57bGVmdDpuLmUrZS54Km4uYSx0b3A6bi5mK2UueSpuLmQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWZ1bmN0aW9uIHlhKHQsZSxuLHIsaSl7Yy5kZWJ1Zygic3ZnRHJhd0xpbmVGb3JDb21taXRzOiAiLGUsbik7dmFyIGE9Z2EodC5zZWxlY3QoIiNub2RlLSIrZSsiIGNpcmNsZSIpKSxvPWdhKHQuc2VsZWN0KCIjbm9kZS0iK24rIiBjaXJjbGUiKSk7c3dpdGNoKHIpe2Nhc2UiTFIiOmlmKGEubGVmdC1vLmxlZnQ+ZmEubm9kZVNwYWNpbmcpe3ZhciBzPXt4OmEubGVmdC1mYS5ub2RlU3BhY2luZyx5Om8udG9wK28uaGVpZ2h0LzJ9O3BhKHQsW3Mse3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSwibGluZWFyIikscGEodCxbe3g6YS5sZWZ0LHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LWZhLm5vZGVTcGFjaW5nLzIseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtZmEubm9kZVNwYWNpbmcvMix5OnMueX0sc10saSl9ZWxzZSBwYSh0LFt7eDphLmxlZnQseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtZmEubm9kZVNwYWNpbmcvMix5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC1mYS5ub2RlU3BhY2luZy8yLHk6by50b3Arby5oZWlnaHQvMn0se3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSk7YnJlYWs7Y2FzZSJCVCI6aWYoby50b3AtYS50b3A+ZmEubm9kZVNwYWNpbmcpe3ZhciB1PXt4Om8ubGVmdCtvLndpZHRoLzIseTphLnRvcCthLmhlaWdodCtmYS5ub2RlU3BhY2luZ307cGEodCxbdSx7eDpvLmxlZnQrby53aWR0aC8yLHk6by50b3B9XSxpLCJsaW5lYXIiKSxwYSh0LFt7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHR9LHt4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodCtmYS5ub2RlU3BhY2luZy8yfSx7eDpvLmxlZnQrby53aWR0aC8yLHk6dS55LWZhLm5vZGVTcGFjaW5nLzJ9LHVdLGkpfWVsc2UgcGEodCxbe3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0fSx7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArZmEubm9kZVNwYWNpbmcvMn0se3g6by5sZWZ0K28ud2lkdGgvMix5Om8udG9wLWZhLm5vZGVTcGFjaW5nLzJ9LHt4Om8ubGVmdCtvLndpZHRoLzIseTpvLnRvcH1dLGkpfX1mdW5jdGlvbiB2YSh0LGUpe3JldHVybiB0LnNlbGVjdChlKS5ub2RlKCkuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBtYSh0LGUsbixyKXt2YXIgaSxhPU9iamVjdC5rZXlzKGhhKS5sZW5ndGg7aWYoInN0cmluZyI9PXR5cGVvZiBlKWRve2lmKGk9aGFbZV0sYy5kZWJ1ZygiaW4gcmVuZGVyQ29tbWl0SGlzdG9yeSIsaS5pZCxpLnNlcSksdC5zZWxlY3QoIiNub2RlLSIrZSkuc2l6ZSgpPjApcmV0dXJuO3QuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiB2YSh0LCIjZGVmLWNvbW1pdCIpfSkpLmF0dHIoImNsYXNzIiwiY29tbWl0IikuYXR0cigiaWQiLChmdW5jdGlvbigpe3JldHVybiJub2RlLSIraS5pZH0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3N3aXRjaChyKXtjYXNlIkxSIjpyZXR1cm4idHJhbnNsYXRlKCIrKGkuc2VxKmZhLm5vZGVTcGFjaW5nK2ZhLmxlZnRNYXJnaW4pKyIsICIrb2EqZmEuYnJhbmNoT2Zmc2V0KyIpIjtjYXNlIkJUIjpyZXR1cm4idHJhbnNsYXRlKCIrKG9hKmZhLmJyYW5jaE9mZnNldCtmYS5sZWZ0TWFyZ2luKSsiLCAiKyhhLWkuc2VxKSpmYS5ub2RlU3BhY2luZysiKSJ9fSkpLmF0dHIoImZpbGwiLGZhLm5vZGVGaWxsQ29sb3IpLmF0dHIoInN0cm9rZSIsZmEubm9kZVN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLGZhLm5vZGVTdHJva2VXaWR0aCk7dmFyIG89dm9pZCAwO2Zvcih2YXIgcyBpbiBuKWlmKG5bc10uY29tbWl0PT09aSl7bz1uW3NdO2JyZWFrfW8mJihjLmRlYnVnKCJmb3VuZCBicmFuY2ggIixvLm5hbWUpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJicmFuY2gtbGFiZWwiKS50ZXh0KG8ubmFtZSsiLCAiKSksdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1pZCIpLnRleHQoaS5pZCksIiIhPT1pLm1lc3NhZ2UmJiJCVCI9PT1yJiZ0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiY29tbWl0LW1zZyIpLnRleHQoIiwgIitpLm1lc3NhZ2UpLGU9aS5wYXJlbnR9d2hpbGUoZSYmaGFbZV0pO0FycmF5LmlzQXJyYXkoZSkmJihjLmRlYnVnKCJmb3VuZCBtZXJnZSBjb21tbWl0IixlKSxtYSh0LGVbMF0sbixyKSxvYSsrLG1hKHQsZVsxXSxuLHIpLG9hLS0pfWZ1bmN0aW9uIGJhKHQsZSxuLHIpe2ZvcihyPXJ8fDA7ZS5zZXE+MCYmIWUubGluZURyYXduOykic3RyaW5nIj09dHlwZW9mIGUucGFyZW50Pyh5YSh0LGUuaWQsZS5wYXJlbnQsbixyKSxlLmxpbmVEcmF3bj0hMCxlPWhhW2UucGFyZW50XSk6QXJyYXkuaXNBcnJheShlLnBhcmVudCkmJih5YSh0LGUuaWQsZS5wYXJlbnRbMF0sbixyKSx5YSh0LGUuaWQsZS5wYXJlbnRbMV0sbixyKzEpLGJhKHQsaGFbZS5wYXJlbnRbMV1dLG4scisxKSxlLmxpbmVEcmF3bj0hMCxlPWhhW2UucGFyZW50WzBdXSl9dmFyIHhhLF9hPWZ1bmN0aW9uKHQpe2RhPXR9LGthPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9bGEuYS5wYXJzZXI7ci55eT1jYSxyLnl5LmNsZWFyKCksYy5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLHQrIlxuIiwiaWQ6IixlLG4pLHIucGFyc2UodCsiXG4iKSxmYT1PYmplY3QuYXNzaWduKGZhLGRhLGNhLmdldE9wdGlvbnMoKSksYy5kZWJ1ZygiZWZmZWN0aXZlIG9wdGlvbnMiLGZhKTt2YXIgaT1jYS5nZXREaXJlY3Rpb24oKTtoYT1jYS5nZXRDb21taXRzKCk7dmFyIGE9Y2EuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7IkJUIj09PWkmJihmYS5ub2RlTGFiZWwueD1hLmxlbmd0aCpmYS5icmFuY2hPZmZzZXQsZmEubm9kZUxhYmVsLndpZHRoPSIxMDAlIixmYS5ub2RlTGFiZWwueT0tMipmYS5ub2RlUmFkaXVzKTt2YXIgbz1PYmplY3QoZC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO2Zvcih2YXIgcyBpbiBmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgiZyIpLmF0dHIoImlkIiwiZGVmLWNvbW1pdCIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsZmEubm9kZVJhZGl1cykuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKSx0LnNlbGVjdCgiI2RlZi1jb21taXQiKS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsZmEubm9kZUxhYmVsLndpZHRoKS5hdHRyKCJoZWlnaHQiLGZhLm5vZGVMYWJlbC5oZWlnaHQpLmF0dHIoIngiLGZhLm5vZGVMYWJlbC54KS5hdHRyKCJ5IixmYS5ub2RlTGFiZWwueSkuYXR0cigiY2xhc3MiLCJub2RlLWxhYmVsIikuYXR0cigicmVxdWlyZWRGZWF0dXJlcyIsImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIpLmFwcGVuZCgicCIpLmh0bWwoIiIpfShvKSxvYT0xLGEpe3ZhciB1PWFbc107bWEobyx1LmNvbW1pdC5pZCxhLGkpLGJhKG8sdS5jb21taXQsaSksb2ErK31vLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIkJUIj09PWk/T2JqZWN0LmtleXMoaGEpLmxlbmd0aCpmYS5ub2RlU3BhY2luZzooYS5sZW5ndGgrMSkqZmEuYnJhbmNoT2Zmc2V0fSkpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBnaXRncmFwaCIpLGMuZXJyb3IodC5tZXNzYWdlKX19LHdhPSIiLEVhPSExLFRhPXtzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2MuZGVidWcoIlNldHRpbmcgbWVzc2FnZSB0bzogIit0KSx3YT10fSxnZXRNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHdhfSxzZXRJbmZvOmZ1bmN0aW9uKHQpe0VhPXR9LGdldEluZm86ZnVuY3Rpb24oKXtyZXR1cm4gRWF9fSxDYT1uKDcyKSxTYT1uLm4oQ2EpLEFhPXt9LE1hPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe0FhW2VdPXRbZV19KSl9LE9hPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9U2EuYS5wYXJzZXI7ci55eT1UYSxjLmRlYnVnKCJSZW5lcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksci5wYXJzZSh0KSxjLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIGk9T2JqZWN0KGQuc2VsZWN0KSgiIyIrZSk7aS5hcHBlbmQoImciKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwxMDApLmF0dHIoInkiLDQwKS5hdHRyKCJjbGFzcyIsInZlcnNpb24iKS5hdHRyKCJmb250LXNpemUiLCIzMnB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgidiAiK24pLGkuYXR0cigiaGVpZ2h0IiwxMDApLGkuYXR0cigid2lkdGgiLDQwMCl9Y2F0Y2godCl7Yy5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbSIpLGMuZXJyb3IodC5tZXNzYWdlKX19LERhPXt9LE5hPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe0RhW2VdPXRbZV19KSl9LEJhPWZ1bmN0aW9uKHQsZSl7dHJ5e2MuZGVidWcoIlJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yXG4iKTt2YXIgbj1PYmplY3QoZC5zZWxlY3QpKCIjIit0KSxyPW4uYXBwZW5kKCJnIik7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiBncmFwaCIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTA1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIm1lcm1haWQgdmVyc2lvbiAiK2UpLG4uYXR0cigiaGVpZ2h0IiwxMDApLG4uYXR0cigid2lkdGgiLDQwMCksbi5hdHRyKCJ2aWV3Qm94IiwiNzY4IDAgNTEyIDUxMiIpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxjLmVycm9yKHQubWVzc2FnZSl9fSxMYT17fSxQYT0iIixGYT17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe0hvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5waWV9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1MYVt0XSYmKExhW3RdPWUsYy5kZWJ1ZygiQWRkZWQgbmV3IHNlY3Rpb24gOiIsdCkpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBMYX0sY2xlYW51cFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/KHQ9dC5zdWJzdHJpbmcoMSkudHJpbSgpLE51bWJlcih0LnRyaW0oKSkpOk51bWJlcih0LnRyaW0oKSl9LGNsZWFyOmZ1bmN0aW9uKCl7TGE9e30sUGE9IiJ9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe1BhPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIFBhfX0sSWE9big3MyksamE9bi5uKElhKSxSYT17fSxZYT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtSYVtlXT10W2VdfSkpfSx6YT1mdW5jdGlvbih0LGUpe3RyeXt2YXIgbj1qYS5hLnBhcnNlcjtuLnl5PUZhLGMuZGVidWcoIlJlbmRlcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksbi55eS5jbGVhcigpLG4ucGFyc2UodCksYy5kZWJ1ZygiUGFyc2VkIGluZm8gZGlhZ3JhbSIpO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PSh4YT1yLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYoeGE9MTIwMCksdm9pZCAwIT09UmEudXNlV2lkdGgmJih4YT1SYS51c2VXaWR0aCk7dmFyIGk9T2JqZWN0KGQuc2VsZWN0KSgiIyIrZSk7VyhpLDQ1MCx4YSxSYS51c2VNYXhXaWR0aCksci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIit4YSsiIDQ1MCIpO3ZhciBhPU1hdGgubWluKHhhLDQ1MCkvMi00MCxvPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreGEvMisiLDIyNSkiKSxzPUZhLmdldFNlY3Rpb25zKCksdT0wO09iamVjdC5rZXlzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UrPXNbdF19KSk7dmFyIGw9T2JqZWN0KGQuc2NhbGVPcmRpbmFsKSgpLmRvbWFpbihzKS5yYW5nZShkLnNjaGVtZVNldDIpLGg9T2JqZWN0KGQucGllKSgpLnZhbHVlKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKShPYmplY3QoZC5lbnRyaWVzKShzKSksZj1PYmplY3QoZC5hcmMpKCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoYSk7by5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShoKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGYpLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LmRhdGEua2V5KX0pKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIycHgiKS5zdHlsZSgib3BhY2l0eSIsLjcpLG8uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoaCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4odC5kYXRhLnZhbHVlL3UqMTAwKS50b0ZpeGVkKDApKyIlIn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrZi5jZW50cm9pZCh0KSsiKSJ9KSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLnN0eWxlKCJmb250LXNpemUiLDE3KSxvLmFwcGVuZCgidGV4dCIpLnRleHQobi55eS5nZXRUaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtMjAwKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO3ZhciBwPW8uc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShsLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKDIxNiwiKygyMiplLTIyKmwuZG9tYWluKCkubGVuZ3RoLzIpKyIpIn0pKTtwLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIiwxOCkuYXR0cigiaGVpZ2h0IiwxOCkuc3R5bGUoImZpbGwiLGwpLnN0eWxlKCJzdHJva2UiLGwpLHAuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMjIpLmF0dHIoInkiLDE0KS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKX1jYXRjaCh0KXtjLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgaW5mbyBkaWFncmFtIiksYy5lcnJvcih0KX19LFVhPXt9LCRhPVtdLFdhPSIiLFZhPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1VYVt0XSYmKFVhW3RdPXthdHRyaWJ1dGVzOltdfSxjLmluZm8oIkFkZGVkIG5ldyBlbnRpdHkgOiIsdCkpLFVhW3RdfSxIYT17Q2FyZGluYWxpdHk6e1pFUk9fT1JfT05FOiJaRVJPX09SX09ORSIsWkVST19PUl9NT1JFOiJaRVJPX09SX01PUkUiLE9ORV9PUl9NT1JFOiJPTkVfT1JfTU9SRSIsT05MWV9PTkU6Ik9OTFlfT05FIn0sSWRlbnRpZmljYXRpb246e05PTl9JREVOVElGWUlORzoiTk9OX0lERU5USUZZSU5HIixJREVOVElGWUlORzoiSURFTlRJRllJTkcifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7SG8ucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBfdCgpLmVyfSxhZGRFbnRpdHk6VmEsYWRkQXR0cmlidXRlczpmdW5jdGlvbih0LGUpe3ZhciBuLHI9VmEodCk7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlyLmF0dHJpYnV0ZXMucHVzaChlW25dKSxjLmRlYnVnKCJBZGRlZCBhdHRyaWJ1dGUgIixlW25dLmF0dHJpYnV0ZU5hbWUpfSxnZXRFbnRpdGllczpmdW5jdGlvbigpe3JldHVybiBVYX0sYWRkUmVsYXRpb25zaGlwOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXtlbnRpdHlBOnQscm9sZUE6ZSxlbnRpdHlCOm4scmVsU3BlYzpyfTskYS5wdXNoKGkpLGMuZGVidWcoIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgOiIsaSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gJGF9LGNsZWFyOmZ1bmN0aW9uKCl7VWE9e30sJGE9W10sV2E9IiJ9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe1dhPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIFdhfX0sR2E9big3NCkscWE9bi5uKEdhKSxYYT17T05MWV9PTkVfU1RBUlQ6Ik9OTFlfT05FX1NUQVJUIixPTkxZX09ORV9FTkQ6Ik9OTFlfT05FX0VORCIsWkVST19PUl9PTkVfU1RBUlQ6IlpFUk9fT1JfT05FX1NUQVJUIixaRVJPX09SX09ORV9FTkQ6IlpFUk9fT1JfT05FX0VORCIsT05FX09SX01PUkVfU1RBUlQ6Ik9ORV9PUl9NT1JFX1NUQVJUIixPTkVfT1JfTU9SRV9FTkQ6Ik9ORV9PUl9NT1JFX0VORCIsWkVST19PUl9NT1JFX1NUQVJUOiJaRVJPX09SX01PUkVfU1RBUlQiLFpFUk9fT1JfTU9SRV9FTkQ6IlpFUk9fT1JfTU9SRV9FTkQifSxaYT1YYSxKYT1mdW5jdGlvbih0LGUpe3ZhciBuO3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsWGEuT05MWV9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTggTTE1LDAgTDE1LDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixYYS5PTkxZX09ORV9FTkQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFhhLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFhhLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMCBMMjEsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFhhLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixYYS5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsWGEuWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFExOCwwIDM2LDE4IFExOCwzNiAwLDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixYYS5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSxRYT17fSxLYT1mdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBhPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGkpO3I9dm9pZCAwPT09cj9pOnI7dmFyIG89ImVudGl0eS0iK2kscz1hLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrX3QoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitRYS5mb250U2l6ZSsicHgiKS50ZXh0KGkpLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVFhLmVudGl0eVBhZGRpbmcvMyxpPVFhLmVudGl0eVBhZGRpbmcvMyxhPS44NSpRYS5mb250U2l6ZSxvPWUubm9kZSgpLmdldEJCb3goKSxzPVtdLGM9MCx1PTAsbD1vLmhlaWdodCsyKnIsaD0xO24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9IiIuY29uY2F0KGUubm9kZSgpLmlkLCItYXR0ci0iKS5jb25jYXQoaCksbz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi10eXBlIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitfdCgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZVR5cGUpLGY9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItbmFtZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrX3QoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVOYW1lKTtzLnB1c2goe3RuOm8sbm46Zn0pO3ZhciBkPW8ubm9kZSgpLmdldEJCb3goKSxwPWYubm9kZSgpLmdldEJCb3goKTtjPU1hdGgubWF4KGMsZC53aWR0aCksdT1NYXRoLm1heCh1LHAud2lkdGgpLGwrPU1hdGgubWF4KGQuaGVpZ2h0LHAuaGVpZ2h0KSsyKnIsaCs9MX0pKTt2YXIgZj17d2lkdGg6TWF0aC5tYXgoUWEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoby53aWR0aCsyKlFhLmVudGl0eVBhZGRpbmcsYyt1KzQqaSkpLGhlaWdodDpuLmxlbmd0aD4wP2w6TWF0aC5tYXgoUWEubWluRW50aXR5SGVpZ2h0LG8uaGVpZ2h0KzIqUWEuZW50aXR5UGFkZGluZyl9LGQ9TWF0aC5tYXgoMCxmLndpZHRoLShjK3UpLTQqaSk7aWYobi5sZW5ndGg+MCl7ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmLndpZHRoLzIrIiwiKyhyK28uaGVpZ2h0LzIpKyIpIik7dmFyIHA9by5oZWlnaHQrMipyLGc9ImF0dHJpYnV0ZUJveE9kZCI7cy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1wK3IrTWF0aC5tYXgoZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KS8yO2UudG4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciBhPXQuaW5zZXJ0KCJyZWN0IiwiIyIrZS50bi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoZykpLmF0dHIoImZpbGwiLFFhLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLFFhLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLGMrMippK2QvMikuYXR0cigiaGVpZ2h0IixlLnRuLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KzIqcik7ZS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocGFyc2VGbG9hdChhLmF0dHIoIndpZHRoIikpK2kpKyIsIituKyIpIiksdC5pbnNlcnQoInJlY3QiLCIjIitlLm5uLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdChnKSkuYXR0cigiZmlsbCIsUWEuZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsUWEuc3Ryb2tlKS5hdHRyKCJ4IiwiIi5jb25jYXQoYS5hdHRyKCJ4IikrYS5hdHRyKCJ3aWR0aCIpKSkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLHUrMippK2QvMikuYXR0cigiaGVpZ2h0IixlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KzIqcikscCs9TWF0aC5tYXgoZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KSsyKnIsZz0iYXR0cmlidXRlQm94T2RkIj09Zz8iYXR0cmlidXRlQm94RXZlbiI6ImF0dHJpYnV0ZUJveE9kZCJ9KSl9ZWxzZSBmLmhlaWdodD1NYXRoLm1heChRYS5taW5FbnRpdHlIZWlnaHQsbCksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmLndpZHRoLzIrIiwiK2YuaGVpZ2h0LzIrIikiKTtyZXR1cm4gZn0oYSxzLGVbaV0uYXR0cmlidXRlcyksdT1jLndpZHRoLGw9Yy5oZWlnaHQsaD1hLmluc2VydCgicmVjdCIsIiMiK28pLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5Qm94IikuYXR0cigiZmlsbCIsUWEuZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsUWEuc3Ryb2tlKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixsKS5ub2RlKCkuZ2V0QkJveCgpO24uc2V0Tm9kZShpLHt3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6aX0pfSkpLHJ9LHRvPWZ1bmN0aW9uKHQpe3JldHVybih0LmVudGl0eUErdC5yb2xlQSt0LmVudGl0eUIpLnJlcGxhY2UoL1xzL2csIiIpfSxlbz0wLG5vPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspUWFbZVtuXV09dFtlW25dXX0scm89ZnVuY3Rpb24odCxlKXtjLmluZm8oIkRyYXdpbmcgRVIgZGlhZ3JhbSIpLEhhLmNsZWFyKCk7dmFyIG49cWEuYS5wYXJzZXI7bi55eT1IYTt0cnl7bi5wYXJzZSh0KX1jYXRjaCh0KXtjLmRlYnVnKCJQYXJzaW5nIGZhaWxlZCIpfXZhciByLGk9T2JqZWN0KGQuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtKYShpLFFhKSxyPW5ldyBHLmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpRYS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTt2YXIgYSxvLHM9S2EoaSxIYS5nZXRFbnRpdGllcygpLHIpLHU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnNldEVkZ2UodC5lbnRpdHlBLHQuZW50aXR5Qix7cmVsYXRpb25zaGlwOnR9LHRvKHQpKX0pKSx0fShIYS5nZXRSZWxhdGlvbnNoaXBzKCkscik7a2UuYS5sYXlvdXQociksYT1pLChvPXIpLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09by5ub2RlKHQpJiZhLnNlbGVjdCgiIyIrdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG8ubm9kZSh0KS54LW8ubm9kZSh0KS53aWR0aC8yKSsiLCIrKG8ubm9kZSh0KS55LW8ubm9kZSh0KS5oZWlnaHQvMikrIiApIil9KSksdS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4scil7ZW8rKzt2YXIgaT1uLmVkZ2UoZS5lbnRpdHlBLGUuZW50aXR5Qix0byhlKSksYT1PYmplY3QoZC5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShkLmN1cnZlQmFzaXMpLG89dC5pbnNlcnQoInBhdGgiLCIjIityKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixhKGkucG9pbnRzKSkuYXR0cigic3Ryb2tlIixRYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIik7ZS5yZWxTcGVjLnJlbFR5cGU9PT1IYS5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJm8uYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO3ZhciBzPSIiO3N3aXRjaChRYS5hcnJvd01hcmtlckFic29sdXRlJiYocz0ocz0ocz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxlLnJlbFNwZWMuY2FyZEEpe2Nhc2UgSGEuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrWmEuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBIYS5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrWmEuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgSGEuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrWmEuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBIYS5DYXJkaW5hbGl0eS5PTkxZX09ORTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitaYS5PTkxZX09ORV9FTkQrIikiKX1zd2l0Y2goZS5yZWxTcGVjLmNhcmRCKXtjYXNlIEhhLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrWmEuWkVST19PUl9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIEhhLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK1phLlpFUk9fT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgSGEuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitaYS5PTkVfT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgSGEuQ2FyZGluYWxpdHkuT05MWV9PTkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitaYS5PTkxZX09ORV9TVEFSVCsiKSIpfXZhciBjPW8ubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksdT1vLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKC41KmMpLGw9InJlbCIrZW8saD10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGFiZWwiKS5hdHRyKCJpZCIsbCkuYXR0cigieCIsdS54KS5hdHRyKCJ5Iix1LnkpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK190KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrUWEuZm9udFNpemUrInB4IikudGV4dChlLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiIyIrbCkuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMYWJlbEJveCIpLmF0dHIoIngiLHUueC1oLndpZHRoLzIpLmF0dHIoInkiLHUueS1oLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsaC53aWR0aCkuYXR0cigiaGVpZ2h0IixoLmhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiZmlsbC1vcGFjaXR5IiwiODUlIil9KGksdCxyLHMpfSkpO3ZhciBsPVFhLmRpYWdyYW1QYWRkaW5nLGg9aS5ub2RlKCkuZ2V0QkJveCgpLGY9aC53aWR0aCsyKmwscD1oLmhlaWdodCsyKmw7VyhpLHAsZixRYS51c2VNYXhXaWR0aCksaS5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoaC54LWwsIiAiKS5jb25jYXQoaC55LWwsIiAiKS5jb25jYXQoZiwiICIpLmNvbmNhdChwKSl9LGlvPW4oMjgpLGFvPW4ubihpbyk7ZnVuY3Rpb24gb28odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIHNvPSIiLGNvPSIiLHVvPVtdLGxvPVtdLGhvPVtdLGZvPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSEwLGU9MDtlPGhvLmxlbmd0aDtlKyspaG9bZV0ucHJvY2Vzc2VkLHQ9dCYmaG9bZV0ucHJvY2Vzc2VkO3JldHVybiB0fSxwbz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe0hvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5qb3VybmV5fSxjbGVhcjpmdW5jdGlvbigpe3VvLmxlbmd0aD0wLGxvLmxlbmd0aD0wLGNvPSIiLHNvPSIiLGhvLmxlbmd0aD0wfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtzbz10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBzb30sYWRkU2VjdGlvbjpmdW5jdGlvbih0KXtjbz10LHVvLnB1c2godCl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHVvfSxnZXRUYXNrczpmdW5jdGlvbigpe2Zvcih2YXIgdD1mbygpLGU9MDshdCYmZTwxMDA7KXQ9Zm8oKSxlKys7cmV0dXJuIGxvLnB1c2guYXBwbHkobG8saG8pLGxvfSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdWJzdHIoMSkuc3BsaXQoIjoiKSxyPTAsaT1bXTsxPT09bi5sZW5ndGg/KHI9TnVtYmVyKG5bMF0pLGk9W10pOihyPU51bWJlcihuWzBdKSxpPW5bMV0uc3BsaXQoIiwiKSk7dmFyIGE9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKX0pKSxvPXtzZWN0aW9uOmNvLHR5cGU6Y28scGVvcGxlOmEsdGFzazp0LHNjb3JlOnJ9O2hvLnB1c2gobyl9LGFkZFRhc2tPcmc6ZnVuY3Rpb24odCl7dmFyIGU9e3NlY3Rpb246Y28sdHlwZTpjbyxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfTtsby5wdXNoKGUpfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdD1bXSxsby5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnBlb3BsZSYmdC5wdXNoLmFwcGx5KHQsb28oZS5wZW9wbGUpKX0pKSxvbyhuZXcgU2V0KHQpKS5zb3J0KCk7dmFyIHR9fSxnbz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIG4uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJ3aWR0aCIsZS53aWR0aCksbi5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxuLmF0dHIoInJ4IixlLnJ4KSxuLmF0dHIoInJ5IixlLnJ5KSx2b2lkIDAhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSx5bz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gbi5hdHRyKCJjeCIsZS5jeCksbi5hdHRyKCJjeSIsZS5jeSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJyIixlLnIpLHZvaWQgMCE9PW4uY2xhc3MmJm4uYXR0cigiY2xhc3MiLG4uY2xhc3MpLHZvaWQgMCE9PWUudGl0bGUmJm4uYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSksbn0sdm89ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnRleHQucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiICIpLHI9dC5hcHBlbmQoInRleHQiKTtyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxyLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLHZvaWQgMCE9PWUuY2xhc3MmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpO3ZhciBpPXIuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBpLmF0dHIoIngiLGUueCsyKmUudGV4dE1hcmdpbiksaS50ZXh0KG4pLHJ9LG1vPS0xLGJvPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0seG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMsYyl7cihlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJ5IixpK28vMis1KS5zdHlsZSgiZm9udC1jb2xvciIsYykuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyx1KXtmb3IodmFyIGw9Yy50YXNrRm9udFNpemUsaD1jLnRhc2tGb250RmFtaWx5LGY9dC5zcGxpdCgvPGJyXHMqXC8/Pi9naSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kKmwtbCooZi5sZW5ndGgtMSkvMixnPWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkpLmF0dHIoImZpbGwiLHUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGwpLnN0eWxlKCJmb250LWZhbWlseSIsaCk7Zy5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsbithLzIpLmF0dHIoImR5IixwKS50ZXh0KGZbZF0pLGcuYXR0cigieSIsaStvLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxyKGcscyl9fWZ1bmN0aW9uIG4odCxuLGksYSxvLHMsYyx1KXt2YXIgbD1uLmFwcGVuZCgic3dpdGNoIiksaD1sLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGkpLmF0dHIoInkiLGEpLmF0dHIoIndpZHRoIixvKS5hdHRyKCJoZWlnaHQiLHMpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsbCxpLGEsbyxzLGMsdSkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSluIGluIGUmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSxfbz15byxrbz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5hcHBlbmQoImciKSxpPWJvKCk7aS54PWUueCxpLnk9ZS55LGkuZmlsbD1lLmZpbGwsaS53aWR0aD1uLndpZHRoLGkuaGVpZ2h0PW4uaGVpZ2h0LGkuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bSxpLnJ4PTMsaS5yeT0zLGdvKHIsaSkseG8obikoZS50ZXh0LHIsaS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxuLGUuY29sb3VyKX0sd289dm8sRW89ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUueCtuLndpZHRoLzIsaT10LmFwcGVuZCgiZyIpO21vKys7dmFyIGEsbyxzO2kuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIittbykuYXR0cigieDEiLHIpLmF0dHIoInkxIixlLnkpLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsNDUwKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksYT1pLG89e2N4OnIsY3k6MzAwKzMwKig1LWUuc2NvcmUpLHNjb3JlOmUuc2NvcmV9LGEuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeCkuYXR0cigiY3kiLG8uY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLChzPWEuYXBwZW5kKCJnIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLG8uY3gtNSkuYXR0cigiY3kiLG8uY3ktNSkuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHMuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeCs1KS5hdHRyKCJjeSIsby5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iiksby5zY29yZT4zP2Z1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChkLmFyYykoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjMpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmN4KyIsIisoby5jeSsyKSsiKSIpfShzKTpvLnNjb3JlPDM/ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGQuYXJjKSgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKE1hdGguUEkvMio1KS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDE1LzIuMik7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5jeCsiLCIrKG8uY3krNykrIikiKX0ocyk6ZnVuY3Rpb24odCl7dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsby5jeC01KS5hdHRyKCJ5MSIsby5jeSs3KS5hdHRyKCJ4MiIsby5jeCs1KS5hdHRyKCJ5MiIsby5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfShzKTt2YXIgYz1ibygpO2MueD1lLngsYy55PWUueSxjLmZpbGw9ZS5maWxsLGMud2lkdGg9bi53aWR0aCxjLmhlaWdodD1uLmhlaWdodCxjLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLGMucng9MyxjLnJ5PTMsZ28oaSxjKTt2YXIgdT1lLngrMTQ7ZS5wZW9wbGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5hY3RvcnNbdF0scj17Y3g6dSxjeTplLnkscjo3LGZpbGw6bixzdHJva2U6IiMwMDAiLHRpdGxlOnR9O3lvKGksciksdSs9MTB9KSkseG8obikoZS50YXNrLGksYy54LGMueSxjLndpZHRoLGMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LG4sZS5jb2xvdXIpfSxUbz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07aW8ucGFyc2VyLnl5PXBvO3ZhciBDbz17bGVmdE1hcmdpbjoxNTAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MjAsdGFza01hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4tU2FucyIsICJzYW5zLXNlcmlmIicsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdfSxTbz17fTt2YXIgQW89Q28ubGVmdE1hcmdpbixNbz17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MH0sdXBkYXRlVmFsOmZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PXRbZV0/dFtlXT1uOnRbZV09cihuLHRbZV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYT10aGlzLG89MDt0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7bysrO3ZhciBjPWEuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbysxO2EudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKkNvLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwocywic3RvcHkiLHIrYypDby5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKE1vLmRhdGEsInN0YXJ0eCIsdC1jKkNvLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoTW8uZGF0YSwic3RvcHgiLG4rYypDby5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PWkmJihhLnVwZGF0ZVZhbChzLCJzdGFydHgiLHQtYypDby5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqQ28uYm94TWFyZ2luLE1hdGgubWF4KSxhLnVwZGF0ZVZhbChNby5kYXRhLCJzdGFydHkiLGUtYypDby5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKE1vLmRhdGEsInN0b3B5IixyK2MqQ28uYm94TWFyZ2luLE1hdGgubWF4KSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKE1vLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoTW8uZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChNby5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoTW8uZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxidW1wVmVydGljYWxQb3M6ZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LGdldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxPbz1Dby5zZWN0aW9uRmlsbHMsRG89Q28uc2VjdGlvbkNvbG91cnMsTm89ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0iIixpPW4rKDIqQ28uaGVpZ2h0K0NvLmRpYWdyYW1NYXJnaW5ZKSxhPTAsbz0iI0NDQyIscz0iYmxhY2siLGM9MCx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBsPWVbdV07aWYociE9PWwuc2VjdGlvbil7bz1Pb1thJU9vLmxlbmd0aF0sYz1hJU9vLmxlbmd0aCxzPURvW2ElRG8ubGVuZ3RoXTt2YXIgaD17eDp1KkNvLnRhc2tNYXJnaW4rdSpDby53aWR0aCtBbyx5OjUwLHRleHQ6bC5zZWN0aW9uLGZpbGw6byxudW06Yyxjb2xvdXI6c307a28odCxoLENvKSxyPWwuc2VjdGlvbixhKyt9dmFyIGY9bC5wZW9wbGUucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBTb1tlXSYmKHRbZV09U29bZV0pLHR9KSx7fSk7bC54PXUqQ28udGFza01hcmdpbit1KkNvLndpZHRoK0FvLGwueT1pLGwud2lkdGg9Q28uZGlhZ3JhbU1hcmdpblgsbC5oZWlnaHQ9Q28uZGlhZ3JhbU1hcmdpblksbC5jb2xvdXI9cyxsLmZpbGw9byxsLm51bT1jLGwuYWN0b3JzPWYsRW8odCxsLENvKSxNby5pbnNlcnQobC54LGwueSxsLngrbC53aWR0aCtDby50YXNrTWFyZ2luLDQ1MCl9fSxCbz1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtDb1tlXT10W2VdfSkpfSxMbz1mdW5jdGlvbih0LGUpe2lvLnBhcnNlci55eS5jbGVhcigpLGlvLnBhcnNlci5wYXJzZSh0KyJcbiIpLE1vLmluaXQoKTt2YXIgbj1PYmplY3QoZC5zZWxlY3QpKCIjIitlKTtuLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLFRvKG4pO3ZhciByPWlvLnBhcnNlci55eS5nZXRUYXNrcygpLGk9aW8ucGFyc2VyLnl5LmdldFRpdGxlKCksYT1pby5wYXJzZXIueXkuZ2V0QWN0b3JzKCk7Zm9yKHZhciBvIGluIFNvKWRlbGV0ZSBTb1tvXTt2YXIgcz0wO2EuZm9yRWFjaCgoZnVuY3Rpb24odCl7U29bdF09Q28uYWN0b3JDb2xvdXJzW3MlQ28uYWN0b3JDb2xvdXJzLmxlbmd0aF0scysrfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPTYwO09iamVjdC5rZXlzKFNvKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1Tb1tuXTtfbyh0LHtjeDoyMCxjeTplLHI6NyxmaWxsOnIsc3Ryb2tlOiIjMDAwIn0pO3ZhciBpPXt4OjQwLHk6ZSs3LGZpbGw6IiM2NjYiLHRleHQ6bix0ZXh0TWFyZ2luOjV8Q28uYm94VGV4dE1hcmdpbn07d28odCxpKSxlKz0yMH0pKX0obiksTW8uaW5zZXJ0KDAsMCxBbyw1MCpPYmplY3Qua2V5cyhTbykubGVuZ3RoKSxObyhuLHIsMCk7dmFyIGM9TW8uZ2V0Qm91bmRzKCk7aSYmbi5hcHBlbmQoInRleHQiKS50ZXh0KGkpLmF0dHIoIngiLEFvKS5hdHRyKCJmb250LXNpemUiLCI0ZXgiKS5hdHRyKCJmb250LXdlaWdodCIsImJvbGQiKS5hdHRyKCJ5IiwyNSk7dmFyIHU9Yy5zdG9weS1jLnN0YXJ0eSsyKkNvLmRpYWdyYW1NYXJnaW5ZLGw9QW8rYy5zdG9weCsyKkNvLmRpYWdyYW1NYXJnaW5YO1cobix1LGwsQ28udXNlTWF4V2lkdGgpLG4uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEFvKS5hdHRyKCJ5MSIsNCpDby5oZWlnaHQpLmF0dHIoIngyIixsLUFvLTQpLmF0dHIoInkyIiw0KkNvLmhlaWdodCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTt2YXIgaD1pPzcwOjA7bi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoYy5zdGFydHgsIiAtMjUgIikuY29uY2F0KGwsIiAiKS5jb25jYXQodStoKSksbi5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpfSxQbz1mdW5jdGlvbih0KXtyZXR1cm4iZy5jbGFzc0dyb3VwIHRleHQge1xuICBmaWxsOiAiLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZmlsbDogIikuY29uY2F0KHQuY2xhc3NUZXh0LCI7XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgZm9udC1zaXplOiAxMHB4O1xuXG4gIC50aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgfVxuXG59XG5cbi5jbGFzc1RpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cblxuLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiAxO1xufVxuXG5nLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuZy5jbGFzc0dyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLmNsYXNzR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5jbGFzc0xhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5jbGFzc0xhYmVsIC5sYWJlbCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuXG4ucmVsYXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5kYXNoZWQtbGluZXtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMztcbn1cblxuI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25TdGFydCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25FbmQsIC5hZ2dyZWdhdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmVkZ2VUZXJtaW5hbHMge1xuICBmb250LXNpemU6IDExcHg7XG59XG5cbiIpfSxGbz1mdW5jdGlvbih0KXtyZXR1cm4iLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubGFiZWwgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLm5vZGUgLmxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm5vZGUuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuYXJyb3doZWFkUGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYXJyb3doZWFkQ29sb3IsIjtcbiAgfVxuXG4gIC5lZGdlUGF0aCAucGF0aCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICB9XG5cbiAgLmZsb3djaGFydC1saW5rIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuZWRnZUxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiKS5jb25jYXQodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgcmVjdCB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiKS5jb25jYXQodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgICBmaWxsOiAiKS5jb25jYXQodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgfVxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5jbHVzdGVyIHJlY3Qge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmNsdXN0ZXJCa2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNsdXN0ZXJCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSxJbz1mdW5jdGlvbih0KXtyZXR1cm4iZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAiLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxhYmVsQ29sb3IsIjtcbn1cblxuZy5zdGF0ZUdyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLnRyYW5zaXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4XG59XG5cbi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQge1xuICBmaWxsOiAjZTBlMGUwO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlLW5vdGUge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcblxuICB0ZXh0IHtcbiAgICBmaWxsOiBibGFjaztcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gIG9wYWNpdHk6IDAuNTtcbn1cbi5lZGdlTGFiZWwgLmxhYmVsIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuLmxhYmVsIGRpdiAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5VGV4dENvbG9yLCI7XG59XG5cbi5zdGF0ZUxhYmVsIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2U6IGJsYWNrO1xufVxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnByaW1hcnlCb3JkZXJDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIC8vIHN0cm9rZTogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBzdHJva2Utd2lkdGg6IDEuNVxufVxuXG4ubm9kZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQudGV4dENvbG9yLCI7XG59XG5cbi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0Lm91dGVyIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbn1cbi5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQgLmlubmVyIHtcbiAgZmlsbDogI2UwZTBlMDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIHJ4OjA7XG4gIHJ5OjA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwO1xuICBmaWxsOiAiKS5jb25jYXQodC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiIsIjtcbn1cblxuLm5vdGUtZWRnZSB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDU7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG4uc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgcng6IDA7XG4gIHJ5OiAwO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG4iKX0sam89e2Zsb3djaGFydDpGbywiZmxvd2NoYXJ0LXYyIjpGbyxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbEJveCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCa2dDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wVGV4dCwgLmxvb3BUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lmxvb3BUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAubG9vcExpbmUge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLm5vdGUge1xuICAgIC8vc3Ryb2tlOiAjZGVjYzkzO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAubm90ZVRleHQsIC5ub3RlVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdGl2YXRpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24xIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24yIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG4iKX0sZ2FudHQ6ZnVuY3Rpb24odCl7cmV0dXJuJ1xuICAubWVybWFpZC1tYWluLWZvbnQge1xuICAgIGZvbnQtZmFtaWx5OiAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLnNlY3Rpb24ge1xuICAgIHN0cm9rZTogbm9uZTtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvbjAge1xuICAgIGZpbGw6ICcuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNlY3Rpb25Ca2dDb2xvcjIsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hbHRTZWN0aW9uQmtnQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICB0ZXh0LWhlaWdodDogMTRweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcblxuICB9XG5cblxuICAvKiBHcmlkIGFuZCBheGlzICovXG5cbiAgLmdyaWQgLnRpY2sge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuZ3JpZENvbG9yLCI7XG4gICAgb3BhY2l0eTogMC44O1xuICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlcztcbiAgICB0ZXh0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgICB9XG4gIH1cblxuICAuZ3JpZCBwYXRoIHtcbiAgICBzdHJva2Utd2lkdGg6IDA7XG4gIH1cblxuXG4gIC8qIFRvZGF5IGxpbmUgKi9cblxuICAudG9kYXkge1xuICAgIGZpbGw6IG5vbmU7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC50b2RheUxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICB9XG5cblxuICAvKiBUYXNrIHN0eWxpbmcgKi9cblxuICAvKiBEZWZhdWx0IHRhc2sgKi9cblxuICAudGFzayB7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLnRhc2tUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLnRhc2tUZXh0Om5vdChbZm9udC1zaXplXSkge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogZW5kO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgfVxuXG4gIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi9cbiAgLnRhc2suY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbiAgLnRhc2tUZXh0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlUmlnaHQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqL1xuXG4gIC50YXNrVGV4dDAsXG4gIC50YXNrVGV4dDEsXG4gIC50YXNrVGV4dDIsXG4gIC50YXNrVGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC50YXNrMCxcbiAgLnRhc2sxLFxuICAudGFzazIsXG4gIC50YXNrMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC50YXNrQm9yZGVyQ29sb3IsIjtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUwLFxuICAudGFza1RleHRPdXRzaWRlMlxuICB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRPdXRzaWRlQ29sb3IsIjtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUxLFxuICAudGFza1RleHRPdXRzaWRlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRPdXRzaWRlQ29sb3IsIjtcbiAgfVxuXG5cbiAgLyogQWN0aXZlIHRhc2sgKi9cblxuICAuYWN0aXZlMCxcbiAgLmFjdGl2ZTEsXG4gIC5hY3RpdmUyLFxuICAuYWN0aXZlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0aXZlVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQm9yZGVyQ29sb3IsIjtcbiAgfVxuXG4gIC5hY3RpdmVUZXh0MCxcbiAgLmFjdGl2ZVRleHQxLFxuICAuYWN0aXZlVGV4dDIsXG4gIC5hY3RpdmVUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBDb21wbGV0ZWQgdGFzayAqL1xuXG4gIC5kb25lMCxcbiAgLmRvbmUxLFxuICAuZG9uZTIsXG4gIC5kb25lMyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5kb25lVGFza0JvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuZG9uZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lVGV4dDAsXG4gIC5kb25lVGV4dDEsXG4gIC5kb25lVGV4dDIsXG4gIC5kb25lVGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi9cblxuICAuY3JpdDAsXG4gIC5jcml0MSxcbiAgLmNyaXQyLFxuICAuY3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuY3JpdEJrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmFjdGl2ZUNyaXQwLFxuICAuYWN0aXZlQ3JpdDEsXG4gIC5hY3RpdmVDcml0MixcbiAgLmFjdGl2ZUNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lQ3JpdDAsXG4gIC5kb25lQ3JpdDEsXG4gIC5kb25lQ3JpdDIsXG4gIC5kb25lQ3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuZG9uZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICB9XG5cbiAgLm1pbGVzdG9uZSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpO1xuICB9XG5cbiAgLm1pbGVzdG9uZVRleHQge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAuZG9uZUNyaXRUZXh0MCxcbiAgLmRvbmVDcml0VGV4dDEsXG4gIC5kb25lQ3JpdFRleHQyLFxuICAuZG9uZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmFjdGl2ZUNyaXRUZXh0MCxcbiAgLmFjdGl2ZUNyaXRUZXh0MSxcbiAgLmFjdGl2ZUNyaXRUZXh0MixcbiAgLmFjdGl2ZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGV4dENvbG9yLCIgICAgO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4iKX0sY2xhc3NEaWFncmFtOlBvLCJjbGFzc0RpYWdyYW0tdjIiOlBvLGNsYXNzOlBvLHN0YXRlRGlhZ3JhbTpJbyxzdGF0ZTpJbyxnaXQ6ZnVuY3Rpb24oKXtyZXR1cm4iXG4gIC5jb21taXQtaWQsXG4gIC5jb21taXQtbXNnLFxuICAuYnJhbmNoLWxhYmVsIHtcbiAgICBmaWxsOiBsaWdodGdyZXk7XG4gICAgY29sb3I6IGxpZ2h0Z3JleTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuIn0saW5mbzpmdW5jdGlvbigpe3JldHVybiIifSxwaWU6ZnVuY3Rpb24odCl7cmV0dXJuIi5waWVUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAyNXB4O1xuICAgIGZpbGw6ICIuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICB9XG4gIC5zbGljZSB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgICAvLyBmaWxsOiB3aGl0ZTtcbiAgfVxuICAubGVnZW5kIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gIH1cbiIpfSxlcjpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICIuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveE9kZCB7XG4gICAgZmlsbDogI2ZmZmZmZjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hFdmVuIHtcbiAgICBmaWxsOiAjZjJmMmYyO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgfVxuIil9LGpvdXJuZXk6ZnVuY3Rpb24odCl7cmV0dXJuIi5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICIuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAuZmFjZSB7XG4gICAgZmlsbDogI0ZGRjhEQztcbiAgICBzdHJva2U6ICM5OTk7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUwKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMSk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTIpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUzKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTUpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU2KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNyk6IiIsIjtcbiAgfVxuIil9fSxSbz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIiB7XG4gICAgZm9udC1mYW1pbHk6ICIuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQobi50ZXh0Q29sb3IsIlxuICB9XG5cbiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovXG5cbiAgLmVycm9yLWljb24ge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmVycm9yQmtnQ29sb3IsIjtcbiAgfVxuICAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmVycm9yVGV4dENvbG9yLCI7XG4gIH1cblxuICAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuICAuZWRnZS10aGlja25lc3MtdGhpY2sge1xuICAgIHN0cm9rZS13aWR0aDogMy41cHhcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG5cbiAgLmVkZ2UtcGF0dGVybi1kYXNoZWR7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMztcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLWRvdHRlZCB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMjtcbiAgfVxuXG4gIC5tYXJrZXIge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICB9XG4gIC5tYXJrZXIuY3Jvc3Mge1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gIH1cblxuICBzdmcge1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQobi5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQobi5mb250U2l6ZSwiO1xuICB9XG5cbiAgIikuY29uY2F0KGpvW3RdKG4pLCJcblxuICAiKS5jb25jYXQoZSwiXG5cbiAgIikuY29uY2F0KHQsIiB7IGZpbGw6IGFwYTt9XG4iKX07ZnVuY3Rpb24gWW8odCl7cmV0dXJuKFlvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIHpvPXt9LFVvPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goYy5kZWJ1ZygiRGlyZWN0aXZlIHR5cGU9Ii5jb25jYXQoZS50eXBlLCIgd2l0aCBhcmdzOiIpLGUuYXJncyksZS50eXBlKXtjYXNlImluaXQiOmNhc2UiaW5pdGlhbGl6ZSI6WyJjb25maWciXS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lLmFyZ3NbdF0mJigiZmxvd2NoYXJ0LXYyIj09PW4mJihuPSJmbG93Y2hhcnQiKSxlLmFyZ3Nbbl09ZS5hcmdzW3RdLGRlbGV0ZSBlLmFyZ3NbdF0pfSkpLGUuYXJncyx3dChlLmFyZ3MpO2JyZWFrO2Nhc2Uid3JhcCI6Y2FzZSJub3dyYXAiOnQmJnQuc2V0V3JhcCYmdC5zZXRXcmFwKCJ3cmFwIj09PWUudHlwZSk7YnJlYWs7ZGVmYXVsdDpjLndhcm4oIlVuaGFuZGxlZCBkaXJlY3RpdmU6IHNvdXJjZTogJyUleyIuY29uY2F0KGUudHlwZSwiOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZS5hcmdzP2UuYXJnczp7fSksIn0lJSIpLGUpfX07ZnVuY3Rpb24gJG8odCl7X2EodC5naXQpLG1lKHQuZmxvd2NoYXJ0KSxCbih0LmZsb3djaGFydCksdm9pZCAwIT09dC5zZXF1ZW5jZURpYWdyYW0mJnhyLnNldENvbmYoSSh0LnNlcXVlbmNlLHQuc2VxdWVuY2VEaWFncmFtKSkseHIuc2V0Q29uZih0LnNlcXVlbmNlKSxuaSh0LmdhbnR0KSx1aSh0LmNsYXNzKSxZaSh0LnN0YXRlKSxHaSh0LnN0YXRlKSxNYSh0LmNsYXNzKSxZYSh0LmNsYXNzKSxubyh0LmVyKSxCbyh0LmpvdXJuZXkpLE5hKHQuY2xhc3MpfWZ1bmN0aW9uIFdvKCl7fXZhciBWbz1PYmplY3QuZnJlZXplKHtyZW5kZXI6ZnVuY3Rpb24odCxlLG4scil7RXQoKTt2YXIgaT1lLGE9Vi5kZXRlY3RJbml0KGkpO2EmJnd0KGEpO3ZhciBvPV90KCk7aWYoZS5sZW5ndGg+by5tYXhUZXh0U2l6ZSYmKGk9ImdyYXBoIFRCO2FbTWF4aW11bSB0ZXh0IHNpemUgaW4gZGlhZ3JhbSBleGNlZWRlZF07c3R5bGUgYSBmaWxsOiNmYWEiKSx2b2lkIDAhPT1yKXIuaW5uZXJIVE1MPSIiLE9iamVjdChkLnNlbGVjdCkocikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImQiK3QpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrby5mb250RmFtaWx5KS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIix0KS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikuYXBwZW5kKCJnIik7ZWxzZXt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtzJiZzLnJlbW92ZSgpO3ZhciB1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkIit0KTt1JiZ1LnJlbW92ZSgpLE9iamVjdChkLnNlbGVjdCkoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsdCkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLmFwcGVuZCgiZyIpfXdpbmRvdy50eHQ9aSxpPWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC9zdHlsZS4qOlxTKiMuKjsvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSl9KSkpLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKX0pKSkucmVwbGFjZSgvI1x3KzsvZywoZnVuY3Rpb24odCl7dmFyIGU9dC5zdWJzdHJpbmcoMSx0Lmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3QoZSk/Iu+sgsKwwrAiK2UrIsK2w58iOiLvrILCsCIrZSsiwrbDnyJ9KSl9KGkpO3ZhciBsPU9iamVjdChkLnNlbGVjdCkoIiNkIit0KS5ub2RlKCksaD1WLmRldGVjdFR5cGUoaSksZz1sLmZpcnN0Q2hpbGQseT1nLmZpcnN0Q2hpbGQsdj0iIjtpZih2b2lkIDAhPT1vLnRoZW1lQ1NTJiYodis9IlxuIi5jb25jYXQoby50aGVtZUNTUykpLHZvaWQgMCE9PW8uZm9udEZhbWlseSYmKHYrPSJcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAiLmNvbmNhdChvLmZvbnRGYW1pbHksIn0iKSksdm9pZCAwIT09by5hbHRGb250RmFtaWx5JiYodis9IlxuOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAiLmNvbmNhdChvLmFsdEZvbnRGYW1pbHksIn0iKSksImZsb3djaGFydCI9PT1ofHwiZmxvd2NoYXJ0LXYyIj09PWh8fCJncmFwaCI9PT1oKXt2YXIgbT1iZShpKTtmb3IodmFyIGIgaW4gbSl2Kz0iXG4uIi5jb25jYXQoYiwiID4gKiB7ICIpLmNvbmNhdChtW2JdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IiksbVtiXS50ZXh0U3R5bGVzJiYodis9IlxuLiIuY29uY2F0KGIsIiB0c3BhbiB7ICIpLmNvbmNhdChtW2JdLnRleHRTdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKX12YXIgeD0obmV3IGYuYSkoIiMiLmNvbmNhdCh0KSxSbyhoLHYsby50aGVtZVZhcmlhYmxlcykpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtfLmlubmVySFRNTD14LGcuaW5zZXJ0QmVmb3JlKF8seSk7dHJ5e3N3aXRjaChoKXtjYXNlImdpdCI6by5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1vLmFycm93TWFya2VyQWJzb2x1dGUsX2Eoby5naXQpLGthKGksdCwhMSk7YnJlYWs7Y2FzZSJmbG93Y2hhcnQiOm8uZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLG1lKG8uZmxvd2NoYXJ0KSx4ZShpLHQsITEpO2JyZWFrO2Nhc2UiZmxvd2NoYXJ0LXYyIjpvLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxCbihvLmZsb3djaGFydCksTG4oaSx0LCExKTticmVhaztjYXNlInNlcXVlbmNlIjpvLnNlcXVlbmNlLmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLG8uc2VxdWVuY2VEaWFncmFtPyh4ci5zZXRDb25mKE9iamVjdC5hc3NpZ24oby5zZXF1ZW5jZSxvLnNlcXVlbmNlRGlhZ3JhbSkpLGNvbnNvbGUuZXJyb3IoImBtZXJtYWlkIGNvbmZpZy5zZXF1ZW5jZURpYWdyYW1gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbmZpZy5zZXF1ZW5jZWAuIFBsZWFzZSB1cGRhdGUgeW91ciBtZXJtYWlkIGNvbmZpZy4iKSk6eHIuc2V0Q29uZihvLnNlcXVlbmNlKSx4ci5kcmF3KGksdCk7YnJlYWs7Y2FzZSJnYW50dCI6by5nYW50dC5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxuaShvLmdhbnR0KSxyaShpLHQpO2JyZWFrO2Nhc2UiY2xhc3MiOm8uY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1vLmFycm93TWFya2VyQWJzb2x1dGUsdWkoby5jbGFzcyksbGkoaSx0KTticmVhaztjYXNlImNsYXNzRGlhZ3JhbSI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxmaShvLmNsYXNzKSxkaShpLHQpO2JyZWFrO2Nhc2Uic3RhdGUiOm8uY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1vLmFycm93TWFya2VyQWJzb2x1dGUsWWkoby5zdGF0ZSksemkoaSx0KTticmVhaztjYXNlInN0YXRlRGlhZ3JhbSI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxHaShvLnN0YXRlKSxxaShpLHQpO2JyZWFrO2Nhc2UiaW5mbyI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxNYShvLmNsYXNzKSxPYShpLHQscC52ZXJzaW9uKTticmVhaztjYXNlInBpZSI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxZYShvLnBpZSksemEoaSx0LHAudmVyc2lvbik7YnJlYWs7Y2FzZSJlciI6bm8oby5lcikscm8oaSx0LHAudmVyc2lvbik7YnJlYWs7Y2FzZSJqb3VybmV5IjpCbyhvLmpvdXJuZXkpLExvKGksdCxwLnZlcnNpb24pfX1jYXRjaChlKXt0aHJvdyBCYSh0LHAudmVyc2lvbiksZX1PYmplY3QoZC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KHQsJyJdJykpLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgaz1PYmplY3QoZC5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLmlubmVySFRNTDtpZihjLmRlYnVnKCJjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSIsby5hcnJvd01hcmtlckFic29sdXRlKSxvLmFycm93TWFya2VyQWJzb2x1dGUmJiJmYWxzZSIhPT1vLmFycm93TWFya2VyQWJzb2x1dGV8fChrPWsucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXCguKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJywiZyIpKSxrPWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC/vrILCsMKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYjIn0pKSkucmVwbGFjZSgv76yCwrAvZywoZnVuY3Rpb24oKXtyZXR1cm4iJiJ9KSkpLnJlcGxhY2UoL8K2w58vZywoZnVuY3Rpb24oKXtyZXR1cm4iOyJ9KSl9KGspLHZvaWQgMCE9PW4pc3dpdGNoKGgpe2Nhc2UiZmxvd2NoYXJ0IjpjYXNlImZsb3djaGFydC12MiI6bihrLFh0LmJpbmRGdW5jdGlvbnMpO2JyZWFrO2Nhc2UiZ2FudHQiOm4oayxRci5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImNsYXNzIjpjYXNlImNsYXNzRGlhZ3JhbSI6bihrLHNuLmJpbmRGdW5jdGlvbnMpO2JyZWFrO2RlZmF1bHQ6bihrKX1lbHNlIGMuZGVidWcoIkNCID0gdW5kZWZpbmVkISIpO3ZhciB3PU9iamVjdChkLnNlbGVjdCkoIiNkIit0KS5ub2RlKCk7cmV0dXJuIG51bGwhPT13JiYiZnVuY3Rpb24iPT10eXBlb2Ygdy5yZW1vdmUmJk9iamVjdChkLnNlbGVjdCkoIiNkIit0KS5ub2RlKCkucmVtb3ZlKCksa30scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9Vi5kZXRlY3RJbml0KHQpO2UmJmMuZGVidWcoInJlaW5pdCAiLGUpO3ZhciBuLHI9Vi5kZXRlY3RUeXBlKHQpO3N3aXRjaChjLmRlYnVnKCJUeXBlICIrcikscil7Y2FzZSJnaXQiOihuPWxhLmEpLnBhcnNlci55eT1jYTticmVhaztjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOlh0LmNsZWFyKCksKG49SnQuYSkucGFyc2VyLnl5PVh0O2JyZWFrO2Nhc2Uic2VxdWVuY2UiOihuPVduLmEpLnBhcnNlci55eT1vcjticmVhaztjYXNlImdhbnR0Ijoobj1rci5hKS5wYXJzZXIueXk9UXI7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOihuPWFpLmEpLnBhcnNlci55eT1zbjticmVhaztjYXNlInN0YXRlIjpjYXNlInN0YXRlRGlhZ3JhbSI6KG49T2kuYSkucGFyc2VyLnl5PUFpO2JyZWFrO2Nhc2UiaW5mbyI6Yy5kZWJ1ZygiaW5mbyBpbmZvIGluZm8iKSwobj1TYS5hKS5wYXJzZXIueXk9VGE7YnJlYWs7Y2FzZSJwaWUiOmMuZGVidWcoInBpZSIpLChuPWphLmEpLnBhcnNlci55eT1GYTticmVhaztjYXNlImVyIjpjLmRlYnVnKCJlciIpLChuPXFhLmEpLnBhcnNlci55eT1IYTticmVhaztjYXNlImpvdXJuZXkiOmMuZGVidWcoIkpvdXJuZXkiKSwobj1hby5hKS5wYXJzZXIueXk9cG99cmV0dXJuIG4ucGFyc2VyLnl5LmdyYXBoVHlwZT1yLG4ucGFyc2VyLnl5LnBhcnNlRXJyb3I9ZnVuY3Rpb24odCxlKXt0aHJvd3tzdHI6dCxoYXNoOmV9fSxuLnBhcnNlKHQpLG59LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuLHIpe3RyeXtpZih2b2lkIDAhPT1lKXN3aXRjaChlPWUudHJpbSgpLG4pe2Nhc2Uib3Blbl9kaXJlY3RpdmUiOnpvPXt9O2JyZWFrO2Nhc2UidHlwZV9kaXJlY3RpdmUiOnpvLnR5cGU9ZS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UiYXJnX2RpcmVjdGl2ZSI6em8uYXJncz1KU09OLnBhcnNlKGUpO2JyZWFrO2Nhc2UiY2xvc2VfZGlyZWN0aXZlIjpVbyh0LHpvLHIpLHpvPW51bGx9fWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBzZXF1ZW5jZURpYWdyYW0gZGlyZWN0aXZlOiAiLmNvbmNhdChlLCIgamlzb24gY29udGV4dDogIikuY29uY2F0KG4pKSxjLmVycm9yKHQubWVzc2FnZSl9fSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3QmJnQuZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXMmJnQudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLGR0PUkoe30sdCksdCYmdC50aGVtZSYmaHRbdC50aGVtZV0/dC50aGVtZVZhcmlhYmxlcz1odFt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKTp0JiYodC50aGVtZVZhcmlhYmxlcz1odC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKTt2YXIgZT0ib2JqZWN0Ij09PVlvKHQpP2Z1bmN0aW9uKHQpe3JldHVybiB5dD1JKHt9LGd0KSx5dD1JKHl0LHQpLHQudGhlbWUmJih5dC50aGVtZVZhcmlhYmxlcz1odFt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSksbXQ9YnQoeXQsdnQpLHl0fSh0KTp4dCgpOyRvKGUpLHUoZS5sb2dMZXZlbCl9LHJlaW5pdGlhbGl6ZTpXbyxnZXRDb25maWc6X3Qsc2V0Q29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBJKG10LHQpLF90KCl9LGdldFNpdGVDb25maWc6eHQsdXBkYXRlU2l0ZUNvbmZpZzpmdW5jdGlvbih0KXtyZXR1cm4geXQ9SSh5dCx0KSxidCh5dCx2dCkseXR9LHJlc2V0OmZ1bmN0aW9uKCl7RXQoKX0sZ2xvYmFsUmVzZXQ6ZnVuY3Rpb24oKXtFdCgpLCRvKF90KCkpfSxkZWZhdWx0Q29uZmlnOmd0fSk7dShfdCgpLmxvZ0xldmVsKSxFdChfdCgpKTt2YXIgSG89Vm8sR289ZnVuY3Rpb24oKXtxby5zdGFydE9uTG9hZD9Iby5nZXRDb25maWcoKS5zdGFydE9uTG9hZCYmcW8uaW5pdCgpOnZvaWQgMD09PXFvLnN0YXJ0T25Mb2FkJiYoYy5kZWJ1ZygiSW4gc3RhcnQsIG5vIGNvbmZpZyIpLEhvLmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiZxby5pbml0KCkpfTsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYKLyohCiAgICogV2FpdCBmb3IgZG9jdW1lbnQgbG9hZGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZXhlY3V0aW9uCiAgICovCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oKXtHbygpfSksITEpO3ZhciBxbz17c3RhcnRPbkxvYWQ6ITAsaHRtbExhYmVsczohMCxtZXJtYWlkQVBJOkhvLHBhcnNlOkhvLnBhcnNlLHJlbmRlcjpIby5yZW5kZXIsaW5pdDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9SG8uZ2V0Q29uZmlnKCk7YXJndW1lbnRzLmxlbmd0aD49Mj8oCi8qISBzZXF1ZW5jZSBjb25maWcgd2FzIHBhc3NlZCBhcyAjMSAqLwp2b2lkIDAhPT1hcmd1bWVudHNbMF0mJihxby5zZXF1ZW5jZUNvbmZpZz1hcmd1bWVudHNbMF0pLHQ9YXJndW1lbnRzWzFdKTp0PWFyZ3VtZW50c1swXSwiZnVuY3Rpb24iPT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0/KGU9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYy5kZWJ1ZygiQ2FsbGJhY2sgZnVuY3Rpb24gZm91bmQiKSk6dm9pZCAwIT09ci5tZXJtYWlkJiYoImZ1bmN0aW9uIj09dHlwZW9mIHIubWVybWFpZC5jYWxsYmFjaz8oZT1yLm1lcm1haWQuY2FsbGJhY2ssYy5kZWJ1ZygiQ2FsbGJhY2sgZnVuY3Rpb24gZm91bmQiKSk6Yy5kZWJ1ZygiTm8gQ2FsbGJhY2sgZnVuY3Rpb24gZm91bmQiKSksdD12b2lkIDA9PT10P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tZXJtYWlkIik6InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCk6dCBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlP1t0XTp0LGMuZGVidWcoIlN0YXJ0IE9uIExvYWQgYmVmb3JlOiAiK3FvLnN0YXJ0T25Mb2FkKSx2b2lkIDAhPT1xby5zdGFydE9uTG9hZCYmKGMuZGVidWcoIlN0YXJ0IE9uIExvYWQgaW5uZXI6ICIrcW8uc3RhcnRPbkxvYWQpLEhvLnVwZGF0ZVNpdGVDb25maWcoe3N0YXJ0T25Mb2FkOnFvLnN0YXJ0T25Mb2FkfSkpLHZvaWQgMCE9PXFvLmdhbnR0Q29uZmlnJiZIby51cGRhdGVTaXRlQ29uZmlnKHtnYW50dDpxby5nYW50dENvbmZpZ30pO2Zvcih2YXIgYSxvPVYuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKS5uZXh0LHM9ZnVuY3Rpb24ocil7dmFyIHM9dFtyXTsKLyohIENoZWNrIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkICovaWYocy5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIikpcmV0dXJuImNvbnRpbnVlIjtzLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCEwKTt2YXIgdT0ibWVybWFpZC0iLmNvbmNhdChvKCkpO2E9aShhPXMuaW5uZXJIVE1MKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTt2YXIgbD1WLmRldGVjdEluaXQoYSk7bCYmYy5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGwpO3RyeXtIby5yZW5kZXIodSxhLChmdW5jdGlvbih0LG4pe3MuaW5uZXJIVE1MPXQsdm9pZCAwIT09ZSYmZSh1KSxuJiZuKHMpfSkscyl9Y2F0Y2godCl7Yy53YXJuKCJTeW50YXggRXJyb3IgcmVuZGVyaW5nIiksYy53YXJuKHQpLG4ucGFyc2VFcnJvciYmbi5wYXJzZUVycm9yKHQpfX0sdT0wO3U8dC5sZW5ndGg7dSsrKXModSl9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dm9pZCAwIT09dC5tZXJtYWlkJiYodm9pZCAwIT09dC5tZXJtYWlkLnN0YXJ0T25Mb2FkJiYocW8uc3RhcnRPbkxvYWQ9dC5tZXJtYWlkLnN0YXJ0T25Mb2FkKSx2b2lkIDAhPT10Lm1lcm1haWQuaHRtbExhYmVscyYmKHFvLmh0bWxMYWJlbHM9dC5tZXJtYWlkLmh0bWxMYWJlbHMpKSxIby5pbml0aWFsaXplKHQpfSxjb250ZW50TG9hZGVkOkdvfTtlLmRlZmF1bHQ9cW99XSkuZGVmYXVsdH0pKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVybWFpZC5taW4uanMubWFw`; |